Planet DebianTW

March 15, 2010

tsung

PHP 的 SOAP 串接 - 使用 NuSOAP

好久沒串 SOAP, 最近有個 API 使用 SOAP, 重新拿出來複習~ 此篇都是以 Client 為主.

什麼是 SOAP

PHP NuSOAP

  • PHP 的 SOAP 可以使用 PHP: SOAP - Manual, 或者其它套件, 在此篇使用的是 NuSOAP.
  • 使用 NuSOAP 的原因, 主要是因為 NuSOAP 完整又簡單, 而且以前使用起來很愉快, 就繼續用下去~ :P

NuSOAP 安裝、使用

  1. NuSOAP 官方網站: NuSOAP - SOAP Toolkit for PHP -   由此下載 NuSOAP
  2. unzip nusoap-0.7.3.zip
  3. 使用
    <?php
    include('soap/nusoap.php'); // 即可
    ?>

NuSOAP Client 範例

主要是 $param (參數, 注意裡面的型態, 須要與 API 的型態一致, 不然有可能會出錯.), $serverpath (Server 位置), $client->call() (API 名稱), 就可以取得 API 的結果.

範例

<?php
$param = array(
            'id'      => 1,
            'user_id' => (string)$user_id,
            'name'    => 'jon',
         );

$serverpath = 'http://soap.example.com/user/userinfo';
$client = new nusoap_client($serverpath);

$err = $client->getError();
if ($err)
    return false;

$result = $client->call('showUserInfo', $param);

print_r($result);
?>

NuSOAP Client 範例 - Login

SOAP 經常使用在 SSO (Single Sign-On 單一登入), 登入完後的 cookie 要如何紀錄, 並於下個 API call 時帶入?

範例

<?php
// Login
$url = 'https://soap.example.com/v3/Services/UserLogin.asmx';
$client = new nusoap_client($url);
$err = $client->getError();
if ($err)
    return false;
    
$param = array(
              'user' => 'jon',
              'password' => 'test',
          );

$soapaction = '
http://soap.example.com/user/Login';
$result = $client->call('Login', $param, '', $soapaction);
print_r($result); // 此段已經可以登入完成, 看看是否有取得資料

// Debug
//echo "request:\n" . $client->request . "\n"; // 發出的 SOAP request XML 長什麼樣子
//echo "response:\n" . $client->response . "\n"; // 接收到的 XML 長什麼樣子


// Get User Info (登入完成, 取得 cookie 後, 再接著去要使用者相關資料)
$cookie = $client->getCookies(); // 上面登入完成, 取得 Cookie 值
$url = 'https://soap.example.com/v3/Services/UserInfo.asmx?wsdl';
$client = new nusoap_client($url); // create new soap client
$client->setCookie($cookie[0]['name'], $cookie[0]['value']); // 指定 Cookie 值
$soapaction = '
http://soap.example.com/user/GetUserData';
$result = $client->call('GetUserInfo', '', '', $soapaction);
print_r($result); // 即取得登入後, call GetUserInfo 的資料
?>

筆記

NuSOAP Debug howto

<?php
$client = new nusoap_client($url);
// call($operation, $params = array(), $namespace = 'http://tempuri.org', $soapAction = '', $headers = false, $rpcParams = null, $style = 'rpc', $use = 'encoded')
$result = $client->call('Login', $param, '', $soapaction);
echo "request:\n" . $client->request . "\n"; // 發出的 SOAP request XML 長什麼樣子
echo "response:\n" . $client->response . "\n"; // 接收到的 XML 長什麼樣子
?>

中文亂碼解決

使用 NuSOAP 若回傳的中文是 ???? 或 亂碼, 主要是 NuSOAP XML Parser 的問題(註: XML 中文都是正常顯示)

此時要注意的是有三個地方 NuSOAP Library 內的參數值

  • $client->soap_defencoding = 'utf-8';
  • $client->xml_encoding = 'utf-8';
  • $client->decode_utf8 = false;

主要是 NuSOAP 認為 xml_encoding 是 utf-8 時, 會自動啟用 decode_utf8 的動作, 反而造成原本正常狀況, 經過 decode 反而變亂碼, 所以解法如下:

  • $client->decodeUTF8(false); // 不要讓他 decodeUTF8 就可以了.

範例

<?php
$client = new nusoap_client($url);
$client->decodeUTF8(false);
$result = $client->call('GetUserInfo');
print_r($result);
?>

相關說明

相關網頁

by jon at March 15, 2010 04:29 PM

kanru

Got one A1 from Broncho

上週末下班前,在桌上發現一個包裹,原來是渡海而來的兩隻 A1!這兩隻 A1 是 Broncho 的產品,詳細規格可以參考 Broncho 的網頁

大伙興奮的開箱啦!

開箱 開箱

包裝和 Hero 的很像。3.2 寸 LCD, 480×320 的解析度,200 萬畫素的相機鏡頭,CPU 是 Marvell 300 (624 MHz),記憶體是 256 + 128 MB,支援 WIFI, Bluetooth, FM, GPS。不是使用標準的 USB 接口,但同一個接口可以接 USB、耳機、變壓器。觸控螢幕使用起來的感覺像是電容式的,反應非常靈敏,輕輕的觸摸就有反應。

系統是 Android Cupcake,內建軟體有不少 Google App,最另人驚訝旳是上面有 Android Market 可以用,試著從 Market 上面下載了一些小遊戲下來玩,完全沒有問題,真是太牛了!另外一點就是有內建手寫輸入,速度不快但是準確度不錯。除此之外還有谷歌拼音可以用。

測試的途中無線網路與 GPS 不是很穩,除此之外以一隻中低價位的手機來說表現的相當不錯。

by kanru at March 15, 2010 09:50 AM

March 14, 2010

tsung

CSS3 跨瀏覽器程式碼產生器

CSS3 要產生圓角、陰影.. 等等, 在每個瀏覽器需要寫不同的程式碼, 有沒有辦法寫完一行, 就自動把其它瀏覽器所需要的相關程式碼都產生出來呢?

因此, 就有此網站的出現: CSS3 Please! The Cross-Browser CSS3 Rule Generator

於頁面上選擇圓角(box_round)、陰影(box_shadow) 等等的程式碼區塊, 直接修改後面數值, 修改完成後, 其它瀏覽器相關的數值、參數的也都跟著自動產生出來, 再複製、貼上即可.

相關介紹

by jon at March 14, 2010 04:46 PM

March 13, 2010

mason

影片格式轉換

TS to mkv


ffmpeg -i sourcefile.m2ts -vcodec copy -sameq -acodec copy output.mp4

繼續閱讀 "影片格式轉換"

by nospam@example.com (Dante Mason) at March 13, 2010 06:37 PM

March 12, 2010

tsung

Google 產品服務的 SEO 報告

Google 有非常多的服務, 它為旗下的服務做了一份 SEO 的報告, 共 49 頁.

Google 產品服務的 SEO 報告

Google 產品服務的 SEO 報告, 相關介紹可見:

Google SEO 報告內容

相關網頁

by jon at March 12, 2010 03:59 PM

March 11, 2010

tsung

Postfix 列出 所有 設定參數 的 預設值

Postfix 是 Linux 上, 很常使用的 Mail Server 軟體 / 套件, 主要的設定檔是 /etc/postfix/main.cf (於 Ubuntu / Debian Linux).

Postfix main.cf

那 Postfix 的 main.cf 有哪些參數可以設?

  • postconf -d # 會列出 所有設定參數 的 "預設值", 這些參數都可以寫進 main.cf 裡面做設定.
  • 這些 設定參數 的 功能說明 可見: Postfix Configuration Parameters

by jon at March 11, 2010 03:49 PM

March 10, 2010

tsung

Linux 指定使用各種不同版本軟體 - update-alternatives

在 Ubuntu / Debian Linux 常常會有各種不同版本的軟體, 但是是做同樣的事(或類似的事).

最常見的 vi、java、gcc 等等, 這些都有各種不同的版本, 另外 scim / gcin 等輸入法, 是需要指定權重.

有這麼多軟體, 每次設定都要用 update-alternatives 然後去找相對應的軟體名稱, 有沒有全部安裝完後, 統一一次設定好即可的方法?

於是偷懶的方法就出現了: update-alternatives --all (詳見: man 8 update-alternatives)

不過上述全部跑完, 要花點時間設定, 若想要看看全部有哪些, 可以使用: yes '' | update-alternatives --force --all 讓他全部再跑一次設定即可~ :P

by jon at March 10, 2010 03:04 PM

March 09, 2010

tsung

MPlayer 影片播放時, 常會停住不動問題修復

於 Ubuntu Linux 中, 使用 MPlayer 來看影片, 但是自從升級到 9.10 後, 影片播放時就常常會卡住不動, 然後快轉後再往回轉之類的讓他繼續播放.

問題

gmplayer 執行後, 都會出現下述訊息.

mplayer: could not connect to socket
mplayer: No such file or directory

然後影片常常會播到一半就卡住不動, 快轉後又可以開始播放.

解法1

  1. vim ~/.mplayer/gui.conf
    ao_driver = "alsa"
    改成
    ao_driver = "pulse"
  2. 存檔.

解法2

  1. 若沒有此檔案, 則 (~/.mplayer/gui.conf) 下述步驟
  2. vim /etc/mplayer/mplayer.conf
    ao = alsa,
    改成
    ao = pulse,
  3. 存檔.

這樣子再重新播放就不會有卡住不動的問題囉~

by jon at March 09, 2010 03:35 PM

March 08, 2010

kanru

Debian 用 wpa_cli 之 romaning mode,不用 network-manager

/etc/wpa_supplicant/wpa_supplicant.conf 加入 network 設定

network={
        ssid="Example"
        psk="password"
        id_str="office"
}

network={
    key_mgmt=NONE
}

然後在 /etc/network/interfaces 加加 mapping

allow-hotplug wlan0
iface wlan0 inet manual
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface office inet dhcp

之後開機就會自動 connect 到合適的 AP 了

by kanru at March 08, 2010 04:38 PM

tsung

奧運金牌、銀牌、銅牌的成份? 價值?

最近在舉行冬季奧運, 冬季奧運得到的獎牌, 成本是多少?

金、銀、銅牌值多少錢?

下述摘錄自此文: 奧運金牌值多少錢?

  • 金牌: 550克銀 + 再包裹 6克金. (約 494 USD)
  • 銀牌: 509克銀 + 大約 41克銅組成. (約 260 USD)
  • 銅牌: 450克銅 + 50克的其它金屬 (大部份是錫和鋅) (約 3 USD)

這輩子沒機會拿到的話, 可以考慮打一面犒賞自己? XD

by jon at March 08, 2010 03:24 PM

