本文章是由機器翻譯。

程式設計師雜談

Growl 通知系統:愈簡單愈好

Ted Neward

Ted Neward在得到激起了周圍的使用者介面和使用者體驗做戲,你常常忽略這一事實有時最好的 UI 不是時髦、 最耀眼的 HTML/CSS/JavaScript 或令人吃驚的動畫,但藏在角落裡一個簡單的消息顯示。很多的會發生什麼,特別是與企業系統,是"無頭"種類的不帶使用者介面的操作。

您仍然需要給使用者,不過,伸出手,問他要執行的操作的方法。您可以構建一個簡單的小小的 UI 實用程式給你,或者你可以利用別人的公用程式,它已經建成和調試,可能有更多的功能比您要包括。

咆哮基礎知識

咆哮 (可供下載的在 Windows growlforwindows.com) 是 Windows 埠的 Mac 相同名稱的實用程式和被譽為"最終通知系統"。從根本上說,它不是難理解。它駐留在您的機器,躲在通知託盤右下角的 Windows 桌面視圖,並偵聽通知。

一條消息時,它會彈出一個小訊息方塊來提醒使用者。然後可以作為加密或密碼保護,以避免網路嗅探器觀看交通跨網路發送這些郵件。從根本上說,它是關於向使用者提供通知訊息,像你用來看看回來時即時消息傳遞是熱,MSN Messenger 是一件事的"烤麵包機"消息。就這樣,在最大程度。

請的記住並不是所有實用程式開發人員和解決方案必須是這些大型、 大尺度的建築奇跡。事實上,有時最優雅問題的解決辦法往往是一個小型、 奇集中式的元件,如下保持它簡單,愚蠢 (吻) 原則。咆哮做一件事情,做得不錯:它可以讓你通知使用者 (或多個使用者,如果你開始思考這橫跨網路) 的事情發生,否則會過去的他。

當我第一次介紹的咆哮聲時,例如,它是作為橡木生成系統的一部分。這是基本上是"連續生成"系統。源的檔被修改了,任何時間它會觸發重新生成專案。這一問題,當然,是如果重建不是由開發商前面-和-中心盯著Visual Studio被踢掉的東西,怎麼會,開發人員知道生成問題呢?生成系統將通知發送到的咆哮聲,和它暗中將生成結果顯示給使用者,藏在角落裡不會要求注意或它帶到了不管他是。

咆哮不用太多想的其他情況下,此功能會很有用,內部和外部開發人員-­頭腦上下文。對於開發者,這可以很有用當長時間運行任務 (如生成、 資料載入、 ETL 過程等等) 正在執行的背景,給你提個醒,當他們完成。給系統管理員,這可以為嚴重錯誤條件需要接近即時人為干預,但不保證完全終止操作非常有用。

對使用者而言,這可以是一大堆的東西,包括一種"推送通知"系統在商業網路內部的應用程式的有用工具,如當特定的資料記錄,使用者正在更新關心 (那些目前他正在,例如),或系統 (啟動、 關機、 系統範圍的使用者的郵件,無論) 內發生的事件時需要推到使用者的眼睛。即使網路的遊戲可以使用它,告訴一名運動員當它是他的了。

咆哮聲還可以""的消息轉發到其他電腦。如果一條消息,註定要達成你的眼睛找不你因為你是在午餐上,您可以配置以將該郵件發送到您的手機、 平板電腦或其他電腦群組的咆哮聲。你還可以在發送電子郵件消息或推特 (公開或直接消息) 到一個帳戶。使用者可以配置 (或不) 播放聲音的咆哮聲在每個註冊-應用程式的基礎上設置的這些通知優先順序在每個註冊-應用程式的基礎上,等等。

咆哮聲可能不是很多,但它是一個很有用"不太"種的工具。對它的程式設計是簡單得可笑。一旦您已經安裝了的咆哮聲,你可以發送的咆哮聲通知 (從批次檔或 Windows PowerShell 腳本,例如) 使用命令列的"growlnotify"工具安裝在咆哮的 Windows 資料夾中。序幕一使用以下命令列 (假設 Windows C:\Program Files\Growl,預設的咆哮聲安裝目錄中,對您的路徑):

growlnotify "This is a test message"

假設的咆哮聲已成功安裝,它會回應在命令列中使用"成功通知已發送的資訊"。一個小小的藍色訊息視窗將在您的桌面的角彈出。 在系統通知送紙盒,檢查配置選項,包括能夠轉發到其他機器的郵件中打開咆哮圖示並使用"/?"命令列參數,探討如何通過網路發送的咆哮聲通知。 實驗前進一步,閱讀,因為這些選項的某些選項看到這裡很多直接反映可用的 Api 來編寫代碼使用的咆哮聲通知時。

SDK 咆哮

咆哮 SDK 是薄薄一層在咆哮網路運輸協定 (GNTP),強烈讓人聯想到 HTTP 的 TCP/IP 有線協定。 給定的咆哮聲一直在附近一段時間,它不是令人吃驚的是有幾個圖書館以抽象的該協定的細節。 這些被統稱為"咆哮連接"圖書館。

同一 Web 網站 (growlforwindows.com),你得到的咆哮聲為 Windows 位也從已連結到 Microsoft.NET 框架庫的咆哮聲,以及 c + +、 COM 和甚至SQL Server連結-到-咆哮圖書館。 (想想那一刻的最後一個。 它是一個包讓您使用SQL Server腳本伸出並將通知發送到感興趣的締約方,例如 Dba)。

