2009年12月26日 星期六

宜品福州乾拌麵

A noodle restaurant in east Taipei.
The price not expensive and the noodle is delicious.

*******

前陣子聽到長輩推薦,東區有一家很棒的乾麵
她吃過之後覺得不錯,小朋友也滿意
由於我一向很喜歡吃麵,所以今天買玩東西後特地跑去吃
這家店是位於東區216巷裡面的宜品福州乾拌麵
宜品福州乾拌麵

216巷應該算是專有名詞了吧!
就是鼎泰豐所在的那一條,忠孝東路四段216巷
宜品福州乾麵確切的位置是在216巷裡面的32弄5號
跟東區粉圓在同一邊,距離也不遠
店家橘色的招牌很醒目,並不難找
這裡很難停車
這邊很難停車就是了

大概接近晚上五點走進店裡,沒有什麼人
裡面的擺設十分簡單清爽、桌面乾淨
整體的清潔狀況也不錯
店內蠻乾淨的
櫃檯可以看到廚房的情況,也是乾淨整齊
可以看到工作人員在準備小菜還有備餐

我決定點個小碗的乾拌麵先試試看
因為不確定是不是真的很好吃,也沒有說很餓
30元小碗,不好吃損失也有限
就點這樣就好,這是他們的招牌菜阿!
等待的上菜時,看到旁邊有小菜的冷藏區
每樣都是30元,大致上就是麵攤常見的涼拌菜
例如皮蛋豆腐、小黃瓜、花生、泡菜之類的
小菜也是30

等大概近10分鐘,麵來了
就這樣簡單一碗而已
白淨的細麵,上面只有蔥花點綴
乾拌麵
看到上來的是細麵,確實讓我擔心了一下
因為我比較喜歡吃粗的麵條
例如刀切麵、刀削麵
直覺就是這樣比較有口感

店裡面都處可以看到這樣的指示
告訴你吃乾拌麵的步驟
玻璃桌墊下面有,牆上也看得到
有SOP喔
大原則就是要「加油添醋」啦!
櫃檯的地方有油膏跟辣醬可取用

我遵照指示,拌了麵來吃
還真的是非常好吃,十分有彈性的麵
我也後悔應該點大碗才是
因為小碗對我來說真的有點小
麵口感極佳,拌了之後味道也不錯
香氣十足,不可輕忽的一碗乾拌麵

看到菜單,上面還有其他的餐點
下次一定要再來試試看
菜單

*******

這家店有牽扯到福州
當然會聯想到福州丸
就是那種外皮是魚漿製作,裡面包肉的丸子
不知道這家的福州丸好不好吃?
因為長輩只推薦給我他們的乾拌麵而已

看到生的外帶,13粒100元
一個7元多一點,沒看到實品無法斷定是否值得
無從感受是貴還便宜
只能等下次再吃吃看了

2009年12月23日 星期三

Gregor Johann Mendel

Do you know who is Mendel? He is a Austria scientist.
My first time to know Mendel is in junior high school.

*******

無趣、無用、無聊的個人網誌PO文又來了。
因為是學術研究;所以西斯不足、笑點不夠
用詞粗鄙之處,還請鄉民海涵
如果文章有讓人感到不舒服的地方;我一樣在此先說聲抱歉。

今天談到孟德爾這個主題,是因為聖誕趴出題目
要你用英文描述一個主題,然後讓隊友猜
我分到這一題時,我的說明是
「A biologist in junior high school textbook」
結果學長很厲害,馬上猜到我在講孟德爾
事實上,我一開始說的是Artist, composer
我當時情急,看成了孟德爾頌
這個寫出搖籃曲的作曲家

關於孟德爾,我印象最鮮明的就是國中一年級生物
講到遺傳學的地方,拿了奧國神父孟德爾的所作所為說明
你也許有看過這張圖片


