2008年1月30日星期三

多人在線聊天

這個是突然想到的主意
剛剛瀏覧網站時想到,怎麼這個網站沒有留這些互動功能?
不過這是一個資料性質的網站
就像維基百科一樣,不怎麼需要互動功能吧?
但現在很流行社區化
甚麼網站都要加留言功能
而且甚麼地方都要加個留言,還有最新留言呀、最新貼子等等一堆垃圾
為甚麼沒有一個軟件,可以即時和正在瀏覧同一網頁或同一網站的人聊天?
………………………………
之前我也想過,寫一個軟件
DHT IM
使用P2P網絡的IM
P2P網絡上的Node分為SuperNode和Node
SuperNode可以承受一定數量的普通連接(非P2P)
用戶生成新密匙也由SuperNode負責,並傳送至用戶的E-mail

聊天也分為公共聊天和私人聊天
公共聊天就和IRC一樣
不過你所說的話全部人都會看到
使用P2P網絡傳送內容(可能會先進行壓縮)
能使用頻度標簽(Channel Tag)
使用後只會見到相同標簽下的內容(就像IRC的一樣)
能同時使用多個標簽
也有Anti-Spam功能
不過可能出現多人使用同一名稱的情況
公共聊天時使用的名稱和私人聊天的分開,可以隨時更改