March 06, 2010

tsung

貝貝第一次剪頭髮 (胎毛 / 胎髮)

2010-03-06 把貝貝從彰化接回台北住, 另外是要對貝貝的頭毛做手腳, 所以來做做紀錄.

註: 出生到現在等等, 之前的紀錄後續再慢慢補上.

打招呼, 嗨

首先, 貝貝先來跟大家打招呼~

  • 嗨
  • 嗨
  • 嗨

近況

  • 現在這個時期, 貝貝的睡姿非常糟糕, 趴睡身體會往前跑, 仰睡身體會往後跑, 現在還沒滿 40天耶. @.@a.
  • 睡姿很差

抵抗

  • 聽說出生後的胎髮如果理掉, 之後長出的頭髮會比較多又比較黑, 於是決定讓她變光頭, 沒想到被貝貝發現~ 於是她使出...
  • 猴拳
    睡姿很差
  • 大力鷹爪功
    睡姿很差
  • 不過, 當然不敵狠心的爸媽, 還是乖乖被帶去理髮. :P

理髮

  • 理髮前, 還在睡~
    準備要開始理髮, 繼續睡
  • 看胎髮最後一眼~
    胎髮, 最後一眼
  • 準備開始理髮, 繼續睡~
    準備開始理髮
  • 理了一半, 還在睡~
    理頭時繼續睡
  • 理光了, 還沒醒. XD
    理完頭了
  • 回家看她的新造型, 考慮最近要叫她: 一休、一路(花田一路)、二路 還是 三路... :P

慶祝

  • 為了不讓她覺得頭毛沒了難過, 把她過年收到的紅包拿來讓她高興一下.
  • 佛光初現 紅包版
    紅包圍繞
  • 萬佛朝宗 紅包版
    被紅包包圍
  • 拿紅包當枕頭, 看她笑的合不攏嘴.
    紅包當枕頭
  • 拿紅包當枕頭, 好像被她發現, 爸媽沒包給她紅包... 一臉想跟爸媽要的表情~ (註: 傻孩子, 爸媽等你會算錢後再包給你~ 乖~ XD)
    還想要紅包?

超大御飯糰

  • 記得 小小柯四個月達成! 的時後, 小柯幫他拍的 "超大御飯糰", 趁她現在臉還小, 剛過滿月沒幾天, 也來幾張 "超大御飯糰" 看看~ :P
  • 御飯糰
  • 御飯糰

by jon at March 06, 2010 03:48 PM

March 05, 2010

tsung

設定 Outlook 使用 POP3 / IMAP 來接收 Gmail 信件

要在 Outlook 設定 POP3 / IMAP 去接收 Gmail 信件, 要如何做?

Outlook 設定 POP3 / IMAP 去接收 Gmail 信件

簡易步驟

  1. 在您的 Gmail中啟用 POP
  2. 設定 Outlook 2003 用戶端

詳細步驟

  1. 登入Gmail, 輸入帳號、密碼
  2. 選擇 畫面右上角的 "設定"
  3. 點選 "轉寄和 POP/IMAP", 選擇 "對所有郵件啟用 POP 功能 (包括已經下載的郵件)", 按 "儲存變更"
  4. 開啟 Outlook -> 帳號設定, 依下述步驟設定:
  5. POP3 設定為 pop.gmail.com
  6. SMTP 設定為 smtp.gmail.com
  7. 帳號要輸入完整的 Email 信箱: ex: abc@example.com
  8. 選擇 "其它設定" -> "外寄伺服器" -> 勾選 "我的外寄伺服器(SMTP)需要驗證"
  9. 選擇 "進階", 勾選 "內送伺服器及外寄伺服器的加密連線(SSL);POP3=995, SMTP=465"
  10. 這樣子 Outlook帳號設定 就完成囉~

相關參考

by jon at March 05, 2010 03:37 PM

March 04, 2010

fred

Add Devkit8000 and SBC8100 initial support to 0xdroid

As you know, I've done Android Eclair porting for Devkit8000 in the past, which is based on Embinux. It's a experimental work for passing time, I have no time to maintain and fix bugs friends reported after that. However, I think it is not good because the result will be getting lost as time goes by.

0xdroid is another Android distribution which is different from Embinux, its developer Jim Huang(jserv) who has contacted me a few months ago, and he hope that I can try porting 0xdroid on the Devkit8000. Actually, I am glad to make 0xdroid takes over my work, it is the best result for me.


Currently, I've done most works, 0xdroid can run on Devkit8000 with success. And also, My patches have been committed to 0xlab-devel mailing list. Because I have another platform SBC8100 which is also produced by Embest, I've done works on that as well.

You can see my patches from 0xlab-devel mailing list, or you can visit my website to download it directly:

http://people.linux.org.tw/~fred/patches/0xdroid/embest/


It's based on kernel source is 0xlab-kernel, you can get it from:

http://gitorious.org/0xlab-kernel


My works includes:
  • Support Embest Boards(Devkit8000 and SBC8100)
  • OMAP DSS2 Driver for display
    • 4.3 inch Embest LCD Panel support (480x272 60Hz)
    • 7 inch Embest LCD Panel support (800x480 60Hz)
  • Touchscreen Controller support (ADS7846)
    • Works with correct axis
  • Ethernet Device support (DM9000)
  • Keypad (TWL4030)
  • Force kernel into using machine ID of Beagleboard

