2007年8月17日 星期五

終於出太陽了

很少看見陽光會感到欣慰的,除了今天.

禮拜二是我抽兵種的日子,體檢結果拖這麼久以為可以當替代役的,不過我也不是那麼擔心啦...要上課的關係只好請老爸代抽了,反正我自己的手氣一向不太好.下午同學就丟msn來告訴我了,原來是中了陸軍,94個人抽有9支海陸,機率其實也蠻高的,頓時覺鬆了一口氣.很多人都畏懼當兵,在我想法裡認為這是人生的歷程,一種新的體驗,所以也不是那麼排斥,錯過還覺得有點可惜(頭殼壞了?),如果今天抽到的是海陸我還會這麼說嗎?我想是吧,我會從容的應付,而且好好的噱大家一頓.

學長的論文看的差不多,把問題整理起來今天一併討論完,實做流程上也都清楚了,不過有很多background的東西都還很淺,我怕一一survey時間恐怕不允許,另一方面也要開始熟悉開發工具與其程式語言.老闆又指派新的project,他總是藏了許多可以耗損我們腦袋的東西.Multi-channel Digital Wireless Speaker(多聲道數位無線喇叭),多聲道之下需考慮同步播放的問題,另外得學一下網路的東西(802.11,NTP,RBS,RTP...),還有訊號分析.

晚上在論壇看到一套軟體-PhotoZoom,發文的大大標明說"放大圖片不失真",隨然覺得豪洨還是抓來玩玩,試了一下發現效果比想像中的好,最起碼看起來比較順眼,不像其他繪圖軟體有失焦的感覺或鋸齒狀,但有些圖片放大以後變得有點假假的,直接來官網看個比較圖吧.我抓了第一張人臉的原始圖檔下來測試,放大後比官網的稍微模糊一點點,不知道跟參數的設定有沒有關係,不過比起ACDSee做出來的確實有好一些.

2007年8月13日 星期一

無名相簿瀏覽器final

delay了很久終於完成.這是上個月設計的一個程式,主要用途是在瀏覽兼下載無名相簿,之後又添加了一項"隨選"的功能,可以依自己設定的條件來挑選相簿主人,操作容易,設計簡樸.

按此下載本程式(32kb壓縮檔,最後上傳:08/14 01:16)
※程式由Visual Studio 2005撰寫,使用前需下載必要條件.Net Framework 2.0

操作簡介:
打入無名帳號(這邊借用gyba來測試一下),按下確定即可列出所有相簿.選單具自動完成與歷史紀錄功能.

點選相簿會以分頁的方式呈現內容.

"全部下載"就是把這本相簿所有照片打包,路徑可自行設定.分頁按右鍵可選擇關閉.

點選照片可以看原始大小的圖片,再點選可以另存新檔.

再來說一下另一項功能"隨選",依自己喜好設定條件,打勾表示需要這個選項,第一次搜尋較花時間.

結果出來了,下圖就是一個合乎條件的相簿主人,有沒有謊報我就不知道了,不滿意可以再按一次.本程式不保證每次挑出來都是正妹or帥哥,請小心使用.

一些心得:遇到批次作業,網路傳輸的問題都得用thread來輔助,單線執行會讓你的程式一直處在等待中,這也是我頭一次使用thread,其原理學過os的都懂,只是要套用在自己的程式上往往得思考一番,Critical Section問題也是常常碰到的,vb.net都有對應的解決方法(Monitor,Interlocked...).TabControl控制項的運用也得透過一些技巧.字串分析是最耗時間的,如何切出自己想要的部份,都要多方觀察與測試.區區一個"隨選"功能也花我很多功夫,要兼顧效率與負載,避免不需要的重複動作.

當然bug是永遠存在的,程式寫到最後也不是我能控制,最大的問題大概就是"何時,如何結束不需要的thread".如果遇到錯誤視窗跳出,請按"繼續"鈕通常可以繼續使用,如果視窗突然消失也不要太驚訝,這些都在正常的操作範圍.也歡迎大家回應給我.
目前已知的bug有:
1.新分頁的圖片還未全部load完成,按下關閉會造成嚴重的錯誤.
2.隨選功能大量連接無名的伺服器,連續玩30次可能會暫時被封鎖,浮動ip者斷線重連即可.
3.無法使用滑鼠滾輪捲動頁面.
4.超吃記憶體.
...(待發現)

