<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7587710935479412692</atom:id><lastBuildDate>Tue, 31 Jan 2012 01:45:37 +0000</lastBuildDate><category>瀏覽器</category><category>閒聊</category><category>搜尋引擎</category><category>心情</category><category>Plurk</category><category>3C</category><category>網路學</category><category>maven</category><category>設計模式</category><category>桌面管理</category><category>Windows</category><category>open source</category><category>nunit</category><category>圖片會說話</category><category>Paper</category><category>計概</category><category>旅遊</category><category>RSS</category><category>書籍</category><category>軟體測試</category><category>extension</category><category>tips</category><category>Social Network</category><category>Self-Learning</category><category>josso</category><category>.net</category><category>Google 文件</category><category>eclipse</category><category>Chrome套件</category><category>GMail</category><category>電影</category><category>名詞</category><category>科技名詞</category><category>體育</category><category>MySQL</category><category>Google Reader</category><category>java</category><category>網路服務</category><category>演算法</category><category>Data Mining</category><category>創業</category><category>數學</category><category>工作法</category><category>UML</category><category>XML</category><category>認證</category><category>程式設計</category><category>cloud</category><category>奧運</category><category>網路技術</category><category>thinkpad</category><category>程式語言</category><category>Firefox</category><category>攝影</category><category>Firefox套件</category><category>簡報</category><category>RoR</category><category>Search Engine</category><category>歌詞</category><category>ubuntu</category><category>j2ee</category><category>OS</category><category>觀察</category><category>Redmine</category><category>微網誌</category><category>Microsoft</category><category>軟體</category><category>電腦</category><category>專案管理</category><category>物件導向</category><category>圖片分享</category><category>youtube</category><category>紀錄</category><category>Ajax</category><category>Programming</category><category>paas</category><category>CCNA</category><category>SaaS</category><category>Chrome</category><category>網站</category><category>load-balancer</category><category>時間管理</category><category>研究生？</category><category>Facebook</category><category>Yahoo</category><category>硬體</category><category>影片</category><category>apache</category><category>linux</category><category>spring framework</category><category>軟體工程</category><category>mongodb</category><category>Google</category><category>音樂</category><category>android開發</category><category>blogger</category><category>網路應用</category><category>web2.0</category><category>Database</category><category>twitter</category><category>Flickr</category><category>Design Pattern</category><category>雲端</category><category>敗家</category><category>SVN</category><category>設計</category><title>I am here.</title><description>軟體開發。程式設計。Web2.0。網路。科技。筆記。軟體</description><link>http://kevingo75.blogspot.com/</link><managingEditor>noreply@blogger.com (kevingo Tsai)</managingEditor><generator>Blogger</generator><openSearch:totalResults>440</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blogspot/eWOb" /><feedburner:info uri="blogspot/ewob" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-4433864640246594955</guid><pubDate>Tue, 31 Jan 2012 01:45:00 +0000</pubDate><atom:updated>2012-01-31T09:45:37.366+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">軟體</category><category domain="http://www.blogger.com/atom/ns#">紀錄</category><title>【轉】不要自稱程式設計師，老鳥的 9 個職涯建言</title><description>資料來源：&lt;a href="http://sslab.co/content/bu-yao-zi-cheng-cheng-shi-she-ji-shi-lao-niao-de-9-ge-zhi-ya-jian-yan"&gt;不要自稱程式設計師，老鳥的 9 個職涯建言&lt;/a&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
原文標題： Don’t Call Yourself A Programmer, And Other Career Advice （&lt;a href="http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/"&gt;原文連結&lt;/a&gt;）&lt;br /&gt;
&lt;br /&gt;
如果有一門課，我能將它加到任何工程相關的學程，它將不會涉及編譯器、閘道或時間複雜度。 這門課的名稱可能是 不可不知的產業真實面 ；我們從來不教這門課，結果造成許多苦難。 若你將成為年輕的工程師，這篇文章就是你的「讀我檔案（README）」文件。 這邊文章告訴你那些學校沒有教的事，讓你知道「真實世界」實際如何運作，目的是讓你能夠快樂工作。 從缺乏自信及商務知識的工程師開始，我大概花了十年的歲月，經歷很多次的痛苦，才能明白這些。 我並不覺得這篇文章會是終極指南，但希望能告訴你那些大學職涯中心沒有講的事。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;九成的程式設計工作來自企業內部軟體&lt;/b&gt;&lt;b&gt;（90% of programming jobs are in creating Line of Business software）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
從經濟學的觀點：任何東西（包括你）的價格，都是以它的供給和需求計算出來。 我們先來談需求面。 大部分的軟體，都不是公開販售、透過網際網路發行，或是從線上應用程式商店（App Store）下載。 多數的軟體來自企業內部需求、解決營運問題，例如追踪費用、最佳化運送成本、協助會計部門、設計新組件、計算保單價格、識別詐欺訂單等。 各式各樣的商業公司，開發內部軟件，解決它們自己的問題。市場上對程序員的大部分需求來源於此，只有極少數程序員直接編寫面向外部顧客的軟件。 內部軟件的開發，通常非常乏味，令人厭倦。因為它們的技術複雜性低、技術決策非常保守、預算很少、缺乏長遠考慮。但是，世界上大部分編程工作都是這種。&lt;br /&gt;
&lt;br /&gt;
軟體經常用於解決商業問題，不管它是多麼無趣或沒技術可言。 以公司內部的出差費用單為例，對於有 2,000 名員工的企業，紙上作業在電子化之後，可能節省每年 5,000 工時，以每小時 50 美元的成本計算，就可以省下每年 $250,000 的開支。 出差表單可能只是全世界最簡單的 CURD 程式，但如果它能夠為公司節省成本或增加收入，它就很重要。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;公司僱用你是為了創造商業價值，不是讓你恣意寫程式（Engineers are hired to create business value, not to program things）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
商業公司最關心的（或者說唯一在乎的）事情，就是增加收入、降低成本。因此，它們實際上需要的不是程序員，而是能夠幫助它們增加收入、降低成本的人。 開發優美的軟件，解決技術難題，編寫沒有bug的代碼，這些都不是商業公司的目的。它們僱傭你，是為了讓你幫牠們完成某個可以增加收入、降低成本的項目，而不是因為你是geek。 你個人對於公司的唯一價值，就在於你能多大程度上為它們增加收入、降低成本。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;不要自稱為程式設計師（Don't call yourself a programmer）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
很多公司的主管不懂電腦，他們覺得，「程式設計師」就是一票成本很高的勞工，做一些複雜很難瞭解的事情。 如果你的職稱是「程式設計師」，當公司需要縮減成本的時候，某些主管會想要先解僱你。 有一家公司叫 Salesforce，口號是「沒有軟件」，意思就是如果經理們購買了他們的服務，就不再需要別的軟件管理銷售業務了，也就是說，不再需要自己僱傭程序員了。 正確的做法是，你應該把自己描述成與增加收入、降低成本有關係的人，比如"xx產品的開發者"或"改進者"。有一個Google Adsense程序員的自我介紹，是這樣寫的："Google公司97%的收入，與我的代碼有關。"&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;別受限於你選擇的軟體技術（You are not defined by your chosen software stack）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
年輕工程師透過 Twitter 向我詢問職涯問題時，許多人問的是關於該學什麼程式語言或平台（例如 Java 或 .NET？），其實這無關緊要。&lt;br /&gt;
&lt;br /&gt;
Java 的程式設計師，是否比 .NET 的程式設計師賺更多錢？爭論的人總是說 Java 或 .NET 程式設計師已經有一大票； 若你認真就輸了，因為 (1) 你不該把自己定義為程式設計師（理由請看上一節）， (2) 執著這種無意義的辯論，對於從事程式設計工作毫無建樹。 現實生活中，不管學哪一種程式語言，通常只要幾個星期就能上手，再過個一年半載，當你成為老鳥，就沒人在乎你用什麼語言了。 最近我在 2010 年 3 月，用癡肥醜陋的 Java EE 開發網站後端系統，請相信我，根本沒人在乎我用什麼技術開發。 如果用 Python 的公司想找技術高手幫公司賺一大筆錢，即使我從不寫任何一行 Python 程式碼，也同樣能夠勝任。&lt;br /&gt;
&lt;br /&gt;
天才型的工程師很稀少，在就業市場根本供不應求。 在 Matasano 公司每個人都會用 Ruby，但儘管你不是天才，只要你是優秀的工程師，他們還是願意錄用你。 （優秀的工程師的履歷，就是一連串幫公司增加收入和降低成本的事蹟。） Fog Creek 公司幾乎都用微軟平台，但儘管我無法拼寫「ASP.NET」這專有名詞，他們還是錄用我。&lt;br /&gt;
&lt;br /&gt;
有些公司的人資部門招聘制度很差勁，如果你的履歷缺少一些關鍵字（如 Java 或 .NET），他們甚至不會找你去面試。 你應該不會想去這些有病的公司，但如果你真的想去，你還是可以花幾個晚上或週末時間， 把那些「熱門就業關鍵字」補寫到履歷中，也可以修改一下手邊的專案，讓你的經歷和那些詞彙扯上邊。 如果你想在一家用 .NET 的公司學 Ruby，那就用 Ruby 完成那種一次性的專案， 接著你就成為專業 Ruby 程式設計師，因為你用 Ruby 寫程式，而公司也為此付給你薪水。 （好笑嗎？我在用 Java 的公司這樣做，以 Ruby 寫個小專案，幫公司賺了 $30,000 美元，我的老闆很高興，而且可以預料的，他根本從來沒問過我用什麼技術開發。）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;同事和主管不會一直是你的朋友（Co-workers and bosses are not usually your friends）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
你花了很多時間和同事在一起，你和其中幾位可能變成很要好的朋友，通常在這三年，你為維持親切的關係，邀請他們共進晚餐，而他們也同樣邀請你。 你認識的每個人，都會覺得你是個不錯的人，這對你的人際關係很有幫助；但是，可別妄想每個人都是你的朋友。&lt;br /&gt;
&lt;br /&gt;
舉例來說，你在求職面試時，正在和一位看起來和藹可親的 28 歲主管談話，他看起來有點像幾年後的你。 但你畢竟不是他的朋友，面試官只是試著想幫公司用最便宜的價格把你招募進來。 也許討論魔獸爭霸讓你覺得彼此之間存在某種情誼， 但事實上面試官真正要做的事情，雖然合乎常理，卻是你真正的朋友不可能做的， 像是希望你對薪資的要求能降低個幾千塊； 或是要你多為公司付出一些時間，而減少跟真正的朋友在一起的時間。 你會有其他待人親切、好相處的同事們，開始建議你做一些你不是很想做的事情，例如「我需要從你剛完成的這個專案多拿到一些績效」，甚至「我們必須一起完成這件事情，雖然對你沒什麼好處，但是對我的目標達成很重要」。 當這些事情發生時，可別太訝異！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;別過度評價競爭者的平均技能（You radically overestimate the average skill of the competition because of the crowd you hang around with）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
許多人已經成功晉升資深工程師，卻無法正確實作 FizzBuzz 。想想看：你或許已經可以去那些你自認不夠資格應徵的公司工作，他們雖然聘用比較厲害的麻瓜，但依然是麻瓜。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;看徵才廣告求職成功是一場意外（“Read ad. Send in resume. Go to job interview. Receive offer.” is the exception, not the typical case, for getting employment）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
很多工作從來不公開招募，多數值得被聘用的人也不公開求職（參考約耳談軟體的 文章）。 職缺的資訊可以很快用電子郵件傳遞，當某家公司的決策者知道他需要找誰，只要透過他的朋友或生意夥伴，他們其中會有人認識這位要找的人，可能是家人、大學室友、會議中結識或過去的同事等。 約出來見面晤談，達成工作協議後，再交給人資部門正式聘用即可。&lt;br /&gt;
&lt;br /&gt;
對於大多數你想要得到的工作，「新創公司的第一位員工」實際上很難讓你的履歷可以被人資部門接受，只有兩個人的新創公司，對於人資部門來說並不算正式的工作經歷。 （你不會想成為新創公司的第一位員工，但你可以當最後一位共同創辦人。） 想要成為 Googler 的一份子嗎？只要你像其他 Googler 一樣工作，他們會有正式的程序，可以助你一臂之力。 （他們也有許多非正式的管道，給有機會成為 Googler 的你，例如：將你正在工作的公司買下來。當你被幾億美元的資金圍繞，就會有很多有趣的選項來解決問題。）&lt;br /&gt;
&lt;br /&gt;
有許多理由可以說明為何求才都是私下進行，其中一點是公開求才會收到數以百計的大量履歷轟炸（特別是目前的景氣狀況下），包括許多根本不適合這項職缺的人。 另外一點是，如果你對要找的人沒有更進一步的認識，很可能找來一位平庸的資深工程師（non-FizzBuzzer）。&lt;br /&gt;
&lt;br /&gt;
譯註：你可以創業，或是和別人一起創業，當個共同創辦人，實際創業的經驗會讓你學習到非常多；但是請避免在一家只有兩人的新創公司當員工，因為員工和創辦人是不同的心態，當一家公司還沒有任何規模，而你就只想當一位員工，那對你的履歷沒有加分效果，甚至你要避免在履歷上面出現這種工作經驗。&lt;br /&gt;
譯註：如果你想在優秀的軟體公司工作，儘管現在的公司差強人意，但最好的方法是，當下就開始學習用優秀軟體公司的方法工作，當你成為優秀的軟體開發者，你將有機會進入優秀的公司，或是你的公司被優秀的軟體公司買下，總之你有機會變成一份子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;如何提高求職時的談判能力？（How do I become better at negotiation?）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
（1）記住你不是在求職，不是在展示編程技巧，而是在推銷某種商業需求（增加收入或降低成本）的解決方案。 （2）面試時，要有自信，要平等的對話。你要的是一個互利的錄用合同，不要每次對方提出要求，你都說Yes。 （3）雇主可能會問"你的上一份工資是多少"，他們其實在說"給我一個理由，壓低你的報酬"。你要想好如何適當地回答這個問題。 （4）要還價。這裡不僅僅指錢，還指其它你關心的方面。如果你無法要求更高的薪水，那就試著要求更多的假期。 （5）在對方決定錄用你以後，才開始討論薪水。因為那時，他們已經在你身上，投入了大量的時間和金錢，產生了一定的成本，此時他們可能覺得一些小問題已經不值得再糾纏了，比如每年的工資增加幾千元。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;創業公司是否適合應屆畢業生？（Are startups great for your career as a fresh graduate?）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
如果你一畢業就加入創業公司，最可能的結果是，接下來幾年你都工作得非常辛苦，然後公司悲慘地失敗了，你失業了，不得不又去另一家創業公司工作。 如果你真的想去創業公司，應該首先找一家大公司幹上兩年，攢一點錢，積累一些經驗，然後精心挑選後再去創業公司。 在創業公司工作，一般情況下，你遇到的都是創業者。他們大多​​數人沒有能力在兩年後僱傭你；而在大公司工作，你遇到的都是其他大公司的人，他們中很多人將來有能力僱用你或者幫你介紹工作。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;是否推薦在新創公司工作？（So would you recommend working at a startup? ）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
選擇創業公司，就是選擇一條職業道路，而不是選擇一種生活方式。可惜很多人把這兩者顛倒了，他們推薦創業公司，實際上是在推荐一種你感興趣的生活方式。 如果你確實喜歡這種生活方式，老實說，你在大公司裡也可以得到它們。在許許多多大公司裡，你都有機會鑽研最新的技術，而且還能5點半準時回家照顧孩子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;溝通技能是最重要的職業技能（Your most important professional skill is communication）&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
前面說過，工程師被雇傭，不是因為會編程，而是因為能夠創造商業價值。所以，你讓人們相信你能創造價值，這是幫助你找到工作的最重要的能力。這種能力與你真的能創造多少價值，實際上聯繫不是很緊密。 我認識的一些最優秀的程序員，往往拙於表達。因此，別人不是不想與他們一起工作，就是低估了他們的價值。相反地​​，如果你看上去很會編程，並且很善於表達，別人就會真的這樣看待你。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-4433864640246594955?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7oovtBB8ZECEuafA3QzLoExKDy4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7oovtBB8ZECEuafA3QzLoExKDy4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7oovtBB8ZECEuafA3QzLoExKDy4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7oovtBB8ZECEuafA3QzLoExKDy4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/9KsNY_b2ZEM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/9KsNY_b2ZEM/9.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2012/01/9.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-2937418202466790193</guid><pubDate>Thu, 12 Jan 2012 02:20:00 +0000</pubDate><atom:updated>2012-01-12T10:20:41.617+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">android開發</category><category domain="http://www.blogger.com/atom/ns#">maven</category><title>使用Maven時出現 Unable to find the mojo 'generate-sources' (or one of its required components) in the plugin 'com.jayway.maven.plugins.android.generation2:android-maven-plugin' 問題</title><description>&lt;div style="text-align: justify;"&gt;
最近在使用Maven來build Spring Android的Sample Project時，在mvn clean install的階段時，會出現&lt;b&gt;&lt;span style="color: red;"&gt;Unable to find the mojo 'generate-sources' (or one of its required components) in the plugin 'com.jayway.maven.plugins.android.generation2:android-maven-plugin'&lt;/span&gt;&lt;/b&gt;這樣的問題。&lt;/div&gt;
&lt;br /&gt;