Recently, I got a news that Devkit8000 has been registered in ARM machine table(http://www.arm.linux.org.uk/developer/machines/), so Devkit8000 has official machine ID(2330) now (SBC8100 doesn't have yet). It means that kernel can start to support it with standard. That's a good news, however, it will cause complications for us. The platform you have which still has old machine ID by default, you must patch and update the uboot to match official kernel standard for working.

For SBC8100 and most of Embest platforms, they are not registered in machine table cause it is not easy to maintain. That's why I do dirty hacks, forcing kernel into using machine ID of beagleboard when you selected "Embest board support" option. It's necessary for SBC8100, and it works with Devkit8000. You don't need to worry machine ID problem.

Besides, it will fix a bug that sound device doesn't work on beagleboard clone.

Known Issue:

OMAP Multiplexer support has a problem, it will cause kernel hangs, so we must disable OMAP_MUX. Due to SBC8100 has Wifi/Bluetooth module which is using MMC2(SDIO) with OMAP Multiplexer, the module doesn't work right now.

References:

http://fred-zone.blogspot.com/2009/12/android-eclair-porting-for-devkit8000.html
http://fred-zone.blogspot.com/2009/12/enable-ads7846-touchscreen-in-android.html
http://fred-zone.blogspot.com/2009/12/add-gpio-keys-support-for-devkit8000.html

by cfsghost@gmail.com (Fred Chien(錢逢祥)) at March 04, 2010 09:05 PM

tsung

Gandi 設定 DNS 的注意事項

一直以來設定 DNS 都是在 GoDaddyEveryDNS 等等的地方設, 這次設定 Gandi 一直沒有出現成功的訊息, 感覺怪怪的, 在此紀錄 Gandi 設定 DNS 時, 需注意的事項.

問題1

  • 在 Gandi 設定 DNS 完成後, 過 3hr 再查, 發現都查不到資料, 就覺得有點怪, 發現之前設定的都沒有被寫進去.

解法

  • 於是再重新設定一次, 仔細多看看頁面, 原來 Gandi 在設定完 DNS 後, 在最後會有個 Submit 的按鈕, 要 Submit 出去才會修改, 不然一切都不算數.

問題2

  • 在 Gandi 設定 DNS 時, 例如: 要將 mail.example.com 設 CNAME 指到 ghs.google.com 去.
  • 於是在設定時填寫 mail CNAME ghs.google.com, 過了一段時間, 發現 mail.example.com 一直沒有生效(沒有指定到 ghs.google.com.)

Debug

  1. 使用 "dig cname example.com" 查查看
  2. 照理說應該要看到 "mail CNAME ghs.google.com."
  3. 但是看到的卻是 "mail CNAME ghs.google.com.example.com."

解法

  • 再重新於設定 DNS 的地方仔細看一下, 原來 Gandi 設定要指過去的地方, 最後的那個 "." 是不能省略的. (GoDaddy, EveryDNS 都會幫忙補上去)
  • ex: ghs.google.com => ghs.google.com. (最後要多一個 ".")
  • 註: 這個 "." 在 DNS 設定本來就是必要的, 只是其它 Hosting 有防呆措施, 幫我們修正掉了.

Google Apps 整個設定完成 的 結果紀錄

Google Apps 整個設定完成的結果, 大致如下:

  • googlefffffffff1234 CNAME google.com.
  • calendar CNAME ghs.google.com.
  • docs CNAME ghs.google.com.
  • sites CNAME  ghs.google.com.
  • mail CNAME ghs.google.com.
  • @  MX ASPMX3.GOOGLEMAIL.COM.
  • @  MX ASPMX2.GOOGLEMAIL.COM.
  • @ MX ALT2.ASPMX.L.GOOGLE.COM.
  • @ MX ALT1.ASPMX.L.GOOGLE.COM.
  • @ MX ASPMX.L.GOOGLE.COM.
  • 註: Google Apps Logo 的檔案格式 和 尺寸: PNG or GIF, 143 x 59 pixels

總結 Gandi 設定的注意事項

  1. 設定指向的位址, 記得最後面要加 "."
  2. 全部設定完成後, 記得上面有個 Submit button, 最後確認按下去, 才算是有將資料送出存檔.

by jon at March 04, 2010 03:24 PM

March 03, 2010

tsung

拜 地基主 該 準備的物品

家中有開伙 或 租的房子有開伙, 就要拜地基主.

拜 地基主 要準備哪些東西? 要如何拜? 在哪邊拜? 流程順序如何?

前置準備

  • 酒三杯
  • 飯、菜、湯(或 便當 + 湯)
  • 紙錢(刈金、福金), 遇到 中元節 再加 大銀、小銀、更衣少許.
  • 上香爐 (可用一般鐵罐, 包紅紙, 裡面放米即可)
  • 燒金爐、桌子 或 椅子(可放上述物品的大小即可)

拜地基主的位置

  • 在廚房找一個好角落, 向牆角拜, 忌向灶神(火爐)拜.
  • 於牆角擺張 小桌子 或者 椅子, 可以把準備的東西都放的上去即可.(燒金爐不用放上去. XD)

如何拜

  1. 上香
    • 口念: 恭請在此 xxx(地址) 居住之地基主在上, xx(弟子 或 信女)xxx(姓名) 欣逢 xx(初一、十五 或 其它民俗節日), 虔備飯菜湯及紙錢表示敬意, 請慈悲接納, 祈求保佑 xx(弟子 或 信女) xxx(姓名), 能合家平宅, 財源廣進, 身體健康, 一切順利, 感謝慈悲.
    • 連續上三次香: 第一次上香完, 第一隻香燒一半後, 上第二隻香, 第二隻香燒一半後, 上第三隻香.
  2. 燒紙錢
    • 第三次香插爐後, 即可開始化紙錢.
    • 註1: 紙錢在屋內拜拜地方化才可, 故紙錢少許即可.
    • 註2: 記得關掉警報器, 一張一張化, 就不會有濃煙.
  3. 灑酒
    • 紙錢燒完要灑酒(繞著火爐 灑酒一圈), 口念: 請慈悲接納
    • 香拔起來丟入鍋爐內化, 口念: 恭請回歸本位

FAQ

  • 拜地基主的便當、菜能不能吃?
    拜神明、祖先,可以吃, 它算是陰神,可以吃.
    像拜冤親債主的,不要吃.

by jon at March 03, 2010 02:37 PM

March 02, 2010

fred

Debian/Ubuntu 交叉編譯 - 函式庫相依性速解法

從來,交叉編譯(Cross-compile)就是一門苦差事,往往取得 Toolchain 之後,還必須自己編譯所需的所有函式庫,花費的時間甚巨,實在不值得。隨著 Debian/Ubuntu 跨平台支援趨於完整,開發和移植各平台程式之工作,已經不用再經歷過去那不足為外人道哉的編譯地獄。我們可以直接抓取不同硬體平台(如:ARM、MIPS)的套件,安裝在系統上供交叉編譯使用。因此,比起專注於 x86 下的其他系統(如:Fedora),Debian/Ubuntu 優異的跨平台支援和資源,更決定了跨平台開發者的效率以及產出品質。

而較為傳統的方法,是建立一個新的 Rootfs ,包括完整目標平台的函式庫和編譯所需檔案,在編譯自己的程式時引入使用即可。如不想這樣麻煩,Debian/Ubuntu 包括了一支工具『apt-cross』可以將目標平台的套件,轉換成交叉編譯專用套件,然後安裝至目前的系統上。

如同常見的 apt-get ,apt-cross 的使用方法極為相似,以安裝 ARM 架構下 的GTK+ Library 和開發用檔案為例(使用 Debian Sid 的 ARM 版套件):
apt-cross -a armel -S sid -i libgtk2.0-0
apt-cross -a armel -S sid -i libgtk2.0-dev

如此 apt-cross 會下載 ARM 版本的 GTK+ Library,然後轉換成 libgtk2.0-0-armel-cross 和 libgtk2.0-dev-armel-cross 兩個套件,並安裝至系統中。隨後,我們便可交叉編譯自己的 GTK+ 程式,arm-linux-gnueabi-gcc 會直接去引用這兩個套件內的檔案。

隨帶一提,若執行 ./configure 時會發生 arm-linux-gnueabi-pkg-config 找不到,而自動選用系統上原生的 pkg-config 程式,常會造成編譯時關聯位置錯誤或找不到檔案。這通常是因為 pkg-config 選錯路徑,參考了系統上的編譯參數定義(正確行為應該去引用交叉編譯用的參數)。因此,我們可以在下 ./configure 前指定參考路徑,以解決此問題:
export PKG_CONFIG_PATH=/usr/arm-linux-gnueabi/lib/pkgconfig

後記

當然別的平台套件也會更新,我們可以用『-u』更新 Source.list,就如同在更新一般系統上套件一樣:
apt-cross -a armel -S sid -u

by cfsghost@gmail.com (Fred Chien(錢逢祥)) at March 02, 2010 08:24 PM

tsung

Debian linux - sysv-rc dependency-based boot system 修復

Debian linux 做 apt-get dist-upgrade, 升級到 sysv-rc 時, 出現下述訊息:

  • sysv-rc
    Unable to migrate to dependency-based boot system
    Tests have determined that problems in the boot system exist which prevent migration to dependency-based
    boot sequencing:
    package exim4-base removed but not purged, package mysql-server-5.0 removed but not purged

    If the reported problem is a local modification, it needs to be fixed manually. If it's a bug in the package, it should be reported to the BTS and fixed in the package.
    See http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot for more information about how to fix the problems preventing migration.
    To reattempt the migration process after the problems have been fixed, run "dpkg-reconfigure sysv-rc".

問題出在 沒有把 exim4-base、mysql-server-5.0 移除乾淨. (移除乾淨要用 apt-get remove --purge exim4-base mysql-server-5.0)

解法文件

  • 說明文件說可以參照此文: LSBInitScripts/Dependency based boot sequence, 全部修正完畢後, 再執行 dpkg-reconfigure sysv-rc 即可.
  • 不過不喜歡文件中的方法, 所以決定將這些手動移除, 移除完後再執行 dpkg-reconfigure sysv-rc.

exim4-base 和 mysql-server-5.0 相關檔案

  • dpkg-query -W -f='${Conffiles}\n' exim4-base
    /etc/init.d/exim4 5cc0235f0daea6b711879c2aa6d017f7
    /etc/logrotate.d/exim4-base cd9fc4ad67f13176c098fab4bbcd32b5
    /etc/logrotate.d/exim4-paniclog 27d670010e80246c4a1dd89419589009
    /etc/cron.daily/exim4-base 7c4bb303fbaba1d038e5dfe60dcb656d
  • dpkg-query -W -f='${Conffiles}\n' mysql-server-5.0
    /etc/init.d/mysql-ndb-mgm becae0693dae627e6960249ae17bae19
    /etc/init.d/mysql-ndb 25ad87aee00cf24aea5daf7ad4ed899f
    /etc/init.d/mysql 246ab7d69e00af14f03d12c54465b59c
    /etc/logrotate.d/mysql-server 64e209fe34f73fbf10c9479bf30947c4
    /etc/mysql/debian-start 4272e4d740c8ae651ac35bbf4d2ed6dc
    /etc/logcheck/ignore.d.workstation/mysql-server-5_0 20ccf274886d8f2897a10d9288579410
    /etc/logcheck/ignore.d.server/mysql-server-5_0 20ccf274886d8f2897a10d9288579410
    /etc/logcheck/ignore.d.paranoid/mysql-server-5_0 e8dbe35695437354553e61fd65b702ba
  • dpkg -S /etc/mysql # 查詢 /etc/mysql 屬於哪些套件
    mysql-common, mysql-server-5.1: /etc/mysql

解決步驟

  1. sudo dpkg --purge exim4-base mysql-server-5.0 # 移除 exim4-base、mysql-server-5.0
  2. 註: 若用 apt-get remove --purge mysql-server-5.0 會連 mysql-server-5.1 一起移除.
  3. dpkg-reconfigure sysv-rc # 建議先看 /usr/share/doc/sysv-rc/README.Debian, 確定要使用 sysv-rc, 則再執行一次此命令
  4. dpkg-reconfigure sysv-rc

相關網頁

by jon at March 02, 2010 03:25 PM

March 01, 2010

tsung

PHP 5.3.x 的 strtotime() 時區設定 警告訊息修正

Debian Linux 使用 testing 的話, 若於上星期有做過 dist-upgrade 的話, 就會發現 PHP 已經被升級到 5.3.1-5, 而且出現一堆警告訊息.

我遇到的有下面這三種錯誤訊息:

  1. PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /tmp/a.php
  2. PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/imagick.so' /usr/lib/php5/20090626/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
  3. PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0

strtotime() 修正

  • PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /tmp/a.php

strtotime() 出現的這個警告是要我們先指定正確的時區(Timezone), 再來使用這個 function.

解法下述幾種 (挑其一即可, 建議用 1 或 3 的方法)
  1. 於 PHP 檔案內使用 date_default_timezone_set()
    ex:
    <?php
    date_default_timezone_set('Asia/Taipei');
    echo strtotime('2010-03-01');
    ?>
  2. 設定 php.ini
    vim /etc/php5/apache2/php.ini # 於 php.ini 的 date.timezone
    ;date.timezone =
    改成
    date.timezone = "Asia/Taipei"
  3. 設定 php.ini (於 Debian 比較建議這樣做, 就不用去分別改 apache / cgi / cli 的 php.ini)
    vim /etc/php5/conf.d/date_timezone.ini # 於此檔案加下述
    date.timezone = "Asia/Taipei"

PHP Startup: Unable to load dynamic library 修正

  • PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/imagick.so' /usr/lib/php5/20090626/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0

發現下述這幾個都不見了 (php5-imagick, php5-mhash, php-apc)

  • /usr/lib/php5/20090626/apc.so
  • /usr/lib/php5/20090626/mhash.so
  • /usr/lib/php5/20090626/imagick.so
  • php5-mhash 已經包進去, 不需另外安裝, imagick、apc 目前還沒看到.
解法
  • rm /etc/php5/cli/conf.d/apc.ini /etc/php5/cli/conf.d/imagick.ini /etc/php5/cli/conf.d/mhash.ini

Comments starting with '#' are deprecated 修正

  • PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0

cat /etc/php5/cli/conf.d/imagick.ini # 第一行有個註解 "#"

解法
  • 在 PHP 5.3.x 這些 ext 的註解已經不建議使用 "#", 所以將這個註解拿掉, 或者將 "#" 改成 ";" 開頭即可. (開頭 ; 也是註解的意思)

by jon at March 01, 2010 03:24 PM

February 28, 2010

fred

夜,寂靜

也只有在獨自一人時,才能清醒的與自己對話,於大樹底下偷偷埋藏的思緒,此時會猛然湧上心頭,而靈魂末端的枝葉總自顧掉落。

夜有多麼靜,心跳的聲音卻如此吵雜。惡耗了一整晚,解不清的工作乾脆直接扔在一旁,開始細數著在微弱燈光下忽明忽現的嗡嗡飛蚊,傾聽自己心中的聲音。

驚呼,忽然一陣癢感襲來,將一切停滯的夜又搔動了起來。此時怒氣盛起,我面目掙獰如惡鬼一般,非與飛蚊理論究竟不可。

『唉,你長得比較高大,血多到都可以把我淹死好幾輩子,而我只求貴人賞碗飯,讓我活命罷了,你又何必吝嗇?這世界死氣沉沉寂靜又孤獨,我們相伴不是甚好?』眼前那飛蚊老兄,收起翅膀,坐在眼前電腦螢幕上嘆息說著。

『我並不介意血被吸,而是介意心情被打亂。平時的一切種種已經令我夠煩燥了,現在,只想不要被打擾的思考著。』我說。

飛蚊老兄瞥著頭看了看我,似乎看出了什麼端昵。

『哈哈,你不過就是不相信人而已,不想與外界接觸。就像我,我也不相信你心情好,就會讓我飽餐一頓,還不如我自己找機會大大咬上一口。』飛蚊老兄表現得一付很懂的樣子。

『我在想的就是要不要再給一次機會,將信任再一次留給一個人。畢竟,曾經能信任,也花去了不少時間培養,但就是因為後來有一連串太多太久的猜疑,才讓我越來越痛苦,變了一個人似的。尤其很多話不敢說,更讓情況惡化。害我現在一切收進心底,只有在這時候,才會拿出來想想。』我說。

『想通了,隨時都可以重新來過啊。只要你和其他人願意溝通,有什麼不好重建信任,就像現在我和你一樣的交談簡單,你我不都開朗許多。』說畢,飛蚊老兄飛了起來,搖搖晃晃的從燈光邊緣隱沒。

『若是可以,我也想單單純純、平平淡淡的去維持這關係,不要再有什麼無聊的猜忌亂想。』我邊說,邊伸了一個懶腰,準備開始繼續工作。

我話還沒講完,又感到一陣騷癢,反手『啪』一聲,滿手鮮血。仔細一看,原來,飛蚊老兄已死於我掌下,身驅四分五裂、鮮血淋漓,這似乎說明了人類永遠不可能與蚊蟲互相信任。

接著,早晨的陽光也打亂這夜,一切思緒又沉回樹下的時光寶盒,等待著下一次的開啟。

by cfsghost@gmail.com (Fred Chien(錢逢祥)) at February 28, 2010 10:52 PM

tsung

貝貝滿月禮 - Amo 阿默典藏蛋糕

今天是元宵節, 也是貝貝滿月的日子, 這幾天努力送蛋糕, 希望能合大家胃口~ :)

