星期三, 九月 16, 2009

Calm down, please. My heart!

If sorry is all you gonna say, I've heard enough.

Yes, like you can never do nothing for me.
Damn me.
Yes, like you just never willing to do nothing for me.
Damn me, once again.

You'll never have no idea how much you ruined my life.
You'll never have no idea how much you messed up my mind.

How can you be so mean?
How can you be so selfish?
How can you be so fucked up?
Why are you bothering my heart whenever I finally got some calm and peace?
Why can't you just tell me that you don't even wanna give a shit about me at all?

Why do I still love you so damn much?

星期一, 八月 31, 2009

救災順利!成功救活四名專題做不出來的學弟!

我大學時代的專題老師,今年叫學弟們做 ARM Linux + RFID 相關的專題,主要是用來管理冰箱裡面的東西的保存期限的。

可是呢,這群學弟...

「ARM 是什麼?可以吃嗎?」
「Linux 我們不太會耶!」
「RFID Reader 只有 Windows driver (還是 VB.Net 寫的) 耶,可以拿去 Linux 上編嗎?」

所以,不知道他們從哪裡找到我,突然來問我要怎麼辦。

我想說,既然是以前的專題老師,要是這組學弟做不出來或做的不好,他也很丟臉... 而且順便也想看看 RFID 在 Linux 上到底會不會動,所以就決定下去台中一趟幫他們看看。

不看還好,一看之下才發現,他們使用的 ARM 是 s3c2410 配上一套有夠舊的 Linux(kernel 是 2.4.x......),可是使用的 SUMMIT U-Reader 在我的機器上倒是抓的到也有 driver,只是沒有 user-space tool 去 access 它而已。所以我乾脆就叫他們說,先在 PC Linux 上做,然後把移植到 arm 上當成一個「願景」。盡量使用嵌入式系統上容易找到的軟體(如 boa),如果真的要移植的話也比較方便。

SUMMIT U-Reader 其實是一個 pc210x 的 USB-to-RS232 晶片,加上他們自己家的 HF 讀卡模組(使用 RS232 介面,Windows 的 VB.Net 程式也是使用 Serial subsystem 去 access)。既然如此,事情就簡單啦!我只要弄個 serial 程式去操作它就可以了!

我目前幫他們寫到可以抓到卡號,讀取以及寫入 RFID Block 就要靠他們自己了。以下是 example code(BSD License!):

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>

#include <iostream>

#define TTYDEVICE "/dev/ttyUSB0"
#define BAUD  B19200

int open_port(void)
{
 int fd = open(TTYDEVICE, O_RDWR | O_NOCTTY | O_NDELAY);
 if (fd == -1)
 {
  perror("open_port: Unable to open " TTYDEVICE);
  return fd;
 }
 fcntl(fd, F_SETFL, 0);

 // port settings
 struct termios options;
 tcgetattr(fd, &options);
 cfsetispeed(&options, BAUD);
 cfsetospeed(&options, BAUD);
 options.c_cflag  |= (CLOCAL | CREAD);
 options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);
 options.c_oflag  &= ~OPOST;
 options.c_iflag  |= (INPCK | ISTRIP) & ~(IXON | IXOFF | IXANY);
 options.c_cc[VMIN] = 0;
 options.c_cc[VTIME] = 10;
 tcsetattr(fd, TCSANOW, &options);

 // clear I/O buffer
 tcflush(fd, TCIOFLUSH);

 return fd;
}