第一個問題是，Spring Android的Sample Project需要使用Maven3.0.3以上，請參考&lt;a href="http://code.google.com/p/maven-android-plugin/issues/detail?id=220#c0"&gt;issue220&lt;/a&gt;。

&lt;br /&gt;
&lt;br /&gt;
接著，當你在使用maven 3去install時，如果出現java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher的錯誤，請先檢查原本的作業系統中，是否有安裝maven2，如果有，要去環境變數中，把相關的path給拿掉，如果有設定M2_HOME，也要一併移除。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-2937418202466790193?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7BZc_hfCmCezvL6mgJPUtp8eo1I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7BZc_hfCmCezvL6mgJPUtp8eo1I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7BZc_hfCmCezvL6mgJPUtp8eo1I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7BZc_hfCmCezvL6mgJPUtp8eo1I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/XGbw3EPHSkw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/XGbw3EPHSkw/maven-unable-to-find-mojo-generate.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2012/01/maven-unable-to-find-mojo-generate.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-2193427075296023626</guid><pubDate>Thu, 05 Jan 2012 01:58:00 +0000</pubDate><atom:updated>2012-01-05T09:58:28.168+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">網路應用</category><category domain="http://www.blogger.com/atom/ns#">網路服務</category><category domain="http://www.blogger.com/atom/ns#">網站</category><category domain="http://www.blogger.com/atom/ns#">youtube</category><title>Youtube影片連續撥放服務</title><description>在&lt;a href="http://blog.longwin.com.tw/"&gt;Tsung's Blog&lt;/a&gt;的這篇文章中看到了兩個可以連續撥放Youtube影片的服務，覺得還不錯，另外還有一個叫作&lt;a href="http://www.youtube.com/disco"&gt;Youtube Disco&lt;/a&gt;的網站，是由Youtube自己本身提供連續撥放影片的服務。
&lt;br /&gt;
&lt;br /&gt;
大家有興趣可以到以下這三個服務去試試看，還蠻簡單方便使用的：
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tubalr.com/"&gt;&lt;b&gt;tubalr&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://showmenonstop.com/"&gt;&lt;b&gt;SHOW ME x NON-STOP&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/disco"&gt;&lt;b&gt;Youtube Disco&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
【相關閱讀】
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blog.longwin.com.tw/2012/01/favorite-youtube-mtv-player-2012/"&gt;好站 - 搜尋 YouTube MV 並自動播放&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-2193427075296023626?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2Y0SE8d0oqnCh9-U_uDAS7NKDAA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2Y0SE8d0oqnCh9-U_uDAS7NKDAA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2Y0SE8d0oqnCh9-U_uDAS7NKDAA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2Y0SE8d0oqnCh9-U_uDAS7NKDAA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/KA1nA_BoT94" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/KA1nA_BoT94/youtube.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2012/01/youtube.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-1215608210896750039</guid><pubDate>Tue, 03 Jan 2012 10:16:00 +0000</pubDate><atom:updated>2012-01-03T18:16:00.115+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">UML</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">物件導向</category><category domain="http://www.blogger.com/atom/ns#">軟體工程</category><title>UML類別圖中的聚合(aggregation)與組合(composition)關係</title><description>在UML類別之間的關係當中，聚合(aggregation)和組合(composition)的區別讓我一開始很疑惑，後來查了些資料後，比較可以分得出這兩個的差別。

