脫胎換骨的 Fubar IV

自從上次跟同事去中華路品嘉試聽了一個下午,買了 Fubar IV 回家之後,每天都接著我的 Sennheiser HD555 耳罩耳機,沉浸在 Fubar 高音質的音樂饗宴中。真的沒話說,電光火石出品的 Fubar IV 對電腦族來說,在同價位的 USB DAC 中,真的是最好的朋友。

簡單來說,Fubar IV 就是一個外接音效卡,可藉由 USB / 光纖 / 同軸 端子將數位訊號轉換為人類耳朵聽得到的類比訊號,在輸出給耳機或是後級擴大機。之前在公司的 P4 老電腦上接著耳機聽音樂,在音樂的段落中間都會聽到耳機中傳來些許嘶嘶鬼叫的聲音,起初以為是音樂檔案的問題,但是我將同一個檔案拿到手機上播放並不會有這些雜音出現。於是我將這個情況請教了一下在公司俗稱“王董”的發燒友同事,才知道原來那是因為現在大部分的主機板都內建了音效裝置,而主機板上的干擾源很多,音效卡在進行數位轉換類比的過程中,很容易就受到干擾而產生雜音,尤其是廉價的 AC97 音效卡最明顯,而剛好公司電腦上的內建音效卡就是 AC97。在公司我用的是兩百塊錢的廉價鐵三角耳塞式耳機,沒想到便宜的耳機雜音都還聽得這麼清楚,那好一點的耳機不是更明顯了?

王董於是建議我買一個 USB DAC,藉由 USB 將數位訊號從主機板傳送出來,在外部的 DAC ( Digital-to-Analog Converter) 進行數位類比轉換,於是就可以避免電腦主機板上的干擾源所帶來的干擾雜音。所以我就跟王董跑去中華路上很有名的品嘉,打算好好試聽之後,買一組適合我的 USB DAC。於是 Fubar IV 就這麼帶回家來了。

電光火石 Fubar IV Plus AMP,同時具備 USB DAC 以及耳擴的功能。說明書上提到,Plus 版本還可以將所有輸入訊源,升頻至 24bit / 192KHz (註:但是在 [閒聊]電光火石的新玩具:Fubar IV Plus 一文中提到只有 光纖/同軸 輸入才能進行升頻,在這裡我以官方說法為主)。耳機從前方接入,同時 Fubar IV 也具備簡單的耳擴線路,所以前方也有一個音量調整的轉鈕。

背面的端子如下。左邊是一組 RCA 輸出端子,所以可以再外接一組耳擴,或是一台後級擴大機再外接喇叭。中間部份就是所有數位訊號的輸入端子,分別為 光纖 / 同軸 / USB,所以視前端設備具備的數位輸出端子,Fubar IV 都可以接入訊號來進行數位轉類比處理。最右邊是 DC 電源接頭以及訊號增益開關。如果耳機屬於高阻抗耳機,像是我的 HD555,就可以切到 High。

聽了一陣子之後,最近王董又告訴我一個花小錢,卻可以大大提昇音質的方法 (謎之音:真是個推人入坑的惡魔啊! )。王董說在 DAC 與耳擴上都會有一些放大器晶片,不同的放大器晶片造就出來的音質也有很大的差異。他自己買的 Fubar II 已經更換過兩種放大器晶片,而且更換的方法很簡單,照表操課就可以輕鬆完成。每種放大器晶片價錢也都不太一樣,價錢從十幾元到上千元都有。呵,雖然價錢是不多,但是如果換起來效果比原來還差,那就浪費錢了。於是我就跟王董商借他更換過,目前沒在使用的放大器晶片回家試試。

用 Fubar IV 本身附送的六角形鈑手 (看起來電光火石送這隻鈑手本來就是要讓發燒友自行更換放大器的 ),很輕鬆的就可以把 Fubar IV 的外殼打開。打開以後分為上下兩塊電路板,上方那塊電路板為 DAC 線路,然後藉由彩虹排線,將類比訊號傳輸到下方的耳擴電路板上,然後再輸出到耳機端子或是 RCA 端子。

將排線分開之後,DAC 電路板

耳擴電路板

今天要動手更換的放大器晶片,右邊是主放大器,Fubar IV 內建的是 BB OPA2604AP。左邊是 DC Servo 放大器,內建的是 TL072CP

