<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>鱼杆鱼堂 &#187; .NET</title>
	<atom:link href="http://www.pumaboyd.com/archives/tag/net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pumaboyd.com</link>
	<description>If you think you can ,you can</description>
	<lastBuildDate>Wed, 18 May 2011 00:52:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>统计de核</title>
		<link>http://www.pumaboyd.com/archives/%e7%bb%9f%e8%ae%a1de%e6%a0%b8</link>
		<comments>http://www.pumaboyd.com/archives/%e7%bb%9f%e8%ae%a1de%e6%a0%b8#comments</comments>
		<pubDate>Thu, 03 Dec 2009 05:03:09 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=1000</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://docs.google.com/present/embed?id=dgmnkg8d_395dqq75shq&#038;size=m" frameborder="0" width="555" height="451"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/%e7%bb%9f%e8%ae%a1de%e6%a0%b8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>拥堵de队列</title>
		<link>http://www.pumaboyd.com/archives/%e6%8b%a5%e5%a0%b5%e9%98%9f%e5%88%97</link>
		<comments>http://www.pumaboyd.com/archives/%e6%8b%a5%e5%a0%b5%e9%98%9f%e5%88%97#comments</comments>
		<pubDate>Thu, 29 Oct 2009 01:56:02 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=968</guid>
		<description><![CDATA[人造的拥堵和高并发，在有缓存和队列情况下的表现： 缓存、队列 直接处理 下载:performance-msc]]></description>
			<content:encoded><![CDATA[<p>人造的拥堵和高并发，在有缓存和队列情况下的表现：</p>
<p>缓存、队列<br />
<img width="550px" src="http://haox3w.bay.livefilestore.com/y1pNEPzjdF9cy_axx-rILbvkiKKA2q88aBWz8evb7jhu0__SOypxpgj_qkfyUV2vHEjRr00w5YZ7GvbhmX69Wt-0g/newtest_iis_per1.jpg" alt="" /></p>
<p>直接处理<br />
<img width="550px" src="http://haox3w.bay.livefilestore.com/y1pmiHtQ_5ah_jx-f7-4kkq3Xl4XxX7fm_Ll0IhQl7XDvY4JTKHQ2H_s095mwiCnHyOeFJkLSN9iKN7Ct9JLrbPyg/iis_process_memory_performance4.png" alt="" /></p>
<p>下载:<a href="http://myquickcode.googlecode.com/files/perfmon.msc">performance-msc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/%e6%8b%a5%e5%a0%b5%e9%98%9f%e5%88%97/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>多线程多CPU的控制</title>
		<link>http://www.pumaboyd.com/archives/%e5%a4%9a%e7%ba%bf%e7%a8%8b%e5%a4%9acpu%e7%9a%84%e6%89%8b%e5%8a%a8%e8%ae%be%e7%bd%ae</link>
		<comments>http://www.pumaboyd.com/archives/%e5%a4%9a%e7%ba%bf%e7%a8%8b%e5%a4%9acpu%e7%9a%84%e6%89%8b%e5%8a%a8%e8%ae%be%e7%bd%ae#comments</comments>
		<pubDate>Mon, 26 Oct 2009 14:14:52 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=953</guid>
		<description><![CDATA[看到tu豆关于多核CPU的使用。也就借鉴过来。虽然是不同的技术，不同的系统，但原理是一个。就是有效的控制CPU的使用，特别是多核时代。 先看看MSSQL2005在多核的情况下的设置 再来看看我的实现：一台系统上跑了几个关键作业。如果我有2个核，我希望分配给指定应用指定的CPU(多核还是多CPU不在此讨论)。 A应用程序有两个线程： ThreadStart ts = new ThreadStart(ThreadHandler); Thread thread = new Thread(ts); thread.IsBackground = true; thread.Start(); ThreadStart ts1 = new ThreadStart(ThreadHandler1); Thread thread1 = new Thread(ts1); thread1.IsBackground = true; thread1.Start(); 这种情况下CPU可是100%的使用率。2核的CPU已经无法进行别的操作。 而如果使用下面的代码CPU将一直控制在50%（只在一个核上运行），效果很满意。 Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1; ThreadStart ts = new ThreadStart(ThreadHandler); Thread thread = new Thread(ts); thread.IsBackground = true; thread.Start(); ThreadStart ts1 = new [...]]]></description>
			<content:encoded><![CDATA[<p>看到tu豆关于多核CPU的使用。也就借鉴过来。虽然是不同的技术，不同的系统，但原理是一个。就是有效的控制CPU的使用，特别是多核时代。</p>
<p>先看看MSSQL2005在多核的情况下的设置</p>
<p><img src="http://haox3w.bay.livefilestore.com/y1pijOG7DZbmUR1nANt19S8RbOjlgVgEMvQ4HQywe6IfggfKeyxd8iru9iLjwFteKHl7arTFVSfqF4tUmfdNVpURpRpibgtWr8e/sql2005_cpu_core.png" alt="" width="550px" /></p>
<p>再来看看我的实现：一台系统上跑了几个关键作业。如果我有2个核，我希望分配给指定应用指定的CPU(多核还是多CPU不在此讨论)。</p>
<p>A应用程序有两个线程：</p>
<blockquote><p>ThreadStart ts = new ThreadStart(ThreadHandler);<br />
Thread thread = new Thread(ts);<br />
thread.IsBackground = true;<br />
thread.Start();</p>
<p>ThreadStart ts1 = new ThreadStart(ThreadHandler1);<br />
Thread thread1 = new Thread(ts1);<br />
thread1.IsBackground = true;<br />
thread1.Start();</p></blockquote>
<p>这种情况下CPU可是100%的使用率。2核的CPU已经无法进行别的操作。</p>
<p><img src="http://haox3w.bay.livefilestore.com/y1pFCcw7vqgSHtf-iPQOtajkjC-xu8wImto1_z1VcUlRq0OtdN8nMAP3XKFmLX26Yb-yNewkV2U2eTEU32_2gXkFCRiJsXrsMJx/windows_cpu_usage.jpg" alt="" /></p>
<p>而如果使用下面的代码CPU将一直控制在50%（只在一个核上运行），效果很满意。</p>
<blockquote><p>Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1;</p>
<p>ThreadStart ts = new ThreadStart(ThreadHandler);<br />
Thread thread = new Thread(ts);<br />
thread.IsBackground = true;<br />
thread.Start();</p>
<p>ThreadStart ts1 = new ThreadStart(ThreadHandler1);<br />
Thread thread1 = new Thread(ts1);<br />
thread1.IsBackground = true;<br />
thread1.Start();</p></blockquote>
<p>有了这样的控制，你的某些耗时长的应用就可以很好的解决了。<br />
<img src="http://haox3w.bay.livefilestore.com/y1pokBoFFoWZkIvt2d1RLeKAiueBmYX1mMEImVwS3IMiX2gpufTcyPnFzCYGCDq0uSXvAqCq61RrRve6r75FF6h5g/windows_cpu_usage.jpg" alt="" /></p>
<p>同时感谢 <a href="http://ricky81317.cnblogs.com/">Ricky</a>、<a href="http://blog.csdn.net/bitfan">金</a>两位的帮忙。</p>
<p>用于测试的辅助代码</p>
<blockquote><p>ManagementClass m = new ManagementClass(&#8220;Win32_Processor&#8221;);<br />
ManagementObjectCollection mn = m.GetInstances();<br />
Console.WriteLine(&#8220;CPU个数：&#8221; + mn.Count.ToString());<br />
ManagementObjectSearcher MySearcher = new ManagementObjectSearcher(&#8220;SELECT * FROM Win32_Processor&#8221;);<br />
foreach (ManagementObject MyObject in MySearcher.Get())<br />
{<br />
Console.WriteLine(&#8220;主频：&#8221; +   MyObject.Properties["CurrentClockSpeed"].Value.ToString());<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/%e5%a4%9a%e7%ba%bf%e7%a8%8b%e5%a4%9acpu%e7%9a%84%e6%89%8b%e5%8a%a8%e8%ae%be%e7%bd%ae/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WAP开发中使用Google Map(静态地图的偏移)</title>
		<link>http://www.pumaboyd.com/archives/wap%e5%bc%80%e5%8f%91%e4%b8%ad%e4%bd%bf%e7%94%a8google-map%e9%9d%99%e6%80%81%e5%9c%b0%e5%9b%be%e7%9a%84%e5%81%8f%e7%a7%bb</link>
		<comments>http://www.pumaboyd.com/archives/wap%e5%bc%80%e5%8f%91%e4%b8%ad%e4%bd%bf%e7%94%a8google-map%e9%9d%99%e6%80%81%e5%9c%b0%e5%9b%be%e7%9a%84%e5%81%8f%e7%a7%bb#comments</comments>
		<pubDate>Tue, 20 Oct 2009 07:00:33 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=926</guid>
		<description><![CDATA[最近WAP站点新增的地图功能。因为WAP网站的特殊性，所以就只能使用静态地图。Google静态地图的使用参见。如果希望提高效率，再架设一层图片缓存，而且图片缓存这一层很有必要。 偏移量的计算 lat、lng 起始中心点 lat1、lng1 偏移后的中心点 top、lef偏移量 z地图缩放级别 public string StaticMapMove(double lat, double lng, double top ,double left,int z) { double lat1; double lng1; int lm = z &#8211; 16;//地图的缩放级别16 lat1 = lat + top / 100000 / Math.Pow(2,lm); lng1 = lng + left / 100000 / Math.Pow(2, lm); } 这个是关键实现代码，具体比例大家要调试。地图的尺寸、缩放比例都会影响到这些。]]></description>
			<content:encoded><![CDATA[<p>最近WAP站点新增的地图功能。因为WAP网站的特殊性，所以就只能使用静态地图。Google静态地图的使用<a href="http://code.google.com/intl/zh-CN/apis/maps/documentation/staticmaps/" target="_blank">参见</a>。如果希望提高效率，再架设一层图片缓存，而且图片缓存这一层很有必要。</p>
<p><img src="http://www.pumaboyd.com/wp-content/uploads/2009/10/wapmap1.jpg" alt="wapmap1" title="wapmap1" width="265" height="426" class="alignnone size-full wp-image-933" /></p>
<p><strong>偏移量的计算</strong></p>
<p>lat、lng 起始中心点<br />
lat1、lng1 偏移后的中心点<br />
top、lef偏移量<br />
z地图缩放级别</p>
<blockquote><p>
public string StaticMapMove(double lat, double lng, double top ,double left,int z)<br />
		{<br />
			double lat1;<br />
			double lng1;<br />
			int lm = z &#8211; 16;//地图的缩放级别16</p>
<p>			lat1 = lat + top / 100000 / Math.Pow(2,lm);<br />
			lng1 = lng + left / 100000 / Math.Pow(2, lm);</p>
<p>		}
</p></blockquote>
<p>这个是关键实现代码，具体比例大家要调试。地图的尺寸、缩放比例都会影响到这些。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/wap%e5%bc%80%e5%8f%91%e4%b8%ad%e4%bd%bf%e7%94%a8google-map%e9%9d%99%e6%80%81%e5%9c%b0%e5%9b%be%e7%9a%84%e5%81%8f%e7%a7%bb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET WAP网站开发系列</title>
		<link>http://www.pumaboyd.com/archives/net-wap%e7%bd%91%e7%ab%99%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97</link>
		<comments>http://www.pumaboyd.com/archives/net-wap%e7%bd%91%e7%ab%99%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97#comments</comments>
		<pubDate>Sun, 23 Aug 2009 04:01:48 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=765</guid>
		<description><![CDATA[应德军兄的要求,完成了WAP2.0开发相关的文章。想想这个系统也写到了第3篇，不知道WAP3.0的时候，是否还会继续。 从最先的.NET控件，到WML1.1,再到WAP2.0。对.NET WAP网站的开发总结也一直在进行的。其中遇到了很多问题，有解决了，也有正在想办法解决的。这些经验分享也希望对大家有用。 .NET WAP开发-基础篇 .NET WAP开发-兼容篇 .NET WAP开发-WAP2.0篇 .NET WAP开发-Google Map的使用]]></description>
			<content:encoded><![CDATA[<p>应德军兄的要求,完成了WAP2.0开发相关的文章。想想这个系统也写到了第3篇，不知道WAP3.0的时候，是否还会继续。<br />
从最先的.NET控件，到WML1.1,再到WAP2.0。对.NET WAP网站的开发总结也一直在进行的。其中遇到了很多问题，有解决了，也有正在想办法解决的。这些经验分享也希望对大家有用。</p>
<ul>
<li><a target="_blank" href="http://www.pumaboyd.com/archives/480"><strong>.NET WAP开发-基础篇</strong></a></li>
<li><a target="_blank" href="http://www.pumaboyd.com/archives/298"><strong>.NET WAP开发-兼容篇</strong></a></li>
<li><a target="_blank" href="http://www.pumaboyd.com/archives/754"><strong>.NET WAP开发-WAP2.0篇</strong></a></li>
<li><a target="_blank" href="http://www.pumaboyd.com/archives/926"><strong>.NET WAP开发-Google Map的使用</strong></a></li>
<p><span id="more-765"></span>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/net-wap%e7%bd%91%e7%ab%99%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>.NET WAP开发-WAP2.0篇</title>
		<link>http://www.pumaboyd.com/archives/net-wap%e5%bc%80%e5%8f%91-wap20%e7%af%87</link>
		<comments>http://www.pumaboyd.com/archives/net-wap%e5%bc%80%e5%8f%91-wap20%e7%af%87#comments</comments>
		<pubDate>Sun, 23 Aug 2009 03:37:19 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=754</guid>
		<description><![CDATA[WAP1.1时代是否结束这个不可下定论。但WAP2.0的大面积使用应该已经成熟。DianPing网的WAP站点也基本上迁移到WAP2.0 从构建WAP网站的过程来看,WAP2.0和WAP1.1并没有什么很大的区别。 可以这么说wap2.0其实就是xhtml的网站，而wap1.1是wml的网站。 相比WML受到的限制，WAP2.0网站可以直接在PC上显示。CSS的有限支持。大大丰富了网页在手机上的展示，提供了更丰富的用户体验。WAP 2.0 可以简单的概括为 XHTML MP + WAP CSS 什么是XHTML MP 简单的引用一段话 XHTML MP 是基于 XHTML Basic创造，并从XHTML的完整版本中增加了一些元素和属性。例如 &#60;i&#62;,&#60;b&#62;,&#60;small&#62;,&#60;big&#62;和&#60;hr&#62;。XHTML MP支持一个简单的CSS版本，即WCSS/WAP CSS。 也就是说我们在WAP2.0中可以使用那些标签呢？具体可以查看这个http://www.w3.org/TR/2008/REC-xhtml-basic-20080729/ 大概列举一下 Structure Module body, head, html, title Text Module abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, [...]]]></description>
			<content:encoded><![CDATA[<p>WAP1.1时代是否结束这个不可下定论。但WAP2.0的大面积使用应该已经成熟。DianPing网的WAP站点也基本上迁移到WAP2.0<br />
从构建WAP网站的过程来看,<a href="http://www.pumaboyd.com/archives/754">WAP2.0</a>和WAP1.1并没有什么很大的区别。<br />
可以这么说wap2.0其实就是xhtml的网站，而wap1.1是wml的网站。<br />
相比WML受到的限制，WAP2.0网站可以直接在PC上显示。CSS的有限支持。大大丰富了网页在手机上的展示，提供了更丰富的用户体验。WAP 2.0 可以简单的概括为 XHTML MP +  WAP CSS<br />
<span id="more-754"></span><br />
<strong>什么是XHTML MP</strong><br />
简单的引用一段话</p>
<blockquote><p>XHTML MP 是基于 XHTML Basic创造，并从XHTML的完整版本中增加了一些元素和属性。例如<br />
&lt;i&gt;,&lt;b&gt;,&lt;small&gt;,&lt;big&gt;和&lt;hr&gt;。XHTML MP支持一个简单的CSS版本，即WCSS/WAP CSS。</p></blockquote>
<p>也就是说我们在<a href="http://www.pumaboyd.com/archives/754">WAP2.0</a>中可以使用那些标签呢？具体可以查看这个http://www.w3.org/TR/2008/REC-xhtml-basic-20080729/<br />
大概列举一下</p>
<blockquote><p><strong>Structure Module</strong><br />
body, head, html, title<br />
<strong>Text Module</strong><br />
abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span,<br />
strong, var<br />
<strong>Hypertext Module</strong><br />
a<br />
<strong>List Module</strong><br />
dl, dt, dd, ol, ul, li<br />
<strong>Forms Module</strong><br />
button, fieldset, form, input, label, legend, select, optgroup, option, textarea<br />
<strong>Basic Tables Module</strong><br />
caption, table, td, th, tr<br />
<strong>Image Module</strong><br />
img<br />
<strong>Object Module</strong><br />
object, param<br />
<strong>Presentation module</strong><br />
b, big, hr, i, small, sub, sup, tt<br />
<strong>Metainformation Module</strong><br />
meta<br />
<strong>Link Module</strong><br />
link<br />
<strong>Base Module</strong><br />
base</p></blockquote>
<p>眼花，其实常用的页面标签（根据目前国内的情况分析的）</p>
<ul>
<li>div-页面结构分块</li>
<li>span-文本</li>
<li>b-粗体(但这个标签一定要在CSS定义)</li>
<li>br-换行</li>
<li>a-链接</li>
<li>img-图片</li>
<li>hr-分割线</li>
<li>input-表单相关标签</li>
</ul>
<p>不推荐使用标签table，一是因为难于控制，二是设备解析兼容问题。<br />
b加粗需要在CSS中做定义，因为不是所有的设备都能正确的解释b。</p>
<p><strong>什么是WAP CSS</strong><br />
<a href="http://www.pumaboyd.com/archives/754">WAP CSS</a> 是CSS2的子集+一些WAP特有的扩展</p>
<p>英文的定义也很多</p>
<ul>
<li>WCSS/WAP</li>
<li>CSS/Wireless</li>
<li>CSS/Wireless Profile CSS</li>
</ul>
<p>但请大家一定记住这几个都是一样东西，但和W3C CSS Mobile Profile是不一样的。所以google搜索资料的时候特别注意。</p>
<p>可以定义元素的有color，font，background，border，margin，padding等属性，具体大家可以参考dianping的wap网站</p>
<p><strong>值得注意的几个地方</strong></p>
<ul>
<li>border-style属性值有很多，但只有none和solid被WAP浏览器广泛支持。</li>
<li>标签 &lt;u&gt; 在 XHTML MP 中是不存在的. 要想添加划线需要定义如下样式:<br />
.uline{text-decoration: underline}</li>
<li>
标签&lt;b&gt; 不是所有浏览器支持（不定义也可以，将会被浏览器忽略），所以要重新定义一些b的样式<br />
b{font-weight:bold;}
</li>
</ul>
<p><strong>CSS样式的位置问题</strong><br />
和web开发类似，在当前的文档style中定义，或是外部引用。但推荐在文档中定义，好处只有一个，避免兼容问题,不是所有设备都支持CSS的<a href="http://www.pumaboyd.com/archives/754">外部引用</a>的。在实际开发中，通过.NET的母板页方式，其实也只要维护一个地方。</p>
<p><strong>文档MIME 类型如何定义</strong><br />
下面三个 MIME 类型可用于 XHTML MP 文档:</p>
<ul>
<li>application/vnd.wap.xhtml+xml</li>
<li>application/xhtml+xml</li>
<li>text/html</li>
</ul>
<p>开放移动联盟 (Open Mobile Alliance, OMA) 的推荐类型是&#8221;application/vnd.wap.xhtml+xml&#8221;</p>
<p>还有一种选择就是&#8221;application/xhtml+xml&#8221;，google使用了这个规则</p>
<p>如果使用&#8221;text/html&#8221; 有一个好处是你的 XHTML MP 页面Web 浏览器也可以正常显示。其他的类型，如果浏览器不知道，就会弹出提示框了。最佳的做法是动态选择 MIME 类型，这个可以通过Accept Header 做相应的判断，来动态改变。</p>
<p><strong>XHTML MP 预格式化的文本</strong></p>
<p>在 XHTML MP 中, 一个段落的前导和后缀空白符是不会被显示的. 因此, 一个段落中连续的两个或更多个空白字符在移动设备的屏幕上只会显示为一个空白字符. 要保留 <a href="http://www.pumaboyd.com/archives/754">XHTML MP</a> 中文本的格式, 你就得用 &lt;pre&gt; 元素来进行处理。不过这个标签是否对所有设备支持，我保持怀疑。</p>
<p><strong>img标签的使用</strong><br />
WAP2.0中支持的格式有 &#8220;image/gif&#8221;, &#8220;image/jpg&#8221; 和 &#8220;image/png&#8221;,</p>
<p>用法上和WEB中一样. 但尽量设置img 的高度和宽度，这样可以加快页面的渲染。</p>
<p>而且最好不要使用过多的图片，毕竟是手机网络，图片的加载效果太明显了。</p>
<p><strong>XHTML MP 中的锚点链接</strong><br />
#号的跳转功能非常有用，也是我认为对用户来说最有效的体验。<br />
它一般用在导航。先设置目标链接，通过<a href="http://www.pumaboyd.com/archives/754">id</a>属性设置；再设置锚链接的URL为#id名称即可实现在同一个页面，导航的作用。这个大家可以看看sina.cn的彩版对其的运用是比较经典的做法。</p>
<blockquote><p>&lt;div&gt;&lt;a id=&#8221;top&#8221;&gt;&lt;/a&gt;&lt;/div&gt;<br />
&#8230;&#8230;<br />
&lt;div&gt;&lt;a href=&#8221;#top&#8221;&gt;Back to top&lt;/a&gt;&lt;/div&gt;</p></blockquote>
<p><strong>如何测试WAP网站是否符合Mobile标准</strong></p>
<p>很简单，可以在http://validator.w3.org/mobile/检查你的站点是否适合Mobile浏览。也可以作为修正规范的一个工具，就是速度奇慢。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/net-wap%e5%bc%80%e5%8f%91-wap20%e7%af%87/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>.NET API的开发整理</title>
		<link>http://www.pumaboyd.com/archives/net-api%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%b4%e7%90%86</link>
		<comments>http://www.pumaboyd.com/archives/net-api%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%b4%e7%90%86#comments</comments>
		<pubDate>Thu, 23 Jul 2009 04:57:08 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=740</guid>
		<description><![CDATA[前段时间一直在忙于API的开发和整理,也参考了不少网站在API上的实现。对于公司API的整理，也是痛苦不堪。毕竟这东西说白了就是XML。体力活，没有技术含量。但如果做了，总要实现一些有价值的探索。盲人摸象的事情太多，所以这里我也不想和大家讨论API的牛叉之言。而是一些实际的应用问题，或是还没有解决的问题。 API的目的 想讨论这个问题，是因为在实际的开发中，碰到了接口定义的问题。业务的需求总是在不断变化的.API接口的固定性，和本身应该具有的稳定性，我认为就决定了对于应用方来说，是根据这个接口，去完成所要的功能。而我们目前的内部系统在调用API的过程中确产生了，API跟着应用走的问题。“你接口没有这个，需要改一下接口”这样的方式让我有些茫然。一个API已经转变成了一个系统的DAC层。所以在开发一个平台的时候，我们应该清楚认识到：我们到底是需要API，还是需要一个中间数据访问层？ API返回信息是越多还是越少 这是个始料未及的问题。最早在规划API的时候，我的目的很明确的就是多返回信息。因为返回的越多，第三方在应用层面上，使用起来就越方便。但当这个第三方应用是Mobile的时候，问题就来了。手机的局限性，是希望越少的网络交互及流量越好，应用越快。而我这个返回大量信息（对于Moblie的无用数据）的接口成了累赘!taobao有通过fliter来返回指点字段信息的方式。这是一个实现方式，但.NET就目前我采用的方式和人手，不能和它们比。最拙劣的实现方式，就是第三方在封装一层，返回尽力小的数据，来降低Mobile的流量交换。 返回ID,返回Name，或两者 这是个很通用的问题，不要小看它。以分类为言，我返回一个Shop信息，其中分类“美食”，我是返回ID=12，还是直接返回Name=“美食”呢？当然如果我返回ID,会单独提供一个ID读取Name的方法。 这个问题的提出就意味这，如果我认为Name比提供方法翻译ID方便，也就意味这我所有的接口层中，ID都必须统一到这个规则，因为对于API来说，ID还是需要翻译。但如果从简化开发的工作量来说，我返回ID，由第三方平台自己去负责揉和数据，也是一种选择。这个我在犹豫?是简化工作，还是反而复杂了API，我现在无从回答。 API文档 API在线文档。我的得意之作啊！虽然没什么技术含量，但关键还在于执行，稍有成就感！对于api文档，采用wiki的方式，是受taobao开放平台的启发。的确是一个不错的选择。 《==待续==》]]></description>
			<content:encoded><![CDATA[<p>前段时间一直在忙于API的开发和整理,也参考了不少网站在API上的实现。对于公司API的整理，也是痛苦不堪。毕竟这东西说白了就是XML。体力活，没有技术含量。但如果做了，总要实现一些有价值的探索。盲人摸象的事情太多，所以这里我也不想和大家讨论API的牛叉之言。而是一些实际的应用问题，或是还没有解决的问题。<br />
<span id="more-740"></span></p>
<p><strong>API的目的</strong><br />
想讨论这个问题，是因为在实际的开发中，碰到了接口定义的问题。业务的需求总是在不断变化的.API接口的固定性，和本身应该具有的稳定性，我认为就决定了对于应用方来说，是根据这个接口，去完成所要的功能。而我们目前的内部系统在调用API的过程中确产生了，API跟着应用走的问题。“你接口没有这个，需要改一下接口”这样的方式让我有些茫然。一个API已经转变成了一个系统的DAC层。所以在开发一个平台的时候，我们应该清楚认识到：我们到底是需要API，还是需要一个中间数据访问层？</p>
<p><strong>API返回信息是越多还是越少</strong><br />
这是个始料未及的问题。最早在规划API的时候，我的目的很明确的就是多返回信息。因为返回的越多，第三方在应用层面上，使用起来就越方便。但当这个第三方应用是Mobile的时候，问题就来了。手机的局限性，是希望越少的网络交互及流量越好，应用越快。而我这个返回大量信息（对于Moblie的无用数据）的接口成了累赘!taobao有通过fliter来返回指点字段信息的方式。这是一个实现方式，但.NET就目前我采用的方式和人手，不能和它们比。最拙劣的实现方式，就是第三方在封装一层，返回尽力小的数据，来降低Mobile的流量交换。</p>
<p><strong>返回ID,返回Name，或两者</strong><br />
这是个很通用的问题，不要小看它。以分类为言，我返回一个Shop信息，其中分类“美食”，我是返回ID=12，还是直接返回Name=“美食”呢？当然如果我返回ID,会单独提供一个ID读取Name的方法。<br />
这个问题的提出就意味这，如果我认为Name比提供方法翻译ID方便，也就意味这我所有的接口层中，ID都必须统一到这个规则，因为对于API来说，ID还是需要翻译。但如果从简化开发的工作量来说，我返回ID，由第三方平台自己去负责揉和数据，也是一种选择。这个我在犹豫?是简化工作，还是反而复杂了API，我现在无从回答。</p>
<p><strong>API文档</strong><br />
<a href="http://sites.google.com/site/dianpingapi/">API在线文档</a>。我的得意之作啊！虽然没什么技术含量，但关键还在于执行，稍有成就感！对于api文档，采用wiki的方式，是受taobao开放平台的启发。的确是一个不错的选择。</p>
<p>《==待续==》</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/net-api%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%b4%e7%90%86/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Q]大数据量的导出</title>
		<link>http://www.pumaboyd.com/archives/q%e5%a4%a7%e6%95%b0%e6%8d%ae%e9%87%8f%e7%9a%84%e5%af%bc%e5%87%ba</link>
		<comments>http://www.pumaboyd.com/archives/q%e5%a4%a7%e6%95%b0%e6%8d%ae%e9%87%8f%e7%9a%84%e5%af%bc%e5%87%ba#comments</comments>
		<pubDate>Tue, 21 Jul 2009 02:35:31 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=738</guid>
		<description><![CDATA[以前写的一个生产数据的工具，因为数据量的增长和逻辑复杂的原因，已经到了无法使用的地步。导出的数据4、5次都出现数据库失败。初步分析下来的原因，是因为连接数据库时间过长的原因。但具体说不上为什么。 使用了DataReader进行了长连接，但未什么还是无法很好的完成数据呢？DataSet方式肯定是不可取的。不知道是否有更好的方式可以提供？ 目前的解决方式 人工手动分页取数据。比如以每页50000条数据为单位进行分析。这样增加了连接的次数，但可以保证连接的有效性。而且有断点续传的味道。 还是期待有更好的方式可以提供！]]></description>
			<content:encoded><![CDATA[<p>以前写的一个生产数据的工具，因为数据量的增长和逻辑复杂的原因，已经到了无法使用的地步。导出的数据4、5次都出现数据库失败。初步分析下来的原因，是因为连接数据库时间过长的原因。但具体说不上为什么。<br />
使用了DataReader进行了长连接，但未什么还是无法很好的完成数据呢？DataSet方式肯定是不可取的。不知道是否有更好的方式可以提供？<br />
<strong>目前的解决方式</strong><br />
人工手动分页取数据。比如以每页50000条数据为单位进行分析。这样增加了连接的次数，但可以保证连接的有效性。而且有断点续传的味道。<br />
还是期待有更好的方式可以提供！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/q%e5%a4%a7%e6%95%b0%e6%8d%ae%e9%87%8f%e7%9a%84%e5%af%bc%e5%87%ba/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RSS开发小技巧-ASP.NET RSS开发</title>
		<link>http://www.pumaboyd.com/archives/rss%e5%bc%80%e5%8f%91%e5%b0%8f%e6%8a%80%e5%b7%a7-aspnet-rss%e5%bc%80%e5%8f%91</link>
		<comments>http://www.pumaboyd.com/archives/rss%e5%bc%80%e5%8f%91%e5%b0%8f%e6%8a%80%e5%b7%a7-aspnet-rss%e5%bc%80%e5%8f%91#comments</comments>
		<pubDate>Sun, 22 Feb 2009 22:49:10 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=630</guid>
		<description><![CDATA[整理了一下RSS开发中的小技巧，这样会另你的RSS与众不同。 RSS添加CSS 代码rss.css的位置，这样你的RSS直接通过浏览器访问就像页面一样，而不只是XML输入了（PS:忘记了是否是所以浏览器都可) "); ....... FireFox显示订阅按钮 在页面的Head部分添加如下代码，就可以在FireFox的地址栏出现RSS订阅按钮]]></description>
			<content:encoded><![CDATA[<p>整理了一下RSS开发中的小技巧，这样会另你的RSS与众不同。</p>
<p><strong>RSS添加CSS</strong><br />
代码rss.css的位置，这样你的RSS直接通过浏览器访问就像页面一样，而不只是XML输入了（PS:忘记了是否是所以浏览器都可)<br />
<span id="more-630"></span></p>
<pre lang="xml">
<xml>
<?xml-stylesheet type="text/css" href="http://www.pumaboyd.com/rss.css"?>
<rss version=\"2.0\">");
<channel>
.......
</channel>
</rss>
</pre>
<p><strong>FireFox显示订阅按钮</strong><br />
在页面的Head部分添加如下代码，就可以在FireFox的地址栏出现RSS订阅按钮</p>
<pre lang="xml">
<link rel="alternate" type="application/rss+xml" href="http://www.pumaboyd/feed" title="pumaboyd Feed"/>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/rss%e5%bc%80%e5%8f%91%e5%b0%8f%e6%8a%80%e5%b7%a7-aspnet-rss%e5%bc%80%e5%8f%91/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SyndicationFeed的使用-ASP.NET RSS开发</title>
		<link>http://www.pumaboyd.com/archives/syndicationfeed%e7%9a%84%e4%bd%bf%e7%94%a8-aspnet-rss%e5%bc%80%e5%8f%91</link>
		<comments>http://www.pumaboyd.com/archives/syndicationfeed%e7%9a%84%e4%bd%bf%e7%94%a8-aspnet-rss%e5%bc%80%e5%8f%91#comments</comments>
		<pubDate>Sun, 22 Feb 2009 22:25:19 +0000</pubDate>
		<dc:creator>pumaboyd</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.pumaboyd.com/?p=624</guid>
		<description><![CDATA[(*^__^*)这个才是真正的主角。RSS开发了一圈，突然发现MS在.NET3.5下面提供了SyndicationFeed（需要引用System.ServiceModel.Syndication.dll)。实现的思路和RSS自定义对象一样。但毕竟是MS官方的，从对标准格式的支持，到可扩展性上是无可比拟的。所以延用老规矩，和.NET Framework一起工作，慢慢转到使用这个。内置的方法就是已经支持RSS、ATOM的转换。 protected override void OnLoad(EventArgs e) { SyndicationFeed feed = new SyndicationFeed("商户信息", "提供商户信息列表", new Uri("http://www.pumaboyd.com/feed")); Collection items = new Collection(); foreach (var shop in RssData.GetShops()) { SyndicationItem item = new SyndicationItem(); item.Title = new TextSyndicationContent(shop.ShopName + shop.BranchName); item.Content = new TextSyndicationContent(shop.Address); item.Summary = new TextSyndicationContent(shop.Address); item.Links.Add(new SyndicationLink(new Uri("http://www.pumaboyd.com/shop/" + shop.ShopID))); item.Authors.Add(new SyndicationPerson("pumaboyd@163.com",shop.AddUser,"http://www.pumaboyd.com")); item.PublishDate = [...]]]></description>
			<content:encoded><![CDATA[<p>(*^__^*)这个才是真正的主角。RSS开发了一圈，突然发现MS在.NET3.5下面提供了SyndicationFeed（需要引用System.ServiceModel.Syndication.dll)。实现的思路和<a href="http://www.pumaboyd.com/archives/620">RSS自定义对象</a>一样。但毕竟是MS官方的，从对标准格式的支持，到可扩展性上是无可比拟的。所以延用老规矩，和.NET Framework一起工作，慢慢转到使用这个。内置的方法就是已经支持RSS、ATOM的转换。<br />
<span id="more-624"></span></p>
<pre lang="csharp">
 protected override void OnLoad(EventArgs e)
        {

            SyndicationFeed feed = new SyndicationFeed("商户信息", "提供商户信息列表", new Uri("http://www.pumaboyd.com/feed"));

            Collection<SyndicationItem> items = new Collection<SyndicationItem>();

            foreach (var shop in RssData.GetShops())
            {
                SyndicationItem item = new SyndicationItem();
                item.Title = new TextSyndicationContent(shop.ShopName + shop.BranchName);
                item.Content = new TextSyndicationContent(shop.Address);
                item.Summary = new TextSyndicationContent(shop.Address);
                item.Links.Add(new SyndicationLink(new Uri("http://www.pumaboyd.com/shop/" + shop.ShopID)));
                item.Authors.Add(new SyndicationPerson("pumaboyd@163.com",shop.AddUser,"http://www.pumaboyd.com"));
                item.PublishDate = shop.AddTime;
                item.Id = "http://www.pumaboyd.com/shop/" + shop.ShopID;
                items.Add(item);
            }

            feed.Items = items;

            Response.ContentType = "application/rss+xml";
            var output = new StringWriter();
            var writer = new XmlTextWriter(output);
            feed.SaveAsRss20(writer);
            Response.Write(output.ToString());

        }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pumaboyd.com/archives/syndicationfeed%e7%9a%84%e4%bd%bf%e7%94%a8-aspnet-rss%e5%bc%80%e5%8f%91/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

