小松鼠嚇了一跳,有了魔法眼鏡後,這世界看起來完全不一樣了

2007年3月28日 星期三

blogger 自動隱藏全文 修改

這是之前的自動隱藏全文的修改版本。雖然早已有很多不同的自動隱藏全文方式,但是自己寫可以符合自己的偏好,順便熟悉一下一些語法。比方說,我不喜歡一開始先把全文顯示,然後等 sidebar 出現後才隱藏全文。這個版本目前然仍有許多缺點。
相較於原來的版本,這個版本修正了一些缺點且能讓沒有 script 的人也能隱藏全文,也因為使用了 jQuery 比較短了一點。但是還是有 IE6 顯示不正確的毛病。這個版本仍然是要把全文放入 <div id='fullpost'> </div> 之中。修改方式如下

先展開小裝置範本。然後下面這段放在 </b:skin> 後面

<script src='http://code.jquery.com/jquery-latest.pack.js'/>
<script type='text/Javascript'>function hpactl(postid) {
if(!$("#pbody_"+postid+" #fullpost").length) $("#toggle"+postid).hide();
}
function toggled(o){
o.href="javascript:void(0)";
$("#pbody_"+$(o).attr("postid")+" #fullpost").toggle();
if(o.innerHTML!="收起全文")
o.innerHTML="收起全文";
else
o.innerHTML="...請按此繼續閱讀全文";
}
</script>
可以發現比之前的版本短了很多,因為有一部分東西移到後面了。
然後下面這段放在 <p><data:post.body/></p> 後面
<b:if cond='data:blog.pageType != "item"'>
<b:if cond='data:post.url'>
<div expr:id='"toggle"+data:post.id'>
<a expr:href='data:post.url' onclick='toggled(this)'
expr:postid='data:post.id' onmouseover='hpactl($(this).attr("postid"))'>
...請按此繼續閱讀全文
</a></div>
<script type='text/javascript'>hpactl(&#39;<data:post.id/>&#39;);</script>
</b:if>
</b:if>
然後只要在的設定->格式->文章範本裡面放上這段文字
摘要<div id='fullpost'>全文</div>
然後就能很方便的修改變成新的 post。

手寫數學式輸入


目前來說,對數學家來說還沒有到非常實用的階段。但是還是先整理一下(主要參考這裡修改的)
  • Freehand Formula Entry System 算是一個可用的玩具各平台都可以用。有 source 。
  • Natural Log by Matsakis, Miller, and Viola (MIT) 有 online demo 可玩,使用 java。
  • JIMHR:, 整合 FFES/DRACULAE and the Natural Log system, by Joy-Gong Ho (Acuitus Corp., USA)和 CIT。 opensource。
  • JMathNotes by Ernesto Tapia Rodriguez (Free University of Berlin) 跨平台,容易安裝,看起來介面完成度還挺高的。
  • Infty by M. Suzuki et. al. (Kyushu University, Japan) 免費, windows 下可用,有編輯器以及文檔自動翻譯,目前免費,但是無 source,可以玩一玩,但是有時不是那麼穩。
  • MathJournal by XThink Inc. 商業軟體, 另外有簡化版本 Math Calculator可以試用。似乎還挺不錯的。
  • MathPad by Joseph LaViola 也是個原型,但是看不到哪裡可以下載。
  • Maple 10 有手寫符號輸入,可惜不怎麼好用。
一般來說,主要的問題應該是手動調種 grouping 的功能要不就是沒有,要不就是不那麼直覺,需要學習(人類學習,不是機器學習)。

LyX 1.5.0 beta1 + MiKTeX + CJKutf8


LyX 1.5 將會支援 utf8 code 的編輯,這也意味著可以直接在上面編輯中文文件了。其實我目沒有需要用到這個功能,但是有可能會用到,所以測試並且解決了一些問題。
  1. 首先先說明 MiKTeX 的安裝,我使用 LyX 內含的 MiKTeX 2.5 版,安裝後使用 MiKTeX 設定程式,增加語言裡面的 CJK 套件。
  2. 但是 CJK 套件的版本不夠新,沒有 utf8 的支援,所以請下載 CJK Latex 4.7 以後的版本。下載後解開檔案,然後把 texinput 目錄下的檔案放到適當的位置。我是直接覆蓋到c:\Program Files 下 MiKTeX 程式目錄下面舊版 cjk 相關的位置。
  3. 然後再安裝中文字型。我是抓 CWT1 的 cwfs 字型。在 windows 下面當然無法直接安裝,但是可以閱讀 install.sh 檔,然後手動 copy 檔案。我是用 cygwin 來執行這個檔案。先 ln -s MiKTeX 的目錄到 /tex,把 HOME 設成 /tex。但是這樣還是不能執行,因為 MiKTeX 是 windows 的程式,傳回值跟 install.sh 預期的不同。所以直接修改 install.sh,把終止 install 的部份直接 remark 掉就行了。這樣,就能成功的 copy 檔案到適當位置。
  4. 最後,你還要修改一下 updmap.cfg 這個檔案,這有很多方法可以弄,我是直接修改 MiKTeX 的檔案,反正電腦只有我在用。在裡面加上
    Map cwfsu.map
    這一行。當然不同的字型就會有不同的 map。然後執行一下 updmap, refresh 一下你的系統。
  5. 原則上這時應該就能使用 CJK,可以先測試一下。
  6. 接下來是 LyX 的部份。到官網下載 1.5 之後的版本。原則上,只要把 document -> setting -> language -> encoding 改成 utf8 就可以了。這時理論上來說,存檔時就會把 utf8 的編碼存進去。
  7. 所以在 Preamable 放入
    \usepackage{CJKutf8}
    內文使用用 Ctrl-L 插入 TeX 指令
    \begin{CJK}{UTF8}{cwfsb}
    以及
    \end{CJK}
    然後在這兩個中間就能使用中文了。
  8. 可惜我的 LyX 1.5 beta 1 雖然能夠正確 export latex 檔,但是只要 preview 或者 export dvi/pdf 等等檔案都會 crash,這個應該是因為某些 dll 不相容的問題。所以我做了一個 workaround。先設定快速鍵到 buffer-preview latex 上,這個在 tools->preferences -> look and feel -> user interface 裡面的 binding 檔案中。我是直接把 buffer-preview dvi 的 dvi 改成 latex。
  9. 然後,寫一個程式來翻譯 latex 成為 dvi 並且檢視。並且把 tools->preferences -> file format 中 latex (plain) 的 viewer 設定成這個程式就行了。我是用 python 寫的,程式碼如下:
    import os, win32api, sys
    basepath=sys.argv[1][:sys.argv[1].rfind("/")]
    output=sys.argv[1][:-4]+".dvi"
    os.system('latex -output-directory="'+basepath+'" "'+sys.argv[1]+'"')
    win32api.ShellExecute(0,"open",output,"","",1)

    這樣看起來可能有一點複雜,不過不用花太多時間去深入 hack。我相信如果把 LyX 重新 compile 一次應該就可以了。

2007年3月23日 星期五

實用 css 片段

又是那道光

就是那道光,就是那道光。
周俊勳三戰兩勝擊敗胡耀宇奪得 LG 杯冠軍,成為第二十一位圍棋世界冠軍後,我們果然又看到那道光了。
什麼光?台灣之光。

果不其然,媒體上又是一陣台灣之光。
不過台灣不缺英雄,而是比賽
沒有好的比賽環境,才能留住人。在此之前,台灣已經有三位世界冠軍了,不過他們都是旅日棋手,隸屬日本棋院。
不過圍棋相對來說,比賽環境算是比較好的了。所以還留得住周俊勳,也培養了出許多年輕的職業棋手。當然現代網路下棋的方便性也有幫助。但夏銜譽和施懿宸就沒有留下來,改走唸書路線。
當然人各有志,也沒說唸書和下棋哪個好,但是如果下棋跟棒球的簽約金一樣可以用百萬美元來計算,那可能故事就不一樣了。
競技有一將功成萬骨枯的特性,在激烈的拼鬥環境,即使你有天份和努力,也不見得能爬到頂端,所以要提供踩在冠軍腳下的廣大犧牲者一些生活保障,這時就要健全的職業比賽制度。
看看哪天撲克也來個台灣之光吧?(其實這個鬼手也很厲害。以上面的論點來說,一方面他是業餘,生活無慮。二來,網路可以提供競技的環境)

2007年3月22日 星期四

日翻中 英翻中的 bookmarklet

這兩個 bookmarklet 日翻中 英翻中 可以將日文及英文的網頁翻譯成中文。
只要把這兩個連結放入書籤或者我的最愛即可。
這兩個 bookmarklet 是由之前的翻譯網頁測試改良而成。安裝方法可以參考這裡
按下按鈕之後,聯覽器會連到線上翻譯網站,所以依照連線速度的不同,可能會需要等待一段時間,讓電腦將網頁逐段翻譯。

2007年3月20日 星期二

兩行式 CSS 固定寬度 side bar

這是一個簡單的筆記,簡述兩行式版面,右邊 side bar 固定寬度,左邊主要欄位浮動寬度的作法。

我個人不喜歡在 blog 使用那種限定像素寬度的版面,因為每個人選擇螢幕和視窗大小的自由。
一個原則是資料類型的網頁(如 blog 或者資料查詢),比較類似設計應用程式介面的思維,所以使用可調整寬度的設計會比較好,想想,如果你的 word 固定 800x600大小,會不會很難用?在 1600x1200 的螢幕下面,會不會很小?
所以說,用那種 70%:30% 或者 80%/20% 比較好了嗎?也不會,因為 side bar 的常常放一些小元件和圖片,這些都是固定寬度的,如果照比例放大縮小,對於有些螢幕太大的人,或者習慣用小視窗瀏覽的人,可能會造成 sidebar 太大太小的問題。
所以理想的版型應該是 side bar 固定寬度,主欄位變動寬度。那這樣怎麼弄呢?以 blogger 為例,原來通常是在 #content-wrapper 裡面包含一個 #sidebar-wrapper 和 #main-wrapper。如果我們要讓 #sidebar-wrapper 固定寬度,我們可以這樣改,先增加一個 #main-wrapper2 這個 style,這個將要放到 #main-wrapper 裡面。接下來的原理是,我們要讓 #main-wrapper 向左對齊佔據全部的空間,然後 #sidebar 也向左對齊,不過重點是我們把 sidebar 向左對齊的邊緣設成的,這樣原本會緊鄰在 main 右邊的 sidebar,會往左移,只要把寬度調整好, sidebar 就會和 main-wrapper 重疊。
但是這樣,因為重疊的原因,我們不能直接把文章放進 #main-wrapper,這樣文章會有一部分被遮住,這也就是我們為什麼要 #main-wrapper2 的原因,我們把他放入 #mainwrapper 中,並且調整右邊界 ,讓他不會和 sidebar 重疊,這樣就行了。
了解原理之後就比較容易自己修改了。
一個示範的 css 2.0 代碼如下:
#content-wrapper {
width: 90%;
}
#main-wrapper {
margin-left: 14px;
width: 100%;
float: left;
}
#main-wrapper2 {
margin-right: 310px;
}
#sidebar-wrapper {
width: 280px;
margin-left: -294px;
float: left;
}
這個代碼我只留下關鍵的部份,顏色等等其他的部份,保留原來的設定即可。 310 > 294 >280 是因為我要留下一些空白,這三個數字是相關的。content-wrapper 的寬度 90% 是看你兩邊的留白而定。#main-wrapper2 的樣式設定基本上可以 copy #main-wrapper,因為他其實是真正的 #main-wrapper。
最後,要修改一點 html 把 #main-wrapper2 放進 #main-wrapper。在不打開小裝置的情形下,其實大致上是如同下面的 html code
<div id="main-wrapper">$lt;div id="main-wrapper2">
<b:section class="main" id='main "showaddelement="'no"'>
<b:widget id="'Blog1'" locked="'true'" title="'blog" type="Blog" />
</b:section>
</div></div>
也就是原先包一層,現在變成包兩層了。這樣就能達到理想的效果。