王董借我兩顆放大器,一顆是 Philips NE5532AFE,市價大概四五百元,另一顆是廉價的 NE5532P,一顆才 15 元
一顆 15 元的 NE5532P 放大器

預計換上當主放大器的 Philips NE5532AFE (景深沒控制好 )

工欲善其事,必先利其器!老實說放大器的接腳還蠻軟的,一個施力不均很容易就折到,甚至就斷掉那就慘了。網路上大多是說用小型一字起子慢慢把放大器撬起來,但是我想到之前買 FILCO 鍵盤時,我有順便買了一個拔鍵器,它就是專門來對付這種縫隙很小,又得直上直下順順拔起的好東西,那就拿拔鍵器來試試看吧。拔鍵器就是下面這個啦!

就像這樣,右手把拔鍵器兩個尖端插入放大器的縫隙中,然後用拔鍵器前端的卡榫卡住放大器的兩端下緣,左手抓牢電路板,接著稍微一施力,放大器跟電路板就分開啦!

兩個放大器都拔下來之後,將原本主放大器 BB OPA2604AP 改拿來當作 DC Servo 放大器,也就是插上左邊的插槽。然後將 Philips NE5532AFE 放大器插上右邊主放大器的插槽。 記得插槽半圓形缺口要對準放大器的半圓形缺口,腳位才會正確。兩個放大器都更換完畢之後,就可以把彩虹排線接回來啦!

大功告成!

可以接電開始來享受啦!沒想到接上去之後真的還差蠻多的,之前雖然 Fubar IV 內建的 OPA2604AP 播放出來的聲音讓我已經覺得很好了,沒想到換了放大器之後,聲音的解析度好很多,人聲聽起來清亮很多。樂器聲音聽起來也厚實許多。另外音場也更開闊了,HD555 原本就屬於開放式耳罩,音場聽起來已經比封閉式耳機好上許多,換了放大器之後真的有那種在音樂廳聽音樂的感覺,聲音聽起來並不會覺得是從耳朵旁邊的耳機播放的樣子! 難怪王董會這麼推薦我自行更換 Fubar IV 的放大器,看起來真的是用小錢換得大大享受!

新桌機終於帶回家了

從開始使用 Notebook 之後,我的桌機就一直停留在 P4 2.8HT 的年代,平常個人使用 Notebook 上網閒逛,偶爾寫寫小程式,而桌機的用途便只剩下照片轉檔的功能而已。搬到台北來以後,家裡空間太小,P4 那台龐然大物沒辦法搬來台北,於是照片轉檔的工作便落在可憐的 eeeBox 身上。用 eeeBox 來轉照片不是不行,只是那效能貧弱的 ATOM 核心,動輒數 GB 的照片,大概都得花個數天的時間才能處理完畢,真的是太慢了,終於才興起了重組新桌機的念頭。

在網路上爬了一陣子,決定了下列配備…

處理器 CPU Intel i7-930(SLBKP) 2.8G(Turbo 3.06GHz)/L3=8M/LGA1366 1
主機板 MB ASRock X58 Extreme/X58+ICH10R/8相/3*PCIeX16/1394+eSATA 1
記憶體 RAM 金士頓 DDR3 2G-1333 3
硬碟 HDD WD SATA II 1TB 1001FALS/32M/雙處理器/五年保 1
讀卡機 MMZ-內接式讀卡機(白色附黑面版)/多合一讀卡機/Xd.MicroSD/1*USB, 1
顯示卡 MSI微星 R5670-PMD1G HD 5670晶片/GDDR5 1G/DVI+HDMI+DisplayPort 1
CASE 機殼 上淇黑森林 1
電源供應器 冰山之星 Plus 500W 陶瓷14CM風扇/2.91版/日系電容/APFC/82+/4組12V 1

 

Read more

How to reorganize MySQL table space?

最近發現 MySQL 的 libdata 檔案大小已經超過了 1GB,可能是因為每天量測公司網站效能的 raw data 數量非常龐大的緣故。雖然這些 raw data 做完彙整分析之後就沒用了,但是即使從 MySQL 中刪除這些資料,但是 table space 卻不會因此減小,所以定期做資料庫 table space 的重整可以增加查詢的效能。所以今天想想就來做一下 MySQL table space reorganize 吧!

