Fold All / Expand All

2007年10月31日 星期三

栗林みな実&美郷あき台北LIVE

這次改用Lantis的標題。

栗林みなみ&美郷あき|台北ライブ決定!!
10月29日

除了日期、地點之外,其餘消息仍舊沒有。

美郷あき在Blog上也提到了這則消息,美郷首次的海外Live。
10月29日

Lantis網站上另一則消息,JAM Project 2008年活動,其中提到了2008年將在日本舉行5場Live,另外還有「WORLD FLIGHT 2008」,將於美國、墨西哥、巴西、中國、韓國、香港等地舉行海外演唱會!

會不會有台灣啊!?

2007年10月29日 星期一

[舊文重貼] 光榮之後

原文著於2002年10月7日,2003年1月1日經過稍微修改。

其實這是大一國文的作業啦。

字數統計:Word 2007說2241字(含標題),MadEdit說2197字(含標題)。

這篇最神奇的地方在於人名都是用中文……看到"吉伯利"我笑了,為什麼當初會選這個譯名呢…
==
  1999年是聖安東尼奧馬刺隊光榮的一年。在這一年,他們拿下了NBA的冠軍,這是多少選手夢寐以求的目標,而馬刺隊從ABA轉戰NBA不到二十年的光陰就達成這個目標,令人既羨慕又嫉妒。但是在之後的三年,馬刺隊卻都無法打進總冠軍戰,到底馬刺是怎麼了呢?
  回到1999年的季後賽,馬刺第一輪的對手是明尼蘇達灰狼。灰狼隊是以年輕的大前鋒-賈奈特為首的隊伍,此輪比賽最後以三比一結束,馬刺順利晉級,第二輪的對手則是洛杉磯湖人。湖人隊當時的人員陣容和這三年的冠軍陣容差異不大,最大的不同只在總教練,當時的總教練藍比斯只是剛從助理教練升上來的年輕小伙子,執教功力尚淺,而當時湖人隊的防守,在聯盟中也不算頂尖,又加上布萊恩的球技也還相當青澀,馬刺在這一輪以四比零將湖人掃地出門。在西區冠軍戰中,馬刺的對手是波特蘭拓荒者,拓荒者的教練-鄧里維是當年的最佳總教練獎得主,而這支球隊以大量的前鋒群著名,加上後衛線上還有重型得分後衛-萊德,這一年的拓荒者是相當棘手的,然而,一切卻在艾略特的一記三分球下,變得輕鬆許多,艾略特在比賽時間終了前,從底線以腳尖起跳出手,投進了逆轉的三分球,之後的比賽,拓荒者士氣全無,最終馬刺再度以四比零完封對手。終於到了總冠軍戰,馬刺此輪的對手是以東區第八種子的身分,締造前所未有的「老八傳奇」的紐約尼克,尼克在第一輪靠著休士頓在第五戰的一記高難度出手,將東區第一種子邁阿密熱火擊敗,之後輕取亞特蘭大老鷹。面對印地安那溜馬時,又出現神奇的四分球,以不可思議的過程晉級到總冠軍戰。說實話,尼克隊能夠晉級到總冠軍戰,運氣是佔了很大的成分,又加上從喬丹退休後,西強東弱的現象目趨明顯,幾乎所有的輿論皆認為馬刺終將獲勝,問題在於尼克到底能撐「幾」場而已。結果不出所料,馬刺以四比一拿下總冠軍,馬刺主將-當肯則獲得總冠軍戰最有價值球員,馬刺光榮的一年就這樣畫下完美的句點。
  1999~2000球季出現了重大的變動,前公牛隊教練-菲爾傑克森重出江湖,擔任湖人隊的教練,將湖人隊的戰績帶到全聯盟第一的位置。另一方面,拓荒者則是做出多筆令人吃驚的交易,包括以六換一,換來公牛王朝時喬丹的第一副手-皮朋,還有用萊德、吉姆傑克森,換來史帝夫史密斯,這兩隊就是當年西區冠軍戰的組合,那馬刺隊呢?在這一年的季後賽,當肯因為受傷,無法上場,艾略特也在本季因腎病宣佈退休,全隊僅靠大衛羅賓森一人獨撐。正因為如此,馬刺在第一輪就遭到全能後衛-基德所率領的鳳凰城太陽擊敗,提前放暑假。一年後,馬刺重整旗鼓,在2000~2001球季的戰績為全聯盟第一,而這次的季後賽,當肯可是完好無傷,在第一輪輕取灰狼,第二輪的對手達拉斯小牛也是輕鬆過關,但是本季馬刺隊上的主力得分後衛-德瑞克安德森,在對小牛的比賽時,遭到惡意犯規,導致嚴重受傷,以致於無法在之後的比賽上場。在少了一名主要得分手的情形下,馬刺面對湖人隊時,被毫不留情地四比零結束此輪,而湖人則在總冠軍戰順利封王。到了2001~2002球季,當肯更是火力全開,在得分、籃板、命中率、阻攻榜上都是名列前茅,在年度最有價值球員的獎項上,更擊敗勁敵基德,獲得此項殊榮,然而季後賽之路卻沒這麼順利。首先,第一輪面對西雅圖超音速時,另一名主將大衛羅賓森舊傷復發,無法上場,因此打起來非常辛苦,更不幸地,在第四戰之前,傳出當肯父親過世的消息,少了奔喪去的當肯,馬刺只能期待第五戰,當肯在第五戰時回到場上,幫助球隊擊敗超音速,晉級第二輪,但是一個很大的隱憂已經逐漸浮現,沒有當肯,馬刺無法贏球。第二輪的對手,就是去年的冠軍湖人隊,在大衛羅賓森仍然無法上場的情況下,當肯一人挑起攻守兩邊的責任,結果是第四節時,連連被湖人逆轉,最後以四比一的比數,讓湖人晉級。
  一支冠軍球隊,連續三年無法打進總冠軍戰,甚至出現被四比零掃地出門的比數,究竟馬刺的問題出在哪裏?從外在因素來看,西區在這幾年出現隊伍的興衰。如湖人的總教練換成菲爾傑克森之後,就連續三年拿下冠軍;國王在補進畢比之後,實力大增;小牛在老闆不惜成本簽球員下,帶給各隊的威脅越來越大。在這其中,以湖人的威脅性最大,在經過菲爾傑克森的調教之後,歐尼爾和布萊恩都有十足的長進,目前的湖人不論是在進攻或防守都有相當好的能力,那馬刺到底有沒有機會擊敗湖人呢?從內在因素來看,馬刺當年冠軍陣容的主要成員中,艾略特、艾弗瑞強森、艾利都已不在隊中,而主將之一的大衛羅賓森,除了年齡問題外,還有舊傷,而在得分後衛這個位置上,馬刺始終有些遺憾,德瑞克安德森是遭到惡意犯規而無法再打,史帝夫史密斯則是在季後賽時被守死。另外在內線替補方面,也是馬刺相當大的隱憂。
  其實馬刺最大的問題在於第二得分點,現在的當肯已經成為全聯盟最難防守的球員之一,但是當肯的體力也是有限,在當肯下場休息,或是被重兵防守時,誰來當另一個得分點呢?大衛羅賓森顯然已無法勝任,他本人已宣佈2002~2003球季將是他最後一季,那馬刺陣中還有誰能扛下這個責任呢?目前有幾位人選,帕克:面對培頓時毫無懼色,新人球季就表現出過人的膽識,切入已有不錯的水準,只要再加強中長距離即可;吉伯利:世界籃球錦標賽裡,代表阿根廷隊,有非常出色的表現,只要能夠適應美國球風,想必能對馬刺有莫大的幫助。事實上,馬刺在這個暑假已經做出多筆不錯的交易,包括從七六人交易來克萊斯頓、簽下中鋒威利斯、巴特爾,從陣容上來看,新的一季將會是相當不錯,只要再加上一點運氣,大衛羅賓森很有機會在退休前,再添一枚戒指!

2007年10月25日 星期四

アリス九號.「暁/幾億のシャンデリア」


原來之前就有聽過a9了。

這首是tie-up動畫「吟遊黙示録マイネリーベwieder」,也是目前為止a9唯一的動畫tie-up曲。

官網有日英韓中四國語言版,嗯…中當然是簡中。

然後曲名有翻譯!

「天亮/几亿的吊灯」

……也不能說翻錯啦,可是這感覺真是……

アリス九號.オフィシャルサイト

alice nine.

[歌詞] アリス九號. - FANTASY

