<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SAY something (Posts about ydict)</title><link>https://blog.sayuan.net/</link><description></description><atom:link href="https://blog.sayuan.net/categories/ydict.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Mon, 10 Jan 2022 15:36:14 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>ydict - node.js 實作</title><link>https://blog.sayuan.net/posts/ydict/</link><dc:creator>Shiao-An Yuan</dc:creator><description>&lt;h3&gt;What is "ydict"&lt;/h3&gt;
&lt;p&gt;身為一名 command line 魔人，儘可能的將所有在電腦上的操作在 command line
之內完成，是一件理所當然的事情，就連查字典也不例外，而 ydict
就是這樣的工具。&lt;/p&gt;
&lt;p&gt;&lt;img alt="ydict" src="https://blog.sayuan.net/galleries/misc/ydict.png"&gt;&lt;/p&gt;
&lt;p&gt;ydict 的資料來自於 &lt;a href="http://tw.dictionary.yahoo.com/"&gt;Yahoo 字典&lt;/a&gt;，事實上 ydict
所作的事情就只是以使用者的輸入詞在 Yahoo 字典上查詢，然後 parsing
出重要的資訊，並以適合 terminal 的格式顯示在螢幕上。&lt;/p&gt;
&lt;p&gt;但其實 ydict 並不是 "一個" 工具，事實上很多人都曾開發自己的實作，
而各實作也有各自的分支，我現在已經找不出最早是由誰開發的了。
在眾多版本之中，我使用了最長時間的是 &lt;a href="https://github.com/freehaha/ydict"&gt;freehaha 實作的 Python 版本&lt;/a&gt;，
其次則是 &lt;a href="http://fourdollars.blogspot.tw/2008/05/vim-ydict.html"&gt;FourDollars 的 Perl 版本&lt;/a&gt;，在此先向兩位作者致上感謝。&lt;/p&gt;
&lt;h3&gt;My works&lt;/h3&gt;
&lt;p&gt;使用 ydict 這工具對我來說已經到了不可或缺的地步，但幾乎每隔一段時間 Yahoo
字典就會改版，而接下來的幾天在作者尚未更新之前，我就會沒有 ydict 可使用。
而另一方面，我也會希望能針對自己的需求，對 ydict 進行修改。&lt;/p&gt;
&lt;p&gt;我也確實試過自己動手修改，但後續要繼續與原作者的版本接軌卻反而成了一件麻煩事。
而在先前嘗試修改的經驗裡，我覺得必須要有容易更新的 parsing 規則，才能夠快速的針對
Yahoo 字典的改版做出更新。正巧最近我剛學了一點 JavaScript 與
node.js，我想如果能像 jQuery 一樣使用 CSS selector 進行
parsing，事情也許會簡單很多，於是 &lt;a href="https://github.com/sayuan/ydict.js/"&gt;ydict.js&lt;/a&gt; 就此誕生。&lt;/p&gt;
&lt;p&gt;ydict.js 的一個主要設計考量是，parsing 與 display
必須分離，parsing 的部份只會回傳處理後的 json，而 display 只是單純的將 josn
檔依照格式顯示在螢幕上， 因此在任何一方修改都不會影響到另一方。
另外我也把 parsing 的部份包成 module，讓其他 project
可以直接引用，雖然我覺得這個功能完全只是雞肋。:p&lt;/p&gt;
&lt;p&gt;此外，我也已經將 ydict.js 上傳 npm，因此只要執行下述指令即可完成安裝，
希望各位會喜歡。&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;[sudo] npm install -g ydict.js
&lt;/pre&gt;

&lt;h3&gt;What else?&lt;/h3&gt;
&lt;p&gt;我的好友 Andrew 與 Jeff 也和我一樣依賴 ydict，因此在去年 Yahoo
字典改版，各家實作卻都尚未支援之前，他們也都各自開發了自己的實作。&lt;/p&gt;
&lt;p&gt;首先是 &lt;a href="https://github.com/yongjhih/rc/blob/master/bin/andict"&gt;Andrew 的 shell script 版&lt;/a&gt;，使用 w3m 的超簡短作弊寫法，
麻雀雖小卻是五臟俱全。(&lt;strong&gt;使用前請先安裝 w3m 套件。&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;另外就是 &lt;a href="https://github.com/JeffChien/jydict"&gt;Jeff 開發的 LiveScript 版&lt;/a&gt;，和 ydict.js 一樣使用 &lt;a href="https://github.com/MatthewMueller/cheerio"&gt;cheerio&lt;/a&gt;
來處理 parsing，並且同樣也已經上傳 npm，因此只要執行下述指令即可安裝：&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;[sudo] npm install -g jydict
&lt;/pre&gt;</description><category>node.js</category><category>ydict</category><guid>https://blog.sayuan.net/posts/ydict/</guid><pubDate>Thu, 30 Jan 2014 07:07:52 GMT</pubDate></item></channel></rss>