1. | Fuck to fry the cow river | 干燒牛河 | Braised beef and flat noodles |
2. | Top soup cloud swallows | 上湯雲吞 | Wonton in soup |
3. | Black winter in type seafood soup in day | 日式海鮮湯烏冬 | Japanese Udon with Seafood soup |
4. | Western fashion fried rice | 西式炒飯 | Fried rice (Western Style). |
5. | The pig picks the noodle soup | 豬扒湯麵 (註: 扒手 =pick pocket) | Pork Chop & Noodles in soup |
6. | The black cow silk fries the idea powder | 黑椒牛柳絲炒意粉 | Scrambled beef fillet and Pasta with black pepper |
7. | Three silk soup idea powder | 三絲湯意粉 | Meat, Black fungus, Carrots & Pasta (Spaghetti) in soup |
8. | The cold cow in west in special grade picks | 特級西冷牛扒 | Superfine Portioned Striploin Steaks. |
9. | Pearl eight claw fish | 珍珠八爪魚 | Maize and bamboo shoot and octopus |
10. | The water is as well | 滷水掌亦 | Brined duck foot |
11. | The week beats the fish soup | 周打魚湯 | Fish Chowder |
12. | Elder brother the ground is second coffee | 哥倫地亞咖啡 | Columbia Coffee |
13. | The chicken hates the soup of | 雞茸忌廉湯 | Chinken and Cream Cheese soup |
14. | Follow butter meal pack | 跟牛油餐包 | Butter Dinner Rolls |
15. | Swallow to take the fish sand | 吞拿魚沙律 | Tuna Salad |
16. | Butter many privates | 牛油多士 | Toast w/Butter |
17. | Company three texts cure | 扒芝士火腿三文治 | Cheese and Ham Sandwiches |
18. | Living to fry the beef rice | 生炒牛肉飯 | Fried beef and rices |
19. | Nepoleon fries the idea powder | 拿破倫炒意粉 | Spaghetti Neapolitan |
20. | Day type many spring fish | 日式多春魚 | Japanese Karafuto-shishamo, Capelin |
本來這個blog是記錄開發輸入法的點滴的,後來越來越雜,現在什麼都記錄了。
2007年12月28日 星期五
好笑的翻譯:
好笑的翻譯:
2007年12月23日 星期日
冬至究竟什麼?
今天食了一頓很豐富的冬至飯。之後在思考,究竟有多少人了解什麼是冬至呢?
如果要我向人解釋,我應該怎樣解釋呢?
要解釋冬至,單憑寫篇文章,甚至加插圖,都是很難令人明白。一定是要用動畫。
另外,要解釋冬至,必須先解釋四季的成因。要解釋四季的成因,就必須要有地球軌跡的圖。
但怎樣顯示一個在同時自轉 又同時圍繞太陽公轉的地球呢? 於是就從網上找,找到了這個網站:
http://parentnode.org/flash/flash-3d-earth-including-fla/
但都不合用,我只用了他裡面的圖,動手自己做一個自轉的地球(加了點 Action Script)
材料夠了,就動手寫了以下這個「四季」的小movie clip, 告訴大家 四季的來由。希望大家喜歡喇。
如果要我向人解釋,我應該怎樣解釋呢?
要解釋冬至,單憑寫篇文章,甚至加插圖,都是很難令人明白。一定是要用動畫。
另外,要解釋冬至,必須先解釋四季的成因。要解釋四季的成因,就必須要有地球軌跡的圖。
但怎樣顯示一個在同時自轉 又同時圍繞太陽公轉的地球呢? 於是就從網上找,找到了這個網站:
http://parentnode.org/flash/flash-3d-earth-including-fla/
但都不合用,我只用了他裡面的圖,動手自己做一個自轉的地球(加了點 Action Script)
材料夠了,就動手寫了以下這個「四季」的小movie clip, 告訴大家 四季的來由。希望大家喜歡喇。
2007年12月14日 星期五
數碼電視廣播的原因!
最近在思考為什麼香港政府(乃至全世界政府)要推行地面數字電視廣播。
大家有一個錯覺,推行數字電視廣播的主要原因,是為了高清,多聲道等更高的視覺和聽覺享受,其實這些只是數字電視帶來的副產品。我個人認為背後的原因都是為了$。
目前的模擬多頻道廣播,其實是很浪費頻譜的,就以翡翠台為例,各發射站播放翡翠台的頻率如下:
(資料來源電訊管理局:http://www.ofta.gov.hk/zh/freq-spec/tvbnet.pdf)
從表中可以看到,為了播放一個翡翠台,浪費了13個電視頻道。大家不禁要問,為甚麼不全香港播放翡翠台都用同一個頻道呢?答案:
假設你住的地方在慈雲山與飛鵝山中間的地帶,而兩發射站都用同一頻率發射翡翠台,由於訊號由發射站到你的電視天線時間不同,就會發生「鬼影」現象。所以不同發射站要不同頻率,而你因應你住的地方,選擇某個發射站的訊號。
新的數字電視頻率如下:(http://www.ofta.gov.hk/zh/report-paper-guide/guidance-notes/gn_200705_tc_.pdf)
舉例:從表中看到,無線翡翠台的數碼廣播頻道,全港九都是一樣的,只有一個頻率。那為什麼又不會有「鬼影」的問題呢?
因為數字電視接收器,其中一個最重要的部分,就是消除主要訊號外的「鬼影」。這些「鬼影」可能是由於是其他山頭的訊號反射或來自其他發射站發出的訊號。
這些數字電視技術,都是近10-20年發展出來的。美國最先使用數字電視廣播
ATSC ,歐洲地方用的 DVB-T,日本用 ISDB-T。本來香港是採用
DVB-T 的,但原來每買一架這些歐洲制式的電視接收機,就要附很多專利費用給歐洲公司。每年這樣被敲詐數以百億元專利費,真是令人心有不甘。
後來中國政府自己開發了一套 DMB-TH 制式,而且規定2007年強制執行。香港於是也決定也採用DMB-TH,避免了歐洲的大量專利費(雖然仍有一部分用於
視頻音頻編碼 MPEG2, H.264上),而且幫助中國推行自主研發的技術,這個決定可謂維護了民族尊嚴和利益。
話說回頭,為什麼推行數碼廣播是為了 $ 呢?
原來數碼廣播一旦推行,而模擬廣播逐漸結束,很多頻譜便閒置了。這些頻譜可以用作很多很多其他用途,例如手提電話,無線寬頻上網、移動電視、3G等東西。一個頻譜可以賣得過千億元的,最令人津津樂道的莫過於李嘉誠千億賣橙。
所有政府和福利機構,對這些收入都虎視眈眈的。 這就是政府推行數字電視廣播最深層的原因!
大家有一個錯覺,推行數字電視廣播的主要原因,是為了高清,多聲道等更高的視覺和聽覺享受,其實這些只是數字電視帶來的副產品。我個人認為背後的原因都是為了$。
目前的模擬多頻道廣播,其實是很浪費頻譜的,就以翡翠台為例,各發射站播放翡翠台的頻率如下:
(資料來源電訊管理局:http://www.ofta.gov.hk/zh/freq-spec/tvbnet.pdf)
電視 | 電視 頻道 | 視頻 (MHz) | 聲頻 (MHz) | 有效 輻射功率 (W) | 極化 | 偏置 |
慈雲山 | 21 | 471.25 | 477.25 | 10,000 | H | 0flNP |
青山 | 34 | 575.25 | 581.25 | 1,000 | H | +5/3flNP |
飛鵝山 | 34 | 575.25 | 581.25 | 1,000 | H | -5/3flNP |
金山 | 33 | 567.25 | 573.25 | 1,000 | H | 0flNP |
九龍坑山 | 49 | 695.25 | 701.25 | 1,000 | H | 0flNP |
南丫島 | 49 | 695.25 | 701.25 | 1,500 | V | -5/3flNP |
赤柱 | 34 | 575.25 | 581.25 | 100 | H | 0flNP |
南朗山 | 33 | 567.25 | 573.25 | 100 | H | +5/3flNP |
砵甸乍山 | 33 | 567.25 | 573.25 | 100 | H | +5/3flNP |
柴灣 | 48 | 687.25 | 693.25 | 100 | H | +5/3flNP |
聶高信山 | 48 | 687.25 | 693.25 | 100 | V | -5/3flNP |
琵琶山 | 49 | 695.25 | 701.25 | 100 | H | +5/3flNP |
照鏡環山 | 49 | 695.25 | 701.25 | 0.5 | H | 0flNP |
從表中可以看到,為了播放一個翡翠台,浪費了13個電視頻道。大家不禁要問,為甚麼不全香港播放翡翠台都用同一個頻道呢?答案:
假設你住的地方在慈雲山與飛鵝山中間的地帶,而兩發射站都用同一頻率發射翡翠台,由於訊號由發射站到你的電視天線時間不同,就會發生「鬼影」現象。所以不同發射站要不同頻率,而你因應你住的地方,選擇某個發射站的訊號。
新的數字電視頻率如下:(http://www.ofta.gov.hk/zh/report-paper-guide/guidance-notes/gn_200705_tc_.pdf)
頻道名稱 | 電視頻道 | 頻道(MHz) 注意:未確定 筆者自己作的 | 電視發射站 地點 |
亞視本港台 | 11 | 119.25 | 慈雲山 2007年 |
亞視新聞財經頻道 | 12 | 126.25 | |
亞視動感資訊頻道 | 13 | 133.25 | |
亞視魅力資訊頻道 | 14 | 140.25 | |
亞視文化資訊頻道 | 15 | 147.25 | |
亞視國際台 | 16 | 154.25 | |
aTV高清頻道 | 19 | 175.25 | |
無線資訊頻道 | 80 | 647.25 | |
無線翡翠台 | 81 | 655.25 | |
無線翡翠2台 | 82 | 663.25 | |
無線明珠台 | 83 | 671.25 | |
無線高清翡翠台 | 88 | 711.25 |
舉例:從表中看到,無線翡翠台的數碼廣播頻道,全港九都是一樣的,只有一個頻率。那為什麼又不會有「鬼影」的問題呢?
因為數字電視接收器,其中一個最重要的部分,就是消除主要訊號外的「鬼影」。這些「鬼影」可能是由於是其他山頭的訊號反射或來自其他發射站發出的訊號。
這些數字電視技術,都是近10-20年發展出來的。美國最先使用數字電視廣播
ATSC ,歐洲地方用的 DVB-T,日本用 ISDB-T。本來香港是採用
DVB-T 的,但原來每買一架這些歐洲制式的電視接收機,就要附很多專利費用給歐洲公司。每年這樣被敲詐數以百億元專利費,真是令人心有不甘。
後來中國政府自己開發了一套 DMB-TH 制式,而且規定2007年強制執行。香港於是也決定也採用DMB-TH,避免了歐洲的大量專利費(雖然仍有一部分用於
視頻音頻編碼 MPEG2, H.264上),而且幫助中國推行自主研發的技術,這個決定可謂維護了民族尊嚴和利益。
話說回頭,為什麼推行數碼廣播是為了 $ 呢?
原來數碼廣播一旦推行,而模擬廣播逐漸結束,很多頻譜便閒置了。這些頻譜可以用作很多很多其他用途,例如手提電話,無線寬頻上網、移動電視、3G等東西。一個頻譜可以賣得過千億元的,最令人津津樂道的莫過於李嘉誠千億賣橙。
所有政府和福利機構,對這些收入都虎視眈眈的。 這就是政府推行數字電視廣播最深層的原因!
2007年12月11日 星期二
擷取 音樂的方法
最近我被要求擷取某網站的背景音樂,該網站十分狡猾,如果你用 Windows Media Player 去開啟以下的link: http://m2.colorme.com.cn/ftp/l/l/h/8/llh8/music/1168884738897.wma 《滇聆》雪境,可以收聽的,但用其他方法下載該音樂,它卻回應一些無關痛癢的網頁。結果我要寫下面的程式,去扮「我是音樂播放器」才能下載 :
編譯: gcc -l curl -o test test.c
用法: ./test http://m2.colorme.com.cn/ftp/l/l/h/8/llh8/music/1168884738897.wma > /tmp/1.wma
程式碼如下
#include
#include
#include
#include
#include
#include
#define ICY_METAINT "icy-metaint:"
static int metaint, metacnt, metalen_left;
static int load_from_net_so_far;
// If it is 8192, you always get 8192 bytes of real data, followed by the metadata.
// The meta data format is mlength (1 byte), followed by string (variable length).
// The length of the string is the mlength multiplied by 16.
// So when there is no metadata, you'll get a single byte (mlength=0).
static int
head_write_callback(void *buffer, size_t size, size_t nmemb, void *stream) {
int size_to_write=size*nmemb;
char *p;
fwrite(buffer, size, nmemb, stderr);
if ((p=strstr(buffer, ICY_METAINT))!=NULL) {
metaint=atoi(p+strlen(ICY_METAINT));
}
return size_to_write;
}
static int
play_audio(char *buffer, size_t size, size_t nmemb, void *stream) {
fwrite(buffer, size, nmemb, stdout);
load_from_net_so_far+=size*nmemb;
fprintf(stderr, "\b\b\b\b\b\b\b\b\b\b%010d", load_from_net_so_far);
return size*nmemb;
}
int
main(int argc, char **argv) {
CURL *curl=NULL;
CURLcode ret;
struct curl_slist *headerlist = NULL;
struct curl_slist *aliases = NULL; // Yick_2003_12_29
char *url;
if (argc!=2) {
fprintf(stderr, "%s url\n", argv[0]);
fprintf(stderr, "where url can be a playlist or mp3 url\n");
fprintf(stderr, "the song will appear at stdout\n");
fprintf(stderr, "%s \"http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn=911919&file=filename.pls\" &\n", argv[0]);
fprintf(stderr, "%s \"http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn=1704&file=filename.pls\" &\n", argv[0]);
fprintf(stderr, "%s \"http://m2.colorme.com.cn/ftp/l/l/h/8/llh8/music/1168884738897.wma\" 1> /tmp/1.wma \n", argv[0]);
return -1;
}
url=argv[1];
metaint=8192;
metacnt=0;
metalen_left=0;
load_from_net_so_far=0;
curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, "Pragma: stream-switch-entry=ffff:1:0");
headerlist = curl_slist_append(headerlist, "Pragma: stream-switch-count=1");
headerlist = curl_slist_append(headerlist, "Pragma: xClientGUID={71F1B2A2-87F5-11D5-A064-0050DA8DAD15}");
headerlist = curl_slist_append(headerlist, "Pragma: xPlayStrm=1");
headerlist = curl_slist_append(headerlist, "Pragma: no-cache,rate=1.000000,request-context=2");
headerlist = curl_slist_append(headerlist, "Icy-MetaData: 1");
headerlist = curl_slist_append(headerlist, "Accept: */*");
headerlist = curl_slist_append(headerlist, "Accept-Encoding: deflate");
headerlist = curl_slist_append(headerlist, "Connection: keep-alive");
headerlist = curl_slist_append(headerlist, "TE: trailers,deflate");
aliases = curl_slist_append(aliases, "ICY 200 OK" );
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "NSPlayer/4.1.0");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_HTTP200ALIASES, aliases);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, play_audio);
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, head_write_callback);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);
ret=curl_easy_perform(curl);
if (load_from_net_so_far) {
fprintf(stderr, "audio ended\n");
goto SRC_SHOUTCAST_THREAD_FN_LBL;
} else {
fprintf(stderr, "Error in opening url %s\n", url);
}
curl_easy_cleanup(curl);
curl=NULL;
}
SRC_SHOUTCAST_THREAD_FN_LBL:
if (curl)
curl_easy_cleanup(curl);
return NULL;
}
編譯: gcc -l curl -o test test.c
用法: ./test http://m2.colorme.com.cn/ftp/l/l/h/8/llh8/music/1168884738897.wma > /tmp/1.wma
程式碼如下
#include
#include
#include
#include
#include
#include
#define ICY_METAINT "icy-metaint:"
static int metaint, metacnt, metalen_left;
static int load_from_net_so_far;
// If it is 8192, you always get 8192 bytes of real data, followed by the metadata.
// The meta data format is mlength (1 byte), followed by string (variable length).
// The length of the string is the mlength multiplied by 16.
// So when there is no metadata, you'll get a single byte (mlength=0).
static int
head_write_callback(void *buffer, size_t size, size_t nmemb, void *stream) {
int size_to_write=size*nmemb;
char *p;
fwrite(buffer, size, nmemb, stderr);
if ((p=strstr(buffer, ICY_METAINT))!=NULL) {
metaint=atoi(p+strlen(ICY_METAINT));
}
return size_to_write;
}
static int
play_audio(char *buffer, size_t size, size_t nmemb, void *stream) {
fwrite(buffer, size, nmemb, stdout);
load_from_net_so_far+=size*nmemb;
fprintf(stderr, "\b\b\b\b\b\b\b\b\b\b%010d", load_from_net_so_far);
return size*nmemb;
}
int
main(int argc, char **argv) {
CURL *curl=NULL;
CURLcode ret;
struct curl_slist *headerlist = NULL;
struct curl_slist *aliases = NULL; // Yick_2003_12_29
char *url;
if (argc!=2) {
fprintf(stderr, "%s url\n", argv[0]);
fprintf(stderr, "where url can be a playlist or mp3 url\n");
fprintf(stderr, "the song will appear at stdout\n");
fprintf(stderr, "%s \"http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn=911919&file=filename.pls\" &\n", argv[0]);
fprintf(stderr, "%s \"http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn=1704&file=filename.pls\" &\n", argv[0]);
fprintf(stderr, "%s \"http://m2.colorme.com.cn/ftp/l/l/h/8/llh8/music/1168884738897.wma\" 1> /tmp/1.wma \n", argv[0]);
return -1;
}
url=argv[1];
metaint=8192;
metacnt=0;
metalen_left=0;
load_from_net_so_far=0;
curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, "Pragma: stream-switch-entry=ffff:1:0");
headerlist = curl_slist_append(headerlist, "Pragma: stream-switch-count=1");
headerlist = curl_slist_append(headerlist, "Pragma: xClientGUID={71F1B2A2-87F5-11D5-A064-0050DA8DAD15}");
headerlist = curl_slist_append(headerlist, "Pragma: xPlayStrm=1");
headerlist = curl_slist_append(headerlist, "Pragma: no-cache,rate=1.000000,request-context=2");
headerlist = curl_slist_append(headerlist, "Icy-MetaData: 1");
headerlist = curl_slist_append(headerlist, "Accept: */*");
headerlist = curl_slist_append(headerlist, "Accept-Encoding: deflate");
headerlist = curl_slist_append(headerlist, "Connection: keep-alive");
headerlist = curl_slist_append(headerlist, "TE: trailers,deflate");
aliases = curl_slist_append(aliases, "ICY 200 OK" );
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "NSPlayer/4.1.0");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_HTTP200ALIASES, aliases);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, play_audio);
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, head_write_callback);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);
ret=curl_easy_perform(curl);
if (load_from_net_so_far) {
fprintf(stderr, "audio ended\n");
goto SRC_SHOUTCAST_THREAD_FN_LBL;
} else {
fprintf(stderr, "Error in opening url %s\n", url);
}
curl_easy_cleanup(curl);
curl=NULL;
}
SRC_SHOUTCAST_THREAD_FN_LBL:
if (curl)
curl_easy_cleanup(curl);
return NULL;
}
訂閱:
文章 (Atom)