星期二, 2月 27, 2007

恐怖的Java



Java的肥大真是無人能敵,Eclipse只不過開了一個很小的mxml就吃了90幾M。有時開多一點.as檔真的會瞬間慢到連滑鼠都不能動,就連分了128MB的虛擬機器也不過吃了12M耶。Java未免太神了吧!?我的機器只有512M而已耶,會不會太殘忍@@

希望JVM開放原碼這件事可以讓他瘦下來>"< 全文連結

星期日, 2月 25, 2007

班網完成

雖然花在程式設計上的時間其實不多,可是現下的功力又比當初寫班網時增長了許多。現在回頭看當時班網的設計真的一點美感都沒有orz

今天和電腦R大聊天以後臨時決定把班網重寫。因為主要的物件(認證物件、SQL連接物件)都寫好了,所以重寫的過程非常的愉快,原先和認證部份有關的程式碼全砍了改用新物件。其他的程式碼則是慢慢替換,把所有的資料庫查詢和認證呼叫轉換成使用新物件的同語意程式碼。然後死命的除錯。(這幾個字等於好幾個小時啊)

程式碼改好以後,除了幾個大物件以外,其他的程式碼真的變得非常乾淨XDD,目前初步執行也算OK,沒遇到什麼大問題。現在就是等明天和電腦R大會合以後去修系學會的主機,然後把程式碼轉移到上面。就不必很辛苦的在我的512MB小電腦分RAM給虛擬機器orz(不過今天我發現一件神奇的事情,雖然我給Guest OS的RAM是128MB,不過一段時間放著他記憶體佔用量就自己變成8MB了。令人不禁讚嘆Windows2003記憶體管理之高明,而且塞進swap以後還是可以用firefox連喔)。

班網目前應該就是這樣,切片系統我可能會做點小改(老師有說官方的比較快,根據我的觀察,官方的之所以快是因為他四個邊不會preload,明天去改看看)。比較慘的是病理我只唸到血管而已,聽說開學要考複習考/_\ 全文連結

認證系統unit testing初步完成

剛剛程式改來改去的結果,終於初步把認證系統的unit testing完成了。可喜可賀啊!