下面是我的筆記步驟:

1.匯出 MySQL 所有的資料
[root@broso]#$MYSQL_HOME/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers > all-databases.sql

2.將 MySQL Server 完整停下來
[root@broso ~]#/etc/rc.d/init.d/mysql.server stop

3.將 table space 做更名或備份
[root@broso]#cd /var/lib
[root@broso]#mv mysql mysql.20090720

4.重新建立 mysql table space,執行 mysql_install_db script
[root@broso]#mkdir mysql; chmod 700 mysql; chown mysql
[root@broso]#cd $MYSQL_HOME
[root@broso]#$MYSQL_HOME/scripts/scripts/mysql_install_db

5.重新啟動 MySQL Server
[root@broso]#/etc/rc.d/init.d/mysql.server start

6.設定 root 密碼
[root@broso]#$MYSQL_HOME/bin/mysqladmin -u root password 'newpassword'

7.用 mysql 工具程式將剛剛匯出的資料重新匯入
[root@broso]$MYSQL_HOME/bin/mysql -u root –p
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> SOURCE all-databases.sql;
mysql> SET FOREIGN_KEY_CHECKS=1;

8. 完成

Disable JSESSIONID URL Rewriting in JSF

最近在工作上用 JSF 寫程式時,發現如果用 <h:outputLink /> 這個 tag 來輸出 <a href=”xxxx” /> 之類的連結,在瀏覽器首次瀏覽時,JSF 產生的連結會自動將 jsessionid 附在 URL 的後面。

例如下圖,我用 <h:outputLink value=”#{bundle[‘link.hinet’]}” /> 產生一個 Hinet 的連結(link.hinet 定義於 ResourceBundle 中)。首次執行時,可以看出在 Hinet 連結後面 JSF 自動幫忙加上了 jsessionid 的參數。

如果目的地不是一個 J2EE Web 應用程式,直接點下去,很容易會出現 404 Not Found 的錯誤訊息。

初步猜想應該是首次瀏覽時,JSF 針對 jsessionid 做了 URL Rewriting。因為首次瀏覽時,JSF 還不知道瀏覽器是否有將 Cookie enable,所以除了嘗試要將 jsessionid 設定到 Cookie 之外,另外在 URL 上面也針對 session id 做了一次重寫,以便保證 session 可以傳遞到下一個動作。

實際驗證的結果,在首次瀏覽之後,再將 URL 中的 jsessionid 參數移除,在功能上也是完全不受影響,因此我可以確認應該是這個問題。找了很久,從書上跟 Google 找來找去,似乎也沒看到 JSF 上有可以將這個自動重寫機制關掉的參數。所以看起來只能從 J2EE Web Context 來想辦法了。

從 Google 上找到了一篇文章 禁用JavaWeb應用中URL上包含的jsessionid ,裡面提到的方式就是先繼承 HttpServletResponse,實作一個自己的 HttpServletResponseWrapper,並且將所有相關的 encodeUrl 函式全部改寫,直接回傳 URL,不再加以處理。再搭配 Filter 來處理每一個 Request / Response。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
	// TODO Auto-generated method stub
	if (!(request instanceof HttpServletRequest)) {  
           chain.doFilter(request, response);  
		return;  
	}  

	HttpServletRequest httpRequest = (HttpServletRequest) request;  
	HttpServletResponse httpResponse = (HttpServletResponse) response;  		
	if (httpRequest.isRequestedSessionIdFromURL()) {  
	    HttpSession session = httpRequest.getSession();  
		if (session != null) session.invalidate();  
	}  		
	
	HttpServletResponseWrapper wrappedResponse  
	    = new HttpServletResponseWrapper(httpResponse) 
	{  
	    public String encodeRedirectUrl(String url) { return url; }  
	    public String encodeRedirectURL(String url) { return url; }  
	    public String encodeUrl(String url) { return url; }  
	    public String encodeURL(String url) { return url; }  
	 };
	 
	 chain.doFilter(request, wrappedResponse);
}

所以後續 JSF 呼叫 encodeUrl 來進行 rewriting 時,自然 jsessionid 也不會被加上去了。

實際部署後,果然首次瀏覽時,URL 就不會再出現 jsessionid 了。不過如此的結果就是 Client 端必須啟動 Cookie 了。

下載 DisableUrlSessionFilter.java

