2009-07-03

Google App Engine 故障出包

昨天晚上(2009/07/02)的時候Google App Engine開始變得不穩,一開始是偶發的datastore寫入錯誤,加上讀取速度變慢,後來datastore的寫入完全無法使用,讀取則是偶爾出錯(Error: An error occurred for the API request datastore_v3.Get()),我第一次遇到這種持續完全不能用的情形,過去也曾有遇過偶發性的問題 不過通常都只會出現一下下

  File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 696, in put
    return datastore.Put(self._entity)
  File "/base/python_lib/versions/1/google/appengine/api/datastore.py", line 166, in Put
    raise _ToDatastoreError(err)
  File "/base/python_lib/versions/1/google/appengine/api/datastore.py", line 2055, in _ToDatastoreError
    raise errors[err.application_error](err.error_detail)
Timeout

甚至連管理後台(http://appengine.google.com)也整個掛掉,沒多久之後Google就立刻將datastore寫入和上傳程式碼的功能關閉,進入維修

CapabilityDisabledError: Datastore writes are temporarily disabled.

另外還關閉了Memcache的寫入功能,之前這個部份並沒有錯誤,不知道為什麼要這麼做。

經過了四個多小時的維修才恢復正常。最後google在論壇上發表的解釋,
Information regarding 2 July 2009 outage

Error Rate爆衝圖

Google App Engine確實是一個很不錯用的服務,之前才發表開始收費加值服務,結果沒多久就遇到有史以來最大的包,掛掉5個多小時,對於GAE的聲譽多少會造成影響,畢竟大家都會對Google的服務抱有較高的期望,而且掛這麼久 叫付費的人情何以堪。論壇上甚至還有人酸說比一般便宜的server hosting還不穩定XD

2009-04-04

Google Toolbar干擾Firefox 3的網址列關鍵字的最佳解決法

Firefox 3有個功能就是可以直接在網址列(address bar)輸入關鍵字,然後透過google的服務幫你直接轉到最符合的網站,例如你在網址列輸入"氣象局",就會自動幫你轉到中央氣象局的網站 ,這其實就是google好手氣的功能,如果輸入的關鍵字比較沒有偏向某個網站的話,就會列出該關鍵字的google搜尋頁面.

不過在裝了google tool bar之後這個功能在輸入中文會有問題(變成亂碼或問號???),後來在網路上找了一下發現,原來是google tool bar會把這個功能改成導向about:neterror。

可以看這篇" 火狐娘搜尋列看不懂中文~? 你安裝了GOOGLE TOOLBAR了嗎? (解決方案) ".


(前面有一段廢話 最佳解請看最後一句)

在firefox的設定(about:config )中其實可以修改在網址列輸入關鍵字的對應動作

keyword.enabled 預設 true

keyword.URL 預設 http://www.google.com.tw/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=


當裝了google toolbar之後她會自動去把keyword.URL改成"about:neterror?e=query&u=",理論上about:neterror的功能要跟原本的一樣, 可是它不認識中文...

如果你直接在about:config裡面把keyword.URL改回預設值,只有暫時有用而已,下次重開又會被改回去。

網路上一般的解法都是去改google tool bar的程式toolbar.js 位於

XP
C:\Documents and Settings\[你的帳號]\Application
Data\Mozilla\Firefox\Profiles\[ 不一定的亂數 ]\extensions\{3112ca9c-de6d-4884-a869-9855de68056c}\lib\toolbar.js

Vista
C:\Users\[你的帳號]\AppData\Roaming\Mozilla\Firefox\Profiles
\[不一定的亂數]\extensions\{3112ca9c-de6d-4884-a869-9855de68056c}\lib\toolbar.js

Portable
Firefox3\Data\profile\extensions\{3112ca9c-de6d-4884-a869-9855de68056c}\lib\toolbar.js



其中有一段程式碼會偵測如果keyword.URL的內容沒有about:neterror的話,就把它替換成"about:neterror?e=query&u="

這是屬於一個名為LinkDoctor的功能

GTB_LinkDoctor.prototype.updatePreferences_=function(){
if(this.enabled_){
var keywordUrl=this.preferences_.getPref("keyword.URL");
if(!/^about\:neterror/.test(keywordUrl)){
this.backupPreference_("keyword.URL");
this.backupPreference_("keyword.enabled")
}
try{
this.editingKeyword_=true;
this.preferences_.setPref("keyword.URL","about:neterror?e=query&u=");
this.preferences_.setPref("keyword.enabled",true)
}finally{
this.editingKeyword_=false
}
}else{
this.restorePreference_("keyword.URL");
this.restorePreference_("keyword.enabled")
}
};


我注意到if(this.enabled_) 這句,似乎表示這個替換keyword.URL的功能應該是可以設定的。

然後就在about:config中找到了幾個關於linkdoctor設定

google.toolbar.linkdoctor.enabled //是否起用linkdoctor的功能

google.toolbar.linkdoctor.backup.keyword.URL //在替換keyword.URL 時 會將原本的值備份於此

google.toolbar.linkdoctor.backup.keyword.enabled

只要把keyword.URL改回預設值,再把google.toolbar.linkdoctor.enabled 設定為false就可以解決一切了

不過想想也奇怪,總覺得這樣的功能應該會有在做出介面才對, 最後才發現根本繞了一大圈...


其實只要在Google 工具列的 選項->搜尋->網頁瀏覽工具 取消勾選"當網址不正確或無法使用時提供建議"就可以了= =|||


2009-03-22

Chrome無法啟動

最近Chrome突然無法啟動,重裝也裝不起來,另我十分困擾,才發現原來我已經依賴Google Chrome這麼深了..

雖然chromium可以用,不過chromium沒內建自動更新而且少了右鍵google選取文字的功能,用起來不太習慣。

後來研究了一下才找到解決方法。
如果你的chrome也無法啟動或安裝的話,雖然不一定跟我問題的原因一樣,但是下面解決的經驗可以參考一下

首先我先去找了chrome把檔案放在哪裡
平常的捷徑是指向"%userprofile%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe"
(p.s %userprofile% 通常是在"C:\Documents and Settings\你的帳號\")

到%userprofile%\Local Settings\Application Data\Google\底下找,砍了Update跟Chrome資料夾都沒什麼用。

不過我有注意到,當自動下載完更新的時候,他就會指到"%userprofile%\Local Settings\Temp\chrome_XXXXX\chrome.exe"
我猜chrome的作法是在下在更新檔解開到Local Settings\Temp之後,就把他捷徑指向這裡,這樣下次啟動的時候這個程式才會把更新的程式覆蓋"Local Settings\Application Data\Google\Chrome\Application",然後執行新版的chrome (要這樣做是因為chrome正在執行的時候,執行檔會被鎖住,無法更新覆蓋,但是google又想要默默的更新,不想要每次更新就叫你關掉chrome)

我先把"%userprofile%\Local Settings\Temp\"底下的東西都殺掉,然後執行chrome的安裝一邊觀察他在Temp裡面做了什麼,結果發現底下多了一個chrome_installer.log。
裡面的內容是[0322/013951:ERROR:main.cc(363)] Higher version is already installed.

這表示chrome一定有把目前版本的資訊存在一個地方。

接著以"chrome"為關鍵字搜尋登錄檔,就找到了HKEY_CURRENT_USER\Software\Google\Update\Clients\{8A69D345-D564-463c-AFF1-A69D9E530F96}
裡面紀錄著chrome的版本,將他移除之後就可以正常安裝了



問題如何產生的?
我之前就有使用Google Chrome Channel Chooser 把chrome改成DEV的版本,極有可能跟他有關。不過應該有許多人都有改,類似的案例卻不多(google chrome help上有人跟我有相同的問題 )。
比較可能的應該是自動更新下載完後,在下次啟動更新的中間意外的失敗。造成登錄已經更新版本號,但是檔案安裝不完全,無法執行。
另外如果有用了Channel Chooser改版本,然後沒有用內建的刪除,直接砍檔案的話,之後重裝也是會有一樣的問題,因為重裝的時候他預設是用stable的版本。

2009-03-15

[Note] Weekly Summary 2009/03/15

Javascript

Gallerybox
http://www.sam-sys.com/gallerybox.html

一個新的jQuery秀圖plugin 像是相簿一樣的呈現方式

GX - Javascript Animations Framework
http://gx.riccardodegni.net/
配合jQuery的動畫framework,像YUI裡面的動畫功能 那樣

Google App Engine

Reducing Page Load Time on Google App Engine Pages With Multiple JavaScripts
這篇文章主要是在介紹在google app engine中,動態的將網頁中所用到的所有javascript壓縮並合併存在memcache,這樣可以有效的減少request數,降低網站載入的時間。
我自己也有用類似的方法,不過我是在將程式update上去GAE的server之前,先去執行一個python的script把所有的javascript和CSS各合併成單一檔案,再呼叫YUI compressor 來壓縮,直接變成static file上傳。我想這樣還是比從memcache讀取來的有效率,而且當你javascript有變動update上去之後,如果沒有清掉memcache裡的資料,那網頁還是會載入舊的javascript。另外就是用YUI compressor還可以支援CSS瘦身。

JaikuEngine
http://code.google.com/p/jaikuengine/
http://jaikido.blogspot.com/2009/03/jaikuengine-is-now-open-source.html
Google之前宣佈停止Jaiku 的開發,然後把Jaiku移植到google app engine上面,並開放原始碼(就是說現在任何人都可以把他抓下來放到GAE上跑自己的Jaiku),不知道會不會有人接手維護。

John Skidgel 所製作精美又實用的Cheat Sheet, PDF檔一共有兩頁
SoftWare
Animal Shelter Manager
http://sheltermanager.sourceforge.net/home.php
真的是什麼軟體都有XD
這是個管理動物的軟體 可以適用於 動物園 動物收容中心 獸醫等地方 支援Windows, linux, BSD系列, MacOS X..多個作業系統
作者本業是個軟體工程師 因為在RSPCA (英國防止動物虐待協會, 中文網站 )當志工而寫了這套軟體

Proxifier
http://www.proxifier.com
讓不支援設定代理伺服器的程式,透過proxy連線。跟Freecap之流的軟體比起來的好處是不用透過該軟體執行,例如有個程式A執行後會去執行另一個子程式B,用Freecap就只能讓A透過
proxy,Proxifier的好處就是可以讓AB都用代理。


Sample Socks5 Proxy Server Demo
http://www.freevbcode.com/ShowCode.Asp?ID=5057
Socks 5 Server in VB
Pysocks
http://sourceforge.net/projects/pysocks/
Socks server in python







2009-03-01

[Note] Weekly Summary 2009/03/01

好久沒寫,快變成yearly summary了XD

Raphaël
目前看到最重意的javascript繪圖library,大小只有36kb,支援Firefox,Safari,Opera,IE,網站上沒提到但是chrome我測試過也可。

Cross-Browser Inline-Block
http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/
需要動態排列float的div時常遇到的問題,這篇文章提供使用CSS的解法。


Add N Edit Cookies
https://addons.mozilla.org/firefox/addon/573
Firefox修改Cookie內容的外掛


TopStyle Lite
http://www.newsgator.com/individuals/topstyle
http://www.newsgator.com/download/products/ts3lite.exe
免費版的TopStyle,編輯CSS檔十分好用


Firefox的外掛 Tiny Menu
自從使用chrome後,總覺得firefox的瀏覽畫面很小,這個外掛可以把firefox的選單放在一個鍵裡面,然後你可以自己再用自訂工具列的功能把其他按鈕和搜尋列都放到上面,這樣就可以增大一點瀏覽面積。

網路電台架設初學心得 (二)

上一篇是 網路電台架設初學心得 兩年多前寫的,待續到現在都還沒補完= =

現在剛好又有在玩電台就把他補上


附註一下,oddcast這個名稱被別的公司註冊走了,所以現在更名為Edcast,但是因為是最近改的,網路上很多資料還是用Oddcast這個名稱.

電台架構
DJ端
撥放器(foobar2000,winamp..)
擷取音訊&編碼&傳送到伺服器(oddcast/edcast)
伺服器端(shoutcast、icecast..)
需實體IP.

其中播放器跟Edcast(oddcast)必須要在同一台電腦(DJ的電腦)上,而伺服器在哪裡都可以,也可以跟DJ端在同一台,只是要在網路上放送的話,伺服器一定要有個實體IP。

現在開始介紹實際架設的步驟,以下以Foobbar2000+Edcast(Oddcast)+Soutcast為例

Step 1. DJ端的軟體安裝

Foobar2000的安裝就不介紹了,主要說明Edcast(Oddcast),可以從這裡取得http://www.oddsock.org/tools/edcast/。
他有三腫版本可以分類成:

  • 播放軟體外掛版
    • Foobar2000 Version
    • Winamp Version
  • 獨立版本
    • Standalone Version

他們的差異在之前的文章就已經說明過了,在使用上兩種版本的選擇:

  • DJ要透過麥克風講話 → 獨立版本
  • 使用Foobar2000 、Winamp以外的軟體播放音樂→ 獨立版本
  • DJ不說話 + 不希望電腦的聲音(例如你正在瀏覽的網頁播放的音樂) 傳到廣播→ 播放軟體外掛版

選擇你需要的版下載後,就直接執行安裝檔,兩種版本的安裝步驟很類似

  1. 選擇要安裝的東西 - Edcast本身以及音訊編碼(select compoments to install)
    跳過第一個同意授權的畫面之後,就會到要你勾選一些編碼的視窗(裡面有),Edcast(Oddcast)負責擷取聲音然後轉成mp3、ogg之類的格式在傳道伺服器,而轉換mp3、ogg等格式的工作Edcast(Oddcast)是依賴別人寫好的一些程式,這裡勾選的東西除了Edcast本身的程式之外就是這些用來轉檔的程式(XXX.dll),其中專MP3編碼這個最常用的程式檔,因為授權的關係沒辦法附在Eddcast裡面,所以預設沒勾選,就算你勾選了,它等一下也只會跳出可以下載的網頁,所以這裡也不用急著勾選MP3。
    不知道上面在說什麼也沒關係,這一頁完全不用動它,按Next就好了
  2. 要裝在哪?
    獨立版的話,就選個你想裝的地方安裝就好了
    Foobar2000外掛版就要選擇你當初裝foobar2000的地方(winamp同理),特別注意的是,如果你的foobar2000正開著,安裝完之後要重開Edcast才會出現。
  3. 安裝MP3編碼
    為了讓你電台能被大部分的人收聽,我想每個DJ都會需要這個步驟,因為一般使用windows的聽眾,如果沒有特別安裝什麼播放軟體或編碼,大概也只能聽mp3格式的廣播。不過edcast裡面沒有附(可能是因為授權的問題),所以我們要自己去下載。我們需要的檔案名稱叫做"lame_enc.dll",你可以直接Google "lame_enc.dll" 找載點,或是到RareWares網站 的Lame mp3下載頁 選個比較新的下在就可以了,壓縮檔裡面會有個lame_enc.dll,依照你使用的edcast版本放到適當地地方。
    - 如果是使用獨立(standalone)版本,就把他放到安裝edcast的資料夾下面。
    - 播放軟體外掛的版本就放到播放軟體的資料夾下面,例如foobar2000就放到跟foobar2000.exe同個資料夾
這樣就完成DJ端軟體的安裝
Step 2. Server端的軟體安裝與設定

如果是連接別人的伺服器或打算使用免費伺服器(LiveDoor)的可以跳過這步驟。
這裡介紹的廣播伺服器軟體是ShoutCast,(除此之外還有開放原始碼的ICEcast這裡就不多作說明)。
ShoutCast不一定要安裝再跟DJ貒同一台電腦,這裡有個之前提過的重要觀念,就是關於音樂資料的流向。
DJ端跟Server端在不同電腦

DJ端
Server端 聽眾端
edcast將聲音轉成MP3 → ShoutCast接收到MP3資料,發送給聽眾 →
→
→
...
→
聽眾1
聽眾2
聽眾3
...
聽眾N
從這裡可以觀察到,當DJ以16kb/s的頻寬上傳音樂到Server端,而同時有5個聽眾的話,Server端將負擔16x5=80kb/s的上傳流量,但是不管變成多少聽眾DJ端的電腦都只要上傳16kb/s的流量。
DJ端跟Server端在同一台電腦
DJ端 聽眾端
edcast將聲音轉成MP3
↓
ShoutCast接收到MP3資料
發送給聽眾
→
→
→
...
→
聽眾1
聽眾2
聽眾3
...
聽眾N
所以不管怎樣Server端盡量放在頻寬比較大的電腦,這樣才能增加可收聽的的聽眾,例如DJ的網路只有2M/512,但是他有個朋友A用的是學網,那就可以請他朋友安裝shoutcast,DJ只用edcast連線到A的電腦,聽眾再連到A的電腦收聽,這樣就能容納叫多的聽眾。
另外,Server端"必須"要有實體IP可以連接,虛擬IP的話需要從防火牆設定,不過些再講下去就離題了,看不懂的可以google一下"虛擬IP"。

  1. 下載並安裝軟體
    到ShoutCast網站的server下載頁 依照伺服器的作業系統版本下載並安裝。(windows以外的版本直接解壓縮就可以用了)
  2. 設定ShoutCast (修改sc_serv.ini)
    這裡先只提幾個最重要的設定來修改,將sc_serv.ini打開後,找到以下項目修改
    - MaxUser: 最大聽眾數,預設是32人,這部份請依照自己頻寬調整,如果頻寬負荷不了,聽眾聽起來會很lag。
    - Password: DJ端連接到shoutcast的密碼。
    - PortBase: shoutcast所使用的port,預設是8000,假如你的伺服器IP是123.21.21.21,那聽眾就可以從http://123.21.21.21:8000收聽
設定完成後直接執行就可以了

接下來就是DJ端(edcast)連線到伺服器的設定...待待待續...
(三個"待"表示下篇不知道什麼時候才會寫..


2009-02-25

Google App Engine準備開始提供收費服務

在Google App Engine 的Blog 發表了"New! Grow your app beyond the free quotas! ", 預計在90天之內開放超出Quota資源的付費資源。

超出Quota的收費是採用多少資源收多少費用的方式,你可以依照預算設定一個支付額度的上限,主要可設定項目只有Outgoing Bandwidth, Incoming Bandwidth, CPU Time, Stored Data, Recipients Emailed這五項。 不過當你啟用付費功能的時候,其他的Quota都會提高許多,詳細的內容可以看更新過後的Quota說明。但是像單檔10MB、資料庫每筆1MB的限制還是不會變。

在宣佈收費方式的同時 Google也決定對免費的Quota做了一些改變

  • CPU Time從46.30 hours/day減少到6.5hours/day
  • 頻寬從 10GB減少到1GB
  • 為了補償,從現在起 儲存容量從500MB增加到1GB


說實在的改很大,改不用錢。這個動作還是為了區隔出付費的使用者,不過我想對大部分的普通使用者影響應該不大,為了維持GAE的營運我認為是可以接受的 。

調低免費Quota也表示從GAE開放到現在,GAE的使用情形沒有google預期的熱絡。大部分的人都是用來建一些中小型網站。

不過之前並沒有付費的機制,只有固定Quota,我想也不會有商業使用者貿然將大型的project建構在GAE上。我認為GAE宣佈開放付費可以看作Google在對商業使用者招手說:「 GAE已經是一個成熟可以賣的產品了,請安心的購買吧!」 (尤其最近Google決定關掉一些服務,總是讓人會有種不信任感,會不會哪天建在GAE上的網站,突然被宣佈要關閉,而且最可怕的是,用它api寫出來的程式幾乎沒辦法直接轉移到其他地方..)

除此之外,GAE目只能使用python作為撰寫的語言(雖然有發表將支援其他語言的計劃,不過目前還是沒看到新的動靜) 也是沒那麼多人用的原因。儘管python的後勢看漲,看看TIOBE的排名 或是用Google Trend比較搜尋的結果,目前的python佔有率仍然比PHP少上許多,況且PHP幾乎都是用在Web上,而Python用在web上還算少數。GEA若推出PHP作為runtime language,想必可以立即吸引許多現有的的技術人力使用GAE。另外最被看好會支援的java來說,個人認為它雖然具有淺力,但是經濟效益還是沒有PHP來的高。主要還是因為使用java的人雖然很多,但是用在server side的比率還是比較少,而這個結構短期內不太可能會有變動。

GAE現在除了限制之外,還有一些沒支援但是對一些網站非常重要的功能,例如在背景執行、訂時執行的程式,不過在最近GAE在blog正式宣佈將會支援這些功能(A roadmap update!) 。

目前把GAE拿來作非玩票性質使用的網站還不多,不過隨著付費服務的開始,相信在今年GAE將會做出許多改變。

2009-02-20

[筆記] Accelerated Concomitant Boost Radiotherapy

在網路上找Accelerated Concomitant Boost Radiotherapy 的定義,結果好像太冷門都沒中文的資料,英文也沒看到明確說明,其實內容不困難只是不好找。故筆記於此,希望可以幫到也在搜尋這個詞的人。以下是個人的理解

Accelerated Concomitant Boost Radiotherapy是一種fractionation(照射的schedule),他跟 Accelerated Radiotherapy(把整個照射療程的時間濃縮)與Hyperfractionated Radiotherapy (將每天的劑量提高,然後分成早上跟下午兩次照射,提高整個療程的劑量)都有些類似的地方。Accelerated Concomitant Boost Radiotherapy的概念很簡單,為了讓腫瘤可以比旁邊正常組織照射到更高的劑量,就在原本的治療範圍內,畫一個較小更接近腫瘤的區域(boost field),然後在該區域多照射一次。

看一下實際上照射的schedule就很容易理解,每篇paper都不太一樣,舉 "Wolden SL, Zelefsky MJ, Kraus DH; et al. Accelerated concomitant boost radiotherapy and chemotherapy for advanced nasopharyngeal carcinoma. J Clin Oncol. 2001"這篇使用的方法:

整個療程一共6周
照射的範圍分成兩種:

Large field: 包涵primary tumor, skull base, and bilateral neck
Boost field: 包涵primary tumor以及其侵犯的範圍
(Boost field包涵在Large field:之內)

從1到6周每天都將1.8 Gy的劑量照射到Large field
但是第5、6周每天除了Large field照射的1.8Gy外,會在那次照射6小時後,追加1.6Gy的劑量到Boost field

有點模擬IMRT的味道 ,不過實際效果還是不一樣就是了。

2009-01-25

新年COSPLAY - 貓耳×兔耳


雖然剛穿上去的時候不太爽



後來比較習慣就可以穿著睡覺了


明明就很溫暖 表面上生氣 其實喜歡的很XD

貓耳×兔耳×傲嬌.... 太萌啦!!

2009-01-02

Yahoo Media Player與網路電台 (shoutcast , icecast)

Yahoo Media Player (http://mediaplayer.yahoo.com/)是一個讓你在網頁上放置一個MP3播放器的一個javascript,只要很簡單的步驟就可以讓你blog或網站上的音樂檔連結一點就直接在網頁上播放(方法請看他網站 很簡單)。 這種東西並當然不是第一次出現,但是YMP的特色在於易用性、支援串流還有跨平台。

事實上 他是透過javascript控制一個flash來播放,所以mp3播放的部份可以跨平台。

另外在某些情況下它不只支援mp3,例如在windows上只要你windows media player可以播放的它都能放,例如你有裝ogg plugin 就可以用他撥ogg,不過這種還要收聽者電腦安裝其他東西的功能就顯得比較沒用一點。

我對這東西有興趣的地方在於支援串流以及跨平台的部份,這表示他可以當作一個不錯的網路電台撥放器。

Yahoo Media Player 載入完畢後會自動抓取網頁中所有連結網址(href)中有.mp3的部份,然後將他改成點擊就播放的連結。可是電台的收聽網址通常都不是mp3結尾。我們可以在連結的class加入htrack作為標示,YMP會抓取class有htrack的連結作為播放連結。如下:

<a class="htrack" href=http://xxxx.fff.xxxx:8000/fff>點此收聽</a>

目前大家最常用的shoutcast , icecast這兩個電台server,要使用YMP來收聽電台的話,電台音源必須要是mp3,除非聽眾的電腦有裝ogg plugin(要他電腦的windows media player可以播放ogg才算,其他foobar200, winamp等是內建ogg支援的 )。不過就我的測試,只有icecast的可以向上面的那個方式使用。如果電台是shoutcast的話,直接放"http://xxxx.fff.xxxx:8000","http://xxxx.fff.xxxx:8000/listen.pls"都沒辦法收聽。 在網路上找到的解法就是用http://xxxx.fff.xxxx:8000/;aaa.mp3 (那個aaa是可以隨便替換的),這個方法就是在shoutcast server網址的後面加上 ;(隨便打什麼字).mp3 。


<a class="htrack" href=http://xxxx.fff.xxxx:8000/;listen.mp3>點此收聽</a>
(這裡正常情況下 class="htrack"可以不用加 因為副檔名是mp3)

下面這個是我修改shoutcast server (windows版), 在介面中加入yahoo media player

修改的地方有 (有興趣的也可以用 hex editors自己改)
1. 在header加入:<script type="text/javascript" src="http://mediaplayer.yahoo.com/latest"></script>
2. Listen的連結改成<a class="tn1 htrack" href="./;listen.mp3">Listen</a>
3. header中的charset改成big5
注意:
如果是在開電台的電腦上看(網址是localhost)的話,可能會因為瀏覽器安全性設定的關係造成運作不正常(因為瀏覽器預設通常不能在localhost載入flash)。
下載 Shoutcast Server1.9.8 + Yahoo Media Player + Big5

補充一下一些資源:

Wiki http://yahoomediaplayer.wikia.com/wiki

API Document http://mediaplayer.yahoo.com/api/