彙整

Archive for the ‘programming’ Category

終於把程式放到iphone上跑了

六月 18, 2009 CrazyLion 留言

整個流程我覺得很像 小七的涼麵,要經過20道工法…..

apple真的對使用者很貼心,然後把難過的部份交給開發者…. 我覺得微軟是反過來XD

一個流程遇到超多麻煩的問題,像是我名字一開始在apple.com.tw打的,所以是中文,登入開發者網站後,就變成  ?? (這啥,隱藏版魔王嗎) ,阿姓名還找不到地方改…

購買開發者認證的時候,打的地址不對,ㄟ大哥  我們這中文勒…  所以不能啟用…。後來寫信到香港客服並且附上訂單的截圖才幫我開啟…。 就算打英文好了,我們也有漢語拼音跟通用拼音的選擇阿…..

然後整個流程中問了很多次名字… 後來我才了解apple假設你是正人居子,行不改名,坐不改姓。 有些地方可以改啦,但是如果你搞不清楚 最好的方式就是全部都打一樣的名字。

反正不管apple怎麼問,他會換很多種方式詢問你的名字,你都要保持定見,萬萬不可遲疑(最好是抄下來提醒自己)。

說穿了就是憑證的問題,其實我也不知道我怎麼弄好的。 你可以到下面的網址看到自己憑證的狀態跟重新產生

http://developer.apple.com/iphone/manage/certificates/team/index.action

xcode裡面build的target的info中也要選擇正確的憑證…..

反正現在可以跑了, 但是光這個就搞了多久阿!!!!!!

* a signing identity maching this profile could not be found in your keychain — 這個問題就是你的provisioning profiles 找不到對應名字的憑證….

Categories: programming

卡片牌組產生器

五月 20, 2009 CrazyLion 2 留言

(可惡的ie 害我今天demo的時候丟臉了XD)

寫這個網站的原因是因為上星期三老師介紹了 IDEO METHOD CARD,他是一組51張的套卡,然後每張有寫了一種設計方法可以提供給與會者參考或是激發創意。當下覺得很不賴。

最棒的地方在於每張的文字都短短的,很適合當作每天開工前的儀式。另一個重點在於老師說我們都不懂設計方法(默….)。「如何閱讀一本書」裡面提到要確定自己讀懂得最好方式就是不斷地換句話說,而翻譯是最棒的形式。 我本來一天開工前翻個一則,中午睡覺前又翻個一則、晚上開工前如果心情不定就也翻個一則。所以現在已經有十則了… 不過其中必定有會錯意跟誤譯的地方,所以希望我們團隊的成員可以一起來看,透過迴響的方式,可以互相討論文句的地方。

近期內可能會希望可以產出自己的牌,像是加入編舞學設計的設計方法或是更多其他的設計方式。更遠的目標則是發展出本組特有的牌組(不限此用途)。

接下來來介紹一下這個網站:  卡片牌組產生器

首先需要註冊一下,註冊好後就可以新增牌組或是在牌組底下新組牌面。 本來是作成大家都可以互相修改,不過想了想還是做讓原作者才可以改,有種認養的味道在。

新增牌面的話,可以上傳正面、背面的圖跟撰寫介紹文字,這邊要注意的是如果有背面的圖 在列印的時候就不會把介紹文字給列印出來了。 此外還可以下tag 也就是你可以自由地分類,像是加上(翻譯中)的tag,等翻完再把它的tag改掉。

也有支援rss 讓你可以知道牌組內最新上傳的卡片跟迴響。

然後現在支援A6大小的pdf輸出,其實可以選A4或是其他(直印、橫印),不過其他幾種都沒有把參數測出來… 如果有人有需要再跟我說吧! 目前還是以A6為主囉!!!

希望各位同學有興趣參與阿!!!

Categories: Research, programming

drupal_install_template

五月 16, 2009 CrazyLion 留言

