Jul 09

Reusing Classes

一、Composition 語法
(1)Object references 會被初始化爲 null;

(2)爲減少不必要的負擔,compiler 不會爲每個 reference 産生 default object;

(3)初始化 object references:

  • 在對象定義處:表示它們一定能在 constructor 被調用前完成 initialization;
  • 在 constructor 內;
  • 在實際需要使用到該對象的地方:這種方法稱爲 lazy initialization,可減少額外的負擔。

二、Inheritance 語法
(1)Inheritance 是 Java 不可或缺的一個部分,即使沒有指出要繼承某個 class,仍會隱式的繼承 Java 的標准根源類 Object;

(2)爲每個 class 都撰寫 main() 以方便進行 unit testing(Bruce 說的,本人…保留意見);

(3)Inheritance 的一般性原則:data members 聲明爲 private,methods 聲明爲 public;

(4)Java 通過 keyword super 來調用 base-class;

(5)對 base-class 的 constructor 的調用,是 derived-class 的 constructor 所做的第一件事(Compiler 強制)。即使沒有爲 derived-class 撰寫 constructor,compiler 也會爲其自動合成;

(6)基於(5),若 base-class 的 constructor 帶有 arguments,derived-class 的 constructor 必須首先在起始處使用 super(arguments) 對 base-class 進行 initialization;

(7)與生成的順序相反,cleanup 的次序是先 derived-class 後 base-class;

(8)Name hiding:derived-class 內重新定義(使用)了 base-class 的 method 名稱,除非 method 的名稱以及 arguments 都完全相同(即 Override),否則並不會屏蔽它在 base-class 的版本。

三、Composition 與 Inheritance 的選擇
(1)需要在新 class 中使用既有 class 的功能而非其接口,通常使用 composition,新 class 中以 private 形式嵌入既有 class 的對象(即 has - a 關系);

(2)需要使用某個通用性的 class,並基於特定目的對其進行 specializing 工程時,使用 inheritance(即 is - a 關系)。

四、Upcasting
(1)Upcasting:將 derived-class reference 轉爲 base-class reference 的動作。Upcasting 之所以可以進行是因爲 derived-class 其實也是 base-class 對象(即 is - a 關系);

(2)Derived-class 是 base-class 的一個超集合,它至少包含 base-class 的 method,而且可能更多,所以 upcasting 過程中對 class 接口造成的唯一效應是 method 的“丟失”而非“獲得”,這也是 compiler 允許 upcasting 的原因。

五、The final keyword
(1)Final 的適用範圍:data、method、class。

(2)Final data

  • 固定不變的 data:
        1. 永不改變的 compile-time constant:意味著在 compile-time 就可以執行某些計算,從而減少 run-time 的負擔,所以此類 constant 必須是基本類型,而且在定義時就必須給定其值;
        2. 可以在 run-time 被初始化,不可再改變。
  • 如果 data 既是 final 也是 static,那麽它就擁有一塊無法改變的存儲空間;
  • final 修飾的 object reference 被初始化以後就不能改而指向其它 object,但 object 本身的內容卻是可以改變的;
  • 沒有方法可以使 array reference 本身成爲 final。

(3)Blank finals:Java 允許産生 blank final,也就是將 data members 聲明爲 final 但不給予初值。但在任何情況下,blank finals 都必須在使用前完成 initialization(Compiler 強制);

(4)Final arguments:Java 允許將 arguments 聲明爲 final,這意味著 arguments 在 method 內是只讀的;