&lt;br /&gt;
&lt;br /&gt;
Aggregation和Composition都是&lt;b&gt;&lt;span style="color: red;"&gt;表達一個物件包含另外一個物件的關係(has-a)&lt;/span&gt;&lt;/b&gt;。比如說：一個公司包含一些員工、一艘船中包含幾個引擎、一個飛機場中包含數架飛機等等。

&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="color: blue; font-size: x-large;"&gt;Aggregation&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Aggregation是Association的一個特例(specialization)，用來表達兩個物件之【整體和部分(whole-part)】的關係。當B物件與A物件之間是Aggregation的關係時，代表A物件消失時，B物件還可以給C物件繼續使用。

&lt;br /&gt;
&lt;br /&gt;
舉例來說，機場與飛機之間的關係就是Aggregation。A機場裡面會有很多台飛機，當A機場不再存在時，裡面的飛機還可以屬於(停靠在)C機場，不會因為A機場消失了，本來停靠的飛機也跟著消失。

&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="color: blue; font-size: x-large;"&gt;Composition&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Composition所表達的是更進一步的aggregation。除了代表兩個物件之間的whole-part關係之外，還代表這兩個物件之間是&lt;b&gt;&lt;span style="color: red;"&gt;有相同的生命周期(life-cycle)&lt;/span&gt;&lt;/b&gt;。白話一點的說，若是B物件與A物件之間是composition的關係時，代表當A物件消失的時候，B物件也要跟著消失。

&lt;br /&gt;
&lt;br /&gt;
舉例來說，一個員工和員工薪資資料就是composition的關係，當A員工離職後，它所對應的員工薪資資料也會跟著無效。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-1215608210896750039?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qxFLiCtAYWGlCtVvcgXFixta2-o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qxFLiCtAYWGlCtVvcgXFixta2-o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qxFLiCtAYWGlCtVvcgXFixta2-o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qxFLiCtAYWGlCtVvcgXFixta2-o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/It6Ie6_ADOo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/It6Ie6_ADOo/umlaggregationcomposition.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2012/01/umlaggregationcomposition.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-3798562027221332165</guid><pubDate>Wed, 28 Dec 2011 02:15:00 +0000</pubDate><atom:updated>2011-12-28T16:24:29.664+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">android開發</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><title>Android的Activity學習筆記</title><description>&lt;div style="text-align: justify;"&gt;
在開發Android的Mobile Application當中，Activity是相當重要的一個觀念。這一篇紀錄著我學習Activity相關的筆記，也歡迎大家留言討論。

&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
一個Activity在Android中，代表著一個和使用者互動的介面視窗。一般來說，&lt;span style="color: red;"&gt;一個application會包含數個activities&lt;/span&gt;，比如說一個電子郵件的app，可能就有撰寫新郵件、閱讀信件、顯示新郵件等不同的Activities。

&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
當一個application啟動的時候，使用者會看到一個主要的activity，這一個activity可以去呼叫其他的activity已達到不同的目的。每當一個新的activity啟動時，前一個activity的狀態就會變成停止(stopped)，Android會把停止的activity放到"堆疊(back stack)"中，同時，Android會遵守【&lt;span style="color: red;"&gt;後進先出(Last in, First out)&lt;/span&gt;】的規則，當你在目前的activity作完處理後，要回到前一個activity，Android就會把最後進到stack中的activity給resume給使用者。

&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
在Activity的生命週期(Lifecycle)中，有很多不同的狀態，每個狀態都有對應的callback方法，你在不同的狀態可以呼叫對應的callback方法來處理這個狀態應該做的事情。比如說在stopped狀態時就會去試放database connection object，而在resumes的時候會去取得應該得到的resource。

&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Activity的生命週期可以參考官方網站的一張圖表，長方形的是各種callback method，有顏色的是實際的狀態：

&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://developer.android.com/images/activity_lifecycle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="711" src="http://developer.android.com/images/activity_lifecycle.png" width="545" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Create Activity
&lt;/span&gt;&lt;/b&gt;

&lt;br /&gt;
&lt;br /&gt;
要建立activity，你的類別必須要去繼承&lt;a href="http://developer.android.com/reference/android/app/Activity.html"&gt;Activity類別&lt;/a&gt;。接著在這個activity類別中，有一些callback methods要去實作，讓activity轉換到該狀態時知道要做些什麼事情。
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;onCreate()：用來初始化必要的物件，同時使用setContentView()方法來設定畫面。&lt;/li&gt;
&lt;li&gt;onPause()：這個階段表示目前這個activity到背景(background)了，使用者暫時或永久離開你的activity，因為你不知道使用者會不會回來，所以要做user data persistent。&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
要特別注意的是，當你去Override這些callback methods時，要記得去呼叫父類別對應的methods。比如說super.onPause()
&lt;br /&gt;
&lt;br /&gt;
【相關閱讀】

&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://developer.android.com/guide/topics/fundamentals/activities.html"&gt;Android Develop Guide - Activity&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://cw1057.blogspot.com/2011/05/android-activity.html"&gt;Android Activity筆記&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://stenlyho.blogspot.com/2008/09/activity.html"&gt;Android 生命週期簡介&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-3798562027221332165?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CYkHwQYFSK4sYCR6jbveoau4XeU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CYkHwQYFSK4sYCR6jbveoau4XeU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CYkHwQYFSK4sYCR6jbveoau4XeU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CYkHwQYFSK4sYCR6jbveoau4XeU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/7kybvyqayTI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/7kybvyqayTI/androidactivity.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/12/androidactivity.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-1177891267980960831</guid><pubDate>Fri, 16 Dec 2011 15:11:00 +0000</pubDate><atom:updated>2011-12-29T14:09:52.564+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式語言</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">物件導向</category><category domain="http://www.blogger.com/atom/ns#">軟體工程</category><title>低耦合(Low-Coupling)與高內聚力(High Cohesion)的設計原則</title><description>物件導向設計有一個很重要的原則就是盡量達到低耦合(Low-Coupling)與高內聚力(High-Cohesion)的結果。最近看到一篇文叫作&lt;a href="http://javadepend.wordpress.com/2011/12/12/two-poweful-principles-to-improve-the-design/"&gt;【Two powerful principles to improve the design】&lt;/a&gt;的文章用很簡潔的方式介紹了這樣設計的好處。&lt;br /&gt;