※如果想要贊助請匯款到我paypal帳戶(還未申請).

ref:
體驗.NET Multithreading的快感-以VB.NET開發Thread Pool式網路芳鄰掃瞄程式
Understanding Threading in .NET Framework using VB.NET
Multithreading in .NET - The Code Project - .NET
達可鴨的池塘總有好的idea

2007年8月11日 星期六

陰雨綿綿

這次回台中算是補慶祝父親節,雙手空空的,最大的禮物莫過於88節當天打電話回去慰問.週末下雨的時間居多,一些行程都得取消,帶了一些電影回來,家裡卻沒dvd光碟機.三兄弟難得同時在家,爺爺奶奶都會準備好料等著我們,碗公總是讓我忘記吃下多少飯.家裡的床也睡的特別安穩,在台南總是醒的比鬧鐘還早,可能是有壓力的關係吧.
和女朋友在特賣會買了一件levi's 509卻不敢拿回家,偷偷寄放著...我什麼時候變這麼孬了.衣蝶也封館特價,不過沒時間逛;世貿電腦展得花門票錢,去又會買一些有的沒的.
學長的畢業論文120頁,額外還有8篇要k,花了兩個禮拜還沒看完,看英文的東西專注力總是特別低,原本想說利用這兩天好好的...不可能.
一些想完成卻未完成的事情,一再拖延. 明天回去的車票也還沒劃位,看來得用站的了...

2007年8月6日 星期一

Visual Studio Tools - Spy++

Spy++來顯示執行中的程式的各項資訊,包括執行緒、開啟的視窗,以及隱藏的視窗等等。有了這些資訊我們可以透過API呼叫的方式來控制應用程式,不需要了解應用程式如何implement.

以Windows Media Player為例:
開啟Spy++,選擇紀錄檔訊息.

將搜尋工具的準星移到目標程式上的最外框.訊息中的"文字"與"類別"是我們需要的.

先清除全部,再選擇WM_COMMAND.按下確定後開始監控.

執行想擷取的動作,如"播放/暫停".Spy++會收到訊息.

訊息欄位說明:第一欄-訊息編號. 第二欄-視窗代碼. 第三欄-訊息代碼:S(代表送出),R(代表收到),P(代表posted),S(代表訊息已送出,但是安全管制設定禁止你取用傳回值). 第四欄-訊息、參數和傳回值選擇訊息的屬性.
選擇屬性.

wParam的16進位值是我們需要的參數.

開啟VB.Net專案,宣告參數及Function.
Public WM_MCOMMAND As Integer = Val("&H111")
Public WM_KEYDOWN As Integer = Val("&H100")
Public WM_CHAR As Integer = Val("&H102")
Public WM_KEYUP As Integer = Val("&H101")

Declare Auto Function FindWindow Lib "USER32.DLL" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr

Declare Auto Function SendMessage Lib "USER32.DLL" _
(ByVal hWnd As IntPtr, ByVal Msg As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer) As Integer

開啟WMP後,Call Function來執行播放/暫停的功能.
Dim wmplayerHandle As IntPtr = FindWindow("WMPlayerApp", "Windows Media Player")
SendMessage(wmplayerHandle, WM_MCOMMAND, Val("&H4978"), 0)

範例程式下載

Ref:
HOW TO:以程式碼模擬滑鼠和鍵盤事件
WM_COMMAND Notification

2007年8月4日 星期六

Multi Channel Digital Video Broadcasting Streaming Server

Multi Channel Digital Video Broadcasting Streaming Server(多通道數位電視影音串流伺服器),這是老闆派給我的第一個project,它是一個成大學生的專題,而我的工作就是練習架設一次,雖然有文件可以照著做,對於linux不熟悉的我,還是進行的很不順.

架構如下,Serer端由linux架設,接有數位電視天線,Client藉由網路向Server要求,以達到四處可以看電視的目的.

由於linux核心尚未整合,需另外下載driver及kernel source自行安裝.數位電視棒是usb介面,firmware也得另外下載,透過指令dmesg|grep dvb查看硬體是否啟動.再來就是安裝dvbstream,及server control軟體,client透過Real-time Transport Protocol接收,telnet方式轉台,這就是架設的流程.

