<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/main.xsl"?>
<b:blog xmlns="http://www.w3.org/1999/xhtml" xmlns:b="http://blog.othree.net"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://blog.othree.net http://blog.othree.net/blooog.xsd">
	<b:blogTitle>O3noBLOG</b:blogTitle>
	<b:blogDescription></b:blogDescription>
	<b:entries>
		<b:entriesMeta>
			<b:listType>c</b:listType>
			<b:listData listID="unix">unix</b:listData>
		</b:entriesMeta>

		<b:entry entryID="000618" baseName="easygit">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2010-04-03</b:date>
				<b:time>14:09:27</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>easygit</b:title>
			<b:content>
				<b:summary>前陣子為了找 tinymce 某個 bug 是在哪個 commit 產生的，用上了 easygit 因為照原來一直 revert 回去的作法實在弄到會吐血， easygit 可以這樣下命令： eg revert -since a326cfb0ff21c928fe69f9f18d62ece31b95c47e 這樣可以直接回去那個版本了，而不是只 revert 那個 commit 。...</b:summary>
				<b:mainContent><p>前陣子為了找 tinymce 某個 bug 是在哪個 commit 產生的，用上了 <a href="http://people.gnome.org/~newren/eg/">easygit</a> 因為照原來一直 revert 回去的作法實在弄到會吐血， easygit 可以這樣下命令：</p>



<pre><code>eg revert -since a326cfb0ff21c928fe69f9f18d62ece31b95c47e</code></pre>



<p>這樣可以直接回去那個版本了，而不是只 revert 那個 commit 。</p></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="2"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

		<b:entry entryID="000609" baseName="wq-post-bbs-article">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2010-01-07</b:date>
				<b:time>20:25:04</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>用 :wq 送出 BBS 文章</b:title>
			<b:content>
				<b:summary>因為在 BBS 想要用 :wq 發文章的次數不算少，剛剛就用 expect 弄起來了，只要加一行到 interact 裡面就可以： \033:wq\r { send \030; send &quot;\r&quot; } 實際操作是要 &lt;ESC&gt; :wq &lt;ENTER&gt; ，會直接把文章發表，如果不想跳過發文前的確認選單，那就把最後的 \r 拿掉。...</b:summary>
				<b:mainContent><p>因為在 <span class="caps">BBS </span>想要用 :wq 發文章的次數不算少，剛剛就用 expect 弄起來了，只要加一行到 interact 裡面就可以：</p>



<pre><code>\033:wq\r { send \030; send &quot;\r&quot; }</code></pre>



<p>實際操作是要 &lt;ESC&gt; :wq &lt;ENTER&gt; ，會直接把文章發表，如果不想跳過發文前的確認選單，那就把最後的 \r 拿掉。</p></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="0"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

		<b:entry entryID="000608" baseName="_screen_windows_terminal">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2010-01-05</b:date>
				<b:time>21:18:28</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>在 screen windows 裡開一個比較小的 terminal</b:title>
			<b:content>
				<b:summary>這真是超特殊的需求，不過今天還是弄出來了，花不少間走錯方向就是，會有這樣的需求是因為我同時要掛 BBS 和 IRC，BBS 的標準視窗大小是 80*24，但是這個大小對於 IRC 來說又太小了，好在現在很多 BBS 系統已經已經支援大於 80*24 的終端機了，但是有一個 bahamut 自從商業化後 BBS 系統就完全沒改進，不支援就算了，終端機大小只要不對，看文章往下卷頁時就會有錯誤排版產生，最常見就是按 下 ，本來應該是整個畫面移動一行，結果會變成只有最後一行被取代，而我現在是使用 100*35 的大小，本來是一直把這問題放著，不過今天總算解決了，其實解法很簡單，就是 screen 裡面再開一個 screen，用不同的設定檔案，裡面要拿來上 bahamut 那個的設定檔加上： width -d 80 24 重點在那個 -d 參數，本來一直在終端機的設定上跑來跑去，不是說沒辦法改大小，就是內部的終端機改大小會影響到外面的，版面就整個亂掉，不過 -d 是只改 display 的大小，不是終端機大小，本來的話是會所有的 screen 一起改，但是因為用兩層的關係，所以外面的不會受到影響。...</b:summary>
				<b:mainContent><p>這真是超特殊的需求，不過今天還是弄出來了，花不少間走錯方向就是，會有這樣的需求是因為我同時要掛 <span class="caps">BBS </span>和 <span class="caps">IRC</span>，BBS 的標準視窗大小是 80*24，但是這個大小對於 <span class="caps">IRC </span>來說又太小了，好在現在很多 <span class="caps">BBS </span>系統已經已經支援大於 80*24 的終端機了，但是有一個 <a href="http://www.gamer.com.tw/">bahamut</a> 自從商業化後 <span class="caps">BBS </span>系統就完全沒改進，不支援就算了，終端機大小只要不對，看文章往下卷頁時就會有錯誤排版產生，最常見就是按 <strong>下</strong> ，本來應該是整個畫面移動一行，結果會變成只有最後一行被取代，而我現在是使用 100*35 的大小，本來是一直把這問題放著，不過今天總算解決了，其實解法很簡單，就是 screen 裡面再開一個 screen，用不同的設定檔案，裡面要拿來上 bahamut 那個的設定檔加上：</p>