Amo阿默典藏蛋糕 - 荷蘭貴族手工蛋糕

蛋糕資訊: Amo阿默典藏蛋糕 - 荷蘭貴族手工蛋糕

by jon at February 28, 2010 03:57 PM

February 27, 2010

Cornelius

為何要使用 CPANMinus

因為原本的 CPAN Shell 啟動時間慢,累贅的資訊太多,太多 Prompt,且對新手來說,太多預設設定要做,但新手只是需要儘快準備一個完整的開發環境來寫 Perl 程式碼而已!然而 CPAN Shell 由於太古老,該程式碼已經相當難維護、整理,所以一直沒有良好的修正。更別說是 CPANPLUS ,CPANPLUS 本身又相依於一堆模組,簡直是疊床架屋,對新手來說,安裝好 CPANPLUS 甚至要花上 10 分鐘!

所以 Miyagawa 寫了 cpanminus ,這個模組 CPAN Shell 啟動時間相當的快,而且不相依於其他累贅的模組如 Moose... :-P

cpanminus 只需要你有一個 C Compiler, Module::Build , ExtUtils::MakeMaker (Perl 都內建了), 甚至直接內嵌了 HTTP::LIte 模組。

所以安裝 cpanminus 根本不需要花上超過 3 秒的時間!想想看你在升級 CPAN 或是 CPANPLUS 的時候多麼痛苦!!

再來,常有使用者提出若無 root 權限,該如何安裝 CPAN 模組,這個問題一直是長期以來困擾大家的!而且又無完善解法。

只要以非 Root 使用者執行 cpanm 安裝模組,該模組自動會裝到 home 目錄底下 ~/perl5 ,也不需另外自行設定!

安裝方式相當簡單:

cd ~/bin
wget http://xrl.us/cpanm
chmod +x cpanm


這樣就可以了,因為 cpanm 只是一個單一的執行檔!

使用方式:

cpanm Module
cpanm MIYAGAWA/Plack-1.0000.tar.gz
cpanm ~/mydists/MyCompany-Framework-1.0.tar.gz
cpanm http://example.com/MyModule-0.1.tar.gz
cpanm http://github.com/miyagawa/Tatsumaki/tarball/master
cpanm --interactive Task::Kensho


你也可以到 github 上取得最新的版本! @miyagawa ROCKS!!

http://github.com/miyagawa/cpanminus

by c9s (cornelius.howl@gmail.com) at February 27, 2010 11:22 PM

February 25, 2010

tsung

Web Frameworks 的歷史演進圖表

Web Frameworks 從 1999 年到現在的演進圖, 在 Github 上面有持續的更新. :)

by jon at February 25, 2010 10:45 PM

jserv

演講:QEMU JIT Code Generator & System Emulation

應 [台灣科技大學資訊工程所] 的邀請,同事 [cmchao] 與小弟將會探討相當多人研究、但很少有全面性探討的 [QEMU] JIT Code Generator 與系統模擬的範疇。不同於散見於網路的 QEMU x86 或 ARM 零星資訊,我們將分析由台灣 [Andes Technology] 所發展的 NDS32 硬體架構與 QEMU 對應的 Code Generator / Emulation,對這樣一個全新的硬體架構、指令集,如何在 QEMU 上實做足夠的系統模擬並給予頗大的效能提昇,期望藉由實務經驗,讓聽者建立全面的概念。 時間訂於 2010 年三月 15 日下午兩點,演講地點: TR-211 (研揚大樓二樓,以系上公告為主),講題為 "QEMU JIT Code Generator...

by jserv at February 25, 2010 02:53 AM

February 24, 2010

tsung

±2℃ / 正負2度C 紀錄片

±2℃ / 正負2度C / +-2度C 先整理起來, 忙完再來看.

±2℃ 簡介

下述簡介摘錄: 陳文茜的《±2℃》紀錄片

  • 由孫大偉、陳文茜監製的紀錄片《±2℃》,是第一部記錄台灣氣候變遷的紀錄片。
  • 台灣必須面對的真相是,台灣人口密度過高、土地侵蝕率高等,恐怕是氣候變遷下「全世界的第一批難民」。
  • 紀錄片取名《±2℃》,源自日前哥本哈根會議的結論,即是未來人類如果要生存,就必須將氣溫控制在攝氏兩度以內。
  • 《±2℃》行動聯盟根據聯合國跨政府氣候小組(IPCC)的報告以及中央研究院的研究結果,分析出不是很樂觀的資訊:當馬爾地夫成為世界上第一批沉沒的島嶼時,東石港、林邊、東港、麥寮也將成水鄉澤國。海平面如果繼續上升,蘭陽平原、台北盆地和高雄市也將淹沒。

±2℃ 影片

  1. 第一段:全球的氣候變遷
  2. 第二段:台灣,我們的氣候變遷遷
  3. 第三段:地球生氣了
  4. 第四段:「±2℃」的意義
  5. 第五段:我們的家,台灣
  6. 第六段:給我們的下一代
  7. 第七段:世界上即將消失的地方
  8. 第八段:我們該做什麼?

±2℃ 完整影片下載

相關網頁

by jon at February 24, 2010 10:26 PM

February 23, 2010

tsung

Vim 的 套件(外掛)管理系統 - Vimana

Vim 在安裝套件(Package)、外掛(Plugin) 等等的時後, 總是要到 Vim 官方網站去搜尋, 然後看清楚說明, 要擺到哪去等等, 才下載安裝.

Vimana 簡介

Vimana 解決了這些安裝的困擾, 感謝 c9s. Orz..

下述 Vimana 簡介 摘錄自: Vim Script Manager - Vimana (安裝步驟 等等都在此頁有 中文 的詳細說明.)

一般來說,Vim Script 的安裝都是到 vim.org 上,搜尋 Script,然後參考該項目的安裝細節來手動安裝。但是每個 Script 的發行、打包的方式又不一樣,所以大部分 Script 的安裝都還是得手動進行。 有的是直接將檔案複製到 Vim 的 Runtime 目錄裡頭即可,有的是得先解壓縮,然後使用 cp 或是 rsync 命令依序照目錄結構複製到 Vim 的 Runtime 目錄裡。Vim 雖然也提供了 Vimball 格式的打包檔,但是也不夠普及。

然而 Perl 有 cpan 命令、Ruby 有 gem 命令、Debian 有 apt-get 命令,Vim 卻因為發行方式不統一而一直沒有一個可用、堪用的工具來做這樣的事情。為了解決這個問題,我的想法是,針對每一個發行的 Script (該 Script 有可能用是 tarball 包裝也可能只是純文字檔案) 來做安裝策略的偵測,於是 Vimana 就誕生了。

by jon at February 23, 2010 10:39 PM

在 phpBB 安裝 Smilies (表情符號)

在張貼文章時, 想要插入表情符號, 所以來為 phpBB 安裝 Smilies (表情符號).