之前提過之後架站都會使用drupal 來做,不過每開一個新project 都得重新下載一次module,很煩。通常的作法是自己管理一份drupal, 不過嘛…. 這樣還是要處理model 更新的問題。 所以我就用ruby寫了一個自動下載安裝的腳本,然後又取了個爛名字  =.=  drupal_install_template 。 其實這些問題都很簡單,可是似乎都沒官方解法@@ 像是rails 也是到2.3 才有template的功能。

*nix 平台適用(mac也可,因為它混用了wget & tar & mv 指令) 使用方法很簡單,到 list.yml 裡面依次把 model name填上,然後執行它就可以了  :P

這腳本授權為WTFPL ,意思就是隨便你拿去幹啥XD

其實還有一些想法,像是自動補上中文語系檔,或是model可以指定版本….etc 。不過隨著時間慢慢來補上吧  :P

Categories: Open Source, php, programming

flash,mac and git(or svn)

四月 27, 2009 CrazyLion 留言

最近接了一個爛攤 T_T  ,這隻flash 裡面的library 有一千多個物件,其中,有的要有的不要….orz 有些命名規則是 itemxxx,as檔案如同櫻花片片(如上,有的要有的不要),散落一地,俯拾即是。此外,old_xxx 此類型的檔案隨處可見,果然是個好青年,對於老人家不離不棄,不過那個是生那個是死我也搞不清楚。

見了如此光景,縱是一米八的堂堂男子漢也會淚流滿面,怨歎母親為何要讓他誕生於世上,更何況不才小弟我才17x。

但是該做的還是得做

第一件事就是將其裝上版本控制系統,但可能是連mac上優雅的flash 都會想吐,因此一直跟我說

A definition for the document class could not be found in the classpath, so one will be automatically generated in the SWF file upon export.” The document class is in the same directory as the FLA!

說也奇怪,該as就好好地躺在那邊,好手好腳。 後來做了實驗才發現如果有.git 目錄就會爆炸。 google 了一下發現已有前輩先賢遭遇此怪問題,回文中最後有解。  於是我依樣畫葫蘆,把目錄從 pro/ 移至  pro/src 即可。

因為.git 只會出現在根目錄,啥,你說svn 怎麼辦….   1. 你可以用svk 去接…  2. 換成git  3. 換成hg 。

真是太酷了

Categories: programming

kickstart & rhel 5.x

四月 16, 2009 CrazyLion 留言

今年有一個工作是要撰寫 kickstart 自動安裝設定檔(裡面安裝完rhel 5 之後會自動安裝我們的一些應用程式)然後給廠商去全台灣跑透透更新現有的機器(課長想要這個過程全自動,也就是最好是不要讓廠商再手動鍵入指令安裝)。

本來想說蠻簡單的…沒想到….事情不是憨人想的那麼簡單 T_T  主要是測一次要好久…(等於要重裝一次,在vm 上測最少時間也要20min左右) 加上 post區塊的程式碼很難debug。後來我才查到可以在安裝的時候按alt+f3 看到詳細的安裝過程(不過訊息實在是一閃即逝,這個過程跟古代某位神射手看紡織機上的飛梭來鍛鍊眼力的過程是一樣的),alt+f2 則可以有個tty 。此外網路上也查到可以重導std包裹%post 區塊來把過程寫到文字檔中:

%post
(
do your stuff here
) 1>/root/kickstart-post-install.log 2>&1

不過我測起來是沒有作用的….  =.=  反而原本的都不會跑了。後來我覺得這個小案子中 我一定是塞到爆炸….

因為要裝得軟體原始檔就有3xx,所以肯定是無法封在原本的vcd中。於是就剩下兩個方法:從網路上抓 or 包成dvd(外接光碟機)。

方案一: 透過網路抓取,安裝程式碼寫到kickstart 的%post 區塊。

這邊一直卡在網路不通,一直以為是我打錯設定,不停地反覆查看(不過重開機後就通了)。後來才想到可能是網卡沒啟動…  =.=…老天爺…。

