分類
數學

有趣的機率-Monty Hall problem

這是個有趣的數學機率問題.

電視節目上, 有三個門, 其中只有一個門有汽車, 而另外兩個門後面沒有東西, 讓參賽者上台選擇. (原節目中的內容是空門後放山羊), 圖示如下:

一般的狀況下, 為了增加收視率, 提升刺激性, 主持人會參與, 把其中一個沒有東西的門打開, 讓參賽者再來選擇, 是否要更換門, 來選擇獲得汽車大獎的可能. 理論上是換而獲得的機會會增加.

這個問題表面上看起來的確不是這麼一回事, 主要是定義明確性的問題, 會導致想法發生誤解. 若是先把條件說明清楚的狀況下, 就是一個蠻單純的數學機率問題了.

這個問題叫做 蒙提霍爾問題 (Monty Hall problem). 可以參考 wikipedia 上的資料(link).

接下來來定義一下問題.

  1. 有三個門, 而參賽者不知後方的汽車在哪個門
  2. 主持人知道汽車在哪個門, 並會在參賽者選好門後, 總是開啟剩下兩個門中, 其中一個沒有汽車的門.
  3. 參賽者可以獨立選擇要換或是不換.

再來分析看看獲獎狀況的機率:

  1. 參賽者選空門1, 主持人選空門2, 參賽者換門後獲獎.
  2. 參賽者選空門2, 主持人選空門1, 參賽者換門後獲獎.
  3. 參賽者選汽車, 主持人選任一門, 參賽者換門後失敗.

從上述的狀況來看, 參賽者在總是換門的結果下, 只有一開始選中汽車的狀況下不會獲獎, 否則就會因為換了門而獲獎, 如此一來, 便能看出, 總是換門會有較高的獲獎機會 2/3 : 1/3, 也就是獲獎機會倍增的由來.

因為很容易發生直覺上誤判的問題, 所以這個問題, 也常被稱之為蒙提霍爾悖論, 十分有趣.

參考資料:
http://zh.wikipedia.org/zh-tw/%E6%A6%82%E7%8E%87%E8%AE%BA
http://zh.wikipedia.org/zh-tw/%E8%92%99%E6%8F%90%E9%9C%8D%E7%88%BE%E5%95%8F%E9%A1%8C

[2010/5/28 21:05]剛看到一個影音版的說明, 也順便提供給大家參考:
引用自: http://www.im.tv/vlog/personal/879704/6278986

分類
手機大未來

租用wimax網卡

Wimax的運營商大多開台了, 只是覆蓋率及營運的範圍各有所不同. 因為在工作的地方在台北市, 所以想說來測看看 vmax (威邁思) 的 Wimax 效果如何. 不過沒有試用方案, 剛好最近在這裡找到了可以租用的 solution, 也方便進行測試, 不用去真的申辦 Wimax, 又可以先試用看看.

網址在這裡: http://www.ivideo.com.tw/rent_memory/video_detail.asp?film_id=40968 這家網上出租 3c 設備的服務, 原來是一家線上租片的公司, 也兼營 3g 網卡出租, 現在再推出了 Wimax 網卡出租, 特別適合要短期使用, 或是要測試自已常用的環境網路狀況時, 選擇申辦業者前的一個好的測試應用. 若看到這篇文章的朋友們, 願意加入該公司會員, 可以填上小弟的 email 來申請, 可以賺一些點數, 另外若是要隔日取件的話, 建議選 OK, 萊爾富, 而 7-11 似乎只能後天取件, 所以會慢一點.

好的, 接下來就是威邁思網卡的使用了, 我的 notebook 是跑 windows 7 x64, 之前有看到似乎 wimax 網卡的 driver 還沒有 windows 7 的, 要先在 xp / vista 下先升級該網卡的 firmware (因為 driver 也都 built-in 在 firmware 裡), 但我拿到的網卡, 說明書已有 support windows 7了, 也就省去煩人的升級步驟, 直接安裝即可.

以下是實測的擷圖, 下載:
上傳:

平均下行可達 3.7M, 上行可達 800kbps, 與規格上的 4m/2m 不會差太多, 而且和 3g / 3.75g 比起來的下行速度真的不太能比, 因為快太多了. 不過比較擔心的就是覆蓋率的問題, 所以用這種短租先來測看看效果很實用. vmax 的覆蓋率在這裡: http://www.vmax.net.tw/coverage/index.do

官方的測試速度結果如下:

安裝好了之後的設備, 在 windows 7 下會多一張網卡, 如下圖:

