1/17/2013

Goal


Maiden Speech
For me software craftsmanship includes the notion of  mastering algorithms. I want to get better at mastering algorithms_. What does the community think will help me improve the time or space efficiency of my program.


Learning Plan

I am going to focus on different topics in different weeks. For each topics, I plan:

  1. Identify different algorithm related to this topics. 
  2. Write a basic version of related algorithms. 
  3. Complete at least 10 online testing problems related to this algorithms. 
  4. //Think of at least 1 application of this topics, and finish the applications. The application can be a extension of the previous application. 
Here are the topics I am going to focus: 

Graph:
  1. DFS
  2. BFS
  3. topological sort
  4. strongly connected components
  5. minimum spanning trees
  6. single source shortest path
  7. all pair shortest path
  8. maximus flow
Tree:
  1. Binary search Tree
  2. R-B tree
  3. B-trees
Data Structure
  1. Stack
  2. Queue
  3. Heap
  4. Linked List

Assessment
For different topics, I have different level: 

  1. Array sorting and String Manipulation: 3
  2. Stacks and Queues: 2
  3. Graph: 2
  4. Tree: 2
  5. Dynamic Programming: 1
1) beginning, 2) developing, 3) competent, 4) advanced.

8/25/2012

Heuristic Evaluation

今天上課Todd 帶我們大家試著跑了一遍heuristic evaluation 的方法,先附上 Reading List