int main()
{
 // get the file descriptor from open_port()
 int fd = open_port();

 // I/O buffer, let it be the 'I' command initially
 char buf[256] = { 0x1b, 'I', '\r', 0 };

 int n;

 // write() the 'I' command
 if ((n = write(fd, buf, 3)) < 3)
  std::cerr << "write() of 3 bytes failed!\n";
 else
 {
  std::cout << "write() " << n << " bytes: ";
  for (int i = 0;i < n;++i)
  {
   std::cout << "0x";
   std::cout.width(2);
   std::cout.fill('0');
   std::cout << std::hex << static_cast<int>(buf[i]) << ' ';
  }
  std::cout << std::endl;
 }

 // read the result  n = read(fd, buf, 255);
 if (n < 0)
  fputs("read() failed!\n", stderr);
 else
 {
  std::cout << "read() " << n << " bytes: ";
  for (int i = 0;i < n;++i)
  {
   std::cout << "0x";
   std::cout.width(2);
   std::cout.fill('0');
   std::cout << std::hex << static_cast<int>(buf[i]) << ' ';
  }
  std::cout << std::endl;
 }

 close(fd);

 return 0;
}

星期一, 三月 30, 2009

Bug wranglers know this bug by heart now

之前更新 gcc-4.3.3-r1 之後,編 mplayer 會吐 ICE 出來。今天 emerge world -ua 的時候看到 gcc-4.3.3-r2,在裝之前想說看一下 ChangeLog 有沒有修好這個 bug:

27 Mar 2009; Peter Alfredsen -gcc-4.3.3-r1.ebuild, +gcc-4.3.3-r2.ebuild: Revbump with broken patch disabled to stop duplicates of bug 262567 from flowing in. Bug wranglers know this bug by heart now.

這個 #262567 file 的就是這個 bug。點進去看一下... 挖咧!二十幾個 duplicates = = 難怪 Bug wranglers 會 know this bug by heart 了 XD~

底下是一段 Quote:

At last, rev-bumped.

Btw, maybe all those duplicates are not the user's inability to search, but their ability to tell you "please *always* rev-bump fixes that are not build-related to the package itself" :P

- Nikos Chantziaras

星期四, 三月 26, 2009

言論自由

阿克頓勳爵曾經說過:「我不喜歡你的言論,但我誓死保護你的言論自由。」

若查證「郭冠英」就是「范蘭欽」屬實,那麼他的確該下台,因為他違反公務人員應行政中立的基本規範。但是「范蘭欽」發表的文章倒是沒有任何問題,那是言論自由。雖然美國有針對種族歧視言論的法律,但是很抱歉中華民國剛好沒有... 所以他也沒犯法。

我不懂的是這些新聞媒體幹嘛拿「高級的外省人」做文章,這也沒什麼大不了。很多產品不是也會在包裝上寫「高級蜜餞」或「高級水果禮盒」嗎?那這些廠商是不是也通通要上新聞接受批判一下?況且他只有說「我是高級的外省人」而已,不知道這些媒體是從哪裡得來「台灣人是低級」的結論。你說「這是部好看的電影」或「這是本內容豐富的書」的時候,也不表示其他的電影不好看、其他的書沒內容啊...

另外,蔡英文同學,言論自由是憲法保障的,不是你說有就有,你說沒有就沒有的好嗎?

星期五, 二月 13, 2009

宅心禪機

台灣知名宗教團體法鼓山創辦人聖嚴法師,於台北時間中華民國 98 年(西元 2009 年)2 月 9 日因病圓寂。

雖然我本身並沒有宗教信仰,雖然我沒有參加過法鼓山辦的活動,雖然我也沒上過「你可以不必自殺網」(唔,偶爾想自殺的時候應該去逛逛...),不過衝著這幅字還是得悼念一下:

「面對宅、接受宅、處理宅、放下宅」- 法鼓山 聖嚴法師

誰能告訴我為什麼上聖下嚴大法師要把「」寫成「」呢?我搜遍 Google 也找不到一個地方寫兩個字形可以相通的...

星期三, 二月 04, 2009

New Weapon - HP Pavilion dv5-1003ax