手中的指令是有限的,遇到什麼問題都得上網搜尋,操作介面不同習慣也不同.編譯錯誤時往往束手無策,即使有error message也不知道如何處理,只能另外尋求安裝管道,這也是挫折最大的地方. 數位天線需要在沒有遮蔽的地方訊號才夠強,在我房間裡面訊號都斷斷續續的,buffer要填滿到100%才會送出,測試時不曉得client到底有沒有收到,最後在lab終於搞定,證明流程上沒出問題.另外還學到了一個實用的工具Visual Studio Tool的Spy++,他可以紀錄應用程式改變動作時送出的訊息,如此就可從自行編寫的軟體去控制其他的應用程式.

Client端目前限定在windows application(base on .net framework),學長說老闆希望改用web service方式呈現,達到有瀏覽器的地方即可觀看,搞不好下一步就輪到我了.

Ref:
LinuxTV.org - Television with Linux
用Linux看數位電視

2007年8月3日 星期五

Lab歡樂時光

話說暑假在lab的時間都不長,都是有特別的事情才過去,自從體會到這邊這邊電費後,大概以後都會待在學校吧...今天是第一次留這麼晚,不過lab的學長幾乎都還在,這是很操的意思摟? 晚飯時間學長拿出家鄉寄來的黑鮪魚(驚),原來他們每個禮拜都會自己煮東西來吃,58%高粱醃製,250度烘烤,看來我真的選對日子了QQ.雖然已經吃飽了,還是忍不住要喀上好幾口,奠定了黑鮪魚在心裡的感覺,相信我會更有動力留在lab的.

搬來五樓後漸漸習慣,記得第一晚還有點睡不著,便宜總是要付出代價的,除了每日要爬五樓,房間真的很熱,脫掉上衣得過且過啦,反正夏天也快過了(是嗎@@).初來時水管有點不通,房東弄了罐通樂,按...原來這個東西這麼臭,看來他想徹底的讓我封口,味道久久不散大概被牆壁吸收了,光想到就讓我做噁,害我得開兩包熊寶貝把味道覆蓋過去,別騙人了其實有毒氣體還是被吸進去,今天打算買去味大師看看有沒有效了...

電費的問題阿銘提供了不少意見,要看電錶是否有被偷改,可以觀察封鉛有沒破壞的痕跡,問題是我連鉛封都找不到...用磁鐵可以讓電錶轉慢一點,壞硬碟裡面的不知道夠不夠強.考慮跟鬍鬚借個電錶來測量,不過要偷偷的,被房東發現了不知道會怎樣.

2007年8月2日 星期四

這個家越來越黑了

最近比較忙,幾天沒更新網誌了,有股怨氣要發洩一下...

話說前幾天對面要搬走的房客突然來找我,他說這邊的電錶比較快...夭壽咧,他拿出一張紙寫了好幾條公式,一邊解釋給我聽,物理的東西我是忘的差不多了啦...結論就是他測了好幾遍,只開兩支40W的日光燈一小時,電錶會計成200W,也就是快了2.5倍,到其他地方測試都有合乎他的算法...講到一半房東太太突然出現(驚)@@",她說有請電力公司測過,也不知道真假...我們沒具體證據也不好說什麼...

月底也是繳費的時候了,驚覺竟然如此的多,125度x3.5=438,拜託我搬來20天(扣除回家3天),沒冷氣,只用過一次熱水器,只用電扇不用吊扇,白天不開燈,晚上一半時間開日光燈,一半時間開檯燈,電腦出門關機,睡覺也關機...想當初在經國新城根本沒有省電的觀念,出門電燈電腦沒在關的,夏季每天都要吹2,3小時的冷氣,最多也才500初...最扯的是房東還跟我說3f有人一個月才一百多,阿是都點蠟燭的喔...

當然不只我摟,噹噹10天70度,比我還慘,她白天都在lab天黑了才回來,莫非lab的冷氣錢寄到家裡來.文欣住滿一個月150度,不過有10餘天是在彰化,多個冰箱應該也不至於多這麼多~~~

房東說電費以3.5計算,是一個平均數,台電分段式收費,用越多花越多,無分地域性,只有營利與非營利之差,且冬夏電費有分,全部以最高段來算:
夏季3.74 非夏季2.9 平均只有3.11 ,雖然說夏天用量會比其他季節來的多,不過差值還是有點距離...

看來我也要來計算電錶的轉數了,可惜對面的房客已經走了,得重新整理公式...
以後做什麼都要斤斤計較了,考慮在大門口貼個陰宅之類的...

Ref:
台灣電力公司-電價表