<?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>Thu, 23 Feb 2012 13:16:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.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上的Cookie問題</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/R8hdsJ7dtfk/</link>
		<comments>http://b-plurkers.com/2012/02/23/asp-net%e4%b8%8a%e7%9a%84cookie%e5%95%8f%e9%a1%8c-2/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 13:15:16 +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/?p=1918</guid>
		<description><![CDATA[網頁在登入後，通常都會寫入一組Cookie，好讓網站之後可以驗證是否已登入過，但Cookie尤於是寫在本機端，在對網站發出Http Request時一併將Cookie傳送過去，如果傳送中途被第三方截走，就會有身份被盜用的風險。 在這裡以某個EC網站為例，首先安裝下列Chrome元件，這是一個可以編輯Cookie的工具。 &#160; 安裝之後，用IE在某EC網站登入，並複製Key為ASP.NET_SessionId的值。 &#160; 之後用Cookie Editor修改Chrome在某EC網站的Cookie值。 &#160; 之後就…嗯… 通常在SSL的加密下，風險會小很多，但還是必須注意Cookie外洩的可能，所以網站某些重要的功能，可以採取用另一組Cookie來做驗證的動作。在確定使用者已經登入的情況下，再檢查Cookie裡所包含的其它資訊，例如IP等等，當然這些檢查用的值必須先加密過才行。 &#160; 另外在預設的情況下，SessionId是寫在ASP.NET_SessionId的Cookie Key下，如此一來等於是告訴大家系統就是用ASP.NET寫的。但只要修web.config檔，就可以騙過某些笨蛋這是用JSP寫的…]]></description>
			<content:encoded><![CDATA[<p>網頁在登入後，通常都會寫入一組Cookie，好讓網站之後可以驗證是否已登入過，但Cookie尤於是寫在本機端，在對網站發出Http Request時一併將Cookie傳送過去，如果傳送中途被第三方截走，就會有身份被盜用的風險。</p>
<p><span id="more-1918"></span></p>
<p>在這裡以某個EC網站為例，首先安裝下列Chrome元件，這是一個可以編輯Cookie的工具。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204330.png"><img style="display: inline; border-width: 0px;" title="2012-02-23_204330" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204330_thumb.png" alt="2012-02-23_204330" width="986" height="706" border="0" /></a></p>
<p>&nbsp;</p>
<p>安裝之後，用IE在某EC網站登入，並複製Key為ASP.NET_SessionId的值。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204409.png"><img style="display: inline; border-width: 0px;" title="2012-02-23_204409" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204409_thumb.png" alt="2012-02-23_204409" width="543" height="155" border="0" /></a></p>
<p>&nbsp;</p>
<p>之後用Cookie Editor修改Chrome在某EC網站的Cookie值。</p>
<p>&nbsp;</p>
<p>之後就…嗯…</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_2046382.png"><img style="display: inline; border: 0px;" title="2012-02-23_204638" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204638_thumb2.png" alt="2012-02-23_204638" width="417" height="618" border="0" /></a></p>
<p>通常在SSL的加密下，風險會小很多，但還是必須注意Cookie外洩的可能，所以網站某些重要的功能，可以採取用另一組Cookie來做驗證的動作。在確定使用者已經登入的情況下，再檢查Cookie裡所包含的其它資訊，例如IP等等，當然這些檢查用的值必須先加密過才行。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204928.png"><img style="display: inline; border-width: 0px;" title="2012-02-23_204928" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_204928_thumb.png" alt="2012-02-23_204928" width="453" height="204" border="0" /></a></p>
<p>&nbsp;</p>
<p>另外在預設的情況下，SessionId是寫在ASP.NET_SessionId的Cookie Key下，如此一來等於是告訴大家系統就是用ASP.NET寫的。但只要修web.config檔，就可以騙過某些笨蛋這是用JSP寫的…</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_205019.png"><img style="display: inline; border-width: 0px;" title="2012-02-23_205019" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120223_205019_thumb.png" alt="2012-02-23_205019" width="406" height="82" border="0" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/R8hdsJ7dtfk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/02/23/asp-net%e4%b8%8a%e7%9a%84cookie%e5%95%8f%e9%a1%8c-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/02/23/asp-net%e4%b8%8a%e7%9a%84cookie%e5%95%8f%e9%a1%8c-2/</feedburner:origLink></item>
		<item>
		<title>移除ASP.NET額外的Http Header</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/I7FahbPU4xk/</link>
		<comments>http://b-plurkers.com/2012/02/19/%e7%a7%bb%e9%99%a4asp-net%e9%a1%8d%e5%a4%96%e7%9a%84http-header/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 04:19:29 +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/?p=1896</guid>
		<description><![CDATA[最近在看Ultra-Fast ASP.NET的Kindle版本，裡面提到IIS及ASP.NET會輸出額外的Http Header，這些額外的Header某方面來說算是提供駭客有用的資訊，所以能移除就移除掉，本篇文章將會講解書中提供的方法。 首先來看，在預設的情況下，IIS及ASP.NET會輸出什麼樣的Http Header。 從上圖可以知道，Header提供了IIS版本、後端平台及.NET版本。如果Url內包含aspx的副檔名，這些資訊其實無所謂，但假如已經使用ASP.NET MVC來開發網站，其實可以移掉這些資訊，拖延駭客攻擊網站的時間。 &#160; X-Powered-By可以從IIS上移除，點選管理介面上的”HTTP回應標頭”功能。 &#160; 如果無聊一點，可以把值改成JSP或RoR之類的… &#160; 按右鍵直接移除吧。 &#160; 如果要移除Server資訊，就得自己實作HttpModule類別，下列是整個實作的程式碼。 重點在於response.Headers.Remove(“Server”)這一行，在單一的aspx網頁其實也能做到，只是實作HttpModule的話，整個網站就可以有這樣的功能。 &#160; 接著設定web.config檔，將前面實作的HttpModule掛進去。 &#160; 接下來是移除.NET版本資訊，只要設定web.config檔就可以了。 &#160; 之後重新佈署網站，那些Header都不見了。]]></description>
			<content:encoded><![CDATA[<p>最近在看<a href="http://www.amazon.com/Ultra-Fast-ASP-NET-Ultra-Scalable-Server-ebook/dp/B0042JTAQK/ref=sr_1_1?s=digital-text&amp;ie=UTF8&amp;qid=1329623468&amp;sr=1-1" target="_blank"><font color="#ff0000">Ultra-Fast ASP.NET</font></a>的Kindle版本，裡面提到IIS及ASP.NET會輸出額外的Http Header，這些額外的Header某方面來說算是提供駭客有用的資訊，所以能移除就移除掉，本篇文章將會講解書中提供的方法。</p>
<p><span id="more-1896"></span>
<p>首先來看，在預設的情況下，IIS及ASP.NET會輸出什麼樣的Http Header。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114305.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114305" border="0" alt="2012-02-19_114305" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114305_thumb.png" width="294" height="164" /></a></p>
<p>從上圖可以知道，Header提供了IIS版本、後端平台及.NET版本。如果Url內包含aspx的副檔名，這些資訊其實無所謂，但假如已經使用ASP.NET MVC來開發網站，其實可以移掉這些資訊，拖延駭客攻擊網站的時間。</p>
<p>&#160;</p>
<p>X-Powered-By可以從IIS上移除，點選管理介面上的”HTTP回應標頭”功能。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114350.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114350" border="0" alt="2012-02-19_114350" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114350_thumb.png" width="300" height="102" /></a></p>
<p>&#160;</p>
<p>如果無聊一點，可以把值改成JSP或RoR之類的…</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114411.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114411" border="0" alt="2012-02-19_114411" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114411_thumb.png" width="330" height="171" /></a></p>
<p>&#160;</p>
<p>按右鍵直接移除吧。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114601.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114601" border="0" alt="2012-02-19_114601" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114601_thumb.png" width="404" height="310" /></a></p>
<p>&#160;</p>
<p>如果要移除Server資訊，就得自己實作HttpModule類別，下列是整個實作的程式碼。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114701.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114701" border="0" alt="2012-02-19_114701" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114701_thumb.png" width="665" height="438" /></a></p>
<p>重點在於response.Headers.Remove(“Server”)這一行，在單一的aspx網頁其實也能做到，只是實作HttpModule的話，整個網站就可以有這樣的功能。</p>
<p>&#160;</p>
<p>接著設定web.config檔，將前面實作的HttpModule掛進去。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114720.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114720" border="0" alt="2012-02-19_114720" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114720_thumb.png" width="449" height="95" /></a></p>
<p>&#160;</p>
<p>接下來是移除.NET版本資訊，只要設定web.config檔就可以了。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114736.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114736" border="0" alt="2012-02-19_114736" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114736_thumb.png" width="334" height="69" /></a></p>
<p>&#160;</p>
<p>之後重新佈署網站，那些Header都不見了。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114856.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-19_114856" border="0" alt="2012-02-19_114856" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120219_114856_thumb.png" width="295" height="125" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/I7FahbPU4xk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/02/19/%e7%a7%bb%e9%99%a4asp-net%e9%a1%8d%e5%a4%96%e7%9a%84http-header/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/02/19/%e7%a7%bb%e9%99%a4asp-net%e9%a1%8d%e5%a4%96%e7%9a%84http-header/</feedburner:origLink></item>
		<item>
		<title>簡單易用的CKEditor</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/sj7KCzenyCs/</link>
		<comments>http://b-plurkers.com/2012/02/11/%e7%b0%a1%e5%96%ae%e6%98%93%e7%94%a8%e7%9a%84ckeditor/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 11:00:04 +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/?p=1878</guid>
		<description><![CDATA[CKEditor是一個好用的HTML編輯器，支援許多平台，它也有ASP.NET的版本，使用上相當容易，因為它是包裝成一個控制項，只要拖進頁面就能使用。 CKEditor可以到下列網址下載： http://ckeditor.com/download 雖然在下也是下載ASP.NET版本，但測試後，還是覺得使用純JS的版本會比較有彈性，至少可以跟jQuery做整合。 使上的方法很簡單，CKEditor下載後，將裡面的ckeditor資料夾複製進專案裡，然後在頁面上引用下列檔案。 &#160; 這裡用TextBox控制項做示範，記得將TextBox的TextMode設為MultiLine，讓它能多行輸入，另外將CssClass設為ckeditor，如此一來頁面載入的時候，就會自動將編輯器的toolbar給掛進來。 &#160; 按鈕事件。 &#160; 執行畫面。 &#160; 按下確定後，會發生錯誤，這是因為後端預設會過濾HTML字串，以避免遭到XSS攻擊。 &#160; 要解決這個問題，只要打開config.js，加入下面這一行即可，讓CKEditor將內容做Escape，但如此一來，後端就必須負起過慮字串的責任。 &#160; 執行結果。]]></description>
			<content:encoded><![CDATA[<p>CKEditor是一個好用的HTML編輯器，支援許多平台，它也有ASP.NET的版本，使用上相當容易，因為它是包裝成一個控制項，只要拖進頁面就能使用。</p>
<p><span id="more-1878"></span>
<p>CKEditor可以到下列網址下載：</p>
<p><a href="http://ckeditor.com/download">http://ckeditor.com/download</a></p>
<p>雖然在下也是下載ASP.NET版本，但測試後，還是覺得使用純JS的版本會比較有彈性，至少可以跟jQuery做整合。</p>
<p>使上的方法很簡單，CKEditor下載後，將裡面的ckeditor資料夾複製進專案裡，然後在頁面上引用下列檔案。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_183926.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_183926" border="0" alt="2012-02-11_183926" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_183926_thumb.png" width="551" height="65" /></a></p>
<p>&#160;</p>
<p>這裡用TextBox控制項做示範，記得將TextBox的TextMode設為MultiLine，讓它能多行輸入，另外將CssClass設為ckeditor，如此一來頁面載入的時候，就會自動將編輯器的toolbar給掛進來。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_183946.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_183946" border="0" alt="2012-02-11_183946" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_183946_thumb.png" width="702" height="158" /></a></p>
<p>&#160;</p>
<p>按鈕事件。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184008.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_184008" border="0" alt="2012-02-11_184008" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184008_thumb.png" width="422" height="104" /></a></p>
<p>&#160;</p>
<p>執行畫面。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184039.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_184039" border="0" alt="2012-02-11_184039" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184039_thumb.png" width="828" height="459" /></a></p>
<p>&#160;</p>
<p>按下確定後，會發生錯誤，這是因為後端預設會過濾HTML字串，以避免遭到XSS攻擊。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184056.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_184056" border="0" alt="2012-02-11_184056" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184056_thumb.png" width="590" height="143" /></a></p>
<p>&#160;</p>
<p>要解決這個問題，只要打開config.js，加入下面這一行即可，讓CKEditor將內容做Escape，但如此一來，後端就必須負起過慮字串的責任。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184115.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_184115" border="0" alt="2012-02-11_184115" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184115_thumb.png" width="487" height="121" /></a></p>
<p>&#160;</p>
<p>執行結果。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184136.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-11_184136" border="0" alt="2012-02-11_184136" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120211_184136_thumb.png" width="247" height="224" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/sj7KCzenyCs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/02/11/%e7%b0%a1%e5%96%ae%e6%98%93%e7%94%a8%e7%9a%84ckeditor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/02/11/%e7%b0%a1%e5%96%ae%e6%98%93%e7%94%a8%e7%9a%84ckeditor/</feedburner:origLink></item>
		<item>
		<title>Lucene.Net – 針對數字做為搜尋條件</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/2qOZYMi_Py4/</link>
		<comments>http://b-plurkers.com/2012/02/08/lucene-net-%e9%87%9d%e5%b0%8d%e6%95%b8%e5%ad%97%e5%81%9a%e7%82%ba%e6%90%9c%e5%b0%8b%e6%a2%9d%e4%bb%b6/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 06:15:27 +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/02/08/lucene-net-%e9%87%9d%e5%b0%8d%e6%95%b8%e5%ad%97%e5%81%9a%e7%82%ba%e6%90%9c%e5%b0%8b%e6%a2%9d%e4%bb%b6/</guid>
		<description><![CDATA[如果你的搜尋引擎有特定的用途，例如用在圖書館、電子商務網站等，勢必會針對某些欄位做搜尋，例如會對商品的價格做限制，或是限定在某個上架日期。這些欄位都不是以純文字儲存，而是特定的資料型態，以商品價格來說，它是以整數來儲存。那麼，在搜尋引擎索引時，就必須特別處理。 下面將會以商品價格做為示範，首先是資料的索引，前篇文章都是以Field做索引，但針對價格這種數字型別的，要改以NumericField來存放。 &#160; 在搜尋時，因為已經不是只有單純下Search Query而已，而是會包含其它的條件，所以另外設計一個SearchQuery來包裝整個查詢。 &#160; 在搜尋時，使用BooleanQuery存放多個查詢條件，因為除了對SaleName也會對Price做查詢，至於Price部份是使用NumericRangeQuery。做多個條件查詢時，需明確指出該條件是AND還是OR，所以會用到BooleanClause.Occur來做指定。 &#160; 最後就是真正的查詢，其實跟之前介紹的沒有差別，就是將Hits物件裡的結果取出而已。]]></description>
			<content:encoded><![CDATA[<p>如果你的搜尋引擎有特定的用途，例如用在圖書館、電子商務網站等，勢必會針對某些欄位做搜尋，例如會對商品的價格做限制，或是限定在某個上架日期。這些欄位都不是以純文字儲存，而是特定的資料型態，以商品價格來說，它是以整數來儲存。那麼，在搜尋引擎索引時，就必須特別處理。 </p>
<p><span id="more-1860"></span>
<p>下面將會以商品價格做為示範，首先是資料的索引，前篇文章都是以Field做索引，但針對價格這種數字型別的，要改以NumericField來存放。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_112244.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-08_112244" border="0" alt="2012-02-08_112244" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_112244_thumb.png" width="846" height="233" /></a></p>
<p>&#160;</p>
<p>在搜尋時，因為已經不是只有單純下Search Query而已，而是會包含其它的條件，所以另外設計一個SearchQuery來包裝整個查詢。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_140604.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-08_140604" border="0" alt="2012-02-08_140604" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_140604_thumb.png" width="296" height="122" /></a></p>
<p>&#160;</p>
<p>在搜尋時，使用BooleanQuery存放多個查詢條件，因為除了對SaleName也會對Price做查詢，至於Price部份是使用NumericRangeQuery。做多個條件查詢時，需明確指出該條件是AND還是OR，所以會用到BooleanClause.Occur來做指定。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_112313.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-08_112313" border="0" alt="2012-02-08_112313" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_112313_thumb.png" width="1041" height="375" /></a></p>
<p>&#160;</p>
<p>最後就是真正的查詢，其實跟之前介紹的沒有差別，就是將Hits物件裡的結果取出而已。</p>
<p><a href="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_112330.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2012-02-08_112330" border="0" alt="2012-02-08_112330" src="http://b-plurkers.com/wp-content/uploads/2012/02/20120208_112330_thumb.png" width="574" height="295" /></a></p>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/2qOZYMi_Py4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/02/08/lucene-net-%e9%87%9d%e5%b0%8d%e6%95%b8%e5%ad%97%e5%81%9a%e7%82%ba%e6%90%9c%e5%b0%8b%e6%a2%9d%e4%bb%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/02/08/lucene-net-%e9%87%9d%e5%b0%8d%e6%95%b8%e5%ad%97%e5%81%9a%e7%82%ba%e6%90%9c%e5%b0%8b%e6%a2%9d%e4%bb%b6/</feedburner:origLink></item>
		<item>
		<title>[野人獻曝] 一個小網站可用的資源</title>
		<link>http://feedproxy.google.com/~r/b_plurkers/~3/1bu1LPYHgD8/</link>
		<comments>http://b-plurkers.com/2012/02/02/%e9%87%8e%e4%ba%ba%e7%8d%bb%e6%9b%9d-%e4%b8%80%e5%80%8b%e5%b0%8f%e7%b6%b2%e7%ab%99%e5%8f%af%e7%94%a8%e7%9a%84%e8%b3%87%e6%ba%90/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 10:18:15 +0000</pubDate>
		<dc:creator>小鏡萬歲</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://b-plurkers.com/?p=1848</guid>
		<description><![CDATA[基本上， 這種主題和本篇文章提到的內容應該早就是老梗了， 不過姑且寫下一篇當作給初心者（和我）的筆記好了。 運算主機： AWS EC2：簡單來說，就是給你一台類似VPS的玩意，你想怎麼搞就怎麼搞。前提是你自己要有能夠駕馭系統的能力&#8230;&#8230;不然可能光裝起一台可以跑的系統就夠你忙了。除此之外，玩這玩意的花費是最高的&#8230;&#8230; Google AppEngine：實際上他跟EC2也蠻像的，差別在於&#8230;&#8230;你不能亂搞一通。而且目前只能跑Java和Python。花費的等級算普通，跟Heroku應該差不多。 Heroku： 嗯&#8230;&#8230;嚴格來說她像是AppEngine和EC2的折衷，幾乎沒什麼系統限制，可跑ROR和PHP。花費等級算普通。總結： 總結： 老實說，不計較麻煩的話，用Heroku應該是個不錯的選擇， 因為PHP使用者在操作上會有點麻煩（當然ROR沒這問題）， 但每個月有750小時的免費， 一般使用上應該是沒什麼問題。 如果會Python或Java的話，而且又用不到太搞怪的API的話， 那就直接到Google Appengine， 一般使用上也是不會有什麼問題的。 如果以上兩種都不適合你， 那沒辦法了，你只能用比較貴的EC2了。 資料庫服務： AWS SimpleDB：Amazon自家的nosql服務，簡單點的資料可以用。 AWS RDS：啊～就是Amazon提供的，Oracle家的資料庫服務啊。 AWS DynamoDB：一樣也是nosql，重點在於用SSD放資料（1s 總結： 如果資料可能會有相當的關聯程度，或許用RDS會比較好， 雖然價格可能會高一點， 但是至少操作起來會比較習慣， 否則碰到nosql資料庫可能會讓你手忙腳亂。 至於nosql資料庫中的simpleDB和DynamoDB部份， 由於我對這種類型實在還不懂， 所以還是不下妄語好了。 DNS服務： AWS Route53：要錢&#8230;&#8230;就這樣 freedns：免費，不過介面很醜&#8230;&#8230; dyn：一樣也要錢，沒了 總結： 老實說，這部份其實我很想推免費的freedns就好&#8230;&#8230; 不過免費的總是有很多不確定性， 所以我覺得AWS Route 53可能會是個好選擇。 一來他操作介面簡單美觀，二來也有API可以操作（雖然一般而言這個API應該是可有可無）， 雖然價格上可能會有點可怕， 但估計應該是不會超過dyn之類dns代管服務的收費。 發送email： AWS SES：要錢（1s Mailchimp：有免費方案可用，小站是可以撐著用。 總結： [...]]]></description>
			<content:encoded><![CDATA[<p>基本上，<br />
這種主題和本篇文章提到的內容應該早就是老梗了，<br />
不過姑且寫下一篇當作給初心者（和我）的筆記好了。</p>
<p><span id="more-1848"></span></p>
<p><strong>運算主機：</strong></p>
<ul>
<li><a href="http://aws.amazon.com/ec2/" target="_blank">AWS EC2</a>：簡單來說，就是給你一台類似VPS的玩意，你想怎麼搞就怎麼搞。前提是你自己要有能夠駕馭系統的能力&#8230;&#8230;不然可能光裝起一台可以跑的系統就夠你忙了。除此之外，玩這玩意的花費是最高的&#8230;&#8230;</li>
<li><a href="http://appengine.google.com/" target="_blank">Google AppEngine</a>：實際上他跟EC2也蠻像的，差別在於&#8230;&#8230;你不能亂搞一通。而且目前只能跑Java和Python。花費的等級算普通，跟Heroku應該差不多。</li>
<li><a href="http://www.heroku.com/" target="_blank">Heroku</a>： 嗯&#8230;&#8230;嚴格來說她像是AppEngine和EC2的折衷，幾乎沒什麼系統限制，可跑ROR和PHP。花費等級算普通。總結：</li>
</ul>
<div><strong>總結：</strong></div>
<div>老實說，不計較麻煩的話，用Heroku應該是個不錯的選擇，</div>
<div>因為PHP使用者在操作上會有點麻煩（當然ROR沒這問題），</div>
<div>但每個月有750小時的免費，</div>
<div>一般使用上應該是沒什麼問題。</div>
<div>如果會Python或Java的話，而且又用不到太搞怪的API的話，</div>
<div>那就直接到Google Appengine，</div>
<div>一般使用上也是不會有什麼問題的。</div>
<div>如果以上兩種都不適合你，</div>
<div>那沒辦法了，你只能用比較貴的EC2了。</div>
<div><strong>資料庫服務：</strong></div>
<div>
<ul>
<li><a href="http://aws.amazon.com/simpledb/" target="_blank">AWS SimpleDB</a>：Amazon自家的nosql服務，簡單點的資料可以用。</li>
<li><a href="http://aws.amazon.com/rds/" target="_blank">AWS RDS</a>：啊～就是Amazon提供的，Oracle家的資料庫服務啊。</li>
<li><a href="http://aws.amazon.com/dynamodb/" target="_blank">AWS DynamoDB</a>：一樣也是nosql<span style="text-decoration: line-through;">，重點在於用SSD放資料（1s</span></li>
</ul>
<div><strong>總結：</strong></div>
<div>如果資料可能會有相當的關聯程度，或許用RDS會比較好，</div>
<div>雖然價格可能會高一點，</div>
<div>但是至少操作起來會比較習慣，</div>
<div>否則碰到nosql資料庫可能會讓你手忙腳亂。</div>
<div>至於nosql資料庫中的simpleDB和DynamoDB部份，</div>
<div>由於我對這種類型實在還不懂，</div>
<div>所以還是不下妄語好了。</div>
<div><strong>DNS服務：</strong></div>
<div>
<ul>
<li><a href="http://aws.amazon.com/route53/" target="_blank">AWS Route53</a>：要錢&#8230;&#8230;就這樣</li>
<li><a href="http://freedns.afraid.org/" target="_blank">freedns</a>：免費，不過介面很醜&#8230;&#8230;</li>
<li><a href="http://dyn.com/dns/" target="_blank">dyn</a>：一樣也要錢，沒了</li>
</ul>
<div><strong>總結：</strong></div>
<div>老實說，這部份其實我很想推免費的freedns就好&#8230;&#8230;</div>
<div>不過免費的總是有很多不確定性，</div>
<div>所以我覺得AWS Route 53可能會是個好選擇。</div>
<div>一來他操作介面簡單美觀，二來也有API可以操作（雖然一般而言這個API應該是可有可無），</div>
<div>雖然價格上可能會有點可怕，</div>
<div>但估計應該是不會超過dyn之類dns代管服務的收費。</div>
<div><strong>發送email：</strong></div>
<div>
<ul>
<li><a href="http://aws.amazon.com/ses/" target="_blank">AWS SES</a>：要錢（1s</li>
<li><a href="http://mailchimp.com/" target="_blank">Mailchimp</a>：有免費方案可用，小站是可以撐著用。</li>
</ul>
<div><strong>總結：</strong></div>
<div>簡單來說，小站嘛，一開始能省則省，尤其在剛開始每月要發的垃圾信比較少的時候，</div>
<div>真的是不需要用需要付錢的服務。</div>
<div>因此一開始用mailchimp來作其實是個不錯的選項。</div>
<div>尤其他有一個漂亮的訂閱/取消訂閱頁面模板，</div>
<div>可以讓開發時不用特別麻煩去收集email資料。</div>
<div>相較之下，SES的自訂性較高，</div>
<div>需要的技術能力也很高，</div>
<div>如果是一開始就要上SES會是個艱困的挑戰，</div>
<div>建議還是到了一個龐大的量後再說吧。</div>
<div><strong>版本控制：</strong></div>
<div>
<ul>
<li><a href="http://github.com/" target="_blank">github</a>：基本上算是免費啦&#8230;&#8230;但是要開private repo就要錢，失敗。</li>
<li><a href="http://bitbucket.org/" target="_blank">bitbucket</a>：可以說免費啦，支援Mercuiral和git，也可以開private repo</li>
<li><a href="http://code.google.com/hosting/" target="_blank">Google Code Hosting</a>：免費，大手版本控制軟體都支援，不過不能開private repo。</li>
</ul>
<div><strong>總結：</strong></div>
<div>如果你是要放你的網站檔案的話，那沒得說，只能用bitbucket來弄，</div>
<div>除非你覺得你的網站程式碼公開給人找碴也無妨；</div>
<div>如果你的成品與你的網站機密沒什麼關係的，</div>
<div>其實是可以建議放Google Code Hosting，因為一來空間夠大（2G夠了吧），二來主流版本控制軟體都支援。</div>
<div>當然啦，github的社交性也很不錯，</div>
<div>或許也值得考慮一下。</div>
</div>
<div>（本文完）</div>
</div>
</div>
</div>
<img src="http://feeds.feedburner.com/~r/b_plurkers/~4/1bu1LPYHgD8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://b-plurkers.com/2012/02/02/%e9%87%8e%e4%ba%ba%e7%8d%bb%e6%9b%9d-%e4%b8%80%e5%80%8b%e5%b0%8f%e7%b6%b2%e7%ab%99%e5%8f%af%e7%94%a8%e7%9a%84%e8%b3%87%e6%ba%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://b-plurkers.com/2012/02/02/%e9%87%8e%e4%ba%ba%e7%8d%bb%e6%9b%9d-%e4%b8%80%e5%80%8b%e5%b0%8f%e7%b6%b2%e7%ab%99%e5%8f%af%e7%94%a8%e7%9a%84%e8%b3%87%e6%ba%90/</feedburner:origLink></item>
		<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>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.392 seconds -->