最近,我終於受不了了那台四年前買的 NB。是的,我還是很喜歡它 - 它輕巧、方便攜帶、沒有惱人的鏡面螢幕、可以跑 Composite Desktop、效能也不差(至少是我可以接受的速度)。可是它的 512MB DDR-333 * 2 漸漸地不敷使用,開始吃起 swap;螢幕右下角有約 7 個 pixel 的亮塊;硬碟 SMART 也跟我說有一堆 bad block reallocated、電池的使用時間也只剩不到五分鐘...

所以,我很苦惱。這台機器我很願意多用兩年,但是 firefox 多開幾個分頁(嗯... 30~50 個 XD~)就一直 thrashing 是沒辦法接受的事,硬碟開始有壞軌也總是讓人心慌慌(雖然跑 dd if=/dev/zero of=/dev/sda 叫 SMART 修好了),電池只剩五分鐘根本帶不出門(走到門口就沒電了嘛 Orz...)。如果想繼續用下去,就非得換掉這幾個東西:

  • RAM 升級到 DDR-333 1GB * 2 ~= $2500
  • 2.5' PATA HDD or SSD ~= $2000 or $5000
  • 電池也得買新的 ~= $2500
可是這麼一來,價錢等於 1/3 ~ 1/2 台新筆電了,可是... 我還是繼續在用舊電腦,實際感覺得出來有差別的可能只有不會那麼 thrashing = = 所以我一直在這三個念頭上打轉:
  1. 不升級不夠用...
  2. 不想花錢升級統統都舊規格 (DDR-333、IDE PATA) 的東西...
  3. 買新的又有點浪費,畢竟舊的升級尚且堪用...

於是我就問我老爸,請他出個意見,看我應該怎麼辦才好。結果我親愛的老爸很豪邁的說:「哎唷,你那台機器也是三年多四年前買的,不要傷腦筋了。媽咪店裡也剛好需要一台機器,你就換台機器,這台給她吧!」