<pre><code>width -d 80 24</code></pre>



<p>重點在那個 <a href="http://www.gnu.org/software/screen/manual/screen.html#Window-Size">-d</a> 參數，本來一直在終端機的設定上跑來跑去，不是說沒辦法改大小，就是內部的終端機改大小會影響到外面的，版面就整個亂掉，不過 -d 是只改 display 的大小，不是終端機大小，本來的話是會所有的 screen 一起改，但是因為用兩層的關係，所以外面的不會受到影響。</p></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="0"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

		<b:entry entryID="000605" baseName="closure-compiler-osx">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2009-12-29</b:date>
				<b:time>23:16:50</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>closure-compiler on OSX</b:title>
			<b:content>
				<b:summary>Google 的 Closure Cmpiler 要 Java 1.6 ，蘋果雖然有提供 1.6 的 更新 ，不過在終端機下直接打 java 還是 1.5 版，至於 1.6 版則是放在 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java 如果要跑 closure-compiler 建立shell script 時 java 執行檔要改用這個。...</b:summary>
				<b:mainContent><p>Google 的 <a href="http://code.google.com/intl/en/closure/compiler/">Closure Cmpiler</a> 要 Java 1.6 ，蘋果雖然有提供 1.6 的 <a href="http://www.apple.com/downloads/macosx/apple/application_updates/javaformacosx105update1.html">更新</a> ，不過在終端機下直接打 java 還是 1.5 版，至於 1.6 版則是放在</p>



<pre><code>/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java</code></pre>



<p>如果要跑 closure-compiler 建立shell script 時 java 執行檔要改用這個。</p></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="2"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

		<b:entry entryID="000602" baseName="spidermonkey-utf-8">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2009-12-27</b:date>
				<b:time>16:01:39</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>spidermonkey 的 UTF-8 支援</b:title>
			<b:content>
				<b:summary>JSLint 其實是用 javascript 寫的 javascript 語法檢查工具， jslint.vim 並沒有把它轉成 vim script ，而是呼叫 JS 引擎來跑 JSLint ，最好找的 JS 引擎就是 mozilla 的 spidermonkey ，很多 linux 有包好的套件，FreeBSD 也有 port ，不過實際上用的時候發現有個問題，就是不支援 UTF-8 字串，結果就是在 JSLint 的字元檢查時會把一些中文當成不安全字元，例如：「下」。 其實要 spidermonkey 支援 UTF-8 字串也不難，FreeBSD 的話在裝 port 時加個參數就可以了，OSX 的話把 MacPorts...</b:summary>
				<b:mainContent><p><a href="http://www.jslint.com/"><span class="caps">JSL</span>int</a> 其實是用 javascript 寫的 javascript 語法檢查工具， <a href="http://github.com/hallettj/jslint.vim">jslint.vim</a> 並沒有把它轉成 vim script ，而是呼叫 JS 引擎來跑 <span class="caps">JSL</span>int ，最好找的 JS 引擎就是 mozilla 的 <a href="http://www.mozilla.org/js/spidermonkey/">spidermonkey</a> ，很多 linux 有包好的套件，FreeBSD 也有 <a href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/lang/spidermonkey/">port</a> ，不過實際上用的時候發現有個問題，就是不支援 <span class="caps">UTF</span>-8 字串，結果就是在 <span class="caps">JSL</span>int 的字元檢查時會把一些中文當成不安全字元，例如：「下」。</p>