&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;

假設我們的需求有三個：&lt;br /&gt;

&lt;br /&gt;
1.Get Data from a file&lt;br /&gt;
2.Process&lt;br /&gt;
3.Print Result&lt;br /&gt;
&lt;br /&gt;

一開始的設計是這樣，我們在一個類別中，透過Main方法去呼叫DataProcessor方法，分別做這三件事情，一切就結束了。 &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://javadepend.files.wordpress.com/2011/12/refact3.png?w=600" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://javadepend.files.wordpress.com/2011/12/refact3.png?w=600" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
但是這樣的設計有幾個缺點：&lt;br /&gt;
&lt;br /&gt;
1.Low Cohesion：DataProcessor做了太多了事情，所以我們沒辦法把它抽出來給別的類別使用。&lt;br /&gt;
2.High Coupling：這樣的設計，處理的過程很依賴於如何取得data。&lt;br /&gt;
&lt;br /&gt;
顯然這樣設計雖然很直覺，但是對於重用、避免重複造輪子來說並不是一個漂亮的作法，因此我們需要來從High Cohesion和Low Coupling這兩個角度來重新思考。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;High Cohesion：為了達到高的內聚力，我們每個類別所作的事情應該要很明確。在這裡我們需要建立三個類別：&lt;/li&gt;
&lt;br /&gt;
1.FileProvider：負責取得資料&lt;br /&gt;
2.DataProcessing：負責處理資料的邏輯&lt;br /&gt;
3.ResultReporter：負責將處理的結果呈現出來&lt;br /&gt;
&lt;br /&gt;
&lt;/ul&gt;
如此一來每個類別的責任就很清楚，未來如果取得資料的方法不是從檔案而是從資料庫，我們也只需要修改FileProvider那隻程式就好了。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Low Coupling： 一開始我們的設計會相當依賴如何取得data這個方法，為了要降低依賴程度，我們定義一個叫做IDataProvider的interface，這個interface裡面有一個getData的方法，但我們都知道interface不需要提供實作，因此，當我們需要從從檔案中取得data時，只要寫一個FileDataProvider去實作IDataProvider這個interface，並且將取檔案的邏輯寫好就可以了。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://javadepend.files.wordpress.com/2011/12/interfaces3.png?w=600" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://javadepend.files.wordpress.com/2011/12/interfaces3.png?w=600" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
同樣的邏輯可以用在DataProcessing和ResultReporter這兩個類別上，因此，我們的設計就會變成如下圖所示：&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://javadepend.files.wordpress.com/2011/12/refact31.png?w=600" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://javadepend.files.wordpress.com/2011/12/refact31.png?w=600" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
看起來不錯，但好還可以更好。在上面的設計中，IDataProvider、IDataProcessor和IReportResult這三個物件的instance都是由Main方法來產生的。&lt;br /&gt;
&lt;br /&gt;
為了提高內聚力，我們可以把物件產生instance的工作交給一個factory class來處理(可以參考factory design pattern)。接著，我們把啟動工作的責任交給一個Controller Class來處理，如此一來，如果我們這些程序要被其他的程式使用，就可以比較容易的移轉過去，不會被Main給綁死。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://javadepend.files.wordpress.com/2011/12/refact44.png?w=600&amp;amp;h=267" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://javadepend.files.wordpress.com/2011/12/refact44.png?w=600&amp;amp;h=267" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
【相關閱讀】&lt;br /&gt;
&lt;a href="http://javadepend.wordpress.com/2011/12/12/two-poweful-principles-to-improve-the-design/"&gt;Two powerful principles to improve the design&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-1177891267980960831?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JCh2u_0-BZwK-FrNIjl08RGkz3s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JCh2u_0-BZwK-FrNIjl08RGkz3s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JCh2u_0-BZwK-FrNIjl08RGkz3s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JCh2u_0-BZwK-FrNIjl08RGkz3s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/sLKVSc_Pxm4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/sLKVSc_Pxm4/low-couplinghigh-cohesion.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/12/low-couplinghigh-cohesion.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5455339356174514463</guid><pubDate>Sun, 11 Dec 2011 15:38:00 +0000</pubDate><atom:updated>2011-12-11T23:43:18.397+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式設計</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">程式語言</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">j2ee</category><title>J2EE Solutions 比較表</title><description>這個網站收錄了J2EE Open Source各種solutions的比較表，從Presentation、IDE、Web ... 等分門別類整理，還不錯，可以當作一個參考。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-CfF1Zclegl0/TuTPU5RveBI/AAAAAAAARhk/4WGUlCX08U0/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="481" src="http://4.bp.blogspot.com/-CfF1Zclegl0/TuTPU5RveBI/AAAAAAAARhk/4WGUlCX08U0/s640/1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://swik.net/CompareJ2EESolutions"&gt;http://swik.net/CompareJ2EESolutions&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5455339356174514463?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uQJfBwqF5UZkpv1rwYTyiFhILH8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQJfBwqF5UZkpv1rwYTyiFhILH8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uQJfBwqF5UZkpv1rwYTyiFhILH8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQJfBwqF5UZkpv1rwYTyiFhILH8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/KZHIE3kSHW0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/KZHIE3kSHW0/j2ee-solutions.html</link><author>noreply@blogger.com (kevingo Tsai)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-CfF1Zclegl0/TuTPU5RveBI/AAAAAAAARhk/4WGUlCX08U0/s72-c/1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/12/j2ee-solutions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5199815240093084488</guid><pubDate>Tue, 29 Nov 2011 17:10:00 +0000</pubDate><atom:updated>2011-11-30T01:33:01.706+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">Database</category><title>Sharding V.S. Multiple Database</title><description>最近看到一篇文章在討論Database Sharding和Having Multiple Database之間的差異。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
Sharding的基本原則和概念就是把資料進行切割，分別存放在不同的資料庫中。但是怎麼切割就是一門學問，如果我們依照下圖一樣，將資料庫分成：User、Images、Comments，看起來似乎是沒問題，把資料分開在不同的資料庫中儲存，但是，當我們需要取得某個使用者的資料時，這三個資料庫都必須要進行Access。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-DSXS6-GcRNw/TtUSeIz1u7I/AAAAAAAARhY/UZ6Vd4TARVA/s1600/image_thumb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://1.bp.blogspot.com/-DSXS6-GcRNw/TtUSeIz1u7I/AAAAAAAARhY/UZ6Vd4TARVA/s400/image_thumb.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
比較好的作法是如下圖所示，不同的資料庫儲存不同使用者的所有資料，如此一來，當我們需要針對某位使用者進行存取時，只要針對單一資料庫Access即可。一個好的Sharding，會確保相關的資料都被存放在同樣的位置(a good sharding function would make sure that&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt; related information is located on the same server&lt;/b&gt;&lt;/span&gt;)。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-yPoomXl0Z7o/TtUSdlOShEI/AAAAAAAARhU/7cLD5jFZZig/s1600/image_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://2.bp.blogspot.com/-yPoomXl0Z7o/TtUSdlOShEI/AAAAAAAARhU/7cLD5jFZZig/s400/image_4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
【相關閱讀】&lt;br /&gt;
&amp;nbsp;&lt;a href="http://ayende.com/blog/134145/sharding-vs-having-multiple-databases"&gt;Sharding vs. Having multiple databases&amp;nbsp;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5199815240093084488?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JgE5zBbLLz_SSt1HFAoufMRXEAQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JgE5zBbLLz_SSt1HFAoufMRXEAQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JgE5zBbLLz_SSt1HFAoufMRXEAQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JgE5zBbLLz_SSt1HFAoufMRXEAQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/tkSZFgES5ew" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/tkSZFgES5ew/sharding-vs-multiple-database.html</link><author>noreply@blogger.com (kevingo Tsai)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-DSXS6-GcRNw/TtUSeIz1u7I/AAAAAAAARhY/UZ6Vd4TARVA/s72-c/image_thumb.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/11/sharding-vs-multiple-database.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-7912549377643956976</guid><pubDate>Mon, 31 Oct 2011 14:14:00 +0000</pubDate><atom:updated>2011-11-02T02:04:10.121+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">load-balancer</category><category domain="http://www.blogger.com/atom/ns#">apache</category><title>Apache Load-Balancer Load Module Order</title><description>If you want to use Apache web server as load-balancer, you have to load some modules. The order of how to load modules matters. Please follow the order :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;LoadModule proxy_module modules/mod_proxy.so&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LoadModule proxy_http_module modules/mod_proxy_http.so &lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-7912549377643956976?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OTfxxeG6SC1SDA8IzfzAAWBhOYc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OTfxxeG6SC1SDA8IzfzAAWBhOYc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OTfxxeG6SC1SDA8IzfzAAWBhOYc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OTfxxeG6SC1SDA8IzfzAAWBhOYc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/vP5sueecUIo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/vP5sueecUIo/apache-load-balancer-load-module-order.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/apache-load-balancer-load-module-order.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-6389152033251375770</guid><pubDate>Tue, 25 Oct 2011 01:55:00 +0000</pubDate><atom:updated>2011-10-25T09:55:09.292+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">紀錄</category><title>執行MySQL出現ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)錯誤</title><description>代表MySQL服務沒有啟動，請依序執行：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;mysqld --install&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;net start mysql&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-6389152033251375770?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XBlwUZ7DkGIONgYR5lDFRVS-60I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XBlwUZ7DkGIONgYR5lDFRVS-60I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XBlwUZ7DkGIONgYR5lDFRVS-60I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XBlwUZ7DkGIONgYR5lDFRVS-60I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/THpLmkGpums" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/THpLmkGpums/mysqlerror-2003-hy000-cant-connect-to.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/mysqlerror-2003-hy000-cant-connect-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5319682440967656790</guid><pubDate>Fri, 21 Oct 2011 15:50:00 +0000</pubDate><atom:updated>2011-10-21T23:50:52.313+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">書籍</category><category domain="http://www.blogger.com/atom/ns#">創業</category><category domain="http://www.blogger.com/atom/ns#">觀察</category><category domain="http://www.blogger.com/atom/ns#">紀錄</category><title>我讀【科技CEO的創新X創業學】- Sabeer Bhatia, Hotmail 共同創辦人</title><description>&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red; font-size: x-large;"&gt;&lt;b&gt;章節：&amp;nbsp;Sabeer Bhatia, Hotmail 共同創辦人&lt;/b&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;他們的確會抄襲我們的想法，如果他們把這個創意告訴Netscape會如何呢？或者再把這個創意告訴其他人？你必須了解，那時候我們一無所有，有的只是創意。&lt;/li&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;li&gt;其中很多人還說：可是你們太年輕了，你們有沒有管理經驗啊？我們回答：沒有。我們是兩個年輕人，但是我們有偉大的構想。&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;如果創投公司沒有因為那些無聊理由拒絕我們，並且說：好，我們不在意你們的年齡，也不在意你們沒有管理經驗。那就證明他們通過我們的嚴格考驗，只有在此時，我們才會把Hotmail的想法與他們分享。&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;如果有很好的產品，網路上口耳相傳的速度會像野火一樣快，你之需要一間小公關公司就可以搞定了。&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;一想到賺錢，人們就會想到那些惹人厭的廣告，這是當時廣告公司給人的負面印象。這也是為什麼市場上曾經有25家搜尋引擎公司，只有兩或三家存活，其他早就陣亡了。因為他們把首頁弄得像拉斯維加斯賭場，而不是像Google一樣簡單清爽的介面。&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;當你陷於動彈不得的窘境，就必須有所抉擇，以便排除障礙繼續前進。&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;好消息是很多人認為：我無法確定能以瀏覽器收發電子郵件，電子郵件最好還是透過Outlook Express這類軟體，不應該透過瀏覽器。雅虎公司的楊致遠(Jerry Yang)就是這麼說的。聽到這些，我們大呼：太棒了！&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;/ul&gt;
&lt;span class="Apple-style-span" style="color: red; font-size: x-large;"&gt;&lt;b&gt;心得：&lt;/b&gt;&lt;/span&gt;

