<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-17130115</id><updated>2024-03-13T08:39:04.262+08:00</updated><title type="text">CIYAWASAY</title><subtitle type="html">swanky &amp; shumi</subtitle><link href="http://ciyawasay.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default?alt=atom" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="http://www.blogger.com/feeds/17130115/posts/default?alt=atom&amp;start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17130115.post-114813089483791756</id><published>2006-05-20T20:59:00.000+08:00</published><updated>2006-05-20T21:57:22.620+08:00</updated><title type="text">SwanBear Blog</title><content type="html">&lt;p&gt;
由於天下沒有不散筵席的道理&lt;br /&gt;
我決定另外開一個新的Blog&lt;br /&gt;
一個還是我自己風格的Blog&lt;br /&gt;
雖然不知道算不算是個好名字&lt;br /&gt;
不過由於很多我想用名字都被別人用走了&lt;br /&gt;
最後選擇&lt;strong&gt;SwanBear&lt;/strong&gt;這個兩個動物的怪異組合當站名&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
基本上之後我會住在那裡&lt;br /&gt;
努力跟大家分享一些東西&lt;br /&gt;
網址：&lt;a href="http://swanbear.blogspot.com/"&gt;http://swanbear.blogspot.com/&lt;/a&gt;&lt;br /&gt;
RSS feed我也燒好了&lt;br /&gt;
Feed：&lt;a href="http://feeds.feedburner.com/swanbear"&gt;http://feeds.feedburner.com/swanbear&lt;/a&gt;&lt;br /&gt;
但本站的廣告各位還是可以努力點擊它們&lt;br /&gt;
你們的支持我會在我的帳戶裡看到的&lt;br /&gt;
祝大家天天都&lt;strong&gt;CIYAWASAY&lt;/strong&gt;!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/114813089483791756/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/114813089483791756?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114813089483791756" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114813089483791756" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/05/swanbear-blog.html" rel="alternate" title="SwanBear Blog" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-114706303792995461</id><published>2006-05-08T12:23:00.000+08:00</published><updated>2006-05-08T12:41:33.130+08:00</updated><title type="text">Takahashi Method</title><content type="html">&lt;p&gt;最近Jedi有一篇針對Takahashi Method所作的&lt;a href="http://jedi.org/blog/archives/005429.html"&gt;介紹&lt;/a&gt;&lt;br /&gt;
個人認為這個方式有一些特點
&lt;ul&gt;
&lt;li&gt;增加投影片的頁數。通常此類的投影片頁數都是爆多，多到沒有人會想要把它們印下來，這樣可以減少紙張的使用量，促進大家養成環保的概念&lt;/li&gt;
&lt;li&gt;減少滑鼠按鍵的壽命。為了投影片的換頁，你必須要用手指快速的按下以配合說話的速度，感覺很像是打電動需要連打的那種，手指也可能因此容易受傷&lt;/li&gt;
&lt;li&gt;由於換頁速度快，給人一種目不暇給的感覺，也可能造成人類短暫記憶區無法正常操作，在此種狀況下你可能整場聽下來會有一種新鮮感，但是報告的內容通常是模糊不清的&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
我想如果我碩士論文口試運用此種方式來報告&lt;br /&gt;
結果應該是會相當有意思&lt;br /&gt;
有沒有人可以先嘗試看看來跟大家經驗分享一下呢 XD
&lt;/p&gt;
&lt;p&gt;
後記：聽眾也有可能會因為遭受精神污染，全部一起暴走
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/114706303792995461/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/114706303792995461?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114706303792995461" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114706303792995461" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/05/takahashi-method.html" rel="alternate" title="Takahashi Method" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-114464810445635965</id><published>2006-04-10T13:46:00.000+08:00</published><updated>2006-04-10T13:48:52.790+08:00</updated><title type="text">勇者素質分析</title><content type="html">&lt;h4&gt;本名&lt;/h4&gt;
&lt;p&gt;蕭宇程半跪在地上，手中緊握著劍，臉上的表情看不出是悔恨還是悲傷...是啊，魔王被打倒了，但同伴們也都不在了...&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;蕭宇程的素質分析：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;收到好人卡的機率：29.78%&lt;/li&gt;
&lt;li&gt;漂泊的宿命：21.33%&lt;/li&gt;
&lt;li&gt;膽小鬼：21.33%&lt;/li&gt;
&lt;li&gt;變成天空中微笑的大臉：14.21%&lt;/li&gt;
&lt;li&gt;拯救世界的可能性：3.25%&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;swanky&lt;/h4&gt;
&lt;p&gt;於是swanky拿起他的降魔之劍，踏上了打倒大魔王的旅程。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;swanky的素質分析：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;成為勇者的決心：25.97%&lt;/li&gt;
&lt;li&gt;愛：20.47%&lt;/li&gt;
&lt;li&gt;闇屬性：16.78%&lt;/li&gt;
&lt;li&gt;牧師：12.51%&lt;/li&gt;
&lt;li&gt;等級升不上去：10.77%&lt;/li&gt;
&lt;li&gt;被打飛到天際變成星星：7.79%&lt;/li&gt;
&lt;li&gt;神官：5.66%&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/114464810445635965/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/114464810445635965?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114464810445635965" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114464810445635965" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/04/blog-post_10.html" rel="alternate" title="勇者素質分析" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-114464798285283352</id><published>2006-04-10T13:43:00.000+08:00</published><updated>2006-04-10T13:46:22.866+08:00</updated><title type="text">我的成分分析</title><content type="html">&lt;h4&gt;本名&lt;/h4&gt;
&lt;p&gt;"你要走的話，就拿開那玻璃罩吧。我可是朵玫瑰花，夜晚的涼風對我很好～"，蕭宇程這麼跟小王子說。&lt;/p&gt;
&lt;p&gt;"對～夜晚的風一點都不冷～你看，我不會冷，還可以伸展我的刺呢～"&lt;/p&gt;
&lt;p&gt;"哈啾"&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;蕭宇程的成分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;智慧：33.43%&lt;/li&gt;
&lt;li&gt;愛：25.91%&lt;/li&gt;
&lt;li&gt;被受害人折斷的決心：18.31%&lt;/li&gt;
&lt;li&gt;狗血：9.78%&lt;/li&gt;
&lt;li&gt;細肩帶小女孩不加辣：7.44%&lt;/li&gt;
&lt;li&gt;黑暗：4.42%&lt;/li&gt;
&lt;li&gt;撞豆腐自殺的勇氣：0.72%&lt;/li&gt;
&lt;/ul&gt;
又有智慧又有愛，這就是我阿~
&lt;h4&gt;swanky&lt;/h4&gt;
&lt;p&gt;SWANKY的真實成分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;七分之四十九的變態&lt;/li&gt;
&lt;li&gt;八分之五十六的大變態&lt;/li&gt;
&lt;li&gt;九分之六十三的淫蟲&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;路邊的小女孩也說了：SWANKY是變態。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;swanky的成分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;花痴：25.97%&lt;/li&gt;
&lt;li&gt;米諾夫斯基粒子：20.47%&lt;/li&gt;
&lt;li&gt;黑暗：16.78%&lt;/li&gt;
&lt;li&gt;腦漿：12.51%&lt;/li&gt;
&lt;li&gt;成為豆腐的覺悟：10.77%&lt;/li&gt;
&lt;li&gt;嘴砲：7.79%&lt;/li&gt;
&lt;li&gt;膿：5.66%&lt;/li&gt;
&lt;/ul&gt;
該考慮換個ID...&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/114464798285283352/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/114464798285283352?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114464798285283352" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114464798285283352" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/04/blog-post.html" rel="alternate" title="我的成分分析" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-114303657451809568</id><published>2006-03-22T21:58:00.000+08:00</published><updated>2006-03-28T13:53:06.666+08:00</updated><title type="text">第一次上班</title><content type="html">&lt;p&gt;
今天開始到資策會上班打工&lt;br /&gt;
是目前在那裡國防役的大學家族學長兼研究所同實驗室學長介紹我去的
&lt;/p&gt;
&lt;p&gt;
我負責的工作是為他們的一個系統做出使用者介面&lt;br /&gt;
用Java Applet來寫&lt;br /&gt;
與server的溝通方式目前似乎還沒有定案
&lt;/p&gt;
&lt;p&gt;
因為坐在旁邊不得不聽到他們的討論倒是蠻有意思的&lt;br /&gt;
學長並不太清楚RMI&lt;br /&gt;
所以打算用socket來弄&lt;br /&gt;
待決定的是要由server來傳給client&lt;br /&gt;
還是client去呼叫server&lt;br /&gt;
與另外兩個人討論了一陣子
&lt;/p&gt;
&lt;p&gt;
爆點是後來有一個路人亂入&lt;br /&gt;
這人好像在資策會待比較久一點的樣子&lt;br /&gt;
但說出來的話卻讓我一直想出口反駁一下&lt;br /&gt;
說什麼用Java來連資料庫是個很差的solution&lt;br /&gt;
說JDBC只能透過ODBC來連MySQL效率不好&lt;br /&gt;
如果要連MySQL最好是整個系統用PHP來寫!&lt;br /&gt;
還說什麼實作這樣系統最&lt;strong&gt;簡單&lt;/strong&gt;的方式就是用web service&lt;br /&gt;
我一開始以為他說這些笑話是想要緩和一下大家緊張的情緒&lt;br /&gt;
但後來他又扯一些什麼用CORBA之類的東西&lt;br /&gt;
我才發現他似乎是真的打從內心想要表達這些鬼屁
&lt;/p&gt;
&lt;p&gt;
學長聽到他說完後&lt;br /&gt;
說他不知道這個系統居然要搞到這麼複雜&lt;br /&gt;
那個路人還說「這些東西我弄四年了，本來就是應該這樣嘛!」&lt;br /&gt;
我想說你這四年是白活了還是都沒在看書
&lt;/p&gt;
&lt;p&gt;
雖然我覺得用RMI就可以很方便弄出來&lt;br /&gt;
但既然我只是要作UI&lt;br /&gt;
那還是不要管太多比較好
&lt;/p&gt;
&lt;p&gt;
原本我以為UI好弄&lt;br /&gt;
但學長拿了一些美工畫的圖給我看&lt;br /&gt;
說那是系統畫面&lt;br /&gt;
那圖上的介面又漸層又圓角&lt;br /&gt;
元件裡面的文字還鏤空外加陰影好不漂亮&lt;br /&gt;
美工用高級繪圖軟體&lt;strong&gt;畫&lt;/strong&gt;出來的&lt;strong&gt;圖&lt;/strong&gt;&lt;br /&gt;
我可是要用那單調的Java Swing把它寫出來耶&lt;br /&gt;
只好狂翻2D跟Swing的書&lt;br /&gt;
感覺像是要寫出一個look and feel的感覺...
&lt;/p&gt;
&lt;p&gt;
以上是我有生以來第一天上班的感想&lt;br /&gt;
雖然快下班的時候就開始喉嚨痛感冒了&lt;br /&gt;
應該不是我在心裡嗆那個路人的關係吧?&lt;br /&gt;
不過我每天都有看Dilbert漫畫的習慣&lt;br /&gt;
沒有很期待但覺得有可能會看到Dilbert裡面人物實際cosplay出現在我身邊
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/114303657451809568/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/114303657451809568?isPopup=true" rel="replies" title="7 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114303657451809568" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114303657451809568" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/03/blog-post.html" rel="alternate" title="第一次上班" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-114027968461889984</id><published>2006-02-19T00:12:00.000+08:00</published><updated>2006-02-19T00:21:56.046+08:00</updated><title type="text">JUnit 4.0 出來了</title><content type="html">&lt;p&gt;
在&lt;a href="http://www.cafeaulait.org/"&gt;Cafe au Lait Java News and Resources&lt;/a&gt;看到的&lt;a href="http://www.cafeaulait.org/#February_16_2006_21443"&gt;新消息&lt;/a&gt;&lt;br /&gt;
JUnit 4.0應用了Java 5.0中annotation、varargs、generic等特性&lt;br /&gt;
比之前的寫法更為簡單了&lt;br /&gt;
但也因此不支援Java 5.0之前的版本&lt;br /&gt;
Elliotte Rusty Harold也在IBM developerWorks寫了一篇&lt;a href="http://www-128.ibm.com/developerworks/java/library/j-junit4.html"&gt;介紹JUnit 4.0的文章&lt;/a&gt;&lt;br /&gt;
等不及正式官方文件的可以先看看囉~ :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/114027968461889984/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/114027968461889984?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114027968461889984" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/114027968461889984" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/02/junit-40.html" rel="alternate" title="JUnit 4.0 出來了" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113996812507903875</id><published>2006-02-15T09:43:00.000+08:00</published><updated>2006-02-15T09:48:45.096+08:00</updated><title type="text">The Caffeine Nap</title><content type="html">&lt;p&gt;
&lt;a href="http://goalsuccess.typepad.com/goaltips/2006/02/how_to_take_a_c.html"&gt;這篇文章&lt;/a&gt;上面說研究指出&lt;br /&gt;
喝一杯咖啡後小睡15分鐘&lt;br /&gt;
可以讓你保持在有精神的狀態下比較久&lt;br /&gt;
以後可以試試看 @@
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113996812507903875/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113996812507903875?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113996812507903875" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113996812507903875" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/02/caffeine-nap.html" rel="alternate" title="The Caffeine Nap" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113949390900205467</id><published>2006-02-09T21:50:00.000+08:00</published><updated>2006-02-10T11:47:48.963+08:00</updated><title type="text">IE 7的ClearType</title><content type="html">&lt;p&gt;
之前抓了&lt;a href="http://www.microsoft.com/windows/ie/ie7/default.mspx"&gt;Internet Explorer 7 Beta 2 Preview&lt;/a&gt;來玩玩&lt;br /&gt;
如果說要跟之前IE 6比較起來的話當然是進步許多&lt;br /&gt;
但大多的功能在&lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt;中早就出現過了&lt;br /&gt;
對我來說比較明顯的改變應該是在於介面的美化&lt;br /&gt;
還有就是使用ClearType來顯示英文字型&lt;br /&gt;
看起來跟Mac OS顯示的字體差不多&lt;br /&gt;
顯示出來比較漂亮&lt;br /&gt;
不過如果字太小的話反而會有糊糊的感覺
&lt;/p&gt;
&lt;p&gt;
Microsoft有提供一個&lt;a href="http://www.microsoft.com/typography/ClearType/tuner/Step1.aspx"&gt;ClearType Tuner&lt;/a&gt;來讓你在Windows XP更改ClearType的設定&lt;br /&gt;
一改之後發現連Firefox中也是使用ClearType來顯示了&lt;br /&gt;
不過目前也只有英文字體有差&lt;br /&gt;
中文字看起來好像跟之前一樣(還是我眼力太差看不出來 @@)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113949390900205467/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113949390900205467?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113949390900205467" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113949390900205467" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/02/ie-7cleartype.html" rel="alternate" title="IE 7的ClearType" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113921106505880220</id><published>2006-02-06T15:24:00.000+08:00</published><updated>2006-02-06T15:31:05.070+08:00</updated><title type="text">久等啦! Thinking in Java 4e</title><content type="html">&lt;p&gt;
大概月中的時候會出版&lt;br /&gt;
不過Bruce Eckel這次好像沒有把全部的內容放上來&lt;br /&gt;
該不會沒有電子版的可以看了吧 @@
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113921106505880220/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113921106505880220?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113921106505880220" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113921106505880220" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/02/thinking-in-java-4e.html" rel="alternate" title="久等啦! Thinking in Java 4e" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113789668100675322</id><published>2006-01-22T10:23:00.000+08:00</published><updated>2006-03-19T23:35:22.013+08:00</updated><title type="text">好方法；壞方法</title><content type="html">&lt;strong&gt;此篇為我這學期高等軟體工程的期末報告，內容為軟體開發流程的研究&lt;/strong&gt; (&lt;a href="http://www.ice.ntnu.edu.tw/~swanky/data/ASE_Final.pdf"&gt;pdf&lt;/a&gt;)
&lt;hr /&gt;
&lt;h3&gt;好方法；壞方法&lt;/h3&gt;
&lt;h4&gt;軟體開發是怎麼一回事？&lt;/h4&gt;
&lt;p&gt;如果我們想開發一個軟體，到底應該要怎麼做呢？書籍上告訴我們要先去做需求的蒐集，再去分析這些需求，建立軟體的架構，經過高階與細部的設計後，用程式語言去把它實作出來，通過測試之後就可以去部署來使用了。&lt;/p&gt;
&lt;p&gt;但是真的每個軟體都這樣子搞的嗎？開發一個小畫家跟開發一套PhotoShop的開發流程在這其中的每個過程中都應該是差異很大的吧。尤其是現在的軟體形形色色，每天在用的作業系統、瀏覽器、MSN、多媒體程式是軟體，你開一個網頁，網頁中的Flash、Javascript是跑在你這個客戶端瀏覽器上的軟體，而你連過去的伺服端也要跑一些伺服器、網站應用程式、資料庫等軟體。不說電腦，你的手機、iPod、電子錶、健保卡裡面都有軟體。這些軟體有大有小，功能也是變化萬千，怎麼樣去開發它們自然也會是不一樣的。&lt;/p&gt;
&lt;p&gt;硬體科技進步神速，電腦與行動科技越來越普及化，也因為網路的興起，全球化的現象日益顯著。為了讓這些硬體發揮其最大的效益，軟體的功能需要更多的創新、更強大的功能、能夠帶來更大的商機。在這同時也讓軟體開發的規模越來越大，越來越複雜、也越來越令軟體開發人員頭痛了。&lt;/p&gt;
&lt;h4&gt;我們有什麼方法能選擇？&lt;/h4&gt;
&lt;p&gt;軟體開發除了追求其正確性、使用效能、穩定性、安全性之外，還要考慮到軟體開發的速度、重用性、可維護性、整合性、管理性等。&lt;/p&gt;
&lt;p&gt;所以我們要進行軟體開發，就必須要有軟體開發的流程。這流程能夠把跟此專案有關的利害關係人（像是專案經理、架構師、設計師、開發人員、管理人員及客戶等等），加上使用相關設備與財物組織起來，以某種形式的組織架構、程序、方法論、技術與管理控制方法，投入於特定領域的軟體生產工作。&lt;/p&gt;
&lt;p&gt;說到流程，就會很直覺地想到常常拿出來被人家詬病的瀑布式（waterfall）流程、還有當紅敏捷（agile）陣營的eXtreme Programming（XP）與物件導向大師們所發展出來的Rational Unified Process（RUP）。&lt;/p&gt;
&lt;h5&gt;瀑布式流程&lt;/h5&gt;
&lt;p&gt;瀑布式流程並不適用於大多數的軟體開發早已不是新聞，它的存在可能只是為了提供某一個負面名詞來讓人使用。因為軟體界有一句真理名言叫做：「永遠不變的就是一定會變」，現在的世界變化太快了，想當然軟體變化地會更快，畢竟抹平世界的十大推土機裡面每台都是跟資訊科技有關的技術。變化是我們沒有辦法去預測的，所以我們不能用瀑布式這種一去不回的開發流程，而要改用迭代式的開發流程，用短周期進行開發，才能去適應不同的變化。&lt;/p&gt;
&lt;h5&gt;RUP&lt;/h5&gt;
&lt;p&gt;RUP是一種流程架構，它主要是用來作為一個與UML相互配合的流程，在這個架構底下你要使用笨重的或是敏捷的流程都可以。它有初始（inception）、詳述（elaboration）、建構（construction）、轉換（transition）四個階段，還有邏輯（logical）、實作（implementation）、程序（process）、配置（deployment）、使用案例（use case）這4+1個觀點。&lt;/p&gt;
&lt;h5&gt;敏捷開發流程&lt;/h5&gt;
&lt;p&gt;敏捷型的開發流程有相當多種，其中包括最引人矚目的XP，還有水晶（Crystal）方法系列、適應性軟體開發方法（Adaptive Software Development，ASD）、SCRUM、功用驅動開發方法（Feature Driven Development，FDD）、動態系統開發方法（Dynamic System Development Methods，DSDM）等等。雖然有這麼多種敏捷方法，但它們都共同具有下列的核心價值觀：
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;個人及互動&lt;/strong&gt;勝於流程與工具&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;可用的軟體&lt;/strong&gt;勝於詳盡的文件&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;與客戶合作&lt;/strong&gt;勝於合約談判&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;回應變化&lt;/strong&gt;勝於墨守計畫&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;我們可以看出敏捷開發的著重點是擺在適應性與以人為主的理念上的，但我認為要應用敏捷型的開發流程，不僅僅是要知道它與其它流程的異同而已，最基本的原則、樣式、還有它專有的實務都是非常重要，缺一不可。&lt;/p&gt;
&lt;h4&gt;如何設計？&lt;/h4&gt;
&lt;p&gt;軟體開發最大的問題就在於一切都是設計過程的一部份，寫程式是一部份，測試與除錯也是，一般大家所說的軟體設計也還是設計的一部份。&lt;/p&gt;
&lt;p&gt;現在是物件導向的時代，所以物件導向的基本原則就是軟體設計上的考量要點。有學過物件導向的人都知道，物件導向包含了封裝、繼承、多型、以訊息傳遞等等的要素。但是要如何應用這些要素來將物件導向的特點發揮到淋漓盡致就是要靠這些設計原則【見附錄A：物件導向設計原則】了。&lt;/p&gt;
&lt;p&gt;而設計模式（design pattern）也就是運用了這些物件導向設計原則所形成的。但是目前在不同領域的設計模式越來越多，除了四人幫的23個設計模式之外，大型的企業級架構像是J2EE都有自己的一堆設計模式，甚至還有許多反模式（anti-pattern）的出現。&lt;/p&gt;
&lt;p&gt;其實運用設計模式也不完全都是優點，引進設計模式到軟體設計中會造成架構的複雜化，反而失去了簡單性的優點，所以說不要強把設計模式加到自己的系統中，最好是讓它們在系統演進的過程中自然顯現出來比較好。&lt;/p&gt;
&lt;h4&gt;如何極致？&lt;/h4&gt;
&lt;p&gt;XP是敏捷開發流程中最受到大家所重視的，原因在於推廣XP理念的人物都是當代軟體業舉足輕重的大師級人物，像是Kent Beck、Martin Fowler等等。&lt;/p&gt;
&lt;p&gt;XP本身不但提供了一套流程，其主要的價值觀包括了：
&lt;ul&gt;
  &lt;li&gt;溝通（communication）&lt;/li&gt;
  &lt;li&gt;回饋（feedback）&lt;/li&gt;
  &lt;li&gt;簡單性（simplicity）&lt;/li&gt;
  &lt;li&gt;勇氣（courage）&lt;/li&gt;
