我真是想不到可以這樣吃西瓜…
下次也來試試看.
從以前同事那兒看來的:伏特加西瓜
節錄方法如下:
1. 準備西瓜及伏特加
2. 在西瓜上面開個洞,洞的大小自己衡量,大一點,滲透的比較快.
3. 灌入Vodka, 等候24~48小時後即可.
無米樂
無米樂,這是前一陣子在 blog 圈子裡面很火紅的一個話題.今天看到木材兄在台南推片的經歷:
記《無米樂》台南推片經驗(一)
記《無米樂》台南推片經驗(二)
真是心酸地令人掉淚啊~~
結果,把這個 blog 收錄到 bloglines…
雪山隧道
今天看了一本去年的雜誌,才知道雪山隧道的故事…
這條隧道其實是蠻悲壯的被挖出來的.
挖了十三年,除了難挖,還是難挖,挖的久,還被監察院彈劾,有貪污之嫌…
這一段引用自土木水利半月刊-66集:雪山隧道導坑西段開挖貫通 ─ 鄭文隆的堅持‧證明正確
工程師的可悲處
北宜高速路的工程,讓國工局20餘人被告,鄭局長指出有承商告國工局「刁難」,但檢調單位起訴書是「圖利」承商,可謂「莫名其妙」;又有承商指控國工局使用不合法棄土場,其實只因國工局堅持環保,棄土不是選擇外包給廠商就了事,當工程施工高峰期時,在北縣完全沒有合法棄土場,國工局監督選擇已經政府認可正在完成申請手續的棄土場,這樣因而被告「不合法」。調查站認為沒有合法棄土場,可以停工,不要繼續施工;所以國工局當初大可選擇停工,等有合法棄土場時再施工,或外包由廠商去處理,國工局可以不聞不問不管棄土是否倒入合法棄土場,「工程做不完不是國工局的事」,官場準則應該是多做多錯、不做不錯吧?
鄭局長指出檢調單位清查承認國工局幾位北宜施工處前、後任處長存款帳戶清白,但仍在查他們「圖利廠商」,鄭局長以肯定的態度支持這幾位處長,結果連他也一併遭調查。鄭局長心痛的說這幾位處長,李宏徹是日本東京大學博士、陳純敬是美國北卡羅來納博士、曾大仁是美國柏克萊博士,都是國工局極優秀的人才,因這個工程,卻得面對官司纏身。
「這個案子讓工程人員覺得悲壯!」鄭局長表示施工人員在前面往前衝,兢兢業業面對大自然挑戰的艱困環境,而背後卻是受到社會不明事理的挑戰,有一大堆人扯後腿、落井下石,像有兩把刀插在他們身上。
工程人員真的是痛苦點滴在心頭,國工局處長、主任、副主任、二十多人都被告,想不到認真用心的做工程,卻落到要上法院辯明沒貪污、沒有圖利包商,法院的傳訊,讓這些人以及他們的家屬情緒也瀕臨崩潰。
鄭局長指出北宜高速路的工程,經歷過許多風風雨雨,現在已是克服了地質的困難,逐步要驗收成果,但再回頭看問題,工程人員為了成就大工程,卻接收了很大噓聲,實在是可悲。
看了真是蠻憤慨的呢~~
畢竟我也是工程師,雖然是軟體的…
其他參考資料:
*土木水利半月刊66集雪山隧道開挖工程之隧道湧水現象對水資源利用之啟示
*環境資訊中心小雪的心聲-雪山隧道導坑貫通事件悲思
*國改評論雪山隧道趕進度,不可能任務
*雪山隧道
聲援「晶晶書庫」連署連線
直接到 周星星電影評論-聲援「晶晶書庫」連署連線 那兒去看吧…
我不是同性戀,不過,同性戀也是人,也有人權.
寓廣告於氣象
今早看到 CCTV 的氣象預報,才真正了解到什麼叫做寓廣告於氣象…
很可惜當時沒能帶相機,把畫面拍攝下來.
一邊在畫面右邊約 1/4 的區塊播放各地天氣(氣溫,天氣概況…等),一邊則在畫面的左邊 3/4 播放當地著名的風景區/遊樂區照片…
所以想要在這畫面出現的廠商,就得花錢買版面,這樣才能播出.這實在是令我覺得她們真的很有商業頭腦,這樣又多收了一筆廣告收入….
如何判別是否為 DRM 的 ASF 檔案?
如何判別一個 ASF 檔案是否為 DRM 的 ASF 檔案?
詳情資料可以參考微軟提供的 Specification: Advanced Systems Format (ASF) Specification
大致上很簡單,一個 ASF 檔案主要有三個部分: Header Object, Data Object, Index Object.
而每個部分又各由不同的 Object 所組成.
要分辨是否為 DRM,主要是在 Header Object 裡面找尋是否有 Content Encryption Object.
那麼要怎麼找尋呢?? OK, 每個 Object 的最前面有唯一的 GUID,你可以依據 GUID 來找到.
而這些,你都可以在 Specification 的後面幾張找到 ( 或者你可以搜尋 ASF GUIDs ).
至此,寫起來並不太困難.程式碼如下:
typedef unsigned long UINT32;
typedef unsigned short UINT16;
typedef unsigned char UINT8;
typedef int BOOL;
enum BOOLEAN
{
FALSE = 0,
TRUE
};
typedef struct GUID_s
{
UINT32 id1;
UINT16 id2;
UINT16 id3;
UINT16 id4;
UINT8 id5[6];
}GUID;
//Content Encryption Object
GUID ASF_Content_Encryption_Object_guid =
{
0x2211b3fb,
0xbd23,
0x11d2,
0xb7b4,
{
0x00, 0xa0, 0xc9, 0x55, 0xfc, 0x6e
}
};
/*
typedef struct ContentEncryptionObject_s
{
GUID objectID;
UINT32 objectSize; // objectSize should be QWORD, 8 bytes, but CCS has not this type.
UINT32 objectSize1;
UINT32 secretDataLength;
BYTE* secretData; // according secretDataLength
UINT32 protectionTypeLength;
char* protectionType;
UINT32 keyIDLength;
char* keyID;
UINT32 licenseURLLength;
char* licenseURL;
}ContentEncryptionObject_t;
*/
//extern CF_FILE* filePtrR;
typedef FILE CF_FILE;
CF_FILE* filePtrR;
long
FILEr_ftell()
{
return ftell( filePtrR );
}
int
FILEr_fseek( long filepos, int whence)
{
return fseek( filePtrR, filepos, whence );
}
long
FILEr_fread( UINT8* ptr, long length )
{
return fread( ptr, 1, length, filePtrR );
}
char* SDRAM_HOLE = NULL;
BOOL
isASFDRM( )
{
long filePos;
char* spaceForParsing = (char*)( SDRAM_HOLE + 0x800000 ); // use the space after 8 MB, prevent conflict
int GUIDLen = sizeof( GUID );
int iter, len = 0;
BOOL bFound = FALSE, bResult = FALSE;
UINT32 headerObjectSize = 0;
UINT32 secretDataLength=0;
UINT32 protectionTypeLength=0;
char* protectionType=NULL;
long readLen=0;
char* encryptionPos = NULL;
// save file position
filePos = FILEr_ftell();
// seek to the start position
FILEr_fseek( 16, 0); //SEEK_SET
FILEr_fread( (UINT8*)&headerObjectSize, 4 ); // we should read 8 here, but ….
// read all header object
// then search the specified GUID, use pattern compare
FILEr_fseek( 0, 0 ); // SEEK_SET
readLen = FILEr_fread( spaceForParsing, headerObjectSize );
len = headerObjectSize – GUIDLen;
// searching.
for( iter = 0; iter objectID
encryptionPos = spaceForParsing + iter;
// ( encryptionPos + GUIDLen ) ==> objectSize
// ( encryptionPos + GUIDLen + 8 ) ==> secretDataLength
secretDataLength = (UINT32) *( encryptionPos + GUIDLen + 8 );
// ( spaceForParsing + iter + GUIDLen + 8 + 4 ) ==> secretData
// ( spaceForParsing + iter + GUIDLen + 12 + secretDataLength ) ==> protectionTypeLength;
protectionTypeLength = (UINT32) *(encryptionPos + GUIDLen + 12 + secretDataLength );
protectionType = (char*) (encryptionPos + GUIDLen + 12 + secretDataLength + 4 );
if( strncmp( protectionType, “DRM”, 3 ) == 0 )
bResult = TRUE;
OnFinally:
// restore file position
FILEr_fseek( filePos, 0); //SEEK_SET
// return result.
return bResult;
}
int main(int argc, char* argv[])
{
SDRAM_HOLE = (char*) malloc( 0x800000 * 2 );
filePtrR = fopen( “00 Cannot Play.wma”, “rb” );
if( isASFDRM() )
printf(“is a drm file.\n”);
else
printf(“not a drm file.\n”);
fclose( filePtrR );
return 0;
}
ok, 程式裡面你會發現一些奇怪的地方,是的,因為我需要在 embedded 環境下運作,所以為了符合環境,所以做了一些調整,不過你還是可以在 Visual C++ 上來運行這段代碼.
看不順眼的,就自己調整吧…
這份 specification 其實斷斷續續看一陣子了,都沒怎麼專心看,不過昨天看的時候,突然開竅了,於是就把這麼一段代碼搞定了.
真神奇啊….
來到崑山
昨天晚上來到公司在崑山的廠區,即將在這裡呆三個星期….(希望是只有三個星期…)
剛來的第一個印象,就是…..我又收假了嗎??
感覺上跟以前在鳳山步校當兵的時候一樣,廠區大大的,也是切割成一塊一塊的~~
真的是太像了.
大致上該帶的東西都帶了,唯一的誤算是天氣,有些涼,沒想像中那麼的熱.
看來得每天洗冷水澡,增強抵抗力了.
不知所云
數週前….
小E:”啊~~整個改成這樣子以後,這邊可能會有問題….”
小E:”嗯…..怎麼辦…先記起來好了….到時候再說…”
今天…
H哥:”喔~~這邊沒辦法試播放影片!!小E,該怎麼辦??”
小E:”我知道這邊,我想一下…”
H哥:”這邊當初沒想到,這不能怪你…”
小E:”我想可以這樣子作…”
H哥:”我想也是這樣子…”
不知道為什麼….
小E:”我早就知道了…”
H哥:(驚愕貌…)”你早就知道了?!”
小E:”我的意思是…”
(一陣混亂….)
事後…
小E, 你在講什麼啊?!
就裝傻說不知道就好啦…
跳槽到 CentOS 3.4
Upgrade to MediaWiki 1.4.4
鬼混了很久,終於把家裡的 wiki 升級到 1.4.4 了.
升級方法還挺簡單的.
1. 備份你的 LocalSettings.php / AdminSettings.php
2. 把下載來的 MediaWiki 1.4.4 tarball 解壓以後整個蓋過去.
3. 切到 maintenance 目錄下, 執行 php update.php
4. 收工.
真的很簡單吧….
下個目標是把 VFP Wiki 升級到 1.4.4 …