there is no attribute “onClick”

上網加速入口的代碼在W3C標籤檢驗器檢查時發現了 there is no attribute “onClick”錯誤. 通過搜索才發現原來XHTML 1.0 Transitional標準不允許attribute中包含大寫字母, 將代碼中<li id=”search1_tab” class=”btn1″  onClick=”setTab(‘search’,'search1′)”>Google</li>中的”onClick改成onclick後才通過. 類似常見的attribute還有onMouseOver,onFocus等, 雖然大寫的好看一些, 但為了通過W3C檢驗只能改成小寫.  當然如果你使用的是html標準的代碼(如百度和google使用的代碼), 大小寫的屬性不會帶來問題.

發表在 站長文檔 | 留下評論

上網加速入口 帶加速度的網站

經常上網, 經常要打開不同的頁面. 如在淘寶中搜索一個手機的價格, 然後在百度中搜索這個手機的參數. 如果可以把網上經常使用的功能整合在一起, 上網不是方便很多? 於是有了製作一個這樣網站的想法. 上網加速入口誕生了 — 帶着”少一個點擊, 多一點直觀 加快你的上網速度”的理念.
現在上網加速入口的功能還非常簡單, 看起來更像個導航網站, 以後有時間會不斷加強它的功能, 讓它有更完善 — 關鍵詞:為上網加速!!!

發表在 信息處理 | 留下評論

瀏覽器操作系統?

現在越來越多的工作已經從本地電腦轉到網上了, 網頁的重要性慢慢地凸現出來.
google已經推出了很多原先微軟指掌着的軟件服務, 不同的是google把這些軟件從硬盤搬到了網頁裡面. 如google的日程安排軟件Calender, 記事本Notebook, 計算器, 文本處理Docs等等. 這些讓我相信或許終有一天, 作為網絡終端的個人電腦一開機, 沒有其它的, 只有一個google網頁. 在個人電腦里完成的所有工作在網頁上也一樣可以完成. 不是嗎? 不是越來越多的網頁網絡遊戲推出了嗎?

真的會這樣嗎? 昨天看到的一個火狐輸入法讓我開始動搖這個本已慢慢要堅固了的信念.
“火輸(火狐輸入法)是一款集成於FireFox瀏覽器中文拼音輸入軟件.” 只能在FF中使用. 我剛一聽到這一介紹, 當即被雷到了. 一個輸入法只能在一個瀏覽器中使用! 這有什麼意思???

但仔細一想, 我開始反問: 如果”火輸”是一種輸入法, 那FF是什麼? FF將是一個操作系統!!! 是的. OS不應該是網頁, 因為網頁終還是要一個瀏覽器中打開的. 網頁最多是applications, 而瀏覽器才是真正的operating system!!! (到時windows和linux應該只能算是一種firmware吧…)

不是嗎? 你看看現在FF的各種插件, 有FTP下載上傳, 有的記事本, 有todo list, 有音樂播放器, 甚至也有大量遊戲… 而且FF裡面還有google和新浪, 如果FF是系統, 這些不都是它的應用軟件嗎?

所以, 也許不是網頁, 而是瀏覽器, 在未來會主宰個人電腦. 也許這也是為什麼google, 要在跟Mozilla合作這麼多年後, 推出自己的瀏覽器Chrome的原因吧.

發表在 信息處理 | 留下評論

再讀李想

這兩天一直在讀李想的blog和其它想關的文章.

李想應該是所有站長中把執行做得最好的一位.
他網站的成功, 來源於他對 目標-執行-成果 這一簡單結構的信仰. 為了達到目標, 他會去做, 而且全力以赴!

讀了這些文章, 到現在明白了三點:
1.不一定要當天才. 不一定要做最前衛的事情. 李想做的都是已經有人在做的網站. 但他靠自己的努力把這些網站做得更大.
2.達到目標須要堅持不懈的努力執行. 學習完成目標的能力, 在無數方法中找到真正可以下手的方法.
3.網站須要流量, 特別是剛開始的時候.
和流量相關的關鍵詞: 美女, 免費, 下載. 第一數字平台泡泡網可以做娛樂, 因為娛樂的人流有可能會關注數碼產品. 把流量帶到網站了, 就邁出了第一步!!

發表在 成敗幾何, 站長文檔 | 留下評論

丁磊成功紀要

1.學生時代的丁磊勤奮好學, 熱衷編程技術.
2.畢業後丁磊毅然放棄電信的工作, 到當時比較開放的廣州做程序員
3.在中國網絡發展的初期的1997年, 26歲的丁磊靠自己寫程序積攢和朋友借來的50萬創辦網易公司. 公司取名叫“網易”,希望上網變得容易一點.
4.丁磊寫出免費郵件系統, 靠這個程序掙了幾百萬元.
5.公司藉由自己的9G硬盤, 推出20M免費個人空間服務, 籍此取得CNNIC的1998年度最佳網站排名第一名. 丁磊開始在網站上賣廣告, 當年網站利潤達400多萬元.
6.正值網絡泡沬期的外國投資商看好這個中國排名第一的網站. 排隊給丁磊送錢. 2000年網易在美國上市.
7.剛上市科技股開始崩盤, 網易一度面臨摘牌. 丁磊企圖賣掉網易, 但沒成功.
8.之後網易加入 網絡遊戲《大話西遊》,手機短信等業務, 令公司起死回生.
9.網易股價一路上升. 2003年, 持股超過50%的丁磊成為中國首富.

丁磊的話:
我覺得“創新”是個很危險的事情. 微軟公司的很多產品都不是自己發明的,譬如window,word和excel等等,都是follow別人的,但是它不斷地做,不斷地改進,就做成功了。

美國可口可樂,這麼多年就做可口可樂;吉列這麼多年來一直只做刮鬍須刀;把一個產品做深做精很重要。

人的一生總會面臨很多機遇,但機遇是有代價的。有沒有勇氣邁出第一步,往往是人生的分水嶺。

發表在 成敗幾何 | 留下評論

Google又露馬腳了!

在igoogle頁面中, 發現每個gadgets的標題欄有"最大化"的按鈕了!!! 和windows/蘋果/linux等其它操作系統上的程序窗口差距又小了很多, 只等時機成熟加上file/ edit/ tools等菜單選項了.

發表在 信息處理 | 留下評論

責任

深山, 初秋, 傍晚.
“長官,這是在死者大腦發現的.”巡警遞過一個包裹. 包裹満是灰塵的, 好像很久沒被打開過了.
長官慢慢地打開, 發現裡面躺着一個稚嫩的小身體, 接觸了空氣, 慢慢地伸展開小手小腿, 瞪着大眼睛靦腆地看着兩位警官.
“是一個夢!”巡警接過後驚喜地叫了出來, 開始用手撫摸它的肚皮. 小東西咧嘴笑了起來, 興奮地手舞足蹈.
長官從包里掏出一個發光的儀器, 對着小東西掃了一下, 光線透過了晶瑩的身體.
“環海南…”巡警跟着儀器發出的光線慢慢地念道.
“放下吧.”長官一邊收起儀器一邊說.
巡警似乎沒有聽見, 一邊看着鼓起雙腮吸自己食指的夢, 一邊笑呵呵地對長官說:”你看, 它一定餓了.”
長官轉過身來. 這時巡警奪回了自己的食指, 正用雙手作魔爪狀捏爪小東西的小臉, 搞得小東西雙手不停地在胸前拍打反擊不算, 還多次試圖抬起小腿抵抗. 戰況十分激烈.  巡警似乎玩的很開心, 臉上映着紅光, 發出的笑聲和夢的笑聲夾雜在一起.
“被遺棄的夢太多了…”長官似乎若有所思. 但看到夕陽, 沉吟的臉馬上消失了:“今天還有幾處?”
“8個. 下一個在北城區. 好像是那個吃安眠藥的小女孩.”
“走吧!”長官推下了後車廂門.
巡警找了個塊柔軟的草地, 依依不捨地將小東西放在那裡. 小東西瞪在大眼睛迷惑地看着巡警, 咧着的嘴好像還在期待巡警的新花樣.
“轟”的一聲, 發動了的汽車順着路向山外開去.
飛馳着的警車壓過一塊石頭, 巡警和長官在車內跳了一下. 後車廂飄出一張沾着血跡的小紙條. 紙條在空中蕩漾了兩下, 停在了路面上.
上面歪歪扭扭地寫了一行字:”她走了, 帶走了我的一切. 我的生命已經沒有任何意義…”
草地上一直一聲不響地看着車塵慢慢消失的小東西突然眉毛動了一下, 大哭了起來. 哭聲填満了整個空寂的山谷.

發表在 我思我在, 某時雨集 | 一條評論

上海

地鐵的門一開, 大家以讓我驚奇的速度衝進去爭座位. 兩個老人和提着大包的我都只能一起站着. 但我對這兩位老人的同情也沒持續多久– 當我在下一站看着她們用很不好看的姿勢兇猛霸佔離自己身子很遠的座位時我甚至開始懷疑那些搶座位的青年都是她們的親生子女…
在公車上抱着小孩的母親也只能站着. 坐在她旁邊的女孩竟不時帶着微笑用爪子去挑逗那小孩稚嫩的腳掌…她(以及車內所有坐得穩如泰山的人)達到化境的心安理得和車內汽油散發出來的臭味夾雜在一起讓我感到嘔心.
下車後我靠近一十來歲的男孩, 本想打聽一下附近有沒有超市, 一開口那男孩就急退2米多遠, 似乎他親眼見過同學因為避得太慢而被路人一口吃掉的. 也許又會是她媽媽見過, 然後在在他睡覺前講陳述於他聽. 我同情這位能把故事講得有聲有色的母親. 因為正如公車上那位母親一般, 她們根本就沒見過真好人.
在這裡住了一年多的妹妹, 終也沒有出來接我, 雖然我轉了兩三次車. 在大雨瓢潑中. 在陌生的馬路上.
這一切不禁讓我懷念起許昌來…

發表在 某時雨集 | 3 條評論

用Benchmark測試不同ruby代碼的運行速度

如果比較功能相同的幾組代碼的運行速度, 可以使用ruby語言里的Benchmark模塊.
(開始前 設置中文環境, $KCODE = ‘u’)
比如, 連接兩個字串, 如:
str1 = "中國"
str2 = "一定強!!!"

可以使用+
?> str1 + str2
=> "中國一定強!!!"
也可使用
>> "#{str1}#{str2}"
=> "中國一定強!!!"
還可以使用<<
>> str1 << str2
=> "中國一定強!!!"
(注意這種方法會改變str1的值,
>> str1
=> "中國一定強!!!")

如果想要知道這三種方法哪一個速度更快, 就可以使用Benchmark比較.
先定義三個不同的方法:

def joined_by_plus(str_a, str_b)
    500000.times do; str_a.dup + str_b; end
end

def joined_by_uniting(str_a, str_b)
    500000.times do; "#{str_a.dup}#{str_b}"; end
end

def joined_by_adding(str_a, str_b)
    500000.times do; str_a.dup << str_b; end
end

因為這三種方法速度都很快, 比較一次的時間很難分出上下, 所以每種方法都做500000次.
因為<< 會改變變量, 所以在第三個方法中使用了str_a.dup, 備份出一個str_a來測試, 其它二個方法雖然從理論上不須要這個dup, 但為了時間上的公平, 也給它們加上了.

下面是測試代碼:
require ‘benchmark’

Benchmark.bmbm(10) do |t|
  t.report(‘加號連接’) { joined_by_plus(str1, str2) }
  t.report(‘放進引號’) { joined_by_uniting(str1, str2)}
  t.report(‘使用<<’) { joined_by_adding(str1, str2)}
end

bmbm是Benchmark的測試方法, 這是雙重測試, 用來提高精確度. 裡面參數10用來調節標籤在結果里的顯示佔位寬度, 不對結果產生影響.
report(‘加號連接’)里的參數是為相應測試的標籤名, 用來區別測試結果.

下面就是結果:

Rehearsal ————————————————
加號連接   1.800000   0.580000   2.380000 (  2.435614)
放進引號   2.080000   0.590000   2.670000 (  2.706669)
使用<<       2.000000   0.580000   2.580000 (  2.635540)
————————————— total: 7.630000sec

                   user     system      total        real
加號連接   1.810000   0.600000   2.410000 (  2.476613)
放進引號   2.050000   0.600000   2.650000 (  2.656080)
使用<<       1.960000   0.600000   2.560000 (  2.567434)

因為使用了bmbm方式, 所以會有兩個結果, 第一個是演習結果, 第二個是真實結果.  如果使用bm方法, 將只會有一組結果.
結果有user時間, 系統時間, 總時間和實際花費的時間. 單位為秒.

從結果可以看出, 使用+連接兩個字串時速度最快, 而放進引號的方法最慢. 不過從結果也可以看出即使進行500000執行的結果也相差在0.3秒之內, 平時換用問題不大.

看來不是這一次, 希望下次你在自己的Benchmark試驗中, 會發現給你的程序帶來巨大速度提供的代碼.

發表在 Ruby on Rails | 留下評論

用ruby語言以句子為單位拆分一個字串

目標, 用ruby語言以句子為單位拆分一個字串. 如:
給出字串:
s="這是一個句子,另一個句子.一個新句子!難道這不是另一個句子嗎?"
將它分拆為:
 ["這是一個句子,"], ["另一個句子."], ["一個新句子!"], ["難道這不是另一個句子嗎?"]
樣式.
測試前將ruby的$KCODE環境變量設置為’u', 啟動UTF8編碼支持中文.
$KCODE=’u’
嘗試1:
>> s.split(/\.|,|\?|\!/)
=> ["這是一個句子", "另一個句子", "一個新句子", "難道這不是另一個句子嗎"]
等同於:
>> s.split(/[.,!?]/)
=> ["這是一個句子", "另一個句子", "一個新句子", "難道這不是另一個句子嗎"]
雖然分開了句子, 但失去了標點.

>> s.split(/([.,!?])/)
=> ["這是一個句子", ",", "另一個句子", ".", "一個新句子", "!", "難道這不是另一個句子嗎", "?"]
用括號將正則組成一組, 標點出來了, 但和句子是分開的.

改用scan
>> s.scan /.+?[.,?!]/
=> ["這是一個句子,"], ["另一個句子."], ["一個新句子!"], ["難道這不是另一個句子嗎?"]
成功了!!

如果一定要這樣:
>> s.scan(/(.+?(\.|\?|\!))/).collect{|p|p[0]}
=> ["這是一個句子,另一個句子.", "一個新句子!", "難道這不是另一個句子嗎?"]
也是可行的.

發表在 Ruby on Rails | 留下評論