一旦咆哮.NET 庫被拉扯,打開.ZIP 檔案。 它包含一個示例 C# 應用程式和樣例Visual Basic的.NET 應用程式,但您具體想要什麼"庫"資料夾中的兩個.NET 程式集:Growl.CoreLibrary.dll 和 Growl.Connector.dll。 (這些是也作為的一部分安裝的咆哮聲中咆哮的主目錄,如果 SDK 下載獲取丟失某個地方。)在任何.NET 專案中,只需引用這兩個庫程式集,以及東西都好去。

連接和註冊 A 的咆哮聲用戶端需要之前它可以發送通知,註冊的咆哮聲 — — 的咆哮聲將忽略任何它接收來自未註冊應用程式的通知。 幸運的是,不只是這一一次性的一步,但 SDK 使瑣碎。 只需創建一個 GrowlConnector 物件,該物件 (包括目標主機名稱和埠如果伸出到遠端電腦,如果需要),然後包括一些簡單的資料,有關正在註冊的應用程式:

var connector = new GrowlConnector();
var thisApp = new Application("GrowlCL");
thisApp.Icon = @".
\app.png";

圖示可以是檔案名、 URL 或位元組陣列。 (這兩個類,順便說一句,來自 GrowlConnector 命名空間)。

如按類型分組的咆哮聲認為的通知。 Web 瀏覽器可能會發送"檔開始下載"通知,"已完成下載的檔"的通知等。 遊戲可能會發送"新遊戲提供了,""玩家辭職了,""輪到你,""其他播放機打開已完成"和其他類似的通知。 咆哮想要註冊這些通知類型,這樣,使用者可以配置將如何處理每種通知的應用程式。 新的咆哮聲用戶端需要定義其通知類型,然後將它們傳遞給 GrowlConnector.Register 方法以完成註冊:

// Two kinds of messages: insults and compliments
var insultType = new NotificationType("INSULT", "SICK BURN!");
var compType = new NotificationType("COMPLIMENT", "Nice message");
connector.Register(thisApp, new NotificationType[] { insultType, compType });

第一個參數是通知的字串,您的代碼將使用以指示類型。 第二是將會在使用者的咆哮聲應用程式中查看時顯示的字串。 應用程式物件,象 NotificationType 也有一個圖示屬性。 這允許不同的圖示來顯示以及在每種通知類型的基礎上消息的文本。 它不是必要的但看上去更加精美,最終產品有一定的説明。

請注意是否運行上述代碼,則的咆哮聲,將彈出一條消息說,"GrowlCL 已註冊"是否這是首次與這台機器上的咆哮聲 app 已通報了這個應用程式。

通知一旦應用程式和其通知類型註冊的咆哮聲,它是一個很簡單的問題,發送通知。 只需創建一個通知物件,通過在應用程式名稱,通知類型字串,可選識別碼來唯一地標識此的通知 (為什麼您可能想我會給一會兒),標題和正文發送,和然後將的通知物件發送到使用 Notify 方法的咆哮聲中:

var notification = new Notification("GrowlCL", "INSULT", null, 
  "YO MAMA!",  "Your mama is so fat, she dropped an apple " + 
  "and it entered orbit around her.");
connector.Notify(notification);

時的咆哮聲應用程式接收的消息,它就會在螢幕的 (預設) 角彈出。

是的它真的是那麼容易。

**你現在可以讀我嗎?**有時你想知道使用者在通知做了什麼。 她做了只是關閉它不看,或她實際讀取的是消息嗎? 這其實是相當重要的在話務中心、 監事需要知道如果雇員事實上正在閱讀每天向上銷售的特別優惠,作為所需的地方。

咆哮允許此通過註冊回檔,可以是.NET 事件處理常式方法或 WebHooks — — 的咆哮聲將發佈包含資料的發送的通知,上述 ID 參數如 HTTP 要求的 Url。 在事件的咆哮聲連接器庫不能到達的有針對性的咆哮聲實例,它就會發出一個錯誤,但只有如果用戶端代碼已註冊事件處理常式 (ErrorResponse) 的 GrowlConnector 物件上。

事件處理常式方法將收到錯誤代碼和錯誤,看起來幾乎完全相同的 HTTP 錯誤代碼的描述和說明,使它們非常不言自明。 咆哮連接器 docs ("Windows 應用程式英特的咆哮聲­偏向指南"中下載 SDK.zip) 有一個表,其中列出了所有這些錯誤,但他們都非常直截了當 ("200-超時,""201-網路故障"等等)。

只是這麼簡單

咆哮聲不會贏得任何獎項的"最複雜的建築"。如果它幾乎完全可以描述在單一雜誌文章中,那麼它絕對是非常簡單、 簡單、 低表面-­地區種工具。 總括來說,可能是它最大的力量。 很坦率地說,它是任何技術專家庫或工具所能給予的最好讚美 — — 只是,便於使用。 編碼愉快 !

Ted Neward 是在 iTrellis,一家諮詢服務公司 CTO。他已寫一百多篇和創作和合著十幾本書,其中包括"專業 F # 2.0"(Wrox,2010年)。他是 C# 最有價值球員,並在世界各地的會議上講話。他徵求意見,並定期導師 — — 聯繫到他在 ted@tedneward.comted@itrellis.com 如果你感興趣讓他來與您的團隊一起工作和閱讀他的博客在 blogs.tedneward.com

由於以下的技術專家對本文的審閱:Brian鄧甯頓 (獨立顧問)