『FANTASY』

歌手:アリス九號.
作詞:将
作曲:アリス九號.


獅子座は また 瞬いて この地に涙を与えた

あの日から この背中は 片翼を失くしたまま
夜が明け 星々からの記憶は 薄れてゆく

此の空も 此の唄も 何故だろう?
色を亡くし 音を亡くし リアルじゃない
君の夢は 僕を包み 星になって 鳴り続けている

星空は また瞬いて この地は涙を讃えて
駆けた時は 光を放ち 君のいない この世界は「幻想」

君の せいだよ 胸が痛むのは

破片は 今も剌さって

この花も、あの鳥も、風も、月も、時を止めて

目を閉じて 真似をしても 虚しくて
灰になった 君はとても 小さかった
解らないよ この世界は 狂っていただろう? 安らかに あぁ

星空は また瞬いて この地は 涙を讃えて
駆けた 時は光を放ち 君のいない この世界は「幻想」

どれだけ 経つだろう、星が 流れてから…
そして ここで、掻き鳴らすだろう 君のくれた この想いは「永遠」

あの日 から この背中は 片翼を 失くしたまま

==
因為主唱聲音像hyde?(有像嗎)

alice nine.

栗林みな実、美郷あき 台湾ライブ

「聖夜歌姬」2007聖誕演唱會 栗林みな実&美鄉あき!!

這回是fancy frontier主辦,應該是不會發生像榊原ゆい那次的問題。售票方式如果可以照上次,採取年代售票的話,也是好事一件啊…徹夜排隊實在是很傷。

不過一次還是傷當玄妙,首先是日期是在2007年12月23日(週日),就在Christmas之前耶,這是有要特別打什麼嗎??再來是地點在台北市政府親子劇場,所以栗林會穿保守一點嗎(逃~~),交通基本上沒有任何問題,因為就在市政府樓上,容納人數照網頁上寫的是920人,其實這個人數還蠻合理的(?),之前的場次,福山那次是600人、KOTOKO是1000人、影山和遠藤的沒查到。

再來是個有趣的問題,栗林和美郷來台,你希望他們演唱哪些歌曲呢?

FF網站上列出,栗林{君が望む永遠、クロノクルセイド、舞-HiME、舞-乙HiME}、美郷{舞-HiME、ストロベリー・パニック、げんしけん2}

考古………
福山芳樹:主力當然是マクロス7,應該在台灣會認識福山的超過九成都是因為Fire Bomber,就我所知,不少福山的歌迷是有在玩band的,因此除了Fire Bomber之外,也會去接觸HUMMING BIRD。而在tie-up的部分,除了マクロス7之外,大概就只有「キングゲイナー・オーバー!」比較有知名度,當然「真赤な誓い」是之後的事了(首次Live表演在台灣)。
影山ヒロノブ:曲目之多,很難列清楚,其中以「CHA-LA HEAD-CHA-LA」的知名度,即使沒在聽anison的人都知道。
遠藤正明:代表曲「勇者王誕生!」,相較起來,如果把"鋼鉄兄弟"和"JAM Project"的曲目扣掉的話,似乎比較沒有高知名度曲目(?)。
KOTOKO:雖然曲目也是多到爆表,但是如果沒有2002年「おねがい☆ティーチャー」開始進入TV Anime市場的話,我覺得KOTOKO的知名度會局限很多,無論Face of Fact有多好聽。{おねがい☆ティーチャー、神無月の巫女、灼眼のシャナ}。

那我們回來看栗林和美郷。君望和舞HiME是有一定知名度,不過對非重度使用者的吸引力?摩登大法師雖然我很喜歡TV size的版本,而且台灣電視台也有播過,不過?至於潛水艇那個就別提了,你看那鈴木達央(逃~~);MUV-LUV?等有TVA再說吧;喔…說到TVA,那School Days如何,不過台灣還沒播過就是(謎:能播嗎…)。

好像都是負面思考耶,不過還蠻期待栗林能來,聽現場版的「星空のワルツ」。

因為看了Animelo Summer Live 2006而擔心栗林現場功力的話,我想在經過「栗林みな実 1st Tour 2007 fantastic arrow」的經驗之後,應該是有所進步啦。

美郷あきキング目前是打歌期,「げんちょけん おたくならぢを」和「web喫茶よずりの」兩個ラジオ番組都有上,yozurino嘛…電鈴又是按了很多次XDD,げんしけん那個還沒聽。

說實話,希望美郷あき唱哪一首呢……最熟的可能是「君が空だった」。(謎:現在開始複習Sincerely和feel it還來得及)

栗林みな実オフィシャルサイト
美郷あき Personal Web Site
兩位都有在寫blog,最近的共同消息是奥井雅美的Live。

後記:要寫「美鄉」會比較容易被搜尋到…

2007年10月24日 星期三

[歌詞] BUMP OF CHICKEN - 花の名

狂賀BOC拿下oricon單曲首日一二位!
==
『花の名』

歌手:BUMP OF CHICKEN
作詞:藤原基央
作曲:藤原基央
編曲:BUMP OF CHICKEN


簡単な事なのに どうして言えないんだろう
言えない事なのに どうして伝わるんだろう

一緒に見た空を忘れても 一緒にいた事は忘れない

あなたが花なら 沢山のそれらと
変わりないのかも知れない
そこからひとつを 選んだ
僕だけに 歌える唄がある
あなただけに 聴こえる唄がある

僕はここに在る事は あなたの在った証拠で
僕はここに置く唄は あなたと置いた証拠で

生きる力を借りたから 生きている内に返さなきゃ

涙や笑顔を 忘れた時だけ
思い出して下さい
同じ苦しみに 迷った
あなただけに 歌える唄がある
僕だけに 聴こえる唄がある

皆 会いたい人がいる 皆 待っている人がいる
会いたい人がいるのなら それを待っている人がいる
いつでも

あなたが花なら 沢山のそれらと
変わりないのかも知れない
そこからひとつを 選んだ
僕だけに あなただけに

いつか 涙や笑顔 忘れた時だけ
思い出して下さい
迷わずひとつを 選んだ
あなただけに 歌える唄がある
僕だけに 聴こえる唄がある
僕だけを 待っている人がいる
あなただけに 会いたい人がいる

2007年10月23日 星期二

my sound life - fundamental

my sound life「fundamental」

聽的次數其實比fractal和crystal都還多!?

然後booklet一直都沒出來啊(敲碗)

又,由於曲風還是歡樂居多,要讀書就不能聽了。

現在是放蕭邦的夜曲XD

2007年10月22日 星期一

String Convert: JavaScript and Python