<p>其實要 spidermonkey 支援 <span class="caps">UTF</span>-8 字串也不難，FreeBSD 的話在裝 port 時加個參數就可以了，OSX 的話把 <a href="http://www.macports.org/">MacPorts</a> 更新到新版的再裝就可以了，Linux 的話就沒辦法用套件安裝，要自己抓來編， 1.7 的話要去修改 Makefile 讓 <span class="caps">CFLAGS </span>加上 "-DJS_C_STRINGS_ARE_UTF8" 這個參數，或是參考 <a href="http://www.mongodb.org/display/DOCS/Building+Spider+Monkey">mongoDB</a> 的作法，如果是 1.8 版的話有內建支援，不用修改 makefile，但是以後要執行的 js 檔案裡面都要先呼叫 <a href="https://developer.mozilla.org/En/SpiderMonkey/JSAPI_Reference/JS_CStringsAreUTF8">JS_CStringsAreUTF8</a> 這個函式，以 jslint.vim 來說就要加到 ~/.vim/plugin/jslint/runjslint.js 這個檔案。</p>

<p>其實要解決 <span class="caps">UTF</span>-8 問題還有其他方法，就是換其他的 JS 引擎，像是 <a href="http://code.google.com/p/v8/">Google V8</a> ， 要用 V8 的話 <a href="http://code.google.com/apis/v8/build.html">編譯</a> 時要編 developer shell ，產生的執行檔檔名叫 <strong>d8</strong> ，弄個鏈結讓 <strong>js</strong> 這個指令可以執行就可以了，V8 直接支援 <span class="caps">UTF</span>-8 ，弄起來就可以用了，不用再去改其他東西，理論上速度應該也比較快吧，JSLint 都跑很快，無從比較XD。</p></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="0"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

		<b:entry entryID="000566" baseName="kakasi">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2009-01-20</b:date>
				<b:time>01:30:27</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>kakasi</b:title>
			<b:content>
				<b:summary>kakasi 並不是火影忍者那位卡卡西，他的全名是 Kanji Kana Simple Inverter，用來轉換日文漢字、平假名、片假名和羅馬拼音的。 最近因為在弄一些和日文搜尋相關的東西，要處理平假名片假名混和搜尋的問題，所以在 IRC 上問人，在 zonble 提供的幾個連結中，我最後用的是 kakasi，在 ubuntu 上只要執行 apt-get install kakasi 就可以了，這我還是在抓原始碼來編譯後才發現的@@。程式使用很簡單，就用 pipeline 丟字串進去，然後加上參數看要進行怎樣的轉換，不過有小問題是他只吃 sjis 編碼，所以在 UTF-8 下的環境要先過 iconv 轉編碼，輸出在轉回來，以下面的 code 為例： echo '魔神英雄伝' | iconv -f utf8 -t sjis -c | kakasi -JK...</b:summary>
				<b:mainContent><p><a target="_blank" href="http://kakasi.namazu.org/">kakasi</a> 並不是火影忍者那位卡卡西，他的全名是 <strong>Kanji Kana Simple Inverter</strong>，用來轉換日文漢字、平假名、片假名和羅馬拼音的。</p>

<p>最近因為在弄一些和日文搜尋相關的東西，要處理平假名片假名混和搜尋的問題，所以在 <span>IRC </span>上問人，在 <a target="_blank" href="http://zonble.twbbs.org/">zonble</a> 提供的幾個連結中，我最後用的是 kakasi，在 ubuntu 上只要執行 <code>apt-get install kakasi</code> 就可以了，這我還是在抓原始碼來編譯後才發現的@@。程式使用很簡單，就用 pipeline 丟字串進去，然後加上參數看要進行怎樣的轉換，不過有小問題是他只吃 sjis 編碼，所以在 <span>UTF</span>-8 下的環境要先過 iconv 轉編碼，輸出在轉回來，以下面的 code 為例：</p>

<pre><code>
echo '魔神英雄伝' | iconv -f utf8 -t sjis -c | kakasi -JK | iconv -f sjis -t utf8
</code></pre>