&lt;/ul&gt;
也包含了一些編程實務、開發者實務、事務實務【見附錄B：XP實務】。
&lt;/p&gt;
&lt;h4&gt;搞得好？搞不好？&lt;/h4&gt;
&lt;p&gt;團隊的大小會影響應該使用的開發流程，每種流程都會有其侷限性，像是XP就明白地表示其適用在十人以下的專案中，如果開發團隊有一百人，完全採用XP是不適合的，必定要去做一些調整。&lt;/p&gt;
&lt;p&gt;我認為在應用任何一種開發流程之前，都需要先藉由一些較為小型、容易的專案開始練習，或是先由專家來帶領整個團隊進行開發。沒有經驗的管理者、開發者若只是隨便買本書、看看網站上的說明，沒有經過使用該流程的專業訓練，就照本宣科，感覺上好像真的採用該流程，但是骨子裡可能就不是那麼一回事了。&lt;/p&gt;
&lt;p&gt;拿測試驅動式開發方法來說好了，它主要的規定有三：
&lt;ul&gt;
  &lt;li&gt;只有在單元測試失敗後，才能寫實際程式。&lt;/li&gt;
  &lt;li&gt;單元測試如果已經寫到讓實際程式不能通過，就不能再寫單元測試。&lt;/li&gt;
  &lt;li&gt;若實際程式已通過單元測試，就不能寫實際程式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我看過Kent Beck所寫的那本Test-Driven Development By Example，裡面的第一章就是他舉一個實際運用測試驅動式開發方法的範例，雖然說他是遵守了一些看似簡單的規定來進行程式編寫，但老實說一般人如果沒有學習過相關的知識、沒有去習慣此種開發方式，是不太可能會這樣子去寫程式的。&lt;/p&gt;
