文章列表
2007年9月8日 星期六
MPENV
因為某些外在因素整體架構有點亂。
而在當時就開使構思寫一個精簡的 MMI Framework.
定義一些在 Embedded System MMI 的寫作方式,資源控管等東西…
目標是讓降低 Programmer 寫 MMI 時要顧慮的東西,如 status,resource,
只要專心寫要寫的東西就好了。
幾個月前和幾個朋友聊到這個想法,也就在 SourceForge 註冊了這個案子.
MPENV (Modulized Pages Environment)
簡單來說,就是用 MVC 的架構來寫一個 MMI Framework.
目前我們只定義了 Module 和 Pages 的介面及跳躍方式。
離目標還有一大段的距離。不過我們正在努力。
我們使用C++,GTK/GLib 為開發平台,目前不使用 GTKmm。
而 UI component 是用 手寫 or gtk_builder 做出來。
這幾天還在想如何把 controller 實做出來 :P
目前有一大堆手寫文件,希望在不久的將來我可以把文件整理一下寫個 SDS 再向大家介紹它。
--
文筆不好, 真是苦手啊 ~_~
ToDo: 表達能力
2007年8月17日 星期五
One Day Off
這幾天天氣相當的不穩定,小弟連續磕了幾天的普拿疼後,昨天一整天完全沒有工作情緒,今天終於決定不去上班了。
只想好好的睡一覺。好好的放鬆一下。
睡到了十點,恣意的發呆了一下,頭也比較不痛了。
下午到家附近學生時期常去的水餃店吃了中餐,好久沒去那家店了,沒想到老闆還跑來和我聊了一下天,他們以為我搬家了 :P
吃完中餐,發了點小瘋,突然想回台大看看。也就去了。台大多出了許多建築物,舟山路也變成學校的一部分。
颱風越來越大,一個人在校園裏漫遊。回想起那一段刻骨銘心的感情。埸景依舊,兩人依偎的身影卻只在回憶之中。
到新總圖,四樓左側最後面坐了下來。暑假期間,沒什麼人。這是我大學最喜歡的位子,離我喜歡的書很近。大學時,有數不盡的時光泡在這裏。一個人靜靜的慢慢回味。
我很喜歡坐在這裏,人生中有許多重大的決定,很多新的想法,讀出心得,感受出知識的威力都在這裏發生。
畢業多年,回到這裏,也是在思考人生的走向,我們在這時代,我們背負的責任。我是否對得起多年前坐在這心中充滿理想的小子。
回到系館教室,獨自一人坐在裏頭。這是我大學時代最後一次考試的教室。也是在這間教室之中,我聽到一位老師說: Java 的 try catch 改善了過去 C 語言中例外處理的弱勢,這是一個新發明,是專家們深入研究程式語言後的發明。而未來做這件事的人,就是在座的各位。
是的,也許我要更加的努力。
2007年8月13日 星期一
毀壞 Partition 之 Office 2003 Word 救援
昨天就收到了兩個壞掉的隨身碟。一個 512 MB 另一個 1G 。
它們的 MBR 和 superblock 都被病毒給毀了
可是裏面的 Doc 檔又特別重要… ~_~
身為一個好人,為了未來的幸福…當然義不容辭一定要把它們救回來嘍
以下是我的救援 steps
1. 把 flash 插入可愛的 Linux 機器中。
"dmesg" check 一下是否硬體壞掉。
硬體 OK 但沒有 partition info
2. 用 "fdisk /dev/sda" check MBR
ok 真的爛了 @_@
3. 用 dd if=/dev/sda of=honey_512M.img 備份下來
4. check 資料是否完全爛掉,還好,data 還在
因為苦主說明 word 檔很重要~~ 所以就專攻 word 檔嘍
苦主用的是 office 2003,因此小弟就找了幾個 office 2003 的 word check 了一下檔頭檔尾
Good Luck!!
發現大多數的 word 檔檔頭是以 D0 CF 11 E0 A1 B1 1A E1 開頭
以 6F 63 75 6D 65 6E 74 2E 38 00 F4 39 B2 71 結尾
因此先用 hexdump + head + tail 剪一個出來驗證
驗證 OK !!
5. 隨手寫一支小小的程式把這個區段的 word 檔給一個個 copy 出來
雖然不是所有資料都救回來了,但最重要的救回來了就好了 ^_^
6. ./recover honey_512M.img
這個方法可以 recover 回文字量少(小檔案),沒有使用 macro 的doc 檔
如果檔案較大,大於 block size 那就比較麻煩了,就要去讀file system 的資料
幸運的是,絕大多數的檔案都是小檔案。
如果檔案中有圖片,就很可能變成圖片壞了,文字還是救得回來。
以下是小程式的 source Code:
Filename: recover.c
Composer: Tick
License: GPL
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int PREFIX[] = {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1};
const int SURFIX[] = {0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x38, 0x00, 0xF4, 0x39, 0xB2, 0x71};
void showExit (char *arg) {
printf("This program is used to recover MS office files from broken image\n");
printf("Usage: %s <image file>\n",arg);
}
void recordFile(FILE *foo,char *file,int start,int end) {
FILE *fp=NULL;
if (!foo || !file || strlen(file)==0) {
printf("Invalid file to record (%d,%d)\n",start,end);
return;
}
fp = fopen(file,"w");
if (fp == NULL) {
printf("open record file %s failed!!\n",file);
return;
}
fseek(foo,start,SEEK_SET);
while (ftell(foo) < end) {
fputc(fgetc(foo),fp);
}
fclose(fp);
}
void scanFile(FILE * foo) {
int c;
int index=0,index_e=0;
int start=0,end=0;
int fid=1;
char buf[256];
while (!feof(foo)) {
c = fgetc(foo);
// printf("get 0x%02x at %d PREFIX[%d]=0x%02x\n", c, (int)ftell(foo),index,PREFIX[index]);
if (c==PREFIX[index]) {
index++;
}else {
index=0;
}
if(index==(sizeof(PREFIX)/sizeof(PREFIX[0]))) {
printf("Get PREFIX at %d index = %d\n",(int)ftell(foo)-index, index);
start=(int)ftell(foo)-index;
index=0;
}
if (start!=0) {
if (c==SURFIX[index_e]) {
index_e++;
}else {
index_e=0;
}
if (index_e==(sizeof(SURFIX)/sizeof(SURFIX[0]))) {
end=(int)ftell(foo);
printf(" File starts at %d end at %d size %d bytes\n",start,end,end-start);
sprintf(buf,"%04d.doc",fid++);
recordFile(foo,buf,start,end);
start=0;
index_e=0;
}
}
}
}
int main (int args,char **argv) {
FILE *foo;
if(args == 1 ) {
showExit(argv[0]);
return 0;
}
foo = fopen(argv[1],"r");
if (!foo) {
printf("Open File %s failed!!\n",argv[1]);
return 0;
}
printf("Open File OK!!\n");
scanFile(foo);
fclose(foo);
}
2007年7月28日 星期六
隨手筆記 murmur
難得星期六空閒了一下,左手是 Harry Potter 7 ,右手是 Mozart 小夜曲的譜。
正在恣意的浪費寶貴的假期…
跟了我四年多的 Laptop 越來越怪, device 一個一個壞去,還是撐著用…
想買新的 Laptop
用了十幾年的電視也一直晃動,畫面歪曲變型…
想玩Wii 看來也要買新電視…
Wish List:
Laptop
TV
Wii
啊…又想省錢…
過去的教育一直告訴我,錢要省下來,用來投資做資產分配,
不需要慾望的就要省下來…
未來生活才有保障…
說得容易,可是當慾望和理財衝突時。
看著別人享樂,自己卻努力克制慾望…
心情並不快樂…
Laptop 應該是要買了…因為這是我吃飯的工具…
TV,Wii... 我可能也沒時間看,沒時間玩 ~_~ 先省下來吧… >_<
想做好多事,想玩好多東西。沒時間,就是沒時間…
想多陪陪心愛的人,想做陶笛,吹陶笛,想看 Harry potter,想把一些技術上的心得寫下來,想玩 Wii ,…
Wish List 好長…
而每天工作時間又超長。想省下時間做自己想做的事,真的好難…
可是當真的有時間時,唯一想做的事就是,好好休息…真的太累了…只想躺在床上,好好的睡一覺。
這陣子在工作上看到了許多 "人事" 上的現象,有一些心得…
工作從興趣變成了工作…真是可悲~
賠掉了時間,出賣靈魂,又只賺那麼一點錢…還被別人說是阿宅…
我到底在追求什麼啊?
想讓心愛的人有好的生活,想讓未來能活得更有尊嚴。
想真正做出一些有趣的東西,有趣的事…
想讓台灣的資訊人才能真正的產生應有的價值,創造價值…
建構一流的 Team ,做一流的事…
可是自己光有一點技術,會做事,但不抵 "人事" 的力量。
到這年頭還相信:"誠信正直" 看起來真的幼稚了點。
我不期待別人如此,只希望自己能夠堅持下去。
我不是阿宅,我只是丁了點…
發洩完了…吹笛子去…
2007年7月12日 星期四
Synergy 鍵盤滑鼠共用程式
Synergy
以下是 PC Home 上的簡介:
Synergy - 讓你用一套鍵盤滑鼠掌控身邊的所有電腦你是否有多部電腦呢?那麼當你要切換不同的電腦時,是透過什麼樣的方式呢?KVM?遠端遙控?這些都落伍了,讓筆者所介紹的這款 Synergy 來幫助你透過一套鍵盤滑鼠控制所有的電腦吧!
更酷的是,它可以同一套程式跑在不同的 OS 之上,就變成一下在 Windows 一下在 Linux 一下又可以滑到 Mac 之上。
不過,在使用之前,要先設一在機器為Server (就是你正在用滑鼠的那台) 其它台設成 client (要指定好 server 是誰)。
再者,要設定好每台電腦之間的關係,而且要注意一件事:要設定好兩者之間的相互關係。
如
A <---> B
我們可以說: A 在 B 的左邊 如此滑鼠滑過 B 的左邊邊線時,就會跑到 A 上面
而如果我們希望滑鼠滑過 A 的右邊邊線時滑鼠可以回到 B 上的話,我們還要定義
B 在 A 的右邊 。
當然,這個關係可以不是 1-1,onto 的,也就是你可以用這個程式做一個滑鼠迷宮 @_@
但我想大概沒人這麼自虐吧 :P
畢竟,這是一個做來讓我們方便使用的程式。
ps 因為這個程式只認 IP ,就提供服務,所以在某些情況下, keyboard 和 mouse 是有機會被別人搶走的 (大家可以想一想 :P)
2007年7月9日 星期一
[轉貼] screen 教學
留著做備忘 :P
來源: http://plog.longwin.com.tw/post/1/249
screen 教學
screen 是個非常好用的工具(Linux, BSD.. 等).
這個網址有很詳細的教學: screen 簡介.
下面將一些重點部份轉貼過來..
使用 screen
在命令列下打 screen 就會進入 screen 的天地:
% screen
注 意,所有 screen 的指令都是以 Ctrl 鍵加上 a 鍵開始的,在之後以 C-a 代表,C-a c 代表按住 Ctrl 鍵不放再按 a 鍵,然後放開按 c 鍵;而 C-a C-c 代表按住 Ctrl 鍵不放再按 a 鍵,然後放開後再按住 Ctrl 鍵不放按 c 鍵。
開啟,關閉,切換
C-a c 或 C-a C-c 開啟新的視窗,並同時切換到這個新的視窗
C-a n 或 C-a C-n 或 C-a (space) 切換到下一個視窗(0->1 1->2 ...)
C-a p 或 C-a C-p 切換到上一個視窗(1->0 2->1 ...)
C-a C-a 切換到上一個顯示過的視窗(不是照順序切換)
C-a 0 切換到第 0 個視窗
C-a (1..9) 切換到第 (1..9) 個視窗
C-a w 或 C-a C-w 會列出目前所開啟的視窗
0$ tcsh 1$ tcsh 2*$ tcsh 3$ tcsh
有星號 "*" 的表示目前顯示中的視窗,之後的 tcsh 代表這個視窗的 title ,預設是以開啟時的 shell 名稱
C-a K 關閉所有的視窗並退出 screen
C-a ' 或 C-a " 會出現 "Switch to window:" 字樣,輸入號碼後就可切到該視窗
單一視窗使用中的指令
C-a C 清除目前的視窗內容
C-a d 或 C-a C-d 脫離(detach)目前的 screen ,並放到背景執行(不管開了幾個視窗),下面會再提到
C-a D D 強力脫離,除了放到背景執行外,並自動 logout
C-a C-g 虛擬嗶聲(visual bell)的切換,可以在畫面上顯示訊息代表一般的嗶聲
C-a H 紀錄目前視窗所有顯示過的東西(檔名為 screenlog.n n 為視窗號碼)
C-a i 或 C-a C-i 顯示目前視窗的資訊
(11,24)/(80,24)+1000 +(+)flow -ins -org +wrap +app -log -mon +r G0 [BBBB]
C-a l 或 C-a C-l 重繪視窗,如果有字顯示亂掉了可以用這個指令
C-a m 或 C-a C-m 或 C-a (enter) 可以顯示最近一次顯示過的訊息
C-a t 或 C-a C-t 顯示系統的時間及主機名稱還有負載
C-a v 顯示版本資訊
C-a x 或 C-a C-x 如果你要暫時離開目前位置又不想先 logout ,那可以用這個來鎖住 screen
C-a S 將營幕畫面暫停
C-a q (C-a S 暫停) 的 回復
C-a ? 線上求助畫面
複製/卷軸 模式
按下 C-a [ 就可以進入 複製/卷軸 模式(只有在目前視窗才算,其他視窗照常)基本上跟 vi 很像:
h, j, k, l 分別為向左,向下,向上,向右移動一格(或是一行)
0 移到該行最左邊
^ 與 $ 分別移到該行最左邊及最右邊的非空白字元
w 以字為單位往前移動並移到字首
b 以字為單位往後移動並移到字首
e 以字為單位往前移動並移到字尾
C-b 向上捲一頁
C-f 向下捲一頁
C-u 向上捲半頁
C-u 向下捲半頁
/ 與 ? 向下或向上尋找字串
(space) 第一次按下到第二次按下的區域會被複製到暫存區內
(ESC) 離開 複製/卷軸 模式
接著按下 C-a ] 便可以把剛剛存到暫存區內的內容複製出來。
善用 screen
前 面提到當按了 C-a d 脫離了 screen 後,會回到沒有執行 screen 時的狀態,但是同時在之前 screen 裡每個視窗內在跑的 process (不管是前景或背景執行的)仍然繼續執行,即使 logout 也不會有影響。所以你可能接著離開身邊的電腦,然後跑出去喝個水,或者另外找個舒服的地方坐下來再接著剛剛的工作。
好,當你重新登入(login)之後,要怎麼接回剛剛的 screen 呢?重打 screen 只會讓電腦另外又開個 screen 給你,你所要做的事就是加些參數:
screen -ls 顯示目前個人所有的 screen
% screen -ls
There are screens on:
1188.ttyp4.SungSung (Attached)
76920.ttypq.SungSung (Detached)
2 Sockets in /tmp/screens/S-AlanSung.
上面的 Attached 表示你現在連接的 screen ,而 Detached 則表示沒有連接的,最後則是共有多少個 screen 數量
screen -r 就是重新回到(resume)screen 裡,如果你只有開一個 screen ,那只要簡單地打
% screen -r
就沒問題了,但是像上面那個,如果你有了兩個以上的 screen ,這樣就有問題了
% screen -r
There are several screens on:
1188.ttyp4.SungSung (Detached)
76920.ttypq.SungSung (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
如它的訊息所述,你可以加上它的 process id 或是使用的 tty 加上主機名來決定要接回那一個 screen 。假設在這裡我們要接回 process id 為 1188 的那一個,就打
% screen -r 1188
或
% screen -r ttyp4
或
% screen -r ttyp4.SungSung
或
% screen -r 1188.ttyp4.SungSung
都可以
screen -d 假設現在自己的電腦突然當機,或是網路突然斷了一時連不上去,等到好了之後,想要接回來原來的 screen 卻發現
% screen -r
There is a screen on:
1188.ttyp4.SungSung (Attached)
There is no screen to be resumed.
這時候 -d 這個參數就派上用場了,讓你可以控制某個 screen 脫離(detach),接著再加上 -r 把這個 screen 接手回來
% screen -d
[1188.ttyp4.SungSung detached.]
% screen -r
或直接
% screen -d -r
screen -wipe 有時候不小心跳電了,這時候重開機後當然也不會有 screen 留著,但是由於 screen 會有紀錄所有的 screen ,因為雖然舊的沒有了,可是還是有紀錄在,因此這個指令就是把廢棄不用的 screen 給"擦拭乾淨"(wipe)
There are screens on:
69103.ttyp5.SungSung (Removed)
529.ttyp0.SungSung (Detached)
1 socket wiped out.
1 Socket in /tmp/screens/S-AlanSung.
會 用了上面所介紹的功能,你可以現在進入 bbs ,進入聊天室跟人聊天或是在上面發表文章到一半,發現計中要關門了,你可以從容的 detach ,回家之後再連回來 attach ,繼續剛剛的話題或發表文章,而對方可能根本沒發覺。只要你連線的主機不當機,那電話線或網路再怎麼不?都不必怕斷線。
如果你需要更多詳細的資料,可以善用線上手冊(manual pages)或是 info 這個指令
% man screen
% info screen
請問split怎麼用? [回覆]
嗯..screen很好用,不過這一篇教學滿基本的,所以想請問在screen中的split功能怎麼使用?
