[Tip]以指令呼叫檔案總管出來

以前在某討論區看到的,主要是給 VFP 用的
Run /n explorer.exe /e, , , /select , &lccurdir
同理可證,只要在 command prompt 或 [開始][執行] 下達:
explorer.exe /e, , , /select , your_folder_path
就可以神奇的呼叫出檔案總管,並顯示你指定的路徑.

ADO/OLEDB Provider/ODBC

昨天晚上碰到一個難纏的初學者,被他纏住了兩三個小時
而這兩三個小時就圍繞在一個問題上面:
ADO, OLEDB Provider, ODBC Driver, DATABASE SERVER, OLEDB Interface, ODBC Interface, ODBC OLEDB Provider 之間的關係.
我反覆的說明
ADO -> OLEDB Interface -> OLEDB Provider -> DATABASE Server
ADO -> ODBC Interface -> ODBC Driver -> DATABASE Server
ADO -> OLEDB Interface -> ODBC OLEDB Provider -> ODBC Driver -> DATABASE Server
的關係,說到手快斷掉了(因為用打的)
最後舉了一個例子,總算是讓他比較能了解這之間的關係與 ODBC OLEDB Provider 所扮演的角色:
某天 ado 到郵局去,他到了 oledb 的窗口,發現只有一個叫做 odbc oledb 的代理人,他本身不知道之前 oledb 作了什麼事情,他只知道可以找旁邊的 odbc 人員幫忙做事,於是他就找旁邊的odbc人員幫忙做事,odbc 知道要去找 sql server,於是就作啊作,做完把結果給 odbc oledb 人員,odbc oledb 人員接著再把結果拿給 ado .
-_-||
看來我說明的技巧還不夠好
有待加強~~

LVM之痛

前一陣子,在公司做過 LVM 實驗之後
發覺 LVM 真是一個不錯的東西,
可以把多個硬碟串成一個大的 volume group.
你可以把他想像成一個容量超大的 heap,而你可以任意向他索取空間(logical volume),也可以任意再 attach physical volume 上去增加 volume group 的容量.
也因此才把 LVM 應用到自己家裡的 server 上~
在應用之後,一切都非常順利
除了 logwatch 每天回報說 hdb 有問題之外.
這裡稍稍為我的 hdb 作一下介紹.
hdb 是我的 Quantum Bigfoot 2G 硬碟,這顆算是古董了吧
從 1997 年服役至今,陪伴我將近 7 年,沒有任何怨言.
以下為了方便稱呼,我把它命名為”小Q一號”.
就在前天,星期六~~
小Q一號突然出現了奇怪的聲音,當時我還不以為意的繼續使用電腦~
到了晚上要關機的時候,發覺小Q一號居然無法 sync,kernel 持續回報說無法驅動它.
此時,我才發現大事不妙,這種懊悔的感覺充斥在我的腦海裡.
我真的很後悔,為什麼以前都忽略了它對我的警告呢??
但是太遲了~~
我已經無法將小Q一號由我所串起的 volume group 中移除~~
由於隔天要很早起床去旅遊,只好先作罷,含淚睡去.
翌日的翌日,也就是今天.
我試圖換上我內人以前所用過的,同樣也是 Quantum Bigfoot 2G 的硬碟,小Q二號.
想說,讓它也披上 physical volume 的外衣,看是否可以騙過我的 server,但是不行,仍然無法啟動.
由於下午要出門到使徒家裡去,只好再次作罷,含淚出門.
剛剛,也就是吃完晚飯後,我上網找到一篇文章(這篇應該是由英文的HOWTO翻譯過來的).
提到了volume group損毀的處置方法:
1.如果physical volume(硬碟)還能動的話,就是先利用 pvmove 先確定該physical volume不再有資料.然後再使用 vgreduce 將該 physical volume 從 volume group 中移掉.
2.如果不幸,硬碟不能動的話,那就只能先替換上同型號的硬碟或更大的硬碟,並使用 vgcfgrestore 強制把設定資料寫到新的 physical volume 上,以回復正常,當然,這麼做是會掉資料的.
我,因為小Q一號已經無法動彈了,也就是說我只能用第二種方法了.
# vgcfgrestore -f /etc/lvmconf/vgtest.conf -i -d -v -n vg0 /dev/hdd1
-f 是指定 volume group 的設定檔檔名
-i 是忽略大小
-d 是 debug
-v 是 verbose
-n 是指明 volume group 的名稱
/dev/hdd1 則是表明新的 physical volume 名稱
就這樣,我終於救回了我的資料.
只是還不知道有哪些資料因此損失了~~
🙁
註:
physical volume: 通常指的是一個 partition, partition type 指定為 0x8e, 以 pvcreate 建立之.
volume group: 以一個或多個 physical volume 所組成的 group.
logical volume: 向 volume group 索取而取得的空間,你可以對此空間作格式化動作.若空間不足或過大,你也可以作動態增減.

O-Notation

主要用來表示花費的時間
這在資料結構與演算法上很常見
表示法 名稱 例子
O(1) 常數 陣列索引(Array index)
O(logn) 對數 二元搜尋
O(n) 線性 字串比較
O(nlogn) nlogn 快速排序
O(n^2) 二次方 簡單的排序方法,如 bubble sort
O(n^3) 三次方 矩陣相乘(matrix multiplication)
O(2^n) 指數 集合分割(set partitioning)