&lt;p&gt;況且許多的實務都是需要相互配合才能算是正確、有效的使用。就像測試驅動開發也必須配合重構的手法才不會讓程式的架構崩潰。是不是每個人都會使用重構呢？要聞出程式碼的壞味道就已經不是很容易了，重構手法林林總總那麼多項，更何況要應用它們來把程式原本不好的架構重構到好的架構。況且重構不太可能手動去進行，一定要搭配一個好的、容易使用的、方便的整合開發環境才有辦法，所以說開發者還必須要熟悉所有他們會使用到的工具。必須要的工具像是單元測試的架構（JUnit）、整合開發環境（Eclipse、JBuilder…）、版本控管軟體（CVS、Subversion）、建構的工具（Ant、Make…）等等，如此高的門檻可能不是一般人能夠輕易跨過的。&lt;/p&gt;
&lt;p&gt;所以說XP是非常重視經驗的，另外如果開發人員沒有一種對於軟體開發設計的狂熱，很可能就沒有辦法應用XP，原因在於並非每個人都熱衷於實踐XP的實務。像是有人喜歡搞孤僻、或是喜歡混水摸魚，他就不太可能喜歡搭檔編程。又或是兩個人的程式設計能力相差太大，高手寫的程式另外一個新手看不懂，那麼高手是要跟新手有耐心地講解還是就不理會新手自己寫呢？&lt;/p&gt;
&lt;h5&gt;UML有幫助嗎？&lt;/h5&gt;
&lt;p&gt;目前UML已成為軟體設計過程中主要的塑模工具，每個開發流程都會需要使用到它，但這不代表UML是一個很完美的表示方法，軟體系統中的各個元件、行為、還有它們彼此間互動的關係，很難只用幾張圖就表達了一切。現在有一種模型驅動架構（Model-Driven Architecture）的技術，就是想要讓開發者在設計完一些鉅細靡遺的架構圖後，整個系統就差不多出來了。這是一個不錯的理想，不過可行性卻還是讓很多人懷疑。&lt;/p&gt;
&lt;p&gt;目前UML的版本已經到了2.0，總計有13種圖。但是基本上沒有什麼人會想要把所有的規格都弄清楚，即使真的有人畫了一張包含了全部細節的圖，也不會有人想要去看。這也是為什麼在所有單純針對UML所寫的書裡面，賣得最好的是Martin Fowler所寫不到兩百頁的UML Distilled，而不是那些厚厚的UML規格書。並不是每個流程都很需要大量的文件，像是XP就不會，所以說如果要使用UML，不一定要使用完整的UML，而是採用需要的部份就好。&lt;/p&gt;
&lt;h4&gt;結論&lt;/h4&gt;
&lt;p&gt;沒有什麼方法是絕對好的或是絕對壞的，一切都要針對個別團隊、專案開發的需求去調適。有許多使用XP、RUP這類熱門流程的專案失敗了，但也有使用瀑布式開發而成功的例子。微軟是全世界最大的軟體公司，他們所使用的開發流程是他們自己根據經驗弄出來的MSF（Microsoft Solutions Framework）開發流程，還是需要在一開始根據專案的種類、人員的多寡來進行調適的。&lt;/p&gt;
&lt;p&gt;所以我們可以發現這些流程之間都會有一些異同點，沒有任何一種在所有的情形下都是最好的，能讓專案成功的方法就是好方法。&lt;/p&gt;
&lt;h4&gt;附錄A：物件導向設計原則&lt;/h4&gt;
&lt;p&gt;應用於類別設計的原則：
&lt;ul&gt;
  &lt;li&gt;單一職責原則（Single Responsibility Principle，SRP）&lt;br /&gt;
    類別變更的原因應僅只有一種。&lt;/li&gt;
  &lt;li&gt;開放封閉原則（Open Closed Principle，OCP）&lt;br /&gt;
    軟體實體（如類別、模組、函式等等）對於擴充應保持開放性，而對修改應維持封閉性。&lt;/li&gt;
  &lt;li&gt;Liskov替代原則（Liskov Substitution Principle，LSP）&lt;br /&gt;
    子型別必需可替換父型別。&lt;/li&gt;
  &lt;li&gt;相依性反向原則（Dependency Inversion Principle，DIP）&lt;br /&gt;
    抽象概念不應該相依於細節；而細節應該相依於抽象概念。&lt;/li&gt;
  &lt;li&gt;介面分割原則（Interface Segregation Principle，ISP）&lt;br /&gt;
    用戶不應被迫相依於他們用不到的函式，介面隸屬於客戶，而非遷就於繼承階層。&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;應用於套件內聚力的原則：
&lt;ul&gt;
  &lt;li&gt;復用改版同等原則（Release Reuse Equivalency Principle，REP）&lt;br /&gt;
    復用的單元相等於版本的單元。&lt;/li&gt;
  &lt;li&gt;共同封閉原則（Common Closure Principle，CCP）&lt;br /&gt;
    套件內的所有類別對同類的變更具有相同的封閉性，也就是對套件造成影響的變更會影響套件中的所有類別，然而不會影響其他的套件。&lt;/li&gt;
  &lt;li&gt;共同復用原則（Common Reuse Principle，CRP）&lt;br /&gt;
    套件內的所有類別總是一起被復用，如果你復用了套件中的某個類別，就等於是復用了所有類別。&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;應用於套件耦合度的原則：
&lt;ul&gt;
  &lt;li&gt;無循環相依原則（Acyclic Dependencies Principle，ADP）&lt;br /&gt;
    套件的相依關係圖中不存在任何循環路徑。&lt;/li&gt;
  &lt;li&gt;穩定相依原則（Stable Dependencies Principle，SDP）&lt;br /&gt;
    以穩定取決相依的方向。&lt;/li&gt;
  &lt;li&gt;穩定抽象原則（Stable Abstractions Principle，SAP）&lt;br /&gt;
    套件應該既抽象又穩定。&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h4&gt;附錄B：XP實務&lt;/h4&gt;