配發出來的 IP 在 TWNIC 上查到的資料如下:

雖然有上面資訊了, 但是在 TWNIC 的頻寬連線圖上並沒有看到 vmax 的頻寬狀況, 而利用 tracert 查到的結果, 看起來是走 ebix.net.tw 也就是亞太線上的出口. 但俱體的頻寬就不得而知了.

整體來說, 目前的實測使用者體驗相當不錯, 而且是在室內, 不過是在覆蓋率良好的藍區, 其他地的測試, 有機會再補上. 若有興趣租來測試的朋友們可以試看看!

分類
好用軟體

Microsoft IE9 Demo

剛在找 HTML5 的資料時, 發現 IE9 已支援 HTML5 的不少功能. 上網查一下, 有個 Internet Explorer 9: Platform Demos, 連結在此: http://ie.microsoft.com/testdrive/

其中有許多 Demo 的項目, 有趣的是在 Speed Demos 中有一些 Javascript 的效能測試, 例如像是 Flying images: http://ie.microsoft.com/testdrive/Performance/01FlyingImages/Default.html 可以用來測試用 Javascript 測試動畫效率的 Demo 頁, 也可以跑在現有的瀏覽器上. IE9 新的 Chakra 希望能在 Client Javascript 上能扳回一些頹勢.

不過 IE9 也不再 XP 上執行了, 這個史上最長命的 Microsoft 產品也被 IE9 放棄支援了呢.

至於其他功能呢? 可以到時候再來玩看看!

但 IE8 也才出來一年多, IE9 已經緒勢待發了, 各家瀏覽器也都在摩拳擦掌, 而 Adobe Flash 在 Apple iPhone, iPad 上的不支援打得也正火熱, 這個兵家必爭之地, 相信大有看頭!

分類
Windows

如何取得磁碟分割的叢集大小

一般在格式化磁碟(應該說分割區-partition)時, 有個選項可以設定, 就是叢集大小.

