[工作札記
]
02 二月, 2006 00:46
一切的真相已經解明了... 米奇
這幾個月來,米奇一直為著電腦間中無故死機而煩惱。由於沒有多少錢,不想只憑推測就走去換硬件。
症狀是這樣的:最初電腦會突然無故Reboot,後來是開了三~四十小時之後硬直當機(註:家中的Linux server已開了機兩年還未關過,米奇家中的電腦都是奴隸),之後reboot總是不順利,就算終於能進入Windows,很多時候不是花畫面後當掉,就是找不到新買回來的SATA硬碟。而花畫面的時候,多數是起動Windows時,Windows標誌顯示期間檢查顯示卡和DirectX的一刻。
最初的想法是可能因為自己的機器幾個月前中過Antinny,可能清洗得不夠徹底而發作吧。於是月前剷了一次機,但是情況還是偶然出現。
然後是想到溫度問題,於便拆掉了電腦的面板,又拆開機器檢查一下裡面的風扇有沒有已經死掉的沒發覺,不過沒有發現。
連這個也沒問題就開始頭大了,由於同時有花畫面和同一隻硬碟經常不見了的現象,所以想過可能是顯示卡死掉和硬碟死掉的可能性。米奇最不希望是硬碟死掉,因為裡面有很多珍藏品啊。
後來發現,如果在出問題後連火牛的總電源也關掉,等一分鐘左右再開機,大多數情況下還是會正常開動的。於是,就生出了新的可能性--會不會是火牛或底板的問題呢?不過米奇一向都不用隨殼附送的火牛,而是另買2theMax的牛魔王來用的,好難令米奇相信問題出自名牌火牛身上。
這兩天問題出現得更頻繁,有時候即使關掉火牛的總電源,顯示卡仍是偶然會有無畫面的訊號送給熒幕,而鍵盤上的燈更會在沒有電源的情況下閃動,非常靈異。
不過,這就讓米奇想到問題的原因...為了確定問題,米奇首先將新買回來的SATA硬碟拿掉,機器隨即順暢地運行。接著,又將一隻舊硬掉拆走,接回SATA硬碟,機器同樣運作正常。那米奇便可以斷定,這是由於火牛的出力不足引起了。
米奇的機器過去裝有三隻硬碟和一個DVD+RW。自從加入了新的SATA之後,問題就接踵出現。看來連380W的火牛,也不能應付五件長期連接、經常運轉的硬件哩。如果你那一直運作正常的電腦突然出現以上症狀,不妨查看一下會否是火牛出力不足的問題吧。換火牛可比換其他硬件化算得多哩。
引用URL : http://blog.comicparty.com/trackback.php?id=172
[工作札記
]
19 十二月, 2005 13:00
回到初階:一些給遺忘了的編程指令技巧 米奇
有兩個指令的使用技巧很少在編程教本中提及,而且這些技巧放在多種語言上也用得著。米奇也經常忘記,所以特地寫下來留給日後參考。
1. 多條件的 for 迴圈:
一般在寫 for 迴圈時我們會給上一個當作計數器用的變數,如:
for ($i=0; $i<10; $i++) { ... }
不過其實,你可以在 for 迴圈裡用上更多變數和條件式來令程式變得更簡單,例如:
for ($i=0, $j=100; $i<10 && $j>50; $i++, $j-=10) { ... }
這就是為甚麼 for 的括號內用上分號而不是用逗號來分隔參數的原因。
2. 在 switch...case 上使用關係比較:
一般教本在教到 switch...case 條件應用時都是告訴你 case 後面要放一個實質的值,用來比較 switch 的條件,如:
switch (變數) {
case '值 1' :
...
break;
...
}
其實 switch...case 的條件也可以換成關係比較,用來簡化大量 if... then 條件式有很幫助。例如:
switch (1) {
case 變數1 > '值1' :
程序 1;
break;
case 變數2 == '值2' :
程式 2;
break;
}
引用URL : http://blog.comicparty.com/trackback.php?id=142
[工作札記
]
19 十二月, 2005 01:28
網站巨變即將來臨 米奇
現時來說,Web 2.0還是比較概念性。這個名詞,可能只是用來替一群成功網站標籤化而產生的物產。學者們總愛為一些自己沒有能力構想出來,但又很成功的案例以標籤集合起來,加以學問化。
不過在實作上,Web 2.0的確是在改變網站互動設計的模式。過去我們製作網頁,所謂互動往往都是編製一個個表格,讓用戶輸入完成後提交回伺服器,然後經過計算和處理之後將結果傳回去。
不過Web 2.0中一項重要的技術Ajax就改變了這種互動流程。要求和回應可以放在同一個介面上展現,不用有明確的遞交動作就可以取得結果,就像真正在桌面上使用的程式一樣,在用戶不經意之間已經在跟伺服器,甚至跟其他用戶在互動。同時,由於Ajax與javascript等客戶端編程技術有著不可分割的關係,而javascript又經常用在動畫和用戶與網頁間互動行為等方面,令到網絡服務(web service)不再是死板的「遞交->回應」模式,而變得動態十足的。
最明顯的例子是購物網站的購物籃,以往你可能要按一下「放入購物籃」鍵,然後網站會刷新你的資料,把你帶到另一個畫面去。現在透過Ajax和javascript的互動,你只要把想要的東西拖放入網頁上的「購物籃區(可能真的設計成一個籃狀)」,Ajax就會在幕後替你把資料傳送給伺服器,計算好所需費用和運費,然後靜靜地在頁面上一個角落上更新,完全不會把你拋來拋去,打擾你繼續瀏覽網站上的內容。這種像遊戲般的互動性,是過往網頁設計模式很少會用到的。
你又可以想像一下,只要你把聊天室寫成一堆網絡服務函式,公開出去讓其他製作網站的朋友呼叫。其他的網站製作者只要寫幾句簡單的javascript,就可以把你的聊天室變成自己網頁內容的一部份。無論多少個網站都可以使用同一個聊天室,將更多的用戶聚集在一起。寫得好的話,將Google Map變成一個真人版即時RTS也不是問題。
更進一步,如果你把一堆應用了Ajax技術的功能區塊如電郵清單、RSS新聞、天氣消息、交通狀況、股市行程、即時通信、網上儲存空間、搜尋介面、顧問系統等,堆在同一個頁面上,每個區塊各自因應用戶的要求靜靜地更新,那就變成好像你的桌面一樣了。事實上,個人網上桌面應用正是Google和Windows Live所瞄準的目標。他們就像收費電視頻道一樣,簽下或收購一堆提供不同功能方塊的「功能供應商」,然後用戶就像選擇電視頻道一樣選擇所需的功能方塊來用。可以肯定的是,網上應用將有一輪新的惡鬥,本地的網站服務業者又有多少間,能及時提供本地化的網上桌面應用呢?
Web 2.0概念無論在互動性和應用性上都大大地改變了網站設計的模式,網站企劃人員和頁面設計師要在互動上多花腦筋,工作模式會有新的變化,以往在設計網站雛型時經常用到的頁面方塊圖可能再也應付不了未來頁面互動的需要。而在程式上,網站的功能開始給獨立包裝起來成網絡服務函式。以往功能與頁面密切的關係不再存在,頁面程式只是在啟始時為用戶擺放好各個功能方塊的位置,而網絡服務函式就變成了小矮人,在一旁等候不同網頁的呼叫。
米奇希望自己能成為參與Web 2.0變革中的一分子。
引用URL : http://blog.comicparty.com/trackback.php?id=141
[工作札記
]
17 十二月, 2005 01:47
迷入Web 2.0 米奇
最近不論從雜誌也好,朋友轉寄過來的網頁也好,都不停看見一個新詞--Web 2.0,隨之而來的就是一大堆專門的技術和概念如Tagging, Ajax, XMLHTTPRequst等,更痛苦的是JavaScript這惡靈竟然從米奇的知識墓園中爬出來。看來是因為10月剛舉行了一次關於Web 2.0的座談會,很多專家就Web 2.0到底是甚麼作出了較全面和明確的分析和定義。
從米奇個人的理解,Web 2.0的精神是分享、是參與、是投入、是面向對象,資訊雖然分散在不同地方,但透過自由設定的標籤鬆散地聚集在一起,自我的個性是大前提,使用時要有豐富的操作體驗,廣告也具針對性,計算的是點擊成本,而不是閱覽次數。
很不巧地,這個網上應用開發者們正談得火熱的概念名詞,正好出現在米奇跟朋友商討開發的一個網上應用的時候,這令米奇也陷入同樣的苦惱之中--究竟我們在想的事物有沒有足夠的「用戶體驗」呢?原本以目錄樹方式的分類法是否應該改成較「潮」的Tag分類呢?變成Tag之後資料要怎樣聚合起來才不失當初構想的原意呢?Ajax是怎麼樣在PHP上實作呢?我們這個網站夠不夠「2.0」呢?
苦惱不是辦法,於是,不停在網上找文章來比對自己的想法,找尋實作的方法,也同時跑到書局抱佛腳,希望求個解脫。心知這麼新的概念找中文書只是浪費時間,於是直撲英文書屋,誰知問了兩間,那些看來也有一定相關知識的店員都異口同聲的說:「怎麼最近那麼多人來找Ajax的書?」還反問米奇甚麼是Web 2.0,甚麼是Ajax。並遞上卡片,叫米奇找到有關書籍出版的資料時務必要傳真一份給他...
米奇始終覺得所謂Web 2.0是一種很概念性的事物,就像一個標籤,甚麼東西夠「Web 2.0」,甚麼東西只是「Web 1.0」,米奇一時也很難判斷出來。像這種可以吹捧的東西,可能在一、兩年後成為了香港炒作概念股的傢伙炒作的對象也不奇怪。
說著說著,米奇也發現,自己也只不過是個趕著潮的傢伙而已...
引用URL : http://blog.comicparty.com/trackback.php?id=139
[工作札記
]
13 十一月, 2005 14:46
pLog改名為LifeType 米奇
剛剛才知道因Amazon擁有pLog在美國的註冊商標,所以在11月7日改名為LifeType,官方網站也渙然一新了。ComicParty.com本來正在進行的升級工程也要等LifeType 1.0.2釋出後才繼續了。
米奇是希望將ComicParty.com從現在的個人Blog變成ACG blog社群的,不過一來現在由於資源所限,未有足夠的空間和器材去建一個開放網站,而米奇自覺不是個很社交的人,想來可能也需要一些時間。
看過在日本不少商營blog,他們跟很多品牌合作,如電影或網上遊戲,當合作品牌推出產品如新動畫推出時,Blog也配合推出有關產品的template,讓會員去選取更換,比單單放著一個平台讓人貼文活潑得多。米奇最近正式訂出ComicParty.com的Logo和在這兩季建立新的template就是這個原因。到ComicParty.com真正成立社群之後,真希望有多些人肯製作些主題性的公用template。
引用URL : http://blog.comicparty.com/trackback.php?id=129
[工作札記
]
25 十月, 2005 00:46
用XMLRPC來傳送檔案 米奇
使用了Zoundry之後才留意到原來是用以透過MetaWeblog的介面將圖片上傳到pLog上去,MetaWeblog是XMLRPC的其中一個應用,換言之XMLRPC是支援檔案上傳的。但是該怎麼做呢?
看一下文件,才留意到XMLRPC原來定義了一些PHP所沒有的資料形態,分別是base64、dateTime.iso8601和structure。在實作上,IXR_Library將structure以array的形式傳送出去,接收回來之後又將它變換回array;datetime.iso8601則只是將日期重新排列而已,但由於有特定的tag,所以需要在放到client物件的qurey方法送出去前轉換為IXR_Date形態的物件:
$date =
new IXR_Date
(time());
base64主要是用來傳送檔案用的,放到query方法去之前也同樣要先建立IXR_base64物件。其實這物件也是以將檔案以字串形式讀取(file_get_contents),以base64形式編碼之後,在前後加上Tags而已:
當IXR_Library的服務端收到base64形態的資料時,它會透明地將base64資料解碼後才傳送給處理程式(callbacks),所以程式員在撰寫callbacks時,完全不用理會IXR_Library是怎麼接收程式,只要將傳入的bit字串以Binary mode寫入檔案,就可以將檔案還原。
if (!
$fp =
fopen( "storage_path/the_file.ext",
"wb" ) ) { return new IXR_Error(-1, 'Could not open file');
}
if ( fwrite( $fp,
$bits ) ===
false ) { return new IXR_Error(-1, 'Could not write to file');
}
不過,base64形態的資料沒帶有檔名,所以如果你想沿用原來的檔名,那就要將檔名以另一個參數的形式傳送過去。而MetaWeblog是以array的形式將檔案內容、檔案類型,和檔案名稱封裝在一個array形式送出去,這是一個不錯的做法。
引用URL : http://blog.comicparty.com/trackback.php?id=100
[工作札記
]
22 十月, 2005 07:19
初探XMLRPC 米奇
為了改善ComicParty的功能,在研究pLog的功能和MVC模型之餘,不知不覺間開始研究起XMLRPC來,也學寫寫Web Service。
早陣子PEAR XML_RPC出了漏洞,引來大哄動,因為有很多php的應用都了PEAR XML_RPC這個函式庫。幸好pLog是使用另一個較古老的XMLRPC實作-Incutio XML-RPC Library for PHP。
這個又叫IXR_Library的函式庫非常簡單,像我這種初學者也看得懂它的內部構造,是很好的學習教材。不過使用IXR_Library有幾點要注意(感謝markwu的提點):
- IXR_Library並沒有在伺服器回應的xml中標明xml的編碼,所以如果想明顯指定編碼的話,就要在IXR_Server這個類別中加入有關的設定:
--[找尋]--
var $capabilities;
--[之後,加入]--
var $defencoding = 'utf-8'; XML Target coding只可輸出'ISO-8859-1'、'US_ASCII'和'UTF-8'三種編碼,
--[找尋]--
$xml = '<?xml version="1.0"?>'."n".$xml;
--[修改為]--
$xml = '<?xml version="1.0" encoding="'.$this->defencoding.'"?>'."n".$xml;
--[存檔並關閉]--
- IXR_Library裡的IXR_Date類別有幾點寫錯了,將年月日也設定成年份,需要修正:
--[找尋]--
$this->
month =
date('Y',
$timestamp);
$this->
day =
date('Y',
$timestamp);
--[修改為]--
$this->
month =
date('m',
$timestamp);
$this->
day =
date('d',
$timestamp);
- 在編寫Server端的Callback函式時,要檢查存入的參數$args是不是陣列,因為如果呼叫Web Service時只傳入一個參數的話,那IXR_Server在呼叫Callback函數時就會直接傳入那個值,而不是以array形式把存入參數包裹起來。
- 客戶端類別IXR_Client裡有個$debug參數,是用來輸出除錯用情報的,只要將它設定為true,客戶端呼叫服務時便會同時顯示送出的資料和收到的回應。
引用URL : http://blog.comicparty.com/trackback.php?id=99
[工作札記
]
18 十月, 2005 07:58
移除UltraEdit 惱人的BOM 米奇
米奇過去一直都是用UltraEdit來編輯網頁的(不錯,米奇是Hard Code派的),用UltraEdit的好處是它可以在日文模式下仍然可以正常地編輯中文。
不過自從全家上下以至公司Server都轉以UTF-8編碼之後,一旦編輯含有中文的內容就會感到很煩惱,因為用UltraEdit來儲存UTF-8文檔的話,檔頭會有一個看不到的字元,人們尊稱它為BOM。由於BOM是看不見但卻會輸出的字元,所以如果用來寫UTF-8編碼的php程式檔時,如果需要用到如session,cookies或header等指令時,由於這些指令必須在程式還沒有輸出任何東西前才能呼叫,而BOM正是在檔頭就輸出了的隱藏字元,所以就會出現問題。這令到米奇不能再用UltraEdit來編輯含有中文的php檔。
米奇一直想,為甚麼大部份的文檔編輯器都可以移除BOM,就只有UltraEdit那麼笨?今天在瀏覽網站時終於給米奇找到讓UltraEdit也移除BOM的方法了(不過這方法還是有點笨)!自10.10a版本之後,UltraEdit增加了兩個有關UTF-8 BOM的設定指令,不過一定要在INI設定檔中手動輸入。UltraEdit的INI設定檔uedit32.INI是放在Windows目錄下的(Win2K或WinXP可能就是放在WINNT目錄下了)。只要在uedit32.INI的[Settings]區段內增加這兩行,UltraEdit就不會再在儲存時加入BOM了:
Write UTF-8 BOM = 0 這是在任何時候儲存時都加BOM的設定
Write UTF-8 BOM NF = 0 這是在開新檔的時候加入BOM的設定
引用URL : http://blog.comicparty.com/trackback.php?id=95
[工作札記
]
16 十月, 2005 18:11
糾正pLog的裁字問題 米奇
pLog雖然有很多台灣人參與開發,但終究也是外國製的平台,尤其是當中使用了Smarty模版引擎,也是針對英文來編寫的,對於使用多位元文字的用戶(例如中國人)來說,畢竟會有點問題。最明顯的就是Smarty引擎的自動裁字功能truncate modifier。
現時米奇是使用php的mb_string extension所提供的function來修正Smarty對中文裁字的問題,將 strlen 和 substr 改成 mb_strlen 和mb_substr。
<plog_document_root>/class/template/smarty/plugins/modifier.truncate.php
function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false)
{
if ($length == 0)
return '';
if (!$break_words)
} else
return $string;
}
不過也有人是使用自製的裁字函式,這大概是因為很多人都是租用伺服器吧。
引用URL : http://blog.comicparty.com/trackback.php?id=94
[工作札記
]
15 十月, 2005 08:38
pLog裡引用程式碼 米奇
已經為了在pLog裡引用程式碼煩惱了很久,問題最主要是如果引用的程式碼是html form的話,無論編輯和顯示都會好麻煩。至少在顯示時,pLog沒有像一般的論壇那樣提供引用框,使用table又會自動靠右,麻煩到不得了。
幸好今早在一個pLog前輩ajer001的網站找到一篇關於blockquote的文章,原來只要在所用的template的style sheet裡加入blockquote的style,然後在寫文章時在要引用的地方用blockquote標籤就可以,簡單得很,像這樣:
這是引用標題
這是引用的內容
米奇做了一點點修改,並把有關的style設定貼下來,方便日後要再改時參考:
/* -------------------------------------------------------------- */
/* Blockquote Settting */
/* -------------------------------------------------------------- */
blockquote {
font-family: Arial; /* 字體 */
color: #333333; /* 字體顏色 */
background:#f0fff2; /* 背景顏色,也可以用url()加入背景圖像 */
margin:5px 40px 5px 40px; /* 余白,依序是上右下左 */
font-size:small;
font-weight:normal;
line-height:150%; /* 行距 */
padding: 10px; /* 邊框與內文間的間距 */
border: dotted 1px #9c9; /* 邊線的設定,不設也可以 */
width: auto;
}
blockquote .quotetitle {
font-family:Arial; /* 標題字體 */
font-size:medium; /* 或其他更具體的字體pt設定 */
font-weight:normal; /* 可以改成bold加粗 */
border-bottom: 1px solid #336600; /* 標題的底線 */
padding: 3px 0px; /* 標題與邊線及上段的距離 */
}
來源: 阿駕零零壹 © 學習筆記
http://ajer001.blog.twntwn.info/post/1/114
引用URL : http://blog.comicparty.com/trackback.php?id=93