&lt;p&gt;
&lt;ul&gt;
  &lt;li&gt;整體團隊&lt;br /&gt;
    XP專案的所有貢獻者，包括開發人員、業務分析師、測試人員等等，都是團隊的成員，一同在開放的空間裡工作，大幅而明顯可見的圖表及其他表示了專案進度的証明，散亂地貼在牆壁上。&lt;/li&gt;
  &lt;li&gt;規劃遊戲&lt;br /&gt;
    規劃是不斷持續而漸進的工作，以兩週為週期，針對未來兩週內，開發人員預估候選功能的開發成本，而客戶以開發成本與業務價值為考量，從這些需求中挑選出將被實作的功能。&lt;/li&gt;
  &lt;li&gt;客戶測試&lt;br /&gt;
    除了挑選要實作的功能，客戶也針對每個被挑選出來的功能，定義自動化的驗收來證明這些功能是可運作的。&lt;/li&gt;
  &lt;li&gt;簡單設計&lt;br /&gt;
    開發團隊維持系統的設計恰恰滿足系統目前所需具備的功能，讓這個設計成果順利通過所有的測試、沒有任何重複、充分表達設計者所展現的所有概念，而且包含的程式碼越少越好。&lt;/li&gt;
  &lt;li&gt;搭檔編程&lt;br /&gt;
    所有軟體產出皆由兩位程式員共同建構，兩人比肩而坐，共用一部電腦。&lt;/li&gt;
  &lt;li&gt;測試驅動式開發方法&lt;br /&gt;
    程式員在很短的開發週期中，先加入系統缺失的測試，然後再想辦法讓它能正常運作。&lt;/li&gt;
  &lt;li&gt;設計改良&lt;br /&gt;
    不要讓系統毀於劣質的程式碼，盡量保持程式碼既簡潔又清晰明確。&lt;/li&gt;
  &lt;li&gt;持續整合&lt;br /&gt;
    開發團隊隨時對系統做全面性的整合。&lt;/li&gt;
  &lt;li&gt;程式共享&lt;br /&gt;
    任何的編程搭檔都可在任意時刻著手改善任何的程式碼。&lt;/li&gt;
  &lt;li&gt;編程標準&lt;br /&gt;
    系統中所有程式碼看起來就像出自同一個優秀的程式員之手。&lt;/li&gt;
  &lt;li&gt;隱喻&lt;br /&gt;
    團隊勾勒出程式當如何運作的共同願景。&lt;/li&gt;
  &lt;li&gt;持久穩定的步調&lt;br /&gt;
    團隊是為長久運作的。成員們努力工作，用可持續不斷的步調，以跑馬拉松而非短程衝刺的心態來對待專案，使自己能保存活力。&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113789668100675322/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113789668100675322?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113789668100675322" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113789668100675322" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/blog-post_22.html" rel="alternate" title="好方法；壞方法" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113712015231857129</id><published>2006-01-13T10:42:00.000+08:00</published><updated>2006-01-15T00:46:13.536+08:00</updated><title type="text">令人懷念的光華商場</title><content type="html">&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt;&lt;a href="http://www.flickr.com/photos/swanky-hsiao/85836174/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/40/85836174_132008ec34.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/swanky-hsiao/85836174/"&gt;令人懷念的光華商場&lt;/a&gt;, originally uploaded by &lt;a href="http://www.flickr.com/people/swanky-hsiao/"&gt;swanky&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
我從國小就常常自己一個人跑到光華商場逛&lt;br /&gt;
小時候很愛玩電腦遊戲&lt;br /&gt;
這裡對我來說簡直就是個天堂&lt;br /&gt;
最新的遊戲總是會最先在這裡開始賣&lt;br /&gt;
最新的雜誌也能很快在這裡買到&lt;br /&gt;
八德路上還有一家叫「熱血少年」的中古買賣店&lt;br /&gt;
更是我經常去尋寶的地方&lt;br /&gt;
我也去賣過一些遊戲(雖然賣到的錢都很少...)
&lt;/p&gt;
&lt;p&gt;
光華商場的特產就是大補帖&lt;br /&gt;
這在我國中國小那段時間更是熱門&lt;br /&gt;
一片650MB的光碟總是能塞下市價不知道多少錢的最新熱門軟體&lt;br /&gt;
管你用的到用不到&lt;br /&gt;
有了一片大補帖&lt;br /&gt;
你的電腦就不怕要燒錄沒燒錄、要防毒沒防毒、要影像處理沒影像處理、要文書編輯沒文書編輯了
&lt;/p&gt;
&lt;p&gt;也記得當時這些補帖商&lt;br /&gt;
只要有人從目錄上看到要的&lt;br /&gt;
他們就會以十分純熟的技術把那些依照標籤分類好的光碟從一些讓你異想不到的地方拿出來&lt;br /&gt;
像是商場裡面的飲料販賣機下面、旁邊不起眼的紙箱裡面等等&lt;br /&gt;
不過有些大補帖真的太補了&lt;br /&gt;
裡面被放了一堆病毒&lt;br /&gt;
也讓大家的重灌經驗相當地豐富
&lt;/p&gt;
&lt;p&gt;後來因為軟體、遊戲的資料量越來越大&lt;br /&gt;
一片大補帖很難裝得下&lt;br /&gt;
而且網路也發達了&lt;br /&gt;
P2P軟體就是大家的大補帖&lt;br /&gt;
販賣大補帖這種行業在光華商場也早消失了&lt;br /&gt;
現在賣的好像都是A片之類的東西...
&lt;/p&gt;
&lt;p&gt;
光華商場即將要爆炸拆除&lt;br /&gt;
昨天也看到很多像我一樣去拍個幾張照片留念的&lt;br /&gt;
商場樓上左邊第一家的報價單&lt;br /&gt;
不理會旁邊有警察依然會叫你買無碼A片的青少年&lt;br /&gt;
樓下舊書攤一疊疊老舊到沒什麼人要買的書籍與光碟牆上18禁影片的強烈對比&lt;br /&gt;
狹窄的通道、擁擠的人潮、怪異的氣味&lt;br /&gt;
都要在一瞬間灰飛煙滅成為歷史與回憶了
&lt;/p&gt;
&lt;p&gt;
雖然舊的商場就要消失&lt;br /&gt;
附近的光華商圈依然是購買資訊產品的首選&lt;br /&gt;
還是期待重建以後能夠有更好、更漂亮的環境 :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113712015231857129/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113712015231857129?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113712015231857129" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113712015231857129" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/blog-post.html" rel="alternate" title="令人懷念的光華商場" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113672705626090824</id><published>2006-01-08T21:22:00.000+08:00</published><updated>2006-01-23T17:30:41.796+08:00</updated><title type="text">2006年運勢</title><content type="html">&lt;h4&gt;swanky-巨蟹座(6.22-7.22)&lt;/h4&gt;
&lt;p&gt;2006年是巨蟹座奮發圖強，贏得成就的一年。&lt;/p&gt;
&lt;h5&gt;整體運：☆☆☆☆☆&lt;/h5&gt;
&lt;p&gt;巨蟹座2006年運勢很旺，有強大的外力支持，使你各方面都很順利。然而，由於「定之克羅諾斯」和「魅之巫肯那斯」，以及玄秘之星「艾希絲」同時在你的星宮內，讓你的心思繁瑣、性情不定，但是對實際面的妨礙並不大。因為木星的扶持，以及天王星遙遙相拱，形成金三角的助力，巨蟹座運勢上揚，應該算是最幸運的星座吧，只要你能定下心來集中精神，好好把握住大好時機，就能夠達成許多目標和成就！&lt;/p&gt;
&lt;h5&gt;功課學業運：☆☆☆☆&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;你的課業狀況將莫名其妙地好起來&lt;/strong&gt;，2006年巨蟹座的好運，大部分呈現在這些方面。在學成績傑出，或者考試上榜順利升學，或者論文過關，或者出國有成。這些都可能有快速進展，要趕緊配合時機，趁現在完成這些課題吧。&lt;/p&gt;
&lt;h5&gt;工作職場運：☆☆☆☆&lt;/h5&gt;
&lt;p&gt;這一年巨蟹座生活多采多姿，工作上也是閒不下來的。有很多事情會找上門來，是有利的CASE那就非常好，雖然也有一些勞煩你的事推托不掉，但也能幫你增添人脈。令人安心的是，許多事務的進行都很順暢，能夠完滿地達成。&lt;/p&gt;
&lt;h5&gt;金錢理財運：☆☆☆&lt;/h5&gt;
&lt;p&gt;巨蟹座2006年的財運並不平穩，有沒有錢不是問題，是你有很多要忙的事情分心，更主要的問題是會很勞累。而且被火星干擾，會有破費的傾向，在理財規劃上，常見準備不及的現象，且缺乏因應措施，容易混亂或拖延。這些現象都造成財運的美中不足，但收入來源都沒有大問題，整體還算過得去。&lt;/p&gt;
&lt;h5&gt;戀愛婚姻運：☆☆☆☆&lt;/h5&gt;
&lt;p&gt;巨蟹座這一年運勢很旺，而這些好運可以說主要集中在愛情方面，所以如果錯過了的話，就比較感受不到這些好運了。可能會有突如其來的驚喜，無論是事件或人物的出現。&lt;/p&gt;
&lt;p&gt;有伴侶的你：兩人關係持續熱烈或親密，也很有可能邁向新的階段，良好的互動使彼此都很愉快。&lt;/p&gt;
&lt;p&gt;單身的你：也有不錯的對象會自動出現，只看你自己的感覺，對宮的智神星會幫助你如何挑選，要怎麼取捨，控制權在你這一方喔！&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;shumi-水瓶座(1.21-2.19)&lt;/h4&gt;
&lt;p&gt;2006年是水瓶座嘗盡冷暖，閱歷豐富的一年。&lt;/p&gt;
&lt;h5&gt;整體運：☆☆☆&lt;/h5&gt;
&lt;p&gt;海王星在水瓶座之中，同時受到木星和火星的限制，生活上衝擊不小。所幸火星在二月份之後就過去了，然而木星卻一直干擾水瓶座，加上對宮的土星壓境，呈現出欲振乏力的景況。而凱龍星在水瓶座中發酵，你的內心有不少迷惘，在這時候甚至讓你困在自己的思緒當中。&lt;/p&gt;
&lt;p&gt;穀神星自三月後全年在星宮內徘徊，也是影響今年運勢的重要星體，為你帶來滋潤和支助，也是你心靈的主要慰藉。&lt;/p&gt;
&lt;h5&gt;功課學業運：☆☆&lt;/h5&gt;
&lt;p&gt;這一年水瓶座在學業上的表現普通，因為心思很難集中在無趣的功課上，時常分心去想一些其它的事。除非是自己喜愛或有興趣的範圍，才有可能投注多一點精神。對於想要深造或晉級的人來說，選擇自己專精的領域，成功獲勝的希望會增加許多。&lt;/p&gt;
&lt;h5&gt;工作職場運：☆☆☆&lt;/h5&gt;
&lt;p&gt;這一年木星鎮守你的職業宮位，其實事業成效和名聲都還算不錯，但也因此背負了精神上的壓力，背後還要擔心和解決檯面下的問題，可能使得你心力交瘁，然而為了面子還是得撐下去。你會開始質疑自己在事業方面的理想和目標，甚至懷疑生活與人生的價值。&lt;/p&gt;
&lt;h5&gt;金錢理財運：☆☆&lt;/h5&gt;
&lt;p&gt;天王星在水瓶座的財運宮位上，一直以來你的財務都起伏變化，2006年這樣的現象仍然不減，需要注意的是，你能夠得到的資助不少，但需要開銷的地方可能更多，所以總結仍是虧損了不少。你的經濟狀況，有一些長期性的問題，需要從根源去解決。&lt;/p&gt;
&lt;h5&gt;戀愛婚姻運：☆☆☆&lt;/h5&gt;
&lt;p&gt;這一年裡，水瓶座似乎可說嘗盡了人情冷暖，穀神星對為你帶來滋潤和照顧，然而土星在對宮的壓制，使你的人際關係受限，而火星更為你帶來人情世故上的嚴苛考驗。&lt;/p&gt;
&lt;p&gt;有伴侶的你：在戀愛中，你覺得很受傷，卻也能得到補償或幸福，還原心中最真實的感覺而前行，不要受外在的限制與捆綁了。&lt;/p&gt;
&lt;p&gt;單身的你：你面臨許多不同的機會與對象，若即若離或恩怨牽扯，鼓起勇氣來理清關係，或者確認一下彼此緣分吧！&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;我很想知道什麼叫做「你的課業狀況將莫名其妙地好起來」...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113672705626090824/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113672705626090824?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113672705626090824" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113672705626090824" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/2006.html" rel="alternate" title="2006年運勢" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113672231773753576</id><published>2006-01-08T20:11:00.000+08:00</published><updated>2006-01-08T20:27:36.166+08:00</updated><title type="text">筆記整理(2006-01-08)</title><content type="html">&lt;h4&gt;2005-09-23：ASE&lt;/h4&gt;
programmer tool：
&lt;ol&gt;
  &lt;li&gt;debugger&lt;/li&gt;
  &lt;li&gt;version control&lt;/li&gt;
  &lt;li&gt;profiler(效能評估)&lt;/li&gt;
  &lt;li&gt;memory checker (memory leak detection, array boundary checking)&lt;/li&gt;
  &lt;li&gt;oxygen (software visualization) free&lt;/li&gt;
  &lt;li&gt;programming style / bad coding checker(static analysis)&lt;/li&gt;
  &lt;li&gt;unit testing(white box testing), visual test&lt;/li&gt;
  &lt;li&gt;check security(static analysis tools)&lt;/li&gt;