Reference:
JavaScript: The Definitive Guide, 4th Edition, November 2001 (Publisher : O'Reilly)
Python Documentation, Release 2.5, 19th September, 2006
PHP Manual, 2007-03-27

拿舊東西寫新文章 ̄▽ ̄||。

首先要恭喜Kimi Räikkönen拿到Formula One 2007車手冠軍\(^▽^)/。

以前在那個UTF-8還不盛行的年代,要放日文的話,都是要弄成所謂的Big5日文,然而微軟不論在Windows 95/98或是Windows XP時期,都沒有把當年倚天時代的外字集列入其系統,不像簡體中文的系統(gb2312, gbk)在Windows系統內copy&paste日文時,能自動做轉換,繁體中文的cp950都必須透過其他的路徑(Unicode補完計畫、ConvertZ)。

在當年也因為這個原因,寫了個網頁版的converter,不過這不是今天的重點。最早為了轉換不同編碼日文,之後也陸陸續續加入一些字串轉換的功能,其實說穿了只是call內建function罷了,沒啥了不起。

然而最近在寫downloader時,遇到原始字串是編碼過的,在JavaScript下只要用內建function就可以還原,但是在Python下似乎就不一定會有,所以接下來做一些整理。

==[escape()]==
[escape() in JavaScript]
除了ASCII letters, digits, 「@ * _ + - . /」之外,替換成%xx或是%uxxxx的型態(x是指十六進位字元,即[0-9a-f])。decode時請用unescape(s)。

[escape() in Python]
沒有直接對應的function。然後之前寫的unescape()也只有處理部分,有時間來做個完整版的。

[escape() in PHP]
也是沒有直接對應的。在網路上可以找到許多不同的implementation。

==[encodeURI()]==
[encodeURI() in JavaScript]
也是ASCII letters, digits不動,還有「- _ . ! ~ * ' ( )」也不編碼,而在URI中有特殊意義的「; / ? : @ & = + $ , #」在encodeURI()也是不編碼的,在另一個encodeURIComponent()就會被編碼。編碼的原則是先將這些字元轉為UTF-8 encoding,然後用%xx代表其十六進位值,例如line feed(\n)就會表示成%0A、「Д」(俄文的大寫D)會表示成%D0%94、「あ」會表示成%E3%81%82、「人」會表示成%E3%81%82。(在UTF-8編碼下,一個字元可能會以1-3個byte來表示)。
解回來的function是decodeURI()。

[encodeURI() in Python]
在Python可以利用urllib裡面的quote()和unquote(),quote()除了letters, digits, 「_ . -」之外都會encode,要讓某些字元不要被編碼的話,可以加在第二個parameter裡,有趣的是,這個第二個parameter是有預設值的,就是「/」。
from urllib import quote, unquote

input = u"http://test.net/~admin"
input = input.encode('utf8')
print quote(input) # http%3A//test.net/%7Eadmin
print quote(input, '') # http%3A%2F%2Ftest.net%2F%7Eadmin
print quote(input, '~/') # http%3A//test.net/~admin

有人或許注意到input.encode('utf8')這一段,在JavaScript裡是將字元以UTF-8編碼以%xx來表示,而Python的quote並沒有強制說要用哪一個編碼,因此不同編碼會帶來不同的結果。
from urllib import quote, unquote

input = u'金'
print quote(input.encode('utf8')) # %E9%87%91
print quote(input.encode('big5')) # %AA%F7
print quote(input.encode('sjis')) # %8B%E0
print quote(input.encode('gbk')) # %BD%F0

同樣在urllib裡,還有quote_plus()、unquote_plus()這對function,和quote()的差別在於,quote()會把半形空白「 」編碼為%20,而quote_plus()則是把半形空白變成「+」,所以function name才有個plus(?)。

[encodeURI() in PHP]
urlencode()、urldecode()其實是和Python的quote_plus()一樣,會把半形空白變加號,在PHP裡和quote()相同的是rawurlencode(),都是除了alphanumeric和「- _ .」之外都編成%xx。
在網路上,可能會看到說PHP的urlencode()和JavaScript的encodeURI()並不相同,這個問題其實在Python那邊提過了,就是字串編碼的問題,在PHP不像Python有StringType和UnicodeType,要讓PHP的urlencode()能以UTF-8來處理的話,一個是將網頁編碼設為UTF-8,另一個則是利用mb_convert_encoding()。
<?php
// this php script is encoded in UTF-8
$input = '金';
echo urlencode($input); # %E9%87%91
echo '<br />';

mb_internal_encoding('utf8');
echo urlencode(mb_convert_encoding($input, "big5")); # %AA%F7
echo '<br />';
echo urlencode(mb_convert_encoding($input, "sjis")); # %8B%E0
echo '<br />';
echo urlencode(mb_convert_encoding($input, "gbk")); # %BD%F0
echo '<br />';

exit;
?>


==[String.charCodeAt()]==
[String.charCodeAt() in JavaScript]
得到該字元的Unicode point value,解回來的function是String.fromCharCode()
var input = "abc 天地人";
var a = new Array();
for (var i = 0; i < input.length; i++){
a.push(input.charCodeAt(i));
}
var output = a.join(" "); // 97 98 99 32 22825 22320 20154

var b = output.split(" ");
var c = new Array();
for (var x = 0; x < b.length; x++){
c[x] = String.fromCharCode(b[x]);
}
var output2 = c.join(""); // abc 天地人


[String.charCodeAt() in Python]
在Python就是ord()這個function啦。
input = u'abc 天地人'

a = [ord(char) for char in input]
output = ' '.join([str(x) for x in a]) # 97 98 99 32 22825 22320 20154

b = output.split(' ')
c = [unichr(int(value)) for value in b]
output2 = ''.join(c) # abc 天地人

相同的東西,JavaScript和Python寫起來就差很多,同樣是dynamically typed不需要在宣告時指定data type,但是Python是strongly typed,所以在利用join時要用str()轉過,關於type的差別請見先前文章「Dive Into Python, Chapter 2」。在上面Python code裡用了unichr(),因為chr()只接受0-255的值,上述例子中有中文所以會超出範圍,chr()回傳的是StringType,而unichr()回傳的是UnicodeType。

[String.charCodeAt() in PHP]
很遺憾,PHP裡的ord()並不像Python可以傳回Unicode point value,其實這也是非常合理,因為在PHP裡沒有另一個字串型態,傳multi-byte string進去,只有第一個byte的值會傳回來。User contributed notes貌似有人提出解決之道。


竟然寫了這麼久…

jmp3 downloader new version finished

  1. read list page. parse it with pattern 'href="(/pack\.html#[a-zA-Z0-9+/=]+)" onclick'.
  2. read ip.php once (just once). get the 4 parameters [httpurl, uuname, TFlag, pin].
  3. generate mp3 download links. combine the 4 parameters and the path decoding using hash_jmp3() function.
  4. batch download. don't forget only one connection at the same time.
possible improvements
  • GUI: remember the output directory last time
  • INFO: current download rate, average download rate
  • ROBUST: no exception mechanism implemented right now

hash_jmp3() using Python

def hash_jmp3(input):
keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
array = []

for i in range(len(input) / 4):
a = [keyStr.find(x) for x in input[i*4:(i+1)*4]]
enc1, enc2, enc3, enc4 = a

chr1 = (enc1 << 2) | (enc2 >> 4)
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)
chr3 = ((enc3 & 3) << 6) | enc4

array.append(chr(chr1))
if enc3 != 64:
array.append(chr(chr2))
if enc4 != 64:
array.append(chr(chr3))

output = ''.join(array)
return output

2007年10月21日 星期日

finaleden batch download

First, download ``display.aspx?id=[0-9]+'' with Referer ``ShowDialog.aspx?id=[0-9]+''. If socket function is used, the return page is a 302 Not Found redirection. Follow the redirection (Comics-[0-9]+_???.htm) will get the real page which show the images.

In this web page, the real links of images are encoded using escape() function. Parsing it witharray_img\[[0-9]+\] = '([^']+)';
Using Python module re, the syntax isitems = re.compile(pattern).findall(data)items will be a list consisting strings, each of the strings is the real link of image.

The links are encoded using escape() function. In JavaScript, decoding can be done using unescape() function. In Python, I have not yet found a single function can do the job. So I write one.
def unescape(x):
items = x.split('%u')[1:] # the first element (index 0) is an empty string
x = [unichr(int(item, 16)) for item in items]
return ''.join(x) # the type of returning string is Unicode

Since the url may contain non-ascii characters, url encoding is necessary.
def urlencode_utf8(string):
return urllib.quote(string.encode('utf8'), ':/')

The returning string of unescape(x) function is an Unicode string. The parameter of quote() function must be raw string, therefore encode with utf8 is necessary. The second parameter ':/' is called safe parameter, which means these characters should not be encoded. If colon (:) and slash (/) are encoded, the urllib2 functions will not recognize these links as valid value.

After 1) get real page, 2) parse link from the page, 3) decode and encode url. The last thing is download these images from the server. Sometimes the server will validate the Referer. It should be fine to just put http://www.finaleden.com/ into header.

Practical implementation is not yet finished. Though the 99770 one is also in its alpha version.

榊原ゆい台灣演唱會中止

台湾ライブ中止のお知らせ

主催者側の不手際により残念ながら台湾ライブは中止となりました。
楽しみにしておられた皆様には大変申し訳ありません。

==↑from 榊原ゆいオフィシャルサイト==

舉行前一個禮拜,發佈這樣的消息……,而且竟然用了"主催者側の不手際により"這麼嚴重的措詞……好險沒換進板(抖)。

三日目

這樣的生活已經進久第三天了……回到宿舍後,只有吃東西、看漫畫、睡覺……

從星期二晚上開始抓漫畫來看,星期四晚上因為頭非常痛,除了看漫畫之外,沒辦法做其他事(讀書、讀paper、寫程式),意外地這天睡的非常好,和前幾天完全不同,於是星期五也是一樣……結果現在變成不會做其他事了……

這幾天的進度
o 桜蘭高校ホスト部 [追到連載55話]
o 萌えカレ!! [單行本全7卷]
o スキップ・ビート! [單行本16卷+連載至111話]
o GET LOVE!!〜フィールドの王子さま〜 [單行本全7卷]
o 僕等がいた [單行本10、11卷]
o ヤマトナデシコ七変化 [單行本1-19卷]