安裝步驟

  1. 下載 Smilies (onion.zip)
  2. unzip onion.zip
  3. mv onion/* /phpbb/images/smilies/ (smilies.pak 也要搬進去)

設定

  1. 進入 phpBB 的 ACP管理介面
  2. 發表 -> 表情符號
  3. 安裝表情符號包
  4. 選擇 smilies.pak
  5. 安裝表情符號包 即可.

by jon at February 23, 2010 03:16 AM

February 22, 2010

tsung

好文: 如何正確發送 大量 Email

大量寄信 很容易就會被當 spam 來處理, 此 IP 就永遠被列為 spam 的 IP, 這篇文章列出要大量寄信需要注意的事項.

如何正確發送 大量 Email

詳見: 如何正確發送(大量) Email 信件 - ihower

  • 處理退信 - 信箱位址錯了, 不要一直寄
  • 與主要的 Email 服務商設定意見反應機制(Feedback Loop) - 跟 Y! / G / MSN 等連繫.
  • 建立自已的 email 清單 - 不要買清單來亂寄
  • 不要使用 100% 以圖片為主的內容
  • 使用垃圾信判讀工作測試
  • 驗證 HTML - HTML 格式要正確
  • 模擬測試終端使用者環境 - 使用不同 Email Client 測試
  • 專屬 IP - 別人 SPAM, 跟著害到你也被列入黑名單
  • 設定 SPF Validation - SPF
  • 設定 Domain Keys Verification - Domain Keys
  • 設定 Reverse DNS 反查 - 寄信的 IP 無法反查, 可能根本就寄不到
  • 驗證寄信者地址 - 寄信人 Email 位址要是正確存在的

相關網頁

by jon at February 22, 2010 12:38 AM

February 20, 2010

yungyuc

vim advocacy

http://www.viemu.com/a-why-vi-vim.html

推特上看來的。要記下來以後方便教別人 vi/vim 使用。

by yyc@seety.org (yungyuc) at February 20, 2010 11:30 PM

fred

Clutter EGLX Backend doesn't work correctly

Recently, our team work hard on ARM platform which is TI OMAP 3530, and also it makes us crazy actually. As you know that source code of TI PowerVR driver and SGX is not publicly available, there is no open source solution cause it's difficult to debug graphical stuffs.

If you have tried to use Clutter with EGLX Backend, you might get only the blank stage and nothing works correctly. It happened due to X server might still have things in its buffer to render when swap buffers.

Here is a patch to solve this problem:

http://people.linux.org.tw/~fred/patches/clutter-1.0_1.0.8-wait-for-vsync-before-SwapBuffers.patch

by cfsghost@gmail.com (Fred Chien(錢逢祥)) at February 20, 2010 10:26 PM

jouston

Ubuntu上使用SCM SCR3340 Smart Card讀卡機以及Web ATM

前一陣子感謝 PIL 的 Larry 清倉 SCM Microsystems Inc. SCR3340 Smart Card讀卡機。我也躬逢其盛入手了一組。 不過呢,我是在一般人眼中很奇怪的Linux使用者。目前採用的Linux Distribution是Ubuntu 9.10。在購買之前,我稍事搜尋了一下,發現這張讀卡機本來就有支援。換句話說,不需要另外安裝Driver,插上去就可以使用。 拿到手之後,執行pcsc_scan指令就可以看到以下訊息: Reader 0: SCM SCR 3340 ExpressCard54 (21220712703307) 00 00 表示該Smart Card讀卡機已經驅動。如果你找不到這個指令,Ubuntu應該會要你安裝pcsc_tools套件。 接下來,目前國內唯一的一個可以在Ubuntu上執行的WebATM是玉山銀行。

by noreply@blogger.com (Jouston Huang) at February 20, 2010 08:02 AM

February 19, 2010

tsung

好市多照片線上沖印

小朋友剛出生, 要寄照片回去給家人看, 才知道好市多有線上沖印的服務.

帶隨身碟去好市多洗照片, 需要等 1hr, 用線上沖印服務, 就可以在家裡把要沖印的傳過去, 到現場就可直接領取囉~ :)

註: 優點是到場就可以直接取, 缺點是並不是 1hr 就可以立刻拿到, 需要等來信通知. 約2~3天的工作天.

除了照片外, 還有月曆和賀卡的項目, 考慮要不要做些小朋友的月曆或賀卡來保存~ :P

註: 下述價位是 2010/02/20 的價位, 最新價位請再自行看官方網站~

照片

  • 4x6 (10.16 cm x 15.24 cm) NT 2.5
  • 6x8 (15.24 cm x 20.32 cm) NT 12
  • 8x10 (20.32 cm x 25.40 cm) NT 24
  • 8x12 (20.32 cm x 30.48 cm) NT 25

照片 VS 解析度 (各尺寸相片解析度標準)

  • 4 x 6 - 640x460
  • 6 x 8 - 920x690
  • 8 x 10 - 1150x920
  • 8 x 12 - 1380x920
  • 賀卡 - 640x460

相片月曆

  • 6x9 (15cm x 22.5cm) NT 249.00

相片賀卡

  • 5x6 (12.7cm x 15.2cm) NT 179 迎春促銷價: NT 125
  • 1套: 25張卡片+信封 (可選擇5種卡片版型)
  • 為個人量身訂作的賀卡,適用於結婚、文定、彌月之喜、聖誕節、喬遷或所有值得紀念的日子。
  • 選5張您最喜歡的照片沖印成25張卡片,加上您滿滿的祝福,用賀卡傳遞出去。

by jon at February 19, 2010 05:15 PM

February 18, 2010

Cornelius

使用 keychain 管理 ssh 金鑰

一般來說要利用 ssh key 來做 remote ssh login 的時候,就會需要用到 ssh-agent。大多使用下列命令來啟動 ssh-agent

$ echo `ssh-agent` > .agent

如此會將 ssh-agent 的環境變數如 pid 等等輸出至 .agent 檔案內。

接著使用:

$ source .agent

將 .agent 環境變數載入進來。

接下來再使用 ssh-add 命令來將私有金鑰載入:

$ ssh-add path/to/key1

在 ~/.ssh/config 內,加入

Host yourhost.com
IdentityFile path/to/key1

以告知 ssh 使用 path/to/key1 的 private key,但記得將 key1.pub (public key) 新增至 remote 的 .ssh/authorized_keys 檔案內。

前面所敘述的 ssh-agent 命令使用時常會遇到管理的問題,所以還得自己寫 script 檢查是否已有既有的 ssh-agent 正在運行等等之類的繁瑣事項。而 keychain 則是一套 script 可幫你處理這些問題。

在 ubuntu 底下安裝 keychain:

$ sudo apt-get install keychain

以 macports :

$ sudo port install keychain



使用方式很簡單,不需要自己 launch 一個 ssh-agent ,只需直接呼叫 keychain 命令將 private key 載入:

$ keychain path/to/key1

接著 keychain 會告知該 ssh-agent 環境變數的檔案位置,提供給不同 shell 使用的 script ,只需將該檔案的 path 加入至 .bashrc 或 .zshrc ...

$ source ~/.keychain/....blah

即可。如此一來每當開新環境時,就不需再去檢查 ssh-agent pid ,或有 ssh-agent,就直接使用既有的的,若無,則 launch 一個新的 ssh-agent 並且更新 ssh-agent 的環境變數。

以下是我用來載入金鑰的 script:



由於我都將 public key , private key 放置於 ~/.ssh/keys 內,該 script 用以自動將 private key 載入。

by c9s (cornelius.howl@gmail.com) at February 18, 2010 03:25 PM

tsung

使用 netstat 找出不正常的連線

我最常用的是 netstat -tln, 發現這篇文章把查看不尋常連線的方式都寫出來了. (適用於 Ubuntu、Debian Linux、FreeBSD.等)

註: 此文抓出來的 IP, 可再搭配 nslookup、traceroute 等反查追蹤看看.

下述轉載自: netstat 檢查不尋常連線

以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

  • netstat -na
    顯示主機上所有已建立的連線。
  • netstat -an | grep :80 | sort
    顯示所有 port 80 的連線,並把結果排序。
  • netstat -n -p|grep SYN_REC | wc -l
    列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
  • netstat -n -p | grep SYN_REC | sort -u
    同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
  • netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
    列出發送 SYNC_REC 的所有 ip 地址。
  • netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
    計算每一個 ip 在主機上建立的連線數量。
  • netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
    列出從 TCP 或 UDP 連線到主機的 ip 的數量。
  • netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
    列出每個 ip 建立的 ESTABLISHED 連線數量。
  • netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
    列出每個 ip 建立的 port 80 連線數量。

相關網頁

by jon at February 18, 2010 07:00 AM

February 17, 2010

FourDollars

Firefox 擴充套件 ScribeFire 3.5 的錯誤解決方法

在 ScribeFire 升級到 3.5 後就無法正常啟動使用了
稍為 Google 了一下找到日本網友有提供解決的方法
http://uratene.sblo.jp/category/811798-1.html
http://fxwiki.blog63.fc2.com/blog-entry-246.html
過程就是到該套件的目錄底下 Linux 系統應該會在 ~/.mozilla/firefox/XXXXXXXX.default/extensions/{F807FACD-E46A-4793-B345-D58CB177673C} 底下
進入子目錄 chrome 底下解開 scribefire.jar
$ unzip scribefire.jar
然後修改 locale/zh-TW/overlay.dtd 裡面的內容
將 123, 124 行的
<!ENTITY performancing.editor.bar.strong.tt "強烈標示 <Strong>">
<!ENTITY performancing.editor.bar.em.tt "特別強調 <em>">
改成
<!ENTITY performancing.editor.bar.strong.tt "強烈標示 &lt;Strong&gt;">
<!ENTITY performancing.editor.bar.em.tt "特別強調 &lt;em&gt;">
然後更新壓縮檔 scribefire.jar
$ zip -r scribefire.jar content locale skin
再重新啟動 firefox 就可以了~

by FourDollars (fourdollars@gmail.com) at February 17, 2010 04:06 PM

AllTray + "app mode" of Google Chrome

以單純要收聽台灣的網路廣播就可以執行以下的命令
$ cat > .local/share/applications/hichannel.desktop <<ENDLINE
[Desktop Entry]
Name=hiChannel 網路廣播
Exec=alltray google-chrome --app=http://fd.idv.tw/radio/player.html
Icon=google-chrome
Type=Application
Categories=GTK;Application;AudioVideo;Audio;Player;
ENDLINE
然後就會在應用程式選單裡面看到
執行起來就像是
 還可以點選工具列中的圖示隱藏起來

或是想要使用微軟的 MSN Messenger 網頁版
 $ cat > .local/share/applications/msn.desktop <<ENDLINE
 [Desktop Entry]
Name=MSN Messenger 網頁版
Exec=alltray google-chrome --app=http://webmsn.msn.com.tw/wlml/index.htm?uri=webmsn.msn.com.tw
Icon=google-chrome
Type=Application
Categories=Network;InstantMessaging;
ENDLINE
不過相信目前應該沒有人會想要使用 MSN Messenger 網頁版
雖然它有機會做得更好更容易使用,不過目前的情況並不是這樣的 :P

總之就是 AllTray 跟 Google Chrome 的 "app mode" 搭配使用可以讓許多的網頁應用程式使用起來更像是本機上面的應用程式~ :)

by FourDollars (fourdollars@gmail.com) at February 17, 2010 03:30 PM

Asho(阿信)

水杯加至5/6的行車體驗感

    大年初三時,因為要到彰化聚餐,所以一早就必須從嘉義開車上去,一如往常行車,我會把水加在一個塑膠杯上,這一次水位是杯子最高刻度的位置,約5/6左右。















    看到水位時,其實還滿害怕的,因為水真的滿高的,很懷疑自已是不是會弄濕整個杯架。充滿著疑惑上路了,慢慢的開著開著後,跟在前面的車子突然紅燈亮起,我也一踩剎車,結果水就溢出來了啦...><

    急忙地停在路邊後,還好只是漏一點點,再把水加到剛剛的位置,然後再上路。由於這次的水真的滿高的,起步或剎車時要很小心,秘訣就是要平順,不能突然加速、不能突然重踩。慢慢習慣之後,到了第一個直角彎時,打算用以往的速度轉彎(約45KM),一轉時,發現水已經壓到杯子邊緣了!!!

    真的是把我嚇了一跳,勉強彎過去後,我才知道我的轉彎還是有很大的問題,沒辦法很平順地切彎,經由這一次的教訓,我就把音響關掉,仔細聽起步、剎車後的引擎聲,過彎時觀察一下水繞杯子的方式......

    來彰化的這一段路上,試了不同的開法,漸漸地感受到轉彎時,方向盤的控制和油門踩法,從腳底的感覺和腰部接受到車子的訊息,就能夠在行車時讓車子的晃動更小。

    好不容易到達目的地後,女友看到車子內有一杯5/6滿的水嚇到了,但又馬上笑我是瘋子...



    歡樂的時光總是過得很快,一下子,又是要告別彰化的時候了,回程時,來到熟悉的螺旋形交流道時,以往我的速度只能控制在45~55之間,不知道是不是因為這一陣子練水杯的關係,我可以用 60KM 以上的速度行駛這個地方,行車線也跟以往有點不同,重點是很穩定,我也不知道是怎麼開的,就是一個字「順」,水只有輕輕地晃阿晃阿,但卻沒有溢位的情形,我自已都嚇一跳了!

    來到古坑後,就不斷地練習過彎的感覺(不要求速度、求穩),我真的覺得有不一樣的地方,轉向時不是只有轉一個方向,會有點回正再繼續彎,不知道怎麼用文字形容。

    anyway,最後就是回到家,我熄火後,有回想一下情境模擬來踏剎車和油門就結束了這一段水杯之旅......

    這一次的水雖然沒有溢出來,但過程中其實還是滿驚險的,還需要多加練習,希望自已的開車技術會更進步。

    下一次出門,我會找一個上坡來練習跟趾,這是最近才想到的練跟趾方法,期待中....:-D

by 阿信 (noreply@blogger.com) at February 17, 2010 06:19 AM

February 13, 2010

fred

模仿且沒有新意的 iPhone-like UI

為了應付即將開學的各項開支,到了春節依然不能停滯而必須努力工作。原本,只是為了工作單單在修某支程式的使用者界面,卻一時心血來潮,幫這選單 UI 添上了『加速度』的處理,更沒想到結果居然讓該 UI 的行為幾乎和 Apple iPhone 一模一樣。就這樣,除夕夜一個晚上,都在玩弄這支程式中不知不覺度過了,半點錢都沒有賭到,歲到是守得很徹底。為了紀念這隻小年獸,就用手機錄下成果。(沒有專業器材,畫質不佳還請多包涵!)


by cfsghost@gmail.com (Fred Chien(錢逢祥)) at February 13, 2010 11:39 PM

February 12, 2010

tsung

[轉載]羊肉爐不是故意的

在書架上找書, 每次看到 羊肉爐不是故意的, 總會想要翻個幾頁, 雖然看過很多次了, 但是每次看都還是笑到翻掉.

決定還是把網路上的全文找出來, 心情不好時, 隨時可以找出來看.

全文可見:(轉)羊肉爐不是故意的 - 備份

by jon at February 12, 2010 08:47 PM

fred

用 C 語言處理常見的旗標位元運算

正如國中理化課所說,電子產品都是由滿滿『0、1』所構成,大家早就都了解這件事。但現實上,由於要求的功能愈疊愈多,低階的運算早就被眾人所忽略。無論大家如何忙著處理物件的繼承問題,又或者是因時間太多而研究『1+1=2 慢吞吞語言』,低階的運算還是依然沒有消失,反而更為重要。

位元運算不外乎就是『AND、OR、XOR...』等邏輯概念,主要目的是把『1 變 0』、『0 變 1』或有條件維持不變,在程式中比較常看到的地方,通常會在硬體驅動程式(Driver)之中。而在高階應用程式中,也往往因為要旗標條件的判斷,也會看得到其存在,如 Linux 下的檔案權限。

一個更貼切的例子,假設我們現在寫一個滑鼠驅動程式,我們要怎麼設計資料結構,讓應用程式得知用戶(User)按了哪幾個鍵?用戶可能是一次只按『一個鍵』,也可能一次按『左右兩個鍵』,更有可能按『左鍵和中間鍵』,有多種組合存在。

一般初學程式者可能會用 boolean 或 int 這樣寫:
struct _mouse_event {
        int button1;
        int button2;
        int button3;
        ...
};

但明明只是『0、1』,為何要用到 int 資料形態?除了浪費記憶體,運算上也整整慢了好幾個 CPU Clock。所以,多數程式開發者碰到此類問題,會比較偏好以位元為最小單位來寫:
enum {
        MOUSE_LEFT_BUTTON = (1 << 0),
        MOUSE_MIDDLE_BUTTON = (1 << 1),
        MOUSE_RIGHT_BUTTON = (1 << 2)
};

struct _mouse_event {
        int button;
        ...
};

當設定哪幾個鍵被按下,只要用位元運算設定旗標就可以了:
struct _mouse_event mouse;
mouse.button |= MOUSE_LEFT_BUTTON;
mouse.button |= MOUSE_LEFT_BUTTON | MOUSE_RIGHT_BUTTON;

當然,反向設定也是可以:
mouse.button &= ~(MOUSE_MIDDLE_BUTTON);
mouse.button &= ~(MOUSE_MIDDLE_BUTTON | MOUSE_RIGHT_BUTTON);

後記

以前小時候不懂事,又被很多高階 API 保護得很好,常被驅動程式中的位元運算嚇哭,其實,雖然位元運算看起來可以千變萬化,但就那幾種用法最常用而已。在此筆記之,讓大家一起哭。

by cfsghost@gmail.com (Fred Chien(錢逢祥)) at February 12, 2010 02:11 PM

tsung

看各種 JavaScript Framework 對 DOM 操作 於瀏覽器的速度比較

各種 JavaScript Framework(MooTools, JQuery, Prototype, YUI, Dojo) 對 DOM 的操作來比較執行速度, 於各種不同瀏覽器, 執行的結果也會不同.

網頁可見: SlickSpeed Selectors Test

註: 此篇用的 Framework 版本都已經是舊版, 不過可於 slickspeed - css selectors test suite for javascript frameworks 來改成新版測試. (Source code)

by jon at February 12, 2010 09:41 AM

February 10, 2010

tsung

辦理新生兒(嬰兒)出生登記

原來報戶口是要找各縣市的戶政 (搜尋 "報戶口 + 新生兒", 政府的網頁都是 404, 直接到到台北縣市 的 市政府網站去找, 搜尋結果都不是我要的.)

戶藉設在汐止, 就是到 汐止市戶政事務所 登記.

辦理新生兒登記的 重點 與 資料準備

下述資料取自: 汐止市戶政事務所 - 出生登記

  • 申請對象: 生父母、祖父母、戶長、同居人或撫養人、受委託人
  • 主辦單位: 各鄉鎮市戶政事務所
  • 應備證件: (重點: 出生證明書、戶口名簿、申請人國民身分證、印章、生父母結婚日期)
    1. 出生證明書(非在醫院、診所或助產所出生無法提出生證明書者,應提憑醫療機構開具載明受鑑定者雙方之姓名之DNA親子鑑定報告書或領有證照之醫護人員開具之出生通報表(適用胎兒出生後一個月內)辦理出生登記)(均需正本)。
    2. 戶口名簿、申請人國民身分證、印章(或簽章),並請提供生父母結婚或同居日期。
    3. 委託他人申請者,應附委託書、受委託人國民身分證、印章(或簽章)。
    4. 子女從姓約定書(本國人與外籍配偶之婚生子女之姓氏亦同,並應符合我國國民使用姓氏之習慣),惟於出生證明書載明者,免附。
    5. 無依兒童出生登記,應提憑警察機關之公文書及嬰兒照片查實辦理。
  • 申請期限:自胎兒出生日起60日內 (註: 2010/2/11 更新)

汐止市戶政事務所 相關資料

下述取自: 汐止市戶政事務所 - 服務時間及電話

  • 汐止戶政事務所:臺北縣汐止市新台五路一段268號6樓 TEL:02-26429866,0800011246 FAX:02-26429855
  • 中興辦事處地址:臺北縣汐止市福德一路258號2樓 TEL:02-26941981 FAX:02-2694-2065

相關網頁

by jon at February 10, 2010 09:32 PM

February 09, 2010

tsung

Web、DB Server 等 軟體的極限是多少?

常常會有人問, 某些套件、軟體, 可以承受多大的量? 極限在哪裡? 可以容納多少使用者? 怎麼設定才可以承受更大的量? 等等.

這個答案很難回答, 因為都是看如何使用, 有些每秒 QPS 可以破萬, 也有每秒 QPS 只有 10 就爆炸了.

全部都是在程式如何寫, 系統、軟體如何去設定、操作的問題.

Web 、DB Server 等 軟體的極限?

雖然如此, 還是很想知道極限在哪邊?

答案也很簡單: 軟體的速度再快, 最後極限還是在硬體. (例: 不管 Apachenginx 再怎麼調整, 最後極限會是網卡的頻寬.)

當你的網卡頻寬都吃滿後, 就算 CPU 很閒、Ram 很空、IO 也很閒, 一樣沒辦法把資料送出去.

不過, 如果是遇到這種狀況, 可以考慮多買一些便宜的機器, 來解決這些問題. :)

by jon at February 09, 2010 09:19 PM

February 08, 2010

tsung

在 phpBB 加入 Google Analytics code

要在 phpBB 加入 Google Analytics code 的步驟:

  1. vim styles/prosilver/template/overall_footer.html
  2. 於 </body> 前加入
    <script..... Google Analytics code ..</script>

放最下面除了頁面比較快外, 主要是 Analytics code 有時後會把頁面卡住, 雖然可以設 async 避免(Google Analytics goes async), 不過, 盡量不想去改 Google 本身提供的語法.

by jon at February 08, 2010 09:41 PM

大同電鍋不銹鋼蒸籠 - 說明書食譜

大同電鍋 相信是家家必備的良品, 之前買沒有用心看說明書, 前幾天去買 大同不銹鋼蒸籠 才發現有時間表可以參考.

註: 蒸籠蠻好用的, 原本的要努力疊起來的食物, 蒸籠直接可以平擺, 擺滿滿的一起蒸, 輕鬆多了~

說明書很容易弄丟, 所以把說明書的食譜目錄打起來放. (註: 幾杯 => 量杯的水量)

電鍋使用時間表 (空鍋)

  • 水量: 時間
  • 半杯: 14分
  • 1杯: 20分
  • 1杯半: 26分
  • 2杯: 32分
  • 2杯半: 38分
  • 3杯: 44分
  • 3杯半: 50分
  • 4杯: 56分
  • 4杯半: 62分

食譜目錄

健康的飲食是少油炸多蒸煮

  • 菜名 - 量杯 - 備註
  • 苦瓜排骨 - 1杯半 - 用中茶杯裝盛, 再放入蒸籠內.
  • 茄片白鯧 - 1杯 - 蕃茄, 蔥, 薑, 酒, 鹽, 胡椒粉放在魚上面.
  • 陰瓜仔肉 - 1杯半 - 加入鹹蛋黃與蒜頭, 風味更佳.
  • 鼓汁小排 - 1杯半 - 豆鼓, 蒜頭, 辣椒切碎, 炒香淋在排骨上.
  • 冬菇蒸機 - 1杯半 - 蔥, 薑, 雞肉, 冬菇調味後拌勻, 放入平底盤.
  • 蒜泥白肉 - 1杯半 - 後腿肉蒸完後, 切片淋上調味料即可.
  • 醉雞 - 1杯半 - 雞肉蒸完後, 放入蔥, 薑, 麻油, 紹興酒浸泡.
  • 鮮菇醬肉 - 半杯 - 鮮菇切大塊, 加入豬肉醬肉, 放入平底盤.
  • 蒸花椰菜 - 半杯 - 花椰菜蒸完後, 淋上蠔油, 香油蒜末即可.
  • 蒸蛤蜊 - 半杯 - 用大碗公裝盛, 湯汁不流失.
  • 蒸紅蟳 - 1杯 - 鎖住原味, 營養不流失.
  • 蒸蕃薯 - 1杯 - 蕃薯去皮後, 切塊.
  • 茶碗蒸 - 1杯 - 用中茶杯裝盛, 再放入蒸籠內.
  • 筒仔米糕 - 2杯半 - 用中茶杯裝盛, 再讓入蒸籠內.
  • 芋頭扣肉 - 2杯半 - 用中碗公裝盛, 蒸完後倒扣即可.
  • 苦瓜蒸肉 - 2杯 - 苦瓜切半, 加入絞肉, 香菇, 再放入蒸籠內.
  • 人參雞 - 3杯半 - 用燉盅裝盛, 再讓入蒸籠內.
  • 蘿蔔糕 - 4杯 - 用棉布放入蒸籠內, 再倒入蘿蔔泥.
  • 蒸玉米 - 1杯 - 將玉米去掉外殼抹鹽, 再讓入蒸籠內.
  • 金針排骨 - 1杯半 - 用中茶杯裝盛, 再放入蒸籠內.

by jon at February 08, 2010 04:10 AM

February 04, 2010

tsung

於系統 移除 CNNIC 憑證

CNNIC 似乎很嚴重, 最近正忙到不可開消, 還好有不少長輩清楚的將原由、嚴重性做清楚的說明~

CNNIC 事件說明

下述摘錄自: Untrustable CNNIC SSL CA

CNNIC 就跟 TWNIC 一樣,是國家級的網路管理中心,主要負責如 domain registration 業務。雖然 CNNIC 號稱是非營利組織,但實際上對於豎立 GFW 之中國政府的各項要求,沒有能力拒絕。事實上,CNNIC 也幹過,發佈內含流氓軟件功能,且使用者無法刪除的中文上網官方版軟體這種事。

由於 CNNIC SSL CA 被納入 Root CA,依據 SSL CA 的階層式信任的架構,CNNIC 隨時可以發佈假的 CA,進行 SSL MITM (Man-In-The-Middle) 攻擊。這個意思是說,當你從境外連結中國境內的網站,透過 SSL 登入該網站系統時,即使瀏覽器顯示此 SSL 安全連線安全無虞,但實際上因為假的 CA 之故,很有可能連到的實際上是個釣魚網站 (DNS hijacking 是中國 GFW 常用的技倆)。因此,你的帳號密碼,就會被竊取;而如果這密碼是平常常用的密碼,那你所有平常用的資訊服務,盡皆淪陷。

另一種更可能的情境是,在中國境內連 Gmail 時,由於 CNNIC 的假 CA 與 DNS hijacking 之故,連到的是假的 Gmail 登入頁,你很可能毫無所覺,使自己的 Gmail 帳號密碼拱手予人。

CNNIC 憑證的結論

  • 結論: 盡快把 CNNIC 的憑證從系統移除.

於 Debian、Ubuntu Linux 移除 CNNIC 憑證

方法1
  1. sudo dpkg-reconfigure ca-certificates
  2. 選 Ask
  3. 將 mozilla/Entrust.net_Secure_Server_CA.crt 前面的 * 拿掉.
方法2
  1. sudo vim /etc/ca-certificates.conf
    mozilla/Entrust.net_Secure_Server_CA.crt
    改成 (前面加 "!" 號)
    !mozilla/Entrust.net_Secure_Server_CA.crt
  2. sudo update-ca-certificates

於 Firefox 刪除 CNNIC 憑證

  1. 編輯 -> 偏好設定 -> 進階 -> 加密
  2. 檢視憑證清單 -> 憑證機構
  3. 將 Entrust.net 下面的全部選起來, 按 "刪除" 即可.

相關網頁

by jon at February 04, 2010 09:22 PM

February 03, 2010

tsung

Google Open Source Porject 列表

Google Open Source 的專案到底有哪些? 總列表在哪?

Google Open Source Porject 列表

相關網頁

by jon at February 03, 2010 09:35 PM

Rex's blah blah blah

Java JVM 的 Dual Stack/IPv6 連線問題

大約從 J2SE 1.4/1.6 開始,Sun 所釋出的 Java runtime 開始支援 IPv6 連線功能。一般的 Linux 的套件系統 也開始支援 IPv6,許多系統預設是同時開啟 IPv4/IPv6 或稱為 Dual Stack 網路功能。

基本上,鼓勵各種軟體開始移植到 IPv6 網路上是一件好事。Java runtime 若在 dual-stack 的機器上,預設走 IPv6 位址,因為 IPv6 位址可同時走 IPv4/IPv6 網路。不過問題在於,若一般的 GNU/Linux Debian, Ubuntu 系統,預設會啟動 IPv6 介面,無論你所在網路是否有 IPv6 路由。

於是,你若在 Linux 上使用一些 Java 寫成的網路軟體,如 JDownloader 等,很有可能發生軟體運作後,卻什麽地方都連不上的症狀。解決辦法一是關閉 IPv6 網路功能,一則是利用 JRE 的參數,改為預設使用 IPv4 網路。

檢查 IPv6 是否驅動

首先,你若想確認是否開啟了 IPv6 網路,可於終端機下使用此指令判斷

$ ip addr|grep inet6

若出現了 inet6 之位址,即為開啟了 IPv6 網路。

你若想快速的關閉 IPv6 功能,可以利用 root 執行 ip 指令,直接刪除 inet6 位址

/sbin/ip addr del <ipv6address>/<prefixlength> dev ethX

舊版核心

在舊版核心,IPv6 功能是以模組方式存在,妳可以透過更改 modprobe (module-init-tools) 的設定,讓系統不載入對應驅動程式。關閉的方式很簡單,請修改 /etc/modprobe.d/ 之設定,如以 root 執行以下指令

# cat > /etc/modprobe.d/00local.conf <<EOF
alias net-pf-10 off
alias ipv6 off
EOF

更改之後,重新開機即可關閉 IPv6 功能。

新版核心

在新版的 Debian/Ubuntu 中使用 2.6 核心,因為內建 IPv6 驅動程式, 你得利用開機參數 (cmdline) 關閉之。作法是修改 /etc/default/grub 檔案,更改 GRUB_CMDLINE_LINUX_DEFAULT 一行,加入 ipv6.disable=1,如

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet"

修改完畢後,請用 root 執行 update-grub 後,重新開機。

JRE 參數

另外一項作法是更改 JRE 參數,你若知道啟動該軟體的 shell script 位於何處,可新增一參數如下

$ java -Djava.net.preferIPv4Stack=true Main

這樣就可以要求 JVM 預設使用 IPv4 stack.

這是一篇 Tips.

修訂紀錄 (20100207): 補充利用 iproute 關閉 ipv6 方法,說明新舊版核心處理方式。

by Rex Tsai at February 03, 2010 12:00 PM

February 02, 2010

tsung

PHP 免費線上電子書 - Practical PHP Programming

PHP 免費的線上電子書, 這本應該不算是入門, 比較偏中上程度適合閱讀, 裡面也有提到如何寫 PHP extensions 的 Hello world 版.

Practical PHP Programming 電子書

線上文件: Practical PHP Programming

目錄

  1. Preface
  2. Introducing PHP
  3. Simple variables and operators
  4. Functions
  5. Arrays
  6. Objects
  7. HTML Forms
  8. Files
  9. Databases
  10. Cookies and Sessions
  11. Multimedia
  12. XML & XSLT
  13. Output Buffering
  14. Java and COM
  15. Networks
  16. Miscellaneous topics
  17. Security concerns
  18. Performance
  19. Writing PHP
  20. Writing extensions
  21. Alternative PHP uses
  22. Practical PHP
  23. Bringing it to a close
  24. Answers to Exercises
  25. The future of PHP
  26. Glossary

by jon at February 02, 2010 09:36 PM

Cornelius

Vim - glob 應用

臨時需要將一目錄下所有的檔案插入為 img tag ,所以臨時直接在 vim command line 下寫了 這樣的東西來應付:


整理了一下:

by c9s (cornelius.howl@gmail.com) at February 02, 2010 03:53 AM

February 01, 2010

tsung

教育部免費的楷書字型

教育部提供免費的楷書字型可以讓一般人使用, 商用填寫資料來申請授權.

詳細可見: 教育部免費的楷書字型

by jon at February 01, 2010 08:32 PM

jouston

CarryMe快跑之三成到麻布

今天心情不好。各種狀況一大堆。 下班了以後,可以自己亂亂跑,是讓我很開心的事情。 騎CarryME回到InterContinental Grand Seoul,Doorman大概都已經因為我的CarryME而熟識了。開心的聊了一下,就回到房間裡把筆記型電腦丟在房間,然後打開GPS logger準備出發。 由於是晚上,肚子餓了,本來打算到現代百貨公司吃飯,結果地下美食街實在沒有甚麼看上眼的食物,就又拖著CarryME走向COEX Mall的懷抱。莫名其妙的被某家有部隊湯(Butae Jikae)的店吸引進去,結果很神奇的點了牛肉湯(YuKaeChan),而且還是不辣的版本。某前同事要是看到一定又會說我舌頭已經壞掉了,是啦,是有一點點的辣味,只不過跟我平常熟悉的辣牛肉湯比起來,這一點點大概只是輕微的調味而已。 吃飽喝足了以後,拉著CarryME上1F,也不知道去哪裡,

by noreply@blogger.com (Jouston Huang) at February 01, 2010 02:52 PM

Rex's blah blah blah

git archive 與 log 小技巧

時常,你得將手上的軟體原始碼壓起來釋出給第三方使用、測試。特別是你希望提供 daily basics/ revision basics 讓使用者取得最新版軟體的時候。

由於最近都已經只用 git,依據我自己的習慣,希望能夠在檔名中使用簡碼版次,以便未來能夠追蹤出該版次的問題。稍微問了一下友人與查了一下文件,取得 abbreviated commit hash 的作法如下

git log --pretty=format:"%h" -1

若你想將整份程式碼壓縮起來,可以使用

git archive --format zip -o filename.zip HEAD

倘若想加上日期作為檔名,請使用

git archive --format zip -o $(git log --pretty=format:"%h" -1).zip HEAD

若常常使用這個指令,有兩種作法,一是設定為 git alias. 另一則是利用 git 的 commands (verbs) 命名機制,在你的執行路徑 下,寫入一檔案名稱如 git-zip。並將上述指令加入檔案中,未來就可以使用 git zip 來產生最新版壓縮檔。

作法如
$ cat > ~/bin/git-zip
#!/bin/sh
git archive --format zip -o $(git log --pretty=format:"%h" -1).zip HEAD
$ chmod u+x ~/bin/git-zip
$ cd git-repository
$ git zip

另外,為了容易辨識版次,你也可以利用 gitattributes 在程式碼中加入 ident ($Id$) 作為標示。操作可參考 Lloyd Huang 所寫之 Howto.

這是一篇 Tip.

by Rex Tsai at February 01, 2010 12:00 PM

Cornelius

hypergit.vim (A Git plugin for vim)

最近的作品 - hypergit.vim。先前的 fastgit.vim 經過一些思考後,打掉重寫了,新增的 GitMenu 讓原本越來越的 Command 得以有組織性的以樹狀選單呈現,更 Powerful。

正為了要有一個樹狀選單,所以晚上以 VimL 實做了 Helper Message Class 以及 TreeMenu Class ,以方便其他各種 Plugin 需要用時重用。

該 Git Menu 可自動 Parse Remote 名稱 、Branch 名稱以產生 TreeMenu ,以及各 Menu Node 都可像 Nerd Tree Plugin 一般延展、收和,或執行。

以下是 Screenshot:


Well, It's still under development.

by c9s (cornelius.howl@gmail.com) at February 01, 2010 10:13 AM

Vim - Making your script auto-installable

Once you write a plugin , you will need it to be auto-installable. Vimana is a script manager , which parses script files, and looks for a "script type:" tag to install the script.

For example , if you have script , which is a ftplugin , then you should write:


in your script file. cases is ignored.

then the plugin could be installed via Vimana script manager.


Or if you have multiple file to install , you can put your script files in this kind of directory structure:

plugin/script.vim
ftplugin/script.vim
doc/script.txt

then tar it and upload to vim.org site , the plugin could be installed via Vimana too.

by c9s (cornelius.howl@gmail.com) at February 01, 2010 09:52 AM

Vim - TreeMenu.vim

This is a TreeMenu class for VimL. so that you can render a tree menu in a buffer.

Synopsis:


and you can also hook a method to after_render when each time the menu buffer is updated , just like what i do in hypergit.vim - I need to redraw git help message when the buffer is updated by tree menu.


Menu Source:

by c9s (cornelius.howl@gmail.com) at February 01, 2010 09:43 AM

January 31, 2010

tsung

Windows 免費燒錄軟體 - 燒錄 MDF、NRG、ISO、CDI 檔

前幾天要燒片子, 要用 Windows 免費燒錄軟體 - CDBurnerXP 正好網站掛了, 只好重新再替代品, 順便做做紀錄.

  • 註1: 我要燒錄的類型主要是MDF、NRG、ISO、CDI
  • 註2: CDI 是 毒蛇(DiscJuggler) 的映像檔, 可用 DiscJuggler、酒精燒錄, 或用 IsoBuster 解壓縮 到硬碟.

NRG、MDF、ISO 的燒錄軟體

  • 買光碟機通常都會附 Nero, 就可以輕鬆解決燒錄 NRG 的問題.
  • 另外要燒 MDF, 目前找到的免費軟體是 ImgBurn (可燒錄: BIN, DI, DVD, GI, IMG, ISO, MDS, NRG 和 PDI 檔).
  • 所以灌 Nero + ImgBurn, 就可以解決大多數問題囉~

相關網頁

by jon at January 31, 2010 09:35 PM

Asho(阿信)

2010/01/31練車後記

    寄來了適合小一的杯架,所以我也迫不及待地學著拓海把水裝到2/3的位置這樣開車。試試看如何不讓水溢出來。

     我選擇的路線是半天岩附近的路,不是很長,但有一些高低差的U型彎,而且這裡也是我十年前練手排車的地方,頗讓人回味。




    我以速限再加10~20的速度進行上下坡,上坡時,由於小一只有75馬力(March引擎),所以上山其實滿慢的,加上杯子的水只有2/3(裝太少了),所以根本沒有溢出來。

    接下來就是換下坡了,下坡其實有點小危險,但內心卻是很刺激!!!速度大約控制在40~60的速度+OD off的狀態,入彎依照Out-In-Out的規則切入,看好剎車點後再點剎入彎,之後車頭出彎後再加速,放在後車廂的東西跑來跑去的,聽起來怪有趣的...

    只不過在U型彎上,能感受到小一的不順,必須降到很慢才好轉,不然車子就有點推頭的現象,大概是我的技術還不到家...

    開這一段路時,會很明顯地感覺到以前開手排1800cc時和自排1300cc的差異,以引擎反應上,手排似乎能馬上依照我的想法去動,降檔、過彎、出彎和油門控制,手排反應比較明顯。但開小一時,就是有一種不順的感覺說不上來,尤其是過彎的穩定度。

    我想可能是我方向盤的轉向控制還不夠好,我開車時習慣單手開,這樣我能更細緻地去感受方向盤和油門踩踏的配合,高低差不大時,我還可以反應過來。高低差一大,另一隻手就要幫忙轉向,但這樣子就會忽略油門細膩的控制,還必須多練習。神之手果然不是蓋的...

     開了一陣子後,遇到前面有一台Lancer,我似乎靠太近了,所以就停下來讓對方走一陣子再開,也想一下過彎的感覺...

    經過這一次的練習,我覺得除了轉向+剎車的穩定度外,行車線也很重要,行車線對了,G力也會小一點,坐在車上也比較舒服。下一次我就要再挑戰一次,水要加到4/5以上這樣開看看...


題外話一:
    這一次開車出去,也發現了自已開自排會出現的問題,在倒車時,我的腳習慣在油門,有時候就會把油門當成剎車踩...Orz...這可能跟我以前開手排的關係...

    知道這個問題後,以後開自排時,一切到R檔,我就改成腳在剎車上待機,就不會出現這個問題了。

題外話二:
    這樣開山路,雖然只有短短的三十公里,油卻耗了不少...Orz......

by 阿信 (noreply@blogger.com) at January 31, 2010 07:23 PM

jouston

在韓國首爾(Seoul)暢行無阻的CarryMe

昨天凌晨,被老闆要求星期一要到韓國支援某個客戶。 大家看過"Who wants to be Millionaire?"嗎?這就是我的真實生活。 我立刻開始想辦法訂飛機票,喔,從今天開始到2月6日全部客滿(訂機票當日為Jan 30th),很好。EzTravel,這次不能靠你了。接下來,衝到EVA Air網站,憑藉著我是銀卡會員,先登入來碰碰運氣。啊哈,只有今晚才有班機... XD 花了一點時間訂票之後,才發現,靠腰,原來是MD90小飛機... 好吧,就算了,就算搭船也好,能把我星期一前送到都是好的。 接下來,接著訂飯店,印象中上次去韓國出差,距離公司最近的就是InterContinental,Hotel.com看看(我是想賺那個十晚送一晚的Package啦),啥?完全沒有List... 然後逛逛其他網站之後,馬上決定,就試試看InterContinental網站吧。 沒有想到,

by noreply@blogger.com (Jouston Huang) at January 31, 2010 02:08 PM

FourDollars

在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝 Drupal 6.15

首先要準備一個 Debian GNU/Linux 5.0.3 (Lenny) 的系統環境,這邊是選擇使用 debian-503-i386-netinst.iso 並透過網路安裝,
在安裝過程當中語系選擇英文並且在 Software selection 時只選擇安裝 Web server 以及 SQL database 來安裝,盡量維持系統精簡,

接下來應該只要再抓 59 個套件安裝,在 2M/256K ADSL 正常情況的網路環境下五分鐘以內就可以裝好了,

到這邊為止應該已經裝好所需要的 Apache 跟 PostgreSQL 了,重新啟動系統後再安裝 drupal6 跟 php5-pgsql 套件,
# apt-get install drupal6 php5-pgsql
在設定 drupal6 的畫面中記得要輸入密碼,不然系統會改使用 ident 機制,安裝完後需要重新啟動 Apache
# /etc/init.d/apache2 restart
就可以在 http://XXX.XXX.XXX.XXX/drupal6/install.php 看到 Drupal6 接下來的安裝程序

不過此時只有英文介面,如果需要安裝繁體中文介面就要執行接下來的動作,
# wget http://ftp.drupal.org/files/projects/zh-hant-6.x-1.5.tar.gz -O - | tar xz -C /usr/share/drupal6
然後重新載入網頁就可以看到繁體中文介面,

Drupal6 初始設定完成之後馬上就會發現到目前的 Drupal6 版本並不安全,

因為 Debian GNU/Linux 5.0.3 (Lenny) 上面的 Drupal 版本只有到 6.6 版,
所以現在要去升級到目前最新穩定版本 6.15
# wget http://ftp.drupal.org/files/projects/drupal-6.15.tar.gz -O - | tar xz -C /usr/share
# wget http://ftp.drupal.org/files/projects/zh-hant-6.x-1.5.tar.gz -O - | tar xz -C /usr/share/drupal-6.15
# cd /usr/share
# chown -R root.root drupal-6.15
# mv -v drupal6 drupal-6.6
# ln -s drupal-6.15 drupal6
# cd drupal-6.15
# rm -fr profiles sites
# ln -s /etc/drupal/6/profiles
# ln -s /etc/drupal/6/sites
然後在網頁瀏灠器裡面訪問 http://XXX.XXX.XXX.XXX/drupal6/update.php 來更新資料庫

更新完後回到 [狀態報告] 就可以看到

此時算是才把 Drupal 6.15 在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝好,
不過目前都只有框架沒有內容也沒有安裝任何模組也沒有客製化的 Theme

by FourDollars (fourdollars@gmail.com) at January 31, 2010 02:01 PM

January 28, 2010

FourDollars

在 Ubuntu 9.04 上面使用 hg view

之前寫過一篇 在 Ubuntu 9.04 上面手動安裝 hgview
剛剛發現原來在 ~/.hgrc 裡面加上
[extensions]
hgk=
這樣就可以使用 hg view 了~
http://mercurial.selenic.com/wiki/HgkExtension 找到的資訊

by FourDollars (fourdollars@gmail.com) at January 28, 2010 10:05 PM