2010 夏季北海道自由行 – Day 3

第三天的行程預計是搭 JR 到大沼公園以及函館做一日遊,晚上再搭 JR 特急列車回到札幌住宿京王飯店。我想如果放一張北海道地圖,可能大家會對北海道各城市的地理位置更有概念一些。

全北海道分為道央、道南、道東跟道北。我們前天住的札幌以及昨天住的洞爺湖都算是道央,而今天要去的大沼公園以及函館則屬於道南。紅色的路線則是今天搭乘 JR 的路線,晚上再從函館依綠色路線回到札幌。
北海道道央及道南區域圖

Read more

2010 夏季北海道自由行 – Day 2

第二天起床後,發現天氣陰陰的,好像快要下雨了,打開電視看看 NHK 的新聞,氣象預報是說今天天氣會由陰雨轉晴,真希望洞爺湖的天氣會好一點。

因為行程的安排是今天晚上要住宿洞爺湖的湖畔亭溫泉飯店,接著後天直接從洞爺湖坐車到函館遊覽,晚上再搭車回札幌住京王飯店。為了要能夠輕鬆旅遊,所以我們就把大件行李箱直接寄放在京王飯店,然後攜帶一日的換洗衣物,用輕便背包帶到洞爺湖,這樣就不用拖著大行李箱趕火車了,團體行動也能快速些。於是吃完早餐,在櫃台寄放行李後,就背著包包趕去札幌站坐車了。

預計搭乘的是 9:19 的北斗 8 號特急列車,然後坐到洞爺站下車,再轉搭道南巴士,在元町站下車後,湖畔亭飯店就在公車站牌旁邊了。

Read more

2010 夏季北海道自由行 – Day 1

原本計畫很久的四月京都賞櫻自由行,因為專案時程很趕被管制休假,陰錯陽差地改成暑假出發到北海道自助旅行。一般印象中,北海道因為幅員廣大,足足有四個台灣這麼大,交通工具沒有想像中的方便,於是要自助旅遊就不是那麼容易。不過多虧了 Reyna 做了很久的功課,還是將整個自助旅遊行程完美的安排出來。這次的自助旅行基本上主要住宿地點為札幌市區,然後以日本北海道國鐵為交通工具,每天出發到不同的地點旅遊。Reyna 規劃的行程如下:

Read more

脫胎換骨的 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