唔... 既然這麼說,那還是換一台好了,把舊電腦換個硬碟給我媽(我後來把 Windows Vista 的授權貼紙都撕起來貼過去了... 開門做生意別留下把柄才是。)。我比較了市面主流的 CPU 跟 GPU,最後決定挑 AMD PUMA 平台的機器,主要是這幾個原因:

  • 之前 nVidia GPU 有設計瑕疵,焊接的表面會因為鄰接材質膨脹係數不同,熱脹冷縮太多次有機會脫焊,造成硬體故障。雖然 nVidia 宣稱已經修改了設計,但是誰知道晶片裡面是怎樣的呢?所以不考慮 nVidia GPU。
  • Intel CPU 雖然耗電量較低,但是與 AMD 相比同時脈下速度較慢,價錢也較貴。什麼?你說買 2 開頭的?別鬧了,至少也要買 5 或 8 開頭的好嗎,2 開頭實在太舊了啦!雖然 8 開頭的價錢可以壓到三萬,但是都是搭配 Intel GMA,所以還是算了。而不考慮 nVidia GPU 的話,就統統剩下 Intel GMA,不會搭配 ATi 的卡了...
  • AMD CPU 雖然比較耗電,但是他的優點就是便宜肉大塊... 搭配 ATi 顯示卡,效能比 Intel 好多了... ATi 顯示卡的 linux 支援也越來越好,且頻頻對社群釋出善意。之前還放出 r500/r600 的 open source driver(不過... 嗯... 話說 intel driver 一直都是 open source 的 ="=)。
  • 4GB 的 RAM!常常編東西的人,thrashing 的話就等到死。反正現在 RAM 這麼便宜,就插到滿吧!但得注意別買到打不開 memory remapping 的機器(例如我媽那台,插 4GB 用 3GB 還蠻囧的)。
  • 雖然我老爸好像還蠻有錢的,但是也別浪費... 預算放在 NTD $25,000。

本來看上的是 MSI PX210,但是如果配上 ZM-80 要 $29,000,超出預算太多。HP tx2506 似乎也不錯,但是要 $28,000,也是超出預算,而且顯示卡只有 Radeon HD 3200。

最後挑來挑去,買了 HP dv5 1003ax,$25,200 帶回家。詳細的規格如下:

  • CPU:AMD Turion X2 Ultra Dual-Core Mobile ZM-82 @ 2200Mhz
  • RAM:Transcend DDR2-800 2GB x 2
  • GPU:ATI Radeon HD 3450 with GDDR2 256MB
  • HDD:TOSHIBA MK3252GSX - sATA2 320GB 8MB buffer
  • DVD:LightScribe SuperMulti DVD+/-/RW with Double Layer support
  • Display:15.4' 1280x800
  • 其他不重要的週邊:
    • Vermico WebCam
    • SD/MMC/MS/XD Card Reader
    • Fingerprint Reader
    • HDMI、eSATA、Firewire、遙控器
  • Battery:6 cell
  • Weight:2.83 KG
  • 不得不買的 Windows Vista Home Premium(沒 Activate 過,序號貼紙被我撕給原本那台了)

安裝 Linux 的時候遇到一些問題,能解的都解決了,剩下指紋辨識器沒 driver... 安裝時遇到的問題與解決方法紀錄在 Gentoo Wiki,主要是 kernel module 設定,沒有太多 Gentoo specific 的東西。其他 distro 應該有很多用的上的地方才是。

星期五, 一月 02, 2009

Hackintosh, Psystar, and Apple

林檎公司在 2006 年的時候,逐漸將小麥們都改成 Intel 平台。如此一來,以往 x86 上的作業系統統統可以拿去小麥上面跑,程式本身不需要作任何修改,只需要多加一個用 EFI 模擬 BIOS 的 bootloader 就好了。

如此一來,就有很多人想說,既然硬體大部分都相同,我是不是可以把 Mac OS X 裝到一般的 PC 上咧?結果是可以的,只要透過很小的修改,就可以把 Mac OS X 裝到你自己去光華商場拼(血拼、拼湊)來的電腦上。

後來又有一家公司做了個叫 EFi-X 出來,把這個東西插在主機板的 USB 擴充埠上,就可以直接啟動官方的 OS X Kernel。更有 Psystar 公司,就直接在 online store 販售預裝 Mac OS X 的桌上型電腦。

但是「將 Mac OS X 裝在非林檎神發售的硬體上」這件事情,本身是違反 Mac OS X 的 EULA 的,所以於是就鬧上了法院

一件事情合不合理,只要先把這件事情抽象化,將邏輯提煉出來以後,再帶入其他對應的實體即可。以這次的例子來說,讓我們這樣代換一下:

某罐頭廠商在販售自家鮪魚罐頭的時候,附上了一份 EULA,裡面寫著「請勿將本罐頭以非本罐頭廠商出售的食譜作成菜餚」以及「若開啟此罐頭,表示接受本授權協議。」芸芸。可是某個歐巴桑自己在做菜的時候用到這個罐頭,又不是罐頭廠商出的食譜的指定菜單。於是,這家罐頭廠商有權力告他,因為他違反本罐頭的 EULA。如果罐頭廠商勝訴,這位歐巴桑以後都不能用這個罐頭做菜以外,還可能必須賠錢給罐頭廠商。

另外,又有一家食譜出版社,因為覺得這個罐頭還不錯,所以針對這個罐頭設計了一系列的菜單,並且販售食譜。於是罐頭公司可以告這家出版社,因為罐頭公司誘使使用者將罐頭使用在自家提供的菜單以外,侵犯了罐頭公司的利益。

如果作個代換...

  • 「罐頭公司」改成「Apple 公司」
  • 「鮪魚罐頭」改成「Mac OS X 作業系統」
  • 「食譜」改成「硬體」
  • 「製作成菜餚」改成「安裝作業系統」
  • 「食譜出版社」改成「Phystar」

恩... 無限上綱。