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

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