&lt;/ol&gt;
&lt;a href="http://www.swebok.org/"&gt;http://www.swebok.org/&lt;/a&gt;&lt;br /&gt;
Tom DeMarco：與熊共舞
&lt;h4&gt;2005-11-01：CAI&lt;/h4&gt;
brandon-hall(顧問公司，公司內部的e-Learning)
&lt;ul&gt;
  &lt;li&gt;LCMS&lt;/li&gt;
  &lt;li&gt;LMS Report&lt;/li&gt;
  &lt;li&gt;KM(偏管理)&lt;/li&gt;
&lt;/ul&gt;
MGT：
&lt;ul&gt;
  &lt;li&gt;vision(看得到的目標)&lt;/li&gt;
  &lt;li&gt;criteria&lt;/li&gt;
  &lt;li&gt;support&lt;/li&gt;
&lt;/ul&gt;
Design：
&lt;ul&gt;
  &lt;li&gt;motivation&lt;/li&gt;
  &lt;li&gt;content&lt;/li&gt;
&lt;/ul&gt;
大學LMS：BlackBoard、WebCT&lt;br /&gt;
LCMS：
&lt;ol&gt;
  &lt;li&gt;組合內容&lt;/li&gt;
  &lt;li&gt;處理多種格式&lt;/li&gt;
  &lt;li&gt;reuse&lt;/li&gt;
  &lt;li&gt;workflow&lt;/li&gt;
  &lt;li&gt;version control&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
  &lt;li&gt;Authoring&lt;/li&gt;
  &lt;li&gt;Simulation&lt;/li&gt;
  &lt;li&gt;PowerPoint轉換&lt;/li&gt;
  &lt;li&gt;Test&lt;/li&gt;
&lt;/ul&gt;
incentive - 誘因&lt;br /&gt;
executives - 長官&lt;br /&gt;
gospel - 福音&lt;br /&gt;
tenet - 教義&lt;br /&gt;
edification - 涵養
&lt;h4&gt;2005-11-07：數位學習的介面、策略與教材設計(淡江大學教育科技系，李世忠教授兼系主任)&lt;/h4&gt;
數位學習(e-Learning)要素
&lt;ol&gt;
  &lt;li&gt;硬體&lt;/li&gt;
  &lt;li&gt;系統平台&lt;/li&gt;
  &lt;li&gt;介面(一致性)&lt;/li&gt;
  &lt;li&gt;教師&lt;/li&gt;
  &lt;li&gt;方法與策略&lt;/li&gt;
  &lt;li&gt;教材&lt;/li&gt;
  &lt;li&gt;評量&lt;/li&gt;
  &lt;li&gt;學習策略&lt;/li&gt;
&lt;/ol&gt;
&lt;a href="http://www.theinterviewwithgod.com/"&gt;The Interview With God&lt;/a&gt;
&lt;h4&gt;2005-11-18：ASE&lt;/h4&gt;
&lt;h5&gt;Defensive Programming&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;alpha testing-在公司內部測&lt;/li&gt;
  &lt;li&gt;beta testing-給使用者測&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
  &lt;li&gt;Assertion-不可預測&lt;/li&gt;
  &lt;li&gt;Error Handling-可預測
    &lt;ol&gt;
      &lt;li&gt;Return a netural value&lt;/li&gt;
      &lt;li&gt;Substitute the next piece of valid data&lt;/li&gt;
      &lt;li&gt;Return the same answer as the previous value&lt;/li&gt;
      &lt;li&gt;Substitute the closest legal value&lt;/li&gt;
      &lt;li&gt;Log a warning message to a file&lt;/li&gt;
      &lt;li&gt;Return an error code&lt;/li&gt;
      &lt;li&gt;Call an error processing routine/object&lt;/li&gt;
      &lt;li&gt;Display an error message wherever the error is encountered&lt;/li&gt;
      &lt;li&gt;Handle the error in whatever way works best locally&lt;/li&gt;
      &lt;li&gt;Shut down&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;
Software reuse (module)
&lt;ol&gt;
  &lt;li&gt;procesure, function&lt;/li&gt;
  &lt;li&gt;template (STL, Standard Template Library)&lt;/li&gt;
  &lt;li&gt;class library(繼承)&lt;/li&gt;
  &lt;li&gt;component (高層次reuse) visual development&lt;/li&gt;
  &lt;li&gt;plugin&lt;/li&gt;
&lt;/ol&gt;
&lt;em&gt;Large scale C++ Design&lt;/em&gt;&lt;br /&gt;
OCP：開放性-開放擴充；封閉性-封閉修改
&lt;h4&gt;2005-12-02：ASE&lt;/h4&gt;
reuse
&lt;ul&gt;
  &lt;li&gt;繼承+new method：增加新功能&lt;/li&gt;
  &lt;li&gt;metohd overriding&lt;/li&gt;
  &lt;li&gt;template&lt;/li&gt;
  &lt;li&gt;framework (design pattern)&lt;/li&gt;
  &lt;li&gt;component&lt;/li&gt;
  &lt;li&gt;library&lt;/li&gt;
  &lt;li&gt;直接改source&lt;/li&gt;
&lt;/ul&gt;
C++：class寫在.h檔，給別人include
&lt;h4&gt;2005-12-30：ASE&lt;/h4&gt;
Advancement of Software Process&lt;br /&gt;
Spiral Model：Plan&amp;rarr;Prototype&amp;rarr;Coding&amp;rarr;Testing&amp;rarr;...
&lt;ul&gt;
  &lt;li&gt;Rational Unified Process(RUP) - 大於20人&lt;/li&gt;
  &lt;li&gt;Feature-Driven Development(FDD) - 10~40人&lt;/li&gt;
  &lt;li&gt;Extreme Programming(XP) - 3~12人&lt;/li&gt;