或許是有史以來完全沒做正事還可以睡得這麼好……不過真的很多事還沒做耶……

2007年10月18日 星期四

悪い夢を見ていた

まぁ・・・そこは地球の果てじゃないんですが
(謎:こういうネタはだれもしらんよ)

と、ほんま怖すぎて、眠れないになちゃった。

今、なにをしようかな・・・

2007年10月15日 星期一

Connect to UltraVNC server on Windows from Ubuntu

傷當奇怪的需求。

一般的情況有兩種:
o 第一個是從Ubuntu要連上Windows的remote desktop,這個可以利用Ubuntu的Terminal Server Client,選擇正確的protocol即可。
o 另一種是從Windows上要連到Ubuntu,Ubuntu端先設定好允許遠端桌面連線("local端詢問"記得要關掉),Windows端有很多client可以選擇:UltraVNC、RealVNC、TightVNC。

而我現在的需求是,一台Windows端的機器安裝了UltraVNC Server,要從Ubuntu連上去,而在Windows端的設定並不是用預設的vnc port,即listen port不是5900。

如果是預設port 5900的話,直接用Terminal Server Client選VNC就可以了,但是現在port不一樣,而在Terminal Server Client裡沒有找到可以設定port的地方(或許有,但是我沒找到)。

後來終於解決掉啦,是用xtightvncviewer。

安裝$ sudo apt-get install xtightvncviewer
在console下打xtightvncviewer之後,會出現對話框「VNC server:」,如果要連線的機器是用預設port的話,只要打ip或是domain name即可,如果port不一樣的話,輸入「IP:N」的話,是連到「IP:5900+N」:輸入「IP::N」的話,則是連到「IP:N」。

如果今天機器的IP是192.168.1.20,port是設定成聽5080的話,可以打「192.168.1.20:80」或者是「192.168.1.20::5080」。

另外一個問題,如果Windows機器需要按Ctrl+Alt+Del時,xtightvncviewer並沒有小按鈕在左上角,而是要按「F8」,畫面中間會跳出一個menu,用滑鼠按「Send ctrl-alt-del」。

Deluge: High CPU usage

Often over 70%, 90% CPU usage can be observed!!!

Although the download speed is really fast (lower startup delay than uTorrent on Windows XP), but CPU usage over 70% is not bearable. Check CPU usage information of Deluge, only found ``checking'' big file will result 100% CPU usage. Nobody reported using Deluge result high CPU usage. Even there is a comment saying that he cannot use Linkage, but with Deluge he can run BitTorrent smoothly with low resource consumption.

So what is the problem? Sure I did observe high CPU usage with Deluge, every time!

Wait. Even when I did not put anything in the queue, the CPU usage is still high. That means other activities result the high usage, not torrent downloading.

Disable the DHT? Not this one, still high CPU usage.

Decrease the maximum connections? No, there is no active torrent.

Finally, I found the problem comes from plugins...the ``Web User Interface''. When I disable the WebUI, the CPU usage is normal. Just check the WebUI, let's see the System Monitor...54, 82, 80, 82. CPU usage goes high.

Unfortunately, it seems that the revision 80 of WebUI is the latest version. So I decide to use remote desktop to control Deluge.

Using Uncleanliness to Predict Future Botnet Addresses::IMC 2007

DISCLAIMER: This review is written by a graduate student and he is not a native speaker of English. There might be mistakes, misunderstandings, and errors.

一整個block被擋掉…冏rz。

如果真的按照作者最後提出來的方法來做filtering,那結果應該會很慘吧,被隔壁的牽連導致不能連線。

作者提出一種指標:uncleanliness,做為預測惡意行為的來源。概念非常簡單,就是這一區有人以前做壞事,附近做壞事的機率也比較高(spatial),這一區以前有做過壞事,之後做壞事的機率也比較高(temporal)。

然後就來定假設,如果手上的trace符合這些假設,就可以說上面提到的spatial和temporal是對的。

假設一(spatial):兩個集合unclean和normal,當這兩個集合的IP數量相同時,算有多少不同的block數量(用submask,例:/24切下去後,會有多少個block),如果unclean的block數比較少,則spatial說法成立(即壞人分佈的block比較集中)。

假設二(temporal):兩個集合unclean-past和normal-past,當兩集合IP數量相同,和unclean-present做完交集(intersection)之後,所得的block數比較多,則temporal說法成立(即從以前是壞人的IP去抓,命中率比較高)。

似乎和警察辦案一樣嘛,先從犯罪率高的地方找、先抓犯過案的人來問。

blocking method很簡單,就是把屬於unclean集合中的block擋掉,而paper中的驗證是看false positive,即IP沒有在unclean集合而且有TCP payload的情況下,因為屬於同一個block而被擋掉。結果推薦採用/26去擋,因為這時候正確擋掉81個而只誤判1個,再往/25, /24去,false positive數量就會上升不少。

問題呢?如果真的用這個方法的話,那只要中過一次毒就不用連線了!?

中過毒的人,再中的機會很高,這點當然是沒有問題,但是單純採用過往有惡意行為就擋掉,這也太…。當然作者在最後有講,這個uncleanliness比較適合當作"危險指數"來看待,來自某個block的IP比較可能從事惡意行為,再視自身管理的網路的屬性,採用不同的方法來應對。

用來辨別自家網路哪個block一天到晚中毒可能還比較有用吧,要拿來擋掉DDoS和Spam…會誤殺一堆人吧。

2007年10月14日 星期日

獣神演武! たいがていといっしょ♪ 第一回

獣神演武! たいがていといっしょ♪

第二回的放送日期預定為11月13日。

主持人:福山潤
來賓:鈴村健一

一開始就是很單純的抽關鍵字然後聊天,「こぼれ話」(軼事),主題是アフレコ現場のこぼれ話,兩個人開始聊起其他參與獣神演武的声優,以及配音現場的狀況;「精神修行」,鈴村說他從來沒有在完全沒有人為聲音的地方,所以想到山中去,只有自然的聲音的地方;「宿業(さだめ)」,電視轉到在重播的節目時,每次剛好都是某一段劇情;「格闘技」,兩個人都有學過合気道。

最後跑出Jenga對決(疊疊樂積木),而且還在快要倒的時候說下集待續XD。

2007年10月13日 星期六

[note] mod_wsgi on Apache 2.2, Windows

fastcgi or fcgid都弄不好,Apache爛掉重開好幾次,而使用mod_python的話,每次改完code都要restart Apache才會生效,不適合用於development environment。

然後就來試這個wsgi了。

modswgi on Google Code
在上面可以找到各framework要如何設定才能使用,包括:Django, TurboGears, web.py。網站上只有提供source code,而Windows binaries請到http://adal.chiriliuc.com/mod_wsgi/下載mod_wsgi.so,記得選對Python和Apache的版本。

Environment:
Windows XP x64
Apache 2.2.4
Python 2.5
mod_wsgi 1.1
TurboGears 1.0
Django 0.96
web.py 0.22

把mod_wsgi.so放到Apache2.2/modules下,在httpd.conf裡加入一行LoadModule wsgi_module modules/mod_wsgi.so
大部分的文件都利用WSGIScriptAlias這個Directive,實際使用上也的確比較好用,但是WSGIScriptAlias只能加在httpd.conf裡面,我們希望在shared host環境下也可以使用WSGI,因此以下嘗試利用.htaccess來做設定。

注意!以下的測試僅使用Hello World等級的code,因此將這個設定運用在production等級的code上,不一定會成功,因為受到其他因素的影響,最後的TurboGears部分會稍微提到。

假設目前Apache有設Alias一個資料夾,在網址上打http://127.0.0.1/py/可以進入這個資料夾
Alias /py "c:/py"
<Directory "c:/py">
Options ExecCGI
AllowOverride All
Order allow,deny
Allow from all

[web.py]
利用IntegrationWithWebPy裡面的範例程式
# file: c:/py/web_py_test.py
import web

urls = (
'/(.*)', 'hello'
)

class hello:
def GET(self, name):
i = web.input(times=1)
if not name: name = 'world'
for c in xrange(int(i.times)): print 'Hello,', name+'!'

application = web.wsgifunc(web.webpyfunc(urls, globals()))

設定c:/py/.htaccess如下<Files web_py_test.py>
SetHandler wsgi-script
</Files>

在瀏覽器打http://127.0.0.1/py/web_py_test.py/
注意!最後面的slash(/)是必要的,沒有打slash的話,會變成not found。