所以要加上

/etc/init.d/networking start –force

這樣網路就會通了,不過後來我到家裡附近的實機去測….發現居然網路不通…orz(在組織裡面有台一模一樣的機器那時候測試是通得阿!!!!)。

現場機器的 cdrom+floppy 全部壞光光… 我裝kickstart 的floppy 放進去一拿出來居然滿是灰塵!!!  這就是所謂的白floppy 進,黑floppy出嗎…. 所以我根本無法現場改…  =.=   此外光是讓它降尊紆貴來讀我的pioneer 外接光碟機就搞了一個鐘頭……  這的事愛讀不讀的 有時候又讀不到,我那天真的受夠大廠牌伺服器的臉色。

網路的話,重開機就好了,但是這樣給廠商去裝變數實在太大,所以此路不通,走另外一條。

方案二:封在dvd裡

我在這邊採取的解法是把在%post區塊把安裝檔從cdrom 下載到 系統中,然後把安裝指令寫到rc.local ,開機的時候安裝,裝好之後再把自己的指令移除。不過這邊又遇到幾個問題。

1.  你得跑在 –nochroot 才有辦法讀到光碟機

2. 該死的rhel 會在跑 %post 之前就把光碟機退出去,就算我下了 reject -T 把托盤收回去,它還是不願意認領那邊光碟片(也就是說  ls /dev/cdrom 沒有東西….)。基本上這時候的rhel 擺出的是六親不認的關卡,他認為退出去的光碟片像是嫁出去的女兒( a.k.a 潑出去的水)。