這張圖片中,主角在幹嘛呢?
你一定記得,他是靠培植碗豆的經驗
推導出遺傳的理論
因為高莖跟矮莖的區別,推導出顯性跟隱性的關係
講的更精確一些,就是一對染色體中
可能包含X的顯性基因,還有x的隱性基因
交配之後,如果重組的染色體遇到有X的情況
就會產生顯性特徵,假設高莖碗豆是顯性
可能的染色體組合就是XX, Xx或者xX
矮莖的碗豆為xx
下面取自ubc.ca的圖片清楚說明了這個現象


孟德爾提出這個理論後並沒有立刻得到眾人認可
最早在1865年發表,但是等到1900年才被驗證
這些關於基因的假設,被稱為孟德爾定律
孟德爾也被確立是現代遺傳學之父

孟德爾的實驗方法讓我很感興趣,今天跟學長請教確認
(學長個人的看法:孟德爾的運氣其實不錯)
主要疑問是孟德爾要怎麼取得純種高莖或低莖的碗豆
確保實驗的結果正確無誤?
答案是挑選現有的高莖碗豆交配
之後從生長的下一代再篩選,然後同樣方法再培育下一代
最後就可以取得純種的高莖碗豆了,矮莖的方法相同
把確定高莖跟矮莖的豌豆交配後,生長結果經過統計
可以發現高莖跟矮莖比例約4:1
所以上圖那張表格有明確的統計依據

關於遺傳,國中課本另外舉的例子就是莫根的果蠅實驗
觀察果蠅的眼睛,判斷隱性與顯性的結果
你還記得嗎? (下圖取自ubc.ca)


*******


在據今約150年前,孟德爾就已經有遺傳學的概念
實在令人很佩服,原來神職人員也可以這麼厲害
事實上他老兄很猛,具備不少背景知識(物理、化學、數學、動物學、植物學)
在學校擔任教師

不過或許是19世紀,宗教是科學的中心、教會就是學校
神職人員扮演教育工作者
所以讓孟德爾有研究成果吧!

好啦!個人隨性分享的冷知識就到這為止
如有錯誤就請補充說明
感謝大師兄技術指導

2009年12月20日 星期日

建宏牛肉麵

Beef noodle food stand open for 24 hour?
Yes, in Taipei next to Fu-Hsin elementary school.

*******

台北市曾經有一條街很風光,叫做桃源街
主要是賣牛肉麵,以物美價廉知名
我記得在我大概大三的時候,整個就拆掉了
當時的店家陸續往鄰近遷移
後來我也沒有特別注意他們後續的發展

一直到最近,一個友人跟我提到一家位在洛陽街的店
他跟他爸跑去吃,一碗90元,份量驚人
而且味道不輸給長期去吃的清真牛肉麵
這讓我感到很好奇,也上網去了解一下

這家在福星國小旁邊洛陽街的牛肉麵店
就叫做「建宏牛肉麵」
吃東西一般都要避免店家沒開
但是這家不用擔心,因為他24小時營業
很誇張吧!開牛肉麵店開到可以全年無休
事實上有兩家,據說是分店
有店面的這家,人看起來比較少
旁邊的附屬店面

沒店面的,則開在路邊轉角
西寧電子商場附近
明顯就是一堆人,即使現場很凌亂
在騎樓就吃起來,場面真的很壯觀
就在騎樓吃起來

現場一個攤子現煮,直接跟老闆講你要吃什麼就好
有細麵跟刀切兩種,老闆說細麵不用等
但是我堅持要吃刀切,既然都來了
等一下又何妨?
現場煮麵

等待的時候,看一下旁邊
地上擺滿了這種大鍋,推測應該是湯頭
滿地的備料

牛雜也一整籃放在旁邊
看數量十分驚人,可以供應一個家庭一兩個月吧!
看樣子是牛雜

麵終於來了!果真夠大碗
看麵的上面,牛肉很大方的鋪滿了
至於湯呢?不夠可以免費加
大碗-肉超多

刀切的吃起來真的很過癮
桌上有其他的調味料,我最喜歡的就是這種黑醋
一加就加了不少,大概我喜歡吃酸一點吧!
這種黑醋一定要的

另外也有牛油可以加,不過我沒加
因為不想吃太油
除了牛油,還有一般常見的酸菜
牛油