我對這個版本的認證系統比之前的班網滿意太多了。現在寫的認證系統基本上是把問題reduce到「某個使用者有沒有某個符號」,資料表只需要兩張,一張是使用者帳號密碼和流水號。另外一張就是符號表,每個符號表只需要三個欄位,流水號一個,符號名稱一個(ex:課表修改權),另外一個欄位就是用符號分割的使用者流水號表(如1#2#3代表流水號為1、2、3的人和這個符號「相應」)。

模式是很簡單,可是之前班網有很多問題都可以很簡單的用這個模式解決。比如「等待認證的使用者」。過去是另外建立一張資料表,然後裡面存滿等待認證的使用者。然後認證通過就從表中刪除使用者,然後把使用者加入另外一張表中。現在這個系統只需要建立名為「等待認證中」的符號然後把使用者流水號塞進去就可以了,認證通過則反向行之。要測試這個使用者是不是等待認證中也只要呼叫測試函式即可。

自己回顧一下,系統的整體架構也比過去進步多多,用OO重寫真的乾淨了不少,和MySQL連接的部份、權限測試,登入測試現在全部都是物件。以MySQL來說,過去常常出現的


$action="select * from table_name where id=2;";
$result=mysql_query($action,$link);
while(mysql_fetch_array(...
...

現在替換成

$aray=array(
id=>2
);
//帥氣的高階封裝
$result_array=$sql->SelectAllFromTable($aray);

使用起來方便很多,出錯的機率降低(比如不必再煩惱SQL query忘記打分號了XD),方便做小動作(如強迫所有的query都經過escape),除錯也簡單(寫個script做unit testing即可XD,而且只要物件沒錯通常整個就沒錯XDDD)。

認證物件當然也用了SQL物件,認證的介面也變得很簡單:

//如果smallt可以改課表則傳回true
$auth->UserNameHasAuth("smallt","改課表");

//給smallt管理的權限
$auth->AddAuthToUserNAme("smallt","管理");

比較起來,從前使用者管理的部份根本就是一團漿糊,一大堆奇怪的指令穿插在中間根本不知道幹嘛用orz。放了一個學期以後突然出問題,明明就是我寫的code,可是我真的完全不知道怎麼改囧rz。

現階段有在考慮把code全部打上註解。然後希望未來可以把design pattern的書讀完。 全文連結

星期六, 2月 24, 2007

VirtualBox

灌了Aperio firewall以後MySQL就不對勁,不管用什麼方法,只要一連mysqld-nt.exe,CPU使用率就會飆到100%,然後什麼結果都沒有。重裝Appserv數次或是改用官方的MySQL都是一樣的結果,想說用系學會的機器來寫程式卻又發現那台機器又掛了,想用切片機又擔心會弄出問題,於是腦筋動到虛擬機器上面。

自從VMWare server宣佈免費以後,虛擬機器我都用VMWare,雖然該有的功能都有,可是在我的512MB小機器上面速度真的非常的慢,Guest OS灌好以後連按個開始都會有零點幾秒的delay。總之因為VMWare的使用經驗實在很糟糕,所以我跳槽到剛變成GPL的VirtualBox。

用VirtualBox灌Windows 2003跑起來非常的順暢,舒適性VMWare根本沒辦法比。速度方面VirtualBox完全是遙遙領先。穩定性方面除了跑Sharing folder會當機還有一兩次軟體裝到一半自動停止以外其實運作上沒什麼重大弱點。對於Host的影響方面,VirtualBox不像該死的VMWare會裝一大堆有的沒有的service莫名其妙吃掉一大堆資源。我所知道比較重大的改變就是會裝虛擬網卡的driver來跑Bridged network。除此之外好像對Host沒什麼太大的影響,不像灌VMWare好像是讓機器生吞鈷六十。VirtualBox運作的方式很靈活。除了最標準的開個視窗顯示Guest OS以外,也可以以headless的方式啟動,可以節省一些資源和螢幕空間。執行的時候VirtualBox本身的記憶體使用量也還算OK,一樣都是給GuestOS 128MB的RAM,跑VirtualBox時我可以很順利的打開Firefox,用VMWare的話還得開工作管理員關process擠資源。VirtualBox切入切出全螢幕也很順暢,VMware切入切出全螢幕花費的時間幾乎多到可以去上廁所orz。

VirtualBox目前發現不方便的地方就是UI沒有寫的很完整,很多比較高階的功能,例如新增虛擬網卡或是增加Sharing folder都需要透過command line。不過官網說明清楚的使用者文件彌補了這項缺點。也因為documentation非常詳盡,所以目前沒什麼使用上的疑惑。

虛擬機器現在似乎進入了戰國時代,老牌VMWare server宣佈免費,微軟好像也有免費的virtual PC產品。開放原始碼有Xen,後來QEMU和加速套件也全部GPL了,VirtualBox是GPL,Linux核心也內建了所謂的KVM,當然也是GPL。虛擬機器似乎是一塊蠻值得期待的戰場。 全文連結

星期五, 2月 23, 2007

一些動態

從某個沒有電腦、沒有電視的恐怖地區回來以後,我又回到了程式大神的懷抱。

回來第一件事情是把已經鈍鈍的Windows 2003重灌。雖然還沒有出現當機的現象,可是整台機器跑起來就是不順暢,要關機還得手動把全部的應用程式關掉。所以我就花費了很多時間搞重灌。重灌以後整體運作順暢多了XD

寫程式方面,最近最大的改變大概就是Subversion的導入吧。我手邊目前有好幾份程式碼,一份是切片瀏覽器和對應的後端,一份是班網,一份是系學會用的Service。每份code又有好幾個不同的儲存地點。每份code都會有一個目錄,Apache下面一定又會有一份。然後同一份code有時又會出現在好幾個不同的目錄(主要的,暫時的,測試的....)。彼此之間又有錯綜復雜的分支關係(比如給系學會用的程式碼就是從班網分支出去的)。

用手動方式管理程式碼,不過我卻因為懶惰,和這種沒效率的方式相處了一陣子。直到有一天我在改class的時候覺得納悶,奇怪,這個class我記得我加了很多高階封裝啊,怎麼都不見了。疑心之下馬上去搜尋硬碟,赫然發現有一份已經改好的程式碼放在那裡...。於是我就決定去弄Subversion了。Subversion實在非常棒,搭配SVN client,程式碼寫好只要右鍵commit就會有人幫我備份好。從此以後不會有一大堆目錄不曉得怎麼管理。也不必用右鍵壓縮,唯一的遺憾是未來恐怕看不到那種一百個版本的壓縮檔放在同一個目錄的壯觀場面了XD

程式的進度方面,切片沒什麼進展,浮點數誤差好像是官方的bug。班網方面今天不斷的進行認證系統的unit testing,新增/移除使用者和新增/移除權限項目已經OK,接下來就是最困難的使用者和權限的互動了XD。

最近也嘗試了一些新軟體(謎之聲:你就是常常這樣電腦才需要重灌...)。赫然發現netlimiter和ashampoo firewall和我家的Windows蠻搭配的。不過需要注意的是兩個程式會互衝,netlimiter一定要比ashampoo firewall晚裝,不然netlimiter會偵測不到網路。雖然netlimiter裝下去以後ashampoo firewall會抱怨filter driver順序不對,可是其實還是可以用,放行和阻擋應用程式都沒問題。我也試用了一下最新版OpenPCMan,感覺上還有一些bug,不是非常穩定囧。 全文連結

星期四, 2月 22, 2007

星期四, 2月 15, 2007

半正式上線

今天學校老師正式把一部分切片傳上去了,所以我今天就花了不的時間在測試上面。正式的切片和從經理身上拿到的測試切片對Viewer的挑戰還是有所不同。正式版的切片面積更大了。我自己測試用的切片長寬了不起各一兩萬個像素,可是正式切片有五萬乘以十萬那種恐怖的解析度,在這種恐怖的數字下很多程式的缺點都暴露了出來。

首先是我的Viewer會有一層「最低解析度層」拿來當作墊底,在細節還沒載入完的時候就由這層墊底放大提供讀者一點畫面。不過在放大到接近百分之百的時候,這層圖長寬就會長的太離譜,flash就會顯示不出來。根據我自己用測試用project測試的結果,這似乎是flash的問題。不過也不能怪flash。世界上會把一個圖長寬都拉成接近一萬像素的程式本來就不多。

本來我發現把畫面切割成比較多image似乎可以緩解這個問題。譬如如果切割數變兩倍,那原本會拉到一萬像素的圖就會只拉到五千像素,但這樣似乎會造成flash物件數量太多,連我的2.8G電腦都會有點小lag。經過幾番修改以後想想,其實把低解析度的圖拉大並不能真正提供資訊,最後直接把Canvas的底設定成白色,然後故意不修這個bug。顯示不出來,就顯示成白底吧。

切片圖很大的結果就是連切片自己都會出錯。由於圖檔的長寬有多少像素一定是整數。不同版本之間的圖(完整版,長寬1/2縮小版....)天生就有浮點數誤差。在十萬乘以五萬的情形下浮點數誤差就非常明顯,可以差到快接近四五十像素,目前我也不知道要怎麼修...

接下來應該就是一些UI的小改了。比如加個比例尺,用圖形代替簡陋的上下左右文字等。然後可能寫個documentation吧

班網認證的部份,今天開始在寫認證系統unit testing的部份了。還沒正式開始測,不過內容大概都想好了,希望開學前可以把班網修好。

之後這幾天要到台中/台南,兩個程式的進度和blog都可能會stall吧。

切片網

可以去看看喔,裡面有了一個新的teaching slide目錄,裡面滿滿都是切片。讓切片陪你過好年XD 全文連結

星期三, 2月 14, 2007

一個午餐費的故事

有一個叫做小明的人參加公司的活動,公司說有參加活動者都可以直接拿走一百元的午餐費,小明早上一來就拿了這筆錢。中午肚子不大餓他只吃了五十元的國民便當。他的競爭對手指控他盜領午餐費,小明當時不以為意。回答了檢察官幾個問題以後就安心回家了。「不必發票,不必繳回,那錢當然是直接給我啦。」

沒想到小明最後被檢察官起訴了。檢察官說:小明吃午餐明明是十二點,結果小明在九點就領了十二點的午餐津貼,領未來的錢,這是貪污證據之一。小明拿了不必報帳的一百元補貼以後,經查證只有五十元拿去買國民便當,剩下五十元拿去存起來,這是貪污證據之二。小明在偵訊之中供詞反覆,一下子說午餐費是活動用公款的一部分,又突然說午餐費給自己就是私款,前後矛盾不知所云,供詞反覆狡辯明顯,這是貪污證據之三。但是看在小明曾經拿五十元存款中的十元做公益,請求從輕量刑.....

最後小明被抓去關了。他的政敵們皆大歡喜。 全文連結

目前進度

隨著完成度的不斷提昇,切片的進度越來越慢了orz

最近一兩天主要是UI的整理以及增加對瀏覽器顯示大小的偵測。如果各位看官之前有用過本座的程式,那他應該是長得像一個小小的控制盤,上面就醜醜的綠色和幾個小不拉機的控制相,然後透過窄窄的視窗看著大大的切片。

經過重整以後,現在切片是全畫面的,沒錯,填滿整個瀏覽器的可用空間,控制相改成漂浮在切片上(雖然不能拖拉),控制相擺在黑框透明的Canvas上,而Canvas則是背景透明,讓切片直接透過來。今天又加入了偵測畫面大小改變的功能,如果各位看官在使用中把瀏覽器調成全螢幕模式,那麼各位將可以看到塞滿整個螢幕的切片。

之前覺得介面問題沒什麼,可是改了以後整體的觀感完完全全不可同日而語!這點官方的viewer就被拋在後面了,新版的官方viewer仍然遵循小不拉機、管窺蠡測的優良傳統orz,搭配全新推出,在螢幕上直接貼字配色又糟糕的annotation功能,看起來更擠了XD。反正他們大概也看不到這篇文章,就讓勞累的本座自嗨一下唄XDDDDD

除此之外,就是修了幾個小bug,然後資服中心負責的老師也開始和病理老師接觸準備上傳事宜。我這般則是在逼上貼了Open Beta計畫,只是好像大家都回家了沒人鳥我XD。看來還是得一個個問吧XDrz。

切片計畫最近因為進度還有一些私人的原因大概會Stall一陣子,接下來應該會切換到補習、讀病理和班網認證系統unit test作戰計畫。電腦書也希望能把The C++ language多看一些還有把最近到手薄薄的Inside C++ Object model在寒假看完。

傑克,我的寒假實在太充實了XD

各位看官想看看一下吧

全新介面下的切片 全文連結

星期二, 2月 13, 2007

馬英九被起訴之我見

看了一下檢察官起訴馬英九的理由,很多地方真的不能認同。

核銷以後公款流入私帳就是貪污嗎?假如是的話,學生墊錢替學校買東西,報公帳以後錢流入學生的荷包應該也是貪污了。報帳有沒有貪污,應該是看拿什麼東西報帳,陳水扁會被當成貪污的共同正犯,不是因為他把領了錢以後拿來私用,而是因為他拿不存在的消費去領錢。假如拿來報帳的東西確實存在且用於公務,那麼發下來的錢要拿去大吃大喝或是買無敵鐵金剛,應該是任君自便。從沒聽過報了公帳以後錢下來還算公款的,這樣要報帳幹什麼?拿錢來壓枕頭嗎?

根據法律規定,特別費是拿來饋贈、宴請、送紅白包,是搞人情用的。雖然人脈關係是私人的資產,可是不可否認,很多時候首長是為了公務推行順利而刻意去建立人際關係,而既然是為了公務,當然有正當性接受公家補貼。

馬英九沒有把錢用完,也沒有用於公務的證據,帳目不清不楚所以算貪污?饋贈、宴請有時候有發票,有時沒有。買禮盒送給部屬當然有發票,此時可用特別費需要發票的部份核銷。但包紅包給部屬的小孩,邀請部屬去路邊攤哈拉攀交情難道也要的到發票?既然要不到卻又是用於公務,那麼有一筆固定額度,不必發票就可以拿,每個月就是這麼多的特別費補貼,聽起來不會不合理。只有金額會不會太多的制度問題而已。況且制度都說不必支出的證據了,那聽從制度沒留證據怎麼能拿來証明馬英九有罪?

馬英九月初拿錢所以是貪污?首長先用自己的錢去做人情,再用特別費補失血的荷包,或是首長先領這些錢,再從這些錢去做人情。應該都是間接用於公務吧?何來私吞之說?況且這筆錢的性質,是預知首長一個月人情費的補貼。假如我花費五百元於公務,上級要求實報實銷我卻說六百元,那當然是貪污一百元。但假如我加班公司給了一百元誤餐費卻沒有要求實報實銷。那麼我只吃五十元的國民便當,拿走剩下的五十元公司也不會告我貪污。我去吃兩百元的高級料理,多出來的錢公司也不會認帳。公司沒有要求報帳意思就是概括補貼,而概括補貼就是多不退,少不補。而特別費給首長用卻又不要求實報實銷,除了概括補貼我想不出別的解釋。

整體而言,整個起訴最大的問題,就是不合常識的「核銷入袋了也算公款」以及自我矛盾的「不必報帳也要舉證」。公務員向長官說他要買東西,請長官先放十萬元「現金」在他那邊「墊著」,長官有可能答應?公款哪有可能這樣給?不必報帳的錢也要舉證,那以後公司給車馬費,即使不要求實報實銷,恐怕也得向計程車司機要發票了。不必實報實銷,意思就是錢就是這麼多,盈虧自負,而錢進了我的帳戶,意思就是給我。 全文連結

星期一, 2月 12, 2007

唉唉

由於補習班EH系列的片子228就要下架了,所以我趕緊改聽解剖。趙大師火力之熊猛果然和林老師差一個檔次,一堂課三個半小時不說,中間還要加上畫圖(不過好加在因為我聽過一遍所以圖也大概畫過一遍就是了),講話速度超快、廢話超少加上用字每個字都高度壓縮。最後一小時買來的$20樂事洋芋片和$38 1250cc超大冰紅茶都彈盡援絕,整個人被趙大師的超高速解剖刺拳打的頭昏腦脹,覺得受不了就回家了。

回家當然又是寫程式了,仔細想想昨天認證系統的implementation,雖然說沒辦法做binary search,可是程式好寫(for迴圈一下子就解決了),老師好理解(不必和複雜的系統奮鬥),維護容易(就用FTP傳個文字檔到正確的目錄,應該簡單到不行了吧orz)。如果改用資料庫的話要寫很多程式,老師也要適應我的程式,而且感覺上一個new就嫌貴了,用網路去連MySQL,加個查詢然後再用網路回傳結果,加上在n=150的小樣本情況下其實binary search發揮不了多少優勢,搞不好我直接loop還比較快一點。


今天寫程式最主要是在寫給班網用的認證系統,之前舊的班網,我大部分的時間都在改學長的code。學長的code看得出比較抄短線。程式碼沒有用物件就算了(其實物件在PHP裡的角色還是有一點點爭議),竟然整分程式碼(不是一個檔案喔,是全部)連一個function都沒有XDD,這實在太猛了XDD。看來學長寫這個可能時間很倉促吧。不過我對學長還是非常感謝的,即使要重排code,學長的幫助也非常大,沒有學長班網恐怕寒假生不出來吧。總之當時就是用我鳥鳥的物件概念/design pattern(其實現在還是非常鳥,想讀的書還是沒讀完orz)把code refactor一番,然後生搬硬架弄了個認證系統。該認證系統可以運作,事後想想我覺得非常神奇。這種慘不忍睹的生化變異綜合體竟然可以維持到一個學期才爆掉,這也算是不可思議吧。總之就是那個認證系統現在爆了。

這幾天我就在構思新的認證系統了。我盡可能把東西弄成抽象的物件和SQL動作。因為認證系統其實畢竟都可以reduce成「使用者/密碼/Session」和「權限/使用者ID」的互動,而後者又可以reduce成兩個字串的互動(如:CanDelete v.s 1#2#3#8)。雖然我功力還是不高,不過目前這分code看起來還是比以前那份鳥code好很多。目前目標就是構思一些細節,比如我的抽象物件要如何才能抽象表達使用者增減,如何能和Presention tier做比較有效的整合。當然不斷的debug和refine也是有。

這個寒假是個「充實」的寒假。看MSN上上線人數不斷遞減,暱稱不斷出現「北京遇到XXX」這類幸福的字眼。當兩個都是熟人的班對在美麗的夜景下互相依偎的時候。我在研究如何和Data tier溝通。當同班好友在遊覽名勝風景,感受那歷史和自然交織的震撼氣息,我在改class做unit testing。別人在翻閱村上村樹,我在log堆裡面游泳,人家回家團員,我去和學校開會。別人悠閒地看網頁,打逼,我在不同的Server之間切來切去。別人KTV開心的唱歌,我卻對著螢幕喃喃自語。別人晚餐餐廳開心的哈拉,我帶著疲憊的心一個人寫部落格。不過忙程式還是比忙背共筆好玩很多就是了XD 全文連結

星期日, 2月 11, 2007

認證完成

今天寫程式相對比較輕鬆,主要就是完成了登入/認證的部份。

認證這種東西理想上是用MySQL來寫,然後PHP用MySQL function去call他,可是這樣一來我就要寫資料庫建構,資料庫管理,多重目錄存取這些比較複雜的東西,說實在話時間並不是很充裕。所以我就很黑心的用很暴力的寫法,每個資料夾下面都會有個auth.txt,如果這檔案不存在,系統就會判定這是大眾開放切片庫,倘若存在,那麼登入以後就來個fopen然後來個linear search,倘若找到帳號名稱那就認證通過囉。這種方法好處就是施工超容易,而且名單生產只需要記事本,認證管理和FTP完全整合(用FTP傳上去放到對的目錄即可),真是帥呆了@@

這種寫法當然有缺點啦,想也知道資料庫一定至少會做Binary Search的優化,不過在小規模的系統上,n=150的O(n)和O(logn)應該不會造成太恐怖的差別吧,我想。還是說明天頭腦清楚點再重新用資料庫寫個良心版吧...

切片列表,test目錄下的1009.svs現在要本校醫學四年級學生的帳號才能進去喔XDrz

至於那個Viewer,重要的bug應該都清得差不多了,接下來就是加功能而已吧...

點我看切片 全文連結

星期五, 2月 09, 2007

Bug一枚

之前切片程式看切片的時候,經過連續跳躍,常常左邊和上面的邊界會莫名其妙消失,而且按Reload無效。之前推想過很多的可能性,比如image和canvas之間的互動有問題,圖片傳送中發生損壞,可是都不是正確解答,浪費了我無數的時間。

剛剛總算把原因追出來了,用HTTP GET parameter一個個慢慢試的結果,我發現Aperio ImageServer 7.0在高縮放(如縮小成1/32)的情況下,左邊和上面的邊界偵測會不正常。理論上我要求左上角為(-10,-10),長寬各為20的圖的時候,超出邊界的部份全部雪白的情況下,要回來的圖應該右下角1/4會是有東西的,可是在很高倍的情形下Aperio ImageServer會出錯直接傳一個全白的圖給我。知道原因以後,要圖的時候對座標進行一點模除修正問題就解決了。從此以後看圖不再漏邊,歐耶。

UI的部份大體解決了,現在正在研究認證orz 全文連結

星期四, 2月 08, 2007

Directory Listing

今天弄出老師要求的目錄列表功能。

本來的方案是由遠端Server去和ImageServer要html,然後用文字替換法把連結替換掉。但花了很多時間和他官方的APML相處以後就放棄了,很難搞懂他內部的運作規則和一些奇怪的東西。後來在這裡找到了目錄列表的PHP原始碼,抓回來以後。加了對Get Parameter的一些檢查和切片縮圖的功能以後就讓他上線了。這個步驟花大概不到一小時吧,比研究官方的鳥APML經濟划算多多。而且PHP功能和結構比Aperio自己開發的鳥script好用熟悉太多了。

唯一的缺憾就是那個Script產生的網頁實在不是普通的醜,加上因為他PHP code和HTML是鑲嵌在一起的,我根本不大敢做大更動,所以切片縮圖的功能我用很暴力的方式放了進去。長出來的網頁就像這樣。看起來實在很心虛XD。假如老師不滿意的話,我再想辦法用Smarty幫他修一下。不過現在要忙認證功能就是了。

今天終於聯絡到負責我那台機器硬體管理的Ted學長了。結果硬碟並不是被學長拔走拿去灌切片,而是SCSI controller讀不到RAID。學長說要拿去給廠商,我很爽快的說拿橡皮擦對金屬的部份擦一擦,可以排除一大部分的接觸不良。「我家音效卡都這樣處理」「你家的音效卡價值一百萬元嗎?」,我大驚,詢問之下,原來那個被我拿來當作玩具的1.5T硬碟價值如此之高昂@@......

今天程式寫到這。 全文連結

抓蟲

不久前又抓到一個和顯示橢圓形有關的臭蟲,我把flex drawEllipse四個參數的定義搞錯了。可是神奇的是這個超級大Bug以前並沒有暴露出來。各位看官以後寫程式要謹記著「Bug會互相掩護」這個血淚的教訓。

另外一個,應該是昨天的事情了。本來我用flex API畫圖的時候都要自己做邊界檢查,不然圖都會跑出來。矩形還好,可以自己修座標把超過邊界的部份剪掉,可是像橢圓形,不規則形那些東西,就算把我的肝臟和腦袋拿出來擠,我也沒辦法很快寫出來吧。好加在去mmug詢問的結果,認真熱血又強大的Ticore大神告訴我DisplayObject.scrollRect這個屬性可以指定clipping的邊界。設定、除錯以後把自己的邊界檢查拿掉,很開心的看見Flex幫我做clipping。當時高興的想大叫,本來應該紀錄的,不過忘了,這裡補上XD

過了這麼久,連結應該都沉底了,然後有一個圖硬碟拔掉我重傳的過程中有corruption,也重傳了,連結如下,有興趣的去玩玩看吧XD

切片一
切片二

兩個切片應該都會有Annotation才對,如果沒有,那就是HTTPService沒有讀完,請按重新整理。 全文連結

星期三, 2月 07, 2007

今天的生活

今天在國考補習班,中午吃完飯,拿著$20元的統一麥香紅茶要晃進補習班大樓電梯的時候,剛好碰到大嘴巴克萊芮亞,電腦大王R大,還有豹女三個一起走出來。經過一些對話框事件以後,我得知了開學要考病理完全複習考之恐怖噩耗。

今天回家,照往例又是繼續寫程式了。昨天氣功鍊完以後把玩著Viewer,赫然發現裡面三層圖和Annotation(就是畫面上的橢圓、正方形那些)竟然會對不起來,打開官方的ImageScope瀏覽器,發現他Annotation和我Viewer的物件顯示位置竟然不同。昨晚晚上邊睡邊想,反覆推敲以後,我認為我用的公式在數學上應該都沒有錯誤。那麼唯一的錯誤來源應該就是浮點運算的誤差了。

話說Viewer裡面總共有三個座標系,第一個是切片的100%座標系(完全座標),第二個是縮小圖的座標系(縮小座標,舉個例:切片完全座標系的(100,100)對應到長寬0.5倍圖的(50,50)),第三個是藉由縮放以後在螢幕上產生的縮放後座標系(螢幕座標)。程式內部三者常常相互轉換。螢幕座標的向量除以放大倍率就變成縮小座標上的向量,縮小座標向量乘以當初縮小的倍數(如:2、4...)就變成完全座標上的向量。然後計算出這麼多的座標以後,再來個不清不楚關係複雜的函數呼叫,然後那些函數本身又可能換算座標,結果浮點數運算誤差好像就越來越大了。

今天我就施展了作晚睡覺時在床上想到的奧義,所有的函數呼叫,參數一律都是完全座標,一大堆Class內部儲存座標的變數全部砍掉,只留下唯一的Controller內部保有當前座標值,透過Singleton暴露給所有需要的人,一大堆雜七雜八的整理和除錯之後,螢幕上的物件就很神奇的對的起來了。

接下來就是一直做minor bug fix,不過到目前為止,切片邊界重繪有時仍然不是很正常。

趕快去做Directory Listing的部份吧。XML Parser我來囉T_T 全文連結

星期二, 2月 06, 2007

繼續用力寫

唉唉,最近的blog都變成趕工日記了,可是現在就真的都是在寫這個東西啊。現在每天的生活大概就是1.早上睡飽,大趕工或是2.補習回來,趕工。大概可以稍微體會DNA在台南這幾年都在幹些什麼啊,雖然我還沒到達他「把電腦關起來很幸福」「快樂看日出」的程度orz

今天繼續和UI的部份纏鬥,Drag and Drop完成,Thumbnail完成,功能和官方的Viewer應該相差無幾了。接下來應該就是修UI慢慢發現的bug還有拼後端的部份了吧。現階段後端的要求大概就是目錄列表,接下來就是一直碎碎念可是實際上半個字都沒寫的使用者認證和管理T.T

這幾天一直抓Bug抓到瘋掉,昨天開會和老師demo的時候,viewer都還是好的,但是晚上回來開始加東加西以後,彷彿我打破了什麼微妙的平衡,整個code突然間就整個不對勁,跳躍、Annotation一下子全部壞掉了 >"< 害我昨天debug弄到兩點,還被媽媽大人唸了一下叫我趕快去睡覺orz

今天還發生奇怪的事件,就在我把viewer上傳然後用網路看的很開心的時候,突然間縮放的功能又自動壞掉了,突然間不會自動載入比較放大的版本,把viewer切到本機模式卻又一切正常。中間一大堆過程省略,最後發現是ImageServer的問題,重開機以後問題還在,想說會不會是切片檔corrupt掉了,結果檔案總管一開,放切片的那顆1.5T硬碟不見了@@。詭異的是為甚麼我的viewer還有一部分可以繼續跑,難道是cache大神顯靈(拜學校的transparent proxy之賜,在學校看自己的blog的時候可以看到三天前的版本)?或是我的code真的有生命力(根據kochi的說法,我以前趨勢大賽寫UI的時候,某部份的code砍掉以後對應的功能還是能動@@)

之前給的連結應該還是有用,只是要先等我把檔案傳完。 全文連結

星期日, 2月 04, 2007

用性命趕工orz

今天沒有去補習,又是用性命換取進度的一天。

第一件事情就是加入了環境切換的功能,首先在Singleton裡面加入一個global boolean,表明現在是在本機開發還是實際上線。再來就是把所有會連網的地方都加入對這個boolean的判斷,如果是true,就連本機,否則就連遠端。

在本機跑的好處,除了不必每改一點東西就用FTP上傳之外,本機執行發生錯誤的話Flash Player會跳出視窗回報,相反的,遠端執行假如出錯,Flash Player會silently fall。所以今天上午一直在做「加入print("kero")->看看會不會出現->會的話刪掉print換下一個地方」,直到我改到本機才不必做這種事情。雖然我很討厭Flash Player譙我,可是在無數的Silent fall之後,看到Flash player會跳出錯誤視窗反而有種高興的感覺。

第二件事情就是開始加入Annotation,Annotation困難在於如何呼叫HTTPService,如何用AS處理XML,XML帶來的新物件和資料結構的熟悉,繪圖API入門這些問題,今天一番奮戰,實做出了橢圓形,明天應該可以順利加入其他的形狀。至於使用者認證的部份,應該就拿班網的儲備用new code拿來改改吧orz,總之認證的部份不會太難就是了。

昨天發佈的連結還是可以用,只是他常常會跳出很多討厭的除錯訊息,那是我加進去的,未來正式版就不會有這些東西。如果各位看官覺得煩,按一下Clear鈕那些東西就會不見了XD 全文連結

星期六, 2月 03, 2007

星期四, 2月 01, 2007

讀中時社論有感

原始新聞

讀了「大法官,勇敢點」一文對大法官很多指責,有一些想法實在不吐不快。

「大法官又不是立委,在人權議題上,曲從民意做什麼?」大法官當然有服從民意的理由,而且理由非常嚴肅。

大法官的職責,就是根據憲法保障人民的權利。但是人民的權利常常互相衝突,無法兩全其美(比如徵收古老建築當古蹟可以促進文化,卻可能讓被徵收者跳腳)。大法官為了達到權利的最大保障,自然必須適度壓抑對人民較不重要的權利,而取對人民較為重要的權利加以保障(公共利益優先,故政府徵收土地合憲,不過要給錢補償就是了)。而哪種憲法上的權利對人民比較重要,不是應該問人民嗎?不是應該問民意嗎?保障人民的重要權利,就是大法官有義務問人民,順從民意的第一項理由。

大法官的產生過程,以我國來說是總統提名,國會同意。大法官本身並沒有直接民意的基礎,但所作出來的釋憲文,卻可以推翻有民意基礎的國會決策和行政決策。假如大法官不必遵守民意,那豈不是允許國家少數人以自己的獨斷意志推翻人民間接的決策?這樣大法官和專制國王有什麼兩樣?大法官制度可以存在,是為了監督政府,避免政府違反記載於憲法的最高民意。而不是開一道究極的權力之門,讓少數人可以獨裁。簡而言之,我國是民主國家,這是大法官必須服從民意的第二項理由。

大法官宣告死刑合憲,真的是因為保守懦弱?反對死刑者常說死刑犯也是人,人人應該平等。可是,死刑固然剝奪了死刑犯的人權,但不這樣做哪能補償受害人?一個真正平等的社會,一定會允許受害人向被害人索取和被侵害權利相等的補償,在法治國家則是由人民授權政府代替執行。從這個角度來看,政府替枉死的被害人向加害人索取被侵害權利的等值品:加害人的生命(也就是一般人說的「還一個公道」),不知道怎樣違反了人人平等的原則?不允許被害人向加害人要求等值補償,怎麼看都是加害人的人權高人一等,不知「反死刑」要如何和「保障平等」劃上等號?我是這麼想,我想大法官也是這麼想,才會宣告死刑合憲。所以大法官宣告死刑合憲,絕對不是退縮懦弱保守無能,而是有一套是非道德的。希望反對死刑的人,不要因為自己「只聞死刑犯在笑,不聞被害人痛哭」的理論沒有被大法官採納,就隨便批評大法官。 全文連結

繼續寫

今天修正了Viewer一個捲動方面的Design error,現在看圖的流暢程度又提昇了。雖然還是有時畫面會小閃,不過不是什麼大不了的issue。

現在需要implement兩樣東西:Viewer方面還有annotation(就是在畫面上標示「這是Reed-Sternberg cell」之類的)的功能沒做,另外一個就是把圖放到網路上了。之後就是帳號密碼認證和圖片資訊編輯。大概都有譜吧,只是時間內能不能弄出來的問題。

明天先專注在網路放圖,OK的話就是Annotation。 全文連結