他的流程大致如下:
  1. 先定好幾個scenario
  2. 選定一個方向的usability heuristic ( 可以使用這10大usability heuristic[http://www.useit.com/papers/heuristic/heuristic_list.html],不過今天我們是用considerable system [http://www.codinghorror.com/blog/2006/03/making-considerate-software.html] 的條件來檢驗 ),
  3. 將每個scenario 都在系統上實際操作一次,每次操作的時候只專注在跟這次選定的方向有關的usability,
  4. 把所有scenario 都實際操作過一次後,進行一次討論、整理跟歸納。
  5. 換下一個usability 重複2-5 的動作!
操作過程有一些地方要特別注意:
  1. 在每個session結束後討論,不要等所有的面向都測試過一遍之後再討論!( 我們今天就犯了這個錯誤了!!!) 這樣做的原因是避免大家忘記之前遇到的問題!!
  2. 每個session 都必須要完整的重新操作所有的流程,不可以偷懶!
  3. usability test 需要有多個使用者來參與,才會有比較好的結果,建議的數量大約是3-5 人左右,太少的話diversity 不夠,可能無法找出夠多的usability problem,人數過多的話,通常也不會增加太多找到的結果,太過浪費時間跟金錢。

等一下來補上優缺點分析!

1/11/2012

html5 touch event on android/ipad

最近系上的收發件要電子化,既然要做,當然就連無紙化也要一起做啊!參考了ups 之類都有一個電子的收發,所以我就弄了html5 的簽名板。

但是常用的mouse down, mouse move, mouse up event 在android 上卻不能跑QQ
查了一下才發現有專門給這類觸控的event:  touchstart, touchmove, touchend

但是在ipad 上跑都ok,android 系列卻一直都有問題。google 以後
後來改完以後,大致上包括下面幾個

  1. preventDefault()  ,(參考網頁)
    在android的browser上,touchstart  touchmove 都有default的,如果沒有prevent的話,touchmove只會fire一次!
     $('#canvas').bind('touchstart', function(e) {
           e.preventDefault();
           draw = true;
           var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
           draw( touch.pageX - this.offsetLeft ,  touch.pageY - this.offsetTop) ;
    }
     $('#canvas').bind('touchmove', function(e) {
           e.preventDefault();
           var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
           draw( touch.pageX - this.offsetLeft ,  touch.pageY - this.offsetTop) ;
    }
  2. touchevent 的 location (參考網頁)
    在 iphone/ipad 上可以直接用
    e.touch.pageX/Y
    來取得touch的位置,但是在android 上,pageX 跟pageY要用
    var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
    來取得才會對!(jquery 的event 有重新包過,所以要拿originalevent

至於繪圖的部份我是參考  Create a Drawing App with HTML5 Canvas and JavaScript  (javascript)的code,不過他每次move都會重新畫圖(我不確定為什麼要這麼做,有一點沒效率),等等改完code 測試OK 再放上來好了!

還有關於mouse position,我一開始canvas的size是用 style='width:100px;height:200px' 這樣的方法做的,但是這樣它做的事情卻是"縮放"canvas 來達到設定size的效果,try 了很久換成用 這樣的方式才終於正常!

10/26/2011

SSL 購買注意事項

最近系上打算要開始買ssl 憑證, 老師說要知道各家的差異,所以我很認命的查了一些資料,整理如下

主要差異:
  • Single Root V.S. Chained Root 
    • Single: 大部分數位憑證都擁有自己的憑證發放機構 (CA)以及自己的根憑證,這些公司的SSL 憑證都已經加入瀏覽器的安全憑證機構的名單內。 
    • Chained: 有些憑證機構並沒有一個被瀏覽器信任,或者並沒有自己的根憑證,這些公司就使用一種所謂『連鎖』根憑證來取得瀏覽器的信賴。有人說chained比較不安全,但是google 也是用chained (不過聽說安裝比較麻煩!) 
  • Domain Validation V.S. Organization Validation V.S. Extended Validation:
    • Domain Validation: 只有Domain 的資料
    • Organization Validation: Cert 包含organization的資料
    • Exteneded Validation (EV): Green bar (像google 在網址列上有自己的公司名字)
  • Single Domain V.S. Multiple Domain  V.S.  Wildcard SSL:
    • Single Domain:  只支援一個domain
    • Multiple Domain: 可驗證多個domain (不需要是同一個subdomain)
    • Wildcard: 可用regular Expression驗證domain (例如:*.csie.ntu.edu.tw ,表示所有csie的subdomin 都可以使用)
  • Security:
    • Warranty: 投保金額 (我覺得好像還好xDD)
    • Validation: Organization 的資料驗證(會影響憑證發放的時間,還有顧客信任度,但說實話,就網頁瀏覽我們系上的狀況應該沒差xDD)
    • SGC : 強制讓早期的瀏覽器使用128-bit encryption (早期通常是 40-bit,不過通常我們可以不考慮早期的瀏覽器吧xD)
  • 支援度:
    • 跟CA有關,現在幾乎各個瀏覽器都已經支援主要的CA
    • Fully support :  Verisign , Thawte 
    • 不支援 IE 5.X , Netscape:  Entrust,  Baltimore, InstantSSL
    • Opera支援度低(Opera 7↑) :  GeoTrust 
  • Misc:
    • Customer Service:  買國外的客服要講英文,買國內的不見得有24/7 的支援
    • Entrust 發過憑證給中國亂發憑證的,事件弄得很大(google 搜尋cnnic)
    • verify Domain 的價格大約一年3~4000元, verify Organization的通常一年都要上萬元!

9/20/2011

Link to my Web server in NAT via SSH tunnel

Home PC ---- School PC(SSH Server) --- SSH Tuneel ----VM


School PC: 

  • Since it is windows, I used CopSSH 
  • Note: Execute Initial Setup with (Run as admin)
  • Modify C:/Program files/ICW/etc/sshd_config , addGatewayPorts yes



Build SSH Tunnel:
@VM $   autossh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R :10023:localhost:22 user@SchoolPC


HomePC(Pietty)
Access VM ssh:
ssh SchoolPC:10023 


Access VM Web Server:
(In Pietty:) Tunnel →  source port: 10005   and Destination: localhost:80
browse web through localhost:10005!!!!!













3/25/2011

Dropbox PHP API

 因為某 Xntel-Xtu Lab 的網站說想要可以讀dropbox 上的檔案,要可以上傳檔案,可以下載檔案
所以我用了這支 http://code.google.com/p/dropbox-php/


但是它裡面問題還滿多的,主要有兩點



  1. file name 或是 folder name中間有空白,就會掛掉

  2. putfile 不能用PHP OAuth extension ,要用 PEAR's HTTP_OAUTH package 


第一個問題主要是原來的code在呼叫dropbox api時,沒有用urlencode包起來,
因為我目前只有用到 getMetaData putFile getFile move ,所以這幾個function 已經修好了(我是懶人)
附上改好的api 檔:link   (取代原來API.php的位置, 我的話是在 /usr/share/php/Dropbox/API.php)


第二個問題只要改成用
$oauth = new Dropbox_OAuth_PEAR($consumerKey, $consumerSecret);
就可以了


附帶提一下,安裝oAuth-Pear 時會跳出alert 說alpha版不行唷,加個-f強制一下就好了
pear install -f HTTP_OAuth


 

3/12/2011

ldap sync with Google apps for education

說明文件:http://www.google.com/support/a/bin/answer.py?answer=106368
pdf: http://www.postini.com/webdocs/gads/admin/gads_admin.pdf


流程:



  1. 利用configuration manager 建立configuration file(xml)

  2. 利用sync-cmd  指令讀取剛剛建立好的檔案 (sync-cmd -a 才會套用,不然只會當作模擬)

  3. 設定crontab 定期執行sync  


Note:



  • sync是單向的( 只會改google apps的資料,並不會改動ldap上的data)

  • configuration manger 就是上面網址的windows版本

  • linux的sync-cmd指令要下載上面連結的linux


 


遇到的問題:


unsolved:



  1. 轉過去以後有些user無法建立帳號: InvalidHashDigestLength(1405) - InvalidHashDigestLength(1405)
    http://www.google.com/support/forum/p/Google%20Apps/thread?tid=5dbcecd8358da574&hl=en

     


solved:



  1. configuration manager 在win7好像要用system administrater 執行,不然會完全沒反應

  2. google api 出現 "Domain cannot use API": 去control panel 的group ,要把"Enable provisioning API"打開

  3. ldap server上每個帳號一定要有mail的資訊,否則會被skip掉

  4. default 新建的user好像都會變成suspended 還在研究要怎麼處理: 用configuration manager建的xml 裡面<suspended >被寫成True了,要把它改為False


 pending:



  1. csie有設tls加密,configuration沒辦法設定,所以連不上server
    TESTING: http://www.google.com/support/forum/p/Google+Apps/thread?tid=0b9d3f130628f63b&hl=en
    (結果太麻煩,我決定用ldap就好,然後限制可以連port 389的機器 ~~~  xDDD)

3/11/2011

javascript failed in IE

我決定要留一篇集合文,以免老是不小心踩到雷=.=

  1. trim:
    string.trim() will fail in IE, you have to use trim(string)

  2. event.target:
    use event.srcElement instead of event.target

2/16/2011

Mail Server: dovecot with sieve support

http://www.howtoforge.com/dovecot_mail_server_sieve_virtual_users

  1. Install from source:  dovecot and sieve .
    dovecot: CPPFLAGS=-I/usr/include/openssl LDFLAGS=-L/usr/lib/ ./configure --with-pam --with-ldap --with-nss --with-ssl=openssl
    sieve(pigeonhole):  ./configure --with-dovecot=../dovecot-2.0.9/
    make
    make install

  2. cp ms dovecot.conf

  3. edit dovecot.conf
    mail_location=maildir:~/Maildir


problem encountered

  1. g++ not installed

  2. cannot find make: build-essential not installed

  3. libpam-dev libldap-dev libnss-dev libssl-dev install required

5/03/2010

Hero 升級2.1

因為被htc放鳥很生氣,所以最後我還是決定用其他非官方版了 XD

從 mobile01 的討論串中研究了一下,目前是2.1版的rom大致上有:

  1. Villan Rom

  2. BeHero  -> 中文支援度不佳,因此分版出BeAsia

  3. Legend

  4. Flzyup


我把全部的討論串看完了,前三個大致上都有中文化支援度不佳的困擾,因此我選了FLZYUP@INNOVATIVE_ROM_v2.3
不過目前最新版的Flzyup還有兩個已知但還未解決的問題,所以請確定你可以接受再安裝(我就直接Quote原文了):

  • 自動背光不正常

  • 視頻可以拍攝但是播放無圖像 (呃,我不知道這樣到底是拍影片有問題還是播影片有問題)


如果你從來沒有嘗試過換Rom,取root …等會跟原廠保固說bye-bye的動作的話,請先走下面步驟

1.  請宣誓:"不管我的手機變磚頭都跟lydian沒有關係,這純粹是我的人品不好,本人絕對不會要求lydian付起任何責任" (是的,你的手機很有可能變磚頭,而變磚頭請找論壇求救不要找我,我還是小菜鳥)

2. 下載 flash rec.apk (android market上也有)
Amon Ra's hero recovery image
flzyup@innovative rom (md5: f2caba5c8051c8052d1ce10aa6a062b9)

3. 把這三個檔案傳到你的手機上

4. 用任何app installer 安裝 flash rec.apk

5. 安裝完後開啟flashrec,按下”Backup Recovery Image” 的按鈕

6. 等待backup完成後,在文字框輸入

/sdcard/recovery-RA-hero-v1.5.2.img

然後按下”Flash custom recovery image”的按鈕

7. 完成後關機

如果你換過ROM,或者是在Backup Recovery Image步驟時出現”Backup FAILED: could not run command.”訊息,那麼請從下面步驟開始

1. 下載flzyup@innovative rom (md5: f2caba5c8051c8052d1ce10aa6a062b9),丟到手機sd卡中(前面步驟抓過的請忽略)

2. 手機關機

3. 同時按下 "Home" 及 "power"鍵,直到出現文字畫面的訊息 (不是HTC的logo唷,是要有文字的畫面),這邊要按很久才會出來,所以請耐心等待

4. 進入後先選擇"backup" -> "Nand + ext backup"  這邊要花一點時間,記得要按下 "home"鍵確認執行

5. 備份完成後回到主目錄執行 "wipe" -> "wipe data/factory reset"  及 "wipe" -> "Dalvik-cache",兩個動作也是都要按下"home"鍵才會開始執行唷

6. 移除完後回到主目錄選擇 "Flash zip from sdcard" ,然後之前下載的 flzyup 會出現在你的選項中,選擇它之後就會開始跑了!!!

7. 等待它說完成以後,回到主目錄選擇 "Reboot system now" 就ok了 (P.S. 第一次的開機總是會特別漫長,我等了10分鐘↑ 才開機,所以請保持微笑耐心祈禱 )

8. 開機以後,照著設定精靈跑就大致上ok了,不過輸入法預設似乎是大陸的拼音,所以請到"設定"裡面改成"手寫"或"注音",基本上到這裡大致就完成了



最後炫耀一下XD

4/21/2010

一邊在螢幕輸出,一邊同時記log的方法

終於問到了

1. stdout + file
COMMAND | tee LOG_FILE_NAME

2. stderr + file
COMMAND 2>&1 | tee LOG_FILE_NAME

2>&1 是 stderr -> stdout,然後再用 tee 同時存到檔案中

COMMAND是指令,
LOG_FILE_NAME是要記的log檔名

4/02/2010

flash builder 更新後的差異

今天把之前的案子重新compile一次,遇到compile不過的地方,把解決方案列出來供大家參考吧,陸續補完中!

  • namespace change: mx 現在要用mx1才行,如果不想換的話,也可以選擇改namesapce 的宣告區域,把mx的換成  xmlns:mx=”library://ns.adobe.com/flex/mx”


  • Border改名為BorderContainer

  • Border property: backgroundImageResizeMode 改成 backgroundImageFillMode,用法看起來更彈性了,細節可以參考這裡

  • BorderContainer的default background是白色的,舊的Border是透明的





另外,新版builder似乎非常喜歡refresh workspace(囧!)
如果覺得很吵的話,可以從preference -> general -> Workspace,把 Refresh Automatically 取消掉就好
之後每次要手動更新的話,直接重新整理context menu就好了:)

3/31/2010

flash 4 builder release 了

不知道該高興還是難過
經歷過beta beta2以後,正式版終於登場了!
不知道新版會不會把beta時期莫名其妙亂砍import的問題修掉呢? (怨念!!)
但是目前已經發現跟beta2版不同的地方了!
namespace mx都已經改成mx1了(這個bug 讓我de了20分鐘才注意到T.T)

不過我的beta2版序號又不能用了,但是目前還找不到像beta 升beta2時序號更新連結的地方~"~
如果有人找到了,還請不吝告知呀!謝謝了!

========================== 下面補充目前的試用心得======================================================

我一定要complain一下,
Adobe真是太機車了
新版builder一直在refresh workspace ,開發時候動不動就要等它refresh...速度慢超多的!
還有,新舊版除了之前提到的namespace以外,我現在又遇到了graphics的問題
一直拿到" 不合法覆寫 com.degrafa.paint.SolidFill 中的 SolidFill。"這樣的錯誤訊息(舊版是ok的) --->目前還在研究要怎麼改才會work!!!
而且我一定要研究出來才行,因為beta2現在已經不能打開了,所以我沒辦法用beta2這個至少可以跑的版本先run一些結果!!!!(暴走!!!)
Adobe 這樣真的很機車!!!!

3/30/2010

blog 數學模式啟用 ^^

耶,現在這邊也可以用latex了,請見:

$latex e^{i pi} + 1 = 0$


不過跟原始latex 不大一樣的是,latex是夾在 $...$裡面,
這邊第一個$後面還要加上latex!

p.s. 我裝的是wplatex 這支plugin

3/29/2010

jsmath plugin: dokuwiki

因為在整理reference的關係,想要加上筆記(為了方便隨時更改,我把筆記寫在wiki上)
可是卻發現我常常要在筆記裡寫一堆數學式,如果能用latex格式來寫那該有多好!
上網搜尋了一下,發現doku wiki裡果然有: jsmath plugin!!

安裝方式:

  1. 下載jsmath lib,解壓縮在網路空間裡
    (p.s. 因為javascript 安全性限制的關係,要放在跟doku wiki同一個domain才行唷)

  2. 跟安裝dokuwiki 一樣的方式安裝jsmath plugin (直接複製連結到doku wiki plugin安裝頁面的text bar就ok了)

  3. 進入doku wiki的config頁面,在Plugin Settings >> Jsmath Plugin Settings,在"The full URL to your jsMath or MathJax installation"那欄填上剛剛解壓縮的資料夾"完整URL"

  4. Done!!!!



使用方式:
跟latex一樣,分成inline跟block兩種,
inline包在$$裡面,block包在 [ ]

結果:看我的wiki吧xD

p.s. reference我是直接存成一份bib檔,方便寫thesis 時可以直接copy
平常要閱讀用 bibtex browser 來看
為了美觀,我懶得調原來的css檔,所以就另外抓了一個html template,然後內頁用ajax的方式抓原來那支php的內容(寫ajax好像也花了不少時間齁xD)
偷偷炫耀一下


我喜歡這種整理方式 :P

Reblog this post [with Zemanta]

2/11/2010

flex 筆記 creation complete event

這次接的案子使用者回報有時候會忽然間空白一下,等到有畫面的時候,就會直接顯示答案!
我一開始以為是visible的屬性設的時間點不對,從頭檢查卻發現都沒有問題!

然後忽然間想到,不會是我在flash還沒把圖畫出來的時候就開始跑我的function了吧
這次的直覺果然沒錯!
所以把我的function加到creation_complete的event listener以後就正常了!
(講得講簡單,我在找要用哪一個event listener還花了不少時間XD)

總之,以後寫flex一定要記得注意畫圖是asynchronize的,bug太多都是這樣生出來的呀!

2/06/2010

[Chrome Extension] GY Dictionary

最近實在不大想乖乖趕進度,所以玩了一下chrome的extension
發現其實還滿好寫的,都是javascript 堆出來的

所以我寫了一支查字典的extension ,尤其最近要寫論文了,常常會需要查字典
Google dictionary 跟 Yahoo dictionary是兩個我最常用的,能夠同時查兩個是最好了
(google dict主要用來查字義還有例句,yahoo dict則是可以拿來查同義字跟反義字!!)

連結

本來只有做查Google 跟 Yahoo的功能
然後因為培堯大大的話,所以最近又加上了自訂網站的功能:p


看著安裝數已經衝過100了,坦白說還滿開心的 :p
接下來想加的功能是快速鍵開啟查詢畫面 ^^

另外還在找要怎麼樣才能開啟外部程式!!如果有人知道的話還請告訴我唷!

10/14/2009

Flex 4 滑鼠按住不放

今天為了找滑鼠按住時可以持續作用的function 試了好久,終於找到了!

原來Button有一個autoRepeat的屬性,只要設為true 就可以在滑鼠左鍵按住不放時自動重複ButtonDown的事件 範例如下:






























10/12/2009

Hero 取 root

先把建議寫在前面好了,如果要保留中文輸入,我覺得現在不是很好的時間!

昨天主要試2個不同的方法:

  1. 直接在原廠的partition加上su指令

  2. 換成客製的ROM


第一個方法原則上可以保留中文輸入,但是在我很開心的試了整晚,很挫折的卡在某個步驟,然後才搜到一篇論壇文章說現在拿到的Hero全部都有鎖,解鎖方法超複雜,還要焊接…小的實在無熊為力~"~
http://forum.xda-developers.com/showpost.php?p=4257045&postcount=38



第二個方法基本上可以work,Hero上我找到的都是Modaco的Rom,他update超快,昨天看到已經是2.5.1版了,

通常Modaco出來會分二個版本,Core、Chinese Core,

2.5.1目前core已經出來了(還有Enhanced版),但是Chinese版還沒好,據網站說很快就會release了

昨天嘗試了modaco,作法很簡單,不過因為不是中文版,雖然語系可以調成中文沒錯,不過我怎麼試都不能把輸入模試換成中輸~"~

作法我先放出來好了,等中文版release就可以來試試看了!操作方式推荐可以看theunlockr.com 的影片教學!大致分兩個步驟:

  1. http://theunlockr.com/2009/08/27/how-to-root-your-htc-hero-in-one-click/

  2. http://theunlockr.com/2009/08/27/how-to-load-a-custom-rom-on-your-htc-hero/


第一步應該主要是讓手機可以進到Recovery Mode (一般的手機會進不去),所以要做的事情有:

  1. 下載需要用到的東西們
    flashRec.apk
    cm-hero-recovery.img (網站上提到可以使用新AR版我進到Recovery Mode要繼續時,找不到他說的Green Button,雖然功能加了不少,還是先用舊版的吧)
    Modaco's Custom Rom Core
    Modaco's Custom Rom Enhanced (不一定要抓,只是多了plurk跟名片辨識功能而已)

  2. 把抓下來的兩個檔案存到手機sdcard的根目錄

  3. 在Android Market上找到app Installer並安裝

  4. 打開app Installer找到剛剛copy到sd卡裡的flashRec.apk 安裝!

  5. 在程式清單中找到Recovery Flasher進入

  6. 按下"Backup Recovery Image"按鈕

  7. 在文字框輸入"/sdcard/cm-hero-recovery.img ", 然後按下"Flash Custom Recovery Image"按鈕

  8. 選擇關機

  9. 同時按下"Home"跟"power"鍵,直到畫面出現Recovery的圖案(要按有點久,我覺得!)

  10. 利用軌跡球移動到下面的"backup" 選項,按一下軌跡球開始備份

  11. 畫面上出現complete訊息後,選擇wipe data

  12. 操作完成後,選擇第三項,接下來會跳出你想要update的zip檔列表,選擇 core的zip 檔

  13. 如果不想裝enhaced版的,可以等畫面顯示完成後,直接選第一項重新開機就ok了。想裝enhaced版的再按一下第三個選項,選擇enhanced的zip檔,同樣等畫面好了之後重新開機

  14. 重新開機(要等很久)之後會跳到語言切換的畫面,先選擇English(United Kindom),設定完成以後再進到程式列表中找到More locale,進去之後最下面就有中文的選項可以選了!


不過就算換成了中文,我還是沒有辦法把輸入法也切過來,鍵盤上怎麼樣都沒有中文輸入,去"設定"裡面也沒有用,要是有人知道該怎麼辦請再跟我說吧!感謝!

10/08/2009

Hero上發文

這昰用Wptogo這個在Hero上的App來發文的,好用的話就可以開始慢慢加上Android好App推荐系列文了:P