不到10分鐘的功夫,我把這一碗都吃掉了
真的味道不錯,不會太鹹
麵跟肉也實在,湯頭也OK
符合基本的吃粗飽需求
價格方面,跟桃源街時代相同
都是大、中、小碗三種尺寸
牛肉麵(湯)、牛雜麵(湯)都是90、80、70
牛肉湯麵是50、40、30,我想遇到無肉日我應該會吃這個

*******

觀察麵攤內的食客,有不少是計程車司機
還有提著公事包就走過來的客人
店的位置真的很好找
就在福星國小旁邊而已,很明顯的位置
下圖應該是福星國小的側門
旁邊就是福星國小

2009年12月11日 星期五

ExtJS: Ext.ux.Wiz and my problem

Many ExtJS developer release their own extension, because their project require some function but official ExtJS library doesn't provide the function. In my project, I have to implement a "Wizard." Wizard means a step by step user interface. It leads user finish a process.

Ext.ux.Wiz is an open source project created by a Germany developer --Thorsten Suckow-Homberg. This extension include java script source code and graphic content.

I try to use the extension to implement my complex workflow. For example, in first card, user can choose a job by a radio button. but this extension only provide linear sequential control. It can't let user control the show card flow. First step choose delete and next jump to card 6th. In 6th card, click previous, it should switch to first card not 5th card. And also have to consider the problem of finish button show. It's not an easy job.

So I think the bad solution. Divide the steps, and use "window.open" function to control the step manually.

*******

Ext.ux.Wiz提供使用者一個快速的方法,設計自己的精靈介面。但是他仍有不少限制,尤其遇到複雜的流程控制。像是第一張卡的某一個選項,讓下一張跑到第6張卡片,但是在第6張卡片出現時,按上一步不應該跑到第5張卡片。還有,有時候不能等到最後一張卡片,就必須讓Finish的按鈕出來。這時候該怎麼處理?

不才我做了一個月之後,怎麼弄就是搞不定。貼問題到官方的論壇後,遲遲沒有回應。沒耐心又受不了,於是寫信給原作者。原作者表示他沒有實作到這麼複雜,當初只是為了他的PIM專案所以開發這個Wiz的框架。沒有解決我提出的問題,也沒有太多時間處理。所以我只能自己去實作一個符合我需求的框架。

但是想也知道,我怎麼可能短時間內做出來。最後我老闆給了一個提示,於是我用比較投機取巧的方法達成。所以前面才會貼出一些小細節的解決方法,就是讓這個東西可以有機會做出來。這邊要講的,是怎麼控制Finish、Cancel按鈕的行為。

關於Finish按鈕的行為,有兩個方法控制,一個是用Lintener,另一個是用Overide的方法。

Listener的方式見下面程式碼
listeners: {
finish : function(){

}

}

Override的方式如下,定義onFinish的方法。筆者選擇用這方法完成我要的功能!
設定前面Radio Button的範例,設定對應的動作,即切換到新的頁面。

onFinish: function(){

if (this.fireEvent('finish', this, this.getWizardData()) !== false) {
var selValue = Ext.DomQuery.selectValue('input[name=functional]:checked/@value');

if (selValue == 1)
window.open('create.html','_self','')
else if (selValue == 2)
window.open('update.html','_self','')
else if (selValue == 3)
window.open('delete.html','_self','')
else
window.open('query.html','_self','')

}
}

另外也在後面開啟的頁面,用Listener的方法讓Cancel回到上面判斷下一步的頁面。
listeners: {
cancel : function(){
window.open('entry.html','_self','')
}
}
不知道Cancel鈕為何不能用override達成控制,所以我用listener解決。


看得懂嗎?就是第一頁entry.html會切換到create.html、query.html、delete.html、update.html
然後這四頁中的Cancel鈕又可以回到entry.html這頁

方法確實很爛,但是可以解決需求。細部還要處理的,就是Previous按鈕。還有entry.html的按鈕,顯示Finish真的好嘛?
因為還有其他步驟,Finish按鈕會誤導使用者。關於這部份,要改的是Ext.ux.Wiz原始檔案中的Wizard.js,裡面有提到按鈕文字的顯示。

