<?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:blogger='http://schemas.google.com/blogger/2008' 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-5043951312037783911</id><updated>2024-10-07T13:35:15.292+08:00</updated><category term="程式設計"/><category term="C#"/><category term="WordPress相關"/><category term="電腦"/><category term="生活"/><category term="T-SQL"/><category term="SQL2005"/><category term="Android"/><category term="Ubuntu"/><category term="ASP.NET"/><category term="SQL Server"/><category term="軟體筆記"/><category term="PDA"/><category term="VS2010"/><category term=".NET"/><category term="Linux"/><category term="OpenCV"/><category term="SQL2008"/><category term="MSBuild"/><category term="WCF"/><category term="執行緒"/><category term="未分類"/><category term=".Net Framework"/><category term="DOS"/><category term="IIS"/><category term="OS"/><category term="Programming"/><category term="SubVersion"/><category term="UML"/><category term="VirtualBox"/><category term="Web"/><category term="Win7"/><category term="WinServer"/><category term="c++"/><category term="php"/><category term="書評"/><category term=".Net Remoting"/><category term="Agile"/><category term="Azure"/><category term="Batch"/><category term="Blogger"/><category term="C# Thread"/><category term="CHT8000"/><category term="CSS"/><category term="Chess"/><category term="Controls"/><category term="CrystalReport"/><category term="DLL"/><category term="Entity Frameowk"/><category term="GMail"/><category term="GoogleAPI"/><category term="GridView"/><category term="HTML"/><category term="MFC"/><category term="MS Server"/><category term="MantisBT"/><category term="MongoDB"/><category term="NAS"/><category term="Office"/><category term="Office 2007"/><category term="Oracle"/><category term="Outlook"/><category term="PERL"/><category term="Pex"/><category term="PowerShell"/><category term="Reporting Service"/><category term="SEO"/><category term="STL UNICODE"/><category term="SandCastle"/><category term="Scrum"/><category term="T4"/><category term="Unit Test"/><category term="VS2005"/><category term="Vista"/><category term="WinOS"/><category term="Word"/><category term="XP"/><category term="eclipse"/><category term="session"/><category term="圖床"/><category term="框架"/><category term="演算法"/><category term="物件導向"/><category term="畫面擷取"/><category term="程式開發"/><category term="股票經"/><category term="貼圖"/><category term="雲端運算"/><title type='text'>程式實驗室--ProgLab</title><subtitle type='html'>ProgLab</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>212</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-9040257792157363311</id><published>2017-05-24T23:36:00.002+08:00</published><updated>2017-06-08T23:19:37.710+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>bash script中字串處理</title><content type='html'>在撰寫bash script時，字串處理算是最常用到的功能了。而且你會需要用到的字串處理還真不少。以下是一些最近在學習時有使用到的字串處理功能的筆記。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
字串串接&lt;/h3&gt;
&lt;div&gt;
常常會需要將處理到的內容串接並保存到一個變數中，在bash script中可以用以下的指令完成：&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
newLine=&quot;${orgLine} other line&quot;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
可是如果你要處理的字串中含有&#39;\r&#39;這類的特殊字元時，要先將它去除，不然你會debug到死也不知為何你的字串都無法正常串接。因為雖然你有正常串接了，但在echo出來時，一遇到&#39;\r&#39;就會再將游標移到前頭重印，就會讓你以為你都沒有正確地串接字串。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
要移除 &#39;\r&#39; 的話，可以用 tr 指令。例如：&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
removeLine=$(echo $newLine | tr &#39;\r&#39; &#39; &#39;)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
要由一個檔案中一行行地處理所要的資料時，可以用如下的方式：&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;while read -r line;
do
# your process
done &amp;lt; &amp;lt;(cat $fileName | grep key1 | grep key2)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
不過如果最後再使用 tr 指令想要替換某個字元時，好像就無法正常讀入行的資料。所以最好是在內迴圈自行再處理。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
字串基本處理&lt;/h3&gt;
截取部份字串：&lt;br /&gt;
&lt;br /&gt;
sStr=${fullStr:0:10} &amp;nbsp; &amp;nbsp;# 由0開始取10個字元&lt;br /&gt;
&lt;br /&gt;
移除部份字串&lt;br /&gt;
&lt;br /&gt;
有時會需要將字串中符合樣式的部份給移除，且查詢的方式有分由前至後或由後至前，以及是移除最長或最短的樣式的組合。&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;前至後&lt;/td&gt;&lt;td&gt;後至前&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;移除最長&lt;/td&gt;&lt;td&gt;##&lt;/td&gt;&lt;td&gt;%%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;移除最短&lt;/td&gt;&lt;td&gt;#&lt;/td&gt;&lt;td&gt;%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
例如有個完整的檔案路徑，想要分別取出檔名部份及路徑部份的話：&lt;br /&gt;
&lt;br /&gt;
fullPath=/opt/game/setting.conf&lt;br /&gt;
&lt;br /&gt;
fileName=${fullPath##*/}&lt;br /&gt;
path=${fullPath%/*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp;&quot; name=&quot;code&quot;&gt;int main(){
    return 0;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/9040257792157363311/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2017/05/bash-script.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/9040257792157363311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/9040257792157363311'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2017/05/bash-script.html' title='bash script中字串處理'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-254232269326954818</id><published>2017-04-16T22:28:00.001+08:00</published><updated>2017-04-16T22:28:48.282+08:00</updated><title type='text'>移動SVN及重新連接</title><content type='html'>&lt;p&gt;近期有個專案是要將原本放置在windows主機中的visual svn的svn程式碼銦庫改到另一個Linux中的svn程式碼倉庫中。在查詢了網路上其它人的作法後，大致上緗利地完成了整個程式碼倉庫的移動。&lt;/p&gt; &lt;p&gt;我們移動的作法如下：&lt;/p&gt; &lt;ol&gt; &lt;li&gt;備份原本的程式碼倉庫 &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;svnadmin dump &amp;lt;your-repo-name&amp;gt; &amp;gt; &amp;lt;backup-repo-name.dump&amp;gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;在新的主機上建立新的repo目錄 &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;svnadmin create &amp;lt;new-repo&amp;gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;匯入程式碼 &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;svnadmin load &amp;lt;new-repo&amp;gt; &amp;lt; &amp;lt;backup-repo-name.dump&amp;gt;&lt;/p&gt; &lt;p&gt;大致上使用上述的三個步驟就可以完svn程式碼倉庫的移動了。這種作法也可以用於備份程式碼倉庫的作業。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;移動完成後，因為主機的ip也不同了，而且repo的名稱可能也不同了，接下來就是開發人員本地端原本的svn程式碼目錄要如何重新導向到新的目錄。目前採用的方式如下：&lt;/p&gt; &lt;ol&gt; &lt;li&gt;先備份你本地端原本的目錄  &lt;li&gt;在你原本的svn程式碼目錄上重新用svn check out針對新的svn repo重新取出一份  &lt;li&gt;可能要再將一些原本備份下來的原始目錄copy回新的目錄，確保你本地端的working copy都有copy回來，以便到時能再check in&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;將程式碼重新check in到另一個svn中&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;由檔案總管copy專案目錄到新目錄中，此時因為檔案總管不會一併copy .svn這類的隱藏目錄，所以copy過去的只是專案的程式碼  &lt;li&gt;在新copy的專案目錄上執行svn check in的步驟將它簽入到新的svn repo即可&lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/254232269326954818/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2017/04/svn.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/254232269326954818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/254232269326954818'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2017/04/svn.html' title='移動SVN及重新連接'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-4529566735214519073</id><published>2016-01-05T17:26:00.001+08:00</published><updated>2016-01-05T17:26:42.014+08:00</updated><title type='text'>使用WinScp的C#程式進行SFTP連接時如何找到FingerPrint</title><content type='html'>&lt;p&gt;&lt;u&gt;可以利用WinScp程式&lt;/u&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;先用WinScp配合要使用的帳號及密碼，登入遠端的SFTP主機後  &lt;li&gt;到WinScp的Commands –&amp;gt; Server/Protocol Information視窗中的Protocol這頁，可以看到下方會列出此帳號連到這台主機時要使用的FingerPrint Key&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY-L8DCefWhtd4x0NjlnpLHq47TN4dE2xnhmmYACqss5_TtlzoIElXhSHF4TE6N39YTRB4_00058QfFSmB8Ih9aYksxh32kqU6hOUzxhOXRSfXkr2e-NK2OELq7nOCTQIUM-kjjOZKkl8W/s1600-h/image%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-qVd6p6t6B1V8mPCT6u3LJ9Xr19OWWchHOFaVXUaaU9Xl0z5Jvc60G6a0WRjKhDUzlTmbrIg6_gc4hplUokJ3fk9D1TMdERZqhh-_RIJ9kDDA3IcHLD6ed7VH5rrlW0yUG1vNntTjfhbZ/?imgmax=800&quot; width=&quot;507&quot; height=&quot;471&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;可以利用Linux上的指令&lt;/u&gt;&lt;/p&gt; &lt;p&gt;另一種方式就是&lt;a href=&quot;http://unix.stackexchange.com/questions/126908/get-ssh-server-key-fingerprint&quot;&gt;利用一些Linux的指令&lt;/a&gt;，在使用帳號及密碼登入SFTP主機後，計算出要使用的FingerPrint Key&lt;/p&gt; &lt;p&gt;file=$(mktemp)&lt;/p&gt; &lt;p&gt;ssh-keyscan host &amp;gt; $file 2&amp;gt; /dev/null&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ** 其中的host要用SFTP主機的IP或hostname替代&lt;/p&gt; &lt;p&gt;ssh-keygen -l -f $file&lt;/p&gt; &lt;p&gt;cat $file&lt;/p&gt; &lt;p&gt;rm $file&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/4529566735214519073/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2016/01/winscpcsftpfingerprint.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4529566735214519073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4529566735214519073'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2016/01/winscpcsftpfingerprint.html' title='使用WinScp的C#程式進行SFTP連接時如何找到FingerPrint'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-qVd6p6t6B1V8mPCT6u3LJ9Xr19OWWchHOFaVXUaaU9Xl0z5Jvc60G6a0WRjKhDUzlTmbrIg6_gc4hplUokJ3fk9D1TMdERZqhh-_RIJ9kDDA3IcHLD6ed7VH5rrlW0yUG1vNntTjfhbZ/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-5865107064599887072</id><published>2015-10-07T22:50:00.002+08:00</published><updated>2015-10-07T22:50:35.132+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><title type='text'>簡單就是美</title><content type='html'>今天在網路上看到一篇跟程式設計師有關的文章，標題是：&lt;a href=&quot;http://buzzorange.com/techorange/2015/10/05/the-evolution-of-a-software-engineer/&quot;&gt;不廢話！五組程式碼，道盡 Coder 10 年幽幽練功路&lt;/a&gt;。內容就真的是五組程式碼，看了真是很有感想。&lt;br /&gt;
&lt;br /&gt;
一開始寫程式時就是簡單、笨笨的寫，後來有經驗了，就開始想要展現自己的能力，簡單的東西就寫得開始有點複雜了。又過了一些日子，經驗累積更多了，最後才領悟到簡單又可以達到目的的才是最美的。真所謂是反璞歸真啊。&lt;br /&gt;
&lt;br /&gt;
的確，真正有能力的人不會把事情搞得很複雜來展現自己的能耐，反而是能切中要點，用最簡單的方式處理才是最厲害的。&lt;br /&gt;
&lt;br /&gt;
這又讓我想到了最近看到的Bjarne Stroustrup C++之父在youtube上的一段演講，標題是：&lt;a href=&quot;https://www.youtube.com/watch?v=nesCaocNjtQ&quot;&gt;Make Simple Tasks Simple&lt;/a&gt;!&quot;完整內容我還沒有時間看完，但我想大意應該是差不多的。&lt;br /&gt;
&lt;br /&gt;
另外前不久也才剛看完Clean Code的中譯本：&lt;a href=&quot;http://www.books.com.tw/products/0010579897&quot;&gt;無瑕的程式碼&lt;/a&gt;。的確，寫程式寫到最後，真的是要用最簡單易懂的方式來處理，這樣未來自己再回頭看時，或是交接給後來的人維護時才不會太吃力。例如有關程式碼中註解的撰寫，如果是程式碼真接就容易看得懂的意思就不用再寫成註解了。因為這樣不但是多餘的，而且未來如果程式碼變更時而忘了去改註解的話，那真的會讓後來的接手維護的人不知這段到底是程式碼是正確的，還是註解是正確的。當然，前提是你的程式碼本身就可以明確地表達自己的意圖才好。</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/5865107064599887072/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2015/10/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/5865107064599887072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/5865107064599887072'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2015/10/blog-post.html' title='簡單就是美'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-3724243017541959805</id><published>2015-09-17T22:03:00.001+08:00</published><updated>2015-09-17T22:04:21.341+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="書評"/><title type='text'>[讀書] Docker入門與實戰</title><content type='html'>不久前就經常在網路上看到有關&lt;a href=&quot;https://www.docker.com/&quot;&gt;docker&lt;/a&gt;的相關消息，只是一知半解的得知它是一種很類似虛擬機器的工具，但是算是輕量級的。因為它不用再跑在一份OS上，只要用現有的OS即可。但又可以實現「容器」的概念。&lt;br /&gt;
&lt;br /&gt;
近日在逛書店時正好看到有相關的書籍--「&lt;a href=&quot;http://www.tenlong.com.tw/items/9863476587?item_id=1004900&quot;&gt;Docker入門與實戰&lt;/a&gt;」，內容正好是適合我這種剛入門的讀者。&lt;br /&gt;
&lt;br /&gt;
書中一開始當然就是先介紹一下docker的概念。它可以不用再另外用像是virtualbox這類的虛擬工具就可以執行一份完整且獨立的linux os環境。而且它的出發點是希望write once run anywhere，只要做好一份影像檔，就可以拿到各種OS中執行成一份獨立的容器，並且可以使用容器中的功能。&lt;br /&gt;
&lt;br /&gt;
接著就是介紹了一些有關docker的操作指令，像是如何由公開倉庫取得可用的影像檔，如何執行指定的影像檔成為一個容器。接著就是容器裏變更的內容如何儲存下來待後續再使用。&lt;br /&gt;
&lt;br /&gt;
容器要安裝及執行所需的服務到此為止看來是沒問題了，接著是因為都是執行在同一個OS層中，使用的網路卡也是一樣的，那有些服務所要使用到的port該如何設定才好呢?&lt;br /&gt;
&lt;br /&gt;
原來在執行容器時可以利用命令列的方式將本機上的某個port對應到所執行的容器中的指定的port上。例如在容器中如果有提供ssh的服務，且ssh平用的是port 22的話，那可以指定將本機例如port 10122映射到port 22上。這樣任何外部的用戶端都可以利用&amp;lt;本機IP&amp;gt;:10122的方式來存取到容器中的ssh服務了。&lt;br /&gt;
&lt;br /&gt;
學了這麼多，最重要的還是要能透過實作的方式來測試實際的用途。所以接著就是來到了實作的章節。第一份實作就是利用docker官方的ubuntu影像檔，安裝並啟用ssh服務來給外部人員使用。可是依書中的步驟就我測試下來都是失敗的。安裝ssh及執行服務看來是沒問題，但就是在要用ssh client端登入時，就一直會詢問密碼。可是不論使用什麼密碼都無法成功登入。&lt;br /&gt;
&lt;br /&gt;
後來查了一下，原來&lt;a href=&quot;https://docs.docker.com/examples/running_ssh_service/&quot;&gt;官方網站中也有相關的實作應用&lt;/a&gt;，參考了一下才知道，原來是書中少了設定root密碼的部份，難怪都無法登入。&lt;br /&gt;
&lt;br /&gt;
後來在利用Dockerfile自動建立影像檔中，自行加入了修改root使用者帳號的密碼，並且也自行加入了幾個預設會用到的登入帳號及密碼後，目前看來就可以正常的產生一份可以使用ssh服務的容器了。</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/3724243017541959805/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2015/09/docker.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/3724243017541959805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/3724243017541959805'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2015/09/docker.html' title='[讀書] Docker入門與實戰'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-988547861645792774</id><published>2014-08-23T22:46:00.000+08:00</published><updated>2014-08-23T22:46:04.701+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>使用regular expression來match中括號(square bracket)</title><content type='html'>沒想到在C#中也算玩過一陣子的正規表示式(Regular Expression)，來到了Linux C/C++中竟然時常碰壁。&lt;br /&gt;
&lt;br /&gt;
現在只是想要找一個用中括號([])包起來的字串，竟然沒有想的那麼簡單。&lt;br /&gt;
&lt;br /&gt;
假設我要找的目標為 [1234]，在以前C#的時候的寫法會是\[(?&amp;lt;num&amp;gt;(\d*)\]。來到了Linux C/C++時，也是用原本的概念組了一串這樣的比對格式：&lt;br /&gt;
&lt;br /&gt;
\[([0-9]*\]&lt;br /&gt;
&lt;br /&gt;
沒想到一使用std::regex_match()後就掛了。在編譯(或說指定)這個比對格式給std::regex時就出現Exception了。&lt;br /&gt;
&lt;br /&gt;
這個問題查了一些google上的文章，大家都說遇到正規表示中有的字元的話就是前面加上跳脫字元\就可以啦。沒想到結果會是失敗。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/11310472/regular-expression-for-detecting-round-or-square-brackets&quot;&gt;後來看到有人指示要比對中括號的話，需要將它放在中括號中&lt;/a&gt;!!&lt;br /&gt;
&lt;br /&gt;
就是用這樣的方式：&lt;br /&gt;
&lt;br /&gt;
[\[]([0-9]*)[\]]&lt;br /&gt;
&lt;br /&gt;
指定要比對於中括號中給定的字元，也就是中括號的左右兩邊的符號。&lt;br /&gt;
&lt;br /&gt;
最後終於是正常編譯過關，且可以正常比對成功了。&lt;br /&gt;
&lt;br /&gt;
而且要注意的是，當將上面這段比對格式放到C/C++的程式碼中，針對\不用再重覆一次，也就是不要寫成&lt;br /&gt;
&lt;br /&gt;
&quot;[\\[]([0-9]*)[\\]]&quot;&lt;br /&gt;
&lt;br /&gt;
這樣比對的結果也是失敗的喔。</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/988547861645792774/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2014/08/regular-expressionmatchsquare-bracket.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/988547861645792774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/988547861645792774'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2014/08/regular-expressionmatchsquare-bracket.html' title='使用regular expression來match中括號(square bracket)'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-176560628054551994</id><published>2014-08-10T23:14:00.000+08:00</published><updated>2014-08-10T23:26:00.063+08:00</updated><title type='text'>2014 8月書單</title><content type='html'>今天正好有空閒時間，由台北的娘家步行約兩公里、花了20分鐘經過植物園、總統府，來到了重慶南路上的天瓏書局，看看這陣子有沒有出些什麼有趣或是工作上有用到的書。逛了大約半小時，大致上找到了三本想要買的書。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://www.kingstone.com.tw/book/book_page.asp?kmcode=2013120307483&amp;amp;lid=book-class-newbook-first&amp;amp;actid=vertical&quot;&gt;你也可以和大師這麼接近 - 用C++開發頂級多執行緒網路函數庫Muduo&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
這本書主要是要介紹使用Open Source的Muduo來開發有關網路相關應用程式時，處理多執行緒相關的書。前面第一章大致上介紹了在多執行緒上開發應用程式會遇到且會花上許多時間除錯的經驗。&lt;br /&gt;
&lt;br /&gt;
看了一下內容，還蠻想買的。而且正好有提到一個我目前遇到但還無法解決的問題。就是你定義一個自已的類別的const函式時，如果裏面有需要用到mutex來同步多執行緒的存取的話，因為會改變到mutex的狀態，所以你的函式變成也無法修飾成const。書中是說可以用mutable這個修飾字來處理。實際的狀況就等買了書再仔細看囉。&lt;br /&gt;
&lt;br /&gt;
不過天瓏的繁體版一本只能打85折。只好回家再到網路上找看看有沒有79折的了。博客來目前是9折，金石堂、灰熊愛讀書都是79折，只是有訂購的話才會進貨。&lt;br /&gt;
&lt;br /&gt;
後來google了一下，作者的部落格中也有Muduo的相關PPT及&lt;a href=&quot;https://www.youtube.com/watch?v=YDnCAs894Bg&amp;amp;feature=youtu.be&quot;&gt;教學影片&lt;/a&gt;可供參考。另外也看到&lt;a href=&quot;http://blog.csdn.net/solstice/article/details/13997287&quot;&gt;原作者陳碩的部落格&lt;/a&gt;有介紹可以到amazon.cn買電子版的。雖然是簡體版的，但電子版正合我意。因為家裏的空間真的不大，買了很多書後來過年大掃除時，都只能論斤賣了。很可惜。&lt;br /&gt;
&lt;br /&gt;
不過要買amazon.cn的電子書，還真的讓我花了一些時間。原本以為只要上網註冊一個帳號就可以買了，沒想到一註冊完要買時，它說我是非中國的帳戶不能買電子版的。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/nQ9i5Gu.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/nQ9i5Gu.png&quot; height=&quot;280&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
原本要請在大陸的親友代為用我的帳戶登入去購買的，以為他是看上網的地區。沒想到也是不行。後來只好去有關帳戶設定那邊看一下，原來可以更改所在地。就用親友的大陸地址改了一下。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/2OafmrJ.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/2OafmrJ.png&quot; height=&quot;164&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
還真的可以改地區耶，接著就是去試看看能否購買囉。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/svwIpHs.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/svwIpHs.png&quot; height=&quot;306&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
再回到原來的網址，果然出現kindle電子版的購買選項了。接著就是用網頁上的購買流程付費後，馬上到我的iPad中開啟Kindle for iPad，同步一下就可以看到剛剛買的書了。下載後就可以觀看了。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.books.com.tw/products/0010644283&quot;&gt;Specification by Example 中文版：團隊如何交付正確的軟體&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
博碩出版社最近開始一系列地出一些比較高層次的書籍，提供給有過幾年在資訊界中當過黑手的人，作為更進階的參考書籍。這本書又是最近的新書(應該是吧，距離上次逛天瓏已是三個月前的事了)。看了一下書的標的就有點心動想要買了。常年在軟體開發團隊中求生存的人，看到這種標題--如何交付正確的軟體，應該都是會想要看看別人有什麼經驗可以分享的吧。&lt;a href=&quot;http://blog.xdite.net/posts/2012/10/01/specification-by-example&quot;&gt;這本書也有人寫了閱讀心得了，可以參考一下&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
這是一本翻譯的書，基本上也是會有原文本可以看，同樣的在Amazon也可以買到原文版本的，不過就是貴了點。如果繁體中文也有電子版的話，我應該也會買。目前…只好尋求原文pdf版的囉。正好放到iPad中練練英文。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.books.com.tw/products/0010637503&quot;&gt;笑談軟體工程：例外處理設計的逆襲&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
學過C++、C#、Java等語言的人，對於Exception這種所謂的例外處理語法應該都是熟能生巧的了。只是如果以設計面來看，到底何時該用Exception，何時改用一般的傳回NULL指標(物件)、布林變數來決定函式呼叫的結果為何時，有沒有一個可供參考的準則或是提示。這正是我目前也有遇到的問題。正好看到了這本書，再看一下內容大網，也是有心動想買，不過，最後想想還是等看看圖書館有沒有可以借的到，到時再借來看看好了。&lt;br /&gt;
&lt;br /&gt;
主要是想說這種內容大約看過一遍，做做筆記，再到實務上運用看看。如果再有需要的話，再到圖書館借回來看一下就好。(更主要的是，家裏真的空間不多)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://teddy-chen-tw.blogspot.tw/2011_05_17_archive.html&quot;&gt;作者本身也有個部落格可以參考一下其它資訊&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/176560628054551994/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2014/08/2014-8.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/176560628054551994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/176560628054551994'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2014/08/2014-8.html' title='2014 8月書單'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-4682806916855393825</id><published>2014-07-24T23:12:00.002+08:00</published><updated>2014-07-24T23:12:44.041+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NAS"/><title type='text'>DDWRT中的埠轉發(映射)跟UPnP</title><content type='html'>自從某次更新了iPad OS版本後，造成我家的Wifi分享器ASUS 520GU變得時常當機要進行重啟。原本想換台新的，後來想想還是省下了，先把它刷機一下，看看有沒有救好了。&lt;br /&gt;
&lt;br /&gt;
查了一下網路上有關Wifi分享器的刷機建議，好像只有兩套軟體是比較有人在使用的。一套就是&lt;a href=&quot;http://www.polarcloud.com/tomato&quot;&gt;Tomato&lt;/a&gt;，另一套就是&lt;a href=&quot;http://www.dd-wrt.com/site/index&quot;&gt;DDWRT&lt;/a&gt;。後來就選了DDWRT這套來刷我的ASUS 520GU。在參考不少文章後，終於成功地更新了DDWRT，從此它跟iPAD就相安無事了。&lt;br /&gt;
&lt;br /&gt;
只是DDWRT上的功能看來還蠻多的，一時間也沒空去研究它。只要能用就好了。&lt;br /&gt;
&lt;br /&gt;
不巧，最近又開始弄了一台NAS Synology DS213j。本來只是想說能備份照片就好了。後來又看到它裏面還有不少套件，有時有多餘的時間時就手癢給它裝了幾個來玩玩。&lt;br /&gt;
&lt;br /&gt;
Wordpress是算蠻有名的部落格軟體，以前也有試著申請過一些免費的網路空間來試玩。沒想到DS213j裏也有這個套件，一樣手癢給它點下去安裝完了。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/CEPMtbf.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/CEPMtbf.png&quot; height=&quot;360&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
DS213j真的是很適合完全不需任何知識，只要會點滑鼠的人就可以使用的。沒幾下又裝好了Wordpress了。&lt;br /&gt;
&lt;br /&gt;
在自已家裏可以連到這個網站看到Wordpress首頁也算不錯了。只是又看到DS213j有個功能就是能透過一些設定，讓你由外部的網路就可以連回家裏NAS上的網站。這…當然也要試用一下啦。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/bpobuHb.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/bpobuHb.png&quot; height=&quot;364&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
不過在設定「外部存取」的功能時，是有點需要技巧的。最方便的方式就是先去開啟你的Wifi分享器的UPnP伺服器功能，再透過DS213j的「外部存取」功能中的路由器設定功能來設定，這樣也是只要會點滑鼠就可以設定好了。&lt;br /&gt;
&lt;br /&gt;
設定好外部存取後，也就這樣放著了。反正可以用就好了，管它是如何設好的。&lt;br /&gt;
&lt;br /&gt;
最近不小心又到網路上查了一下到底UPnP是什麼好用的東西，這麼方便就可以設好網路的轉址。沒想到不查還好，一查就查到一些負面的消息。&lt;a href=&quot;http://gordon168.tw/?p=574&quot;&gt;很多人都建議要將這項功能給關閉才比較安全&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
天啊，那當然要來關閉它囉。只是看了一下UPnP裏的設定值，這不是跟「埠轉發(映射)」很類似嗎?&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/DPOCfHM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/DPOCfHM.png&quot; height=&quot;396&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/NNJQ8qF.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.imgur.com/NNJQ8qF.png&quot; height=&quot;296&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
所以就先手動在「埠轉發(映射)」裏設定一些在UPnP中有設定的Port。只是一開始的協定是設為「兩者」也就是TCP/UDP兩個都設定。接著就到UPnP這頁將UPnP伺服器給關閉。關閉後，再透過其它網路進行測試，看看是否還可以由外部的網路來存取到NAS中的網頁。結果…失敗了。&lt;br /&gt;
&lt;br /&gt;
想了很久，這樣設定也沒錯啊。反覆又將「埠轉發(映射)」給刪除，再設回UPnP，奇怪，用UPnP設定就沒問題，用「埠轉發(映射)」設定就是不行。&lt;br /&gt;
&lt;br /&gt;
本來想就這樣放棄了，還是開UPnP好了，不過想一下還是先查個資料看看到底「埠轉發(映射)」跟UPnP是不是一樣的東西。沒想到一查就查到一篇有用的參考資料，&lt;a href=&quot;http://comwarehouse.blogspot.tw/2011/07/dd-wrt-nat.html&quot;&gt;原來在DDWRT的「埠轉發(映射)」中的協定設為兩者的話，是有Bug而無法作用的&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
果然在改成TCP後，就一切正常了。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/4682806916855393825/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2014/07/ddwrtupnp.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4682806916855393825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4682806916855393825'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2014/07/ddwrtupnp.html' title='DDWRT中的埠轉發(映射)跟UPnP'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-3274327153179012968</id><published>2014-07-23T14:31:00.000+08:00</published><updated>2014-07-23T14:55:09.570+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>安裝CentOS 7.0.4 Server版</title><content type='html'>跟&lt;a href=&quot;http://www.redhat.com/&quot;&gt;RedHat&lt;/a&gt;體系最相近的要算是Fedora了，但可惜的是&lt;a href=&quot;http://fedoraproject.org/zh_TW/&quot;&gt;Fedora&lt;/a&gt;並沒有提供單純安裝成Linux Server版本的功能。Ubuntu雖然有提供Server的版本，但跟RedHat又有點差異。目前看來只有&lt;a href=&quot;http://fedoraproject.org/zh_TW/&quot;&gt;CentOS&lt;/a&gt;跟RedHat最為相近且又支援單純安裝Linux Server版本的功能。&lt;br /&gt;
&lt;br /&gt;
要將CentOS安裝成Linux Server版本的話有兩種方式，一種是使用他的Minimal版本，另一種是使用一般的DVD版本，只是在一開始啟動時，就按下Tab鍵，這時會出現一行指令，在指令後輸入 text後，就可以用文字模式來進行安裝了。&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;設定網路&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://lintut.com/how-to-set-static-ip-address-on-redhat-centos-and-fedora-linux/&quot;&gt;變更成固定網址&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;設定gcc開發環境&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
執行 sudo yum install gcc gcc-c++ make gdb autoconf automake&lt;br /&gt;
&lt;br /&gt;
就可以建立一個可用來進行c/c++開發程式的環境了</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/3274327153179012968/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2014/07/centos-704-server.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/3274327153179012968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/3274327153179012968'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2014/07/centos-704-server.html' title='安裝CentOS 7.0.4 Server版'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-5459481158415526972</id><published>2014-05-09T23:39:00.001+08:00</published><updated>2014-05-09T23:39:19.953+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL2008"/><title type='text'>MSSQL 2008/2012 Management Studio安裝後無法設定及使用「已註冊伺服器群組」</title><content type='html'>最近正好更新電腦，重新安裝了MSSQL Server 2008/2012的Management Studio。安裝後開啟程式就先將原本在舊電腦中的伺服器註冊資訊匯出並匯入到新的電腦中。匯入時發生了錯誤，造成無法正常匯入。&lt;br /&gt;
&lt;br /&gt;
後來重新開啟MSSQL Server Management Studio後就無法正常使用「已註冊伺服器群組」了。有試過移除後再重新安裝，可是只要一開啟程式時，就會出現錯誤。雖然可以忽略這個錯誤訊息，但一進入主程式，就無法使用「已註冊伺服器群組」。&lt;br /&gt;
&lt;br /&gt;
花了點時間查了一下，發現可能是原本匯入失敗的設定資料造成無法使用「已註冊伺服器群組」。&lt;a href=&quot;http://social.msdn.microsoft.com/Forums/sqlserver/en-US/3e5d9f1d-bba6-45c5-82b8-09627db38214/ssms-2008-r2-registered-servers-error?forum=sqltools&quot;&gt;有人建議就先去刪除這些註冊資訊&lt;/a&gt;，註冊的資訊位於：&lt;br /&gt;
&lt;br /&gt;
%APPDATA%\Microsoft\Microsoft SQL Server\100\Tools\Shell\&lt;br /&gt;
&lt;br /&gt;
只要將RegSvr.xml這個檔案刪除後，再重啟SSMS就可以正常使用了。</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/5459481158415526972/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2014/05/mssql-20082012-management-studio.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/5459481158415526972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/5459481158415526972'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2014/05/mssql-20082012-management-studio.html' title='MSSQL 2008/2012 Management Studio安裝後無法設定及使用「已註冊伺服器群組」'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-1044227741308319221</id><published>2014-03-04T23:45:00.001+08:00</published><updated>2014-03-04T23:45:13.597+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OS"/><title type='text'>ACER 3820TG 舊筆電重灌Window 7 x64</title><content type='html'>發現目前使用的舊筆電ACER 3820TG上面執行的Windows 7已經越來越慢了。有時給他休眠一下還起不來呢。一定要強制重開機才行。看來又到了重灌作業系統的時機了。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
沒想到，有這個想法後，惡夢就開始了。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
想說重灌不就是接上光碟機，放入Windows 7 DVD就可以重灌了嗎?誰知ACER 3802TG就不是這樣。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
當我接上光碟機，放入安裝光碟，並進入BIOS設定由光碟機先開機後，是有出現開始用光碟機開機的資訊，但Windows 7 DVD安裝光碟讀取到一半，就給我出現藍底白字的畫面了。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
試了很多次都沒辦法。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
後來想說那就來重建一下MBR好了，可能是哪裏有問題造成無法正常開機。可MBR要重建要如何重建呢?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
查了一下，有些救援的工具，例如&lt;a href=&quot;http://www.hiren.info/pages/bootcd&quot;&gt;Hiren&#39;s bootCD&lt;/a&gt;，就是一份可以用來製作開機光碟，裏面已有數種免費的工具的整合包。要下載的話，可到這個&lt;a href=&quot;http://www.hirensbootcd.org/download/&quot;&gt;網頁下載&lt;/a&gt;。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
有了工具就開始先進行MBR的修複吧。但沒想到偏偏選了其中一個只能修複Windows XP以前的MBR的工具，這一修理下，就更慘了。造成原本的Windows 7作業系統也無法開機了。因為Windows 7 的MBR比較特別。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
接著想說再用Hiren&#39;s bootCD再來選一次其它工具修複成Windows 7可接受的MBR，沒想到就無法再順利開機了。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
最後的辦法就是折掉硬碟，接上外接盒，到另一台筆電中，在那台筆電中執行EaseUS Partion Tool，用這個工具裏的Rebuild MBR方式，才讓ACER 3820TG使用的硬碟可以正常安裝作業系統。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
可以順利安裝後，接下就是重灌完Windows 7 OS後，要如何重裝ACER 3820TG的驅動程式了。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
我的安裝方式為：&lt;/div&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 80%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;驅動程式&lt;/td&gt;&lt;td&gt;是否重開機&lt;/td&gt;&lt;td&gt;Note&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;VGA_ATI_8.713.3.3000_W7x86x64_AS3820T&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;WLAN_Atheros_9.0.0.202_Win7x86x64&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;無線網卡驅動程式，可以上網用&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;防毒軟體(Avast)&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;可以上網了，先防毒一下&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;LAN_Atheros_1.0.0.23_Win7x86x64&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;網卡驅動程式&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Card Reader_Alcor_1.0.12.50_Win7x86x64&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;讀卡機驅動程式&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Bluetooth_Atheros_7.2.0.28_W7x86x64&lt;/td&gt;&lt;td&gt;YES&lt;/td&gt;&lt;td&gt;藍芽驅動程式&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Camera(ap)_Chicony_1.1.158.203_Win7x86x64&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;WebCam驅動程式&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Camera(ap)_Chicony_1.1.158.203_Win7x86x64&lt;/td&gt;&lt;td&gt;NO(可先不用Reboot)&lt;/td&gt;&lt;td&gt;WebCam驅動程式&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Power_Management_5.02.3000_Win7x86x64&lt;/td&gt;&lt;td&gt;YES&lt;/td&gt;&lt;td&gt;電源管理程式&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;LM_Dritek_4.0.5_Win7x86x64&lt;/td&gt;&lt;td&gt;YES&lt;/td&gt;&lt;td&gt;可以出現管理Wifi/Bluetooth介面&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AMT_Intel_6.0.0.1179_W7x86W7x64_A&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;解決到目前為止在裝置管理中還會看到有一項「PCI通訊硬體」的驅動程式未安裝的問題&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AHCI_Intel_9.5.6.1001_W7x86W7x64_A&lt;/td&gt;&lt;td&gt;NO&lt;/td&gt;&lt;td&gt;安裝後就可以找到目前的硬碟型號了&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;div&gt;
到目前為止，所有的驅動程式就安裝完畢了，可以開始安裝其它軟體了。&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/1044227741308319221/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2014/03/acer-3820tg-window-7-x64.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/1044227741308319221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/1044227741308319221'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2014/03/acer-3820tg-window-7-x64.html' title='ACER 3820TG 舊筆電重灌Window 7 x64'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-4018379847122674854</id><published>2013-12-13T21:58:00.000+08:00</published><updated>2013-12-13T21:58:50.166+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="Scrum"/><category scheme="http://www.blogger.com/atom/ns#" term="XP"/><title type='text'>Scrum != Agile</title><content type='html'>原文來自於Dr. Dobb&#39;s的&lt;a href=&quot;http://www.drdobbs.com/architecture-and-design/scrum-agile/240164386&quot;&gt;Scrum != Agile&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Agile是一種文化，表示組織可以在短時間內(二週)內就有個新版本給客戶端使用，並得到回饋。回饋的內容會再轉化成下一次的Agile流程。&lt;/li&gt;
&lt;li&gt;Scrum是一種程序&lt;/li&gt;
&lt;li&gt;XP是所有12種實作(Practices)，缺一不可&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/4018379847122674854/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2013/12/scrum-agile.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4018379847122674854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4018379847122674854'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2013/12/scrum-agile.html' title='Scrum != Agile'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-9124614041583119896</id><published>2013-09-19T16:35:00.002+08:00</published><updated>2013-09-19T16:35:33.454+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="VirtualBox"/><title type='text'>Ubuntu 13.04 at VirtualBox 4.2.x 超級慢的啦</title><content type='html'>在Ubuntu 13.04版本出來後，試著在VirtualBox 4.2.x版本用虛擬機器的方式來安裝使用，沒想到安裝完後，執行起來真是超慢的。&lt;br /&gt;
&lt;br /&gt;
想說是不是我的電腦太舊的，換了一台4核，Core-i5 1G獨顯，8G DDR3的NB，試了也是一樣的結果。&lt;br /&gt;
&lt;br /&gt;
查了一下資料，好像是&lt;a href=&quot;http://askubuntu.com/questions/207813/why-does-an-ubuntu-12-10-guest-in-virtualbox-run-very-very-slowly&quot;&gt;需要安裝額外的套件，或將某些功能關閉&lt;/a&gt;。可是雖然是可以快一點，但顯示上則是怪怪的，時常黑黑的一片。&lt;br /&gt;
&lt;br /&gt;
看來似乎是Virtual Box的問題，好像目前仍待解決。但Virtual Box也有說明，像Ubuntu 13.04的版本看來是需要「真的GPU」而不能用模擬的。看來只能真的拿一台來安裝了，不能再用Virtual Box這種模擬器了。&lt;br /&gt;
&lt;br /&gt;
不過也有人則是&lt;a href=&quot;http://www.psychocats.net/ubuntu/classicgnome&quot;&gt;改回使用原本的介面GNOME&lt;/a&gt;，或這也是種方式。</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/9124614041583119896/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2013/09/ubuntu-1304-at-virtualbox-42x.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/9124614041583119896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/9124614041583119896'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2013/09/ubuntu-1304-at-virtualbox-42x.html' title='Ubuntu 13.04 at VirtualBox 4.2.x 超級慢的啦'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-4463474383612241379</id><published>2013-09-19T16:25:00.001+08:00</published><updated>2013-09-19T16:25:12.772+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><title type='text'>Can I Run in 64Bit ?</title><content type='html'>有同事問到怎麼寫出來的.NET 程式放到64bit的Windows 2008 R2上執行時，怎麼還是執行成32bit模式呢? 會是因為我們都是在32bit開發及編譯造成它只能用32 bit模式執行嗎?&lt;br /&gt;
&lt;br /&gt;
理論上在.NET編譯時都是預設為Any CPU的，也就是會依執行的環境來選擇是執行成32或64 bit模式。&lt;br /&gt;
&lt;br /&gt;
可是不知怎麼地，VS2010在新增一個專案時，它的CPU就預設成用32bit模式。這應該也不是因為我們是在32 bit的環境下開發造成它預設選32 bit(x86)模式。因為就算我在一台64 bit的作業系統環境下建立新的專案，它還是預設選x86模式。&lt;br /&gt;
&lt;br /&gt;
所以我們必須手動切換成Any CPU才行．&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNU74XN63W5ZRMv5jKq9-TdoJzY3lIEy15_NQtTT6Yp_NGKWiE4_RdiZm1Un4mpu5NlypkNv74k6ykx1dHi8DXHbdVu_Wz2Bl7-orLtx5lPcvPwlt1Nc9x_055uK0ezqVoSaj7insNnWd9/s1600/CanIRun64Bit_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNU74XN63W5ZRMv5jKq9-TdoJzY3lIEy15_NQtTT6Yp_NGKWiE4_RdiZm1Un4mpu5NlypkNv74k6ykx1dHi8DXHbdVu_Wz2Bl7-orLtx5lPcvPwlt1Nc9x_055uK0ezqVoSaj7insNnWd9/s640/CanIRun64Bit_2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
切換成Any CPU後編譯的可執行檔放到64 bit的環境中執行時，就會自動切換成64 bit來執行了。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyelpUQK4wpyKy54V3ODwNhTifLhl5ziLRQbjmy5CS-wb8EZapu3LZIIeO4Idznks7b-v_GxKrtcqWgGgyCJ8zwUDBMNIgGG1r13ksGG8WfpkqQQESYFmZ-yoWvAPXruqAv2lf2_Sd1umc/s1600/CanIRun64Bit_3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyelpUQK4wpyKy54V3ODwNhTifLhl5ziLRQbjmy5CS-wb8EZapu3LZIIeO4Idznks7b-v_GxKrtcqWgGgyCJ8zwUDBMNIgGG1r13ksGG8WfpkqQQESYFmZ-yoWvAPXruqAv2lf2_Sd1umc/s640/CanIRun64Bit_3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/4463474383612241379/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2013/09/can-i-run-in-64bit.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4463474383612241379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/4463474383612241379'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2013/09/can-i-run-in-64bit.html' title='Can I Run in 64Bit ?'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNU74XN63W5ZRMv5jKq9-TdoJzY3lIEy15_NQtTT6Yp_NGKWiE4_RdiZm1Un4mpu5NlypkNv74k6ykx1dHi8DXHbdVu_Wz2Bl7-orLtx5lPcvPwlt1Nc9x_055uK0ezqVoSaj7insNnWd9/s72-c/CanIRun64Bit_2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-8175174042341564662</id><published>2013-08-16T09:08:00.000+08:00</published><updated>2013-08-16T09:08:18.153+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Entity Frameowk"/><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL"/><title type='text'>MSSQL字串長度在EntityFramework中比對失敗</title><content type='html'>在開始使用Entity Framework後，一切的ORM都是用.NET Entity Framework來自動產生的。&lt;br /&gt;
&lt;br /&gt;
查詢資料庫的方式也改用了LINQ的語法。例如要查詢某資料表某欄位是否為某等定字串時，可以用如下的語法：&lt;br /&gt;
&lt;br /&gt;
var result = from myRow in myTable&lt;br /&gt;
where myRow.Name == &quot;MyFirstName&quot;&lt;br /&gt;
select myRow;&lt;br /&gt;
&lt;br /&gt;
但神奇的是，某一天這段語法失靈了。就算資料庫中有符合條件的資料也無法被篩選出來。&lt;br /&gt;
&lt;br /&gt;
如果將語法改為使用StartWith()的方式，則可以正常地找出所要的資料。&lt;br /&gt;
&lt;br /&gt;
var result = from myRow in myTable&lt;br /&gt;
where myRow.Name.StartWith(&quot;MyFirstName&quot;)&lt;br /&gt;
select myRow;&lt;br /&gt;
&lt;br /&gt;
此時開始懷疑是不是資料庫裏那個欄位的資料後面是有空白字元的。這個資料欄位一開始時是以ncahr()的方式開立的，在輸入一些資料後，因為設計上的調整，所以改為使用nvarchar()的型別。&lt;br /&gt;
&lt;br /&gt;
於是就用SQL指令去查了一下資料欄位的字串長度是不是含有空白字元，使用的SQL語法如下：&lt;br /&gt;
&lt;br /&gt;
select Name, LEN(Name) as NameLength&lt;br /&gt;
from myTable&lt;br /&gt;
&lt;br /&gt;
由顯示的結果來看，資料欄裏字串的長度也沒錯啊，看來是沒有包含空白字元。但使用LINQ的語法就是無法用==的方式來查詢所要的資料。&lt;br /&gt;
&lt;br /&gt;
後來想說去查一下SQL的&lt;a href=&quot;http://technet.microsoft.com/en-us/library/ms190329.aspx&quot;&gt;LEN()&lt;/a&gt;函式的定義，看看是否有特別的部份。哇，原來函式的定義如下，是不包含尾部的空白字元的耶。那如果要查看原始字串長度要用哪個函式呢?&lt;br /&gt;
&lt;br /&gt;
Returns the number of characters of the specified string expression, excluding trailing blanks.
&lt;br /&gt;
&lt;br /&gt;
原來要查到真正的原始字串長度的話，要用&lt;a href=&quot;http://technet.microsoft.com/en-us/library/ms173486.aspx&quot;&gt;DATALENGTH()&lt;/a&gt;才行。&lt;br /&gt;
&lt;br /&gt;
一查之下才知道，原來原本用ncahr()改為nvarchar()後，原先輸入的字串資料還是保留了原本後面的空白字元。&lt;br /&gt;
&lt;br /&gt;
如果要修改資料的話，可以用以下的SQL指令：&lt;br /&gt;
&lt;br /&gt;
update&lt;br /&gt;
myName = RTRIM(myName)&lt;br /&gt;
from myTable</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/8175174042341564662/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2013/08/mssqlentityframework.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/8175174042341564662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/8175174042341564662'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2013/08/mssqlentityframework.html' title='MSSQL字串長度在EntityFramework中比對失敗'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-7548751002420234318</id><published>2013-06-01T23:34:00.001+08:00</published><updated>2013-06-01T23:57:05.978+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><title type='text'>命名規則：變數前是否要加上型別資訊</title><content type='html'>最早最早以前，一開始接觸程式設計時，就是在用Visual C++ 5.0 + MFC寫Windows程式。所以一開始的程式變數的命名規則都是學MFC裏的命名方式，也就是所謂&lt;a href=&quot;http://zh.wikipedia.org/zh-hk/%E5%8C%88%E7%89%99%E5%88%A9%E5%91%BD%E5%90%8D%E6%B3%95&quot;&gt;匈牙利命名法&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
匈牙利命名法倒是也沒什麼問題，我想他的起源應該是因為以前的C編譯器是不支援在編譯時檢查參數型別的，所以特別要在變數的前面加上型別的資訊，以便程式設計人員可以在編寫程式碼的時候就能夠有機會在第一時間查覺出所引用的變數型別上有出入，而不用等到程式真正編譯好執行時才發現錯誤。&lt;br /&gt;
&lt;br /&gt;
而目前的程式語言及編譯器都已經能在編譯程式碼時就幫忙檢查引用的參數型別了，於是這種命名方式隨著時代的演進，應該是可以不用採用這種方式來命名了才對。&lt;br /&gt;
&lt;br /&gt;
就開發程式設段時間以來，目前最常用到的就是兩種命名方式，一種是Pascal Case，另一種是Camel Case。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E5%B8%95%E6%96%AF%E5%8D%A1%E5%91%BD%E5%90%8D%E6%B3%95&quot;&gt;Pascal Case &lt;/a&gt;變數的命名首字母是大寫，後續單字的第一個字母也都是大寫，例如TestSample。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E9%A7%9D%E5%B3%B0%E5%BC%8F%E5%A4%A7%E5%B0%8F%E5%AF%AB&quot;&gt;Camel Case&lt;/a&gt; 有分成兩種，一種是Upper Camel Case，基本上就跟Pascal Case一樣。另一種是Lower Camel Case，變數的首字母是小寫，後續單字的第一個字母則都是大寫。例如testSample。&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
基本上這樣的方式也沒有誰好誰壞，只要有個規則，大家一致就好。&lt;br /&gt;
&lt;br /&gt;
不過個人認為，如果是無型別檢查的環境下，變數的名稱(或一些需要命名的名稱)我習慣會加上型別的資訊。&lt;br /&gt;
&lt;br /&gt;
例如在使用資料庫時，要為資料表及檢視表命名時，習慣上會加上tbl及vw的字首。用來識別這是資料表還是檢視表。&lt;br /&gt;
&lt;br /&gt;
因為有些語法在檢視表上應該是不適用的，例如INSERT、UPDATE、DELETE這類的語法。檢視表只適合用來下SELECT的查詢語法。為了在使用時就能識別出是資料表或檢視表，個人覺得還是加上識別字比較好。&lt;br /&gt;
&lt;br /&gt;
在C#或C++中我們可以宣告一個列舉，例如：&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;codeblock prettyprint&quot; &gt;public enum ServerStatusEnum
{
    READY,
    IDLE
}
&lt;/pre&gt;
在使用這種列舉型別來定義變數時，就可以：&lt;br /&gt;
&lt;pre class =&#39;codeblock prettyprint&#39;&gt;
public ServerStatusEnum ServerStatus = ServerStatusEnum.IDLE;
&lt;/pre&gt;

因為我們想要的就是定義一個Server的Status，所以變數名稱當然以ServerStatus為佳。如果我們的列舉在宣告時沒有加上Enum，那這樣我們要為變數取什麼命名呢? CrtServerStatus嗎? 好像比較不洽當^^&lt;br /&gt;
&lt;br /&gt;
當然有人的命名規則上會規定說列舉就不用再加上型別識別字Enum了吧，但這樣的話我個人使用上就常遇到上述的狀況。所以我乾脆就在列舉型別上加上Enum作為結尾囉。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/7548751002420234318/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2013/06/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/7548751002420234318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/7548751002420234318'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2013/06/blog-post.html' title='命名規則：變數前是否要加上型別資訊'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-1326961822017149687</id><published>2012-10-03T22:33:00.000+08:00</published><updated>2012-10-03T22:33:37.784+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DOS"/><title type='text'>DOS批次檔中取得中華民國年份</title><content type='html'>開始覺得DOS的批次檔指令真是高深莫測了。&lt;br /&gt;
&lt;br /&gt;
最近想完成個小需求就是要寫一個DOS Batch指令檔，去Linux主機上用FTP模式下載一些檔案下來。&lt;br /&gt;
&lt;br /&gt;
這些檔案的檔名都是以日期編名的，如果是用西元年，那倒也還容易。可是這次的檔名卻是用中華民國的年份。@@&lt;br /&gt;
&lt;br /&gt;
好吧，西元年算到中華民國年份，充其量用個減法減去1911年就可以得到了。但在DOS的批次檔中要如何寫啊?&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
首先要取得西元年的日期&lt;/h3&gt;
在Dos命令列視窗中輸入date /t可以取得目前的日期，但格式化後取得的結果如下，它會多一個星期幾的字串。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhajUqCa2DO8EpsaTQUklBZxbTYlhyR-wILQuK9fDTBpEAX4gd2opHMQTmUTPD1zVIZPgyj8MWfJDoDhDfk9W945gloGR6pf-0efYh8lO2F3n3n-XjiKWLRejKHnjetVb-oCOk_dJnUe_Gm/s1600/Dos_Batch_Set_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhajUqCa2DO8EpsaTQUklBZxbTYlhyR-wILQuK9fDTBpEAX4gd2opHMQTmUTPD1zVIZPgyj8MWfJDoDhDfk9W945gloGR6pf-0efYh8lO2F3n3n-XjiKWLRejKHnjetVb-oCOk_dJnUe_Gm/s1600/Dos_Batch_Set_1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
但我們並不想要這個星期幾的字串，而且也不想要&quot;/&quot;。所以可以用如下的指令來取得20121003的字串：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@echo off&lt;br /&gt;
REM 產生日期參數&lt;br /&gt;
@For /f &quot;tokens=1-3 delims=/ &quot; %%a in (&#39;date /t&#39;) do (set date=%%a%%b%%c)&lt;br /&gt;
@echo %date%&lt;br /&gt;
pause&lt;br /&gt;
&lt;br /&gt;
執行的結果如下：&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSkD0vyeDf6VrwduKNUX-w7QNGFpVxSkn54J9H4o0ncm-rCu8u_JJiCRJpL7iPzC6siy7jKBw29meZj8lUbyuAgEBySpAc3PWb-1_dW9Gfoo115Lk37ZDGtFpvxcZ4nrvgk0KJPeieAZlC/s1600/Dos_Batch_Set_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSkD0vyeDf6VrwduKNUX-w7QNGFpVxSkn54J9H4o0ncm-rCu8u_JJiCRJpL7iPzC6siy7jKBw29meZj8lUbyuAgEBySpAc3PWb-1_dW9Gfoo115Lk37ZDGtFpvxcZ4nrvgk0KJPeieAZlC/s1600/Dos_Batch_Set_2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
上面DOS指令中的For的意思就是將date /t的結果，依delims(分割字元)來區隔，注意這裏設定的分割字元有兩種，一種是&quot;/&quot;，另一種&quot; &quot;，是空格喔。接著它會取分割後的第一到第三個部份，這是tokens=1-3指定的。&lt;br /&gt;
&lt;br /&gt;
並且所分割出來的部份是以%%a開始命名變數，所以這三個分割出來的變數名稱就是%%a、%%b及%%c。&lt;br /&gt;
&lt;br /&gt;
分割完成後就執行do裏面指令的指令 set date=%%a%%b%%c。這樣就可以得到20121003的字串了。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
計算民國年&lt;/h3&gt;
有了西元年月日，接著就是要計算民國年了。前面我們得到的字串其內容為20121003，接著我們想要取得前面四碼。要如何取得前四碼呢?這又是個難題了。後來查了一下，正好看到有人提供一個方式：&lt;br /&gt;
&lt;br /&gt;
set tt=%date:~0,4%&lt;br /&gt;
&lt;br /&gt;
原來SET指令還有這種模式可以用來取得字串的某一部份，真是沒想到。後來就查了一下&lt;a href=&quot;http://www.computerhope.com/sethlp.htm&quot;&gt;SET指令的說明&lt;/a&gt;，才知道真有這種方式。&lt;br /&gt;
&lt;br /&gt;
不過取到了前四碼，那要如何進行數學運算呢?原來也是用SET就可以了：&lt;br /&gt;
&lt;br /&gt;
SET /A ChinaYear=%Year%-1&lt;br /&gt;
&lt;br /&gt;
在SET指令中加上/A的參數就是表示要用數學運算模式，如果沒加/A的話，它會當你是字串，就給你2012-1這樣的字串。&lt;br /&gt;
&lt;br /&gt;
所以總結以上的程式碼，要取得目前日期的民國年的話，完整的程式碼如下：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@echo off&lt;br /&gt;
REM 產生日期參數&lt;br /&gt;
@For /f &quot;tokens=1-3 delims=/ &quot; %%a in (&#39;date /t&#39;) do (set date=%%a%%b%%c)&lt;br /&gt;
@echo %date%&lt;br /&gt;
@set tt=%date:~0,4%&lt;br /&gt;
@echo %tt%&lt;br /&gt;
@set /A ChinaYear=%tt%-1911&lt;br /&gt;
@echo %ChinaYear%&lt;br /&gt;
&lt;br /&gt;
pause&lt;br /&gt;
&lt;br /&gt;
執行的結果：&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm2GSeYmfsYmItY95VcT0-phtruuImjKLnJ4wiFfuZ9STlDFznJak9aGeLpuAKHOT90SgaQTYmF6DxKrJjXKn-hj_9U-FK3jR-0vbuDqZgDHClwyhP6_1f0r11YF7t0YgKf0snn5bxcVYn/s1600/Dos_Batch_Set_3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm2GSeYmfsYmItY95VcT0-phtruuImjKLnJ4wiFfuZ9STlDFznJak9aGeLpuAKHOT90SgaQTYmF6DxKrJjXKn-hj_9U-FK3jR-0vbuDqZgDHClwyhP6_1f0r11YF7t0YgKf0snn5bxcVYn/s1600/Dos_Batch_Set_3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/1326961822017149687/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/10/dos.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/1326961822017149687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/1326961822017149687'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/10/dos.html' title='DOS批次檔中取得中華民國年份'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhajUqCa2DO8EpsaTQUklBZxbTYlhyR-wILQuK9fDTBpEAX4gd2opHMQTmUTPD1zVIZPgyj8MWfJDoDhDfk9W945gloGR6pf-0efYh8lO2F3n3n-XjiKWLRejKHnjetVb-oCOk_dJnUe_Gm/s72-c/Dos_Batch_Set_1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-1003103926795007042</id><published>2012-08-23T21:45:00.000+08:00</published><updated>2012-08-23T21:45:14.402+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WinServer"/><title type='text'>有Administrator權限卻無法用gacutil.exe安裝</title><content type='html'>今天發生了一件奇怪的事，在一台裝了Windows 2008 R2作業系統的伺服器上，新增了一個帳號，並將這個帳號加入到Administrators群組中。理論上用這個帳號登入的使用者，就等於有了管理員的權限，要安裝什麼軟體都是沒問題的才對。&lt;br /&gt;
&lt;br /&gt;
可是當用這組帳號登入後，開啟命令列視窗後，執行了gacutil.exe來安裝.NET開發出來的元件時，卻出現了以下授權不足的錯誤訊息：&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.minus.com/ibzIqSIBdkfI5B.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;409&quot; src=&quot;http://i.minus.com/ibzIqSIBdkfI5B.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
一開始以為是什麼UAC功能要關閉，結果關了也是沒效。後來才知道有人說要用管理員的身份來開啟命令列視窗才行。本來以為登入者具有管理員權限就可以了，沒想到在開啟命令列視窗時還要特別用管理員權限開啟才行。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.minus.com/iAdnDfetnwtjf.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://i.minus.com/iAdnDfetnwtjf.png&quot; width=&quot;508&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.minus.com/iqFnbLufcE5jO.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;410&quot; src=&quot;http://i.minus.com/iqFnbLufcE5jO.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
如果不是用管理員權限開啟視窗的話，會發現在視窗上面是沒有管理員的字樣的：&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.minus.com/ibvBU4LuvluFKb.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;408&quot; src=&quot;http://i.minus.com/ibvBU4LuvluFKb.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/1003103926795007042/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/08/administratorgacutilexe.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/1003103926795007042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/1003103926795007042'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/08/administratorgacutilexe.html' title='有Administrator權限卻無法用gacutil.exe安裝'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-6718965581873565682</id><published>2012-08-21T21:30:00.000+08:00</published><updated>2012-08-21T21:30:01.721+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PERL"/><title type='text'>perl正規表示式(regular express)初體驗</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
# 2012/8/21 Justin&lt;br /&gt;
# test&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;# Regex查詢時，=後要直接接~，不然就match不到&lt;/span&gt;&lt;br /&gt;
my($rawData) = &quot;HintA&quot;;&lt;br /&gt;
$rawData = ~m/(H.*)/;&lt;br /&gt;
print( $1 . &quot;\n&quot; );&lt;br /&gt;
&lt;br /&gt;
my($text) = &quot;HintA&quot;;&lt;br /&gt;
$text =~m/(H.*)/;&lt;br /&gt;
print $1 . &quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/6718965581873565682/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/08/perlregular-express.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/6718965581873565682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/6718965581873565682'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/08/perlregular-express.html' title='perl正規表示式(regular express)初體驗'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-3175291065672984648</id><published>2012-08-02T21:05:00.004+08:00</published><updated>2012-08-02T21:05:56.956+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>設定及存取Android專案中的Asset資源</title><content type='html'>最近要試寫一個Android的App，這個App需要使用到資料庫。只是一般程式一開始安裝後一定是沒有資料庫的，那第一份資料庫要由何而來呢?&lt;br /&gt;
&lt;br /&gt;
一開始我天真的想法就是利用Android內建的&lt;a href=&quot;http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html&quot;&gt;SQLiteOpenHelper&lt;/a&gt;，先繼承它，並改寫其中的幾個函式，當程式一執行時會被呼叫到，此時再產生一個空白的資料庫，並執行一堆產生資料表的SQL指令。哈，這方式雖然可行，但如果資料庫裏的資料表很多的話，真的先程式碼就要寫一堆了。&lt;br /&gt;
&lt;br /&gt;
一直在想說難道我不能內嵌一份最原始的SQLite資料庫檔案，當程式第一次執行時，就以這份為初始資料庫來給使用者使用嗎?&lt;br /&gt;
&lt;br /&gt;
後來查了一下網路上的資料，參考別人的作法，總算是看到也有人&lt;a href=&quot;http://stackoverflow.com/questions/7081756/working-with-sqlite-database-in-android-programming&quot;&gt;有同樣的實作方式&lt;/a&gt;，而且相關的程式碼都有了。當然就直接拿來使用囉。&lt;br /&gt;
&lt;br /&gt;
只是一時不察，在這段程式碼的CopyDataBase()中有一段是：&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;default prettyprint&quot; style=&quot;background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; text-align: left; vertical-align: baseline; width: auto;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span class=&quot;com&quot; style=&quot;background-color: transparent; border: 0px; color: grey; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;//Open your local db as the input stream&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-color: transparent; border: 0px; color: #2b91af; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;InputStream&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt; myInput &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt; context&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;getAssets&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;DATABASE_NAME&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
一開始我以為context.getAssets()是存取App的根目錄，所以open()時會自動取得我放在根目錄下面的那份原始資料庫檔案。結果進行debug時發現在這段都會得到一個無法找到檔案的Exception。&lt;br /&gt;
&lt;br /&gt;
後來查了一下有關getAssets()函式的說明，才知道原來這個函式會傳回一個&lt;a href=&quot;http://developer.android.com/reference/android/content/res/AssetManager.html&quot;&gt;AssetManager&lt;/a&gt;，透過這個AssetManager可以存取在專案中的一個Assets區塊。&lt;br /&gt;
&lt;br /&gt;
所以一開始需要將原始的那份資料庫檔案放到這個Assets區塊中才能正常讀取並複製一份給第一次安裝App的使用者來使用。&lt;br /&gt;
&lt;br /&gt;
只是查了很久，查不太到有人在說明如何將一份既有的SQLite資料庫檔案放到這個Assets區塊中來使用。於是就自行摸索了一下，總算是成功了。為了怕日後忘記，趕快在Blog中記錄一下。&lt;br /&gt;
&lt;br /&gt;
首先在Ecllipse的Workspace中找到你的Android App專案，並找到它的assets區，如下圖所示。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYRs3cCBzLa7zA9zDrVPysOXtjWYoG88M1YwYO6ejggYU60LLbAUeWWfIoHG9C63dy-GhePtSc1mg6KEklLBrmArPEt2LvpQG-vODnaXT70vgeMaSanbO6-fWY6BdV9nm9XZ_sj26MjCS2/s1600/Android_Asset_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYRs3cCBzLa7zA9zDrVPysOXtjWYoG88M1YwYO6ejggYU60LLbAUeWWfIoHG9C63dy-GhePtSc1mg6KEklLBrmArPEt2LvpQG-vODnaXT70vgeMaSanbO6-fWY6BdV9nm9XZ_sj26MjCS2/s400/Android_Asset_1.png&quot; width=&quot;222&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
在assets區中按下滑鼠右鍵，會出現如下圖的選項，請選[New]-&amp;gt;[File]以便新增一個檔案。&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguWlE4iM0NUpBnCutOS6Rs1loJmIYwlgdh-2mOV91NQhbNuEFXt5HJuLAnHxB_jv8sw7_jj2XN-uTacrNVlN7FKgoL2J5v981h67nG36h6a8kNH1ArC4mnHDBSB-K-rlF9MTIXGD8shlQV/s1600/Android_Asset_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;371&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguWlE4iM0NUpBnCutOS6Rs1loJmIYwlgdh-2mOV91NQhbNuEFXt5HJuLAnHxB_jv8sw7_jj2XN-uTacrNVlN7FKgoL2J5v981h67nG36h6a8kNH1ArC4mnHDBSB-K-rlF9MTIXGD8shlQV/s400/Android_Asset_2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
在出現的對話視窗中，輸入等等匯入的檔案的名稱，例如我給的MyFile，並按下下面的[Advanced]，以便展開更多的選項，勾選[Link to file in ths file system] ，我想這是指要跟你本機電腦中的某個檔案連結起來。按下確認後，這樣你的App專案的assets區就會多一份資源中。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQudUWtdhiVNBUc4jdST53YPBmd-8IzdU6VUvzhdlqbQMChQ0L07uMnldCvCoh0fRjMFe3CDalmtVg8PSEbhsvSE8Md8bF1hdRyssD4xTc7atnnSb04Hzkfc-Ow3ngIdoXLXGPLfArGr3w/s1600/Android_Asset_3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQudUWtdhiVNBUc4jdST53YPBmd-8IzdU6VUvzhdlqbQMChQ0L07uMnldCvCoh0fRjMFe3CDalmtVg8PSEbhsvSE8Md8bF1hdRyssD4xTc7atnnSb04Hzkfc-Ow3ngIdoXLXGPLfArGr3w/s400/Android_Asset_3.png&quot; width=&quot;311&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
在你的專案程式碼中，如果要用context.getAssets().open()方式來開啟這份儲存於assets區的資源的話，可能要先取得它的完整名稱。取得的方式就是對剛剛加入的那份assets資源按下右鍵，出現的選單中有一項是[Copy Qualified Name]，選取它就可以複製到完整的名稱。&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2Ea7vTik1nmyxREdg2oWyxGxypc2aAG-ZlDQ11tV4GxfhSJi7zf2uzbI8dgk8_ZOiAm5qw7Tb708yXM8D_NBLUlSPftnwkcfNBW83yjNyKNwxKuNR8MxY2J-D2t9z32dbEeAsvPdAYtv/s1600/Android_Asset_4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2Ea7vTik1nmyxREdg2oWyxGxypc2aAG-ZlDQ11tV4GxfhSJi7zf2uzbI8dgk8_ZOiAm5qw7Tb708yXM8D_NBLUlSPftnwkcfNBW83yjNyKNwxKuNR8MxY2J-D2t9z32dbEeAsvPdAYtv/s400/Android_Asset_4.png&quot; width=&quot;257&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
將剛剛複製到的完整名稱貼到你的專案程式碼中，這樣就可以正常開啟並進行存取了。&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbTILU23sGI0xZYN3YwiICNNxODSEERZ8nDcXfb5nS4YiyFpoFcMkW0KqzTYnrBzk-aZ0nFklyB80VaZiavRiD1kjyLVYiKPVrsua2Wli9NrNpszBSLCitzwCDDVeI-xQQKtCYpW4pIB8j/s1600/Android_Asset_5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbTILU23sGI0xZYN3YwiICNNxODSEERZ8nDcXfb5nS4YiyFpoFcMkW0KqzTYnrBzk-aZ0nFklyB80VaZiavRiD1kjyLVYiKPVrsua2Wli9NrNpszBSLCitzwCDDVeI-xQQKtCYpW4pIB8j/s400/Android_Asset_5.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/3175291065672984648/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/08/androidasset.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/3175291065672984648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/3175291065672984648'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/08/androidasset.html' title='設定及存取Android專案中的Asset資源'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYRs3cCBzLa7zA9zDrVPysOXtjWYoG88M1YwYO6ejggYU60LLbAUeWWfIoHG9C63dy-GhePtSc1mg6KEklLBrmArPEt2LvpQG-vODnaXT70vgeMaSanbO6-fWY6BdV9nm9XZ_sj26MjCS2/s72-c/Android_Asset_1.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-8425054982057828590</id><published>2012-07-20T22:00:00.000+08:00</published><updated>2012-07-20T22:00:06.190+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><title type='text'>StatusStrip裏的text元件無法更新</title><content type='html'>一般在C#中要更新某個TextBox或Label，只要將它的Text屬性設定成新的值就可以即時在畫面上看到最新的資料。&lt;br /&gt;
&lt;br /&gt;
但今天使用到了一個StatusStrip裏的ToolStripStatusLabel元件，想要即時更新它的內容值時，同樣是指定了它的Text屬性，但並沒有即時更新。&lt;br /&gt;
&lt;br /&gt;
查了一下網路上的解法，好多人都是說要用&lt;br /&gt;
&lt;br /&gt;
this.Refresh();&lt;br /&gt;
&lt;br /&gt;
是可以這樣啦，只是這樣是叫整個Form本身去更新，更新的範圍會不會太大了。如果呼叫的頻率太高的話，我想效能上應該會有所影響。&lt;br /&gt;
&lt;br /&gt;
後來想說去找一下ToolStripStatusLabel元件本身是否有Refresh()函式可以呼叫。結果是沒有。難怪大家都沒辦法，只好對整個Form來下手。&lt;br /&gt;
&lt;br /&gt;
順手看了一下，那StatusStrip本身有沒有Refresh()呢，沒想到還真的有耶，那就叫StatusStrip去更新就好啦，不用叫到整個Form去更新。&lt;br /&gt;
&lt;br /&gt;
問題就解決囉。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/8425054982057828590/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/07/statusstriptext.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/8425054982057828590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/8425054982057828590'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/07/statusstriptext.html' title='StatusStrip裏的text元件無法更新'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-8096788157309096104</id><published>2012-05-29T22:32:00.000+08:00</published><updated>2012-05-29T22:32:06.028+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>沒有預設建構子無法對List&lt;&gt;進行xml序列化</title><content type='html'>突然需要寫個xml的設定檔，於是就簡單寫了一個類別TestXml，其中含有一個List&amp;lt;TestA&amp;gt;的成員。TestA也是個簡單的類別，只有兩個屬性及一個帶有參數的建構子。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiprExCLmhCAtIkMhpVXCsBEjQwBiNbFN5SYVQCIIG2h8rDighu5I2FsqQsC6l8qshZzHJewx_zpJ9M2BJWQ7Cw-55Mmw_-v3os8IyQvaVz1rFNXINj2Sbt-M7eJC6_XPqt13L5CK1zitbh/s1600/XmlSerialize_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;83&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiprExCLmhCAtIkMhpVXCsBEjQwBiNbFN5SYVQCIIG2h8rDighu5I2FsqQsC6l8qshZzHJewx_zpJ9M2BJWQ7Cw-55Mmw_-v3os8IyQvaVz1rFNXINj2Sbt-M7eJC6_XPqt13L5CK1zitbh/s400/XmlSerialize_1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUWPnkuJ9gL1aIZIsUoxYUOeJPBXjGpNP6q3ql8WiF8PulBfavsBpkUU6ouyxwNK_YaroohnzjfpNKr5mBLBklXsfSOr8MEun2AcPRWgpVXa_Qe6ClHSFdeHQkBV72WwF6KsopPWou9qPv/s1600/XmlSerialize_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUWPnkuJ9gL1aIZIsUoxYUOeJPBXjGpNP6q3ql8WiF8PulBfavsBpkUU6ouyxwNK_YaroohnzjfpNKr5mBLBklXsfSOr8MEun2AcPRWgpVXa_Qe6ClHSFdeHQkBV72WwF6KsopPWou9qPv/s400/XmlSerialize_2.png&quot; width=&quot;336&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
針對Xml的序列化也是簡單地使用XmlSerialize類別來處理，程式碼如下。但是一執行就出現了Exception。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7B-4enPp5eVGF5e08qY5cTMpZd2fIB_CdyKoS5itVMwR0780xlfZtrf3miYz1SReWax659hhT9o-Z9iOP1x39d5lX-hcb5e7I8i1aXtBANM_iXe_dE_5fcthGm8ZEFw5fLl1BBXaHkhaO/s1600/XmlSerialize_3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;321&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7B-4enPp5eVGF5e08qY5cTMpZd2fIB_CdyKoS5itVMwR0780xlfZtrf3miYz1SReWax659hhT9o-Z9iOP1x39d5lX-hcb5e7I8i1aXtBANM_iXe_dE_5fcthGm8ZEFw5fLl1BBXaHkhaO/s640/XmlSerialize_3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Exception的內容是這樣寫的，它說無法序列化List&amp;lt;&amp;gt;中的型別。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAQYiK1SylVBTE_IeaxTUDOUU0bt7Go6_WRtXkRIdT1BGBWtjuxCxqatyHfPywEVAlCDq-dpli0lSGiY5MtpOQWWs-u0Q2OKT3aGum6Y0VHQ376U6WGZxXdlPKc0KwBgyJToBLnTjKbvCa/s1600/XmlSerialize_4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAQYiK1SylVBTE_IeaxTUDOUU0bt7Go6_WRtXkRIdT1BGBWtjuxCxqatyHfPywEVAlCDq-dpli0lSGiY5MtpOQWWs-u0Q2OKT3aGum6Y0VHQ376U6WGZxXdlPKc0KwBgyJToBLnTjKbvCa/s640/XmlSerialize_4.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
一開始以為是TestA類別上要加上[Serializable]，結果加了也沒用。後來又加了XmlArray、XmlArrayItem等等的，還是沒用。&lt;br /&gt;
&lt;br /&gt;
最後就放棄List&amp;lt;&amp;gt;，先針對單一的類別TestA來進行Xml序列化，才知道原來是TestA這個類別沒有預設建構子(就是不帶任何參數的建構子)。找了半天，原來是這個問題。一切只能說List&amp;lt;TestA&amp;gt;無法序列化時的錯誤訊息也太不直覺了吧。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/8096788157309096104/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/05/list-xml.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/8096788157309096104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/8096788157309096104'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/05/list-xml.html' title='沒有預設建構子無法對List&lt;&gt;進行xml序列化'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiprExCLmhCAtIkMhpVXCsBEjQwBiNbFN5SYVQCIIG2h8rDighu5I2FsqQsC6l8qshZzHJewx_zpJ9M2BJWQ7Cw-55Mmw_-v3os8IyQvaVz1rFNXINj2Sbt-M7eJC6_XPqt13L5CK1zitbh/s72-c/XmlSerialize_1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-5479844726620745647</id><published>2012-01-11T22:00:00.000+08:00</published><updated>2012-01-11T22:00:00.476+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="VS2010"/><title type='text'>IntelliSense: PCH warning: header stop</title><content type='html'>&lt;br /&gt;
下圖中的程式碼基本上語法都沒有錯，但在VS2010中卻出現了一項錯誤訊息：IntelliSense: PCH警告:標的停駐點不可以在巨集 ...。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://img705.imageshack.us/img705/3259/intellisensepchheaderst.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;256&quot; src=&quot;http://img705.imageshack.us/img705/3259/intellisensepchheaderst.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
查了一下MSDN剛好也有人反映這項問題，不過是英文的錯誤訊息(&lt;a href=&quot;http://connect.microsoft.com/VisualStudio/feedback/details/665628/intellisense-pch-warning-header-stop-cannot-be-in-a-macro-or-if-block-an-intellisense-pch-file-was-not-generated&quot;&gt;IntelliSense: PCH warning: header stop cannot be in a macro or #if block. An intellisense PCH file was not generated.&lt;/a&gt;)，難怪用中文都Google不到。&lt;br /&gt;
&lt;br /&gt;
看來好像是在專案建立時如果選擇使用預先編譯的模式的話，在你新增的標頭檔還沒有任何程式碼引用到時，就會出現這個錯誤訊息。只要一旦你開始在任何一份程式碼中開始引用這份新的標頭檔後，就會開始自動地產生Intellisense的資訊，這項錯誤也會自動消失。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/5479844726620745647/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/01/intellisense-pch-warning-header-stop.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/5479844726620745647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/5479844726620745647'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/01/intellisense-pch-warning-header-stop.html' title='IntelliSense: PCH warning: header stop'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-6676068045896794737</id><published>2012-01-04T22:00:00.000+08:00</published><updated>2012-01-04T22:00:01.529+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><title type='text'>System.Data.OracleClient將過時</title><content type='html'>最近開始要試著使用.NET C#來存取Oracle資料庫。基本上所使用的物件跟MSSQL Server的差不多，只是由SqlConnection改為OracleConnection這類的。&lt;br /&gt;
&lt;br /&gt;
只是一開始發現.NET中也有提供Oracle資料庫的Provider，所以就直接使用System.Data.OracleClient。程式碼編譯是沒有問題，但卻出現了警告，主要是說&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/77d8yct7.aspx&quot;&gt;這組函式庫即將會過時&lt;/a&gt;。看MSDN網站是說在.NET 4.0中還會支援，但未來就不一定了，所以希望大家先改為使用第三方函式庫的方式來存取Oracle資料庫。&lt;br /&gt;
&lt;br /&gt;
如果是要用第三方函式庫的話，當然最好的方式就是找原廠的函式庫囉。在Oracle的官網中可找到給Visual Studio 使用的Oracle函式庫開發工具：&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html&quot;&gt;ODAC 11.2 Release 4 and Oracle Developer Tools for Visual Studio (11.2.0.3.0)&lt;/a&gt;

&lt;br /&gt;
&lt;br /&gt;
安裝成功後，在加入參考時應該可以找到Oracle.DataAccess這個函式庫。程式碼基本上都不用改，直接就可以編譯了。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://img14.imageshack.us/img14/3442/oracledataaccesslib.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;311&quot; src=&quot;http://img14.imageshack.us/img14/3442/oracledataaccesslib.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Oracle資料庫的連線字串跟MS SQL的也有點不同：&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.connectionstrings.com/oracle&quot;&gt;string connStr = @&quot;Data Source=10.6.111.11;User Id=tx;Password=tx;&quot;;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/6676068045896794737/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2012/01/systemdataoracleclient.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/6676068045896794737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/6676068045896794737'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2012/01/systemdataoracleclient.html' title='System.Data.OracleClient將過時'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5043951312037783911.post-2281471513930493729</id><published>2011-12-07T22:00:00.000+08:00</published><updated>2011-12-07T22:00:01.342+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><title type='text'>用捷徑方式執行需帶入命令列參數的Windows Form程式</title><content type='html'>假設我們有個需要在執行時帶入一些命令列參數的Windows Form程式的話，以前我的做法就是會另外寫一個批次檔來呼叫這個Windows Form程式，並寫好所需的命令列參數。例如：&lt;br /&gt;
&amp;lt;Test.bat&amp;gt;&lt;br /&gt;
TITME Test&lt;br /&gt;
Test.exe –debug&lt;br /&gt;
&lt;br /&gt;
這種方式雖然可以正常地執行，但就是會再多一個命令列視窗出現，只有在那個它所執行的Windows Form程式被關閉時，這個執行批次檔而產生的命令列視窗才會一併被關閉。&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=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://img580.imageshack.us/img580/2136/shortcutwithcommandpara.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://img580.imageshack.us/img580/2136/shortcutwithcommandpara.png&quot; width=&quot;313&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
在新建的捷徑上按右鍵，選「內容」來進行修改。在「目標」中加上你需要的命令列參數。&lt;br /&gt;
按下「套用」後，直接執行這個捷徑就可以達到我們一開始的目的了，在執行Windows Form程式時帶入所需的命令列參數。</content><link rel='replies' type='application/atom+xml' href='http://proglab-justin.blogspot.com/feeds/2281471513930493729/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://proglab-justin.blogspot.com/2011/12/windows-form.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/2281471513930493729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5043951312037783911/posts/default/2281471513930493729'/><link rel='alternate' type='text/html' href='http://proglab-justin.blogspot.com/2011/12/windows-form.html' title='用捷徑方式執行需帶入命令列參數的Windows Form程式'/><author><name>Justin</name><uri>http://www.blogger.com/profile/07177859288022362977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_E6srdmH3iVM/S5w9Kr7NfyI/AAAAAAAAAMU/1uV-YAqnIzQ/S220/Justin1021@gmail.com_319ff280.jpg'/></author><thr:total>0</thr:total></entry></feed>