2.1 所以 你得修改原本的rhel dvd中的安裝印象檔中的指令檔….. 。讓它知道誰是老大,阿 不是 是讓他在跑完%post 之後才退出光碟機。這邊很麻煩。步驟如下:

  1. 先把rhel dvd 作成 iso 檔
  2. mount iso 到 /tmp/rhel5
  3. copy * to  newiso/
  4. mount -o,loop newiso/images/stage2.img    /tmp/stage2/
  5. copy /tmp/stage2/* newstage2/
  6. 修改 newstage2/usr/lib/anaconda/dispatch.py 把裡面的

(“methodcomplete”, doMethodComplete, ),
(“dopostaction”, doPostAction, ),

改成

(“dopostaction”, doPostAction, ),
(“methodcomplete”, doMethodComplete, ),

好了之後就可以開始封裝了 cd newstages/ && mkfs.cramfs . ../stage2.img

塞回原本的目錄  cp stage2.img newiso/images/

ok done, 封好

mkisofs  -o rhel5.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T newiso/

燒出來就可以了,如果你還有想放程式進去也可以在這邊塞進去喔~~~

事情終於結束了耶~~~~ 才怪….  禍不單行的啦~~~

3. 到實機上測試的組合有  floppy(kickstart)+外接dvd  & 外接dvd 單槍匹馬

3.1  floppy + 外接dvd :  好樣的,透過外接dvd開機,然後會把機器上得光碟托盤退出來,跟我說找不到安裝光碟,我要不是脾氣好一定指著你的鼻子罵說:「你是瞎了阿,你不是就從外接dvd開機的,現在還跟我要光碟片。」無解….. ,網路上查到的原因有些是說換個孔 or 有時候就會好…@@ 。反正我就把內建光碟機拔掉,不過事情還是沒完,這是機器的逆襲。

3.1.1 它還是會跟你說找不到媒體,問你要用哪種方式安裝(hd,network…)。不要理它胡言亂語,直接esc 跳過。

3.2 外接dvd 單槍上陣: 當你鍵入  linux ks=cdrom://ks/xxx.cfg 的時候會正常開始跑,然後又會跟你說找不到kickstart檔要你鍵入正確的路徑。這時候機器處於敬酒不吃吃罰酒的狀態,enter連發 它就會找到了,你說,它是不是欠揍。這場景就像是你炒了盤好吃的炒飯給它吃,它跟你說:「這看起來好難吃,可以吃得東西在哪裡?」 然後你就把它的頭壓到飯裡面。它就會乖乖吃了。

.我這一個月來的血淚史阿….. 應該在此處完結了…..  真是搞死我了…orz 人太弱就是慘

Categories: programming

rake db:migrate RAILS_ENV=production

二月 10, 2009 CrazyLion 留言

通常在rails我們要建立資料庫的話  可以這樣

rake db:create:all

不過某台主機上不知道為什麼不行 ,只好自己手動開一個資料庫。就算開好了,當我鍵入

rake db:migrate RAILS_ENV=production

的時候會出現:

rake aborted!
Mysql::Error: Table 'xxxxx_production.ooooo' doesn't exist: SHOW FIELDS FROM `ooooo`

實在是太詭異了,不過我實在沒空跟它搞,希望之後有時間把問題抓出來,這個問題的奇怪解法就是把  config/environments/production.rb 裡面的

config.cache_classes = true  => config.cache_classes = false

就可以了….

Categories: programming

程式的一致性

二月 5, 2009 CrazyLion 留言

這一陣子斷斷續續都在幫系上的學長修改系上的期刊系統。 我們是使用ojs 這套開放原始碼的系統,我看學長用起來功能還頗為完善,不過中文語系尚未完全翻譯完畢,算是較為可惜的地方。

不過外國人所寫的系統有個問題就是他們的全名排列方式跟我們的不一樣,學長希望我改一下這個問題。我跟學長討論了一下之後,決定採用判斷姓名的utf8編碼是否落於中文的範圍,如果是就把排列順序倒過來這種方式來做。

不過後來真的改到吐血,經常一找就是一個晚上。為什麼呢? 因為ojs程式碼的一致性不太好,舉例來說:

使用者的全名透過 User.inc.php裡面 的getFullName(582行)  函式回傳,這段的程式碼長這樣:

    function getFullName($lastFirst = false) {
       if ($lastFirst) {
          return $this->getData('lastName') . ', ' . $this->getData('firstName') . ($this->getData('middleName') != '' ? ' ' . $this->getData('middleName') : '');
       } else {
          return $this->getData('firstName') . ' ' . ($this->getData('middleName') != '' ? $this->getData('middleName') . ' ' : '') . $this->getData('lastName');
       }
    }

看起來相當合理,但是Editor & Reviewer 的姓名卻不是放在相同階層的class中。這兩者都是放在DAO 等級的類別中,以Editor 為例 就放在 EditAssignmentDAO中把資料塞進類別變數的函式_returnEditAssignmentFromRow中:

 function &_returnEditAssignmentFromRow(&$row) {
   $editAssignment = &new EditAssignment();
   $editAssignment->setEditId($row['edit_id']);
   $editAssignment->setArticleId($row['article_id']);
   $editAssignment->setEditorId($row['editor_id']);
   $editAssignment->setCanReview($row['can_review']);
   $editAssignment->setCanEdit($row['can_edit']);
   $editAssignment->setEditorFullName($row['first_name'].‘ ‘.$row['last_name']);
   $editAssignment->setEditorFirstName($row['first_name']);
   $editAssignment->setEditorLastName($row['last_name']);
   $editAssignment->setEditorInitials($row['initials']);
   $editAssignment->setEditorEmail($row['email']);
   $editAssignment->setIsEditor($row['editor_role_id']==ROLE_ID_EDITOR?1:0);
 $editAssignment->setDateUnderway($this->datetimeFromDB($row['date_underway']));
 $editAssignment->setDateNotified($this->datetimeFromDB($row['date_notified']));

 HookRegistry::call(‘EditAssignmentDAO::_returnEditAssignmentFromRow’, array(&$editAssignment, &$row));

  return $editAssignment;
  }

請注意第八行的地方…
你說找到頭昏是不是正常現象…. 所以我覺得程式的一致性邏輯很重要,怎樣奇怪都沒關係,你要把全名的組合函式放到DAO層級或是到 Model 層級都沒關係,重點是要一致阿!!!!

Categories: programming

把書籍加入anobii中

一月 3, 2009 CrazyLion 4 留言

一直以來如果在網路上看到人家推薦好書,想要加到anobii的預購清單中就很麻煩。步驟通常如下:

  1. 通常提供的是書名(如果是書名我都會先去books.com.tw找到isbn再下一步) or books.com.tw 的書籍頁面
  2. 複製書名 or isbn
  3. 開啟anobii的頁面,貼上搜尋字串搜尋。
  4. 搜尋結果出現了,終於可以選擇加入書櫃or 預購清單了

很是麻煩。前天,我終於忍耐到極限了。上網找找看有沒有提供啥extension …. 結果沒有 o_O,也可能是我搜尋能力有問題。

不過反正我寫好了兩個東西。現在你就可以:

  1. 反白關鍵字 or isbn
  2. 按一下,直奔anobii搜尋結果。在那個頁面你就可以輕鬆地選擇把此書加入書櫃or 預購書單了

對我來說真是太棒了 :D

方法一: 把下列連結  searching in anobii 拖到網址列。然後你只要反白文字,點它一下,就會到anobii的搜尋結果頁面了(firefox only,safari 之後加好了,ie 去角落蹲著)。

p.s wordpress.com 會過濾js… 所以請拖到網址列後,在searching in anobii 上面點選右鍵,選擇屬性,然後把下面那一行(一定要一行喔 不能多行!!! 請注意)貼上去取代即可。

javascript:(function(){var text= document.getSelection();if(text!=”") location.href=”http://www.anobii.com/search/?s=1&keyword=“+text })()

方法二:安裝套件。然後反白文字,按右鍵,選擇searching in anobii ,就會連到anobii的搜尋結果頁面了。

——

題外話,一開始只有想到法二,搞了一陣子 T_T ,睡一覺起來才發現可以用法一阿!!!!,果然程式設計師要多睡覺。不過現在寫套件跟2.x那時候簡單多了,現在有基本的架構產生器,下載下來,依照位置放好,就可以開始開發了!! 不過要注意一下,裡面的install rdf 是舊的格式,它的minVersion and max Version 是用attr 的方式,可是新的設定檔都是element ,這邊改一下應該就沒問題了。 等考完試再來把這個套件全部改好,放到 firefox的官方網站上。

p.s 其中取得使用者選取區域的程式碼複製自autocopy這個套件,非常感謝。  開放原始碼真好哇~~~~

Categories: Open Source, programming

翻譯

十二月 19, 2008 CrazyLion 留言

sleep(5);
print STDERR “missing wgrib inventory\n”;
sleep(3);
if (! -t STDIN) {
#   not a terminal .. sleep longer
sleep(60);
}

這幾天在幫忙找一個問題的時候,看到這段程式,翻譯成中文如下:

如果沒有人在看(cron狀態 不在終端機底下),就睡久一點

是誰把偷懶的個性帶到程式中的阿!!!!!

Categories: programming

[ruby]rss4twitter

十二月 17, 2008 CrazyLion 留言

我這幾天把之前寫的 rss ->twitter 機器人的程式碼給整理整理放到github上了。我終於有自己的open source  作品了!!! 今天實在太令人感動了 T_T

我這個小小小lib 的特色在於,會透過tiny.url 把blog 的網址轉成短網址,此外只使用 yaml 設定檔,相當輕量化。範例請參考我們實驗室的twitter

原本因為找到的ruby lib twitter 據說不支援中文,所以改用 python 寫,可是在處理時間格式的時候一直找不到類似ruby 方便的 Time.parse(“Sun, 14 Dec 2008 17:27:01 +0800″) , 所以還是回去使用ruby來寫(用了 twitter4r)。

今天報告也頗順利,晚點把投影片放上來。下一步就是來個互動作品(不然感覺虧欠前輩好多@@)。