這方法不佳的最大理由,就是違反One page, one application的原則。Ajax不就是要避免畫面閃爍的切換方式嘛?從entry.html到其他頁面,就會遇到畫面切換的問題。顯示技巧的粗糙!

*******

Please use listener or override to control the button's behavior. (Cancel, Finish or Previous button)

Listener like the following shown
listeners: {
finish : function(){

}

}

If you want to use override, just like
onFinish: function(){

if (this.fireEvent('finish', this, this.getWizardData()) !== false) {
var selValue = Ext.DomQuery.selectValue('input[name=functional]:checked/@value');

if (selValue == 1)
window.open('create.html','_self','')
else if (selValue == 2)
window.open('update.html','_self','')
else if (selValue == 3)
window.open('delete.html','_self','')
else
window.open('query.html','_self','')

}
}

Cancel button can't use override, I don't know why. But finally I using a listener define cancel button's behavior.

The rule (or target) of RIA or Ajax is one page, one application. But my solution is betray the rule.

ExtJS: Get Radio Button Value

Radio button is common GUI component, it's often appears as a set. then each item indicate a special value. By return the special value, the application can make decision or calculate something. In this note, I want to tell you how to get the radio button value. It seems a simple problem, but I'm not familiar with JavaScript, DOM and ExtJS, so it spent me lots of time. Hope my experience is useful for you.

I have a radio group named "functional" I want to get value of functional, how to?

If you can't read Chinese, please see the end of the post.

*******

Radio按鈕常常一組的形態出現,每個選項又指定特定的值。回傳這個值之後,程式根據回傳值判斷下一步要幹嘛,或者進行相關運算。在ExtJS的框架裡面,你同樣也可以使用Radio Button的元件。

舉例來說:我配置了一組Radio Button,目的要作為CRUD(Create, Read, Update, Delete)的動作判斷。

var CRUD = [{
xtype:'radio',
checked: true,
fieldLabel: 'Select Function',
boxLabel: 'Create Job',
name: 'functional',
inputValue: '1',

},{
xtype: 'radio',
fieldLabel: '',
boxLabel: 'Update Job',
name: 'functional',
inputValue: '2',
},{
xtype:'radio',
fieldLabel: '',
boxLabel: 'Delete Job',
name: 'functional',
inputValue: '3',

},{
xtype: 'radio',
fieldLabel: '',
boxLabel: 'Query Job',
name: 'functional',
inputValue: '4',
}]

上面這組程式碼定義了一個名稱為functional的元件,有四個項目可以選。當你選了Delete Job,就回傳3。選擇Create Job,就回傳1。然後根據結果是1,2,3或4,進行下一個動作。

這時我需要一個變數用來取得回傳值。要怎麼做?根據之前取得TextField元件的經驗,我馬上用Ext.getDom("functional").value想取得functional這個Radio Button最後的值。結果一直失敗,事情果然不是憨人想得這麼簡單。按照慣例,回到ExtJS的官方論壇耐心爬文總有解答。只要你有基本的英文閱讀能力就好。

我找到解答了!
正確的作法是 Ext.DomQuery.selectValue('input[name=functional]:checked/@value');
好不熟悉的程式碼寫法阿!

接著嘗試定義一個按鈕,測試用alert();跑出選擇的項目回傳值,就是我需要的功能。

*******

The answer is Ext.DomQuery.selectValue('input[name=functional]:checked/@value');

You can create a button object, and define a handler which alert the value for test purpose.

new Ext.Button({
text:'test',
handler: function(){
var selValue = Ext.DomQuery.selectValue('input[name=functional]:checked/@value');
alert(selValue);
}
});

2009年12月9日 星期三

ExtJS: ComboBox Send Value

In my project, I want to use ExtJS combobox component like text field to send the value. Already assign an ID and name, but it can't send the value. why? I find a solution, so share it with you. If you can't read Chinese, scroll down the page, I wrote the answer.

I'm not a professional RIA developer, still a leaner.

*******