2007年3月19日 星期一

一些關於 json 的用法

這個又是另外一個關於網頁技術的筆記。主要在說明利用 json 的 blog mashup 玩法

目前網路上面將資料轉成 json 的方式很多,各有優缺點。
  • 最一個方式是使用 google reader,這個很基礎,我就不多說了,可以參考DIY Google Reader 聯播網 (初階+進階)。這個用來做聯播是輕鬆如意,但是缺點是 google reader 提供的 json 只提供 summary而沒有全文。雖然 google reader 的 atom feed 有提供全文,但是似乎不吃 gdata 的 alt=json 這招。
  • 第二個方式是 Yahoo! Pipes,這個一般而言還挺不錯的,還有許多程式上的優點,比方說可以做 feed 的翻譯。不過他的 replace 模組還無法做大規模的替換, feed 的翻譯會去掉格式,而且 content 裡面的原始文字格式會亂掉。
  • 第三個方式是使用 feedburner, 可以用這個網址http://api.feedburner.com/format/1.0/JSONP?uri=ptt/beauty&callback=myappfn 來傳回 json。其中的 ptt/beauty 換成你的 feed, callback 也要換成你的 callback。這個方式基本上簡單清楚,feedburner 本身也提供 feedflare 等等花樣讓你來玩。
  • 第四種方式是使用 openkapow 產生 json。 openkapow 基本上是網頁機器人,他可以將普通網頁轉換成為 json。這個用途就很多了,用法幾乎無限。比方說你其實可以在你的網頁中讀取「任何」一個 website 的 html 都行,只要設定一個 rest,抓取body 的 html 就行了。
  • 第五種是使用內建的 json。比方支援 google data api的,或者 yahoo web 服務的,都有原生的 json 可用。