[Django]
假設Django的檔案是在C:/django/mysite,C:/django/mysite/settings.py,在C:/py/放一個檔案叫django_wsgi.py
import os, sys
sys.path.append('c:/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi

_application = django.core.handlers.wsgi.WSGIHandler()

def application(environ, start_response):
environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
return _application(environ, start_response)

c:/py/.htaccess要加上<Files django_wsgi.py>
SetHandler wsgi-script
</Files>

網址輸入http://127.0.0.1/py/django_wsgi.py/即可。

嗯…這網址實在是不怎麼好看,剛才嘗試用rewrite但是失敗了…所以可以的話,還是用WSGIScriptAlias吧。

如果資料庫是使用sqlite3,在settings.py裡面的DATABASE_NAME記得要用絕對路徑,不然會爛掉。

[TurboGears]
據說CherryPy 3.0會比較簡單,但是TurboGears 1.0裡面是用CherryPy 2.2。
假設TurboGears位置在C:/tg/mysite,C:/tg/mysite/start-mysite.py,在c:/py/放一個檔案叫tg_wsgi.py
import sys
sys.path.append('c:/tg/mysite')
sys.stdout = sys.stderr

import atexit
import cherrypy
import cherrypy._cpwsgi
import turbogears

turbogears.update_config(configfile="dev.cfg", modulename="mysite.config")
turbogears.config.update({'global': {'server.environment': 'production'}})
turbogears.config.update({'global': {'autoreload.on': False}})
turbogears.config.update({'global': {'server.log_to_screen': False}})
turbogears.config.update({'global': {'server.webpath': '/py'}})

if cherrypy.server.state == 0:
atexit.register(cherrypy.server.stop)
cherrypy.server.start(init_only=True, server_class=None)

import mysite.controllers

cherrypy.root = mysite.controllers.Root()

def application(environ, start_response):
environ['SCRIPT_NAME'] = ''
return cherrypy._cpwsgi.wsgiApp(environ, start_response)

注意!裡面的mysite還有路徑要記得換成實際使用的project name。
在c:/py/.htaccess一樣加上<Files tg_wsgi.py>
SetHandler wsgi-script
</Files>

網址輸入http://127.0.0.1/py/tg_wsgi.py。

然而,上述的TurboGears只有測試過剛用tg-admin quickstart生出來的東西,可以跑。之前用TurboGears寫的留言板完全不能用,不過測試後發現,當有加入Identity的時候:不行,template改用Genshi:不行。所以就懶得再試了……。

或許來改試web.py吧…貌似比較lightweight。

2007年10月12日 星期五

P2P: Is Big Brother Watching You?::

DISCLAIMER: This review is written by a graduate student and he is not a native speaker of English. There might be mistakes, misunderstandings, and errors.

這篇是UC Riverside的Technical Report,後來投到IFIP Networking 2007,標題換成Is Someone Tracking P2P Users,不過從first author網站抓下來的pdf檔裡,標題是The P2P war: Someone is monitoring your activities!。

我看的是TechReport這個版本,不過和作者網站的版本,reference只有兩個不同,理論上內容應該是大同小異。

首先,作者提了幾個結論
  • 呆呆的使用者100%會被追蹤。
  • 只要擋掉blocklist前五名的IP,就可以讓被追蹤到的機率低於1%。
  • 在blocklist中的IP大多數屬於政府機關或是企業。
  • 在blocklist中極少的IP是屬於content provider。
  • 不同地區會有差異。
  • UP(Ultra Peer)被追蹤的機率和Leaf Node是一樣的。(這是Gnutella Network中的術語)
我們來看看作者是做了什麼實驗而得到下列結果。
  1. 使用修改過的Gnutella client,放到PlanetLab上,包括美東、美西、歐洲、亞洲的node。
  2. 搜尋字串為音樂排行榜上的熱門歌曲,美國、歐洲、亞洲分別採用不同的排行。
  3. 記錄和這些client接觸過的peer的IP,總共跑了超過90天。
  4. 將這些IP和知名的blocklist做比對,例如PeerGuardian。
  5. 如果一個client接觸過的peer中,有IP是和blocklist相同的話,則這個視為client被追蹤到。
回頭再看一次上面作者提出的結論,可以提出下列問題:
  • 這是在Gnutella下的情況,如果在eDoneky呢?在BitTorrent呢?
  • 這是用熱門音樂檔搜尋的結果,如果是熱門電影呢?付費軟體呢?比較不熱門的音樂或是非近期的音樂呢?
  • 所謂的擋掉blocklist中的前五名,哪些是前五名?從跑了90天的trace來看嗎,這前五名會一直固定是前五名嗎。如果是這樣的話,只能說前五名的IP佔了blocklist中連結次數的大量,而不能說只擋掉前五名就能將被追蹤的機率降到幾個百分比,因為根本不能確定哪些是前五名。
  • 不同地區會有差異,然而音樂排行榜在不同地區也會有所差異,作者提供的排行榜來源,美國是Billboard比較沒問題,歐洲給的mp3hits這個網站已經不存在了,而亞洲地區使用的MTVAsia,稍微看了一下榜單,當然還是西洋音樂,而以我所知的地方(台灣、日本),除了MAROON 5之外,知名度?基本上在亞洲地區以西洋音樂來看或許就已經是個bias了。
結論,跑了90天、超過100GB的TCP Header,處理起來當然不簡單,還可以想出這麼多結論,得個Best Paper Award也不為過。只是對應到現實生活中,是否真的可行?其實這本身就是一個地區性的差異了,在國外的p2p網站、論壇,多半仍然會提到Gnutella Network仍是一個抓mp3的好工具,但也僅止於此了,換言之,如果不抓西洋音樂mp3的話,使用Gnutella的機會微乎其微!?這篇得出來的結論,在eDonkey網路上或許會有類似的情況,因為有網路內搜尋的特性,但是在BitTorrent這個搜尋是out of band的東西上,會一樣嗎?然而BitTorrent也不是沒有弱點,看那MediaDefender的一堆工具,不過實際使用上倒是沒碰到,或許是因為都沒動到好萊塢電影的關係吧。

巴幣換榊原ゆい演唱會門票!?

巴哈姆特演唱會 - 榊原ゆい Formosa live in Taipei 2007

之前提過的榊原ゆい台灣演唱會,最近突然出現這個巴哈贈票的活動,著實令人摸不著頭緒。

これ微妙しすぎや

嗯 然後發現之前寫星期六是錯的,可能是因為最早的消息說星期六吧。演唱會官方消息請見「榊原ゆいFormosa live in Taipei 2007」,演唱會時間是10月28日(日)晚上6點至8點,門票價格1500。

回來這個巴哈贈票,網頁上寫說每張"巴幣"1500元,每人最多兌換2張,板主及VIP優惠1200元,領票須至巴哈姆特總部,限於10月26日(五)下午5點至6點,為加快領票速度,請攜帶身份證明前往領票,會以會員姓名作為領票核對標準。

やはり微妙・・・

最神奇的是…原來我也有巴幣,而且數量竟然可以換票耶……這巴幣是怎麼算的啊…我發過的文章應該兩隻手就數完了@@。

2007年10月11日 星期四

Gene6 FTP Server - Can't establish SSL connection

雖然IP binding有開「Allow explicit SSL」,但是連的時候還是出現問題。

以下為FileZilla的logCommand: AUTH TLS
Response: 234 AUTH command ok; starting SSL connection.
Error: Can't establish SSL connection
Error: Disconnected from server
Error: Unable to connect!


結果原來是忘了要作certificate,在FTP Server的Certificates裡要先新增一個,然後在該domain下的Secure的SSL,再把Cert&Key files選好。

『DARKER THAN BLACK-黒の契約者-』インターネット・ラジオ・スペシャル『25番目の星が流れる前に』

インターネット・ラジオ・スペシャル『25番目の星が流れる前に』

一開始就歡樂到不行XD,和「DARKER THAN BLACK-黒の契約者-」本身動畫的感覺完全不同。

木内秀信(黒)、水樹奈々(霧原未咲)、福圓美里(銀)

開場太過歡樂@@,長度約30分鐘,還沒聽完。

連結

==
又,animate.tv Webラジオ剛才翻了一下,好像蠻多有趣的東西。

TVアニメーション『CLANNAD』 Webラジオ「渚と早苗のおまえにレインボー」
這個之前提過了,原來不只音泉,animate.tv也有放,內容是一樣的。
中原麻衣、井上喜久子

獣神演武! たいがていといっしょ♪
秋季新番「獣神演武」果然是要主打声優牌?
在animate.tv這邊放的是由福山潤主持的談話節目(有畫面!),預定播放六回,back number一次只有一回,所以要聽(看?)的人要注意啊。目前預定一、二回來賓是鈴村健一,三、四回來賓是小山力也,五、六回則是先保密。
獣神演武另外在MediaFactory有Web Radio,主持人是鈴村健一和小山力也。

『げんしけん2』Webラジオ「げんちょけん おたくならぢを」
檜山修之、水橋かおり
第0回,一開始竟然讓檜山修之一人飾兩角!作品名為什麼要嗶啊XD
長度約45分鐘

2007年10月10日 星期三

Get 403 when RewriteEngine On

喵的~解決方法是在.htaccess裡多加一行
Options +FollowSymLinks

Block bad guys with .htaccess

非常奇怪地,明明是個沒有任何資源的留言板,卻不時會有神秘的spam來襲擊,或許單純只是無差別攻擊吧,不過看著這log越長越多,還是覺得很煩,所以來對Apache動手吧。

如果httpd.conf沒有開AllowOverride的話,在資料夾下放.htaccess是沒用的,請注意!

[方法一:Deny IP]
<Files *>
Order Allow,Deny
Allow from All
Deny from 58.65.238.26
Deny from 66.232.113.158
Deny from 200.129.43.168
</Files>
不要問我這些IP哪來的,有的可能只是proxy替死鬼。

[方法二:Deny User-Agent]
SetEnvIf User-Agent ^Opera\/9\.0 bad_guy
<Files *>
Order Allow,Deny
Allow from All
Deny from env=bad_guy
</Files>
並不是Opera是壞人,而是這個壞人用了Opera/9.0做為它的User-Agent。

[方法三:Redirect the traffic]
RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^Opera\/9\.0
RewriteRule ^/*$ http://franks543.blogspot.com/
把壞人導到這個blog……反正Google頻寬大不怕!

實際功效未經大量測試,僅做為筆記,不負責任~~

2007年10月9日 星期二

大失敗の日(二)

靠邊啊…這個標題竟然有二,不過今天真的是超慘烈,竟然會犯下這麼基本的錯誤……

開始推卸責任…都是因為UltraVNC的File Transfer太難用,導致把報名系統的db洗掉了。

問題在哪?第一個,db竟然用文字檔,沒送進MySQL…好吧,去年也是這樣搞,就很正常。第二,今天不知道是哪根筋不對,明明有開TLS,硬是不用,拿UltraVNC在那邊傳,結果左右邊的local、remote搞錯,而且還是先洗掉main function source,竟然還沒想到,再把db file也洗掉…

要是在公司的話,應該已經被開除了吧,而且還要賠償損失。

切記!切記!莫再犯。

Unlock file or directory in WinXP x64

Unlocker is a good tool, but it won't work on WinXP x64.

Fortunately, we can use a function in Process Explorer.

Open Process Explorer, go to ``Find'' -> ``Find Handle or DLL...''. Or you can just press the hotkey Ctrl+F. Search for the file name, and it will tell you which handle lock this file. Click on the search result, the lower pane will show and you can right click on the file and choose ``Close Handle''.

2007年10月8日 星期一

Deluge - BitTorrent client for Unix-Like system

因為用wine跑uTorrent,遇到檔名有非ascii字元時,就沒辦法下載,修改torrent的話,hash值就不一樣了。

所以開始尋找其他的替代品,Azureus非常有名,但是因為announce會被擋下又不知道怎麼下手改(不想架proxy了),所以放棄。

直到今天不知道怎麼逛到的,看到Deluge這套,想說來試用一下吧。



在local端開起來還是比較漂亮,用Xming在遠端開就很…。

官網上面說支援Mainline DHT、uTorrent Peer Exchange、Protocol Encryption。而WebUI,目前有一個還沒送進官方package的plugin,下載點,下載WebUi-revXX.tgz,解壓縮到deluge的plugins資料夾下(我的在/usr/share/deluge/plugins),到Plugins裡把Web User Interface打勾,Preferences裡選擇聽哪個port和密碼,連結的網址就是http://yourip:web_ui_port/,不像uTorrent後面要加gui。

這個WebUI雖然沒有像uTorrent那樣華麗,不過以遠端控制的用途來說,算是夠用了。

Python batch rename (snippet) version 2

Python batch rename (snippet)

原本只能取代一個字串,這個版本改成用list放多個需要取代的字串。
注意!如果list內放的字串有相關性的話,取代時可能會造成問題,要如何取代以及字串的順序請要想清楚。

# -*- coding: utf8 -*-
import os

root = u'./'
olds = [u'【',
u'】',
u'花园星组',
u'_银魂',
]
news = [u'[',
u']',
u'DMHY_STAR',
u'',
]

for path, subdirs, files in os.walk(root):
files.sort()

for name in files:
print repr(name)
try:
newname = name
for old, new in zip(olds, news):
newname = newname.replace(old, new)
os.rename(name, newname)
except:
continue
# if we do not want go to subdir,
# then use ``break'' here
#break

[Radio] 渚と早苗のおまえにレインボー

渚と早苗のおまえにレインボー

隨著CLANNAD TVA開始播放,電台節目也在音泉上開始了~~。

主持人是由擔任古河渚的中原麻衣與永遠十七歲的井上喜久子(劇中飾演古河渚的母親)

中原:「皆さんはじめまして、中原麻衣です。」
井上:「井上喜久子、十七歳です。」
二人:「おいおい」

定番っすか・・・

總長度約40分鐘…所以還沒聽完,明天起來再聽吧~~

第一回連結

2007年10月6日 星期六

Compiling MadEdit 2.7 on win32 using MinGW

Q: What is MadEdit?
A: MadEdit is an Open-Source & Cross-Platform Text/Hex Editor written in C++ and wxWidgets. (copied from official site)

What we need to compile MadEdit 2.7 on win32?

1. MadEdit 2.7 source code. Available on SourceForge.
2. MinGW. I am not sure which package is needed and which one is not. I installed gcc-core, gcc-g++, mingw32-make, mingw-runtime, mingw-utils, w32api, binutils.
3. Boost. Compiling MadEdit 2.7 only need the header files of Boost. I downloaded boost_1_34_1.7z.
4. wxWidgets. I downloaded wxMSW-2.8.6-Setup.exe. This file only includes source code. Compiling wxWidgets using MinGW will be mentioned later.

Boost.Xpressive and libunicows are including in the source code package of MadEdit 2.7.

[Setup MinGW]
Extract all the packages to a directory, e.g. C:\MinGW. Add C:\MinGW\bin to the environment variable ``path''.

[Compile wxWidgets]
Extract the source code to a directory (or ``install'', since wxMSW-2.8.6-Setup.exe is an InnoSetup package). E.g. C:\wxWidgets.
Go to the directory ``C:\wxWidgets\build\msw''.
Modify the file ``config.gcc'' as the following.# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := release
We need Unicode build and binaries in release mode.

Go to command line and change working directory to ``C:\wxWidgets\build\msw''. Then typemingw32-make -f makefile.gcc

If you did not set the environment variable, the console cannot find where is mingw32-make.

After starting the compiling process, it may take 10 minutes or more than half an hour to finish, depending on the machine you use. When the compiling is finished, check the directory ``C:\wxWidgets\lib\gcc_lib'', see if there are files named ``libwxbase28u.a'' or ``libwxmsw28u_core.a''. Be sure the file names are identical. If you have something like ``libwxmsw28d_core.a'', please modify the file ``config.gcc'' as I mentioned above.

[Compile MadEdit]
Now we have MinGW in C:\MinGW, wxWidgets in C:\wxWidgets, Boost in C:\boost_1_34_1 and MadEdit in C:\madedit-0.2.7.

Finally, we can compile MadEdit. Before starting, we need to do a little modification to the original makefile. In C:\madedit-0.2.7\makefiles, open the file ``Makefile.mingw''. Modify the following lines to the directory of your setting:
WXWIN = C:/wxWidgets
BOOST_DIR = C:/boost_1_34_1

And the most important part, the reason why I could not compile MadEdit using this makefile. CXXINCS = -I$(WXWIN)/include -I$(WXWIN)/lib/gcc_lib/mswu .....
Move "-I$(WXWIN)/include -I$(WXWIN)/lib/gcc_lib/mswu" to the end of the line

This line tells compiler where to find header files. The first one ``-I$(WXWIN)/include" is the directory of wxWidgets header files. If there are header files have the same name, MinGW will use the one comes first. MadEdit packages wxAUI in its source code package. In the CXXINCS line, there is also a ``-I"../wxAUI/include"''. But the version of header file in MadEdit's directory is different from the one in wxWidgets 2.8.6. If compiler uses the header file in wxWidgets 2.8.6, it may result error. Therefore we need to let the directory of MadEdit comes first. That's why we move the wxWidgets directory to the end of this line.

After modifications, go to command line and change working directory to ''C:\madedit-0.2.7\makefiles''. Type mingw32-make -f Makefile.mingw
Wait 'till the compiling process finished. And we can see MadEdit.exe in C:\madedit-0.2.7\makefiles\Release.

[Another approach to the wxAUI problem]
The wxAUI problem can be solved using another approach. The key issue is we have to use wxAUI always in the same version, either the one including in MadEdit, or the one in wxWidgets 2.8.6. The approach metioned above is to use the MadEdit one. If we want to use wxAUI in the wxWidgets 2.8.6, modify the file ``Makefile.mingw''. Remove the following 5 lines ./Release/tabmdi.obj \
./Release/auibook.obj \
./Release/dockart.obj \
./Release/floatpane.obj \
./Release/framemanager.obj \

Remove the 5 lines will let compiler to find the function of wxAUI in wxWidgets 2.8.6, not the version in MadEdit's package.

超神奇MadEdit編譯過程

一直沒有去用Boost,因為光是compile就耗掉一堆時間了,當然,和cpp寫很少也有關係。wxWidgets在兩年前有摸過一次,當時也是make打下去,然後就去睡了…,後來學了Python,就改成寫wxPython了。

直到現在為了MadEdit,又開始碰Boost和wxWidgets。

如果Desktop System只用Windows的話,其實EmEditor就已經滿足大部分的需求,真的要大量寫code的時候,其實都是開Vim,EmEditor最大的用途在於編碼和regular expression,「Regular Expression不是Vim的強項嗎?」,因為Vim的re其實和一般在用的有點不同(例如?代表0 or 1、+代表1 or more,在Vim不是),又一直沒去詳細翻doc,所以習慣要大量re處理時,會開EmEditor出來。

至於編碼早就講到爛了,就不再多提,目前在Linux上唯一能符合編碼需求的,就只有MadEdit了。

但是在re的部分,MadEdit似乎稍微弱了一點,取代時最重要的group and set back reference,沒有辦法用,所以要來看看source code,看有沒有辦法把這個加進去。

不過在compile過程就非常神奇了,所以現在還沒開始看code…

所以是Boost花了30分鐘左右用bjam編起來,現在是用AMD X2 3600+才有這個速度,如果是之前那台Pentium 4 2.4 without HT,那時間單位就要用小時算了,記得bjam要加「-sTOOLS=mingw」。wxWidgets用MinGW without MSYS花了約15分鐘左右,「build\msw\config.gcc」裡要記得改成「UNICODE := 1」和「BUILD := release」,然後再下「make -f Makefile.gcc」。

第一次先用了wxDev-C++,讀MadEdit source package的「devcpp\MadEdit.dev」,把Project -> Project Options裡的Directories改成Boost和wxWidgets的路徑之後,就可以compile成功。

喔,既然成功了,那還有什麼問題。

因為不想裝wxDev-C++(逃),所以嘗試直接在console下用MinGW來編,利用的是「makefiles\Makefile.mingw」,和wxDev-C++一樣,要把Boost和wxWidgets路徑設對,然後下「make -f Makefile.mingw」。

compile過程都正常,直到最後的link步驟,出現error。

auibook.o和tabmdi.o這兩個會抱怨undefined reference to `wxAuiNotebook::SetFont(wxFont const&)'

嗯…用wxDev-C++可以編出來,MinGW就不行?

既然是linker在吵,那應該是少了某個-l,或是有路徑沒設到?

結果不對…直接用wxDev-C++的link command還是相同的error。

於是異想天開,用wxDev-C++編出來的auibook.o和tabmdi.o取代掉MinGW編的,結果就OK了……。

目前仍在看compile flags哪裡不同,而導致這種結果。

2007年10月5日 星期五

play ape file in Ubuntu

ape和cue都要能播啊……

目前成功的方法,安裝Audacious。

不過ape的plugin在官方的repository沒有,要先增加這個Morgoth - Ubuntu backports

網站上有說明,可以慢慢看,以下是可c&p懶人步驟:

先將key加到APT裡面$ wget -O - http://morgoth.free.fr/files/morgoth-signkey.gpg.asc | sudo apt-key add -
然後在/etc/apt/sources.list裡加入deb http://morgoth.free.fr/ubuntu feisty-backports main
最後來安裝$ sudo apt-get update
$ sudo apt-get install audacious audacious-mac audacious-plugins


喔耶~~ape with cue、mpc都可以播了。

自訂gcin中日本式的table

分成兩個部分來討論,首先是如何自訂table,讓打起來可以更順手;第二部分是討論gcin中日本式的預設table不足之處為何。

gcin的中文輸入目前用來非常好用,不論是GTK(Firefox, PCManX)還是QT(Opera)下,都可以正常輸入,但是說到日文輸入,gcin內建的日本式就沒辦法讓習慣MS IME或Anthy的人打的下去。

以真正的日文輸入而言,日本式的漢字輸入功能其實和沒有是差不多的,退一步來看,因為行列輸入法幾乎可以打出日文漢字(會拆的話),日本式能提供方便地輸入假名的話,也算是還有用處。但日本式目前附的table幾乎沒有容錯打法,打起來大概就像中文輸入習慣用簡碼打法後,突然要你一定得打完整拆法那樣地痛苦,所以要來修改這個table。

以下實驗平台為Ubuntu 7.04 Feisty Fawn、gcin 1.3.3。

首先,到官網下載區抓gcin原始檔,我們需要data/kana-nippon.cin這個原始的table,由於官網所在的cle不是很穩定,有可能會連不上。.cin檔案為UTF-8 encoding,所以請使用一套可以編輯UTF-8的文字編輯器來開始kana-nippon.cin,修改好之後,利用gcin2tab這個工具將kana-nippon.cin轉換成gtab檔,再把kana-nippon.gtab放到~/.gcin下即可。可以參考"安裝額外的輸入法"。

至於要修改什麼呢?上面有提到漢字輸入幾乎沒用,所以這裡只討論Caps Lock on的情況,也就是"快速輸入日文五十音"模式。

此模式是輸入拼音的話,直接輸出平假名,不用選字;要輸出片假名的話,在拼音前面多打「,」;要打小寫平假名的話,在前面加「x」;小寫片假名的話,在前面加「q」。
あ:A
ア:,A
ぁ:XA
ァ:QA

在此table內幾乎沒有容錯打法,然而完整的對照表還要再開來看,印象中MS IME的help file有列出各種打法,以下只舉幾個目前gcin日本式沒有的打法。

しゃ:SHA:沒有SYA
ちゅ:CHU:沒有TYU
つ:TSU:沒有TU
づ:ZU:沒有DU
って:完全沒有,建議可以加入TTE,其它類似例如:っと
ん:N:建議可以加入NN,當然可以用N加空白鍵,但是NN也是一種習慣性打法

目前有想到的先這樣吧,回去再查查MS IME的對照表。

機殼新歡:聯力 A07

今天告別了陪伴五年的機殼,換上新歡聯力 A07,本來是打算多照幾張,但是裝著裝著就懶了XD。

首先是不知道為什麼,把說明書照起來了…



好多螺絲


機殼正面。不開閃光的話,會手震,開了閃光效果不好。


機殼背面。把ISO拉高而不開閃光,看起來好一點。


機殼內部。機殼本身有一前一後的風扇,前吸後排,上方還有個通風口(圖中只能從影子看出來),那邊的風扇要另外裝。


一堆線,包括前方面板的USB、IEEE 1394、音源,其中音源有HDA和AC97兩條線。剩下的就是Power Switch, Reset Switch, H.D. LED, Power LED, Speaker,話說Speaker還蠻大聲的XD。


硬碟模組。神秘的溝槽,搭配橡膠(?)達到防震動(?)。


前方面板拆掉後的樣子。


結果就沒照片了(懶~~)。

目前上機後的感覺,聲音似乎比之前稍微大一點,畢竟多了兩顆風扇在轉。之前會有的硬碟讀取震動,在用了神奇模組後,幾乎不會聽到硬碟讀取導致的聲音了(是幾乎,非常仔細聽的話還是有,畢竟是梭十SATA2)。前方面板如果要保持美觀的話,可能要另外買活動式光碟機檔板會比較好。而USB的部分嘛…覺得是有點擠,比較大頭的device就沒辦法插。鎖銅柱的時候,不用鎖到生氣,那一堆螺絲裡有附鎖銅柱的工具,不過我是用手鎖完之後才發現XD。

2007年10月4日 星期四

MadEdit in Ubuntu

v0.2.7 Beta剛裝起來,目前還在調整使用設定,字型先用Consolas…一時看到的都怪怪的,Consolas勉強還好,至少英文看起來不錯,非英文…再找看看其他字型吧。

現在用起來最奇怪的地方應該是「貼上」那個icon不知道為什麼一直閃…

MadEdit應該是目前Linux上少數可以輕鬆地選擇、變更檔案編碼的文字編輯器吧,在Windows上都是用EmEditor,MadEdit雖然在Windows也有,但是和EmEditor相較起來……其實看用途啦,會以EmEditor為優先的一大原因還是外觀吧,MadEdit預設會對tab、換行、空白…顯示符號,而那個符號又不是很美觀,所以大家文字檔一開起來就非常怪,建議作者預設值還是把顯示符號關掉,雖然在不少情況下顯示符號是非常有用的,但是一般人會很不習慣。

另外一個外觀的東西嘛…或許syntax highlight也不是那麼令人覺得好看(?),不過色彩這種東西是見仁見智啦,而且MadEdit要修改syntax highlight color非常容易,不過人們總是懶惰的,如果預設值就看起來不錯,通常會有加分的效果@@。

MadEdit在一開始的定位,就不單純是文字編輯器,還有一個Hex Editor。當初在Windows上使用MadEdit感受到好用的地方,除了不用存檔就可以變更要用哪個encoding來顯示,就是Hex Editor的部分,當然和專業的WinHex相較起來,MadEdit的功能是少了些,但是一般需要的修改、搜尋,MadEdit都能達成,而且MadEdit最強大的encoding功能,在Hex Editor一樣有用!一般Hex Editor在右邊的ANSI區,都是用西歐語系,或者是System Default,但是MadEdit可以顯示成你所選擇的encoding,也就是說不論是Big5、UTF-8,都可以在ANSI區顯示出那個字來,這對於一些採用UTF-16為tag encoding的格式特別有用,在一般的Hex Editor,英文可能還可以顯示(因為另一個byte補零),不過其他語系就不行了,而在MadEdit下可以顯示!

先寫到這邊。

2007年10月3日 星期三

Show ads between posts

果然是因為有手動改過template,所以把「Show ads between posts」勾起來後,adsense還是沒出現,要先去按「Revert widget templates to default」才會出現。

目前是先維持舊的template,回宿舍後再慢慢改吧……在Ubuntu上弄HTML editing還是不太順手…

行列在gcin下設成按空白立即送出第一字

其實會造成一個問題,就是5^會變成「隨」而不是「的」@@。

當然「的」可以改成用9-選0,不過在習慣上會影響速度。

另一個神奇的效果是,嘸蝦米的選字,因為按空白是第一字,所以第二字的選字是按1(當然還有VRSFWLCB的用法,不過這邊先不考慮這個),而行列在gcin設成按空白立即送出第一字後,會變成一碼或兩碼的時候,還是原本的123順序,但是三碼以上,就會變成第二個字要按1來選,例如3v 9- 5v就會變成「劣 1沒 2汲」,所以如果原本有記三碼以上選字要選第幾個的話,就會按錯@@。

結論:畢竟在Windows沒辦法設成這樣,所以還是按照行列原本的用法吧,把gcin設回由.gtab指定。

だんご大家族

茶太りん在主流市場知名度大增的契機!?

即將於日本開始播放的動畫「CLANNAD」,片頭曲採用和遊戲與9月上映的劇場版相同的「メグメル」,而片尾曲則是由茶太りん擔任的「だんご大家族」。

茶太りん在日記裡提到,原本這首歌是拿來當插曲的,後來變成"有可能拿來當ED喔",在夏コミ之後才確定要當ED,所以茶太りん本人也是非常驚訝。

收錄OP、ED的單曲預計在10月26日發售(某購物網站連結)。

最後來看看Invitation DVD裡面附的無字幕ED吧

2007年10月2日 星期二

新型態攻擊!?用PDF檔讓你的電腦停住

本來還以為是Ubuntu上的PDF viewer有什麼問題,結果在WinXP上一樣卡住。

有空的人可以試試看,到IMC 2007 Conference Program,下載「YouTube Traffic Characterization: A View From the Edge」這篇,大約在第9、10、11頁的地方,試試看要多久畫面才會rendering出來,我到目前連第一個figure都還沒畫完…

大失敗の日

其實應該是「大失敗の夜」XD。

為了一探傳聞中的十大夜景之首「大屯山頂」,晚上11點帶著外套、相機出發。

騎了約一個小時後(約26公里),先到了另一個點「竹子湖入口」。路徑蠻簡單的,就是到了文化麥當勞那個路口時直走,騎了一陣子之後,有個T字型路口,往左騎,再騎一陣子後,就會到竹子湖入口,夜景點就是派出所前面的觀景台。PaPaGO確認一下,就是騎陽金公路(台2甲)。

今天似乎是有某劇組在那邊拍攝,因為看到那種很大的麥克風,回程的時候,稍微騎慢一點想看看是啥,就被工作人員比手勢快騎走。

理論上(因為沒有實際站到那個點)應該是夜景還不錯,不過如同文章上所說,和文化後山相較起來,並沒有值得到再騎那一段路過來。

過了竹子湖繼續騎,要往今天的預定目標前進,不過這時候,前方漸漸地朦朧起來,呃…好像這前面是要到小油坑了,這令人熟悉的霧……,騎著騎著,左方出現個叉路…看起來有點小耶,可是再過去就是小油坑了,往大屯山頂應該是在小油坑之前要改騎巴拉卡公路(縣101甲,PaPaGO寫"百拉卡公路"),看一下路牌,真的是巴拉卡公路……但是……僅約一台汽車寬而且完全沒路燈@@。

既然都騎到這裡了(←這是一句恐怖的話)。

沿路完全無路燈,加上小油坑路段等級的霧(今天是還好啦,車速還可以超過40),道路上方還有樹枝覆蓋(白天的話是綠意盎然啦,但是現在是深夜…),騎了一段後,終於有燈出現了,有路標(忘了照下來),看來二子坪停車場應該還沒到,要繼續騎?

過了這燈之後的路更跨張,之前地上還有反光器,過來這一段連這個都省了|||,開始覺得是不是大燈應該要換亮一點的再來…。

不過終究還是騎到二子坪遊客服務站了…



在二子坪停車場有一條車道可以上山,往大屯山頂就是這條路了,都騎到這裡,當然要攻上去啊!

結果是龜速騎了好幾個髮夾彎之後,終於有看到一個涼亭,但是在那個點,除了機車大燈之外,看不到任何的光,所以究竟有沒有到山頂我也不知道0rz,不過以今天霧的程度,應該是就算到山頂了,也是看不到任何夜景。之後就又龜速下來,獨自騎過沒路燈的巴拉卡公路,到竹子湖入口時,那群人還在。

這到達困難度,雖然沒有登山走路,不過光騎車的部分,就不算輕鬆了,個人認為在有霧的情況下,是比到擎天崗還要麻煩許多。

還是找個白天去探好了。

2007年10月1日 星期一

The Web is Smaller than it Seems::IMC 2007

DISCLAIMER: This review is written by a graduate student and he is not a native speaker of English. There might be mistakes, misunderstandings, and errors.

DATA SETS:
1. DMOZ Open Directory Project
2. DNS zone files from the .net and .com TLDs.

Percentage of IPs?
Percentage of Web Servers?
What is the difference between these two? Why the different view can lead to different result?

If over 70% IPs have only one web server, why only 4% or 24% of web servers hosted on a machine by themselves. Does this mean that one web server has multiple IPs?

Assume we were convinced by the above statement. The following statements are:
1. Popular web servers are less likely co-located. Co-located servers usually are not popular.
2. Since there are co-located servers, block lists may result good sites also be blocked.
3. Co-located DNS servers for those web servers may also result large amount of unavailability. Analysis shows 30% of DNS servers only handle one domain. Most domains have redundancy of DNS servers.

Only .com and .net domains in data set. DMOZ data are much smaller than zone files.