在ExtJS的開發過程中,想要利用Combobox元件內的值傳送數值,但是辦不到。用Ext.getDom的方法,明明旁邊的TextField就可以。究竟發生什麼問題? 在其他開發者的經驗分享中,我找到了解決方式。

原本的Combobox內容程式定義如下
var columnMenu = new Ext.form.ComboBox({
fieldLabel: 'Column Name',
name: 'columnNameValue',
store: columnName,
hideLabel: false,
displayField: 'key',
typeAhead: true,
mode: 'local',
triggerAction: 'all',
emptyText: 'Select a Column',
selectOnFocus: true,
width: 170
});

元件的定義看似完整了,但是還少了一個屬性
hiddenName: 'columnNameValue',
是的!請加入hiddenName
接著請用Ext.getDom("columnNameValue")的方法使用這個ComboBox

*******

The answer is easy, please attach a attribute which named "hiddenName"

2009年12月6日 星期日

長壽駅前

B.B.Q indoor near Taipei Railway Station.


*******

讀大學之後,同學間的樂趣就是四處吃吃喝喝
尤其吃到飽型態的餐廳,總是受多數人歡迎
要吃多少自己決定
從單純的火鍋吃到飽,接著是燒肉吃到飽
最後乾脆來個火烤兩吃吃到飽

感謝友人招待,今天來到了多數台北學生共同的回憶區
--南陽補習街
南陽街,素有「夕陽西下,重考人在南陽」一說
小弟我高一時,曾經在南陽街補英文
然後今天吃飯的地方,就是當年補習那一棟壽德大樓
我記得當年在14樓補英文

角落一樓是今天的美食的主題--長壽駅前
長壽駅前

裡面的佈置十分緊湊,畢竟這裡寸土寸金
內部使用空間也規劃成樓中樓
桌子上有烤盤還有火鍋用的瓦斯爐
座位

工作人員帶位後,就很迅速的先上基本調味料
分別是沙茶還有豆瓣醬
我覺得沙茶並沒有特別之處,豆瓣醬還不錯
沾醬

然後介紹用餐方式,有麻辣鍋、泡菜鍋、高湯鍋
以鴛鴦鍋的形式提供,所以可選擇兩種口味
我們選擇了泡菜鍋還有高湯鍋
泡菜鍋、高湯鍋

接著可以開始取餐了,食物台就在旁邊
包含沙拉、肉品、小菜,還有幾乎沒看到有人動的熟食
餐台

肉類食材,種類非常齊全
肉片或食肉排都有
幾乎都已經先用醬料醃製過了
取用之後就能直接煮食,或者放到烤盤上調理
肉片
整體而言,肉的品質不錯,供應的數量也多
預先醃製的時間也夠,所以加熱完成後就可直接食用
不用沾醬調味就很好吃了

另外要推薦的是他們供應的小菜
有不少的特色小菜,店家會持續供應
只要上菜,你就能聽到服務生統一的喊口令
告知菜名,並請客人享用
最後一個字是「好」,讓正在當兵的友人想到他清槍的報告詞
照片中是山東烤鴨還有地瓜
真的是處理不馬虎的小菜,非常可口
山東烤雞
另外還有海鮮蔥油餅、韓式螃蟹
循環出菜,各種都吃得到

服務方面,速度也很快
雖然沒有學宅神用計算收盤子的秒數衡量
但是一整個服務時間都能接受
我的筷子掉地上,服務生馬上就送上一組新的更換
他們也會觀察你的烤盤情況
然後詢問是否換上新的烤盤
對於長壽駅前的服務,給予優良的評價

*******

這家店的水果還有點心的種類很少
飲料方面,只有檸檬紅茶還有茉莉綠茶
可樂、汽水是要另外付錢的
個人覺得以350幾的價位,連飲料機都沒有的狀況不是很好

不過如果是當月壽星用餐,該桌的每一個客人可以得到汽水一瓶
就是玻璃罐裝的那種,他們賣20元

長壽駅前主要賣的是韓式風味的燒肉
火鍋的表現沒有太好
但是燒肉的表現可圈可點
食客友人表示,比熊一燒肉好吃

