Get tinyURL from your C# code

最近在Implement的時候,發現NPlurk能傳送的字串似乎比直接再plurk上面打的字串還少上許多(大概少上10~15個字元),看起來去使用TinyURL在code裡面也是勢在必行的。

參考網址: http://www.dotblogs.com.tw/jimmyyu/archive/2010/07/09/create-short-url-via-tinyurl-api.aspx
不過現在又發現Plurk無法顯示tinyURL的圖片,所以這些部分看起來得再做些調整才可以了。

WLWPlurk 第一版發布

摘要: 這是在Window Live Writer上面發布plurk的一個plugin.

雖然是最簡單的code,但是還是決定發布出來。有需要的人可以到codeplex的http://wlwplurk.codeplex.com/ 去下載第一版source code.

P.S.: 我發現我架設codeplex的時間都比我整理出第一版WLWPlurk還要費工夫。

WLW Plurk 相關資訊

幾經尋找~總算找到一個好用的plurk API使用軟體。不過在此之前還是有一些事情得先做。

  1. 申請Plurk API Key: 到此去申請一個你自己使用的plurk API key.

  2. NPlurk去下載相關source code吧~ 這個超好用的

測試過後,已經可以正常的把文章發不到Plurk去。算是好用吧(?)

測試結果: http://www.plurk.com/p/7qp2eq 是成功發文。

不過由於login架構尚未完成,現在整個plugin 也只有我自己可以使用。感覺有點弱。還有以下的工作項目需要完成:

不過有人需要我也是可以幫你客制一個先給你用

工作日誌2010/09/08: 關於PublishNotificationHook

自從寫完第一個Hello World之後,本來緊接著就打算繼續把PublishNotificationHook放入原來的第一個Hello World之中。

參考網路這篇文章(The New Live Writer SDK)裡面的source code,單純的把code加入之後,就像以下的狀態。