實際的使用可以參考下面是幾個簡單範例
  1. ptt beauty 縮圖。這個和之前寫的 自動縮圖bookmarlet 原理相同。 ptt 的板本身有提供 rss,但是格式有時後會出錯。我原來使用 google reader 和 yahoo pipes 都有問題,一個是只有 summary,一個是文字排版資訊會不見,最後使用 feedburner 才完成。
  2. 某日本 AV 女優部落格日翻英。這是最早的例子,所以做得不好。 這裡使用了 feedburner -> yahoo pipes 然後利用 openkapow 來翻譯。雖說是 AV 女優部落格,但是沒有什麼有色情的內容。原來打算直接 利用 yahoo pipes 做聯播和翻譯的工作,但是 yahoo 的翻譯會把格式弄不見,想要先把內文的html 做轉換,發現也會有問題,所以改用 openkapow 來進行翻譯。你會先看到日文的內容,然後自動慢慢轉換成英文。如果使用 google 翻譯時,html 格式會保留,但是 google 似乎有時會有使用限制,大量的查詢翻譯,他會停止服務。這時 openkapow 會自動改用其他翻譯引擎。這時,翻譯結果就不會保留 html 格式了。(這個範例請使用 Firefox。使用 IE 結果會不太好)(補充日翻中)
  3. 影集 Heores 的 Beaming Beeman blog 標題英翻中。同樣上面的日翻英,原本是想用這鏡子取代上面那個 AV女優的例子,但是在弄的時候,發現不能用太長的句子去翻譯,因為句子是放在 url 裡面的。這樣就要斷句,會產生大量的翻譯查詢,有點濫用翻譯系統。所以改成只翻譯標題。這個系統使用 blogger 的 gdata api而來產生 json,然後再利用 openkapow 來翻譯。
  4. Slashdot 的中文翻譯。使用 google reader 和 openkapow。
  5. 可愛過頭(cute overload)BoinBoing 的中英對照。這兩個都是使用 feedburner +openkapow。當 google 翻譯器願意為我們工作的時候,翻譯出來的文字是圖文並茂的。當 google 不工作的時候,會中英對照。翻譯速度有時後會有點慢。(主要測試平台是 flock(mozilla/firefox 類的))