地點:壽德大樓一樓(詳細地址我懶得查,汀州路也有一家)
不可刷卡,週一到週五午餐260,晚餐跟假日都是330
另外加一成服務費

2009年12月5日 星期六

The One 帝一火鍋

An economic hot pot in Nin Xia night market.


*******

「寧靜的夏天,天空中繁星點點
心裡頭有些思念,思念著妳的臉
我可以假裝看不見,也可以偷偷地想念
直到讓我摸到妳那溫暖的臉...」

究竟梁靜如的這首寧夏,跟我們這次要推薦的美食有什麼關係呢?
答案就是這家店在寧夏夜市,一家很台式的火鍋店
店名也取的非常有企圖心,叫做「帝一火鍋」
取名為第一的諧音,表現他們有信心啦
寧夏夜市

火鍋這種食物,泛指一個鍋子內以滾燙的液體加熱生食
接著可以用餘溫保溫,使食物仍然熱騰騰
世界各地都有這種食物,只是吃法跟配料的差異
另外以地形氣候的角度分析,火鍋存在於中高緯度的地區
熱帶地區沒有吃火鍋的習慣,想當然爾:天氣熱

台灣地區的火鍋,主要承襲北京與四川當地的特點
(酸白菜鍋、麻辣鍋)
然後在地化改良,近年來也頗有創新
個人認為咖哩鍋、泡菜鍋就是一個很成功的改良
也許說改良言過其實,但是至少符合在地人的喜好啦!

介紹完火鍋的文化與傳統還有變化,回到文章的主題了
這家帝一火鍋,算是筆者推薦的特色平民小吃
位於寧夏夜市內,店門口非常的Local
帝一火鍋
玻璃上有清楚的割字告訴你價格
學生價只要198,算是經濟實惠
平常218的價格也算是能接受,但是請加服務費一成

裡面的形態,是迴轉供應火鍋配料
另外有蔬菜台、飲料台、點心台
迴轉
火鍋料補充的很快,不會有沒得吃的問題
真的沒有,跟服務生講一下就好

這邊是24小時營業,幾乎座無虛席
如果你半夜想吃火鍋,這邊也能讓你解饞
座無虛席

平常人家推薦火鍋店,都是推薦食材
但是對帝一,強烈推薦他的沙茶
真是極品的沙茶
一個自製沙茶可以這麼好吃真是不容易
可以讓你多吃好幾碗
簡單加個醬油與蔥花,好吃到爆表
老闆娘很自豪的表示外面絕對吃不到

關於沙茶醬,再介紹一下
沙茶是南洋地區常見的調味料
在星馬一帶主要稱為沙嗲,是烤肉塗在肉類上的醬
但是閩南地區稱為沙茶,是沾醬為主
製作方法是把花生、蝦米之類的香料、配料搗碎之後加醬汁調製而成
台灣地區最知名的就是「牛頭牌」

帝一主要賣的是沙茶鍋跟石頭鍋
後者主要是高湯底的火鍋
前者顧名思義是加入沙茶的湯底
查過資料,沙茶鍋風行的地區是香港

食材方面,基本的火鍋料都有
牛羊豬雞也不缺,外加螃蟹、鮮蝦等海產
可以吃得很高興
對學生而言就是經濟實惠
二樓有單點的火鍋,食材相對會好些吧
魯肉飯、麻油雞滿足這類食物偏好的客人
飲料部分,檸檬紅茶、咖啡、果汁、仙草愛玉都有
可樂機請上二樓,冰淇淋這也有
金牌啤酒鋁罐裝40元另外付費
點心方面,我只看到麻糬
水果種類也不多

*******

整體而言,帝一火鍋還不錯
自己一個人來吃,面對旋轉台也不會尷尬
熱鬧的氣氛可以讓你吃得歡樂
年齡層偏高的服務生有一種親切感
觀察裡面的客人,很多彷彿都是熟客
跟服務生都聊起來了
38年的火鍋店,值得一試

地址:台北市寧夏路23號
刷卡不可