<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>正直紳士們的社交場</title>
	
	<link>http://b-plurkers.com</link>
	<description>聽說是某謎教的聚會場所，不過沒人會承認這一點！</description>
	<lastBuildDate>Fri, 27 Jan 2012 05:59:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/b_plurkers" /><feedburner:info uri="b_plurkers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><item>
		<title>ASP.NET – 輸出HTML到檔案</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/lkQBf_32opU/</link>
		<comments>http://b-plurkers.com/2012/01/27/asp-net-%e8%bc%b8%e5%87%bahtml%e5%88%b0%e6%aa%94%e6%a1%88/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 05:59:57 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2012/01/27/asp-net-%e8%bc%b8%e5%87%bahtml%e5%88%b0%e6%aa%94%e6%a1%88/</guid>
		<description><![CDATA[一般的ASP.NET網頁，當使用者送出一個Request，後端就會跑整個ASP.NET程式，然後讀資料庫有的沒的，最後再輸出成網頁。 某些情況下，資料並不會一直更動，重覆跑後端的邏輯及讀取資料庫，對效能、能源也是種浪費，這時候就會使用快取的方式，來減低伺服器的負擔。但在下認為，直接輸出HTML而不跑後端程式是最完美的作法，當然這是不太可能的，至少在MVC的架構下，還是得跑一個Controller邏輯。但無論如何，後端程式輸出HTML到檔案，後續就直接讀取該檔案這樣的作法，個人覺得還是值得研究的。 接下來，就示範如何在ASP.NET程式裡，輸出HTML到檔案。開始之前，建議先閱讀下列文章，了解一下ASP.NET的生命週期。 ASP.NET 網頁生命週期概觀 http://msdn.microsoft.com/zh-tw/library/ms178472(v=vs.100).aspx &#160; 程式碼不多。 &#160; 是的，程式碼只有這樣，而且還是抄黑暗大的(艸)。 http://blog.darkthread.net/post-2008-05-10-replace-html-of-asp-net.aspx]]></description>
			<content:encoded><![CDATA[<p>一般的ASP.NET網頁，當使用者送出一個Request，後端就會跑整個ASP.NET程式，然後讀資料庫有的沒的，最後再輸出成網頁。</p>
<p>某些情況下，資料並不會一直更動，重覆跑後端的邏輯及讀取資料庫，對效能、能源也是種浪費，這時候就會使用快取的方式，來減低伺服器的負擔。但在下認為，直接輸出HTML而不跑後端程式是最完美的作法，當然這是不太可能的，至少在MVC的架構下，還是得跑一個Controller邏輯。但無論如何，後端程式輸出HTML到檔案，後續就直接讀取該檔案這樣的作法，個人覺得還是值得研究的。</p>
<p><span id="more-1846"></span>
<p>接下來，就示範如何在ASP.NET程式裡，輸出HTML到檔案。開始之前，建議先閱讀下列文章，了解一下ASP.NET的生命週期。</p>
<h3>ASP.NET 網頁生命週期概觀</h3>
<p><a href="http://msdn.microsoft.com/zh-tw/library/ms178472(v=vs.100).aspx">http://msdn.microsoft.com/zh-tw/library/ms178472(v=vs.100).aspx</a></p>
<p>&#160;</p>
<p>程式碼不多。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120127_134919.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-27_134919" border="0" alt="2012-01-27_134919" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120127_134919_thumb.png" width="442" height="391" /></a> </p>
<p>&#160;</p>
<p>是的，程式碼只有這樣，而且還是抄黑暗大的(艸)。</p>
<p><a href="http://blog.darkthread.net/post-2008-05-10-replace-html-of-asp-net.aspx">http://blog.darkthread.net/post-2008-05-10-replace-html-of-asp-net.aspx</a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/lkQBf_32opU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/01/27/asp-net-%e8%bc%b8%e5%87%bahtml%e5%88%b0%e6%aa%94%e6%a1%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/01/27/asp-net-%e8%bc%b8%e5%87%bahtml%e5%88%b0%e6%aa%94%e6%a1%88/</feedburner:origLink></item>
		<item>
		<title>NoSQL的選擇：mongoDB</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/dvGcUZRRmYk/</link>
		<comments>http://b-plurkers.com/2012/01/08/nosql%e7%9a%84%e9%81%b8%e6%93%87%ef%bc%9amongodb/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 10:13:28 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2012/01/08/nosql%e7%9a%84%e9%81%b8%e6%93%87%ef%bc%9amongodb/</guid>
		<description><![CDATA[NoSQL這玩意兒最近算蠻流行的，而且噗浪也有在用，許多大型的網站其實也有漸漸在用NoSQL相關的技術，關於這方面的資訊，可以參考iThome的報導： NoSQL解決資料庫暴量的新方法 NoSQL相關的選擇其實很多，本篇文章將會針對mongoDB做介紹。 mongoDB下載位址 .NET Driver mongoDB下載之後，請自行解壓縮，並且在C槽底下建立data\db兩層資料夾，此為預設值。使用mongoDB，就把它想成是一個大型的表格，取得資料要透過兩個key：db name、collection name。接下來就示範它的用法。 &#160; 首先，建立一個交換資料的類別。 &#160; 接著建立MongoService類別，用來包裝mongoDB的API。下列是建構子，設定好連線字串以及db、collection。 &#160; 接下來是Dispose，用來關閉連線。 &#160; 然後是RemoveAll，方便清除所有的資料。 &#160; AddObject是用來新增資料，這裡會用到Reflection的技巧。 &#160; 測試程式碼，這裡只做5筆資料的新增，然後再一次取出來並印出field1的值。 &#160; 執行結果。]]></description>
			<content:encoded><![CDATA[<p>NoSQL這玩意兒最近算蠻流行的，而且噗浪也有在用，許多大型的網站其實也有漸漸在用NoSQL相關的技術，關於這方面的資訊，可以參考iThome的報導：</p>
<p><a href="http://www.ithome.com.tw/itadm/article.php?c=63360" target="_blank"><font color="#ff0000">NoSQL解決資料庫暴量的新方法</font></a></p>
<p>NoSQL相關的選擇其實很多，本篇文章將會針對mongoDB做介紹。</p>
<p><span id="more-1843"></span>
<p><a href="http://www.mongodb.org/downloads" target="_blank"><font color="#ff0000">mongoDB下載位址</font></a></p>
<p><a href="http://www.mongodb.org/display/DOCS/CSharp+Language+Center" target="_blank"><font color="#ff0000">.NET Driver</font></a></p>
<p>mongoDB下載之後，請自行解壓縮，並且在C槽底下建立data\db兩層資料夾，此為預設值。使用mongoDB，就把它想成是一個大型的表格，取得資料要透過兩個key：db name、collection name。接下來就示範它的用法。</p>
<p>&#160;</p>
<p>首先，建立一個交換資料的類別。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_174907.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_174907" border="0" alt="2012-01-08_174907" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_174907_thumb.png" width="293" height="139" /></a></p>
<p>&#160;</p>
<p>接著建立MongoService類別，用來包裝mongoDB的API。下列是建構子，設定好連線字串以及db、collection。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175003.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_175003" border="0" alt="2012-01-08_175003" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175003_thumb.png" width="539" height="341" /></a></p>
<p>&#160;</p>
<p>接下來是Dispose，用來關閉連線。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175020.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_175020" border="0" alt="2012-01-08_175020" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175020_thumb.png" width="262" height="83" /></a></p>
<p>&#160;</p>
<p>然後是RemoveAll，方便清除所有的資料。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175039.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_175039" border="0" alt="2012-01-08_175039" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175039_thumb.png" width="657" height="207" /></a></p>
<p>&#160;</p>
<p>AddObject是用來新增資料，這裡會用到Reflection的技巧。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175113.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_175113" border="0" alt="2012-01-08_175113" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175113_thumb.png" width="516" height="217" /></a></p>
<p>&#160;</p>
<p>測試程式碼，這裡只做5筆資料的新增，然後再一次取出來並印出field1的值。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175132.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_175132" border="0" alt="2012-01-08_175132" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175132_thumb.png" width="758" height="303" /></a></p>
<p>&#160;</p>
<p>執行結果。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175151.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-01-08_175151" border="0" alt="2012-01-08_175151" src="http://b-plurkers.com/wp-content/uploads/2012/01/20120108_175151_thumb.png" width="270" height="169" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/dvGcUZRRmYk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/01/08/nosql%e7%9a%84%e9%81%b8%e6%93%87%ef%bc%9amongodb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/01/08/nosql%e7%9a%84%e9%81%b8%e6%93%87%ef%bc%9amongodb/</feedburner:origLink></item>
		<item>
		<title>要加薪</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/leYCy7ORWjE/</link>
		<comments>http://b-plurkers.com/2011/12/27/%e8%a6%81%e5%8a%a0%e8%96%aa/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 02:06:54 +0000</pubDate>
		<dc:creator>redjackwong</dc:creator>
				<category><![CDATA[redjackwong]]></category>
		<category><![CDATA[壞掉了]]></category>
		<category><![CDATA[正經文]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/?p=1826</guid>
		<description><![CDATA[刚提笔就担心这篇会不会被和谐掉，倒不是因为内容有多敏感，而是因为这个标题…… 笑，言归正传。 之所以有这篇文章，主要是受了两方面的触动。 第一方面是今年我的加薪幅度，这个现在受限于我的保密协议，不方便透露，总之是一个触动。 第二方面是今天看了韩少的The“第三篇”，也是在要XX，我想，每个人各自所要的东西并不相同。他在他的位置想要的是XX，而我想要的，大概就只是卑微的薪水而已了吧。 我，是一个程序员。 就是那种说好听点是软件工程师，说难听点是死写代码的宅男那种职业。 也许你会“哦~~”的恍然大悟，也许你会觉得这个行业很神秘。不管怎么样，下面我都会为你娓娓道来。 在我念大学之前，软件工程师是一个很吃香的行业。怎么个吃香法呢？这么说吧，那个时候的月薪均价是两千，而软件工程师的月薪均价差不多有八千，这还是涨之前的。 在我念大学的时候，我知道了什么叫泡沫，与此同时，这个泡沫破裂了。但有无数无数的人已经进入到了这个圈子。怎么个无数法呢？我再举一个栗子例子，某条街上的霓虹招牌不小心掉了下来，砸死了10个人，这里面有8个是本科生，6的是学计算机的。 在毕业的时候，我成了学校该专业10%不到的真正对口就业的毕业生之一。幸或不幸？ 因为悲剧，从现在开始。 以下说的，都是软件业的现状。 软件业门槛很低，稍微参加一个什么红鸟绿鸟培训就可以算是半个程序员了，这导致了这一行涌现了无数连基础知识都不具备只喜欢玩传奇或者用工具破密码自以为了不得的愣头青（我不是鄙视任何人，因为他们的下场也很惨）。他们打着低价的旗号到处去应聘。 于是，水浑了。。 我初到上海的时候，试用期工资是2880元，那一年是2006年。 同一届应届研究生的工资大概是6千上下。 是的，差一倍。 不因为技术优劣，不因为能力高低，就因为是研究生和本科生。 （*全文以外企行情作为参考，不涉及私企） 事实上，很多研究生是当年找不到工作，被迫考研的。而我，是放弃了保研的。 经理知道这个事情吗？当然。除非你不提，而我，提了。 提了的结果是你会被“重”用。你拿着比别人少一半的工资，做着比别人困难一倍的工作，但是优秀的你依然完成得比别人出色。 然后，你会被更加“重”用 —— 因为你太厉害，很多没有任何人能完成的任务一一被分配给你，你艰苦的熬着，因为涨薪 —— 要等到年底。 年底到了，你得了第一名，工资是涨的最多的，撒花~ 然后经理开始跟你谈话：“公司今年涨薪的budget已经下来了，就是这么多，给你涨的多了，别的同事就会少，你觉得谁应该少拿呢？” 我：“……” 经理：“而且公司每年涨薪有限制，最高不能超过15%，你今年已经是最高了。” …… 除了谢谢，我还能说什么。 于是我涨得最多 —— 15% —— ￥3312 绩效最低的研究生涨得最少 —— %5 —— ￥6300 如果我每年都拿第一，研究生同事每年都不争气，那么我10年左右能够赶上他，对的，10年。 当然，作为优秀员工，也不是没有优势的。优势就是，在大裁员中会幸存下来。 果然，后来公司大裁员，我是我们这一批近200人中唯一剩下的本科生，研究生更被裁去无数。 这样的结果是我继续留在这儿盼着年底加薪。 而被裁掉的人拿着6个月的补偿工资去玩儿了3个月，然后换到另外一家公司，拿着跳槽+20%的薪水。 开始想骂娘了是不？ 这才刚开始而已。 紧接着，新员工还要选择所谓职业发展方向，我们这些技术牛人当然选择技术路线，就算你不选，经理也会说服你选。那些技术做不下去的只能选择所谓的管理路线。 一年之后那些人全成了经理，工资翻了翻，还处处管着你。这也就罢了，可以忍。 但是技术不如你，又不能表现出来，只能到处说No，No你X啊，你来设计下试试看？ 就是这样。 [...]]]></description>
			<content:encoded><![CDATA[<p>刚提笔就担心这篇会不会被和谐掉，倒不是因为内容有多敏感，而是因为这个标题……<br />
笑，言归正传。</p>
<p>之所以有这篇文章，主要是受了两方面的触动。<br />
第一方面是今年我的加薪幅度，这个现在受限于我的保密协议，不方便透露，总之是一个触动。<br />
第二方面是今天看了韩少的The“第三篇”，也是在要XX，我想，每个人各自所要的东西并不相同。他在他的位置想要的是XX，而我想要的，大概就只是卑微的薪水而已了吧。</p>
<p>我，是一个程序员。<br />
就是那种说好听点是软件工程师，说难听点是死写代码的宅男那种职业。<br />
也许你会“哦~~”的恍然大悟，也许你会觉得这个行业很神秘。不管怎么样，下面我都会为你娓娓道来。</p>
<p>在我念大学之前，软件工程师是一个很吃香的行业。怎么个吃香法呢？这么说吧，那个时候的月薪均价是两千，而软件工程师的月薪均价差不多有八千，这还是涨之前的。<br />
在我念大学的时候，我知道了什么叫泡沫，与此同时，这个泡沫破裂了。但有无数无数的人已经进入到了这个圈子。怎么个无数法呢？我再举一个栗子例子，某条街上的霓虹招牌不小心掉了下来，砸死了10个人，这里面有8个是本科生，6的是学计算机的。<br />
在毕业的时候，我成了学校该专业10%不到的真正对口就业的毕业生之一。幸或不幸？</p>
<p>因为悲剧，从现在开始。<br />
以下说的，都是软件业的现状。</p>
<p>软件业门槛很低，稍微参加一个什么红鸟绿鸟培训就可以算是半个程序员了，这导致了这一行涌现了无数连基础知识都不具备只喜欢玩传奇或者用工具破密码自以为了不得的愣头青（我不是鄙视任何人，因为他们的下场也很惨）。他们打着低价的旗号到处去应聘。</p>
<p>于是，水浑了。。<span id="more-1826"></span></p>
<p>我初到上海的时候，试用期工资是2880元，那一年是2006年。<br />
同一届应届研究生的工资大概是6千上下。</p>
<p>是的，差一倍。</p>
<p>不因为技术优劣，不因为能力高低，就因为是研究生和本科生。<br />
（*全文以外企行情作为参考，不涉及私企）</p>
<p>事实上，很多研究生是当年找不到工作，被迫考研的。而我，是放弃了保研的。</p>
<p>经理知道这个事情吗？当然。除非你不提，而我，提了。<br />
提了的结果是你会被“重”用。你拿着比别人少一半的工资，做着比别人困难一倍的工作，但是优秀的你依然完成得比别人出色。<br />
然后，你会被更加“重”用 —— 因为你太厉害，很多没有任何人能完成的任务一一被分配给你，你艰苦的熬着，因为涨薪 —— 要等到年底。</p>
<p>年底到了，你得了第一名，工资是涨的最多的，撒花~</p>
<p>然后经理开始跟你谈话：“公司今年涨薪的budget已经下来了，就是这么多，给你涨的多了，别的同事就会少，你觉得谁应该少拿呢？”<br />
我：“……”<br />
经理：“而且公司每年涨薪有限制，最高不能超过15%，你今年已经是最高了。”<br />
……<br />
除了谢谢，我还能说什么。</p>
<p>于是我涨得最多 —— 15% —— ￥3312<br />
绩效最低的研究生涨得最少 —— %5 —— ￥6300</p>
<p>如果我每年都拿第一，研究生同事每年都不争气，那么我10年左右能够赶上他，对的，10年。</p>
<p>当然，作为优秀员工，也不是没有优势的。优势就是，在大裁员中会幸存下来。<br />
果然，后来公司大裁员，我是我们这一批近200人中唯一剩下的本科生，研究生更被裁去无数。<br />
这样的结果是我继续留在这儿盼着年底加薪。<br />
而被裁掉的人拿着6个月的补偿工资去玩儿了3个月，然后换到另外一家公司，拿着跳槽+20%的薪水。</p>
<p>开始想骂娘了是不？<br />
这才刚开始而已。</p>
<p>紧接着，新员工还要选择所谓职业发展方向，我们这些技术牛人当然选择技术路线，就算你不选，经理也会说服你选。那些技术做不下去的只能选择所谓的管理路线。<br />
一年之后那些人全成了经理，工资翻了翻，还处处管着你。这也就罢了，可以忍。<br />
但是技术不如你，又不能表现出来，只能到处说No，No你X啊，你来设计下试试看？</p>
<p>就是这样。</p>
<p>跳槽！！<br />
X的，做不下去了还不能跳槽吗？</p>
<p>当然可以，不过跳槽可得看好时间。<br />
因为其实招聘，是有指标的。</p>
<p>我跳槽的时候，是该部门前一两个员工，业内不景气，招聘也完全没有指标压力，经过重重重重重重重重面试，才拿到一个合适的薪水。<br />
后来，到了年中，招聘没有起色，指标达不到。怎么办？有办法：<br />
“降低面试难度，提高薪水引诱，总之人招够再说！”</p>
<p>于是你看到一个两个三个人坐到了你身边，他们经过比你轻松很多的面试，却拿着比你高很多的工资。</p>
<p>抱怨？</p>
<p>你还不能抱怨，因为工资不是公开的 —— 对了，工资是不能公开的！</p>
<p>我不知道私企如何，外企的工资都是不能公开的，这才是万恶之源。<br />
为什么不能公开？隐私？并不是！因为这是企业用来牵制你的工具，因为他们怕：<br />
怕你知道了现状会离开，怕还没榨干你就被你发现了猫腻。</p>
<p>如果不怕，为什么不每个人把工资亮出来，按绩效排，让每个人安心？<br />
走，找经理去！</p>
<p>谈判？</p>
<p>所有谈判的结果只有一个：<br />
你，会得到一个承诺。</p>
<p>承诺？<br />
等到年底，涨薪budget又来了，又是一轮之前的谈话。死循环。你不能说让谁少拿工资，于是只能任人均分。</p>
<p>说了这么多，还没说到销售呢……如果要说销售……我还可以说这么多。<br />
但本文不希望行业互相攻击，只希望软件业自律，重视软件业的灵魂：技术人员。</p>
<p>技术人员不是不知道行业间的差距，不是不聪明做不来其他行业，他们之所以仍然选择在这一行熬着是因为他们有自己的梦想。</p>
<p><strong>这个梦想不是你们用来要挟的工具！</strong></p>
<p>我们的诉求很简单：要！加！薪！</p>
<p>后记：<br />
我不知道程序员有没有行业协会，如果有的话，你们做得很差，因为我从来没觉得你保护了我。<br />
如果没有，仅以此文作为呼吁建立程序员行业协会的破砖 —— 大家必须团结起来。</p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/leYCy7ORWjE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/12/27/%e8%a6%81%e5%8a%a0%e8%96%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/12/27/%e8%a6%81%e5%8a%a0%e8%96%aa/</feedburner:origLink></item>
		<item>
		<title>Windows Metro App – Toast Notification</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/anWfTqsoxSY/</link>
		<comments>http://b-plurkers.com/2011/12/17/windows-metro-app-toast-notification/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 10:14:05 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2011/12/17/windows-metro-app-toast-notification/</guid>
		<description><![CDATA[在傳統的WinForm中，如果程式要顯示訊息視窗，方法是呼叫MessageBox的Show函式。而在Metro App裡，是使用所謂的Toast Notification，也就是即時訊息。它的使用方法比較特別，是用利XML設定要顯示的訊息。底下示範使用方法。 Demo程式的介面，一個TextBlock以及Button，TextBlock用來顯示XML文字。 &#160; 底下是Click方法，程式第一行是取得XML的樣板，參數是ToastTemplateType.ToastText04，它可以設定三行的訊息，將訊息設定好之後，呼叫ToastNotification物件的CreateToastNotifier().Show方法。 &#160; 執行畫面。按下按鈕後，會顯示設定的XML。 &#160; 而程式的右下角就會顯示訊息，而右下角的圖案是程式本身的圖示。]]></description>
			<content:encoded><![CDATA[<p>在傳統的WinForm中，如果程式要顯示訊息視窗，方法是呼叫MessageBox的Show函式。而在Metro App裡，是使用所謂的Toast Notification，也就是即時訊息。它的使用方法比較特別，是用利XML設定要顯示的訊息。底下示範使用方法。</p>
<p><span id="more-1824"></span>
<p>Demo程式的介面，一個TextBlock以及Button，TextBlock用來顯示XML文字。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175216.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-17_175216" border="0" alt="2011-12-17_175216" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175216_thumb.png" width="977" height="283" /></a></p>
<p>&#160;</p>
<p>底下是Click方法，程式第一行是取得XML的樣板，參數是ToastTemplateType.ToastText04，它可以設定三行的訊息，將訊息設定好之後，呼叫ToastNotification物件的CreateToastNotifier().Show方法。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175622.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-17_175622" border="0" alt="2011-12-17_175622" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175622_thumb.png" width="732" height="258" /></a></p>
<p>&#160;</p>
<p>執行畫面。按下按鈕後，會顯示設定的XML。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175745.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-17_175745" border="0" alt="2011-12-17_175745" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175745_thumb.png" width="394" height="342" /></a></p>
<p>&#160;</p>
<p>而程式的右下角就會顯示訊息，而右下角的圖案是程式本身的圖示。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175828.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-17_175828" border="0" alt="2011-12-17_175828" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111217_175828_thumb.png" width="398" height="134" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/anWfTqsoxSY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/12/17/windows-metro-app-toast-notification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/12/17/windows-metro-app-toast-notification/</feedburner:origLink></item>
		<item>
		<title>Windows Metro App – Image File Access</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/waP29pNUmVw/</link>
		<comments>http://b-plurkers.com/2011/12/10/windows-metro-app-image-file-access/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 10:09:24 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2011/12/10/windows-metro-app-image-file-access/</guid>
		<description><![CDATA[Metro App跟一般Windows程式，在檔案的存取權限上有很大的不同。以往在寫WinForm時，是不用考慮權限問題，讀取檔案不會有什麼阻礙。但Metro App的限制很多，一般的檔案幾乎沒辦法讀取，只有少部份資料夾可以。 一般在開啟Windows檔案總管時，可以發現媒體櫃這個資料夾，底下有文件、音樂、視訊、圖片這四個子資料夾，而Metro App剛好可以讀取的。下面將會示範怎麼讀取該資料夾底下的圖片。 &#160; 程式的介面只有一個顯示訊息用的TextBlock及列出圖片的ListView。 &#160; 在程式載入後就使用KnowFolders底下的PicturesLibrary屬性，將StorageFolder取出。 &#160; 之後呼叫ListImage這個Method，注意到async及await這兩個新的關鍵字，這是C# 4.5版新增的，用來做非同步，這樣就不必使用Thread物件。 &#160; 最後很重要的一個步驟，將Package.appxmanifest檔打開，然後將Picture Library Access勾選，如果不勾選，程式執行時會有Execption產生。 &#160; 執行結果。]]></description>
			<content:encoded><![CDATA[<p>Metro App跟一般Windows程式，在檔案的存取權限上有很大的不同。以往在寫WinForm時，是不用考慮權限問題，讀取檔案不會有什麼阻礙。但Metro App的限制很多，一般的檔案幾乎沒辦法讀取，只有少部份資料夾可以。</p>
<p><span id="more-1815"></span>
<p>一般在開啟Windows檔案總管時，可以發現媒體櫃這個資料夾，底下有文件、音樂、視訊、圖片這四個子資料夾，而Metro App剛好可以讀取的。下面將會示範怎麼讀取該資料夾底下的圖片。</p>
<p>&#160;</p>
<p>程式的介面只有一個顯示訊息用的TextBlock及列出圖片的ListView。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174438.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-10_174438" border="0" alt="2011-12-10_174438" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174438_thumb.png" width="932" height="480" /></a></p>
<p>&#160;</p>
<p>在程式載入後就使用KnowFolders底下的PicturesLibrary屬性，將StorageFolder取出。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174617.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-10_174617" border="0" alt="2011-12-10_174617" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174617_thumb.png" width="468" height="320" /></a></p>
<p>&#160;</p>
<p>之後呼叫ListImage這個Method，注意到async及await這兩個新的關鍵字，這是C# 4.5版新增的，用來做非同步，這樣就不必使用Thread物件。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174732.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-10_174732" border="0" alt="2011-12-10_174732" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174732_thumb.png" width="467" height="290" /></a></p>
<p>&#160;</p>
<p>最後很重要的一個步驟，將Package.appxmanifest檔打開，然後將Picture Library Access勾選，如果不勾選，程式執行時會有Execption產生。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174843.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-10_174843" border="0" alt="2011-12-10_174843" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_174843_thumb.png" width="817" height="718" /></a></p>
<p>&#160;</p>
<p>執行結果。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_175208.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-10_175208" border="0" alt="2011-12-10_175208" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111210_175208_thumb.png" width="656" height="868" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/waP29pNUmVw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/12/10/windows-metro-app-image-file-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/12/10/windows-metro-app-image-file-access/</feedburner:origLink></item>
		<item>
		<title>[野人獻曝] 爬資料時要注意的幾件事</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/fVtr05AVL5I/</link>
		<comments>http://b-plurkers.com/2011/12/06/%e9%87%8e%e4%ba%ba%e7%8d%bb%e6%9b%9d-%e7%88%ac%e8%b3%87%e6%96%99%e6%99%82%e8%a6%81%e6%b3%a8%e6%84%8f%e7%9a%84%e5%b9%be%e4%bb%b6%e4%ba%8b/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 08:26:39 +0000</pubDate>
		<dc:creator>小鏡萬歲</dc:creator>
				<category><![CDATA[Faryne]]></category>
		<category><![CDATA[小鏡萬歲]]></category>
		<category><![CDATA[程式設計]]></category>
		<category><![CDATA[錯誤示範]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/?p=1799</guid>
		<description><![CDATA[1、確定你要爬資料的目標URI 這點很重要，因為URI裡面的東西會影響到你所取得的資料， 比方說像是分頁啦、搜尋條件啦。 這種東西必須在寫程式前決定好， 並且要多方嘗試看看URI如果有另一種變化會有怎樣的結果。 比方說： http://www.example.com/search.php?condition=xxx&#038;p=20 是不是可以改成 http://www.example.com/search.php?condition=xxx&#038;p=a 也能正常運作； 如果不能正常運作的話又會不會是因為參數限定什麼樣的值？ 這些事必須要多加嘗試才行。 2、透過Proxy來抓你要的資料 因為有點常識的網站為了避免被大量攻擊， 因此對於頻繁的要求會直接擋下， 而結果的話，像Yahoo!對於這種狀況就會吐出 999 的狀態碼， 其他的網站可能會吐出其他 HTTP 狀態碼。 所以若你要直接發出過於頻繁的要求時， 這其實是一件很危險的事。 因為一不小心你可能會被網站整個ban掉，如果你是在跟其他人共用一個區域網路時， 可能也會連帶使得其他人也被當成惡意來源整個ban掉。 因此你必須要使用Proxy， 不管是透過實體Proxy（直接就是可以分析的狀態）或是透過web proxy（需要將URI部份解碼後才能分析）， 都是個不錯的方法。 只是當你在使用proxy時也需要一併考慮proxy本身的限制。 3、瞭解你抓資料時可能會碰到什麼障礙 會碰到的障礙很多啊， 像是外國IP禁止瀏覽啊、抓圖片時可能要帶一個站內referer啊、抓網頁資料時要有相應的cookie啦、還是目標資料是利用javascript產生之類的， 這些障礙要說多少就有多少， 通常碰到的時候就見招拆招， 而如果不知道為什麼被擋也要多加嘗試找出被擋下的原因。 比方說外國IP禁止瀏覽的話你就可能透過種花電信的Proxy去拉資料， 或者抓網頁時需要cookie，那就想辦法去幹下一份cookie之類。 總之就是要很有想像力和耐心才能夠解決這些障礙。 4、確定你要分析資料的方式 你抓了這些資料後總是要利用的吧， 所以抓了以後你要決定資料該怎麼使用。 像是我很久以前弄的一個爬Yahoo!奇摩搜尋結果的程式， 這個程式主要在於把搜尋結果找到以後丟給html4image轉成圖片給客戶看。 總而言之，好不容易抓到的資料， 當然就是要用正確的方式利用， 你可能是把整份HTML轉成圖片， 也可能根據某種規則（經由正規式或DOM物件等方法）把HTML的某些元素拉出來。 到了這一步，其實是最簡單的一步， 但如果弄不好的話， 你前面的工就等於白費了， 所以不可不慎啊。 以上就是這些年來幹爬資料這件事的一些心得， 內容雖然簡單了些， 但老實說以我現在的狀況我也沒辦法說得太清楚。 [...]]]></description>
			<content:encoded><![CDATA[<div><strong>1、確定你要爬資料的目標URI</strong><br />
這點很重要，因為URI裡面的東西會影響到你所取得的資料，<br />
比方說像是分頁啦、搜尋條件啦。<br />
這種東西必須在寫程式前決定好，<br />
並且要多方嘗試看看URI如果有另一種變化會有怎樣的結果。<br />
比方說：</p>
<p>http://www.example.com/search.php?condition=xxx&#038;p=20</p>
<p>是不是可以改成</p>
<p>http://www.example.com/search.php?condition=xxx&#038;p=a</p>
<p>也能正常運作；<br />
如果不能正常運作的話又會不會是因為參數限定什麼樣的值？<br />
這些事必須要多加嘗試才行。</p></div>
<div><strong>2、透過Proxy來抓你要的資料</strong><br />
因為有點常識的網站為了避免被大量攻擊，<br />
因此對於頻繁的要求會直接擋下，<br />
而結果的話，像Yahoo!對於這種狀況就會吐出 999 的狀態碼，<br />
其他的網站可能會吐出其他 HTTP 狀態碼。<br />
所以若你要直接發出過於頻繁的要求時，<br />
這其實是一件很危險的事。<br />
因為一不小心你可能會被網站整個ban掉，如果你是在跟其他人共用一個區域網路時，<br />
可能也會連帶使得其他人也被當成惡意來源整個ban掉。<br />
因此你必須要使用Proxy，<br />
不管是透過實體Proxy（直接就是可以分析的狀態）或是透過web proxy（需要將URI部份解碼後才能分析），<br />
都是個不錯的方法。<br />
只是當你在使用proxy時也需要一併考慮proxy本身的限制。</p>
</div>
<div><strong>3、瞭解你抓資料時可能會碰到什麼障礙</strong><br />
會碰到的障礙很多啊，<br />
像是外國IP禁止瀏覽啊、抓圖片時可能要帶一個站內referer啊、抓網頁資料時要有相應的cookie啦、還是目標資料是利用javascript產生之類的，<br />
這些障礙要說多少就有多少，<br />
通常碰到的時候就見招拆招，<br />
而如果不知道為什麼被擋也要多加嘗試找出被擋下的原因。<br />
比方說外國IP禁止瀏覽的話你就可能透過種花電信的Proxy去拉資料，<br />
或者抓網頁時需要cookie，那就想辦法去幹下一份cookie之類。<br />
總之就是要很有想像力和耐心才能夠解決這些障礙。
</div>
<div><strong>4、確定你要分析資料的方式</strong><br />
你抓了這些資料後總是要利用的吧，<br />
所以抓了以後你要決定資料該怎麼使用。<br />
像是我很久以前弄的一個爬Yahoo!奇摩搜尋結果的程式，<br />
這個程式主要在於把搜尋結果找到以後丟給html4image轉成圖片給客戶看。<br />
總而言之，好不容易抓到的資料，<br />
當然就是要用正確的方式利用，<br />
你可能是把整份HTML轉成圖片，<br />
也可能根據某種規則（經由正規式或DOM物件等方法）把HTML的某些元素拉出來。<br />
到了這一步，其實是最簡單的一步，<br />
但如果弄不好的話，<br />
你前面的工就等於白費了，<br />
所以不可不慎啊。</div>
<div>
<p>以上就是這些年來幹爬資料這件事的一些心得，<br />
內容雖然簡單了些，<br />
但老實說以我現在的狀況我也沒辦法說得太清楚。<br />
畢竟這是需要當事人的想像力和技術力才能解決，<br />
如果你沒有想像力或技術力的話，<br />
我只能說這篇文章對你的意義不會太大。</p></div>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/fVtr05AVL5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/12/06/%e9%87%8e%e4%ba%ba%e7%8d%bb%e6%9b%9d-%e7%88%ac%e8%b3%87%e6%96%99%e6%99%82%e8%a6%81%e6%b3%a8%e6%84%8f%e7%9a%84%e5%b9%be%e4%bb%b6%e4%ba%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/12/06/%e9%87%8e%e4%ba%ba%e7%8d%bb%e6%9b%9d-%e7%88%ac%e8%b3%87%e6%96%99%e6%99%82%e8%a6%81%e6%b3%a8%e6%84%8f%e7%9a%84%e5%b9%be%e4%bb%b6%e4%ba%8b/</feedburner:origLink></item>
		<item>
		<title>Lucene.Net – 索引的管理</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/ZptP83NxU6U/</link>
		<comments>http://b-plurkers.com/2011/12/01/lucene-net-%e7%b4%a2%e5%bc%95%e7%9a%84%e7%ae%a1%e7%90%86/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 15:40:48 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2011/12/01/lucene-net-%e7%b4%a2%e5%bc%95%e7%9a%84%e7%ae%a1%e7%90%86/</guid>
		<description><![CDATA[在上一篇文章中，有簡單介紹Lucene.Net的用法，不過一般的情況，資料是會一直新增的，所以程式也必須有索引管理的功能，本篇文章將會簡介刪除、新增索引的方法。 首先撰寫列出Index的method，其中MapFieldSelector可以讓IndexReader只回傳我們要的Field。 &#160; 然後實作刪除索引的method，裡面DeleteDocuments是成功刪除的筆數。 &#160; 最後是新增索引的方法，其實就跟前一篇文章內容所提的方式一樣。 &#160; 最後是介面，將上篇文章所提的略做修改。 &#160; 程式中，一開始所新增的索引。 &#160; 列出所有的索引，可以看到一開始deleted的屬性都是false。 &#160; 接下來刪除內容含有iphone的索引。 &#160; 然後重新列出索引，可以看到SaleName有iphone的都被標記為刪除了，除了iphone4s沒有被刪除，因為iphone跟iphone4s是不一樣的。 &#160; 接下來測試新增索引的功能，直接輸入Test。 &#160; 之後就可以看到新增的索引。]]></description>
			<content:encoded><![CDATA[<p>在上一篇文章中，有簡單介紹Lucene.Net的用法，不過一般的情況，資料是會一直新增的，所以程式也必須有索引管理的功能，本篇文章將會簡介刪除、新增索引的方法。</p>
<p><span id="more-1797"></span>
<p>首先撰寫列出Index的method，其中MapFieldSelector可以讓IndexReader只回傳我們要的Field。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_231904.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_231904" border="0" alt="2011-12-01_231904" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_231904_thumb.png" width="534" height="423" /></a></p>
<p>&#160;</p>
<p>然後實作刪除索引的method，裡面DeleteDocuments是成功刪除的筆數。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232001.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232001" border="0" alt="2011-12-01_232001" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232001_thumb.png" width="457" height="254" /></a></p>
<p>&#160;</p>
<p>最後是新增索引的方法，其實就跟前一篇文章內容所提的方式一樣。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232022.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232022" border="0" alt="2011-12-01_232022" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232022_thumb.png" width="1118" height="495" /></a></p>
<p>&#160;</p>
<p>最後是介面，將上篇文章所提的略做修改。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232046.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232046" border="0" alt="2011-12-01_232046" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232046_thumb.png" width="660" height="464" /></a></p>
<p>&#160;</p>
<p>程式中，一開始所新增的索引。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232138.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232138" border="0" alt="2011-12-01_232138" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232138_thumb.png" width="673" height="256" /></a></p>
<p>&#160;</p>
<p>列出所有的索引，可以看到一開始deleted的屬性都是false。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232237.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232237" border="0" alt="2011-12-01_232237" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232237_thumb.png" width="656" height="460" /></a></p>
<p>&#160;</p>
<p>接下來刪除內容含有iphone的索引。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232302.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232302" border="0" alt="2011-12-01_232302" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232302_thumb.png" width="656" height="460" /></a></p>
<p>&#160;</p>
<p>然後重新列出索引，可以看到SaleName有iphone的都被標記為刪除了，除了iphone4s沒有被刪除，因為iphone跟iphone4s是不一樣的。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232320.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232320" border="0" alt="2011-12-01_232320" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232320_thumb.png" width="656" height="460" /></a></p>
<p>&#160;</p>
<p>接下來測試新增索引的功能，直接輸入Test。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232337.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232337" border="0" alt="2011-12-01_232337" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232337_thumb.png" width="656" height="460" /></a></p>
<p>&#160;</p>
<p>之後就可以看到新增的索引。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232411.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-12-01_232411" border="0" alt="2011-12-01_232411" src="http://b-plurkers.com/wp-content/uploads/2011/12/20111201_232411_thumb.png" width="656" height="460" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/ZptP83NxU6U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/12/01/lucene-net-%e7%b4%a2%e5%bc%95%e7%9a%84%e7%ae%a1%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/12/01/lucene-net-%e7%b4%a2%e5%bc%95%e7%9a%84%e7%ae%a1%e7%90%86/</feedburner:origLink></item>
		<item>
		<title>手機程式開發教學</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/fhoCDJL7ges/</link>
		<comments>http://b-plurkers.com/2011/11/12/%e6%89%8b%e6%a9%9f%e7%a8%8b%e5%bc%8f%e9%96%8b%e7%99%bc%e6%95%99%e5%ad%b8/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 09:41:21 +0000</pubDate>
		<dc:creator>吳小明</dc:creator>
				<category><![CDATA[吳小明]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2011/11/12/%e6%89%8b%e6%a9%9f%e7%a8%8b%e5%bc%8f%e9%96%8b%e7%99%bc%e6%95%99%e5%ad%b8/</guid>
		<description><![CDATA[累積了很多也沒時間看，不如一次放出來，做個整理好了，以後有用到也不用慢慢找。 iOS部份我就沒列了，有興趣的可以幫忙補完，這邊以Android跟Windows Phone為主，這年頭開發者真辛苦，要碰的東西一大堆啊。 Android Android_Tutor的专栏 hellogv的专栏 Terry_龙 何明桂的小窝 移动平台碎碎念 老罗的Android之旅 如果你對Android核心有興趣，可以參考作者對Android的分析 maxleng的专栏 這也是在討論Android內部 Android source code &#160; Windows Phone WindowsPhoneGeek Windows Phone 7 (Mango) Tutorial for Beginners 邊做邊學 Windows Phone 7 開發 ericsk 整理的教學文件 保哥整理的教學文件 Nokia 出的 Sample Code Microsoft 的 Sample Code Windows Phone Programming in C# (Windows Phone Version 7.5) Silverlight for Windows [...]]]></description>
			<content:encoded><![CDATA[<p>累積了很多也沒時間看，不如一次放出來，做個整理好了，以後有用到也不用慢慢找。<br />
iOS部份我就沒列了，有興趣的可以幫忙補完，這邊以Android跟Windows Phone為主，這年頭開發者真辛苦，要碰的東西一大堆啊。</p>
<p><span style="font-size: large;"><strong>Android</strong></span></p>
<p><a title="http://blog.csdn.net/Android_Tutor" href="http://blog.csdn.net/Android_Tutor">Android_Tutor的专栏</a><br />
<a title="http://blog.csdn.net/hellogv" href="http://blog.csdn.net/hellogv">hellogv的专栏</a><br />
<a title="http://www.cnblogs.com/TerryBlog" href="http://www.cnblogs.com/TerryBlog">Terry_龙</a><br />
<a title="http://blog.csdn.net/hmg25" href="http://blog.csdn.net/hmg25">何明桂的小窝</a><br />
<a title="http://blog.csdn.net/yiyaaixuexi" href="http://blog.csdn.net/yiyaaixuexi">移动平台碎碎念</a><br />
<a title="http://blog.csdn.net/Luoshengyang" href="http://blog.csdn.net/Luoshengyang">老罗的Android之旅</a> 如果你對Android核心有興趣，可以參考作者對Android的分析<br />
<a title="http://blog.csdn.net/maxleng" href="http://blog.csdn.net/maxleng">maxleng的专栏</a> 這也是在討論Android內部<br />
<a title="http://android.git.linaro.org/gitweb" href="http://android.git.linaro.org/gitweb">Android source code</a></p>
<p>&nbsp;</p>
<p><span style="font-size: large;"><strong>Windows Phone</strong></span></p>
<p><a title="http://www.windowsphonegeek.com/" href="http://www.windowsphonegeek.com/">WindowsPhoneGeek</a><br />
<a title="http://www.kunal-chowdhury.com/p/windows-phone-7-mango-tutorial-for.html" href="http://www.kunal-chowdhury.com/p/windows-phone-7-mango-tutorial-for.html">Windows Phone 7 (Mango) Tutorial for Beginners</a><br />
<a title="http://msdn.microsoft.com/zh-tw/windowsphone/ff955788" href="http://msdn.microsoft.com/zh-tw/windowsphone/ff955788">邊做邊學 Windows Phone 7 開發</a><br />
<a title="http://blogs.msdn.com/b/ericsk/archive/2011/10/31/windows-phone-7-5-mango-developer-resources.aspx" href="http://blogs.msdn.com/b/ericsk/archive/2011/10/31/windows-phone-7-5-mango-developer-resources.aspx">ericsk 整理的教學文件</a><br />
<a title="http://blog.miniasp.com/post/2011/09/30/Windows-Phone-75-%28Mango%29-e9968be799bce5adb8e7bf92e8b387e6ba90e695b4e79086.aspx" href="http://blog.miniasp.com/post/2011/09/30/Windows-Phone-75-%28Mango%29-e9968be799bce5adb8e7bf92e8b387e6ba90e695b4e79086.aspx">保哥整理的教學文件</a><br />
<a title="http://www.developer.nokia.com/Develop/Windows_Phone/Code_examples/" href="http://www.developer.nokia.com/Develop/Windows_Phone/Code_examples/">Nokia 出的 Sample Code</a><br />
<a title="http://msdn.microsoft.com/en-us/library/ff431744%28v=vs.92%29.aspx" href="http://msdn.microsoft.com/en-us/library/ff431744%28v=vs.92%29.aspx">Microsoft 的 Sample Code</a><br />
<a title="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8874&amp;c1=en-us&amp;c2=0&amp;Login=&amp;wa=wsignin1.0" href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8874&amp;c1=en-us&amp;c2=0&amp;Login=&amp;wa=wsignin1.0">Windows Phone Programming in C# (Windows Phone Version 7.5)</a><br />
<a title="http://www.windowsphonegeek.com/WPToolkitBook" href="http://www.windowsphonegeek.com/WPToolkitBook">Silverlight for Windows Phone Toolkit In Depth</a><br />
<a title="http://www.charlespetzold.com/phone/" href="http://www.charlespetzold.com/phone/">Programming Windows Phone 7</a></p>
<p>&nbsp;</p>
<p><span style="font-size: large;"><strong>CodeProject的大混戰，包含主流手機平台</strong></span><br />
<a title="http://www.codeproject.com/Zones/Mobile/" href="http://www.codeproject.com/Zones/Mobile/">The Mobile Zone</a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/fhoCDJL7ges" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/11/12/%e6%89%8b%e6%a9%9f%e7%a8%8b%e5%bc%8f%e9%96%8b%e7%99%bc%e6%95%99%e5%ad%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/11/12/%e6%89%8b%e6%a9%9f%e7%a8%8b%e5%bc%8f%e9%96%8b%e7%99%bc%e6%95%99%e5%ad%b8/</feedburner:origLink></item>
		<item>
		<title>Windows Metro App Using C# Component</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/g-cfmqtQAYo/</link>
		<comments>http://b-plurkers.com/2011/11/05/windows-metro-app-using-c-component/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 11:42:32 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2011/11/05/windows-metro-app-using-c-component/</guid>
		<description><![CDATA[前一篇提到了如何用C++寫元件給Metro App用，本篇將介紹用C#寫元件的方法。 首先新增一個JS的Metro App專案。 &#160; 之後再新增C#的Class Library(圖書館)專案。 &#160; 然後新增一個類別，注意，該類別一定要加上sealed關鍵字，也就是它不能被繼承，而且該類別要繼承一個Interface。 &#160; 之後在Class Library的屬性設定，將Output type設為WinMD File。 &#160; 編譯之後將它將加到Metro App專案。 &#160; 呼叫方法如下。 &#160; 執行結果。]]></description>
			<content:encoded><![CDATA[<p>前一篇提到了如何用C++寫元件給Metro App用，本篇將介紹用C#寫元件的方法。</p>
<p><span id="more-1737"></span>
<p>首先新增一個JS的Metro App專案。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185255.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_185255" border="0" alt="2011-11-05_185255" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185255_thumb.png" width="664" height="295" /></a></p>
<p>&#160;</p>
<p>之後再新增C#的Class Library<strike>(圖書館)</strike>專案。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185343.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_185343" border="0" alt="2011-11-05_185343" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185343_thumb.png" width="667" height="300" /></a></p>
<p>&#160;</p>
<p>然後新增一個類別，注意，該類別一定要加上sealed關鍵字，也就是它不能被繼承，而且該類別要繼承一個Interface。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185413.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_185413" border="0" alt="2011-11-05_185413" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185413_thumb.png" width="281" height="299" /></a></p>
<p>&#160;</p>
<p>之後在Class Library的屬性設定，將Output type設為WinMD File。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185517.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_185517" border="0" alt="2011-11-05_185517" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185517_thumb.png" width="758" height="244" /></a></p>
<p>&#160;</p>
<p>編譯之後將它將加到Metro App專案。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185547.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_185547" border="0" alt="2011-11-05_185547" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_185547_thumb.png" width="793" height="149" /></a></p>
<p>&#160;</p>
<p>呼叫方法如下。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_193423.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_193423" border="0" alt="2011-11-05_193423" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_193423_thumb.png" width="466" height="450" /></a></p>
<p>&#160;</p>
<p>執行結果。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_193454.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_193454" border="0" alt="2011-11-05_193454" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_193454_thumb.png" width="333" height="132" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/g-cfmqtQAYo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/11/05/windows-metro-app-using-c-component/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/11/05/windows-metro-app-using-c-component/</feedburner:origLink></item>
		<item>
		<title>開放原始碼的搜尋引擎 – Lucene.Net</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/dAKtaCCiucs/</link>
		<comments>http://b-plurkers.com/2011/11/05/%e9%96%8b%e6%94%be%e5%8e%9f%e5%a7%8b%e7%a2%bc%e7%9a%84%e6%90%9c%e5%b0%8b%e5%bc%95%e6%93%8e-lucene-net/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 08:21:52 +0000</pubDate>
		<dc:creator>卑微研究生</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[卑微研究生]]></category>
		<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/2011/11/05/%e9%96%8b%e6%94%be%e5%8e%9f%e5%a7%8b%e7%a2%bc%e7%9a%84%e6%90%9c%e5%b0%8b%e5%bc%95%e6%93%8e-lucene-net/</guid>
		<description><![CDATA[對於一個網站來說，當內容一多的時候，弄個搜尋引擎也是合理的。只是一般來說，這東西的門檻算高，對於沒接觸過理論的人來說，要自行開發搜尋引擎較為困難。某些網站的作法，都是將查詢的關鍵字放進SQL語法直接查詢，通常都是用select * from table where field like ‘%SearchQuery%’ 。但是，這類的查詢語法是很吃資料庫效能的，一旦使用者一多，是會拖垮網站的速度。 好在網路有現成的搜尋引擎元件可以用，而且還是開放原始碼的，本篇文章將以Lucene.Net做示範。 Lucene.Net是Lucene的.Net版本，最初的版本是用Java寫的，如果想使用最新的版本，建議是使用Java版本。 Lucene.Net的網址如下： http://incubator.apache.org/lucene.net/ 首先，對於搜尋引擎的相關知識先做一個簡單的解說，這門技術屬於資訊檢索(Information Retrieval)的範圍，所謂的資訊檢索，就是如何在大量的文件中找到想要的文件的一門學問，而網路的搜尋引擎只是屬於其中的一小部份。建置搜尋引擎的第一步，就是先對大量的文件建立索引，所謂的索引，就是對於文件內容做分析，將內容拆成一個個的詞，再加以統計。 舉例來說，一份文件假設有”This is the book”這一行內容，搜尋引擎通常會將它拆成”This”、”is”、”the”、”book”這幾個詞，往後的文件如果也有相同的詞，搜尋引擎也會將它記錄下來，並統計這個詞出現在哪幾個文件裡、出現在文件的哪一行。之後，搜尋引擎再利用相關的演算法，計算某份文件在某個詞的分數是幾分，這樣在搜尋時，才能算出文件的排序。 總而言之，建置搜尋引擎，必須要有下列的功能： 建立索引 計算詞(Term)與文件之間的分數 由詞搜尋到相關的文件 有了這些概念，接下來再介紹Lucene.Net的用法。在這裡，以搜尋商品做為示範。 一開始先定義商品具有下列屬性。 &#160; 之後訂立LuceneClass這個類別，建構子內先設定索引的存放位置，以及在裡面宣告一個IndexSearch型別的變數，這個是之後用來做搜尋的。 &#160; 接下來是建立索引的程式碼。 上述的程式碼，會用到IndexWriter，在這裡只要想成是將一份一份的文件寫入索引，而文件會包含一條一條的屬性。所以這邊會用到Document及Field這兩個類別，一個Document會包含多個Field，前面定義的Product類別，裡面的SaleName、Desc及Price就會以Field來記錄，然後再加進Document裡。需要注意的是，Field的建構子，要設定該Field是否需要儲存、是否需要被索引，如果沒有被索引，該Field就沒有辦法被搜尋，只能當做搜尋結果的一部份內容。 &#160; 做完索引後，就是重點的搜尋功能。 所謂的搜尋條件，學術上稱為Query，所以在Lucene裡就定義了兩個類別：Query及QueryParser。將使用者輸入的查詢透過QueryParser產生Query物件，然後將Query丟進IndexSearch物件做搜尋，最後回傳的結果就是Hits物件，裡面存放的就是搜尋結果。 &#160; 最後用WinForm程式做測試，下面是測試的介面。 &#160; 測試程式內的建構子及相關的變數。 &#160; 建立索引的程式碼。 &#160; 搜尋的程式碼。 &#160; 在建立完索引後，可以看到資料夾內產生了幾個檔案，這些存放了索引的相關資訊。 &#160; 測試結果。 &#160; 在Lucene 3.0之前，對於中文的分詞功能較差，它是將中文內容拆成一個一個的中文字，而不是一個詞，如果想要有較佳的中文分詞功能，可以自行在網路上搜尋對岸強者所寫的中文分詞器。]]></description>
			<content:encoded><![CDATA[<p>對於一個網站來說，當內容一多的時候，弄個搜尋引擎也是合理的。只是一般來說，這東西的門檻算高，對於沒接觸過理論的人來說，要自行開發搜尋引擎較為困難。某些網站的作法，都是將查詢的關鍵字放進SQL語法直接查詢，通常都是用<font color="#ff0000">select * from table where field like ‘%SearchQuery%’</font> 。但是，這類的查詢語法是很吃資料庫效能的，一旦使用者一多，是會拖垮網站的速度。</p>
<p><span id="more-1722"></span>
<p>好在網路有現成的搜尋引擎元件可以用，而且還是開放原始碼的，本篇文章將以Lucene.Net做示範。</p>
<p>Lucene.Net是Lucene的.Net版本，最初的版本是用Java寫的，如果想使用最新的版本，建議是使用Java版本。</p>
<p>Lucene.Net的網址如下：</p>
<p><a href="http://incubator.apache.org/lucene.net/">http://incubator.apache.org/lucene.net/</a></p>
<p>首先，對於搜尋引擎的相關知識先做一個簡單的解說，這門技術屬於資訊檢索(Information Retrieval)的範圍，所謂的資訊檢索，就是如何在大量的文件中找到想要的文件的一門學問，而網路的搜尋引擎只是屬於其中的一小部份。建置搜尋引擎的第一步，就是先對大量的文件建立索引，所謂的索引，就是對於文件內容做分析，將內容拆成一個個的詞，再加以統計。</p>
<p>舉例來說，一份文件假設有”This is the book”這一行內容，搜尋引擎通常會將它拆成”This”、”is”、”the”、”book”這幾個詞，往後的文件如果也有相同的詞，搜尋引擎也會將它記錄下來，並統計這個詞出現在哪幾個文件裡、出現在文件的哪一行。之後，搜尋引擎再利用相關的演算法，計算某份文件在某個詞的分數是幾分，這樣在搜尋時，才能算出文件的排序。</p>
<p>總而言之，建置搜尋引擎，必須要有下列的功能：</p>
<ul>
<li>建立索引 </li>
<li>計算詞(Term)與文件之間的分數 </li>
<li>由詞搜尋到相關的文件 </li>
</ul>
<p>有了這些概念，接下來再介紹Lucene.Net的用法。在這裡，以搜尋商品做為示範。</p>
<p>一開始先定義商品具有下列屬性。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151740.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151740" border="0" alt="2011-11-05_151740" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151740_thumb.png" width="293" height="114" /></a></p>
<p>&#160;</p>
<p>之後訂立LuceneClass這個類別，建構子內先設定索引的存放位置，以及在裡面宣告一個IndexSearch型別的變數，這個是之後用來做搜尋的。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151759.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151759" border="0" alt="2011-11-05_151759" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151759_thumb.png" width="314" height="171" /></a></p>
<p>&#160;</p>
<p>接下來是建立索引的程式碼。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151814.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151814" border="0" alt="2011-11-05_151814" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151814_thumb.png" width="1082" height="350" /></a></p>
<p>上述的程式碼，會用到IndexWriter，在這裡只要想成是將一份一份的文件寫入索引，而文件會包含一條一條的屬性。所以這邊會用到Document及Field這兩個類別，一個Document會包含多個Field，前面定義的Product類別，裡面的SaleName、Desc及Price就會以Field來記錄，然後再加進Document裡。需要注意的是，Field的建構子，要設定該Field是否需要儲存、是否需要被索引，如果沒有被索引，該Field就沒有辦法被搜尋，只能當做搜尋結果的一部份內容。</p>
<p>&#160;</p>
<p>做完索引後，就是重點的搜尋功能。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151830.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151830" border="0" alt="2011-11-05_151830" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151830_thumb.png" width="1034" height="390" /></a></p>
<p>所謂的搜尋條件，學術上稱為Query，所以在Lucene裡就定義了兩個類別：Query及QueryParser。將使用者輸入的查詢透過QueryParser產生Query物件，然後將Query丟進IndexSearch物件做搜尋，最後回傳的結果就是Hits物件，裡面存放的就是搜尋結果。</p>
<p>&#160;</p>
<p>最後用WinForm程式做測試，下面是測試的介面。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151857.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151857" border="0" alt="2011-11-05_151857" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151857_thumb.png" width="660" height="464" /></a></p>
<p>&#160;</p>
<p>測試程式內的建構子及相關的變數。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151914.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151914" border="0" alt="2011-11-05_151914" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151914_thumb.png" width="374" height="152" /></a></p>
<p>&#160;</p>
<p>建立索引的程式碼。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151931.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151931" border="0" alt="2011-11-05_151931" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151931_thumb.png" width="660" height="254" /></a></p>
<p>&#160;</p>
<p>搜尋的程式碼。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151951.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_151951" border="0" alt="2011-11-05_151951" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_151951_thumb.png" width="586" height="253" /></a></p>
<p>&#160;</p>
<p>在建立完索引後，可以看到資料夾內產生了幾個檔案，這些存放了索引的相關資訊。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152004.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_152004" border="0" alt="2011-11-05_152004" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152004_thumb.png" width="656" height="460" /></a></p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152028.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_152028" border="0" alt="2011-11-05_152028" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152028_thumb.png" width="226" height="104" /></a></p>
<p>&#160;</p>
<p>測試結果。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152046.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_152046" border="0" alt="2011-11-05_152046" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152046_thumb.png" width="656" height="460" /></a></p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152115.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_152115" border="0" alt="2011-11-05_152115" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152115_thumb.png" width="656" height="460" /></a></p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152128.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2011-11-05_152128" border="0" alt="2011-11-05_152128" src="http://b-plurkers.com/wp-content/uploads/2011/11/20111105_152128_thumb.png" width="656" height="460" /></a> </p>
</p>
<p>&#160;</p>
<p>在Lucene 3.0之前，對於中文的分詞功能較差，它是將中文內容拆成一個一個的中文字，而不是一個詞，如果想要有較佳的中文分詞功能，可以自行在網路上搜尋對岸強者所寫的中文分詞器。</p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/dAKtaCCiucs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2011/11/05/%e9%96%8b%e6%94%be%e5%8e%9f%e5%a7%8b%e7%a2%bc%e7%9a%84%e6%90%9c%e5%b0%8b%e5%bc%95%e6%93%8e-lucene-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2011/11/05/%e9%96%8b%e6%94%be%e5%8e%9f%e5%a7%8b%e7%a2%bc%e7%9a%84%e6%90%9c%e5%b0%8b%e5%bc%95%e6%93%8e-lucene-net/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.412 seconds -->