2007年3月18日 星期日

20世紀少年, Always 幸福的三丁目, 台灣西方文明初體驗


20世紀少年這部浦澤直樹(怪物危險調查員Pluto)的作品,閱讀起來會讓人臉紅心跳。臉紅是因為覺得怎麼會有人能夠作出這麼神妙的作品,心跳是因為被情節吸引下去,想要趕快往後翻,看看會怎麼發展。

當然浦澤直樹本身的風格就相當的迷人,撒著著淡淡的詭異懸疑香料,並且用濃郁的文化背景來調味,但讓人臉紅心跳的東西不是這個。而是他的手法巧妙的結合了主題。
故事的主題是一群長大之後的小朋友,發現童年大家幻想畫出的機械人大戰壞人的圖畫書的內容,居然一一實現,變成了預言一樣。這些事情的背後,似乎是一個叫做「朋友」的人在主導著。隨著預言一一的實現,這樣事情就大條了,因為圖畫書的內容中,畫著世界末日的來臨,而且時間就快要到了。世界末日真的會來臨嗎?
配合這樣的一個主題,浦澤巧妙的施展了許多手法來達到科幻、魔幻、後設的效果,但是並不用真正的太偏離寫實風格。以後設這件事情來說,由於故事基本上是依照小時候畫的漫畫來進行,所以可以描述小時候是怎麼畫出這些故事的,做出一些自我嘲諷,這樣就有了一點後設的趣味。同時藉由圖畫故事與後來發生的真實事件之間的落差,產生了創作與背後事實互相對比的效果,這也是後設手法常見的手法。況且所謂的真實,其實是依照幻想創造出來的,這更有著耐人尋味的效果。最近的電影 23 可能也會有點類似的味道。
同樣的道理,也用在科幻和魔幻上,幻想中的科技與後來實際造出的科技,特異功能和背後的謎底,都圍繞著這個主題。貫穿這三點的一個共通點就是時間跳躍。時空斷裂是後設創作的一個常見的手法,也是科幻和魔幻的常見主題。漫畫中並沒有真正的時間跳躍,但是藉由回憶、倒敘等等手法,達到時間旅行的效果(比方說埋下一個東西,多年以後挖出來)。除了回憶之外,書中還藉由儀器創造出來的虛擬食境來達到回到過去的效果。
簡而言之,作者想辦法在不開外掛的情形下,達到了科幻、魔幻、後設的效果。有點像是我在大唐讀書心得中提過的,黃易在書中製造電玩感還有小人物做大事的技巧。但是 20世紀少年的手法顯然更加繁複讓人眼花撩亂。時間旅行一項是讓人期待的題材,但是要玩得切題巧妙並不容易,電影蝴蝶效應是一個有趣而成功的作品,因為他手法巧妙切題,描述著一個精彩動人的故事。
20世紀少年也是一樣。但更像電影 Memento 一點,因為巧妙之處在於不用開外掛就能玩時間旅行,也一樣的精彩之處在於故事懸疑性,動人之處在於懷舊和共通的情感。看來時間斷裂是製造情感與懸疑的好手法。
他的懸疑部份,有點像是日劇 Xenos 的感覺。Xenos 也是講小時的朋友長大以及過去封閉的記憶,不過 Xenos 沒有用到太多時間斷裂這個手法,比較多的是空間跳躍和情色血腥來達到目的。可能原案也是有許多時間跳躍的打算,不過可能因為時間等等技術上的問題,沒有採用。
依據 wikipedia 的說法,浦澤畫 20 世紀的時候,受到了 Stephen King 的 ItThe Stand 這兩個故事的啟發。這樣讓這個小時預言成真的題材有脈絡可循了,稍稍紓解了臉紅的症狀。創意不過是錯誤的複製,從舊有的創作常常會激發新創作的靈感,幾個人的創意疊加在一起,變成一個了不起的創作。像是一些簡單的民間故事,口耳相傳添油加醋之後,最後可能會變成豐富動人的小說。這樣的解釋可以令人稍稍釋懷一點。
動人的部份,又和日本電影 Always 幸福的三丁目這樣的懷舊和共通情感類似(和堤真一的另外一部漫畫改編電影 Fly Daddy Fly 一樣是在飛機上看的)。
Always 簡單而平實的敘述著戰後日本人的共通生活經驗,有點類似以前台灣的連續劇(有康安的那個)。劇中以東京鐵塔來象徵大家的共同經驗。20世紀少年則用萬國博覽會(還有搖滾樂等等的通俗典故)。Always 也是漫畫改編的,而20世紀少年也將會有真人電影。
Always 裡有許多知名演員如小雪、崛北真希、吉岡秀隆、堤真一、藥師丸博子。雖然我們不是日本人,也是能夠感受到那股懷念舊時大家一同努力的美好感覺。
除了建築物之外,歌曲也是共同記憶的表徵。20世紀少年也很努力的表現出這一點。西洋歌曲、演歌、校園民歌可能都是會帶給某一群人一些共同的記憶。這個大概會帶給電視世代一些回憶和共鳴吧。
前一陣子看了陳柔縉的台灣西方文明初體驗囍事台灣這兩本書,裡面介紹了一些有關台灣過去的一些小事的由來,邊看邊想像著過去人們生活的樣貌,感覺也挺有意思的,有著搭上時光機的感覺。
不過這類的時光旅行都有著不可避免的偏差,比方說書上說的日本官員批評日治前台灣的火車鐵路很差,有些地方上坡,還要人推,是二流火車鐵路。從前課本上只提到劉銘傳等等開路的功績,沒有詳細說明到底開出的路是怎麼樣的路。而一般的印象也是日本時代的火車鐵路做得挺不錯的,所以我那時腦海構成的印象就是想必日本治台之後,火車情況就好很多了。沒想到前一陣子在公視的模擬劇中,提到國民政府接收後,那些士兵橫行霸道的情況。裡面引述著一個火車駕駛的說法,說火車爬坡無法動的時候,大家都下去幫忙推車,就該名士兵還坐在車上不動。就這件事情來說,顯然在日治之後火車還是會有爬不了坡的時候。
這和圍繞著 20 世紀少年的紀錄與事實之間的差異性又不謀而合。回憶往往會美化或扭曲記憶,他不見得會帶你到過去,有時會帶你到一個幻境。
事實上,科學家也告訴我們,多回憶除了避免老人痴呆症以外,其實回憶和看見未來其實是相同的能力,都是智慧的本質