假如駭客任務的母體架構於Windows系統下…

由基努李維所主演的駭客任務受到廣大電腦迷的喜愛,但是如果駭客任務的母體是執行於 Windows XP 環境下,會發生什麼事??

看完之後覺得挺搞笑的,拿了一些 Windows 上面常常被人詬病的小問題,例如:系統越跑越慢、應用程式停止回應就用 CTRL + ALT + DEL來處理。更絕的是還找了一些外型類似的演員來演,猛一看還真的以為是原班人馬演出這麼 Kuso 的劇情。

最後還扯到 Ubuntu,看起來 Ubuntu 是有贊助這部影片的拍攝…

The Matrix Runs on Windows

WDTV 邊上傳檔案邊看影片?

接續昨天的文章 WDTV + WD 1TB Storage + LevelOne USB-0201 = 高清高速網路媒體播放器

剛測試了一下邊用 FTP 上傳檔案,一邊用遙控器控制 WDTV,發現 WDTV 不能如同平常一樣很快的回應我遙控器的選擇…

於是我 telnet 進去 WDTV 察看了一下 CPU 在忙些什麼…
這才發現原來 CPU 都被 pureftpd 伺服器佔滿了,所以遙控器分不到 CPU 的資源
於是當然就會一頓一頓的

下面是執行 top 指令的結果,可以看得出來 CPU idle time 是 0%,也就是完全沒休息,很認真的在做事
而 pureftpd 伺服器則佔據了 CPU 68% 的時間,其餘的 process 大概都只分不到 3% 的 CPU 時間…

另外,從 free 指令也可以看出, WDTV 配備的記憶體少的可憐,只有 108036KB

再貼一張 WDTV 核心 CPU 的資訊,核心頻率是 297MHz,大約只是 Pentium 2 的等級而已,所以也別要求太多了..

不過按下遙控器的關機,其實 WDTV 並沒有真正關機。直接 Ping WDTV 的 IP 可以發現,它還活得好好的…
這也就可以解釋,為什麼按下關機後,WDTV 還是會持續發熱的原因了…

所以按下關機後還是可以繼續用 FTP 軟體將檔案上傳上去…

好了,講了這麼久…
結論就是,由於 CPU Power 不夠的緣故,不要邊上傳檔案,邊用 WDTV 看影片,那只會讓你 Lag 到抓狂而已

WDTV + WD 1TB Storage + LevelOne USB-0201 = 高清高速網路媒體播放器

先前為了能夠播放高清格式的影片,又不希望擺一台很笨重的 PC 放在客廳,因此一直在研究高清格式的媒體播放機。其實大陸跟韓國的廠商作了很多這類型的媒體播放器,所以可以選的機型還不少,不過由於方便體積又小,所以價格也不太平易近人。在做了不少功課之後,發現這些大陸機或韓國機在規格上都很不錯,可是最大的缺點就是韌體的更新速度實在是太緩慢,常常客戶已經反映了很久的問題,卻也沒見原廠在韌體上做修正。其次,網路端子的規格卻還是停留在 10/100 MB 的時代,如此就浪費了當初裝潢時特地建構的 Gigabit Ethernet 環境。

最後決定下手 WD TV HD Media Player,主要著眼點在於,價格低廉、embedded linux core、韌體修正快速,另外 WD 官方有將部分韌體原始碼公開出來,所以網路上有些玩家就自行修改韌體,額外釋放了一些原本官方韌體沒開放出來的功能,像是支援部分的 USB 網路卡、支援外接 DVD-ROM、支援 DLNA 協定播放遠端媒體檔案等功能 (可參考 B-RAD WDLXTV )。

此外,依據 WDTV wiki supported_usb_devices 上的測試,LevelOne USB-0201 具備 Gigabit Ethernet 介面,並且網友回報測試速率可達 63Mbit/s,看起來傳輸效率非常良好,因此便在 PCHome 上購入此張 USB 網路卡。最後當然不能沒有大容量的硬碟,剛好上週燦坤正在進行會員招待會,提供了很多特價品,我就到內湖旗艦店去搶買回來一顆 WD MyBook Essential Edition 1TB 的外接硬碟機回來與 WDTV 搭配。

還是不能免俗的稍微做個開箱文。

外盒包裝精美的 WD MyBook Essential Edtion 1TB

Read more