&lt;br /&gt;
&lt;ul&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;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5319682440967656790?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xofOS3t3yB8iwRc3VM-uzTXC2fA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xofOS3t3yB8iwRc3VM-uzTXC2fA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xofOS3t3yB8iwRc3VM-uzTXC2fA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xofOS3t3yB8iwRc3VM-uzTXC2fA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/k9bN6rgEKig" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/k9bN6rgEKig/ceox-sabeer-bhatia-hotmail.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/ceox-sabeer-bhatia-hotmail.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5798954102561837310</guid><pubDate>Thu, 20 Oct 2011 16:36:00 +0000</pubDate><atom:updated>2011-10-21T00:39:14.390+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">書籍</category><category domain="http://www.blogger.com/atom/ns#">創業</category><category domain="http://www.blogger.com/atom/ns#">觀察</category><category domain="http://www.blogger.com/atom/ns#">紀錄</category><title>我讀【科技CEO的創新X創業學】- Max Levchin, PayPal 共同創辦人</title><description>&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red; font-size: x-large;"&gt;&lt;b&gt;章節：01 - Max Levchin PayPal 共同創辦人&lt;/b&gt;&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;這種軟體真的很酷，數學運算上非常複雜，安全性也很高，但遺憾的是，沒有人需要。&lt;/li&gt;
&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&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;當我們被ebay收購，ebay的規模是我們的三倍，它的企業文化更少。當公司逐漸壯大，則需要更周延組織架構，更多協調和會議。&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;/ul&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red; font-size: x-large;"&gt;心得：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PayPal的創辦人Max找到了一個好的合作夥伴 Peter，負責幫他處理對外的所有大小事務，他自己本身則專注在於核心的技術上。&lt;/li&gt;
&lt;li&gt;Max和Peter並不是一開始就決定好一個既有的方向，而是掌握核心技術，隨時調整策略。光是商業計劃書就寫了六份，最後一份才是PayPal。&lt;/li&gt;
&lt;li&gt;強調好的團隊的重要性。&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5798954102561837310?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rglz8unUqc2xbgy8uunQLXEOD8s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rglz8unUqc2xbgy8uunQLXEOD8s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rglz8unUqc2xbgy8uunQLXEOD8s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rglz8unUqc2xbgy8uunQLXEOD8s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/BejpPp0WsJ4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/BejpPp0WsJ4/ceox-max-levchin-paypal.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/ceox-max-levchin-paypal.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5924884901583916679</guid><pubDate>Thu, 20 Oct 2011 15:59:00 +0000</pubDate><atom:updated>2011-10-21T08:09:32.494+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">書籍</category><category domain="http://www.blogger.com/atom/ns#">創業</category><category domain="http://www.blogger.com/atom/ns#">觀察</category><category domain="http://www.blogger.com/atom/ns#">紀錄</category><title>我讀【科技CEO的創新X創業學】- 引言</title><description>最近買了一本書，叫作【科技CEO的創新X創業學】，以下的文章會針對每一篇進行佳句摘要和記錄，一方面加深印象，一方面也分享給大家，希望我們能夠一起從中得到些許啟發。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red; font-size: x-large;"&gt;章節：引言&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;短跑選手在離開起跑點達到最高速度的時候，就會開始慢慢減速，而冠軍通常都是減速程度最小的人，大多數創業者也是如此，最有生產力的階段通常是在剛開始的時候。&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;我認為在工作中普遍存在一條準則-工作表現上投注越少精力的人，越會做表面功夫來彌補。&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;事實上，程式設計師絕對不可能在上班時間穿著整齊、乖乖坐在座位上、桌面整理乾淨，他們通常還不修邊幅(我曾經因為寫程式時只圍一條毛巾而臭名遠播)，凌晨兩點還待在像垃圾堆一樣的辦公室。&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;如果能讓新創公司看起來更企業化，而大公司試著像新創公司一樣丟開包袱，未嘗不是兩全其美。&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5924884901583916679?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_6ZVRL4VLds3G2KFWNR1Yt8TNqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_6ZVRL4VLds3G2KFWNR1Yt8TNqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_6ZVRL4VLds3G2KFWNR1Yt8TNqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_6ZVRL4VLds3G2KFWNR1Yt8TNqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/rCRZw8fB9IU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/rCRZw8fB9IU/ceox.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>2</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/ceox.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-6116135584170935929</guid><pubDate>Tue, 11 Oct 2011 04:48:00 +0000</pubDate><atom:updated>2011-10-11T23:02:43.423+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">閒聊</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">心情</category><category domain="http://www.blogger.com/atom/ns#">紀錄</category><title>Steve Jobs changed from Signal vs. Noise</title><description>看了好多大家緬懷Steve Jobs的文章和報導，印象最深刻也最喜歡的是在Signal v.s. Noise部落格中的這一篇&lt;a href="http://37signals.com/svn/posts/3021-steve-jobs-changed"&gt;【Steve Jobs changed】&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://37signals.com/svn/posts/3021-steve-jobs-changed"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;He changed computers.&lt;br /&gt;
He changed software.&lt;br /&gt;
He changed design.&lt;br /&gt;
He changed publishing.&lt;br /&gt;
He changed film.&lt;br /&gt;
He changed music.&lt;br /&gt;
He changed advertising.&lt;br /&gt;
He changed retail.&lt;br /&gt;
He changed business.&lt;br /&gt;
&lt;br /&gt;
He changed beige.&lt;br /&gt;
&lt;br /&gt;
He changed expectations.&lt;br /&gt;
He changed our minds.&lt;br /&gt;
&lt;br /&gt;
He changed them.&lt;br /&gt;
He changed us.&lt;br /&gt;
He changed you.&lt;br /&gt;
&lt;br /&gt;
“Don’t be sad because it’s over. Smile because it happened.” – Dr. Seuss&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Now what are you going to change?&lt;/span&gt;&lt;/b&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;
他改變了零售&lt;br /&gt;
他改變了商業&lt;br /&gt;
&lt;br /&gt;
他改變了米色 (*1)&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;
"不要因為結束而悲傷。因為種種的發生而微笑吧。" - Seuss博士&lt;br /&gt;
&lt;br /&gt;
現在，你準備去改變什麼呢？&lt;br /&gt;
&lt;br /&gt;
*1：據說Steve Jobs在提出Apple II構想時，找了上千種的米色，但是都不滿意，後來他創造了屬於自己的蘋果米色，並且提出專利。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-6116135584170935929?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rVaxaJ8DsXnwAxvxPl1nEFHn1dg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rVaxaJ8DsXnwAxvxPl1nEFHn1dg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rVaxaJ8DsXnwAxvxPl1nEFHn1dg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rVaxaJ8DsXnwAxvxPl1nEFHn1dg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/Rk5f74b6apQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/Rk5f74b6apQ/steve-jobs-changed-from-signal-vs-noise.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/steve-jobs-changed-from-signal-vs-noise.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5175834244024217077</guid><pubDate>Sun, 09 Oct 2011 12:53:00 +0000</pubDate><atom:updated>2011-10-11T13:00:12.414+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">程式語言</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">spring framework</category><title>Spring Social 介紹</title><description>Spring Social 是最近Spring Project中所提供的一個Framework，它讓使用者可以把你原有的Spring Application和Thrid-Party Service Provide(ex : facebook, twitter)做整合，讓你用這些SaaS來認證，操作其API...等等。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;b&gt;Spring Social的特點&lt;/b&gt;&lt;/h2&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Connect Framework - 處理和Service Provider之間的認證和服務流程&lt;/li&gt;
&lt;li&gt;Connect Controller - 處理和Service Provider、Service Consumer和User之間的OAuth交換&lt;/li&gt;
&lt;li&gt;Signin Controller - 讓Users可以透過Service Provider來Signin到自己的application&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
在使用Spring Social時，你會需要以下的dependencies：&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1273647.js"&gt;
 
