做法:
1.適量的水加酒釀加砂糖煮沸,
2.立即沖入以放好雞蛋的大碗中,即可享受香滑的蛋花和香味四逸的酒釀蛋湯.
我自己有作過,相當簡單~
口味也不錯~不過我覺得酒味有點小重~~不習慣的話,不好入喉~~
當兵好
歌手:林強
專輯:收錄於娛樂世界與2001向前走-十年精選這兩張專輯裡
歌名:當兵好
詞:林強
曲:林強
編曲:羅百吉
當兵好,沒煩惱,沒有戰爭又吃的飽
盡義務,不要逃,當過兵的男人最可靠
一人當兵,全家光榮,報效國家,真驕傲
捍衛家園,造福鄉里,犧牲奉獻,建設寶島
拿著槍,扛著炮,反攻復國救同胞
為種族,為宗教,戰爭殺人不用坐牢
三民主義,世界大同,是我們國家的目標
什麼時候,世界和平,祇有天知道
我靠!我幹!中華民國萬歲!中華民國萬歲!
當兵好,沒煩惱,沒有戰爭又吃的飽
盡義務,不要逃,當過兵的男人最可靠,當過兵的男人地位高
出了社會,容易適應,所學專長,不得了
鞠躬哈腰,欺下瞞上,表面功夫,技巧妙
當兵好,沒煩惱,沒有戰爭又吃的飽
盡義務,不要逃,當過兵的男人最可靠
FUCK !
為什麼喜歡這首歌,我也說不太上來,大概是因為喜歡他強烈的節奏還有諷刺的歌詞吧~~
好像當過兵的人都會有股怨氣~我也有一些~~ ^_^
向侯捷請問STL sort的問題
這是蠻久以前的事情了,那時候為了這個 sort 的問題,發 mail 向侯捷先生請教.雖然隔了很久才回覆我,不過心裡還是很感動~~也才知道自己的程式出了什麼錯.
回覆日期:2003年2月20日 上午 03:38
你的程式寫的邏輯不對。
> bool operator==( const myInt& l, const myInt& r) {
> bool operator>( const myInt& l, const myInt& r) {
> bool operator<( const myInt& l, const myInt& r) {
這三個都沒有完整判斷。sort 的時候,要求 class 需定義 operator<,
而 operator< 在什麼時候應該傳回 0, 什麼時候傳回 正值,什麼時候傳回負值,有一定的規則。
問題不是出在你指的地方,而在這裡。
— jjhou
—– Original Message —–
寄件者: "晏仁"
收件者:
傳送日期: 2002年10月8日 PM 11:07
主旨: 請教 STL sort() 的問題
> Dear 侯sir:
>
> 冒昧請教,以下是程式,而問題在最後面~
>
> #include <iostream>
> #include <algorithm>
> #include <vector>
>
> using namespace std;
>
> class myInt {
> protected:
> int id;
> public:
> myInt():id(0) {};
> explicit myInt( int i ):id(i) {};
> myInt( const myInt& i ):id(i.id) { };
> int getId( void ) const {
> return id;
> }
> myInt& operator=( myInt& i) {
> id=i.id;
> return *this;
> }
> myInt& operator=( int i ) {
> id=i;
> return *this;
> }
> myInt& operator*() { return *this; }
> myInt* operator->() { return this; }
> friend bool operator==( const myInt& l, const myInt& r );
> friend bool operator friend bool operator>( const myInt& l, const myInt& r );
> };
>
> bool operator==( const myInt& l, const myInt& r) {
> if( l.getId() == r.getId() )
> return true;
> }
>
> bool operator>( const myInt& l, const myInt& r) {
> if( l.getId() > r.getId() )
> return true;
> }
> bool operator if( l.getId() return true;
> }
>
> class myIntCompare {
> public:
> int operator()( myInt aa, myInt bb ) {
> if( aa.getId() > bb.getId() )
> return 1;
> if( aa.getId() == bb.getId() )
> return 0;
> if( aa.getId() return -1;
> }
> };
>
> int
> main( int argc, char* argv[] ) {
> const int COUNTS=10000;
> typedef vector intVector_t;
> intVector_t intVector;
> int i;
>
> /**
> * 下面的兩行 code 會導致 segmentation fault,這就是我要問的問題!!
> * for( i=COUNTS;i>=0;–i )
> * intVector.push_back( myInt(i) );
> */
> intVector.reserve( COUNTS );
> for( i=COUNTS; i>=0; –i )
> intVector[i]=i;
>
> // 以下兩種寫法都可以
> sort( intVector.begin(), intVector.end(), myIntCompare() );
> //sort( intVector.begin(), intVector.end() );
>
> for( i=0; i cout << intVector[i].getId() < }
>
> 為什麼把
> intVector.reserve( COUNTS );
> for( i=COUNTS; i>=0; –i )
> intVector[i]=i;
>
> 改成
> for( i=COUNTS;i>=0;–i )
> intVector.push_back( myInt(i) );
>
> 編譯後再執行
> 就會發生 segmentation fault 的問題呢??
> 真的是很奇怪
> 我知道 vector 在配置的時候會先預留一塊記憶體
> 在 push_back() 的時候,如果發現不夠大,會自動重新配置,
> 並把原來的內容搬到新的地方去.
> 我想可能是重新配置的問題~~
> 但卻不知道真正的原因是什麼?
> 希望侯 sir 能給我一些方向,讓我下手去找出答案~
>
> 喔,對了,我的環境是 linux g++ 2.96.
>
> With Best Regards.
Hook operation / Hooks and anchor
以前逛到的兩個 Pattern, 比較特別的是:
- Pattern 名字沒聽過,
- 用 VFP 實作的~~
挺有趣的,網址在這裡:
Hook operation 講的是一種包裝別人物件的方法,一般來說,都是利用繼承的方法來將對方的 control 包進去,然後再去作客製化的動作;這個 pattern 則是繼承以後,另外利用了一個 hook manager 去專門處理這個客製化的動作.所以才稱作 Hook(掛勾).
Hooks and anchar 則是前面 hook 的延伸,據我個人的理解,這就有點像是 c# 可以把很多 event 或 delegate 串起來一樣~不過我不是很確定啦~~
另外,上面文章所屬的網站還蠻多文章的,大部分是講如何用VFP去搞 Design Pattern 的,各位可以去看看~~
與各位分享~
MindMap
在這兒看到,
http://blog.twblog.net/brookmeow/archives/002103.html
順道就逛了一堆~~
其實之前有參加過公司的教育訓練,有上過這玩意兒,覺得挺不錯用的~~不過想不到有軟體,國外甚至有網站教學~~
以下是軟體的下載點:
http://sourceforge.net/projects/freemind/
http://toget.pchome.com.tw/intro/business_note/1529.html
這裡則是國外對心智圖的教學:
http://www.jcu.edu.au/studying/services/studyskills/mindmap/index.html
國內介紹 MindMap 的網站
http://home.kimo.com.tw/picmemory.tw/Mind_Map.htm
我試用的是 freemind 這套軟體,它是用 java 寫的.使用上並不困難~~
也可以正確顯示中文(我的 jdk 是 1.4.2_02 )
基本上可以在 node 上加入一些特殊的符號
在 node 上按下滑鼠右鍵,即可新增 node 或刪除 node 或更名…等等
移動的話是用 cut/copy/paste 來達成.
node 之間也會自動編排~蠻方便的~~
Builder pattern on VFP
給予適當的建構資料,就可以得到我們所需要的物件.
詳細的說明可以參考後面所附的參考資料,那些資料就已經寫的很好了,我想我沒必要再畫蛇添足.
最初製作 SQL Builder class 的時候是想說,我只要給予它一些欄位和條件,他就會自動幫我產生 SQL 敘述,而不必再去考量 SQL 敘述是否正確啊…等等的問題.剛好想到 Builder pattern 其實很適合,所以就實做看看.
目前這個 class 已經蠻齊全了,不過有些地方可以再加強.
1. Join 部分
2. 資料型態轉換,作的不好~應該可以再更精簡,更可靠.
3. 傳入 select – sql 敘述,就能產生 delete-sql, update-sql.
4. …
參考資料:
http://www.dotspace.idv.tw/Patterns/Jdon_Builder.htm
http://140.109.17.201/Jyemii/patternscolumn/articles/DesignPatternPart(2).htm
Design Pattern 中譯本 – 葉秉哲譯
範例程式:
* 主程式
LOCAL lc_sql
LOCAL lo_builder
lo_builder=CREATEOBJECT(“csqlbuilder”)
lo_builder.ADDCOLUMN(“u_id”)
lo_builder.ADDCOLUMN(“u_name”)
lo_builder.setTable(“users”)
lo_builder.addWhere(“”, “u_id”, “=”, “drury”)
lo_builder.addOrderby( “u_id” )
lo_builder.addGroupby( “u_id” )
? “=====”
? “select sql::”
?? lo_builder.getSelectSQL()
lo_builder.reconf()
lo_builder.addPair(“u_id”, “ellery”)
lo_builder.addPair(“u_name”, “ellery”)
lo_builder.setTable(“users”)
lo_builder.addWhere(“”, “u_id”, “=”, “drury”)
? “=====”
? “insert sql::” + lo_builder.getInsertSQL()
? “update sql::” + lo_builder.getUpdateSQL()
? “delete sql::” + lo_builder.getDeleteSQL()
*
* Builder pattern 類別實作
* 此類別適用環境: VFP 8.0
* 類別定義開始
*
DEFINE CLASS CSQLBuilder AS CUSTOM
ADD OBJECT PROTECTED m_pairs AS COLLECTION
ADD OBJECT PROTECTED m_where AS COLLECTION
ADD OBJECT PROTECTED m_groupby AS COLLECTION
ADD OBJECT PROTECTED m_orderby AS COLLECTION
ADD OBJECT PROTECTED m_keys as collection
m_table = “” && the table
m_targettype=”” && cursor, table
m_target=”” && name
* Init
PROCEDURE INIT
ENDPROC
* Destroy
PROCEDURE DESTROY
ENDPROC
* Reconfigure
PROCEDURE reconf
* MSDN said: pass -1 will clear all items
THIS.m_pairs.REMOVE( -1 )
THIS.m_where.REMOVE( -1 )
THIS.m_groupby.REMOVE( -1 )
THIS.m_orderby.REMOVE( -1 )
THIS.m_table = “”
THIS.m_targettype=””
THIS.m_target=””
ENDPROC
* addColumns
PROCEDURE ADDCOLUMN( c_field AS STRING )
THIS.m_pairs.ADD( .NULL., c_field )
ENDPROC
PROCEDURE addWhere( c_logical AS STRING, c_field AS STRING, c_operator AS STRING, o_value AS OBJECT )
THIS.m_where.ADD( o_value, c_logical + c_field + c_operator )
ENDPROC
PROCEDURE addPair( c_field AS STRING, o_value AS OBJECT )
THIS.m_pairs.ADD( o_value, c_field )
ENDPROC
PROCEDURE addGroupby( c_field AS STRING )
THIS.m_groupby.ADD( .NULL., c_field )
ENDPROC
PROCEDURE addOrderby( c_field AS STRING )
THIS.m_orderby.ADD( .NULL., c_field )
ENDPROC
PROCEDURE addKey( c_field as String )
this.m_keys.add( .null., c_field )
ENDPROC
PROCEDURE addJoin
* todo: this is the most hard part.
ENDPROC
PROCEDURE setTable( c_table AS STRING )
THIS.m_table=c_table
ENDPROC
PROCEDURE setTarget( c_type AS STRING, c_target AS STRING )
THIS.m_targettype=c_type
THIS.m_target=c_string
ENDPROC
PROCEDURE getInsertSQL
LOCAL i
LOCAL lc_sql
LOCAL lc_fields, lc_values, lc_type
lc_fields=””
lc_values=””
lc_sql=”insert into ” + THIS.m_table + ” ”
FOR i=1 TO THIS.m_pairs.COUNT
lc_fields=lc_fields+THIS.m_pairs.GETKEY(i)
IF( i+1 <= THIS.m_pairs.COUNT )
lc_fields=lc_fields+","
ENDIF
lc_type=VARTYPE( THIS.m_pairs.ITEM(i) )
DO CASE
CASE lc_type="C"
lc_values=lc_values+ "'" + THIS.m_pairs.ITEM(i)+ "'"
CASE INLIST( lc_type, "N", "Y" )
lc_values=lc_values + ALLTRIM( STR(THIS.m_pairs.ITEM(i) ) )
CASE lc_type="D"
lc_values=lc_values + "{^" + DTOC( THIS.m_pairs.ITEM(i) ) + "}"
CASE lc_type="L"
lc_values=lc_values + IIF( THIS.m_pairs.ITEM(i), ".T.", ".F." )
CASE lc_type="X"
lc_values=lc_values + ".null."
ENDCASE
IF( i+1 =1 )
lc_sql=” where ”
ELSE
lc_sql=””
ENDIF
FOR i=1 TO THIS.m_where.COUNT
lc_type=VARTYPE( THIS.m_where.ITEM(i) )
DO CASE
CASE lc_type=”C”
lc_value= “‘” + THIS.m_where.ITEM(i)+ “‘”
CASE INLIST( lc_type, “N”, “Y” )
lc_value= ALLTRIM( STR(THIS.m_where.ITEM(i) ) )
CASE lc_type=”D”
lc_value=”{” + DTOC( THIS.m_where.ITEM(i) ) + “}”
CASE lc_type=”L”
lc_value=IIF( THIS.m_where.ITEM(i), “.T.”, “.F.” )
CASE lc_type=”X”
lc_value=”.null.”
ENDCASE
lc_sql=lc_sql + THIS.m_where.GETKEY(i) + lc_value
IF( i+1 <= THIS.m_where.COUNT )
lc_sql=lc_sql+","
ENDIF
NEXT
RETURN lc_sql
ENDPROC
PROCEDURE getOnlyKey( o_collection AS COLLECTION )
LOCAL i
LOCAL lc_sql
lc_sql=""
FOR i=1 TO o_collection.COUNT
lc_sql=lc_sql+o_collection.GETKEY(i)
IF( i+1 <= o_collection.COUNT )
lc_sql=lc_sql+","
ENDIF
NEXT
RETURN lc_sql
ENDPROC
PROCEDURE getOrderBySQL
LOCAL lc_sql
lc_sql=THIS.getOnlyKey( THIS.m_orderby )
IF( EMPTY(lc_sql) )
RETURN lc_sql
ELSE
RETURN " order by " + lc_sql
ENDIF
ENDPROC
PROCEDURE getGroupbySQL
LOCAL lc_sql
lc_sql=THIS.getOnlyKey( THIS.m_groupby )
IF( EMPTY(lc_sql) )
RETURN lc_sql
ELSE
RETURN " group by " + lc_sql
ENDIF
ENDPROC
PROCEDURE getSelectSQL
LOCAL i
LOCAL lc_sql, lc_where, lc_orderby, lc_groupby
lc_sql="select "
FOR i=1 TO THIS.m_pairs.COUNT
lc_sql=lc_sql+THIS.m_pairs.GETKEY(i)
IF( i+1 <= THIS.m_pairs.COUNT )
lc_sql=lc_sql+","
ENDIF
NEXT
lc_sql=lc_sql + " from " + THIS.m_table
lc_where=THIS.getWhereSQL()
lc_sql=lc_sql + lc_where
lc_orderby=THIS.getOrderBySQL()
lc_sql=lc_sql+lc_orderby
lc_groupby=THIS.getGroupbySQL()
lc_sql=lc_sql+lc_groupby
RETURN lc_sql
ENDPROC
PROCEDURE getDeleteSQL
LOCAL lc_sql
LOCAL i
LOCAL lc_value, lc_type, lc_where
lc_sql="delete from " + THIS.m_table
lc_where=THIS.getWhereSQL()
lc_sql=lc_sql+lc_where
RETURN lc_sql
ENDPROC
PROCEDURE getUpdateSQL
LOCAL i
LOCAL lc_sql
LOCAL lc_fields, lc_values, lc_type, lc_where
lc_fields=""
lc_values=""
lc_sql="update " + THIS.m_table + " set "
FOR i=1 TO THIS.m_pairs.COUNT
lc_sql=lc_sql+THIS.m_pairs.GETKEY(i)+"="
lc_type=VARTYPE( THIS.m_pairs.ITEM(i) )
DO CASE
CASE lc_type="C"
lc_sql=lc_sql + "'" + THIS.m_pairs.ITEM(i) + "'"
CASE INLIST( lc_type, "N", "Y" )
lc_sql=lc_sql + ALLTRIM( STR(THIS.m_pairs.ITEM(i) ) )
CASE lc_type="D"
lc_sql=lc_sql + "{^" + DTOC( THIS.m_pairs.ITEM(i) ) + "}"
CASE lc_type="L"
lc_values=lc_sql + IIF( THIS.m_pairs.ITEM(i), ".T.", ".F." )
CASE lc_type="X"
lc_values=lc_sql + ".null."
ENDCASE
IF( i+1 =1 )
lc_fields=””
ELSE
RETURN “”
ENDIF
FOR i=1 TO THIS.m_keys.COUNT
lc_fields=lc_fields+this.m_keys.getKey(i)
IF( i+1 <= THIS.m_keys.COUNT )
lc_fields=lc_fields+","
ENDIF
NEXT
RETURN lc_fields
ENDPROC
PROCEDURE getTable()
RETURN THIS.m_table
ENDPROC
PROCEDURE getUpdatableFieldList()
LOCAL i, lc_fields
lc_fields=""
FOR i=1 TO THIS.m_pairs.COUNT
lc_fields=lc_fields+THIS.m_pairs.GETKEY(i)
IF( i+1 <= THIS.m_pairs.COUNT )
lc_fields=lc_fields+","
ENDIF
NEXT
RETURN lc_fields
ENDPROC
PROCEDURE getUpdateNameList()
LOCAL i, lc_fields
lc_fields=""
FOR i=1 TO THIS.m_pairs.COUNT
lc_fields=lc_fields+THIS.m_pairs.GETKEY(i)+" "
lc_fields=lc_fields+this.m_table+"."+this.m_pairs.getkey(i)
IF( i+1 <= THIS.m_pairs.COUNT )
lc_fields=lc_fields+","
ENDIF
NEXT
RETURN lc_fields
ENDPROC
ENDDEFINE
* 類別定義結束
.Net 的資源檔
資源檔的格式可以直接是 .txt 文字檔
.txt 可用 resgen 轉為 .resources
.txt 的格式很簡單,就是這樣
xyz=aaa
然後可再用下列命令編為 assembly (注意:可依據 locale “/c” 喔!)
al /out:your_app.resources.dll /V:1.0.0.0 /c:zh-TW /embed:your_app.zh-TW.resources,your_app.zh_TW.resources,private
一般來說,製作多國語系資源檔時,與 ap 放在同一層的就是 en 這個 locale.
程式內的寫法: new ResourceManager(“your_app”,this.getType().Assembly );
北投賞櫻花之二
接續之前”北投賞櫻花”那篇~
今天終於騎車去一探究竟了,不過並沒有如願看到一大片櫻花,只有看到零星的櫻花.
清天宮實在是很高,不適合騎機車去,對機車來說,太傷了~
應該要坐捷運與公車去,先坐到北投站,然後再搭乘”小6″.
清天宮旁的步道,左邊可以走到面天山與二子坪,右邊據網站資料表示,走過去應該可以看到一大片櫻花.可惜,我們半途而廢,只走了一些,就放棄繼續走下去了.
照片我放在這裡.
現在的圓環
以前並不知道重慶北路與南京西路的交叉口就是圓環,後來才知道這件事情.
知道以後過了沒多久,那兒就開始施工了,那時候並沒有相機,所以也沒記錄當時的樣子,否則應該可以與今天拍的照片作一個很強烈的對比.
太座擺爛
某天,小穎擺爛的樣子,偷偷給她拍下來~~
要是被她發現了我偷拍她的照片
她肯定會立刻叫我把這張照片下架
^_^