(5)Final methods

    • 使用 final methods 的原因:

        鎖住 method,使其在 derived-class 內爲只讀,無法被 override;
        出於效率考量:允許 compiler 將此 method 的調用動作轉爲 inline 調用(即不通過 stack,直接調用 method 本體從而提高效率)而非正常的處理方式,所以除非函數足夠小,否則 inlining 可能會適得其反,使效率降低。
  • final & private
        private 也是 final:因爲無法取用 private,自然也就無從 override(但對 private method 進行 override 並不會出錯,因爲 override 實際上並沒有成功,只是産生了一個新的 method),final 可加於 private method 上,但不會帶來任何額外的意義;
        Overriding 只能發生在 method 屬於 base-class 接口時,也就是說,你必須可以將某對象 upcasting 至其 base-class,並調用同一個(同名)method,overriding 才可以使用。
  • (6)Final classes

    • final class 不能被繼承、改動;
    • 無論 class 是否爲 final,data members 都可以是或不是 final,final data 的原始規則仍然適用;
    • final class 是要阻止 inheritance,所以 final class 中的所有 method 自然也是 final,因爲它們不能 override(所以 final class 內的 method 加不加 final 都可以)。

    六、Initialization & Class loading
    (1)有別於傳統語言,Java 的 class 程序代碼在初次被調用時才裝載(初次被調用不僅是指第一個對象被構建之時,也可能是 static member/method 被訪問時;

    (2)首次使用 class 的時間點也正是 static initialization 發生的時候(static object/code block 被裝載時按序進行 initialization)。

    七、Initialization with Inheritance
    (1)Loading & Intialization 的順序:

    • Loading:derived-class -> base-class -> … -> root base-class
    • Initialization: root base-class -> base-class -> … -> leaf derived-class

    (2)産生對象:

    • Basic type -> default value
    • Object reference -> null
    • 喚起 base-class constructor(也可以使用 super 進行調用)。

    (3)Base-class construction:

    • 完成 base-class 的 constructor;
    • instance 變量按序被 initialize;
    • 執行 constructor 本體的剩餘部分。
Jun 18

我覺得大爺我,很性福,剛進程、線程、Unix了一天,就要跑去書市。大爺我,要找:
一本 Eclipse 的參考手冊;
一本 Spring 開發指南(指北也可以);
一本 Hibernate 開發指南(指東也沒問題)。
結果,大爺我,擁用水淋淋的大眼睛的大爺我,找了整個書市,都沒有一本像樣的 EclipseSpring,《精通 Spring》和《精通 Eclipse》千萬不要買,反正老子是悟出來了,凡是國人寫的,名字叫做《精通 XX》的,都不能買,基本上看也不用看。除非某天,某個混球,寫出一本《如何精通精通》來,大爺我,或許還有興趣一看。

於是目標就只剩 Hibernate 了,找到三本:
精通 Hibernate
深入淺出 Hibernate
精通 Hibernate:Java 對象持久化技術詳解
基於之前的鑒定原則,我已經對第一本沒什麽好感了,粗粗略過,果不其然,我相信作者技術很棒,嗯,也只是技術很棒,所以就犯了個技術人員寫作很常遇到的毛病,沒有從全局出發,體貼讀者,一開始,就已經陷入了細節當中,瘦,沒有價值,Pass~
第二本,一翻,看到了作者的照片,夏昕(挺帥的哦),OpenDoc 創始人…….怎麽這麽熟….想不起來,好像是 HibernateCN 的人,我想想我想想我想想…….
最後一本,大名鼎鼎的孫衛琴女仕的新作,昨晚找了找,China-pubDearbook 裏,都是同類書籍的銷售冠軍,嗯,Linda 真的很火。

同樣¥59,《深入淺出 Hibernate》 甚至連光盤都沒有,而我們的衛琴姐姐則給了我們大了30%的版面和一張光盤,盡管這和書的質量,沒有什麽關系,但這對讀者來說,很友好。於是,我就開始,對《深入淺出 Hibernate》有好感了,因爲,好東西,是不需要修飾的。

於是,大爺我翻來複去的比較了 5 分鍾,越比越 TMD 郁悶,《深入淺出 Hibernate》:循序而進,簡潔友好,而且只針對 Hibernate,其它多餘的東西,你想要也沒有;而《精通 Hibernate:Java 對象持久化技術詳解》則像大雜燴,似乎恨不得把所有相關的東西,都 TNND 一次過給你說清楚,結果卻是幾邊不到岸,大爺我,想不明白,就這水平的一本書,爲什麽還可以在銷售榜上排第一?

然而很快我就發現自己比較失敗了,因爲,大爺我,發現,銷售榜上排第一,不是因爲這本書寫得有多好,而是因爲我們的衛琴姐姐是女人,是IT女人,是IT寫手中的女人,是IT寫手中的美麗女人,是IT寫手中的首個國內的美麗女人。

孫衛琴

本人,並不岐視從事任何工作的女性,但卻鄙視任何炒作,尤其是在傳播知識的行業中。資訊行業的書籍,國內發展得並不好,好的譯本少之有少,原創的好作品更是鳳毛麟角,雖然網上有很多原版的資料看,但不是每個人都喜歡 Google,更沒幾個,願冒著掛掉眼睛的危險,把幾百頁的 PDF 看完,盡管它們大多都是免費的。國內的出版業界以至於作者們,少些浮躁,多些實幹,會比叫叫嚷嚷有意義得多。

只有一深一淺一里一表的,才能真正的看透問題。大爺我,比較喜歡九淺一深,瘦,老闆我要這本《深入淺出 Hibernate》。

Jun 11

Thinking in Java

【Chapter 2】 Everything is an Object

【Chapter 3】 Controlling Program Flow

【Chapter 4】 Initialization & Cleanup

【Chapter 5】 Hiding the Implementation

【Chapter 6】 Reusing Classes

【Chapter 7】 Polymorphism

【Chapter 8】 Interfaces & Inner Classes

【Chapter 9】 Holding Your Objects

【Chapter 10】 Error Handling with Exceptions

【Chapter 11】 The Java I/O System

【Chapter 12】 Run-time Type Identification

【Chapter 13】 Creating Windows & Applets

【Chapter 14】 Multiple Threads

【Chpater 15】 Distributed Computing

Jun 08

Super Cow Powers 是 Debian 系統中一股神秘的力量。

講白了是設計師的娛樂,也就是復活節彩蛋程式(Easter Eggs)。讓某些程式呣呣叫。曾經有人將『超級牛力』視為沒有任何文件說明而回報瑕疵,然而基於娛樂價值,這些指令應該不會納入文件,繼續保持神秘,好讓新手丈二金剛摸不著腦袋直到發現這些復活節彩蛋,捧腹大笑。更好笑得是 aptitude 宣稱沒有超級牛力,大概直到駭客深究程式碼才會發現神秘的蛇吞象。還有一些非套件系統專用的程式含有此類冷笑話,請往程式碼裡翻。

如果你很喜歡見牛說話,請安裝 Debian Package: cowsay,這是一個可設定的思想牛/多嘴牛程式。

apt-get

$ apt-get -h
apt 0.5.24 for linux i386 compiled on Mar 16 2004 22:49:26
Usage: apt-get [options] command

apt-get [options] install|remove pkg1 [pkg2 …]
apt-get [options] source pkg1 [pkg2 …]

apt-get is a simple command line interface for downloading and installing packages. The most frequently used commands are update and install.

Commands:
update - Retrieve new lists of packages
upgrade - Perform an upgrade
install - Install new packages (pkg is libc6 not libc6.deb)
remove - Remove packages
source - Download source archives
build-dep - Configure build-dependencies for source packages
dist-upgrade - Distribution upgrade, see apt-get(8)
dselect-upgrade - Follow dselect selections
clean - Erase downloaded archive files
autoclean - Erase old downloaded archive files
check - Verify that there are no broken dependencies

Options:
-h This help text.
-q Loggable output - no progress indicator
-qq No output except for errors
-d Download only - do NOT install or unpack archives
-s No-act. Perform ordering simulation
-y Assume Yes to all queries and do not prompt
-f Attempt to continue if the integrity check fails
-m Attempt to continue if archives are unlocatable
-u Show a list of upgraded packages as well
-b Build the source package after fetching it
-V Show verbose version numbers
-c=? Read this configuration file
-o=? Set an arbitary configuration option, eg -o dir::cache=/tmp

See the apt-get(8), sources.list(5) and apt.conf(5) manual pages for more information and options.

This APT has Super Cow Powers.

$ apt-get moo

         (__)
         (oo)
   /------/
  / |    ||
 *  /---/
    ~~   ~~

….”Have you mooed today?”.

apt-build

$ apt-build -v
apt-build version 0.9.2.1
$ apt-build moo

            (__)      ~
            (oo)     /
     _____/___/
    /   / /  /
   ~  /  *  /
      / ___/
*----/
    /   
   /    /
  ~    ~

…”Have you danced today ? Discow !”…

aptitude
這裡顯示已翻譯中文版本。

$ aptitude –help
aptitude 0.2.14.1
用法: aptitude [-s 檔案名] [-u|-i]
aptitude [選項] …
動作 (如果未指定,aptitude 將進入交互模式):

install - 安裝/升級套件
remove - 移除套件
purge - 移除套件並刪除其配置檔案
hold - 將套件置於保持狀態
unhold - 取消對一個套件的保持命令
markauto - 將套件標記為自動安裝
unmarkauto - 將套件標記為手動安裝
forbid-version - Forbid aptitude from upgrading to a specific package version.
update - 下載新/可升級套件列表
upgrade - 執行一次安全的升級
dist-upgrade - 執行升級,可能會安裝和移除套件
forget-new - 忽略哪些套件是“新”的
search - 按名稱 和/或 表達式搜尋套件
show - 顯示套件細節資訊
clean - 刪除已下載的套件檔案
autoclean - 刪除舊的已下載套件檔案
download - 下載套件的 .deb 檔案

選項:
-h 此求助純文字
-s 模擬動作,但是並不真正執行。
-d 僅僅下載套件,不安裝或者移除任何東西。
-P 總是提示確認執行動作
-y 假設對簡單的 是/否 問題回答“是”
-F 格式 指定顯示搜尋結果的格式;參見手冊
-O 次序 指定如何排列顯示搜尋結果;參見手冊
-w 寬度 指定顯示搜尋結果的格式寬度
-f 積極地嘗試修復損壞的套件。
-V 顯示就要安裝的套件版本。
-D 顯示自動改變的套件的依賴關係
-Z 顯示每個套件的安裝尺寸的變化。
-v 顯示附加訊息。(可能會提供多次)
-t [release] 設置將要安裝的套件的發布版本
–with(out)-recommends, –with(out)-suggests 指定是否將推薦(建議)處理為強依賴關係。
-S fname: 從檔案名中讀取 aptitude 的延伸狀態資訊。
-u : 開始執行時下載新的套件列表。
-i : 開始執行時執行安裝。

這個 aptitude 無超級牛力。
$ aptitude moo
此軟體沒有復活節彩蛋程式。
$ aptitude -v moo
此軟體真的沒有復活節彩蛋程式。
$ aptitude -vv moo
我不是已經告訴你這個軟體真的沒有復活節彩蛋程式了嗎?
$ aptitude -vvv moo
停啦!
$ aptitude -vvvv moo
好啦,好啦,如果我給你復活節彩蛋,你是不是就閃人?
$ aptitude -vvvvv moo
好啦,你贏了。

                            /----
                    -------/      
                   /               
                  /                 |
-----------------/                  --------
----------------------------------------------

爽了嗎?
$ aptitude -vvvvvv moo
這是什麼? 這當然是一隻大象被一隻蛇吞掉。你有沒點常識?
$ aptitude -vvvvvvv moo
走開啦,我正試著專心

Jun 06

我看完下巴都快笑掉了~

發生在德國一個名為 stopHipHop 的 IRC channel 上,原文出自一個德語論壇:
http://www.stophiphop.de/modules/news/article.php?storyid=184

不過我看不太懂,而且我們偉大的主角的德語也不太好,於是,有人翻譯成英文了:
http://www.totalillusions.net/forum/index.php?showtopic=328&st=0

我來轉一下:

Never guessed this would have gotten this amount of traffic. This is the story about a hacker who had little problems… Original from the german site http://www.stophiphop.de/, story can be found here: http://www.stophiphop.de/modules/news/article.php?storyid=184, please include this link if you repost this anywhere (site might be down, quite a lot of people are reading this). I, Cochrane, did not write this. I only translated it. Some people seem to get that wrong, it was Elch from www.stophiphop.de who first published this log.

In case you don’t speak german (just as this hacker), I’ve tried a little translation to english. I might have made some spelling errors, but the original spelling wasn’t perfect either. The guy really said “buy buy” in the german version. I’ve posted this on the forum on http://www.desertcombat.com before, so if this looks familiar, might be the same. I’ve corrected some mistakes and put the < > back to the right version (The DC forum does not support them). All censoring was done by this particular forum here. Notice that in germany we get DST earlier than in the US.

The story starts (I’m shortcutting here) with an 【Please control your cussing】 insulting everyone on the IRC channel. Most people there believed it was rather funny. To quote him: “we 【Please control your cussing】 satanists victims winos like you in the ass every day” (this did not make sense in german, either. The translator). But it got even more funny.

For information: The dangerous hacker is called bitchchecker and the one being hacked and original author of the comments, who is talking here, is known as Elch. 127.0.0.1 is always the IP-address of the computer you’re currently using, any request there will return to your computer.

* bitchchecker (~java@euirc-a97f9137.dip.t-dialin.net) Quit (Ping timeout#)
* bitchchecker (~java@euirc-61a2169c.dip.t-dialin.net) has joined #stopHipHop
【bitchchecker】 why do you kick me
【bitchchecker】 can’t you discus normally
【bitchchecker】 answer!
【Elch】 we didn’t kick you
【Elch】 you had a ping timeout: * bitchchecker (~java@euirc-a97f9137.dip.t-dialin.net) Quit (Ping timeout#)
【bitchchecker】 what ping man
【bitchchecker】 the timing of my pc is right
【bitchchecker】 i even have dst
【bitchchecker】 you banned me
【bitchchecker】 amit it you son of a bitch
【HopperHunter|afk】 LOL
【HopperHunter|afk】 shit you’re stupid, DST^^
【bitchchecker】 shut your mouth WE HAVE DST!
【bitchchecker】 for two weaks already
【bitchchecker】 when you start your pc there is a message from windows that DST is applied.
【Elch】 You’re a real computer expert
【bitchchecker】 shut up i hack you
【Elch】 ok, i’m quiet, hope you don’t show us how good a hacker you are ^^
【bitchchecker】 tell me your network number man then you’re dead
【Elch】 Eh, it’s 129.0.0.1
【Elch】 or maybe 127.0.0.1
【Elch】 yes exactly that’s it: 127.0.0.1 I’m waiting for you great attack
【bitchchecker】 in five minutes your hard drive is deleted
【Elch】 Now I’m frightened
【bitchchecker】 shut up you’ll be gone
【bitchchecker】 i have a program where i enter your ip and you’re dead
【bitchchecker】 say goodbye
【Elch】 to whom?
【bitchchecker】 to you man
buy buy
【Elch】 I’m shivering thinking about such great Hack0rs like you
* bitchchecker (~java@euirc-61a2169c.dip.t-dialin.net) Quit (Ping timeout#)

What happened is clear: That guy entered his own IP-Adress in his mighty Hack-Tool and crashed his own PC. This way, the attack on my PC was a failure. I was already starting to think that I did not have to worry, but a good hacker never calls it a day. Two minutes later he returned.

* bitchchecker (~java@euirc-b5cd558e.dip.t-dialin.net) has joined #stopHipHop
【bitchchecker】 dude be happy my pc crashed otherwise you’d be gone
【Metanot】 lol
【Elch】 bitchchecker: Then try hacking me again… I still have the same IP: 127.0.0.1
【bitchchecker】 you’re so stupid man
【bitchchecker】 say buy buy
【Metanot】 ah, 【Please control your cussing】 off
【bitchchecker】 buy buy elch
* bitchchecker (~java@euirc-b5cd558e.dip.t-dialin.net) Quit (Ping timeout#)

There was a tension in the room… Would he manage, after these two failures, to crash my PC? I waited. Nothing happened. I felt relieve… Six minutes passed by until he prepared the next wave of attack. Being a Hacker, who usually cracks whole data centers, he knew what his problem was now.

* bitchchecker (~java@euirc-9ff3c180.dip.t-dialin.net) has joined #stopHipHop
【bitchchecker】 elch you son of a bitch
【Metanot】 bitchchecker how old are you?
【Elch】 What’s up bitchchecker?
【bitchchecker】 you have a frie wal
【bitchchecker】 fire wall
【Elch】 maybe, i don’t know
【bitchchecker】 i’m 26
【Metanot】 such behaviour with 26?
【Elch】 how did you find out that I have a firewall?
【Metanot】 tststs this is not very nice missy
【bitchchecker】 because your gay fire wall directed my turn off signal back to me
【bitchchecker】 be a man turn that shit off
【Elch】 cool, didn’t know this was possible.
【bitchchecker】 thn my virus destroys your pc man
【Metanot】 are you hacking yourselves?
【Elch】 yes bitchchecker is trying to hack me
【Metanot】 he bitchchecker if you’re a hacker you have to get around a firewall even i can do that
【bitchchecker】 yes man i hack the elch but the sucker has a fire wall the
【Metanot】 what firewall do you have?
【bitchchecker】 like a girl
【Metanot】 firewall is normal a normal hacker has to be able to get past it…you girl^^
【He】 Bitch give yourself a jackson and chill you’re letting them provoce you and give those little girls new material all the time
【bitchchecker】 turn the firewall off then i send you a virus 【Please control your cussing】er
【Elch】 Noo
【Metanot】 he bitchchecker why turn it off, you should turn it off
【bitchchecker】 you’re afraid
【bitchchecker】 i don’t wanna hack like this if he hides like a girl behind a fire wall
【bitchchecker】 elch turn off your shit wall!
【Metanot】 i wanted to say something about this, do you know the definition of hacking??? if he turns of the firewall that’s an invitation and that has nothing to do with hacking
【bitchchecker】 shut up
【Metanot】 lol
【bitchchecker】 my grandma surfs with fire wall
【bitchchecker】 and you suckers think you’re cool and don’t dare going into the internet without a fire wall

He calls me girly and says only his grandma would use a firewall. I know that elder people are much more intelligent then younger, but I couldn’t let that rest. To see whether he really is a good hacker I lie and let everything as it is. I don’t have a firewall at all, only my router.

【Elch】 bitchchecker, a collegue showed me how to turn the firewall off. Now you can try again
【Metanot】 bitchhacker can’t hack
【Black*TdV*】 nice play on words ^^
【bitchchecker】 wort man
【Elch】 bitchchecker: I’m still waiting for your attack!
【Metanot】 how many times again he is no hacker
【bitchchecker】 man do you want a virus
【bitchchecker】 tell me your ip and it deletes your hard drive
【Metanot】 lol ne give it up i’m a hacker myself and i know how hackers behave and i can tell you 100.00% you’re no hacker..^^
【Elch】 127.0.0.1
【Elch】 it’s easy
【bitchchecker】 lolololol you so stupid man you’ll be gone
【bitchchecker】 and are the first files being deleted
【Elch】 mom…
【Elch】 i’ll take a look

In panic I started the Windows Explorer, my heart beating faster. Had I under-estimated him?

【bitchchecker】 don’t need to rescue you can’t son of a bitch
【Elch】 that’s bad
【bitchchecker】 elch you idiout your hard drive g: is deleted
【Elch】 yes, there’s nothing i can do about it
【bitchchecker】 and in 20 seconds f: is gone

Yes, true, G: and F: were gone. Did I ever have them? Doesn’t matter, I did not have time to think, I was scared. bitchchecker was comforting me with a music tip.

【bitchchecker】 tupac rules
【bitchchecker】 elch you son of a bitch your f: is gone and e: too

Drive E:? Oh my god… All the games are there! And the vacation pictures! I instantly take a look. Everything still there. But the hacker said it was deleted….

Or isn’t it happening on my computer?

【bitchchecker】 and d: is at 45% you idiot lolololol
【He】 why doesn’t meta say anything
【Elch】 he’s probably rolling on the floor laughing
【Black*TdV*】 ^^
【bitchchecker】 your d: is gone
【He】 go on BITCH

The guy is good: My CD-drive is allegedly deleted! Bitchchecker turned my ancient disk sucker into a burner! But how did he do this? I’ll have to ask him. Some encourage him. He himself is giving advice how to avoid the disaster on my hard drives.

【bitchchecker】 elch man you’re so stupid never give your ip on the internet
【bitchchecker】 i’m already at c: 30 percent

Should I tell him he’s not attacking my computer?

* bitchchecker (~java@euirc-9ff3c180.dip.t-dialin.net) Quit (Ping timeout#)

Too late… It’s 20:22 when we get the last message of our hacker with the alias “bitchchecker”. We see that he has a “Ping timeout”. We haven’t seen him since then… must be the Daylight Saving Time.

Notice: We are well completely aware that maybe bitchchecker was just playing a game with us. He also claimed to have german as his major field of study.

【bitchchecker】 shut up man i have advanced german

Added by the translator: I completely forgot the last notice - sorry. His german is about as bad as my translation of it (this was intended). Notice that the german expression “Leistungskurs” (the most advanced course you can take in the kind of school that prepares you for university) can not really be translated into english. I tried with “advanced” and “major field of study”, hope it fits.

Someone also made a translation to spanish, you can find it at http://www.aristasweb.net/noticias.php?idn=3119&clase=100
Nichol4s translated it to italian, you can find it at http://www.ngi.it/forum/showthread.php?p=6469535#post6469535

Moto 學園也把它翻了過來~
http://moto.debian.org.tw/viewtopic.php?t=6572

最讓人憤飯的是,stopHipHop 的人居然還爲此做了件 T-shirt,不知道這名偉大的 Hacker BitchChecker 看到後會怎樣?