2007年3月14日 星期三

婚禮魔術

如果要在婚宴中安排切題的魔術辦,要怎麼弄呢?以下是幾個構想
  1. 快速換裝:這是我第一個想法。新娘在婚禮上都要更換禮服,如果能夠用快速換裝處理,效果還挺不錯的。可惜到具有點難弄,畢竟現在婚紗都是包套的。
  2. 遠距傳輸:常常婚禮會分成訂婚、結婚、歸寧等等步驟,有時會合在一起辦,有時會分開辦,常常身處兩地的親友,只能參加其中一個,特別是異國婚姻。如果能夠來個大螢幕現場連線,將新郎新娘在兩個會場之間瞬間遠距傳輸,能將兩地的情緒結合在一起,效果應該很棒。這個魔術應該蒙面魔術師應該也破解過吧?
  3. 餐具魔術:既然是筵席中,餐具魔術自然是切合主題的。或者可以的話,魔術出菜也行。
  4. 出人:是一個讓主角出場的方式。如果有秘密未婚生子者,想要給父母及親友一個驚喜,也可以用這招。
  5. 感應術:親友們把對新人的祝福,放在信封中,然後由新人或者司儀在打開信封前,感應出信封內的祝福,朗讀出來。頗有喜氣的程序。這個魔術在日劇「圈套」中有。
  6. 戒指魔術:將兩個戒指圈在一起之類的魔術。或者可以漂浮的紙團->瞬間火焰->玫瑰花->上面有戒指。
  7. 石中劍類型的魔術:像是愛德華諾頓演出的魔術師出現的石中劍的魔術一樣。但是不是一定要用劍,可以是箱子中鎖住一顆心之類的。只有新郎打得開。
  8. 塔羅牌預言:用塔羅牌預言之類的東西,讓新人選中吉祥的預言,有好彩頭。也可以用白痴魔術,算出新郎新娘今年似乎紅鸞星動之類的,然後配合一些真的預言術,最後再算出一些吉祥的預言,這樣也很有喜宴氣氛。

2007年3月12日 星期一

pttbeauty 縮圖預覽 bookmarklet

-----這又是一篇程式碼文。雖然原來不想在 blog 一直寫 code,但是因為既然設定起來了 blog,自然而然的就會跑出一堆 code 出來。
這篇文章是一個簡單的 bookmarklet,可以讓你在 pttbeauty.twbbs.org 上面,很方便的預覽聯結的縮圖。