&lt;/ul&gt;
&lt;em&gt;CMM&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113672231773753576/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113672231773753576?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113672231773753576" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113672231773753576" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/2006-01-08.html" rel="alternate" title="筆記整理(2006-01-08)" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113646806329956194</id><published>2006-01-05T21:05:00.000+08:00</published><updated>2006-01-06T15:38:58.976+08:00</updated><title type="text">New Headphone : audio-technica ATH-AD700</title><content type="html">&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5632/551/1600/ad700.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5632/551/400/ad700.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;多年前我在車站附近的音響店買了生平買過最貴的頭戴式耳機&lt;a href="http://www.audio-technica.co.jp/products/hp/ath-pro5v.html"&gt;audio-technica ATH-PRO5 V&lt;/a&gt;&lt;br /&gt;
雖然說音質沒有話說&lt;br /&gt;
但可能是因為我頭太大&lt;br /&gt;
戴久了耳朵就會開始痛&lt;br /&gt;
上面的塑膠皮也掉地差不多了&lt;br /&gt;
所以一直好想換一個&lt;br /&gt;
終於在今天shumi幫我達成願望啦 :)&lt;br /&gt;
不過這應該也是shumi買過最貴的禮物吧! :P
&lt;/p&gt;
&lt;p&gt;
今天跑到開封街上的&lt;a href="http://www.pincha.com.tw/catalog/"&gt;品嘉&lt;/a&gt;&lt;br /&gt;
之前在網路上打聽了一陣子&lt;br /&gt;
好像是比較便宜、服務也不錯&lt;br /&gt;
但總是覺得買一臺好幾千塊的耳機感覺挺敗家的...&lt;br /&gt;
在店外頭探頭探腦了一會兒才敢進去 @@
&lt;/p&gt;
&lt;p&gt;
老闆拿出一系列的&lt;a href="http://www.audio-technica.co.jp/products/hp/ath-ad300.html"&gt;AD300&lt;/a&gt;、&lt;a href="http://www.audio-technica.co.jp/products/hp/ath-ad500.html"&gt;AD500&lt;/a&gt;、&lt;a href="http://www.audio-technica.co.jp/products/hp/ath-ad700.html"&gt;AD700&lt;/a&gt;給我試聽 (不敢再拿&lt;a href="http://www.audio-technica.co.jp/products/hp/ath-ad900.html"&gt;AD900&lt;/a&gt;、&lt;a href="http://www.audio-technica.co.jp/products/hp/ath-ad1000.html"&gt;AD1000&lt;/a&gt;了...)&lt;br /&gt;
其實我的耳朵也不是特別靈&lt;br /&gt;
雖然每款耳機樣子都差不多&lt;br /&gt;
一款就是比一款貴&lt;br /&gt;
試聽的時候也是感覺數字比較大的好像真的比較不賴&lt;br /&gt;
但是要一項項列出來卻是沒有辦法&lt;br /&gt;
不過戴久了不會不舒服&lt;br /&gt;
而且外型、顏色看起來很漂亮、超有質感的&lt;br /&gt;
這樣就我就很滿足啦!&lt;br /&gt;
年紀輕輕還是不要太奢侈好囉 :P
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113646806329956194/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113646806329956194?isPopup=true" rel="replies" title="5 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113646806329956194" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113646806329956194" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/new-headphone-audio-technica-ath-ad700.html" rel="alternate" title="New Headphone : audio-technica ATH-AD700" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113612096835990867</id><published>2006-01-01T20:43:00.000+08:00</published><updated>2006-01-06T23:52:02.370+08:00</updated><title type="text">chocolixir</title><content type="html">&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.godiva.com.hk/TC/assets/prodimg/880-z.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.godiva.com.hk/TC/assets/prodimg/880-z.jpg" border="0" alt="chocolixir" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
很久以前看到&lt;a href="http://www.godiva.com/"&gt;Godiva&lt;/a&gt;寄來的電子報有介紹這款&lt;a href="http://www.godiva.com.hk/TC/boutique/Chocolixir.asp"&gt;chocolixir&lt;/a&gt;&lt;br /&gt;
就深深的吸引了我&lt;br /&gt;
一直好想去喝喝看&lt;br /&gt;
但還不是所有的Godiva專賣店都有賣這個chocolixir喔~&lt;br /&gt;
在誠品旗艦店開張之前&lt;br /&gt;
全台灣可只有&lt;a href="http://www.godiva.com.hk/TC//boutique/default.asp?sLoca=TW"&gt;天母&lt;/a&gt;有賣呢!
&lt;/p&gt;
&lt;p&gt;
昨天跟shumi去誠品旗艦店逛&lt;br /&gt;
逛到樓下的美食區時&lt;br /&gt;
我從很遠的地方就發現了那裡的Godiva專賣店&lt;br /&gt;
沒想到居然有賣這個我盼望已久的chocolixir飲料&lt;br /&gt;
當然是二話不說&lt;br /&gt;
買一杯&lt;a href="http://www.godiva.com.hk/TC/store/product.asp?id=880"&gt;純黑巧克力&lt;/a&gt;喝看看囉~
&lt;/p&gt;
&lt;p&gt;
Godiva果然不愧是巧克力界的扛霸子&lt;br /&gt;
比那個什麼星巴克賣的&lt;a href="http://www.starbucks.com.tw/zh/bean_beyond.htm"&gt;星冰樂&lt;/a&gt;好喝太多啦! (雖然也是貴很多...)&lt;br /&gt;
光是奶油上面淋的巧克力醬就徹底擊敗星冰樂了&lt;br /&gt;
飲料中那濃濃的巧克力味也是讓人回味無窮&lt;br /&gt;
加上散佈在裡面的巧克力碎片&lt;br /&gt;
喝下一口就已經徹底征服了我&lt;br /&gt;
也為我的2005年打下一個最甜美的句點 :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113612096835990867/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113612096835990867?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113612096835990867" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113612096835990867" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/chocolixir.html" rel="alternate" title="chocolixir" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113610593121535365</id><published>2006-01-01T16:53:00.000+08:00</published><updated>2006-01-01T16:58:51.243+08:00</updated><title type="text">2006! Happy New Year!</title><content type="html">&lt;p&gt;
新的一年又來到啦!&lt;br /&gt;
祝大家新年快樂!&lt;br /&gt;
狗年行大運 :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113610593121535365/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113610593121535365?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113610593121535365" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113610593121535365" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2006/01/2006-happy-new-year.html" rel="alternate" title="2006! Happy New Year!" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113592108806985913</id><published>2005-12-30T13:31:00.000+08:00</published><updated>2005-12-30T13:44:09.033+08:00</updated><title type="text">為Steve Jobs設計的電影海報</title><content type="html">&lt;p&gt;
&lt;a href="http://www.mikeindustries.com/blog/archive/2005/12/ipod-giveaway-7-steve-jobs#comments"&gt;Design a Steve Jobs Movie Poster&lt;/a&gt;&lt;br /&gt;
如果&lt;strong&gt;Steve Jobs&lt;/strong&gt;拍了部電影&lt;br /&gt;
不知道他的電影海報會不會這麼有趣&lt;br /&gt;
其中我覺得最好笑的就是這張&lt;a href="http://www.mikeindustries.com/blog/archive/2005/12/ipod-giveaway-7-steve-jobs#8439"&gt;The Lord of the iPods&lt;/a&gt;裡面的那個&lt;em&gt;Gollum&lt;/em&gt; XD&lt;br /&gt;
&lt;img src="http://img438.imageshack.us/img438/4876/lordoftheipods0me.jpg" waitsrc="http://img438.imageshack.us/img438/4876/lordoftheipods0me.jpg" width="418" /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113592108806985913/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113592108806985913?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113592108806985913" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113592108806985913" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/steve-jobs.html" rel="alternate" title="為Steve Jobs設計的電影海報" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113578132253937527</id><published>2005-12-28T22:43:00.000+08:00</published><updated>2005-12-29T22:01:53.316+08:00</updated><title type="text">狂賀shumi正取師大資教所!</title><content type="html">&lt;p&gt;
恭喜shumi推甄上了&lt;strong&gt;國立台灣師範大學 資訊教育研究所 數位學習組&lt;/strong&gt;&lt;br /&gt;
再度成為我的學妹 XD&lt;br /&gt;
而且還是正取第二名喔 :)
&lt;/p&gt;
&lt;p&gt;這是&lt;a href="http://www.ntnu.edu.tw/aa/aa4/admit/file/95mrgenadmit.pdf"&gt;榜單&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113578132253937527/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113578132253937527?isPopup=true" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113578132253937527" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113578132253937527" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/shumi.html" rel="alternate" title="狂賀shumi正取師大資教所!" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113561079944833401</id><published>2005-12-26T23:15:00.000+08:00</published><updated>2005-12-27T00:38:30.993+08:00</updated><title type="text">Secrets of the Millionaire Mind</title><content type="html">&lt;p&gt;&lt;strong&gt;Secrets of the Millionaire Mind&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;有錢人想的和你不一樣&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010316121"&gt;博客來關於此書的簡介&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;
嗚嗚嗚~博客來賣的竟然更便宜!&lt;br /&gt;
早知道就在博客來買了&lt;br /&gt;
就不用跑好幾間書店找這麼久
&lt;/p&gt;

&lt;p&gt;
這本書中的很多觀念都很不錯&lt;br /&gt;
其實也可以不要把當作理財的書來看&lt;br /&gt;
生活中很多地方都可以用到書中的觀念和守則&lt;br /&gt;
的確是本值得看的書喔!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113561079944833401/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113561079944833401?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113561079944833401" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113561079944833401" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/secrets-of-millionaire-mind.html" rel="alternate" title="Secrets of the Millionaire Mind" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113560783876597037</id><published>2005-12-26T22:32:00.000+08:00</published><updated>2005-12-28T14:20:27.016+08:00</updated><title type="text">Lord of the Flies</title><content type="html">&lt;p&gt;&lt;strong&gt;蒼蠅王 Lord of the Flies&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;                                                                               
這大概是本學期看到現在最令我震撼的電影吧!&lt;br /&gt;
尤其聽了老師的解釋感觸更多
&lt;/p&gt;
&lt;p&gt;
有關這本書和電影的介紹也很多&lt;br /&gt;
大部分的人提到了另外兩部電影&lt;br /&gt;
&lt;strong&gt;漂流教室&lt;/strong&gt; 和 &lt;strong&gt;大逃殺&lt;/strong&gt;&lt;br /&gt;
有機會希望能看看&lt;br /&gt;
不過我對於大逃殺沒什麼好感&lt;br /&gt;
光看簡介就覺得太恐怖了!!&lt;br /&gt;
我還是喜歡喜劇 這種東西太嚴肅了!!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113560783876597037/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113560783876597037?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113560783876597037" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113560783876597037" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/lord-of-flies.html" rel="alternate" title="Lord of the Flies" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113517427707132294</id><published>2005-12-21T22:02:00.000+08:00</published><updated>2005-12-21T23:12:32.443+08:00</updated><title type="text">Burning My Feed</title><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="http://feeds.feedburner.com/ciyawasay"&gt;http://feeds.feedburner.com/ciyawasay&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;雖然我不知道燒這個feed有什麼好處&lt;br /&gt;
不過還是趕個流行吧 @@&lt;/p&gt;
&lt;p&gt;
這東西似乎是可以讓別人就算用browser直接連到我的feed&lt;br /&gt;
還是可以看到不錯的網頁介面，而不是直接秀出恐怖的XML&lt;br /&gt;
Blogger其實已經有這種功能了&lt;br /&gt;
不過這個站除了提供比較好看的介面，還提供一些分析的功能&lt;br /&gt;
嗯嗯...其實好像還有更多其他功能&lt;br /&gt;
先用用看再慢慢研究吧~
&lt;/p&gt;
&lt;p&gt;
後記:&lt;br /&gt;
經過一番研究後&lt;br /&gt;
我發現這個FeedBurner實在是功能太強大了&lt;br /&gt;
不只是可以給你分析數據&lt;br /&gt;
也提供許多web 2.0的服務&lt;br /&gt;
像是結合我的Flickr、del.icio.us一起發佈到這個feed中&lt;br /&gt;
甚至Google AdSense也可以加進來(Ya!)&lt;br /&gt;
只可惜對中文的支援很差&lt;br /&gt;
不過它還真是個蠻酷的東西 :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113517427707132294/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113517427707132294?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113517427707132294" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113517427707132294" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/burning-my-feed.html" rel="alternate" title="Burning My Feed" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113510101041579083</id><published>2005-12-21T01:35:00.000+08:00</published><updated>2005-12-21T02:21:51.233+08:00</updated><title type="text">Observer Pattern - OO and AO Implementation</title><content type="html">&lt;p&gt;參考&lt;a href="http://www.cs.ubc.ca/~jan/AODPs/"&gt;Aspect-Oriented Design Pattern Implementations&lt;/a&gt;&lt;br /&gt;
由於版面關係，覺得字體太小請麻煩自行用瀏覽器放大&lt;/p&gt;
&lt;table border="1" style="font-size:10px"&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;h3&gt;OOP Implementation&lt;/h3&gt;&lt;/td&gt;
    &lt;td&gt;&lt;h3&gt;AOP Implementation&lt;/h3&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;ObserverProtocol.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
import java.util.WeakHashMap;
import java.util.List;
import java.util.LinkedList;