<div><!--<br></br><br></br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br></br>http://www.CodeHighlighter.com/<br></br><br></br>--><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">using</span><span style="color:#000000;"> WindowsLive.Writer.Api;<br></br></span><span style="color:#008080;"> 2</span> <span style="color:#000000;"><br></br></span><span style="color:#008080;"> 3</span> <span style="color:#000000;"></span><span style="color:#0000ff;">namespace</span><span style="color:#000000;"> LiveWriterHelloWorld<br></br></span><span style="color:#008080;"> 4</span> <span style="color:#000000;">{<br></br></span><span style="color:#008080;"> 5</span> <span style="color:#000000;">    [WriterPluginAttribute<br></br></span><span style="color:#008080;"> 6</span> <span style="color:#000000;">      (</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;2f437bf1</span><span style="color:#000000;">-</span><span style="color:#000000;">fe57</span><span style="color:#000000;">-</span><span style="color:#000000;">41c8</span><span style="color:#000000;">-</span><span style="color:#000000;">931a</span><span style="color:#000000;">-</span><span style="color:#000000;">d20066ea174e</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;, </span><span style="color:#000000;">&</span><span style="color:#000000;">quot;Hello World</span><span style="color:#000000;">!</span><span style="color:#800080;">2</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;,<br></br></span><span style="color:#008080;"> 7</span> <span style="color:#000000;">        PublisherUrl </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">&</span><span style="color:#000000;">quot;http:</span><span style="color:#008000;">//</span><span style="color:#008000;">wlwextensionlearning.blogspot.com/&quot;,</span><span style="color:#008000;"><br></br></span><span style="color:#008080;"> 8</span> <span style="color:#008000;"></span><span style="color:#000000;">        Description </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">&</span><span style="color:#000000;">quot;Going to 2nd testing code</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;)]<br></br></span><span style="color:#008080;"> 9</span> <span style="color:#000000;">    [InsertableContentSourceAttribute(</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;Hello World</span><span style="color:#000000;">!&</span><span style="color:#000000;">quot;, SidebarText </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">&</span><span style="color:#000000;">quot;Hello World</span><span style="color:#000000;">!&</span><span style="color:#000000;">quot;)]<br></br></span><span style="color:#008080;">10</span> <span style="color:#000000;">    </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> HelloWorldPlugin : ContentSource<br></br></span><span style="color:#008080;">11</span> <span style="color:#000000;">    {<br></br></span><span style="color:#008080;">12</span> <span style="color:#000000;">        </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> DialogResult CreateContent(IWin32Window dialogOwner, </span><span style="color:#0000ff;">ref</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> content)<br></br></span><span style="color:#008080;">13</span> <span style="color:#000000;">        {<br></br></span><span style="color:#008080;">14</span> <span style="color:#000000;">            content </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">&</span><span style="color:#000000;">quot;</span><span style="color:#000000;">&</span><span style="color:#000000;">lt;b</span><span style="color:#000000;">&</span><span style="color:#000000;">gt;Hello World</span><span style="color:#000000;">!&</span><span style="color:#000000;">lt;</span><span style="color:#000000;">/</span><span style="color:#000000;">b</span><span style="color:#000000;">&</span><span style="color:#000000;">gt;</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;;<br></br></span><span style="color:#008080;">15</span> <span style="color:#000000;"><br></br></span><span style="color:#008080;">16</span> <span style="color:#000000;">            </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> DialogResult.OK;<br></br></span><span style="color:#008080;">17</span> <span style="color:#000000;">        }<br></br></span><span style="color:#008080;">18</span> <span style="color:#000000;">    }<br></br></span><span style="color:#008080;">19</span> <span style="color:#000000;">    </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> PublishNotificationExample : PublishNotificationHook<br></br></span><span style="color:#008080;">20</span> <span style="color:#000000;">    {<br></br></span><span style="color:#008080;">21</span> <span style="color:#000000;">        </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> </span><span style="color:#0000ff;">bool</span><span style="color:#000000;"> OnPrePublish(IWin32Window dialogOwner,<br></br></span><span style="color:#008080;">22</span> <span style="color:#000000;">        IProperties properties, IPublishingContext publishingContext,<br></br></span><span style="color:#008080;">23</span> <span style="color:#000000;">        </span><span style="color:#0000ff;">bool</span><span style="color:#000000;"> publish)<br></br></span><span style="color:#008080;">24</span> <span style="color:#000000;">        {<br></br></span><span style="color:#008080;">25</span> <span style="color:#000000;">            </span><span style="color:#008000;">//</span><span style="color:#008000;"> Check the post contents to see if liveside appears, if it does,             </span><span style="color:#008000;">//</span><span style="color:#008000;"> return true (publish), <br></br></span><span style="color:#008080;">26</span> <span style="color:#008000;">            </span><span style="color:#008000;">//</span><span style="color:#008000;"> if it doesn't, return false (cancel publish)</span><span style="color:#008000;"><br></br></span><span style="color:#008080;">27</span> <span style="color:#008000;"></span><span style="color:#000000;">            </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> publishingContext.PostInfo.Contents.ToLower().Contains(</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;liveside</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;)
;<br></br></span><span style="color:#008080;">28</span> <span style="color:#000000;">        }<br></br></span><span style="color:#008080;">29</span> <span style="color:#000000;">        </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> </span><span style="color:#0000ff;">void</span><span style="color:#000000;"> OnPostPublish(IWin32Window dialogOwner,<br></br></span><span style="color:#008080;">30</span> <span style="color:#000000;">               IProperties properties, IPublishingContext publishingContext,<br></br></span><span style="color:#008080;">31</span> <span style="color:#000000;">                </span><span style="color:#0000ff;">bool</span><span style="color:#000000;"> publish)<br></br></span><span style="color:#008080;">32</span> <span style="color:#000000;">        {<br></br></span><span style="color:#008080;">33</span> <span style="color:#000000;">            </span><span style="color:#008000;">//</span><span style="color:#008000;"> If this post is a draft (false), don't do anything<br></br></span><span style="color:#008080;">34</span> <span style="color:#008000;">            </span><span style="color:#008000;">//</span><span style="color:#008000;"> if it's an actual publish, then publish = true;</span><span style="color:#008000;"><br></br></span><span style="color:#008080;">35</span> <span style="color:#008000;"></span><span style="color:#000000;">            </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (</span><span style="color:#000000;">!</span><span style="color:#000000;">publish)<br></br></span><span style="color:#008080;">36</span> <span style="color:#000000;">                </span><span style="color:#0000ff;">return</span><span style="color:#000000;">;<br></br></span><span style="color:#008080;">37</span> <span style="color:#000000;"><br></br></span><span style="color:#008080;">38</span> <span style="color:#000000;">            </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> updateTwitter </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;">.Format(</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;{</span><span style="color:#800080;">0</span><span style="color:#000000;">} </span><span style="color:#000000;">-</span><span style="color:#000000;"> {</span><span style="color:#800080;">1</span><span style="color:#000000;">}</span><span style="color:#000000;">&</span><span style="color:#000000;">quot;,<br></br></span><span style="color:#008080;">39</span> <span style="color:#000000;">                publishingContext.PostInfo.Title,<br></br></span><span style="color:#008080;">40</span> <span style="color:#000000;">                publishingContext.PostInfo.Permalink);<br></br></span><span style="color:#008080;">41</span> <span style="color:#000000;"><br></br></span><span style="color:#008080;">42</span> <span style="color:#000000;">            </span><span style="color:#008000;">//</span><span style="color:#008000;"> Code to update Twitter</span><span style="color:#008000;"><br></br></span><span style="color:#008080;">43</span> <span style="color:#008000;"></span><span style="color:#000000;">        }<br></br></span><span style="color:#008080;">44</span> <span style="color:#000000;">    }<br></br></span><span style="color:#008080;">45</span> <span style="color:#000000;">}</span></div>

編譯完之後,會發現無法收到callback event… 持續探討(The New Live Writer SDK) 的原始碼之後。 發現問題可能出在

<div><!--<br></br><br></br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br></br>http://www.CodeHighlighter.com/<br></br><br></br>--><span style="color:#008080;"> 1</span> <span style="color:#000000;">    </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> HelloWorldPlugin : ContentSource<br></br></span><span style="color:#008080;"> 2</span> <span style="color:#000000;">    {<br></br></span><span style="color:#008080;"> 3</span> <span style="color:#000000;">        </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> DialogResult CreateContent(IWin32Window dialogOwner, </span><span style="color:#0000ff;">ref</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> content)<br></br></span><span style="color:#008080;"> 4</span> <span style="color:#000000;">        {<br></br></span><span style="color:#008080;"> 5</span> <span style="color:#000000;">            content </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;"><b>Hello World!</b></span><span style="color:#800000;">"</span><span style="color:#000000;">;<br></br></span><span style="color:#008080;"> 6</span> <span style="color:#000000;"><br></br></span><span style="color:#008080;"> 7</span> <span style="color:#000000;">            </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> DialogResult.OK;<br></br></span><span style="color:#008080;"> 8</span> <span style="color:#000000;">        }<br></br></span><span style="color:#008080;"> 9</span> <span style="color:#000000;">    }<br></br></span><span style="color:#008080;">10</span> <span style="color:#000000;"></span></div>

也就是主要是因為有implement ContentSource 的關係,造成無法收到相關的event。 這個主要原因可能有待詳細查看。當你改好並且把DLL 複製好之後你就會在你的blog 的plugin上面查看到。

WLW0908.jpg

以上..

第一個Windows Live Writer plugin "Hello World" (sample code)

這裡敘述的Hello Wolrd主要是利用Ben Hall的一篇文章Windows Live Writer Plugin - Hello World!。 (Related code and article refer from this)

必要工具:

  • Visual Studio (這裡用的是2005)

  • 安裝過的Window Live Writer (這裡裝的是最新版B14.0.8089)

詳細流程:

  • 開啟Visual Studio(2005),選取C# Project的Class Library。

WLW_01.jpg

  • 講兩個需要用的reference 加入參考,首先打開”References” 按下右鍵。”Add References”

WLW_02.jpg

  • 加入一個”System.Windows.Forms”在COM裡面,此外再加入一個額外Windows Live Writer API DLL。選取”Browse”然後點選C:Program FilesWindows LiveWriterWindowsLive.Writer.Api.dll。

WLW_03.jpg

  • 加入以下的source code. (This source modify from Ben Hall’s article)

    using System.Windows.Forms;
    </br>using WindowsLive.Writer.Api;
    </br>
    </br>namespace LiveWriterHelloWorld
    </br>{
    </br> [WriterPluginAttribute
    </br> (“2f437bf1-fe57-41c8-931a-d20066ea174e”, “Hello World!”,
    </br> PublisherUrl = “http://wlwextensionlearning.blogspot.com/”,
    </br> Description = “Insert Hello World! into the blog post”)]
    </br> [InsertableContentSourceAttribute(“Hello World!”, SidebarText = “Hello World!”)]
    </br> public class HelloWorldPlugin : ContentSource
    </br> {
    </br> public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
    </br> {
    </br> content = “Hello World!”;
    </br>
    </br> return DialogResult.OK;
    </br> }
    </br> }
    </br>}
    </br>

  • 複製DLL到C:Program FilesWindows LiveWriterPlugins 然後重新啟動Windows Live Writer應該就會看到這個新的plugin.

WLW_04.jpg

  • 直接按下去就會跑出 “Hello World”

參考文章:

讀書心得-自慢2:主管私房學─小職員出頭天

> > 暢銷書《自慢---社長的成長學習筆記》一書作者何飛鵬的最新力作,也是何飛鵬人生三部曲:工作者、主管、創業者的第二部曲:《自慢2:主管私房學》 > > > > 小職員永遠被人管,主管才可以縱情發揮;小職員受制於人,主管則可以領團隊的薪水,因此,升成主管,是小職員出頭天的最佳途徑。本書內容涵括從工作者到主管的態度與學習、格局與遠見、用人與團隊、專業能力及技術、決策的能力,以及一些最核心的價值與觀念。 > > > > 資料來自: [博客來網路書店](http://www.books.com.tw/exep/prod/booksfile.php?item=0010396270) > >

讀書心得:

最近把這本書拿出來整個看,雖然何飛鵬的寫法與一些國外撰寫管理書籍的人不太一樣。 怎麼說呢~~~~ 你會覺得這本書像是何飛鵬在你面前跟你談到關於管理、關於當經理人的一些技巧。這本書主要是談到何飛鵬再當經理人的一些過程。當然沒有人一生下來就是當經理人的,大家都是升上了經理人才學習當經理人;就像是當了老爸~才開始學習當老爸是一樣的。

整本就是圍繞著~經過不斷的努力之後。如果你不好容易升上當經理人,帶領著一批人,你要如何去帶領它們走向更美好的路呢? 這本書有列出一些作者曾經犯過的錯誤~ 我看了感觸相當的深~ 分享給大家。

將帥無能,累死三軍:

既然~你能夠帶領那群人,當然你的工作能力是比他們強的。但是由於很多剛升上經理人的人,一開始還無法領會帶領團隊的經理人~~ 往往會因為太過著急~ 不是變成會不斷的催促屬下;就是會自己跳下來做。這往往是一開始身為經理人的最大忌諱。 不過經常在職場上,我們都會看到一開始的經理人都會自己跳下來幫屬下做事。

不然就是經理接了太多事情回來,但是給屬下的時間~~ 卻是依照自己的工作能力來給予期限~ 搞得每個部屬都做得要死要活。

今日你做、明日我想:

經理對於整個團隊的影響,應該是在規畫整個團隊的走向;而不應該去管今天團隊的細節。所以如果整個團隊的走向無法確切的規畫出來,那麼帶領團隊的經理就責無旁貸。也就是說~ 經理應該要專心的去規畫整個部門的走向,而不要一直介意著你的員工今天幾點下班,他在做些甚麼?

這裡列出一些書上提出的概念~

> > 【主管必修十堂課】—將帥無能、累死三軍;大碗喝酒、大塊吃肉;給錢爽快、分贓公平;寶相莊嚴、香火綿延;今日你做、明日我想等主管必學的課程。 > > > > 資料來自: [http://www.books.com.tw/exep/prod/booksfile.php?item=0010396270](http://www.books.com.tw/exep/prod/booksfile.php?item=0010396270) > >

蠻推薦這本書的,已經當主管的可以拿來審視自己;還沒當主管的可以拿來對照你的主管~拿來警惕自己。