其實不只是在 pttbeauty 可以用,但是由於使用權的關係,原則上只能在 twbbs.org 的 domain 上使用。而且,除了 twbbs.org 上外,也看不出實際的用途。安裝也很容易,其實就是執行就是下面這個 link
縮圖預覽
上面這個 link,對於 mozilla/firefox/flock/IE6 應該都有效,碰到你想要打開縮圖的網頁,你可以直接在網址列上面輸入這個 javascript link,或者放在瀏覽器的工具列上面。
(執行效果可以看左圖,或者試試看這裡)
詳細的作法是:
IE 的使用者,
(1)在上面的連結上按右鍵,選擇加入我的最愛->然後選擇加進連結這個目錄中(這時候,其實已經可以用了,連到你想要看縮圖的 pttbeauty post,然後到我的最愛中選出「縮圖預覽」就行了,只是比較不方便一點。)
(2)然後如果你的工具列上面沒有顯示連結,在工具列上面按右鍵,把顯示連結工具列的部份打勾。
(3) 在工具列上右鍵或者在顯示的地方,把鎖定工具列的部份解除,然後把連結的工具列拉到好用的位置。
(4) 如果你的連結工具列有太多奇怪的連結,試著把一些不需要的刪除或者做調整。讓縮圖預覽的連結跑出來就行了。
(5) 把工具列再鎖定回去。
(6) 看到你想要打開縮圖的 pttbeauty post,按縮圖預覽。
Mozilla 也類似,先把書籤工具列打開,然後選擇把縮圖預覽的連結放入書籤工具列就行了。
有些縮圖會因為伺服器的緣故,暫時沒有圖片,不過上面的這個 hack,會每七秒鐘檢查一次,所以你只要靜待幾秒鐘,就能夠看到縮圖。
如果要比較小的縮圖,用這個 小縮圖預覽
可惜在 IE5 上面,上面兩個似乎無法測試成功。所以可以用下面這個代替。
顯示縮圖
這個對於 mozilla 和 ie6 也可用,不過遇到系統暫時沒有的縮圖,無法自動檢查。不過沒關係,可以用下面這個 link 手動載入縮圖 重載縮圖
mozilla 家族的瀏覽器,可以加裝 Grease Monkey,然後寫上類似的程式碼(可以參考 snap.icio.us),不過我想不需要小題大作。

由於這是一個 hack,所以有時候可能會失敗,特別是自動更新的功能,技術上來說,主要是跨瀏覽氣得相容性有問題,當然要弄好也行,但是程式碼就會太長。如果遲遲沒有更新,也可以 reload page,然後再按一次縮圖預覽。
測試用:


2007年3月8日 星期四

blogger 自動隱藏全文

blogger 上自動隱藏全文的方法很多,這是我的作法,測試上 ie/firefox/flock 都可行,而且關掉 javascript 也 ok。當然,你的全文也是要放在 <div id='fullpost'></div> 中間。(更新:新的版本請參考這篇)

先展開小裝置範本。然後下面這段放在 </b:skin> 後面

<b:if cond='data:blog.pageType != "item"'>

<style>#fullpost {display: none;}</style>
<noscript><style>
#fullpost {display: block;}
</style></noscript>
<script type='text/Javascript'>
function toggle_display(num){
el=document.getElementById(&quot;fullpost&quot;+num);
eB=document.getElementById("toggle"+num);
if(!el) {return;}
tmp=el.style.display;
el.style.display=eB.style.display;
eB.style.display=tmp;
}