<p>就可以看到 <strong>マジンエイユウデン</strong> ，這樣我就可以在 python script 裡面呼叫一下命令列來轉字串，處理資料庫的資料，不過要放上網路的程式這樣呼叫其實蠻危險的，所以我又找了一下 <span>PHP </span>有沒有這東西可以用，沒想到還真的有，在 <a target="_blank" href="http://pecl.php.net/"><span>PECL</span></a> 裡面有人有 port，不過網站上看不到，我是從 google 搜尋到 mail list 的 <a target="_blank" href="http://marc.info/?l=php-i18n&amp;m=105914120819128&amp;w=2">舊文章</a> 才找到的，所以就照文內的安裝步驟抓下來 compile，ubuntu 記得要先 <code>apt-get install php5-dev</code> 才有辦法執行 <code>phpize</code> 初始化編譯環境，裝好後就可以在 phpinfo 裡面看到 kakasi 這個模組。</p>

<p>然後測試的結果發現他也只能吃 sjis 字串，所以還是要用 iconv 轉一下碼，使用範例如下：</p>

<pre><code>$roma = kakasi(iconv("UTF-8", "sjis", $qs[0]), array("-Hj", "-Jj", "-Kj"));
</code></pre>

<p>這串因為是轉成羅馬拼音的，所以最後沒在用一次 iconv 轉回 <span>UTF</span>-8，至於各種轉換的設定請參考 <code>kakasi -help</code>。</p></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="0"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

		<b:entry entryID="000565" baseName="ubuntu-yuicompressor">
			<b:author>
				<b:authorName>othree</b:authorName>
				<b:authorEmail>othree@gmail.com</b:authorEmail>
				<b:authorUrl></b:authorUrl>
			</b:author>
			<b:datetime>
				<b:date>2009-01-15</b:date>
				<b:time>01:28:47</b:time>
			</b:datetime>
			<b:category>unix</b:category>
			<b:title>在ubuntu上套件安裝yuicompressor  </b:title>
			<b:content>
				<b:summary>很久之前DK長輩跟我說過FreeBSD上有人port好的，所以裝起來很方便，我自己放在學校的主機是用ubuntu，最近又搜尋一次發現也有人有編譯好提供套件安裝，是第三方的套件來源，又花了點時間查要怎樣用命令列新增第三方套件來源並加入public key，所以記錄一下。 首先把下面兩行用root權限加入 /etc/apt/sources.list 檔案裡： deb http://ppa.launchpad.net/launchpad/ubuntu intrepid main deb-src http://ppa.launchpad.net/launchpad/ubuntu intrepid main 接著一樣用root權限執行下面兩行指令來把public key加入apt裡面： gpg --keyserver keyserver.ubuntu.com --recv-keys 0A5174AF gpg --armor --export 0A5174AF | apt-key add - 然後用 apt-get update; apt-get install yuicompressor 就可以把 yuicompressor 裝好了，不過我這台P4 2.4的跑起來還有點慢。 PPA for...</b:summary>
				<b:mainContent><p><a target="_blank" href="http://blog.othree.net/log/2008/10/11/yuicompressor/">很久之前DK長輩跟我說過FreeBSD上有人port好的</a>，所以裝起來很方便，我自己放在學校的主機是用ubuntu，最近又搜尋一次發現也有人有編譯好提供套件安裝，是第三方的套件來源，又花了點時間查要怎樣用命令列新增第三方套件來源並加入public key，所以記錄一下。</p>

<p>首先把下面兩行用root權限加入 <strong>/etc/apt/sources.list</strong> 檔案裡：</p>

<pre><code>deb http://ppa.launchpad.net/launchpad/ubuntu intrepid main
deb-src http://ppa.launchpad.net/launchpad/ubuntu intrepid main</code></pre>

<p>接著一樣用root權限執行下面兩行指令來把public key加入apt裡面：</p>

<pre><code>gpg --keyserver keyserver.ubuntu.com --recv-keys 0A5174AF
gpg --armor --export 0A5174AF | apt-key add -</code></pre>

<p>然後用 <code>apt-get update; apt-get install yuicompressor</code> 就可以把 yuicompressor 裝好了，不過我這台P4 2.4的跑起來還有點慢。</p>

<ul>
<li><a target="_blank" href="https://launchpad.net/%7Elaunchpad/+archive"><span>PPA </span>for Canonical Launchpad Developers</a></li>
<li><a target="_blank" href="http://wiki.scribus.net/index.php/Getting_Scribus_on_Ubuntu/Kubuntu_up_and_running">Getting Scribus on Ubuntu/Kubuntu up and running</a></li>
</ul></b:mainContent>
				<b:extendContent></b:extendContent>
			</b:content>

			<b:comments commentCount="0"></b:comments>


			<b:trackbacks trackbackCount="0"></b:trackbacks>

		</b:entry>

	</b:entries>
</b:blog>