但是指定完成後, 要查詢, 卻不是那麼容易. 可以利用 chkdsk 指定來達成 (http://support.microsoft.com/kb/245436/en-us/), 但是總會需要到檢查一段依磁碟大小愈大而愈久的檢查, 有沒有辦法有更直接的方法?

若是在 NTFS 分割區時, 可以利用指令來達成:

fsutil fsinfo ntfsinfo c:

結果如下:

NTFS Volume Serial Number : 0x3accf140ccf0f74b
Version : 3.1
Number Sectors : 0x0000000009c41ad7
Total Clusters : 0x000000000138835a
Free Clusters : 0x0000000000c9dd73
Total Reserved : 0x0000000000000060
Bytes Per Sector : 512
Bytes Per Cluster : 4096
Bytes Per FileRecord Segment : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length : 0x0000000008c64000
Mft Start Lcn : 0x00000000000c0000
Mft2 Start Lcn : 0x00000000009c41ad
Mft Zone Start : 0x0000000000e2a2c0
Mft Zone End : 0x00000000010926e0

但是這個僅適用於 NTFS, 若是 FAT32 的話呢? 再找看看其他的方式, 可以利用 WMI 來達成, 如下: (以下是 VBScript)

strComputer = "."
strDrive = "c:" 

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colVolumes = objWMIService.ExecQuery("Select * from Win32_Volume Where Name='" & strDrive & "\\'")

For Each objVolume in colVolumes
    errResult = objVolume.DefragAnalysis(blnRecommended, objReport)
    If errResult = 0 then
        Wscript.Echo "Cluster size: " & objReport.ClusterSize
    End If
Next

這個是利用了 WMI , 使用DefragAnalysis 的功能, 來取出磁碟資訊的方式, 其中有 ClusterSize 的屬性(單位是 bytes), 可以做為檢查磁碟 ClusterSize 這個功能. 其中的 strDrive 就是要查詢的磁碟機代碼, 也可以讀取 FAT32 的磁碟分割, 十分方便, 速度也很快.

本文介紹的兩種方式, 可以依實際狀況來使用, 很方便.

參考資料:

微軟KB: http://support.microsoft.com/kb/245436/en-us/

http://www.vistax64.com/powershell/77645-getting-cluster-size-your-hard-disk.html

http://www.activexperts.com/activmonitor/windowsmanagement/scripts/storage/diskdrives/physical/#AVD.htm

http://www.scribd.com/doc/15490968/Windows-Server-Cookbook-by-OReilly-Media (這本書的108頁)

http://msdn.microsoft.com/en-us/library/aa389827%28VS.85%29.aspx

分類
Windows

Outlook Express升級到Live Mail

這篇主要是因為從 Windows XP 升級到 Windows 7 時, 若用戶有用原來的 Outlook Express 也要升到 Windows 7 沒有內建 mail client 的做法.

相信微軟也知道大多數的用戶已經習慣了 Web Mail 這樣好用的工具, 所以在 Vista 中有內建 Windows Mail, 而到了 Windows 7 就沒有 mail client 可用了. 但大家應該有發現, 其實在下載 Live Messenger 時, 就有個 Live Mail 可用, 這個就是 Outlook Express (Windows XP) 升到 Windows Mail (Windows Vista) 之後再升到 Live Mail (Windows 7)的狀況了.

由於這次是 Windows XP 改到 Windows 7, 所以需要從 Outlook Express 中的用戶信件存檔先 copy 出來, 再到重灌好的 Windows 7 (或另一台電腦), 再利用匯入的方式進行即可. 而用戶信件存檔的目錄在哪裡呢? 可以參考這篇: http://support.microsoft.com/kb/977197/zh-tw

另外要再補充的一點, 就是帳戶的部分也是可以由 outlook express 匯出的 *.iaf 檔, 在 Live Mail 中匯入的, 簡單地說, Live Mail 是可以整個承接原來在 Windows XP 下的 Outlook Express 的.

下載 Live Mail 可以到這裡: http://download.live.com/wlmail

分類
程式技術

在Flash中取得所在網頁及被嵌入的網址

這個題目好難下. 主要是要說明, 在 Flash 中的 swf 程式內, 如何取得該 swf 嵌在哪個網頁(url), 以及被嵌入使用的 url (註1). 以下介紹的是在 AS3 下的作法.

(註1)的部分是指 <embed src=”XXXXXXX” /> 的其中 “XXXXXXX” 的部分.

程式碼並不複雜, 主要是利用了 ExternalInterface.call(“window.location.href.toString”); 來取得該 swf 嵌在哪個網頁(url).

而被嵌入的 url 則是利用了 loaderInfo 中的 loaderURL 取得, 程式碼如下:

import flash.external.*;

var strUrl:String;
var strQueryString:String;

strUrl = ExternalInterface.call("window.location.href.toString");

strQueryString = "";

var params:Array = strUrl.split('?');
if(params.length>1)
{
    strQueryString = params[1];
}

var strEQueryString:String;
strEQueryString ="";
for (var s1:String in this.loaderInfo.parameters) {

  strEQueryString += s1 + "=" + this.loaderInfo.parameters[s1] + ";";
}
 
 
output_txt.text = 
  "Result:\n"+
  "location="+strUrl+"\n"+"querystring="+strQueryString+"\n"+
  "embed-url="+this.loaderInfo.loaderURL+"\n"+
  "embed-querystring="+strEQueryString+"\n";

取得第一個部分, 是取出整個 url 後, 再自行解析 (parse) 出 querystring 內容. 而在第二個部分, 因為是使用 loaderInfo, 所以 querystring 的參數可以直接使用 parameters 來取得.

sample link : http://sample.diary.tw/21/sample.htm?q1=123&q2=456&q3=789

其中 embed 的內容為: location.swf?eq1=abc&eq2=def 所以出現的結果如下:

參考資料:
http://ccutmis2.spaces.live.com/Blog/cns!F858878FA572B430!1016.entry
http://mc-computing.com/Languages/ActionScript/Getting_html_data.html

Alexa世界大站

好一陣子沒有在看 Alexa 排行榜了, 發現 YAHOO 掉到第4名了, 猜了一下, 去年 Google 才擠下 yahoo (LINK), 後面應該還有 facebook 和 youtube 也擠下 yahoo, 於是到 ALEXA 排行榜查看, 果然 (Alexa Top 500 Global Sites), 名次如下:

  1. Google.com
  2. Facebook.com
  3. Youtube.com
  4. Yahoo.com
  5. Live.com
  6. Wikipedia.org
  7. Blogger.com
  8. Baidu.com
  9. Msn.com
  10. Qq.com

再來看看走勢圖, 以下列出前5名的比較:
Reach:

看得出來, Reach的部分 Facebook 成長驚人啊.
再來是 PageViews:

有持續成長的只有 google 及 facebook, 而 yahoo 是下挫的十分嚴重.
再來看看停留時間:

Facebook 更是一支獨秀, 而 youtube 也是因為影音的關係, 所以停留時間也長.
最後就是 RANK 的部分:

yahoo 從 2009年初被 google 擠到第二名後, 在 2009 暑假又被 facebook 追過來到第三名, 而 facebook 也在 2009/6左右超過 youtube 來到第三後, 再超越 yahoo 到第二名. 看這個名次的競爭真激烈啊.

不過也看得出來, facebook 的力量真是很驚人呢!

分類
PHP

php include file的檢查

在 php 程式中, 使用 include 的方式來將檔案含入是很常見的語法.

但是若某 php 程式, 同時會發生被 include 或獨立執行時, 如何判斷呢? 或是說某 1.php 程式, 本身可以執行, 也會被 2.php include, 但發生這兩種不同的狀況時, 會需要 1.php 有不同的執行結果, 要如何偵測這個狀況呢?

目前查到的手法, 是利用 __FILE__ 和 $_SERVER[“SCRIPT_FILNENAME”] 兩個變數來檢查. 也就是說, 在 1.php 的程式中, 使用如下的程式片斷:

if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__))
{
    echo "1.php is running alone";
}
else
{
    echo "1.php is included by ".basename($_SERVER['SCRIPT_FILENAME']);
}