function hidePost(postid)
{
var label=document.getElementById(&quot;fullpost&quot;);
if(label!=null){
eA = document.createElement("a"); eA.setAttribute(&quot;href","javascript:toggle_display(&#39;"+postid+&quot;')");
eA.innerHTML="收起全文";
eB = document.createElement("p");
eB.appendChild(eA);
eB.setAttribute(&quot;id","toggle"+postid);
eB.style.display=&quot;block";
pa=label.parentNode;
nl = document.createElement("div");
nl.innerHTML=label.innerHTML+"<p>&quot;+eB.innerHTML+"</p>&quot;;
eA.innerHTML="...請按此繼續閱讀全文";
nl.setAttribute(&quot;id","fullpost&quot;+postid);
nl.style.display=&quot;none"
pa.removeChild(label);
pa.appendChild(nl);
pa.appendChild(eB);
}
}
</script>

</b:if>


然後 下面這段放在 <p><data:post.body/></p> 後面

<b:if cond='data:blog.pageType != "item"'>
<b:if cond='data:post.url'>
<script type='text/javascript'>hidePost(&#39;<data:post.id/>&#39;);</script>
</b:if>
</b:if>



有些人可能會覺得要加上這個 fullpost tag 很麻煩,所以選擇那種使用行數的方式來顯示摘要。不過其實不會很麻煩,因為你只要在你的設定->格式->文章範本裡面放上這段文字就行了

摘要
<span id='fullpost'>
全文
</span>
然後就能很方便的修改變成新的 post。
其實還有另外一種方式,就是加上分行符號比方 --- , *** 或者 <hr> 或者第一段落,然後用 javascript 來判斷摘要和全文。但是因為我想要自己能完整控制摘要是什麼,全文是什麼,而不用因此破懷我的排版,所以我選擇使用 fullpost 的方式。

2007年3月5日 星期一

大哥,你題目出錯了吧?

下面列出一些跟數學有關的有趣的益智問題 puzzle,你看完題目之後第一個想法是:「大哥,你題目出錯了吧?」
這些題目出自
SevenPuzzles You Think You Must Not Have Heard Correctly
(我從 Computational Complexity: Puzzles That Keep You Awake at Night 看來的)
解決這些問題,不需要太深奧的數學知識。
而上面的 blog 另外提出一個有趣的 puzzle,就稍微要一點數學知識了,我把他翻譯如下
可數無窮多個人排成一列,每個人都戴著一頂帽子,這頂帽子要不就是黑的,要不就是白的。每個人都可以清楚看到其他人頭上的帽子顏色,但是看不到自己的。我們要求他們所有人同時大聲猜出自己頭上帽子的顏色。帽子的顏色是隨機決定的。有沒有一個策略能夠能只讓有有限個人猜錯呢?
至於原來裡面的七個題目,我也翻譯出一些題目(略為修改):
1. 盒中的名字
將一百個囚犯的名字放在一百個木箱之中,並且把這些木箱排成一列放在一個房間中的桌子上。囚犯們一次一個的進入房間中,每個人進去房間之後,可以打開其中五十個箱子看其中的名字,然後關上所有盒子,離開房間。囚犯之間不可以有任何的通訊。最後除非所有囚犯都能在他打開的五十個箱子中發現自己的名字,否則他們全部會被處以死刑。請問囚犯們能不能事先商量出一個策略,使得他們能夠逃過死刑的機會大於 30% ?
2. 盒中盒
許多快遞計算運費的,是以盒子的長+寬+高的數字來計算,越大就越貴。證明你沒辦法作弊把一個較貴的盒子放在一個較便宜的盒子中。
3. 點點城自殺事件
點點城的居民每個人的額頭上都有一個紅點或者是藍點(但只有一個點),只要他知道自己頭上的點的顏色,他就只能自殺。每天點點城的居名聚會一次。有一天,一個陌生人進城來了,告訴居民們「某個」他們頭上點顏色數目的資訊,「任何」一個不是廢話的資訊都可以。證明一段時間之後,所有居民們都會會因為這個資訊而自殺。
4. 不要的展開(我覺得比較沒意思)
代數學過一些x,y,z 加減乘除的運算,所以都學過怎麼用分配律把式子展開。但是你怎麼知道式子不會一直展開下去呢?
5 偷偷邦(Kleptopia)之愛
詹和瑪利亞透過網路線路愛河了,詹先望能寄給瑪利亞戒指。但不幸的,他們住在偷偷邦,所以除非放入一個被掛鎖鎖上的盒子中外,任何郵寄物都會被偷走。他們兩個人都有足夠多的掛鎖,但是沒有對方掛鎖的鑰匙。詹要如何寄戒指給瑪利亞?
6 贏得溫布敦(比較沒意思)
在暫時性的魔法作用下,你打入了溫布敦的決賽,正對上了費德勒。但可惜的是,你的魔法無法在整個比賽中持續作用。所以呢,你希望在比數是多少的時候魔法消失,這樣你才有最大的獲勝機率?
7 隨機的土著
這個比較沒什麼,也是誠實說謊隨便答的一種,而且比常見的那個還簡單。

下面這本書也可參考
Mathematical Puzzles: A Connoisseur's Collection.

Mybloglog 最近訪客 Widget 使用中文

裝了 Mybloglog,因為順便可以看一下流量。能夠掌握資料,會感覺比較自在一點。
但是 Mybloglog 的 Widget 無法正確的使用中文。
搜尋了一下網路,沒有看到解法。我相信一定有人已經找到辦法用中文了,比方餵給 javascript 一些特定的編碼之類的,不過我找了一下就放棄了。
還是直接使用 DHTML 大法。

<script>
r=document.getElementById('MBL_COMM').rows;
r[0].cells[0].innerHTML="最近的訪客";
r[r.length-2].cells[0].innerHTML=
"<a href=http://www.mybloglog.com/buzz/community/weijr/>參訪我的社群</a>";
</script>

這樣就行了。
當然其實也可以把標題 text 設成空,改用 blogger 中的 sidebar 標題也行。
不過下面那個「參訪我的社群」還是得用這個方式。


**更新:
方法更新
把 mybloglog 的 c_heading_text= 設成空字串(所以標題要另外用 html 寫),然後在mybloglog 的 script 後面加上這段 script

<script>
r=(tbl=document.getElementById('MBL_COMM')).rows;
r[r.length-2].cells[0].firstChild.innerHTML='參訪我的社群';
/*因為標題那一列設成空了,所以不會出現,把第一行陰影人 You! 改成中文*/
if((ce1=r[0].cells[1]).firstChild.innerHTML=="You!"){
ce1.firstChild.innerHTML="你!";
ce1.lastChild.innerHTML="加入我的社群";
}
tbl.deleteRow(r.length-1); /*刪除最後的 mybloglog.com 資訊,也可以選擇不刪除*/
</script>



2007年3月3日 星期六

[電影] Labyrinth 魔王迷宮

魔王迷宮這部著名的老片由珍妮佛康納莉主演,裡面的大魔王是大衛鮑伊正常的劇情是;「莎拉在照顧年幼的弟弟時,因為弟弟哭鬧不止,讓她非常心煩,所以任性地希望妖魔世界能夠將這個哭鬧的小孩給帶走。但因為她一句無心的許願咒語竟然成真,讓統治魔幻世界的賈斯進入真實世界帶走了莎拉的弟弟。賈斯告訴莎拉,能帶回她弟弟的唯一方法救是在12小時之內,通過環繞在魔幻城堡周圍的迷宮。當莎拉進入迷宮尋找正確路線的途中,時間一點一點的過去,同時她也遇到許多驚奇的挑戰,拖延著她前往解救她的弟弟...」

是這一部單純的魔幻娛樂片......對一般觀眾而言是這樣的。其實背後卻處心積慮的傳遞大量的意識形態




發信人: weijr (Magic Happens) 信區: x
標 題: [電影] Labyrinth
發信站: 透藍的盒子 BBS (Mon Aug 11 16:48:36 2003), 轉信

一個還在作夢年紀的少女,為了嬰兒受到壞男人的擺佈和控制,不顧一切的前往壞男人那裡。其間得到了一些矮小懦弱、傻大個等朋友幫助。最後決心為了小孩放棄少女的幻夢,終於從壞男人以及他的同黨那裡那裡搶回小孩,擺脫了壞男人的束縛,與樣貌醜陋但心地善良的男人生活在一起。
少女原本不甘於接受傳統社會賦予婦女照顧小孩的角色,因而憤恨不平,但在迷宮中的學習,終於瞭解到不管你喜不喜歡、公不公平,社會就是這樣。在見識過險惡的世界後,理解到自己原來的天真,終於心甘情願的接受社會所賦予的角色,並且學習拋棄自己的物質慾望。

開場的場景象徵著幻夢,結尾在臥房。從一開始發現七點了,匆忙的趕回家,到後來的限時,都象徵著青春歲月的短暫,扣時那段告訴時間過得可能你想像中的還快。下雨則告訴你因為沈迷於夢幻,沒有把握時間的後果。跑回家躲雨,則代表著家才是你的避風港。水晶球幻夢以及拾荒老太婆那一段,象徵著如果沈迷於壞男人提供的幻夢或者物質,時間稍縱即逝,最後會變成拾荒老太婆一樣,你現在所有的一切雖然美麗,
但很快都會變得破舊醜陋。所以這個場景女主角身後背了一堆華麗的玩具,對照著老太婆背著一堆垃圾。最後粉色系夢幻般的房間撕開背後變成充滿廢棄物的垃圾場。
在問兩個守門人問題,女主角自以為聰明與機智,卻差點陷入萬劫不復。在地上作記號卻徒勞無功。這些部分在於啟示年輕少女切勿自作聰明,現實世界對你太複雜了。而梨代表著毒品,看似甜美卻內有毒蟲。一開始的小仙女、以及覺得城堡也沒多遠,都是象徵著少女原來太天真了。裡面也利用迷宮多次警告選擇正確方向的重要以及一但選就沒有退路了。

--
這篇原本只是隨便扯一扯,故意斷章取義,但扯到最後連我自己都有點相信了。

最近看了這篇,又被自己騙了一次,我還信以為真了。


python: xp firewall

網路上面找到的
開xp 防火牆 port

import win32com.client
fw=win32com.client.gencache.EnsureDispatch('HNetCfg.FwMgr',0)
apps=fw.LocalPolicy.CurrentProfile.AuthorizedApplications
for app in apps:
print app.Name, app.ProcessImageFileName
newapp=win32com.client.Dispatch('HNetCfg.FwAuthorizedApplication')
newapp.Name='python_d.exe'
newapp.ProcessImageFileName='j:\\python24\\python_d.exe'
newapp.Enabled=True
apps.Add(newapp)

另外

import win32com.client
import pythoncom

# Using Python to detect if XP Firewall is enabled.
def is_WinXP_FW_Enabled():
try:
XPFW = win32com.client.gencache.EnsureDispatch('HNetCfg.FwMgr',0)
XPFW_Policy = XPFW.LocalPolicy.CurrentProfile
except pythoncom.com_error:
# Can't dispatch or access the FW COM instance.
return False
return XPFW_policy.FirewallEnabled
# Using Python to detect if XP SP 2 is installed.
def is_WinXP_SP2():
try:
objWMIService = win32com.client.GetObject("winmgmts:")
objOS = objWMIService.ExecQuery ("Select * from
Win32_OperatingSystem WHERE Caption LIKE 'Microsoft Windows XP%' AND
ServicePackMajorVersion >= 2")
if objOS.Count != 0:
# objOS.Count on Win2000 is invalid (raises com_error)
return True
except pythoncom.com_error:
# Can't access WMI so default to False.
# Maybe add some fancier error handling later.
return False
# No COM errors but not Win XP
return False