<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5954870337379690905</id><updated>2012-04-12T00:29:30.319-07:00</updated><category term='c#'/><category term='linux'/><category term='mobile'/><category term='程式'/><category term='思考'/><category term='software'/><category term='軟體'/><category term='研究'/><category term='lib'/><category term='ubuntu'/><category term='blog'/><category term='notebook'/><category term='硬體'/><title type='text'>sevenjay的技術文章</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-849725161361970242</id><published>2011-11-28T01:55:00.001-08:00</published><updated>2011-11-28T02:56:34.048-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='硬體'/><category scheme='http://www.blogger.com/atom/ns#' term='notebook'/><title type='text'>Notebook電池使用習慣</title><content type='html'>&lt;ol&gt; &lt;/ol&gt;一些經驗跟整理別人的觀念&lt;br /&gt;&lt;ol&gt;&lt;li&gt;新電池第一次使用，請參照說明書充電(有的必需12個小時以上，沒有寫的就不用)。 &lt;/li&gt;&lt;li&gt;不要短時間重複充放： &lt;br /&gt;也就是電源常常插拔，這樣對電池的壽命很傷。如果你需要拿著NB在辦公室移動，可在電池量45%以下時再進行完整充電(充飽)。BIOS用電在關機且拔電源線情況下會消耗少許電力，建議短期關機時盡量不要把插頭拔掉以免讓電池形成重複充放電。&lt;br /&gt; &lt;/li&gt;&lt;li&gt;避免過度放電： &lt;br /&gt;所有的電池都會自然放電，過度放電是很傷電池的。所謂的過度放電就是一直用到 0% 斷電後後才充電，基本上用到剩餘 5%-10%就應該充電。習慣NB不裝電池的人，要記得給電池進行放電(使用)後到5%-10%再充飽，以免擺到壞。電池充飽時電壓較高, 低電量時電壓較低. 如常在低電量(=低電壓)狀況下使用, 因機器需較高之電壓下, 從電芯內需"抽取" 較高之電量來支應, 此對電芯較傷, 壽命就會變短。 &lt;/li&gt;&lt;li&gt;避免長時間充飽電： &lt;br /&gt;需長時間關機時(&amp;gt;12小時)，插著電會自然放電，但長時間放電低於臨界值又會在充電，維持在充飽狀態，請記得每次都把變壓器接頭拔掉，或關掉電源，以避免電蕊活性鈍化或結塊。而過度充電，則有些人誤解，以為插著電就是一直在充電，現在的NB都有控管電源，當電池充99%時就會停充，待電池電力''自然消耗''降至94%時才啟動充電。所以插著電池使用不會過度充電，但一樣需避免長時間充飽電。 &lt;/li&gt;&lt;li&gt;盡量不要快速充放電： &lt;br /&gt;慢速充放電較能保障電池壽命。用電池時盡量不要用高效能模式，高效能+高負載運算，造成大量電力於一個小時內放盡這是過速放電，這造成的傷害不下於過度放電。如果長期拿筆電電池的電力來看DVD, 其壽命就會較短。開機充電比關機充電來的穩定,關機充電時前80%可在一個小時內完成,剩下的20%卻要衝一個半至兩個小時，這是因為前段採用大電流高速充電。而開機時充電因為電源供應器必須同時應付，主機 + 電池，所以電池的充電供應會被主機分食，流進電池的電力變成了慢充。 &lt;/li&gt;&lt;li&gt;記得每週至少要放電一次到10%以下： &lt;br /&gt;也就是用到低電量指示後，再充飽進行一個完整的循環。但不必每次電池充飽就只用電池，用完就充，一天來回1-2次cycle，一年下來就 500次以上了，其實如此過度使用，很快就超過電芯的充放次數了。 &lt;/li&gt;&lt;li&gt;若長期不使用電池，應將電池充電或放電至60%保存，並定期取出使用，以保持電池的化學活性，最好約一個月就將電池做一次充放電，然後再充電保存在低溫、乾燥壞境中。 &lt;/li&gt;&lt;li&gt;有些NB可以用軟體藉由韌體來控制充電的臨界值，比如充電至90%停止充電，低於45%才開始充電，不用手動控制變壓器接頭，可以自動延長電池壽命。&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/5954870337379690905-849725161361970242?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/849725161361970242/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2011/11/notebook.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/849725161361970242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/849725161361970242'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2011/11/notebook.html' title='Notebook電池使用習慣'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-7424370176942277858</id><published>2010-11-16T20:19:00.000-08:00</published><updated>2012-04-04T21:21:35.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>exception使用的時機</title><content type='html'>一直以來對於 exception 使用的時機不是很清楚，所以從來沒用過，想說反正也有&lt;a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Exceptions#Exceptions"&gt; google&lt;/a&gt; 跟&lt;a href="http://www.joelonsoftware.com/items/2003/10/13.html" title="Joel"&gt;約爾&lt;/a&gt;等有名大師都說不要用 exception ，所以一直以來都是使用 error code return (或紀錄 error code) 的方式。  但也有人說 exception 不是惡魔，且沒了 exception 就沒有 RAII 這方便的作法。但看了半天 RAII 是跟 exception 綁在一起的嗎？沒有 exception 一樣可以做 RAII ，是沒有 exception 就沒有做 RAII 的理由吧？  exception 可以說是一種 goto ，對於程式流程跟可讀性來說，會造成人腦在run程式的複雜度。我也覺得非必要時候不用 exception 。那何時是非必要時？何時又是使用 exception 的時機呢？  這時就必須了解c+++中常用的處理錯誤方法： &lt;br /&gt;&lt;ul&gt;&lt;li&gt;assert&lt;/li&gt;&lt;li&gt;error code&lt;/li&gt;&lt;li&gt;exception&lt;/li&gt;&lt;/ul&gt;在此不闡述，就我自己的理解思考，使用 exception 時機有 &lt;br /&gt;&lt;ol&gt;&lt;li&gt;用到 STL 或有拋出 exception 的程式，因你無法保證 100%不會有 exception。&lt;/li&gt;&lt;li&gt;簡化程式流程的時候，這在預設執行的各 method/function 都是 99.9%正確時可簡化，遇到不能考慮的錯誤時就是那 0.01%。&lt;/li&gt;&lt;li&gt;子程式不知怎麼處理此錯誤，可能父程式或父父程式以上(最高為使用者)知道如何處理時。&lt;/li&gt;&lt;li&gt;想回傳error code卻不行時。&lt;/li&gt;&lt;/ol&gt;避免濫用 &lt;br /&gt;&lt;ol&gt;&lt;li&gt;不要在同一 scope throw, catch，這很明顯可以用 if else/switch 來解決，但是很多書上都這樣教。&lt;/li&gt;&lt;li&gt;父程式可考慮解決的錯誤可以使用 error code。&lt;/li&gt;&lt;/ol&gt;有時 exception 使用上沒有 error code 來的簡潔，比如說以下這段，你只是要秀錯誤訊息那用 exception 很方便但是要針對錯誤來處理呢？  &lt;br /&gt;&lt;pre class="brush:cpp;"&gt;while (IsSending)&lt;br /&gt;{&lt;br /&gt; try&lt;br /&gt;    {&lt;br /&gt;        foo-&amp;gt;Send(SendData);&lt;br /&gt;        IsSending=false;&lt;br /&gt;        foo-&amp;gt;Save(SendData);&lt;br /&gt;    }&lt;br /&gt;    catch(Exception &amp;amp;e)&lt;br /&gt;    {&lt;br /&gt;        ErrorMsg = e.ClassName() + ":" + e.Message;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;還是使用 error code 的方式吧，我無法想像用exception來處理：  &lt;br /&gt;&lt;pre class="brush:cpp;"&gt;while (IsSending)&lt;br /&gt;{&lt;br /&gt;    ErrorCode error_code;&lt;br /&gt;    error_code=foo-&amp;gt;Send(SendData);&lt;br /&gt;    switch(error_code)&lt;br /&gt;    {&lt;br /&gt;    case SEND_OK:&lt;br /&gt;        IsSending=false;&lt;br /&gt;        error_code=foo-&amp;gt;Save(SendData);&lt;br /&gt;        switch(error_code)&lt;br /&gt;        {&lt;br /&gt;        case SAVE_OK:&lt;br /&gt;            break;&lt;br /&gt;        case SAVE_NO_FILE:&lt;br /&gt;            //Create a new file&lt;br /&gt;            break;&lt;br /&gt;        case SAVE_BE_LOCK:&lt;br /&gt;            //UnLock or throw if can't be UnLock here&lt;br /&gt;            break;&lt;br /&gt;        }&lt;br /&gt;        break;&lt;br /&gt;    case SEND_NOT_FINISH:&lt;br /&gt;        //Get left SendData  (then Send)&lt;br /&gt;        break;&lt;br /&gt;    case SEND_EMPTY:&lt;br /&gt;        //WaitData or GetData (then Send )&lt;br /&gt;        break;&lt;br /&gt;    case SEND_BE_LOCK:&lt;br /&gt;        //UnLock(then Send) or throw if can't be UnLock here&lt;br /&gt;        break;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;好吧寫個參考，用exception來處理：  &lt;br /&gt;&lt;pre class="brush:cpp;"&gt;while (IsSending)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        foo-&amp;gt;Send(SendData);&lt;br /&gt;        IsSending=false;&lt;br /&gt;    }&lt;br /&gt;    catch(Exception &amp;amp;e)&lt;br /&gt;    {&lt;br /&gt;        ErrorCode error_code = e.Code;&lt;br /&gt;        switch(error_code)&lt;br /&gt;        {&lt;br /&gt;        case SEND_NOT_FINISH:&lt;br /&gt;            //Get left SendData  (then Send)&lt;br /&gt;            break;&lt;br /&gt;        case SEND_EMPTY:&lt;br /&gt;            //WaitData or GetData (then Send )&lt;br /&gt;            break;&lt;br /&gt;        case SEND_BE_LOCK:&lt;br /&gt;            //UnLock(then Send) or throw if can't be UnLock here&lt;br /&gt;            break;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        foo-&amp;gt;Save(SendData);&lt;br /&gt;    }&lt;br /&gt;    catch(Exception &amp;amp;e)&lt;br /&gt;    {&lt;br /&gt;        ErrorCode error_code = e.Code;&lt;br /&gt;        switch(error_code)&lt;br /&gt;        {&lt;br /&gt;        case SAVE_NO_FILE:&lt;br /&gt;            //Create a new file&lt;br /&gt;            break;&lt;br /&gt;        case SAVE_BE_LOCK:&lt;br /&gt;            //UnLock or throw if can't be UnLock here&lt;br /&gt;            break;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;嗯有比較簡潔嗎？ 或許可以改寫成以下方式：  &lt;br /&gt;&lt;pre class="brush:cpp;"&gt;while (IsSending)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        foo-&amp;gt;Send(SendData);&lt;br /&gt;        IsSending=false;&lt;br /&gt;        foo-&amp;gt;Save(SendData);&lt;br /&gt;    }&lt;br /&gt;    catch(Exception &amp;amp;e)&lt;br /&gt;    {&lt;br /&gt;        ErrorCode error_code = e.Code;&lt;br /&gt;        switch(error_code)&lt;br /&gt;        {&lt;br /&gt;        case SEND_NOT_FINISH:&lt;br /&gt;            //Get left SendData  (then Send)&lt;br /&gt;            break;&lt;br /&gt;        case SEND_EMPTY:&lt;br /&gt;            //WaitData or GetData (then Send )&lt;br /&gt;            break;&lt;br /&gt;        case SEND_BE_LOCK:&lt;br /&gt;            //UnLock(then Send) or throw if can't be UnLock here&lt;br /&gt;            break;&lt;br /&gt;            &lt;br /&gt;        case SAVE_NO_FILE:&lt;br /&gt;            IsSending=false;&lt;br /&gt;            //Create a new file&lt;br /&gt;            break;&lt;br /&gt;        case SAVE_BE_LOCK:&lt;br /&gt;            IsSending=false;&lt;br /&gt;            //UnLock or throw if can't be UnLock here&lt;br /&gt;            break;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;雖然在程式上看來較簡潔，但是對於程式流程卻較複雜，隨著程式碼越多，跳到哪裡都不知道了...  其他不使用ex的原因還有影響效能，團隊編程顧慮等。 但使用error code (status code) 也有以下缺點： &lt;br /&gt;&lt;ol&gt;&lt;li&gt;error code是可以被忽略的。&lt;/li&gt;&lt;li&gt;無法自動向上上層（父父程式）傳播。必須由上層接力在丟一次。&lt;/li&gt;&lt;li&gt;在程式流程中不能集中處理（某些情況是優點）。&lt;/li&gt;&lt;li&gt;必須有回傳值或紀錄值。&lt;/li&gt;&lt;/ol&gt;反過來說你不想要這些缺點也是使用 exception 的時機。&lt;br /&gt;&lt;br /&gt;Next: c++ checked exceptions (Exception specifications)?&lt;br /&gt;根據[C++ coding Standards] 書中第 75 項 Avoid exception specifications ， 且在 &lt;a href="http://www.gotw.ca/publications/mill22.htm"&gt;A Pragmatic Look at Exception Specifications&lt;/a&gt; 中的建議 "Never write an exception specification." 所以就不研究了，進階可看 &lt;a href="http://herbsutter.wordpress.com/2007/01/24/questions-about-exception-specifications/"&gt;Questions About Exception Specifications&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;[Reference] &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://fsfoundry.org/codefreak/2008/07/06/google-forbids-use-of-exception-in-cpp/" rel="bookmark" title="COdE fr3@K: Google Forbids Use of Exception in C++"&gt;Google Forbids Use of Exception in C++&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fsfoundry.org/codefreak/2008/08/18/a-new-mind-set-for-exception-handling/" rel="bookmark" title="COdE fr3@K: Exception Handling 新思維"&gt;Exception Handling 新思維&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://delphi.ktop.com.tw/board.php?cid=168&amp;amp;fid=912&amp;amp;tid=55876"&gt;關於錯誤訊息及Exception的處理?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourcemaking.com/refactoring/replace-exception-with-test"&gt;Replace Exception with Test&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourcemaking.com/refactoring/replace-error-code-with-exception"&gt;Replace Error Code with Exception&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/architecture/ExceptionErrorCode.aspx"&gt;The rationale of programming - I. Exception or Error Code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.arkestra.demon.co.uk/errors_return_or_ex.html"&gt;return values or exceptions?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gotw.ca/gotw/082.htm"&gt;Exception Safety and Exception Specifications: Are They Worth It?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://electronic-blue.wikidot.com/blog:21"&gt;關於 C++ Exception&lt;/a&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/5954870337379690905-7424370176942277858?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/7424370176942277858/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2012/04/exception.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7424370176942277858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7424370176942277858'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2012/04/exception.html' title='exception使用的時機'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-7102209061248126833</id><published>2010-06-17T06:40:00.001-07:00</published><updated>2010-06-18T08:11:30.000-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式'/><category scheme='http://www.blogger.com/atom/ns#' term='研究'/><title type='text'>ASSERT的使用時機</title><content type='html'>&lt;p&gt;ASSERT全大寫表示它是全域的。它是一種假設，當假設不成立時，程式就得全部中止。且只作用在Debug時，為的就是讓你在Debug時可以更快地寫程式、找出錯誤。Release時會不會假設就不成立了？有可能，但通常寫程式Debug時就會出現ASSERT出錯的情況，在此時就會快速的發現錯誤，如果Relese版本才出錯，就是考慮的不夠嚴謹，有些ASSERT沒有設定，或是某種情況Relese版才出現。此時更需要Unit Test配合。&lt;/p&gt; &lt;p&gt;寫程式需不需要到處都先假設？&lt;/p&gt; &lt;p&gt;被呼叫端的函式比如fun(obj * o);就必須成立一假設ASSERT(NULL!=o); &lt;br/&gt;為何不return error code或throw exception，要考慮的是上層有沒有檢查就呼叫。通常是會檢查的，就沒有返回錯誤碼或丟例外的必要，但並不能保證。&lt;/p&gt; &lt;p&gt;如果上層要檢查那上上層要不要檢查？在每一層都必須檢查是無謂的。&lt;/p&gt; &lt;p&gt;通常一個軟體設計會分成三個模組，也就是所謂的MVC，是指模組而言。在程式邏輯可分成Controller、UI、Library三層，是有點類似的。Controller呼叫UI和Library，而UI傳送使用者event給Controller。在大型的軟體，可能Controller上還會有一個總體的Controller，Library可能還會呼叫別的Library。 &lt;br/&gt;實際的程式可能是C1-&amp;gt;C2-&amp;gt;L1-&amp;gt;L2-&amp;gt;L3，UI可能由C1整合(C1&amp;lt;-&amp;gt;UI)，&lt;/p&gt; &lt;p&gt;設有一程式輸入名子就可以知道工作時數來取得Payment(薪水、股票) &lt;br/&gt;UI(input)&amp;lt;-&amp;gt;C1-&amp;gt;C2-&amp;gt; &lt;br/&gt;fun1(string name)-&amp;gt;fun2(int work_time)-&amp;gt;fun3(Payment * pay);&lt;/p&gt; &lt;p&gt;fun1就必須有ASSERT(!name.IsEmpty()); &lt;br/&gt;fun2就必須有ASSERT(work_time&amp;gt;0); &lt;br/&gt;fun3就必須有ASSERT(NULL!=pay);&lt;/p&gt; &lt;p&gt;在此情況*下L1,L2,L3都必須ASSERT，而C1或C2就必須檢查避免傳遞無效名子。Controller會去使用UI跟Library，被呼叫端UI跟Library就必須要假設是被正常使用。&lt;/p&gt; &lt;p&gt;但Controller不能有ASSERT，因為它不能有任何的假設情況，必須把會發生的都考慮進去，遇到不正常的時候就阻擋。而被呼叫端都必須要確認情況是成立的才能繼續執行。煩惱就交給上層，下層就只要假設就好了。&lt;/p&gt; &lt;p&gt;C++ 編程規範70提到error有三種：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Precondition(前條件)&lt;/li&gt; &lt;li&gt;Postcondition(後條件)&lt;/li&gt; &lt;li&gt;Invariant(不變性)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;書中講得很清楚，在此不重述。只有不變性比較抽象，不變性就是滿足一個有效狀態(valid states)物件的條件。比如說一個有帳號、密碼的物件，帳號和密碼必須是成對且正確對應的，其中一個有錯就是error、無效狀態。這很明顯不該使用ASSERT來保證*。&lt;/p&gt; &lt;p&gt;書中說到Postcondition也可用ASSERT來確認：&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"假設你呼叫某個API函式，其文件說它總是返回正值，但你懷疑該函式有臭蟲，那麼你可以在呼叫該函式後使用assert驗證其結果。"&lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN-RIGHT: 0px"&gt;這我認為是多餘的，不是很建議。當此API函式出錯有兩種解法：&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="MARGIN-RIGHT: 0px"&gt;API可以修改：修改API錯誤，但不管Debug還是Release時還是要再確認。&lt;/div&gt; &lt;/li&gt; &lt;li&gt; &lt;div style="MARGIN-RIGHT: 0px"&gt;API不可修改：此時也不能用ASSERT中止，且Release版本也不希望出現這個錯誤，當然是由上層想辦法檢查繞過來解決。&lt;/div&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p style="MARGIN-RIGHT: 0px"&gt;不管Debug還是Release時，你還是得再一次確認結果是你所預期的，此時可搭配Unit Test來確認。要不然就是上層自行檢查來避開，沒有必要用ASSERT。Postcondition真的有需要ASSERT時，我覺得只有在驗算的時候，比如設計類似Excel的軟體，寫了兩個演算法來計算同樣的數學式，一個是用來驗算，而且只有Debug版本會算兩次比較慢，不相等的話就一定是其中一個有錯。&lt;/p&gt; &lt;p style="MARGIN-RIGHT: 0px"&gt;總結ASSERT的使用時機：&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div style="MARGIN-RIGHT: 0px"&gt;Precondition&lt;/div&gt; &lt;/li&gt; &lt;li&gt; &lt;div style="MARGIN-RIGHT: 0px"&gt;當你寫的程式是被使用的UI或Library，請多多利用ASSERT來防範吧。&lt;/div&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;*這只是假命題，fun1也可以接受空名子再處理，fun2可以用unsign int限制，fun3也可以傳reference防null物件，所以實際上用到ASSERT的情況不多。 &lt;br/&gt;*不要用ASSERT報告執行期錯誤[C++ 編程規範68]。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-7102209061248126833?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/7102209061248126833/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2010/06/assert.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7102209061248126833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7102209061248126833'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2010/06/assert.html' title='ASSERT的使用時機'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-8225825883912572978</id><published>2010-05-23T22:25:00.001-07:00</published><updated>2010-05-24T08:05:12.125-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>安裝設定Wine執行Zoundry Raven</title><content type='html'>&lt;p&gt;請先參考 &lt;a href="http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?viewmode=thread&amp;amp;type=&amp;amp;topic_id=21674&amp;amp;forum=14"&gt;&lt;strong&gt;[教學] 圖解 wine 入門&lt;/strong&gt;&lt;/a&gt; 來安裝wine、cabextract，不用裝ies4linux，以&lt;a href="http://www.kegel.com/wine/winetricks"&gt;winetricks&lt;/a&gt;裝ie6、msxml3、mfc40、mfc42、wininet。 &lt;br/&gt;打開Configure Wine，還需要用到Windows的shlwapi.dll，在libraries頁中新增輸入shlwapi，之後將c:\Windows\system32目錄下的shlwapi.dll複製到~/.wine/drive_c/Windows/system32下，可以覆蓋。&lt;/p&gt; &lt;p&gt;請勿安裝1.1.42版本，在編輯區會沒有滑鼠游標，害我重裝了一整天也沒用......&amp;gt;&amp;lt;"，後來才知道是&lt;a href="http://ubuntuforums.org/showthread.php?t=1450308"&gt;bug&lt;/a&gt;。 &lt;br/&gt;後來裝了1.2-rc1版，又遇到一個&lt;a href="http://bugs.winehq.org/show_bug.cgi?id=22765"&gt;bug&lt;/a&gt;，某些地方字型無法平滑化，目前無解，尚可執行就勉強用了。請看最後有解決了。&lt;/p&gt; &lt;p&gt;之後以下例的方式新增字型： &lt;br/&gt;將/usr/share/fonts/中要新增字型檔案連結到~/.wine/drive_c/windows/Fonts &lt;br/&gt;修改./wine/system.reg 全部替換成自己要的字型。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes] &lt;br/&gt;"Arial CE,238"="PMingLiU" &lt;br/&gt;"Arial CYR,204"="PMingLiU" &lt;br/&gt;"Arial Greek,161"="PMingLiU" &lt;br/&gt;"Arial TUR,162"="PMingLiU" &lt;br/&gt;"Courier New CE,238"="PMingLiU" &lt;br/&gt;"Courier New CYR,204"="PMingLiU" &lt;br/&gt;"Courier New Greek,161"="PMingLiU" &lt;br/&gt;"Courier New TUR,162"="PMingLiU" &lt;br/&gt;.....&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;修改視窗亂碼： &lt;br/&gt;修改./wine/system.reg&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink] &lt;br/&gt;"Lucida Sans Unicode"="DroidSansFallback.ttf,Droid Sans Fallback" &lt;br/&gt;"Microsoft Sans Serif"="DroidSansFallback.ttf,Droid Sans Fallback" &lt;br/&gt;"PMingLiU"="DroidSansFallback.ttf,Droid Sans Fallback" &lt;br/&gt;"SimSun"="DroidSansFallback.ttf,Droid Sans Fallback" &lt;br/&gt;"Tahoma"="DroidSansFallback.ttf,Droid Sans Fallback"&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;字型平滑化： &lt;br/&gt;修改./wine/user.reg&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[Control Panel\\Desktop] &lt;br/&gt;"DragFullWindows"="0" &lt;br/&gt;"FontSmoothing"="2" &lt;br/&gt;"FontSmoothingGamma"=dword:00000578 &lt;br/&gt;"FontSmoothingOrientation"=dword:00000001 &lt;br/&gt;"FontSmoothingType"=dword:00000002&lt;/p&gt; &lt;p&gt;[Software\\Wine\\X11 Driver] &lt;br/&gt;"ClientSideAntiAliasWithCore"="Y" &lt;br/&gt;"ClientSideAntiAliasWithRender"="Y" &lt;br/&gt;"ClientSideWithCore"="Y" &lt;br/&gt;"ClientSideWithRender"="Y" &lt;br/&gt;"Managed"="Y"&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;執行畫面：&lt;/p&gt; &lt;blockquote style="MARGIN-RIGHT: 0px" dir="ltr"&gt; &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_GQMFvxzOY5c/S_p7Xq3Qo-I/AAAAAAAAAdo/lpo2guPW5Po/zrclip_001n4afa717.png?imgmax=640" style="DISPLAY: inline; WIDTH: 600px; HEIGHT: 355px" height="355" width="600"/&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;另外可考慮安裝Wine-doors來使用其他程式。&lt;/p&gt; &lt;p&gt;1.2-rc1版某些地方字型無法平滑化，最後跟據回報bug頁的解法是說不是wine的問題，可能是我裝在9.04上的關係吧。 &lt;br/&gt;新增一檔案~/font.conf，輸入以下內容就可以了。 &lt;br/&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;lt;?xml version="1.0"?&amp;gt;&amp;lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&amp;gt; &lt;br/&gt;&amp;lt;fontconfig&amp;gt; &lt;br/&gt;&amp;lt;match target="font" &amp;gt; &lt;br/&gt;&amp;lt;edit mode="assign" name="rgba" &amp;gt; &lt;br/&gt;&amp;lt;const&amp;gt;rgb&amp;lt;/const&amp;gt; &lt;br/&gt;&amp;lt;/edit&amp;gt; &lt;br/&gt;&amp;lt;/match&amp;gt; &lt;br/&gt;&amp;lt;match target="font" &amp;gt; &lt;br/&gt;&amp;lt;edit mode="assign" name="hinting" &amp;gt; &lt;br/&gt;&amp;lt;bool&amp;gt;true&amp;lt;/bool&amp;gt; &lt;br/&gt;&amp;lt;/edit&amp;gt; &lt;br/&gt;&amp;lt;/match&amp;gt; &lt;br/&gt;&amp;lt;match target="font" &amp;gt; &lt;br/&gt;&amp;lt;edit mode="assign" name="hintstyle" &amp;gt; &lt;br/&gt;&amp;lt;const&amp;gt;hintmedium&amp;lt;/const&amp;gt; &lt;br/&gt;&amp;lt;/edit&amp;gt; &lt;br/&gt;&amp;lt;/match&amp;gt; &lt;br/&gt;&amp;lt;match target="font" &amp;gt; &lt;br/&gt;&amp;lt;edit mode="assign" name="antialias" &amp;gt; &lt;br/&gt;&amp;lt;bool&amp;gt;true&amp;lt;/bool&amp;gt; &lt;br/&gt;&amp;lt;/edit&amp;gt; &lt;br/&gt;&amp;lt;/match&amp;gt; &lt;br/&gt;&amp;lt;/fontconfig&amp;gt; &lt;br/&gt;&lt;/p&gt; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-8225825883912572978?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/8225825883912572978/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2010/05/winezoundry-raven.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/8225825883912572978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/8225825883912572978'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2010/05/winezoundry-raven.html' title='安裝設定Wine執行Zoundry Raven'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_GQMFvxzOY5c/S_p7Xq3Qo-I/AAAAAAAAAdo/lpo2guPW5Po/s72-c/zrclip_001n4afa717.png?imgmax=640' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-5213316111372354265</id><published>2010-05-05T22:42:00.001-07:00</published><updated>2010-05-07T00:37:32.073-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>自訂Beagle搜尋rar、big5編碼txt</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Beagle是很好用的桌面搜尋，預設是只搜尋使用者家目錄，且不會找隱藏資料夾裡的檔案。有些文件如.doc裡面的中文是搜尋不到的，英文可以。但.odt、.pdf中英文都可以。對我來說，主要還有以下缺點：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;但是如果是rar壓縮檔裡面的資料就找不到。&lt;/li&gt;&lt;li&gt;搜尋中文時，以前是big5編碼的純文字內容就會找不到，我有不少以前的資料是用big5存的阿。&lt;/li&gt;&lt;/ul&gt;分享一下解決方法：&lt;br /&gt;安裝完Beagle後，到/etc/beagle新增external-filters.xml加入資料如下：&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;external-filters&amp;gt;&lt;br /&gt;&amp;lt;filter&amp;gt;&lt;br /&gt;  &amp;lt;mimetype&amp;gt;application/x-rar&amp;lt;/mimetype&amp;gt;&lt;br /&gt;  &amp;lt;extension&amp;gt;.rar&amp;lt;/extension&amp;gt;&lt;br /&gt;  &amp;lt;command&amp;gt;rar&amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;arguments&amp;gt;lb %s&amp;lt;/arguments&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;filter&amp;gt;&lt;br /&gt;  &amp;lt;mimetype&amp;gt;text/plain&amp;lt;/mimetype&amp;gt;&lt;br /&gt;  &amp;lt;!--mimetype&amp;gt;application/gedit&amp;lt;/mimetype--&amp;gt;&lt;br /&gt;  &amp;lt;extension&amp;gt;.txt&amp;lt;/extension&amp;gt;&lt;br /&gt;  &amp;lt;command&amp;gt;iconv&amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;arguments&amp;gt;-f big5 -t utf-8 %s&amp;lt;/arguments&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;/external-filters&amp;gt;&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;然後到console&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;&lt;br /&gt;beagle-config --beagled-reload-config&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;就可以了。&lt;br /&gt;但是之前已經index過得檔案就不會重新index喔，所以當然還是找不到，把舊index刪除 ，重新index就可以了。&lt;br /&gt;&lt;br /&gt;如果你不確定增加external-filters有沒有成功，可以試試以下指令來確認：&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;beagle-info --list-filters&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;會列出所有支援的filters，在這個例子應該出現；&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;FilterExternal - Version 10 (/usr/lib/beagle/Filters/Filters.dll)&lt;br /&gt;  - MimeType: application/x-rar&lt;br /&gt;  - Extension: .rar&lt;br /&gt;  - MimeType: text/plain&lt;br /&gt;  - Extension: .txt&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;要確認是不是指令下錯，可以使用：&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;beagle-extract-content --show-generated test.rar&lt;br /&gt;beagle-extract-content --show-generated test.txt&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;來測試你要尋找有包含資料的檔案，如果他的輸出內容有包含你要搜尋的字串就對了。&lt;br /&gt;.doc裡面的中文搜尋不到，目前不急用就先不解了。&lt;br /&gt;參考：&lt;br /&gt;http://www.linux.com/news/software/applications/254610:desktop-search-engines-compared&lt;br /&gt;http://beagle-project.org/ExternalFiltersRepository#Rar_filter&lt;br /&gt;http://osdir.com/ml/dashboard-hackers/2010-03/msg00006.html&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-5213316111372354265?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/5213316111372354265/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2010/05/beaglerarbig5txt_05.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/5213316111372354265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/5213316111372354265'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2010/05/beaglerarbig5txt_05.html' title='自訂Beagle搜尋rar、big5編碼txt'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-6314593446886038205</id><published>2010-02-03T23:41:00.001-08:00</published><updated>2010-05-12T05:00:52.602-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>在windows單機上使用rsync備份</title><content type='html'>首先至&lt;a href="http://itefix.no/cwrsync/"&gt;cwRsync&lt;/a&gt;下載安裝檔&lt;a class="ext_zip dload filename { url: 'http://downloads.sourceforge.net/project/sereds/cwRsync/4.0.3/cwRsync_4.0.3_Installer.zip' }" href="http://sourceforge.net/projects/sereds/files/cwRsync/4.0.3/cwRsync_4.0.3_Installer.zip/download" title="/cwRsync/4.0.3/cwRsync_4.0.3_Installer.zip: released on 2010-01-03"&gt;cwRsync_4.0.3_Installer.zip&lt;/a&gt;，只要單機用不需要安裝server版。 &lt;br /&gt;安裝完之後，並沒有將rsync所需環境參數設定進系統，而是寫在範例檔C:\Program Files\cwRsync\cwrsync.cmd。把指令寫在範例檔最後，直接執行即可。&lt;br /&gt;rsync -av --delete /cygdrive/c/Temp/test/ /cygdrive/c/Temp/test2/ &amp;gt;&amp;gt;test&lt;br /&gt;rsync -av --delete-after --exclude-from=rsync_exclude.txt /cygdrive/d/ /cygdrive/z/company/ &amp;gt;rsync3.log &lt;br /&gt;&lt;br /&gt;rsync_exclude.txt內容範例&lt;br /&gt;#System file&lt;br /&gt;RECYCLER/&lt;br /&gt;System Volume Information/&lt;br /&gt;Thumbs.db&lt;br /&gt;&lt;br /&gt;#no use data&lt;br /&gt;not sync/&lt;br /&gt;*.obj&lt;br /&gt;*.pch&lt;br /&gt;*.ncb&lt;br /&gt;*.bsc&lt;br /&gt;*.ilk&lt;br /&gt;*.pdb&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-6314593446886038205?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/6314593446886038205/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2010/02/windowsrsync.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/6314593446886038205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/6314593446886038205'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2010/02/windowsrsync.html' title='在windows單機上使用rsync備份'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-5573136930699538383</id><published>2009-12-07T22:31:00.001-08:00</published><updated>2009-12-08T01:19:09.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='lib'/><title type='text'>在 windows mobile 使用 log4net</title><content type='html'>&lt;p&gt;我自己的步驟如下：&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;span&gt;下載log4net解壓縮，複製bin\netcf裡dll檔案到專案。在專案加入 Reference: log4net.dll&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span&gt;&lt;span&gt;設定log4net設定檔 &lt;br/&gt;&lt;/span&gt; &lt;span&gt;重要：&lt;/span&gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ol&gt; &lt;li&gt;&lt;span&gt;Net CF的log4net設定檔不支援中文註解&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span&gt;一定要包含在&amp;lt;configuration&amp;gt;...&lt;/span&gt;&amp;lt;/configuration&amp;gt;&lt;/li&gt; &lt;/ol&gt; &lt;/li&gt; &lt;li&gt;&lt;span&gt;&lt;span&gt;引入using &lt;br/&gt;using log4net;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span&gt;在程式一開始的地方去解析 log4net 的 configuration. &lt;br/&gt;log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("logconfig.xml"));&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span&gt;接著在你想要進行 log 的類別宣告這一個屬性. &lt;br/&gt;protected static readonly ILog log = LogManager.GetLogger(typeof( your_class_name ));&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span&gt;使用時Debug &amp;lt; Info &amp;lt; Warn &amp;lt; Error &amp;lt; Fatal &lt;br/&gt;log.Info( "your message here." );&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span&gt;可以利用 log4net.Repository.ILoggerRepository r = LogManager.GetRepository();去看 r.Configured 屬性,如果是 false,表示沒設定到。&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;span&gt;不使用設定檔的方式，上述步驟略過2、5，在6之後加入以下設定程式&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        log4net.Appender.RollingFileAppender a = new log4net.Appender.RollingFileAppender();&lt;br /&gt;        a.Name = "RollingFileAppender";&lt;br /&gt;        a.File = "log.txt";&lt;br /&gt;        a.AppendToFile = true;&lt;br /&gt;        a.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;&lt;br /&gt;        a.MaxSizeRollBackups = 3;&lt;br /&gt;        a.MaximumFileSize = "1KB";&lt;br /&gt;        a.StaticLogFileName = true;&lt;br /&gt;        a.Layout = new log4net.Layout.PatternLayout(@"{%level}%date{MM/dd HH:mm:ss} - %message%newline");&lt;br /&gt;        a.ActivateOptions();&lt;br /&gt;        a.Threshold = log4net.Core.Level.Debug;&lt;br /&gt;        log4net.Config.BasicConfigurator.Configure(a);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; &lt;p&gt;Reference: &lt;br/&gt;&lt;a href="http://www.dotblogs.com.tw/laneser/archive/2009/09/17/10678.aspx"&gt;在 multi-thread 的環境當中使用 log4net&lt;/a&gt; &lt;br/&gt;&lt;a href="http://sites.google.com/site/stevenattw/dot-net/log4net"&gt;log4net (史帝芬心得筆記)&lt;/a&gt; &lt;br/&gt;&lt;a href="http://www.csharptocsharp.com/log4net-configuration-for-rockin-loggin-part-2"&gt;log4net-configuration-for-rockin-loggin-part-2&lt;/a&gt; &lt;br/&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-5573136930699538383?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/5573136930699538383/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2009/12/windows-mobile-log4net.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/5573136930699538383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/5573136930699538383'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2009/12/windows-mobile-log4net.html' title='在 windows mobile 使用 log4net'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-1398618288797746412</id><published>2009-12-02T21:42:00.001-08:00</published><updated>2009-12-02T21:42:33.862-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>Windows Mobile 6.x Emulator 在 VirtualBox 的連線方式</title><content type='html'>&lt;p&gt;我自己的步驟如下：&lt;/p&gt; &lt;ol&gt; &lt;li&gt;在Guest OS安裝MS Loopback 網卡 &lt;a href="http://support.microsoft.com/kb/839013/"&gt;http://support.microsoft.com/kb/839013/&lt;/a&gt;。 &lt;br/&gt;&lt;/li&gt; &lt;li&gt;在Guest OS將Bind到Host網卡的那張網卡上啟用網路共用(Internet Connections Share,ICS)。此時在Guest OS中的MS Loopback網卡會自動連線，IP將會被強制設為192.168.0.1,Subnet mask為255.255.0.0 &lt;br/&gt;&lt;/li&gt; &lt;li&gt;在Guest OS安裝Virtaul Machine Network Service安裝後請記得要重新開機。原下載已移除，可以安裝MS Virtual PC 2007，或找其他載點。 &lt;br/&gt;&lt;/li&gt; &lt;li&gt;開啟WM6模擬器在工具列中的File&amp;gt;Configure..&amp;gt;network Enable NE2000 PCMCIA adapter and bind to :Microsoft Loopback adapter-Virtual Machine network service，Reset WM6。 &lt;br/&gt;&lt;img src="http://lh3.ggpht.com/_GQMFvxzOY5c/SxdPwo5BFFI/AAAAAAAAAYo/yGFDzMi6dY8/zrclip_001p8e19d01.png?imgmax=640" height="508" width="615"/&gt; &lt;br/&gt;&lt;/li&gt; &lt;li&gt;再回到Start&amp;gt;Settings&amp;gt;Connections&amp;gt;Connections&amp;gt;Advanced&amp;gt;Select Networks&amp;gt;確認Programs that automatically connect to Internet 是設定為My Work Network。應該可以正常使用Mobile IE連上Internet了。 &lt;br/&gt;&lt;img src="http://lh6.ggpht.com/_GQMFvxzOY5c/SxdPx0ZvfDI/AAAAAAAAAYs/0rr11R1Lyro/zrclip_002p7205ede4.png?imgmax=512" height="456" width="297"/&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Reference: &lt;br/&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/zh-TW/803/thread/1081af3d-e357-4703-9908-e5a5b4bc0827"&gt;Mobile 6.0 Emulator在Virtual PC 2007的連線問題&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-1398618288797746412?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/1398618288797746412/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2009/12/windows-mobile-6x-emulator-virtualbox.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/1398618288797746412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/1398618288797746412'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2009/12/windows-mobile-6x-emulator-virtualbox.html' title='Windows Mobile 6.x Emulator 在 VirtualBox 的連線方式'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_GQMFvxzOY5c/SxdPwo5BFFI/AAAAAAAAAYo/yGFDzMi6dY8/s72-c/zrclip_001p8e19d01.png?imgmax=640' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-5432658544389647463</id><published>2009-11-27T19:56:00.001-08:00</published><updated>2009-11-27T19:56:26.890-08:00</updated><title type='text'>如何重調整VirtualBox系統硬碟大小</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;ol&gt;&lt;li&gt;首先備份你的虛擬系統。&lt;/li&gt;&lt;li&gt;下載 &lt;a target='_blank' href='http://sourceforge.net/project/showfiles.php?group_id=115843&amp;amp;package_id=271779' title='Sourceforge: gparted-live-stable'&gt;&lt;em&gt;gparted Live CD&lt;/em&gt; ISO&lt;/a&gt; 。&lt;/li&gt;&lt;li&gt;新增一個虛擬硬碟符合想要的大小，把她掛上要調整大小的系統。&lt;/li&gt;&lt;li&gt;掛上gparted iso檔。&lt;/li&gt;&lt;li&gt;以光碟開機後，選系統硬碟，右鍵copy，&lt;br/&gt;&lt;img width='828' height='546' alt='' src='http://lh5.ggpht.com/_GQMFvxzOY5c/SxCfXVZrKZI/AAAAAAAAAXs/yd2QJKosAZs/%5BUNSET%5D.jpg?imgmax=800'/&gt;&lt;/li&gt;&lt;li&gt;在選擇新硬碟Device-&amp;gt;Partition Table後，右鍵Paste，&lt;br/&gt;&lt;img width='823' height='542' alt='' src='http://lh4.ggpht.com/_GQMFvxzOY5c/SxCfZOUD6zI/AAAAAAAAAXw/SEbWfZXwMhw/%5BUNSET%5D.jpg?imgmax=800'/&gt;&lt;/li&gt;&lt;li&gt;把容量拉到最大，確定之後Apply，大概等個幾分鐘。&lt;br/&gt;&lt;img width='823' height='543' alt='' src='http://lh6.ggpht.com/_GQMFvxzOY5c/SxCfaYY4laI/AAAAAAAAAX0/izwBwRv3Gms/%5BUNSET%5D.jpg?imgmax=800'/&gt;&lt;/li&gt;&lt;li&gt;最後這個步驟一定要作才能開機喔，右鍵-&amp;gt;&lt;strong&gt;Manage Flags，勾選&lt;/strong&gt;&lt;strong&gt;Boot。&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;以上完成複製到新硬碟，在VirtualBox在新增系統硬碟選這個就行嘍。&lt;/li&gt;&lt;/ol&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Reference:&lt;br/&gt;&lt;a title='Permanent Link to &amp;quot;Re-sizing a VirtualBox Virtual Disk Image File&amp;quot;' rel='bookmark' href='http://www.modhul.com/2008/10/21/re-sizing-a-virtualbox-virtual-disk-image-file/'&gt;Re-sizing a VirtualBox Virtual Disk Image File&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=5c987169-b64b-8052-a744-48f03cf7df53' alt='' class='zemanta-pixie-img'/&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/5954870337379690905-5432658544389647463?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/5432658544389647463/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2009/11/virtualbox.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/5432658544389647463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/5432658544389647463'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2009/11/virtualbox.html' title='如何重調整VirtualBox系統硬碟大小'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_GQMFvxzOY5c/SxCfXVZrKZI/AAAAAAAAAXs/yd2QJKosAZs/s72-c/%5BUNSET%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-8636192728291724263</id><published>2009-10-11T22:51:00.001-07:00</published><updated>2009-10-12T02:10:27.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>如何用Zoundry Raven透過ISA proxy發佈文章</title><content type='html'>&lt;p&gt;在內部網路時，必須透過ISA proxy來發佈文章，但是Zoundry Raven目前並不支援ISA proxy，實在是很麻煩阿。&lt;/p&gt; &lt;p&gt;只好使用&lt;a href="http://cntlm.sourceforge.net/" title="Cntlm Authentication Proxy"&gt;Cntlm&lt;/a&gt;再轉出去：&lt;/p&gt; &lt;p&gt;下載執行setup.bat安裝之後會在C:\Program Files\Cntlm內。 &lt;br/&gt;先修改cntlm.ini後執行:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;cntlm.exe -c cntlm.ini -v &lt;br/&gt;-c: 讀取設定檔 &lt;br/&gt;-v: 秀出訊息&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;並在Zoundry Raven設定proxy為127.0.0.1:3128。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-8636192728291724263?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/8636192728291724263/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2009/10/zoundry-ravenisa-proxy.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/8636192728291724263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/8636192728291724263'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2009/10/zoundry-ravenisa-proxy.html' title='如何用Zoundry Raven透過ISA proxy發佈文章'/><author><name>sevenjay</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-7696027864714854680</id><published>2009-10-08T23:36:00.001-07:00</published><updated>2009-10-12T02:41:26.078-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>測試使用Zoundry Raven發佈文章</title><content type='html'>&lt;p class="post-title entry-title"&gt;這是第一篇使用Zoundry Raven發佈的文章&lt;/p&gt; &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_GQMFvxzOY5c/Ss7Z6m_w9cI/AAAAAAAAAVE/3a77KqOIF7g/zrtn_002p6fd25fe8_tn.jpg?imgmax=288" style="DISPLAY: inline; FLOAT: left; WIDTH: 250px; HEIGHT: 214px" height="214" width="250"/&gt; 設定上比較麻煩一些，我又是在proxy之後更麻煩。 也算還方便，但是Zoundry Raven已經很久沒更新了。有點擔心阿，雖然已經是open source了。 而且可以做出文繞圖的效果，實在是太強，可能就是太強了才沒人有辦法更新吧？&lt;/p&gt; &lt;p class="post-title entry-title"&gt;試貼好吃的墨西哥烤雞餐： &lt;br/&gt;&lt;img src="http://lh3.ggpht.com/_GQMFvxzOY5c/Ss7Z-b6_vWI/AAAAAAAAAVM/ceAFgHlx3Cg/zrtn_003n4a2df797_tn.jpg?imgmax=800" style="WIDTH: 800px; HEIGHT: 600px" height="600" width="800"/&gt;&lt;/p&gt; &lt;p class="post-title entry-title"&gt;使用上很方便，但上傳Blogger的話要更改個設定，以免一堆空行： &lt;br/&gt;&lt;img src="http://lh5.ggpht.com/_GQMFvxzOY5c/StL5xCz2trI/AAAAAAAAAWU/1DMf6j5M67Y/zrclip_001p3c1d9574.png?imgmax=576" style="WIDTH: 590px; HEIGHT: 458px" height="450" width="550"/&gt;&lt;/p&gt; &lt;p class="post-title entry-title"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-7696027864714854680?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/7696027864714854680/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2009/10/zoundry-raven.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7696027864714854680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7696027864714854680'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2009/10/zoundry-raven.html' title='測試使用Zoundry Raven發佈文章'/><author><name>sevenjay</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_GQMFvxzOY5c/Ss7Z6m_w9cI/AAAAAAAAAVE/3a77KqOIF7g/s72-c/zrtn_002p6fd25fe8_tn.jpg?imgmax=288' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-2616625515195626820</id><published>2009-09-28T00:27:00.000-07:00</published><updated>2009-10-08T02:59:10.292-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>關於TechBlog of sevenjay</title><content type='html'>主要是寫技術性的文章，跟其他文章做區別。&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-2616625515195626820?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/2616625515195626820/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2009/09/techblog-of-sevenjay.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/2616625515195626820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/2616625515195626820'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2009/09/techblog-of-sevenjay.html' title='關於TechBlog of sevenjay'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5954870337379690905.post-7225898094398552869</id><published>2005-08-25T01:22:00.000-07:00</published><updated>2009-11-09T18:05:40.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='軟體'/><title type='text'>利用samba定時備份windows</title><content type='html'>&lt;p&gt;windows沒有定時在備份，總是令人提心吊膽的，又不能天天都燒成光碟吧，一個月燒一次已經很勤勞了吧，可是還是怕怕的…就想辦法搞了這些。&lt;/p&gt; &lt;p&gt;1.開機自動mount windows網芳分享出來的資料夾、FAT32格式的備份用硬碟&lt;/p&gt; &lt;ul class="noindent"&gt; &lt;li&gt;vi /etc/rc.d/rc.local &lt;br/&gt;加入 &lt;br/&gt;smbmount '\\gmvr-jay\F' /home/win/ -o username='kekeo',password='*',codepage='cp950′ &lt;br/&gt;&lt;del datetime="2005-08-22T18:29:33-08:00"&gt;(不要使用選項codepage='cp950′，否則等下同步備份的檔案會被轉成utf8)&lt;/del&gt; &lt;a href="http://140.120.14.162/~kekeo/wordpress/wp-admin/post.php#1"&gt;註一&lt;/a&gt; &lt;br/&gt;mount -t vfat -o &lt;span style="COLOR: #ff0000"&gt;shortname=mixed&lt;/span&gt;,iocharset=utf8,codepage=950 /dev/hdc1 /mnt/hdc1 &lt;br/&gt;注意紅色標示的地方，沒有此選項會使的FAT32中的資料夾短檔名變成一律小寫，使的rsync會同步CD資料夾為cd而找不到CD資料夾。&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;2.每天定時同步化檔案和資料夾&lt;/p&gt; &lt;ul class="noindent"&gt; &lt;li&gt;vi /etc/crontab &lt;br/&gt;加入以下這行 &lt;br/&gt;50 3 * * * root rsync -a -delete-after &lt;span style="COLOR: #ff0000"&gt;-modify-window=3601&lt;/span&gt; -exclude-from=/home/win/rsync_exclude /home/win/ /mnt/hdc1/winbackup/ &lt;br/&gt;注意紅色標示的地方，沒有此選項會使的rsync某些檔案不同步，要重抓或刪除，不過有此選項還是會發生，只是大幅改善很多，詳細原因不清楚，不想裡它了，情況不嚴重就算了。網路上也有人有同樣的&lt;a href="http://www.mikerubel.org/computers/rsync_snapshots/#Bugs"&gt;情形一&lt;/a&gt;、&lt;a href="http://lists.samba.org/archive/rsync/2002-December/004436.html"&gt;情形二&lt;/a&gt;。&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;總算完成了這艱鉅的任務，從沒看過有人這樣備份的，自己想到就玩了起來，真是麻煩重重阿，如果你有更好的從windows定時備份到不同顆硬碟的方法，請告訴我，謝謝。&lt;/p&gt; &lt;p&gt;途中曾經有想過要用unison來同步，但是使用上遇到一些問題，放棄了。如果有人想在Fedora 4上嘗試，可由此取得&lt;a href="http://rpm.pbone.net/index.php3/stat/4/idpl/2113356/com/unison-2.12.0-1.fc4.i386.rpm.html"&gt;rpm&lt;/a&gt;。&lt;/p&gt; &lt;p&gt;弄了三天，出了些問題，有點煩不想理他了就這樣。&lt;/p&gt; &lt;p&gt;&lt;br/&gt;註一：原本使用選項codepage='cp950′，copy檔案資料夾到linux資料夾時會自動由big5轉成utf8編碼，會使的windows 系統看起來是亂碼，既然我要備份，到時候回存就麻煩了，所以原本想說來源端(windows網芳)跟目的端(FAT32硬碟)都不要改編碼，結果 rsync就不行了。兩個都改編碼就可以了，可是不知道在rsync過程中會不會作big5-&amp;gt;utf8-&amp;gt;big5的轉換？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5954870337379690905-7225898094398552869?l=techblog.sevenjay.tw' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.sevenjay.tw/feeds/7225898094398552869/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://techblog.sevenjay.tw/2005/08/sambawindows.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7225898094398552869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5954870337379690905/posts/default/7225898094398552869'/><link rel='alternate' type='text/html' href='http://techblog.sevenjay.tw/2005/08/sambawindows.html' title='利用samba定時備份windows'/><author><name>sevenjay</name><uri>http://www.blogger.com/profile/05190805070376123333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_GQMFvxzOY5c/S-O8M4Z0DkI/AAAAAAAAAcU/7Tot_qFojCA/S220/ATT04274.gif'/></author><thr:total>0</thr:total></entry></feed>