這是利用了 __FILE__ 這個 php 常數, 在 php 程式中, 會被設定為自己的檔名的緣故, 所以可以這樣來利用判斷. 或許還有其他手法, 或更直接的方式來判斷, 也歡迎大家提供!!

參考資料: http://www.programmer-club.com.tw/ShowSameTitleN/php/6727.html
關於 __FILE__ 的這個 magic constant 可以參考: http://www.php.net/manual/en/language.constants.predefined.php

分類
Windows

好用工具svchost viewer

偶然在 windows server 上會發現記憶體愈來愈少. 但是又是無法重新開機的狀況, 利用 task manager 會發現有個吃記憶體的怪獸, svchost.exe

這個 svchost.exe 望文生義, 就是個 host 服務的程式, 所以本身並無特別的執行項目, 而必須看他 host 什麼樣的服務, 這裡有個工具, svchost viewer: http://www.codeplex.com/svchostviewer , 就是專門用來看 svchost 的每個服務使用了多少記憶體及服務名稱, 方便在 svchost.exe 吃大量記憶體時, 查找原因所在.

這個 svchost viewer 是專查 svchost.exe 這個 process 的工具, 其實還有另一個功能更強大的工具, process explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx , 這個工具原本是在 sysinternal 這家公司, 早些年因為它的 utility 很豐富, 而且功能又都很強大(看它的名字叫 sysinternal 就能明白), 所以被微軟收購下來. 這個 process explorer 功能更多, 但若是拿來看 svchost 的 process 也能查找對應 svchost viewer 的功能, 但多更多其他的功能就是了.

這篇文章介紹了 svchost viewer 的介面及用法, 可以參考看看: 對一堆正在執行的 svchost.exe 好奇嗎?Svchost Viewer 可以給你答案 http://blog.joaoko.net/archives/1070

利用這樣的工具, 之前 svchost.exe 吃掉了 1g多的記憶體, 原來是 remote register 這個 service 用掉 1.06g 的記憶體, 真是太嚇人了, 停掉該服務後, 果然記憶體就還回來囉, 再次啟動這個服務, 又讓系統有充裕的記憶體可用了.

分類
.net

Rewrite造成的403問題

之前介紹過這個軟體: ISAPIREWRITE https://diary.tw/archives/260

在 iis 下, 使用這個 isapirewrite 時, 要特別注意應用程式集區問題, 若是 rewrite 前後 application 使用不同的 app pool 時, 會發生 403 拒絕存取.

簡單地說, rewrite 的前後, 使用相同的 app pool 時, 這個問題就不會發生, 但有時為了增進效能及除錯應用, 或是獨立 web application, 切到不同的 app pool.

例如:

RewriteCond ^/test/([a-z0-9]+) /test/url.aspx?uid=$1 [I, CL, L]

都是在 /test 下的這個 app pool, 可以正常工作, 若是以下的 rewrite:

RewriteCond ^/test2/([a-z0-9]+) /test/url.aspx?uid=$1 [I, CL, L]

若是 /test2 和 /test 使用不同 app pool (應用程式集區) 時, 就會發生 403 的拒絕存取.

這是今天在除錯時發現的一個重大問題. 若有不明的 403 在 rewrite 上時, 可以往這個方向檢查看看!