Regular Expresstion速記

‘^’表示開頭
‘$’表示結尾
“^$” 比對空字串
‘.’ 僅代表一個任意字元
[0-9]表示 0~9 中的任一字元
‘|’ 表示 2 選 1
‘+’ 表示一次或多次
‘*’ 表示0次或多次
‘?’ 表示0次或1次
grep ‘.’ *.c | wc 計算非空白行數

MSDE安裝

MSDE2000安裝變得十分機車
因此將方法特地紀錄如下
請用指令列輸入
setup sapwd=”your_password” disablenetworkprotocols=0 instancename=”your_instance_name” securitymode=sql
sapwd 指定的是密碼,這是一定要指定的
disablenetworkprotocols 表示是否要對外開放 port, 預設好像是 1 的樣子,表示不對外開放,所以外面也連不進來
instancename 這個則是 instance name, 具名管道會用到,你可以給,也可以不給.
securitymode=sql 指定安全模式,instancename與此合用時,表示是混用模式,預設是 Windows 認證;若不加 instancename,只加此項,表示是 sql 認證模式.
就這樣子囉~~

mp4player trace 筆記

mp4player 是 mpeg4ip 內附的一個 player
RFC 1889 RTP 被 RFC 3550 淘汰(obsolete)
video 繼承 video_sdl
– 由 player_session 建立之,用以 sync video/audio
– 主要由 player_media 使用,player_session貫穿主軸,在建立video和player_media實體時,都會把自己傳入.
player_media 建立 plugin 時,會把 video_sync(m_video_sync)傳入codec_plugin中.
各個 codec_plugin 為 xxxx_file.cpp
codec_plugin 利用 check_for_video_codec() 傳回之.
plugin實作檔案最後都有一個 macro 定出 structure: mpeg4ip_codec_plugin.
如此一來,codec_plugin_cpp的 check_for_video_codec()/check_for_audio_codec() 即可利用 dlsym() 找到它,並依據此 structure 去叫用 plugin 中的 function.
rtsp_thread()
+-> get_rtp_packet()
 +-> callback_for_rtp_packet()
  +-> 呼叫設置的 callback
在 rtsp_thread 中,作完 callback 後,會呼叫 periodic(), 這也是藉由 rtsp_thread_set_rtp_callback() 去設置的.
c_rtp_periodic(), 用 rtsp_thread_set_rtp_callback()設進去.
mp4player 中,callback function (CPlayerMedia::rtp_receive_packet(),此 function 會被包在 c_rtp_packet_callback, 再被上面的 rtsp_thread_set_rtp_callback() 設進去)
判斷 interleaved 而決定呼叫 rtp_process_recv_data() 或 rtp_process_ctrol().
periodic function 則呼叫 rtp_byte_stream() 去 recv_task (在 rtp_bytestream.cpp )
上面的那個段落又會呼叫 rtp_update(), rtp_update() 收 packet, 呼叫 callback.
rtp_update()(or callback??) 會執行 timeout_rr(), 而 timeout_rr() 中會執行 rtp_init_extern_net().
指定的 callback: c_recv_callback() => player_media->recv_callback() => stream->recv_callback() 放在 queue 中.
systems.h
– include necessary headers and redefine data types.
sdp.h
– session description protocol
rtsp_private.h
– the major rtsp interface
sdl.h
-> needed, for thread-control (create, mutex…and so on)
rtsp_create_client_for_rtp_tcp()
– create mutex
– create thread, 同時亦建立 unix socket, 之後的 function 會透過此 socket 與 thread 溝通, thread 主體在 rtsp_thread.c (rtsp_thread())中.
圖片及相關檔案:

Continue reading “mp4player trace 筆記”

php 的影像處理

1.
imagecopyresampled() 確實有效!!!!
but 被 Resize 的那個 image 要用 imagecreatetruecolor() 來建立影像
否則顏色會出不來!!變成灰灰的~
2.
更新為 gd2.0 以後
確實,要把 php recompile 才行~ >_<

GNU Linux 上一些有趣名稱

GNU is Not Unix.
Wine Is Not Emulator.
現在一時想不起來那麼多
以後有想到再貼上來~
另外這是我想出來的~~挺有趣~~
VFP is Fucking Powerful.
VFP is Fucking Professional.
不過 Fucking 在美國俚語裡是”非常”的意思,而不是 XXX 的意思喔~
如果你有想到更好的,麻煩不要客氣,貼上來大家分享一下

8051 概論

CPU - RAM 128 bytes
Flash 4k
Processor 20Mhz
Interrupt 2
Timer 2
I/O 16 bit
記憶體概圖
+------------+
|Jump begin  |
+------------+
|Jump Timer 0|
+------------+
|Int 0(UART) |
+------------+
|Jump Timer 1|
+------------+
|....        |
|....        |
+------------+
Notice:每顆 51 不一定都一樣
事件發生時, Interrupt 或 Timer 會去向量找到相關的位址,然後 jump 過去.
程式 always 執行中,不會停.
通常 begin 都只有作 initialize.
當 timer 要觸發或被 interrupt 了,才作事.