私人聊天內容是直接傳送,不經過P2P網絡
但也可以群聊(人數可能有限制)
內容會加密,使用公共密匙加密方式
第一次使用需要生成密匙(由自己生成)
公共密匙是傳送給另人的,檔案名稱是自己的E-mail(這樣應該不可能出現相同名字的況,而且符合我希望的IM、E-mail整合)
私人密匙則是自己保管(檔案名稱固定)
私人聊天會以E-mail作識別
也可以使用nickName(可隨時更改)
contact list是某個目錄,裏面存放別人的公匙
要把其他人加入contact list有兩種方法
第一種是用P2P網絡搜尋(可搜尋多種屬性,包E-mail和nickName)
確定加入後就會收到別人傳送過來的公匙,這樣就加入成功
當然也會把自己的公匙傳送給別人
online時會對contact list裏每個人都發一句加密了的信息(例如: i'm online)
如果解密出正確的信息,就會顯示他online(對新加入的連絡人也會做同樣的事)
這樣就不怕帳號被別人非法使用
所以登入網絡時只需要你的私人密匙
要保管好
此外,並不需要登入密碼,是使用私人密匙來驗證身份
如果私人密匙丢失了就重新生成吧
但這樣就需要把新的公匙再次傳送給你contact list裏的所有人(萬一有人沒online你就不能把新的公匙給他,很麻煩。所以要小心保管你的私匙)
(當然也可以在E-mail裏找回來)

第二種方法就很簡單
用自己的方法交換公匙就好了
放在某個目錄下(例如: user)
在該目錄下也可以使用資料夾實現群組(Group)

對於私人聊天,所有用戶的身份像徵都只靠密匙
而公開聊天,則可以利用過濾器的方式
同時實以舊有的「頻度」方式
也可以實現更另類的方式
例如一開始講的,過濾器為網站的URL
這樣就可以和正在瀏覧同一網站的人聊天
當然,程式要能同時使用不同的過濾器
而且每個都要在獨立的分頁運作,不過對話內容可能會混亂

参与自由软件开发的一些建议

via: http://www.linuxgem.org/tip/Suggestions-about-taking-part-in-development-of-free-software.html
感覺很有意思,所以轉過來
其實我一直都想參與開源項目
只是感到自己能力不足,不知可以加入哪一個項目
我非常認同它的第一點
自己搞個新項目,亂寫點垃圾代碼是很不好的開始
單單是敲代碼的話沒問題,至少程式還能跑
但除了coding還有很多事要做的
例如doc,要有足夠的說明使用者才知道這個程式該怎麼用
還有debug的方法,bug trace是怎樣的
文中提及的CVS也不知該怎麼用(現在大多數是SVN吧)
………………………………
这篇文章的原文撰于1999年12月,我不知其作者为谁,也已经忘记是从哪个站点down下来的,只是刚才整理硬盘时,偶然发现了。觉得很好,想翻译给对自由软件开发感兴趣的人们。

许多程序员想参与自由软件项目,但是他们不知道如何才可以置身于其中。这篇文章是一份非正式的“不成文的规则和协议”的收集,谨献给想成为自由软件志愿者的人们。我是经历了许多错误后才了解这些的,并且对于本文中的一些建议,我也无法避免去违反;他们仅仅是一些粗略的准则。我相信每个人也都有自己不同的一套准则的(作者很谦虚啊)。
不要从创建你自己的项目开始

许多人想写自由软件,因此他们做的第一件事是乱写一些代码,贴上GPL协议,再以0.0.1阿拉法版本发行。尽管这可以以此寻寻乐子或作为教学示范,但是总体上说这些做法一无是处。下面来说说为什么会这样:

* 通过添加一些小的特性或者修正一些错误来阅读和学习他人的代码更具教育意义。许多项目都有bug跟踪系统;譬如,在Gnome项目中,我们有 bugs.gnome.org,Debian有类似系统等等。在一个bug跟踪系统中寻找bug并修复它,或者添加一个你想添加的特性才是你首先要做的。
* 很明显,梳理已存在的代码要比进行孤雁单飞的项目更有用处。
* 几乎你想要搞的项目已经有人在做了;一起来完成一个项目要比让两个项目都完不成要好得多。我可以向你保证,有95%的自由软件项目还未有结果便凋谢了。从自我学习的角度,并且也从出名和提高能力的角度来看,你需要人们帮助你的项目能成为那5%。
* 如果你还未潜心参与一个自由软件项目,你将不知道那些事情要做,并且你将会有一段梦魇似的时期来开展你自己的工作。

总之,如果你有一个很酷的想法并且认为它值得去做,一定要做。事实上,我们已经在做它了,而且这些项目中的一部分已经做了很大一部分。如果你有一些hacking经验并且有一个很令人感兴趣的项目,而且这个项目确实没有人在做,那么则一定要做。
编码、编码,还是编码

如果你开始做一个项目,最重要的事情是写代码。你必须要写足够的代码让程序更为有用、漂亮;这可能要数月或多年孤军奋战,除非一些可爱的人们帮助你来做而不是自行其是。你必须经常发布新版本、快速修正bug,并且保持着开发的兴奋。一路走下来,做一个自由软件是一项很繁重的工作。如果你单干,每周起码要干10-20个小时。当然,你可以在现有项目的基础上来做,可以省许多力气,并且可以让你每周工作10-20个小时后,总能看到光明的未来。如果你不能付出这多时间,就不要自讨苦吃。如果你不能写代码,同上。
做好孤军奋战的打算

许多人都想做X程序的开发,或者发布0.0.1阿拉法版本,而当他们的程序没有得到众人的回应时,他们就轻而易举的放弃了。一定要直面惨淡的人生,正视淋漓的鲜血!继续干下去,怎么想就怎么做。

当我们索取帮助时会出现相同的现象。最后,如果一个bug、错误的特性或文档的缺失是你自己的问题,那么你最好自行解决。Hacker们通常很和蔼的帮助不知道如何开始的新手,但迟早他们会期望你能够自行解决属于你自己的问题。
使用邮件列表

如果你有问题,就在列表上发问好了。私下给开发者单独发mail是不礼貌的行为,除非你确信只有他们才可以解答你的问题。在邮件列表上发问,可以让诸多开发人员有可能读到你的问题并予以解答(如果单独向其中某个开发者发邮件,而这个开发者并不负责其项目中你所质询的那个模块,你有可能无法得到答复,因为对方不一定懂得你的问题)。

邮件列表和文档是项目开发者为了向尽可能多的用户提供支持而设立的。因此,要记住每个人都是志愿者,并且你也要尽你所能的解答你能解答的问题。
没有负责人

人们经常期望某人能负责自由软件项目;或者他们期望能指派任务,期望能按期完成。事实上不可能那样的,你没有权利控制其他人做什么,并且也不会有人告诉你要干什么,尽管可能会有许多的建议,你最好能潜心于其中,尽力的完成更多的事。
同他人协作

如果你花费3个月的时间来写一些很酷的新特性,然后发现项目的维护者不喜欢你的想法并且不予接受,或者发现你的工作无法应用在该项目的最新版本,或者发现其他人也做了相同的工作,你可能会不高兴。如果你筹划要做某项工作,应当向项目的维护者提供简短的通告以让他们清楚你的工作意图。很多项目维护者对你的通告持怀疑态度,因为他们曾经受到过太多的通过,但从未看到结果。尽管如此,他们通常会用心给你回复并且可能给你一些建议。

如果你已经是项目的核心开发成员了,更要尽可能的与他人协作,通常使用email、CVS和IRC等工具的组合来完成。CVS可以很好的胜任于各开发者工作的合并任务。
“项目X什么时候完成?”或者“特性X会实现么?”,这类问题没有答案

没有谁能真正保证什么,包括非自由软件的开发者。
指手划脚者误事

指手划脚者貌似什么都懂,但从未写过程序,也不知道如何写程序。如果你不知道如何写程序,那么你就不可能知道软件是如何设计出来的。就是这样,你可能只为人们带来麻烦。

即使不会写程序,也是能为自由软件做很多事情的,譬如报告bug、软件特性征询、写文档、帮助用户解答问题和安装、用户群管理、web维护、服务器管理、为操作系统发行版做安装包等等。Hacker们会感激你喜欢他们的工作以及你的帮助。
潜水也是一种美德

参加一个邮件列表的欲望并且对每件事情都品头论足,这是好事。不过不要变成指手划脚者。如果你有一些相关经验,譬如描述如何再生这个bug、在该领域中有一些专业知识、知道如何回答这个问题,那么就公布出来。其他的事情就不要做了。另外,在一个论坛里在你准备发帖之前,潜水一会儿,看一看这个论坛的文化背景,这是值得称赞的。
了解版权、专利、许可证、商标等等

在卷入自由软件之中时,你有必要了解一点法律常识。这意味着你必须要进行自修了。一种常规的学习方法是在gnu.misc.discuss新闻组上翻阅每周都在重复的论战内容。一种快速的学习方式是阅读GNU站点,有这些名词的特别分析。如果你不明白它们,不要公然去讨论它们。如果你准备写软件并且要对它使用某种许可证时,应该去充分理解它们。
尊重软件包维护者的意愿

当你为一个软件包提交一个补丁时,使用同一份许可、代码风格等等是好事情。如果你正使用 CVS,不要未向包管理员通报就将你的工作提交到 CVS 服务器上。
当提交一个补丁之时,diff命令要使用-u选项

因为许多人都喜欢这么干。
要记住,每个人都是志愿者

对他们报以他们应该得到的尊敬。他们仅仅是因为喜欢才进行工作的。不尊重那些给予了你自由的人是很卑劣的行为。
执着

我们很多人都缺乏这项素质,但是你越是执着于一项特定的任务并完成它,你的工作成果就越有价值。我发现我只能挑一些小任务来做。其他的人们在一些长周期的项目上做的更好。根据你的个性聚集起精力。尽力完成项目,而不是野心勃勃的要做100个。
了解社区

跟随一些新闻站点,譬如一些与你所参与的项目相关的LinuxToday, LWN 或Slashdot等站点,是个好方法。一本关于社区历史的好书叫做《Hackers》,是Steven Levy写的。http://www.gnu.org也有很多信息,在邮件列表上潜水,也可以了解好多东东。
你会愤怒

芝 麻大的事情,无论你做什么或说什么,一些人可能会激怒你。这也许是 internet上独特的现象。当这种事情发生时,没有上过这一课的人会纠缠不休。你不要如此,如果你在邮件列表上潜潜水,你将会了解到谁的观点是正确的,并且谁是习惯性的出离愤怒的人。你需要做个厚脸皮的人。
保持快乐的心

Hacking 是最终目标;坐下来尽情的输出代码或文档。但也有许多通过IRC或Email进行的社交、讨论的机会。大多数时候,写代码也是一件乐事。因此,享受吧。那些只是这一观点的一个部分。
最后,请不要对这份文档或任何条目过于严肃。

2008年1月27日星期日

開放式IM

前一段時間,Gtalk和AIM互通
更早之前,MSN和YM也互通了
傳聞Live Messenger 9也會和Gtalk互通
如果是真的話就好了~
天下IM都互通可以省了很多麻煩
加入開放式的XMPP絕對是好事
在Live Messenger加入Gtalk之前,有可能Skype也加入
到時就不用同一時間上幾個IM了
不知道QQ甚麼時候也會加入呢?
………………………………
在IM有互通的趨向時,望向電子游戲機領域
現在手提游戲機主要有PSP和NDS
家用游戲機則有Wii、Xbox360和PS3
我想講的不是哪個機能好、哪個更好玩
而是
廠商有沒有想過,玩家會因為游戲出在不同平台而煩腦?
Sony出的游戲機都是沒錢賺的
對老任來講,游戲軟件也是收入的主要來源
那為甚麼不出個開放式的平台
各個游戲生產商合作成立一個中立的組織
推出新一代游戲機平台標準
具體生產出來的游戲機則各自負責
情況就像Blu-ray那樣
有個固定的標準
生產出來的播放器則各自各造
這樣一來,游戲機可以有很大的變化
也能夠玩不同的游戲
多好~

2008年1月24日星期四

無線網絡是不安全?

剛才的新聞透視的話題是無線網絡
其實我看到的只是後半部份
我見它說沒有加密的無線網絡不安全

某程度上它是沒錯的
但並不是絕對的
無線網絡沒有加密
其他人能嗅到的都只有沒加密的數據
如果用電腦的使用者有足夠的安全意識
使用沒加密的無線網絡也一樣安全的
………………………………
拿新聞透視的例子
他用電腦上Gmail
但其他人都只能嗅到他去過Gmail
實際上別人不一定能知道他用Gmail做甚麼,他的電郵的內容
因為Gmail可以用https的方式登入
這樣數據是加密了的
我不敢保證這是100%安全,但不是那麼容易就嗅出他的資料

節目中還用了cookies這種方法
其實我不確定他所示笵的是甚麼方法
記者說嗅出使用者的cookies然後登入Gmail
其實這是不太可能發生的
因為cookies無法做到這地步
但不排除他使用了Gmail的BUG

節目裏還有一名progremer
那個人是拿Mac Book的,貌似比較富有
他只用了一個很簡單的嗅探程式
在立法會上說某某議員瀏覽過甚麼網站
但事實上他說不出當時人在網站裏做甚麼
極其量是說他上MSN聊天
因為他用的sniffer是非常簡單的
只是把嗅到的數據用文字顯示出來
二進制的數據就顯示出不知甚麼
所以他能做的事很有限
當然,他絕對可以使用高級點的siffer找包分析
或者在電視節目裏時間有限,能使的不太多

提起他只因為他說了一句話
「無線網絡是不安全的,要上網就接上網線用有線的,有線的就安全。」
我並沒有挑他錯誤的意思,只是想發表一下我的意見

如果說無線網絡不安全,是因為別人很容易就知道你做過甚麼
那憑甚麼說有線網絡就安全?
而事實上,很多使用ADSL或光纖接入Internet的PC都面臨着安全問題
我認為
電腦的安全問題主要是看使用者
就像騎單車
安全意識好的人會穿好保護裝備
萬一不小心跌倒了都有一定的保障
安全意識不好的人很容易就會發生意外

或許這就是記者想表達的
現今社會,透過電腦使用Internet要留意安全問題
特別是透過無線網絡

在十年前,或許正在和你聊天的是一隻狗
但現在,可能連狗都不如

2008年1月16日星期三

3.80-M33-2

前兩天還在愁3.80何時破解
誰不知3.80M33-2都出來了
因為MHP2G的試玩出來了(在PSP的網站)
但要3.80才能玩
呵呵~
現在有得試玩了~~

++++++++++++++++++++++++++++++++++++++++
所謂的試玩原來只是一段無聊的宣傳片OTL

2008年1月15日星期二

下載Flickr裏的照片

某天澳門有個cosplay比賽
貌似規模不是很大的
那天有個『照相佬』,我八掛問了他要相
這裏
原來他用的是Flickr
我見要一張張下載很麻煩,所以就想寫個小程式一口氣下載回來
不過,這已經是一個月前的事了OTL

當然,我不是花了一個月寫這個小程式
事實上是昨晚開始寫的
敲了幾行代碼後就顧着和別人聊天
今天早上起床繼續寫的
其實都花了不少時間
………………………………
現在給出代碼
#!/usr/bin/env python
# coding=utf-8

from xml.dom import minidom, Node
import urllib2, HTMLParser
import os, sys, re

class MyHTMLParser(HTMLParser.HTMLParser):
"""my HTMLParser class"""
def __init__(self):
"""init"""
HTMLParser.HTMLParser.__init__(self)
# creat a list to recode the pictures
self.pics = []
# if it has next page, it will be the URL of next page
self.go_next = ""
self.links = []
# mark if found the target p tage
self.found = 0
self.download = 0

def handle_starttag(self, tags, attrs):
"""if HTMLParser find an open tag, will do this function"""

if tags == 'p':
for attr in attrs:
if attr[0] == 'class' and attr[1] == 'Photo':
# find the photo link
self.found = 1
if tags == 'a':
# if the tag is <a>, jot it down
for attr in attrs:
# find the href
if (attr[0] == 'href'):
t = attr[1]
if self.found:
self.links.append(t)
# find the next page link
elif (attr[0] == 'class' and attr[1] == 'Next'):
self.go_next = t


elif tags == 'img' and self.download:
# if it is the final part, get the final picture's url
for attr in attrs:
if attr[0] == 'src':
os.system("wget "+attr[1])

def handle_endtag(self, tag):
if tag == 'p': self.found = 0

def getPicSrc(self, attrs):
"""get the picture src"""
pic_name = ""
pic_src = ""
for attr in attrs:
# find the information in that tag's attrs
# get the alt value
if (attr[0] == 'alt'): pic_name = attr[1]
# get the src value
if (attr[0] == 'src'): pic_src = attr[1]
if (pic_src):
# if the information is correct, add it to pictures list
pic = "%s: %s" % ( pic_name, pic_src)
self.pics.append(pic)

def old_result(self):
"""return the result"""
pics_list = ""
# creat a string for print out
for i in self.pics:
# find the jpg image
s = re.findall('.*jpg', i, re.I | re.U)
# if find, add them to the pictures list
if ( s ): pics_list += "%s \n" % s[0]
return pics_list

def result(self):
"""return the result"""
links_list = ""
for i in self.links:
links_list += "%s\n" % i
return links_list

class main:
"""main class"""
def __init__(self, url):
# last processing url
self.page_url = ""
self.link_list = []
# the url of next page
self.next_page = ""
print "Program Start"
self.getPage(url)
print "Search all pictures Finished!!"
self.getPic(self.link_list)

def getPic(self, link_list):
"""get the Pictures from Flickr"""
img = "http://www.flickr.com/photo_zoom.gne?id=%s&size=l"
for i in link_list:
for j in i:
id = j.split('/')[-2]
data = self.goLink(img % id)
if (data):
parser = MyHTMLParser()
parser.download = 1
parser.feed(data)

def getPage(self, url):
"""get the Flickr HTML Page"""
# get the data
data = self.goLink(url)
if ( data ):
# creat the HTML Parser
parser = MyHTMLParser()
# get the information
parser.feed(data)
#print parser.result()
self.link_list.append(parser.links)
while (parser.go_next):
print "Next: %s" % parser.go_next
data = self.goLink(parser.go_next)
if data:
parser = MyHTMLParser()
parser.feed(data)
#print parser.result()
self.link_list.append(parser.links)

def getPageDOM(self, url):
"""get the Flickr HTML Page information using DOM"""
# get the dtat first
data = self.goLink(url)
doc = minidom.parseString(data)
for child in doc.childNodes:
if child.nodeType == Node.ELEMENT_NODE and child.tagName == 'body':
# get the body, tree root
self.handle(child)

def handle(self, node):
"""get the information from child"""
for child in node.childNodes:
# check it is element node
if child.nodeType == Node.ELEMENT_NODE:
# get the next page link
if child.tagName == 'a':
if child.getAttribute('class') == 'Next':
self.next_page = child.getAttribute('href')

def goLink(self, input_url):
"""open a url, and return the data"""
# check the url
if ( input_url.startswith('http') ):
url = input_url
elif ( input_url.startswith('/') ):
a = self.page_url.split('/')
url = a[0] + '//' + a[2] + input_url
else:
a = self.page_url.rfind('/')
url = self.page_url[0:a] + input_url
print "Open URL: %s" % url
# creat a request
request = urllib2.Request(url)
# open the url
html_p = urllib2.urlopen(request)
print "Loading........."
# get the html page data from http server
data = html_p.read()
html_p.close()
# return the data
print "download page successful"
self.page_url = html_p.geturl()
return data


if __name__ == "__main__":
if (len(sys.argv) == 2):
main(sys.argv[1])

事實上這只是半完成品
首先,下載時漏了判斷目標圖片(一時心急忘記了OTL)
會把最後頁面裏的所有圖片都下載回來
而且寫了很多沒用的function
是測試時候用的
一開始打算用DOM分析HTML文件
但又搞不懂Python怎麼建立DOM
看書又說DOM不適合這情況

還有,我是用了wget來下載
因為一會兒要出去BBQ
趕時間就偷偷懶
所以這些代碼未必能在其他電腦用
現在要出去啦
今天晚上回來再改進

2008年1月12日星期六

JavaScript新作-實現print

想把JavaScript當成普通的語言使用其實是可行的
基本上用JavaScript也能實現很多事情
在很多語言中都有一個print的function(在C裏是printf)
而JavaScript裏是沒有的(當然啦,可以輸出到哪裏>?)

為了實現這功能,我又寫了一個JavaScript的Function
可以把它儲存成hi.js
(只要hi function就可以了,其他部份只是例子)
然後在HTML的HEAD裏引用就可以
使用方法:
hi("text");
很簡單吧~
………………………………
代碼在這裏
function hi(text)
{
// this function can add new text to the targe area

// get the target element by id
if (document.getElementById("test")) {
var test_area = document.getElementById("test"); }

// check the target element has child nodes or not
if (! test_area.hasChildNodes() ) {

// if it does not has sub text node, creat a new one.
if (document.createTextNode)
var text_node = document.createTextNode(text);
// and add the text inside.
test_area.appendChild(text_node); }

else {

// if it has subnodes, check it is text that was added before or not
if ( test_area.firstChild.nodeType == 3 ) {
// if it was added before, add a newline mark (<br/>)
if (document.createElement)
var new_line = document.createElement("BR");
test_area.appendChild(new_line);

// add the text inside
if (document.createTextNode)
var text_node = document.createTextNode(text);
test_area.appendChild(text_node); } }

}

function load()
{
// use hi function do something
hi("hi~");
hi("next line");
hi('third line');
}

// when page loaded, exec the load function.
window.onload = load;




+++++++++++++++++++++++
現在我發現了一個比較好的辦法
用window.status
例如想看X數值的變化
window.status = X;
這樣就可以在狀態欄看着X的數值
比起印一大堆字出來更方便~

2008年1月10日星期四

可惡的文字水印

不久前發現A9VG有大量的金手指代碼
於是就上去看啦
因為現在PSCX2能玩PS2的游戲啦~
能用模擬玩當然要修改
我用的是emuhaste
能使用XP/RAW 碼
所以就去A9VGG魂的金手指
誰不知複制貼上後發現有大量垃圾字
看源碼,貌似是一堆在class為watermark的span內的垃圾文字
用CSS隱藏了,所以在Browser裏看就正常的,複制貼上後就有一堆垃圾
看來像是文字水印

可怒也!
剛好我在學JavaScript,剛好看的書有講DOM,剛好那本書有講Greasemonkey,又剛好我看了,又剛好我發現A9VG這種行為
於是就自己寫一個Greasemonkey Script
………………………………
// ==UserScript==
// @name dela9vg
// @namespace http://ToKyo-JuPiTer.Blogspot.com/
// @description delete all rubbish in the A9VG
// @include http://bbs.a9vg.com/*
//

// find all span tags
var rubbish = document.getElementsByTagName("span");
for ( var i = 0; i < rubbish.length; i++ )
{
// check all elements is rubbish or not
// if the class is watermark, that is rubbish
if ( rubbish[i].className == 'watermark' )
{
// delete all rubbish, the first child's (text node) value.
// find the fater node of the rubbish first
var container = rubbish[i].parentNode;
// remove the rubbish node, it is more clean
container.removeChild(rubbish[i]);
}
}

其實就是一個普通的JavaScript
想使用很簡單,由於我是使用Firefox的
所以要安裝Firefox的Greasemonkey擴展
使用其他Browser的也可以安裝對應的Greasemonkey
然後把上面的代碼儲存在dela9vg.user.js的text file內(用記事簿?)
接着用Firefox打開它(用Ctrl+O吧)
接着安裝,然後重新打開A9VG
應該可以了~

+++++++++++++++++++++++++++++
稍稍修改了一下,這樣刪除得更干淨~

其實上面這個腳本作少許修改應該可以用在其他網站
如果有誰發現哪個網站也有這樣的行為
迎歡告訴我~

2008年1月2日星期三

星期六-鴉

今個星期六無線會播出鴉
剛剛看到廣告
說甚麼烏鴉力量保護世界囧

只是名字叫Karas,和烏鴉貌似沒甚麼關系
雖然鴉會飛,但不是變成烏鴉飛的
是變戰機(人變的戰機囧)
………………………………
今個星期六就播了
還是高清的
可以算是第一部在澳門香港播出的高清動畫
有少許想錄下來收藏,可惜家裏沒有錄影機
以前買的TV卡又奇奇怪怪的,一個台都收不到
再加上家裏沒有裝有線電視,現在都只有以前的模擬信號
總之是錄不成的啦


熱門文章