public abstract aspect ObserverProtocol {

   protected interface Subject {}

   protected interface Observer {}

   private WeakHashMap&amp;lt;Subject, List&amp;lt;Observer&amp;gt;&amp;gt; perSubjectObservers;

   protected List&amp;lt;Observer&amp;gt; getObservers(Subject subject) {
      if (perSubjectObservers == null) {
         perSubjectObservers = new WeakHashMap&amp;lt;Subject, List&amp;lt;Observer&amp;gt;&amp;gt;();
      }
      List&amp;lt;Observer&amp;gt; observers = perSubjectObservers.get(subject);
      if (observers == null) {
         observers = new LinkedList&amp;lt;Observer&amp;gt;();
         perSubjectObservers.put(subject, observers);
      }
      return observers;
   }

   public void addObserver(Subject subject, Observer observer) {
      getObservers(subject).add(observer);
   }

   public void removeObserver(Subject subject, Observer observer) {
      getObservers(subject).remove(observer);
   }

   protected abstract pointcut subjectChange(Subject s);

   after(Subject subject): subjectChange(subject) {
      for (Observer o : getObservers(subject)) {
         updateObserver(subject, o);
      }
   }

   protected abstract void updateObserver(Subject subject, Observer observer);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;Point.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
import java.awt.Color;
&lt;span style="background-color:#CCCCCC"&gt;import java.util.HashSet;&lt;/span&gt;

public class Point &lt;span style="background-color:#CCCCCC"&gt;implements ChangeSubject&lt;/span&gt; {

   &lt;span style="background-color:#CCCCCC"&gt;private HashSet&amp;lt;ChangeObserver&amp;gt; observers;&lt;/span&gt;

   private int x;

   private int y;

   private Color color;

   public Point(int x, int y, Color color) {
      this.x = x;
      this.y = y;
      this.color = color;
      &lt;span style="background-color:#CCCCCC"&gt;this.observers = new HashSet&amp;lt;ChangeObserver&amp;gt;();&lt;/span&gt;
   }

   public int getX() {
      return x;
   }

   public int getY() {
      return y;
   }

   public void setX(int x) {
      this.x = x;
      &lt;span style="background-color:#CCCCCC"&gt;notifyObservers();&lt;/span&gt;
   }

   public void setY(int y) {
      this.y = y;
      &lt;span style="background-color:#CCCCCC"&gt;notifyObservers();&lt;/span&gt;
   }

   public Color getColor() {
      return color;
   }

   public void setColor(Color color) {
      this.color = color;
      &lt;span style="background-color:#CCCCCC"&gt;notifyObservers();&lt;/span&gt;
   }

   &lt;span style="background-color:#CCCCCC"&gt;public void addObserver(ChangeObserver o) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   this.observers.add(o);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;

   &lt;span style="background-color:#CCCCCC"&gt;public void removeObserver(ChangeObserver o) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   this.observers.remove(o);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;

   &lt;span style="background-color:#CCCCCC"&gt;public void notifyObservers() {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   for (ChangeObserver o : observers) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;      o.refresh(this);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   }&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;Point.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
import java.awt.Color;

public class Point {

   private int x;

   private int y;

   private Color color;

   public Point(int x, int y, Color color) {
      this.x = x;
      this.y = y;
      this.color = color;
   }

   public int getX() {
      return x;
   }

   public int getY() {
      return y;
   }

   public void setX(int x) {
      this.x = x;
   }

   public void setY(int y) {
      this.y = y;
   }

   public Color getColor() {
      return color;
   }

   public void setColor(Color color) {
      this.color = color;
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;Screen.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
&lt;span style="background-color:#CCCCCC"&gt;import java.util.HashSet;&lt;/span&gt;

public class Screen &lt;span style="background-color:#CCCCCC"&gt;implements ChangeSubject, ChangeObserver&lt;/span&gt; {

   &lt;span style="background-color:#CCCCCC"&gt;private HashSet&amp;lt;ChangeObserver&amp;gt; observers;&lt;/span&gt;

   private String name;

   public Screen(String s) {
      this.name = s;
      &lt;span style="background-color:#CCCCCC"&gt;observers = new HashSet&amp;lt;ChangeObserver&amp;gt;();&lt;/span&gt;
   }

   public void display(String s) {
      System.out.println(name + &amp;quot;: &amp;quot; + s);
      &lt;span style="background-color:#CCCCCC"&gt;notifyObservers();&lt;/span&gt;
   }

   &lt;span style="background-color:#CCCCCC"&gt;public void addObserver(ChangeObserver o) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   this.observers.add(o);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;

   &lt;span style="background-color:#CCCCCC"&gt;public void removeObserver(ChangeObserver o) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   this.observers.remove(o);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;

   &lt;span style="background-color:#CCCCCC"&gt;public void notifyObservers() {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   for (ChangeObserver o : observers) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;      o.refresh(this);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   }&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;

   &lt;span style="background-color:#CCCCCC"&gt;public void refresh(ChangeSubject s) {&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   String subjectTypeName = s.getClass().getName();&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   subjectTypeName = subjectTypeName.substring(subjectTypeName&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;         .lastIndexOf(&amp;quot;.&amp;quot;) + 1, subjectTypeName.length());&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;   display(&amp;quot;update received from a &amp;quot; + subjectTypeName + &amp;quot; object&amp;quot;);&lt;/span&gt;
   &lt;span style="background-color:#CCCCCC"&gt;}&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;Screen.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
public class Screen {

   private String name;

   public Screen(String s) {
      this.name = s;
   }

   public void display(String s) {
      System.out.println(name + &amp;quot;: &amp;quot; + s);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;&lt;span style="background-color:#CCCCCC"&gt;ChangeSubject.java&lt;/span&gt;&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
public interface ChangeSubject {

   public void addObserver(ChangeObserver o);

   public void removeObserver(ChangeObserver o);

   public void notifyObservers();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;CoordinateObserver.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
public aspect CoordinateObserver extends ObserverProtocol {

   declare parents: Point  implements Subject;

   declare parents: Screen implements Observer;

   protected pointcut subjectChange(Subject subject): 
      (call(void Point.setX(int)) ||
       call(void Point.setY(int)) ) &amp;amp;&amp;amp; target(subject);

   protected void updateObserver(Subject subject, Observer observer) {
      ((Screen) observer)
            .display(&amp;quot;Screen updated (point subject changed coordinates).&amp;quot;);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;&lt;span style="background-color:#CCCCCC"&gt;ChangeObserver.java&lt;/span&gt;&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
public interface ChangeObserver {

   public void refresh(ChangeSubject s);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;ColorObserver&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
import java.awt.Color;

public aspect ColorObserver extends ObserverProtocol {

   declare parents: Point  implements Subject;

   declare parents: Screen implements Observer;

   protected pointcut subjectChange(Subject subject): 
      call(void Point.setColor(Color)) &amp;amp;&amp;amp; target(subject);

   protected void updateObserver(Subject subject, Observer observer) {
      ((Screen) observer)
            .display(&amp;quot;Screen updated (point subject changed color).&amp;quot;);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;ScreenObserver.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
public aspect ScreenObserver extends ObserverProtocol {

   declare parents: Screen implements Subject;

   declare parents: Screen implements Observer;

   protected pointcut subjectChange(Subject subject): 
      call(void Screen.display(String)) &amp;amp;&amp;amp; target(subject);

   protected void updateObserver(Subject subject, Observer observer) {
      ((Screen) observer)
            .display(&amp;quot;Screen updated (screen subject displayed message).&amp;quot;);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;Main.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
import java.awt.Color;

public class Main {

   public static void main(String argv[]) {
      // Creating Screen s1,s2,s3,s4,s5 and Point p
      Screen s1 = new Screen(&amp;quot;s1&amp;quot;);
      Screen s2 = new Screen(&amp;quot;s2&amp;quot;);
      Screen s3 = new Screen(&amp;quot;s3&amp;quot;);
      Screen s4 = new Screen(&amp;quot;s4&amp;quot;);
      Screen s5 = new Screen(&amp;quot;s5&amp;quot;);
      Point p = new Point(5, 5, Color.blue);

      // s1 and s2 observe color changes to p
      p.addObserver(s1);
      p.addObserver(s2);

      // s3 and s4 observe coordinate changes to p
      p.addObserver(s3);
      p.addObserver(s4);

      // s5 observes s2's and s4's display() method
      s2.addObserver(s5);
      s4.addObserver(s5);

      System.out.println(&amp;quot;Changing p's color:&amp;quot;);
      p.setColor(Color.red);

      System.out.println(&amp;quot;Changing p's x-coordinate:&amp;quot;);
      p.setX(4);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;&lt;code&gt;Main.java&lt;/code&gt;&lt;/strong&gt;
      &lt;pre&gt;&lt;code&gt;
import java.awt.Color;

public class Main {

   public static void main(String argv[]) {
      // Creating Screen s1,s2,s3,s4,s5 and Point p
      Screen s1 = new Screen(&amp;quot;s1&amp;quot;);
      Screen s2 = new Screen(&amp;quot;s2&amp;quot;);
      Screen s3 = new Screen(&amp;quot;s3&amp;quot;);
      Screen s4 = new Screen(&amp;quot;s4&amp;quot;);
      Screen s5 = new Screen(&amp;quot;s5&amp;quot;);
      Point p = new Point(5, 5, Color.blue);

      // s1 and s2 observe color changes to p
      ColorObserver.aspectOf().addObserver(p, s1);
      ColorObserver.aspectOf().addObserver(p, s2);

      // s3 and s4 observe coordinate changes to p
      CoordinateObserver.aspectOf().addObserver(p, s3);
      CoordinateObserver.aspectOf().addObserver(p, s4);

      // s5 observes s2's and s4's display() method
      ScreenObserver.aspectOf().addObserver(s2, s5);
      ScreenObserver.aspectOf().addObserver(s4, s5);

      System.out.println(&amp;quot;Changing p's color:&amp;quot;);
      p.setColor(Color.red);

      System.out.println(&amp;quot;Changing p's x-coordinate:&amp;quot;);
      p.setX(4);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr valign="top"&gt;
    &lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;
      &lt;pre&gt;
Changing p's color:
s1: update received from a Point object
s2: update received from a Point object
s5: update received from a Screen object
&lt;span style="background-color:#CCCCCC"&gt;s3: update received from a Point object&lt;/span&gt;
&lt;span style="background-color:#CCCCCC"&gt;s4: update received from a Point object&lt;/span&gt;
&lt;span style="background-color:#CCCCCC"&gt;s5: update received from a Screen object&lt;/span&gt;
Changing p's x-coordinate:
&lt;span style="background-color:#CCCCCC"&gt;s1: update received from a Point object&lt;/span&gt;
&lt;span style="background-color:#CCCCCC"&gt;s2: update received from a Point object&lt;/span&gt;
&lt;span style="background-color:#CCCCCC"&gt;s5: update received from a Screen object&lt;/span&gt;
s3: update received from a Point object
s4: update received from a Point object
s5: update received from a Screen object
&lt;/pre&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;
      &lt;pre&gt;
Changing p's color:
s1: Screen updated (point subject changed color).
s2: Screen updated (point subject changed color).
s5: Screen updated (screen subject displayed message).
Changing p's x-coordinate:
s3: Screen updated (point subject changed coordinates).
s4: Screen updated (point subject changed coordinates).
s5: Screen updated (screen subject displayed message).
&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;strong&gt;Problem&lt;/strong&gt;
      &lt;ul&gt;
        &lt;li&gt;design pattern侵入原本的程式，將之複雜化&lt;/li&gt;
        &lt;li&gt;如果要將observer再加以功能區分，程式將會更複雜&lt;/li&gt;
      &lt;/ul&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;Improvement&lt;/strong&gt;
      &lt;ul&gt;
        &lt;li&gt;更好的模組化&lt;/li&gt;
        &lt;li&gt;容易擴充、縮減&lt;/li&gt;
      &lt;/ul&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113510101041579083/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113510101041579083?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113510101041579083" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113510101041579083" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/observer-pattern-oo-and-ao.html" rel="alternate" title="Observer Pattern - OO and AO Implementation" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113508971353523525</id><published>2005-12-20T22:30:00.000+08:00</published><updated>2005-12-20T22:41:53.550+08:00</updated><title type="text">The Christmas Song</title><content type="html">&lt;div&gt;
&lt;p&gt;Chestnuts roasting on an open fire,&lt;br /&gt;
Jack Frost nipping on your nose,&lt;br /&gt;
Yuletide carols being sung by a choir,&lt;br /&gt;
And folks dressed up like Eskimos.&lt;/p&gt;
&lt;p&gt;Everybody knows a turkey and some mistletoe,&lt;br /&gt;
Help to make the season bright.&lt;br /&gt;
Tiny tots with their eyes all aglow,&lt;br /&gt;
Will find it hard to sleep tonight.&lt;/p&gt;
&lt;p&gt;They know that Santa's on his way;&lt;br /&gt;
He's loaded lots of toys and goodies on his sleigh.&lt;br /&gt;
And every mother's child is going to spy,&lt;br /&gt;
To see if reindeer really know how to fly.&lt;/p&gt;
&lt;p&gt;And so I'm offering this simple phrase,&lt;br /&gt;
To kids from one to ninety-two,&lt;br /&gt;
Although its been said many times, many ways,&lt;br /&gt;
A very Merry Christmas to you!&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
聖誕節快到啦~&lt;br /&gt;
為大家帶來一首我十分喜歡的聖誕歌曲&lt;br /&gt;
這首&lt;strong&gt;The Christmas Song&lt;/strong&gt;是於1944年，Mel Torme與Bob Wells所寫，Nat King Cole所唱&lt;br /&gt;
除了是電影中配樂的常客外&lt;br /&gt;
也有許多人拿來翻唱&lt;br /&gt;
我最早是在看Catch Me If You Can這部電影中聽到的&lt;br /&gt;
劇情很感人我就不多說了&lt;br /&gt;
反正就是祝大家聖誕快樂囉 :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113508971353523525/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113508971353523525?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113508971353523525" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113508971353523525" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/christmas-song.html" rel="alternate" title="The Christmas Song" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113487663017485389</id><published>2005-12-18T11:30:00.000+08:00</published><updated>2005-12-28T14:13:39.270+08:00</updated><title type="text">TIME Magazine's Person of the Year in Times Square</title><content type="html">&lt;style type="text/css"&gt;
.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }
&lt;/style&gt;
&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/swanky-hsiao/74618282/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/6/74618282_b60594e89e.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
  &lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/swanky-hsiao/74618282/"&gt;TIME Magazine's Person of the Year in Times Square&lt;/a&gt;, originally uploaded by &lt;a href="http://www.flickr.com/people/swanky-hsiao/"&gt;swanky&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;
  有沒有看到&lt;a href="http://www.impoy.com/default.aspx?detail_id=35864"&gt;我的照片被貼在Time Square上廣告的照片&lt;/a&gt;阿?&lt;br /&gt;
  最近Time辦了一個有趣的人人都可以當Person of the Year活動&lt;br /&gt;
  網址在&lt;a href="http://www.impoy.com/"&gt;http://www.impoy.com/&lt;/a&gt;&lt;br /&gt;
  跟我一樣無聊的人可以去參加&lt;br /&gt;
  雖然看起來還真的蠻好笑就是...&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113487663017485389/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113487663017485389?isPopup=true" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113487663017485389" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113487663017485389" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/time-magazines-person-of-year-in-times.html" rel="alternate" title="TIME Magazine's Person of the Year in Times Square" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17130115.post-113473749569288341</id><published>2005-12-16T20:33:00.000+08:00</published><updated>2005-12-16T20:51:35.706+08:00</updated><title type="text">String Escaper 0.1</title><content type="html">&lt;p&gt;
&lt;a href="http://www.ice.ntnu.edu.tw/~swanky/blog_files/StringEscaper.zip"&gt;download now&lt;/a&gt;&lt;br /&gt;
使用方法:&lt;br /&gt;
解壓縮後在有java的windows環境下執行run.bat&lt;br /&gt;
使用ctrl+x (剪下)、ctrl+c (複製)、ctrl+v (貼上)與上面的按鈕進行操作
&lt;/p&gt;
&lt;p&gt;
之前在玩&lt;a href="http://jakarta.apache.org/commons/"&gt;Jakarta Commons&lt;/a&gt;時&lt;br /&gt;
看到了一個還蠻有意思的class&lt;br /&gt;
就是&lt;a href="http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang/StringEscapeUtils.html"&gt;org.apache.commons.lang.StringEscapeUtils&lt;/a&gt;&lt;br /&gt;
它可以幫你把一些特殊字元在各種不同的應用中進行跳脫&lt;br /&gt;
我也為這個有趣的class弄了一個對我而言還算方便(其實是簡陋)的GUI介面來使用&lt;br /&gt;
最近卻發現我使用它的機會還蠻大的&lt;br /&gt;
像是在blog上po程式碼的時候...&lt;br /&gt;
所以雖然程式很簡單我還是跟大家分享一下&lt;br /&gt;
歡迎大家為它弄出一個更好的介面或功能再分享回來 :)&lt;br /&gt;
code:
&lt;pre&gt;&lt;code&gt;
package org.swanky.tools;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;

import org.apache.commons.lang.StringEscapeUtils;

/**
 * StringEscaper
 * 
 * @author swanky
 * @version 0.1, 2005-11-27
 */
@SuppressWarnings(&amp;quot;serial&amp;quot;)
public class StringEscaper extends JFrame {
   /** frame width */
   public static final int WIDTH = 1024;

   /** frame height */
   public static final int HEIGHT = 768;

   /** text area */
   private JTextArea ta = new JTextArea();

   /** tool bar */
   private JToolBar toolBar = new JToolBar();

   /**
    * constractor
    * 
    * @param arg0
    *            frame title
    * @throws HeadlessException
    */
   public StringEscaper(String arg0) throws HeadlessException {
      super(arg0);
      ta.setFont(new Font(&amp;quot;Courier New&amp;quot;, Font.PLAIN, 12));
   }

   public static void main(String[] args) {
      StringEscaper f = new StringEscaper(&amp;quot;String Escaper&amp;quot;);

      // add actions
      f.toolBar.add(f.new EscapeHTML());
      f.toolBar.add(f.new EscapeJava());
      f.toolBar.add(f.new EscapeJavaScript());
      f.toolBar.add(f.new EscapeSQL());
      f.toolBar.add(f.new EscapeXML());

      // set components on content pane
      f.add(f.toolBar, BorderLayout.NORTH);
      JScrollPane sp = new JScrollPane(f.ta);
      f.add(sp, BorderLayout.CENTER);

      // show frame
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setSize(WIDTH, HEIGHT);
      f.setVisible(true);
   }

   class EscapeHTML extends AbstractAction {
      EscapeHTML() {
         putValue(Action.NAME, &amp;quot;EscapeHTML&amp;quot;);
         putValue(Action.SHORT_DESCRIPTION, &amp;quot;Escape HTML&amp;quot;);
      }

      public void actionPerformed(ActionEvent arg0) {
         ta.setText(StringEscapeUtils.escapeHtml(ta.getText()));
      }
   }

   class EscapeJava extends AbstractAction {
      EscapeJava() {
         putValue(Action.NAME, &amp;quot;EscapeJava&amp;quot;);
         putValue(Action.SHORT_DESCRIPTION, &amp;quot;Escape Java&amp;quot;);
      }

      public void actionPerformed(ActionEvent arg0) {
         ta.setText(StringEscapeUtils.escapeJava(ta.getText()));
      }
   }

   class EscapeJavaScript extends AbstractAction {
      EscapeJavaScript() {
         putValue(Action.NAME, &amp;quot;EscapeJavaScript&amp;quot;);
         putValue(Action.SHORT_DESCRIPTION, &amp;quot;Escape JavaScript&amp;quot;);
      }

      public void actionPerformed(ActionEvent arg0) {
         ta.setText(StringEscapeUtils.escapeJavaScript(ta.getText()));
      }
   }

   class EscapeSQL extends AbstractAction {
      EscapeSQL() {
         putValue(Action.NAME, &amp;quot;EscapeSQL&amp;quot;);
         putValue(Action.SHORT_DESCRIPTION, &amp;quot;Escape SQL&amp;quot;);
      }

      public void actionPerformed(ActionEvent arg0) {
         ta.setText(StringEscapeUtils.escapeSql(ta.getText()));
      }
   }

   class EscapeXML extends AbstractAction {
      EscapeXML() {
         putValue(Action.NAME, &amp;quot;EscapeXML&amp;quot;);
         putValue(Action.SHORT_DESCRIPTION, &amp;quot;Escape XML&amp;quot;);
      }

      public void actionPerformed(ActionEvent arg0) {
         ta.setText(StringEscapeUtils.escapeXml(ta.getText()));
      }
   }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5356456005253718";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link href="http://ciyawasay.blogspot.com/feeds/113473749569288341/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/17130115/113473749569288341?isPopup=true" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113473749569288341" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/17130115/posts/default/113473749569288341" rel="self" type="application/atom+xml"/><link href="http://ciyawasay.blogspot.com/2005/12/string-escaper-01.html" rel="alternate" title="String Escaper 0.1" type="text/html"/><author><name>SwanBear</name><uri>http://www.blogger.com/profile/13721660184170484178</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry></feed>