&lt;/script&gt;&lt;br /&gt;
此外，Spring Social還提供了許多Service Providers的Module讓你直接調用：&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-y4B1R414SKU/TpGXf1dhNvI/AAAAAAAAQGk/jjtJ3MvBMfM/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://4.bp.blogspot.com/-y4B1R414SKU/TpGXf1dhNvI/AAAAAAAAQGk/jjtJ3MvBMfM/s640/1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
在使用Spring Social時，需要的相關環境為&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Java 1.5 or higher&lt;/li&gt;
&lt;li&gt;Java Servlet 2.5 or higher&lt;/li&gt;
&lt;li&gt;Tomcat 6+&lt;/li&gt;
&lt;li&gt;Spring Framework 3.0.5 or higher ( Spring Framework 3.1 is recommended )&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
如果你想要看個DEMO，Spring Social也提供了DEMO Project可以下載：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Spring Social Showcase：&lt;a href="https://github.com/SpringSource/spring-social-samples/tree/master/spring-social-showcase"&gt;https://github.com/SpringSource/spring-social-samples/tree/master/spring-social-showcase&lt;/a&gt;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;下載之後，用Maven build起來，把war放到tomcat或其它的Web server就可以用以下的網址來啟動了：&lt;a href="http://localhost:8080/spring-social-showcase"&gt;http://localhost:8080/spring-social-showcase&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
【參考資料】&lt;br /&gt;
&lt;a href="http://static.springsource.org/spring-social/docs/1.0.x/reference/html/overview.html#table-spring-social-client-modules"&gt;Spring Social Overview&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5175834244024217077?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q1KoFYNybzzpvDaHUBtlzIAGlvY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q1KoFYNybzzpvDaHUBtlzIAGlvY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q1KoFYNybzzpvDaHUBtlzIAGlvY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q1KoFYNybzzpvDaHUBtlzIAGlvY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/WeN2HE5hV8E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/WeN2HE5hV8E/spring-social.html</link><author>noreply@blogger.com (kevingo Tsai)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-y4B1R414SKU/TpGXf1dhNvI/AAAAAAAAQGk/jjtJ3MvBMfM/s72-c/1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/spring-social.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5385613128804320550</guid><pubDate>Wed, 05 Oct 2011 01:51:00 +0000</pubDate><atom:updated>2011-10-05T09:51:25.361+08:00</atom:updated><title>Design Restful Web Service - Use SpringMVC as Example</title><description>最近公在公司的讀書會分享了REST的概念，花了些時間做了投影片，以及用SpringMVC做了一個小小的範例，對於REST的架構有了初步的認識，也釐清了一些觀念，把投影片分享出來，希望對於需要的人會有些幫助。&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id="__ss_9544665" style="width: 425px;"&gt;
&lt;strong style="display: block; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 12px; text-align: center;"&gt;&lt;a href="http://www.slideshare.net/kevingo/design-restful-web-service-use-springmvc-as-example" target="_blank" title="Design Restful Web Service, use SpringMVC as Example"&gt;Design Restful Web Service, use SpringMVC as Example&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9544665" width="425"&gt;&lt;/iframe&gt;&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;
&lt;div style="text-align: center;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/kevingo" target="_blank"&gt;kevingo&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5385613128804320550?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q8mebdYEt70dDRrD0VSvo6s9NZA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q8mebdYEt70dDRrD0VSvo6s9NZA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q8mebdYEt70dDRrD0VSvo6s9NZA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q8mebdYEt70dDRrD0VSvo6s9NZA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/ufOn4eAK8xs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/ufOn4eAK8xs/design-restful-web-service-use.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/10/design-restful-web-service-use.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-3444526786668465335</guid><pubDate>Wed, 28 Sep 2011 09:53:00 +0000</pubDate><atom:updated>2011-09-28T17:53:46.505+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu 10.04 安裝 Sun JDK 步驟</title><description>&lt;span style="color: #555555; font-family: tahoma Trebuchet MS, lucida, helvetica, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li style="line-height: 20px;"&gt;sudo add-apt-repository "deb &lt;a href="http://archive.canonical.com/"&gt;http://archive.canonical.com/&lt;/a&gt; lucid partner"&lt;/li&gt;
&lt;li style="line-height: 20px;"&gt;sudo aptitude update&lt;/li&gt;
&lt;li style="line-height: 20px;"&gt;sudo aptitude install sun-java6-jdk&amp;nbsp;sun-java6-plugin&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-3444526786668465335?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hfanzgsjNQ4yT6WPOUIspN1Eyu8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hfanzgsjNQ4yT6WPOUIspN1Eyu8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hfanzgsjNQ4yT6WPOUIspN1Eyu8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hfanzgsjNQ4yT6WPOUIspN1Eyu8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/0qf7uF1Jj3g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/0qf7uF1Jj3g/ubuntu-1004-sun-jdk.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/09/ubuntu-1004-sun-jdk.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-5524454210083329270</guid><pubDate>Sun, 18 Sep 2011 16:12:00 +0000</pubDate><atom:updated>2011-10-03T22:02:51.837+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式設計</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">電影</category><title>使用Java自動化執行工作 - Timer 和 ScheduledExecutorService</title><description>在Java中，如果想要在給定的時間區隔或固定時間執行某些任務，有幾種方法，在這裡稍微做個筆記。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;1. 使用Timer + TimerTask &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
在主程式中，Timer會使用schedule方法來安排想要執行的工作和執行的時間區隔，而需要被執行的工作(類別)只需要去繼承TimerTask類別，同時覆寫run方法即可。&lt;br /&gt;
&lt;br /&gt;
TimerTask是想要被執行的工作類別，繼承TimerTask類別，同時將想要被執行的工作寫在run方法中：&lt;br /&gt;
&amp;nbsp;&lt;code&gt;&lt;span style="font-size: large;"&gt;import java.util.Date;&lt;br /&gt;import java.util.TimerTask;&lt;br /&gt;&lt;br /&gt;public class TimeTask extends TimerTask{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void run() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("my job : " + new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
而在主程式中，則是利用Timer類別的schedule方法來安排執行時間區隔： &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="font-size: large;"&gt;import java.util.Timer;&lt;br /&gt;&lt;br /&gt;public class TimerTest{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static void main(String [] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Timer timer = new Timer();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long delayTime = 1 * 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long period = 2 * 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;timer.schedule(new TimeTask(), delayTime, period);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
在schedule方法中給定三個參數第一個代表欲執行的工作，第二個參數代表在第一次執行工作前先延遲多久時間，第三個參數代表每間隔多少時間執行一次工作。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;2. 使用ScheduledExecutorService&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
上面的Timer方法的一個缺點就是它是以Single Thread的方式來處理任務，如果你需要數個執行緒來同時執行不同任務時，Timer就不是這麼適合，這時候Java提供另外一種類別 - ScheduledExecutorService。 &lt;/div&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="font-size: large;"&gt;public class MyJob implements Runnable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String jobName = "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyJob(String name) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.jobName = name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void run() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(jobName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="font-size: large;"&gt;import java.util.concurrent.Executors;&lt;br /&gt;import java.util.concurrent.ScheduledExecutorService;&lt;br /&gt;import java.util.concurrent.TimeUnit;&lt;br /&gt;&lt;br /&gt;public class ScheduledExecutorTest {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String [] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ScheduledExecutorService service = Executors.newScheduledThreadPool(2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; service.scheduleAtFixedRate(new MyJob("job1"), 1, 1, TimeUnit.SECONDS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; service.scheduleAtFixedRate(new MyJob("job2"), 1, 1, TimeUnit.SECONDS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
在上面的例子中，在我們想要被執行的任務類別(MyJob)中，去實作Runnable介面，將任務放在Run方法中。主程式當中， 我們利用newScheduledThreadPool方法來建立ThreadPool，並把它指派給ScheduledExecutorService的instance，最後利用scheduleAtFixedRate方法，傳入四個參數，分別是：欲執行的類別、第一次執行前要delay的時間、每次執行的時間間隔、時間單位。&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
要特別注意的是，想要被ScheduleAtFixRate方法所呼叫的欲執行類別都必須要&lt;b style="color: red;"&gt;實作Runnable介面&lt;/b&gt;。這一點可以由 ScheduledExecutorService的API中得知。&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-5524454210083329270?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/whQ0EgRs_xN2np-Pa1-AgxxGAuw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/whQ0EgRs_xN2np-Pa1-AgxxGAuw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/whQ0EgRs_xN2np-Pa1-AgxxGAuw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/whQ0EgRs_xN2np-Pa1-AgxxGAuw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/GFT3oKVnEzU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/GFT3oKVnEzU/java-timer-scheduledexecutorservice.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>1</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/09/java-timer-scheduledexecutorservice.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-458408205911402115</guid><pubDate>Tue, 06 Sep 2011 14:17:00 +0000</pubDate><atom:updated>2011-09-12T22:19:37.577+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式設計</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">程式語言</category><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">maven</category><title>Maven 之 POM(Project Object Model) 設定檔</title><description>在Maven中，最重要也是最基本的就是POM(Project Object Model)了。POM是一個XML的設定檔，它包含了Maven在建置專案時的所有資訊。&lt;br /&gt;
&lt;br /&gt;
在執行Maven時，它會去檢查專案目錄下是某具有pom.xml檔案，如果沒有時，任何操作都會出現build error。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
在一個pom.xml設定檔中，最少需要有以下五個元素：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;project root：專案的根目錄&lt;/li&gt;
&lt;li&gt;modelVersion：代表目前使用的POM版本，在maven 2.x中，一定要設定為4.0.0&lt;/li&gt;
&lt;li&gt;groupId：代表目前專案所屬組織的ID。這個groupId的設定不一定要用.隔開，事實上也不一定要是你的package宣告，只是目前大家都這樣用，當你使用com.kevingo的id宣告，maven會產生com/kevingo這樣的目錄結構。詳細可參考：http://maven.apache.org/pom.html&lt;/li&gt;
&lt;li&gt;artifactId：代表這個組織下的產品名稱，通常會設定為專案名稱&lt;/li&gt;
&lt;li&gt;version：專案的版本&lt;/li&gt;
&lt;li&gt;packaging：打包專案時種類，這個元素不一定要寫，沒有設定時，預設會將專案包成jar。而Maven目前支援的種類有：pom, jar, maven-plugin, ejb, war, ear, rar, par.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
整個pom.xml會長的類似像這樣&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;modelversion&amp;gt;4.0.0&amp;lt;/modelversion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupid&amp;gt;com.kevingo&amp;lt;/groupid&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactid&amp;gt;my-project&amp;lt;/artifactid&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
當少了其中的某個元素時，會出現類似以下的error：&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-u2MDmd5M4VI/TmYvXSfdlSI/AAAAAAAAP_w/6qrKCVJ2q74/s1600/2.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5649254859730162978" src="http://3.bp.blogspot.com/-u2MDmd5M4VI/TmYvXSfdlSI/AAAAAAAAP_w/6qrKCVJ2q74/s800/2.png" style="cursor: hand; cursor: pointer; display: block; height: 402px; margin: 0px auto 10px; text-align: center; width: 600px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
整個專案的名稱是這樣命名的：groupId:artifactId:packaging:version，就上面的例子而言，完整的專案名稱會是：com.kevingo:my-project:jar:1.0&lt;br /&gt;
&lt;br /&gt;
在POM檔中，除了以上的幾個必要元素外，還有一些是經常會用到的元素，包括：&lt;br /&gt;
&lt;br /&gt;
dependencies：宣告了專案中所有會需要用到的Libraries，每一個所引入的Library，都會用一個dependency元素所包住，如下所示：&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;4.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;type&amp;gt;jar&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;optional&amp;gt;true&amp;lt;/optional&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;/dependencies&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
上面的範例中在專案裡面引入了一個junit的Library，當你將這段設定檔寫到pom.xml中，Maven就會自動將junit引入。&lt;br /&gt;
&lt;br /&gt;
【相關閱讀】&lt;br /&gt;
&lt;a href="http://maven.apache.org/pom.html#Maven_Coordinates"&gt;POM Reference&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://caterpillar.onlyfun.net/Gossip/JUnit/POM.html"&gt;JUnit Gossip: POM 設定檔&lt;/a&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-458408205911402115?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZstTO0ecyUzUQ9napnNYOdvvRcg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZstTO0ecyUzUQ9napnNYOdvvRcg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZstTO0ecyUzUQ9napnNYOdvvRcg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZstTO0ecyUzUQ9napnNYOdvvRcg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/tNf-lD7YcrM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/tNf-lD7YcrM/maven-pomproject-object-model.html</link><author>noreply@blogger.com (kevingo Tsai)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-u2MDmd5M4VI/TmYvXSfdlSI/AAAAAAAAP_w/6qrKCVJ2q74/s72-c/2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/09/maven-pomproject-object-model.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-1015748521960026512</guid><pubDate>Tue, 06 Sep 2011 12:33:00 +0000</pubDate><atom:updated>2011-09-07T15:13:46.115+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式設計</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">maven</category><category domain="http://www.blogger.com/atom/ns#">軟體工程</category><title>Maven 介紹</title><description>Maven是一套用來管理Java專案的工具，使用Maven，你可以讓專案在建置、測試、管理、部屬等工作上更為輕鬆。同時在管理dependency上，更是會讓你用起來愛不釋手。&lt;br /&gt;
&lt;br /&gt;
我們先透過一個小範例讓大家對Maven的運作有一個初步的了解，在使用它之前，你必須要先安裝好適當的jdk。&lt;br /&gt;
首先，請先下載Maven，在這一篇的操作中，我們已Maven 2.2.1版本為主。&lt;br /&gt;
下載頁面：&lt;a href="http://maven.apache.org/download.html"&gt;http://maven.apache.org/download.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
Windows版本：&lt;a href="http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.1-bin.zip"&gt;http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.1-bin.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
下載解壓縮後，請將其bin目錄設定到系統的path路徑下方便操作。如果你的Maven正確安裝無誤，在命令提示字元下輸入mvn --version指令應該會出現類似以下的訊息：&lt;br /&gt;
&lt;br /&gt;
Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800)&lt;br /&gt;
Java version: 1.6.0_24&lt;br /&gt;
Java home: C:\Program Files\Java\jdk1.6.0_24\jre&lt;br /&gt;
Default locale: zh_TW, platform encoding: MS950&lt;br /&gt;
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows"&lt;br /&gt;
&lt;br /&gt;
在命令提示字元下，輸入以下指令會建立一個專案：&lt;br /&gt;
&lt;code&gt;mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false&lt;/code&gt;
&lt;br /&gt;
接著切換到該目錄下，會看到一個名叫my-app的專案被建立，該專案下會有src目錄和pom.xml檔案。如此一來就利用maven建立了一個專案了。pom.xml檔案的全名叫作【Project Object Model】，它是整個maven的精華，所有的設定檔案都寫在裡面，之後會有一篇來詳細介紹它。
&lt;br /&gt;
預設的目錄會把所有的source code放在src/main/java的目錄下。要compile時，只要切換到該專案下，輸入【mvn package】指令，maven就會去compile你的程式碼，同時根據你的設定，將程式打包成jar或war。預設編譯出來的檔案會放在target的目錄下。
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-1015748521960026512?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fS20NUuM6oEr7vEyrJ8qSQhf7g8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fS20NUuM6oEr7vEyrJ8qSQhf7g8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fS20NUuM6oEr7vEyrJ8qSQhf7g8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fS20NUuM6oEr7vEyrJ8qSQhf7g8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/OyQ9QRRaFKs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/OyQ9QRRaFKs/maven.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/09/maven.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-8150570562969431249</guid><pubDate>Fri, 02 Sep 2011 10:29:00 +0000</pubDate><atom:updated>2011-09-20T09:21:20.089+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">eclipse</category><category domain="http://www.blogger.com/atom/ns#">maven</category><title>Eclipse安裝Maven套件時出現 "Cannot complete the install because one or more required items could not be found." 的解決方法</title><description>最近在Eclipse安裝Maven套件時，會出現這樣的錯誤
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Cannot complete the install because one or more required items could not be found.
  Software being installed: Maven Integration for Eclipse (Required) 0.12.1.20110112-1712 (org.maven.ide.eclipse.feature.feature.group 0.12.1.20110112-1712)
  Missing requirement: Maven Integration for Eclipse (Editors) 0.12.1.20110112-1712 (org.maven.ide.eclipse.editor 0.12.1.20110112-1712) requires 'bundle org.eclipse.zest.core 0.0.0' but it could not be found
  Cannot satisfy dependency:
    From: Maven Integration for Eclipse (Required) 0.12.1.20110112-1712 (org.maven.ide.eclipse.feature.feature.group 0.12.1.20110112-1712)
    To: org.maven.ide.eclipse.editor [0.12.1.20110112-1712]&lt;/blockquote&gt;
&lt;br /&gt;
看起來是缺少一些dependency的套件， 查了一下，只要安裝GEF套件即可，網址在此：&lt;a href="http://download.eclipse.org/tools/gef/updates/releases/"&gt;http://download.eclipse.org/tools/gef/updates/releases/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
另外，Maven的Update Site：&lt;a class="external" href="http://m2eclipse.sonatype.org/sites/m2e" rel="external nofollow" target="_blank" title="http://m2eclipse.sonatype.org/sites/m2e"&gt;http://m2eclipse.sonatype.org/sites/m2e&lt;/a&gt;&lt;br /&gt;
 &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-8150570562969431249?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Epy4amHgSQzSzdCsUaSdirAI8KM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Epy4amHgSQzSzdCsUaSdirAI8KM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Epy4amHgSQzSzdCsUaSdirAI8KM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Epy4amHgSQzSzdCsUaSdirAI8KM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/ie4cfMOj-W8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/ie4cfMOj-W8/eclipsemaven-cannot-complete-install.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/09/eclipsemaven-cannot-complete-install.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-7080990716929607685</guid><pubDate>Tue, 30 Aug 2011 12:57:00 +0000</pubDate><atom:updated>2011-10-09T19:58:38.810+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式設計</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">程式語言</category><category domain="http://www.blogger.com/atom/ns#">XML</category><title>解決jdom輸出時產生無意義(空白)Namespace之問題</title><description>在新版的jdom(我用的時候是1.1)中，使用XMLOutputter來輸出整個XML Document時，在Element上會產生空白內容的Namespace，像是這樣：
&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt; &amp;lt;bean xmlns=""&amp;gt;&amp;lt;/bean&amp;gt;
&lt;/code&gt;
&lt;br /&gt;
不管是呼叫Element的removeNamespaceDeclaration()或是設定NO_NAMESPACE都沒有用，甚至在create element之後呼叫remove attribute()去remove xmlns屬性也不行，這案情不單純阿...。
&lt;br /&gt;
&lt;br /&gt;
後來Google到一篇，裡面說到jdom新版有bug，要去source code裡面解決，不過也沒說是什麼問題，只好自己來啦！好險並不是很困難，原因在於XMLOutputter這支code裡面出了問題，在XMLOutputter中，有一個方法叫printNamespace，裡面原本的code有一段是長這樣：
&lt;br /&gt;&lt;br /&gt;
&lt;script src="https://gist.github.com/1273589.js"&gt; 
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
很明顯有了錯，改成下面這樣就可以了：
&lt;br /&gt;
&lt;script src="https://gist.github.com/1273582.js"&gt;
 &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-7080990716929607685?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dbgJzgS3wz9f9WsjUGea1jxXxds/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dbgJzgS3wz9f9WsjUGea1jxXxds/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dbgJzgS3wz9f9WsjUGea1jxXxds/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dbgJzgS3wz9f9WsjUGea1jxXxds/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/hFojrtMJeto" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/hFojrtMJeto/jdomnamespace.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/08/jdomnamespace.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-6937719685575357626</guid><pubDate>Thu, 25 Aug 2011 07:34:00 +0000</pubDate><atom:updated>2011-08-25T15:39:27.935+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">程式語言</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">linux</category><title>[Shell Script] 用echo將文字以附加(apppend)方式寫入檔案</title><description>在編寫Shell Script時，如果你有echo到某個檔案的需求，你希望寫入檔案時是以附加(append)的方式進行，而不是整個覆蓋的話，你可以使用【&amp;gt;&amp;gt;】來取代【&amp;gt;】：
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;&lt;span style="font-size:130%;"&gt;echo "aaa" &amp;gt;&amp;gt; /home/kevingo/example.txt
&lt;br /&gt;echo "bbb" &amp;gt;&amp;gt; /home/kevingo/example.txt&lt;/span&gt;
&lt;br /&gt;&lt;/code&gt;
&lt;br /&gt;如此一來，example.txt中的內容就會是：
&lt;br /&gt;aaa
&lt;br /&gt;bbb&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-6937719685575357626?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ywcfSccQeFWTQ9XYxtkhXRo-OqY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ywcfSccQeFWTQ9XYxtkhXRo-OqY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ywcfSccQeFWTQ9XYxtkhXRo-OqY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ywcfSccQeFWTQ9XYxtkhXRo-OqY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/ZDrpu75jgxQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/ZDrpu75jgxQ/shell-script-echoapppend.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/08/shell-script-echoapppend.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-2825905412790348331</guid><pubDate>Tue, 23 Aug 2011 01:44:00 +0000</pubDate><atom:updated>2011-08-23T11:12:09.767+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">網路技術</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">網站</category><title>High Availability(HA) 與 Load Balance</title><description>最近在架設Web Server和Database的Cluster，主要的目的在於建構出一個High Availability(HA)的服務環境。
&lt;br /&gt;
&lt;br /&gt;High Availability(HA)指的是提供一個高可靠度的運作環境，以網路服務來說，在Back-End需要的是Web Server Cluster和Database Cluster，目的在於當有任何一個節點crash後，會有其他的節點自動補上。
&lt;br /&gt;
&lt;br /&gt;而Load Balance指的是當使用者的請求(request)進入到Back-End之後，會導入到目前loading比較輕的server，如此一來可以減輕每個server的負擔。
&lt;br /&gt;
&lt;br /&gt;【相關閱讀】
&lt;br /&gt;&lt;a href="http://mirror.ozdiy.com/assets/c1/f15e6675f6b6cc7d60261f39024a68_1247710570.html"&gt;商業服務的Ruby on Rails HTTP Cluster觀念及測試&lt;/a&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-2825905412790348331?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G7eQCpQJuOT30-6CEZW7Eqt2ivE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G7eQCpQJuOT30-6CEZW7Eqt2ivE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G7eQCpQJuOT30-6CEZW7Eqt2ivE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G7eQCpQJuOT30-6CEZW7Eqt2ivE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/qyRsI6-ac8E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/qyRsI6-ac8E/high-availabilityha-load-balance.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/08/high-availabilityha-load-balance.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7587710935479412692.post-7692890810529698457</guid><pubDate>Wed, 17 Aug 2011 15:05:00 +0000</pubDate><atom:updated>2011-08-17T23:28:57.089+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">電腦</category><category domain="http://www.blogger.com/atom/ns#">Database</category><title>MySQL Cluster 之 Data Nodes 與 Node Groups 之間的關係</title><description>在建立MySQL Cluster的時候，data node的數量和其所屬的node group是有相依關係的。從官方的文件中可以得到這樣的關係是
&lt;br /&gt;
&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;li&gt;number of node groups = number of data nodes / NoOfReplicas&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;換句話說，你沒有辦法直接對node groups的數量進行設定，它取決於data nodes的數量和NoOfReplicas這兩個參數。
&lt;br /&gt;
&lt;br /&gt;例如：
&lt;br /&gt;
&lt;br /&gt;假設data nodes = 4
&lt;br /&gt;
&lt;br /&gt;NoOfReplicas = 1 , node groups = 4
&lt;br /&gt;NoOfReplicas = 2 , node groups = 2
&lt;br /&gt;NoOfReplicas = 4 , node groups = 1
&lt;br /&gt;
&lt;br /&gt;data nodes的數量最好是偶數，才能被平均分配到每個group當中。
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7587710935479412692-7692890810529698457?l=kevingo75.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gewOmyGH9jWjfy9ui_NQ5y2979I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gewOmyGH9jWjfy9ui_NQ5y2979I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gewOmyGH9jWjfy9ui_NQ5y2979I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gewOmyGH9jWjfy9ui_NQ5y2979I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/eWOb/~4/Mzl8ZLgwOrU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/blogspot/eWOb/~3/Mzl8ZLgwOrU/mysql-cluster-data-nodes-node-groups.html</link><author>noreply@blogger.com (kevingo Tsai)</author><thr:total>0</thr:total><feedburner:origLink>http://kevingo75.blogspot.com/2011/08/mysql-cluster-data-nodes-node-groups.html</feedburner:origLink></item></channel></rss>

