<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_虫子休息的时候 别忘了别人还在奔跑</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/35529/rss</id><updated>2011-11-13T21:01:53Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/35529/rss"/><entry><id>http://www.cnblogs.com/ILove/archive/2011/08/09/2132650.html</id><title type="text">如何选择开源许可证[zz]</title><summary type="text">from: http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html如何为代码选择开源许可证，这是一个问题。世界上的开源许可证，大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种----GPL、BSD、MIT、Mozilla、Apache和LGPL----之中做选择，也很复杂。乌克兰程序员Paul Bagwell，画了一张分析图，说明应该怎么选择。这是我见过的最简单的讲解，只用两分钟，你就能搞清楚这六种许可证之间的最大区别。下面是我制作的中文版，请点击看大图。</summary><published>2011-08-09T09:59:00Z</published><updated>2011-08-09T09:59:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2011/08/09/2132650.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2011/08/09/2132650.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p&gt;from: &lt;a href="http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html"&gt;http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如何为代码选择开源许可证，这是一个问题。&lt;/p&gt;&#xD;
&lt;p&gt;世界上的开源许可证，大概有&lt;a href="http://www.gnu.org/licenses/license-list.html" target="_blank"&gt;上百种&lt;/a&gt;。很少有人搞得清楚它们的区别。即使在最流行的六种----&lt;a href="http://www.gnu.org/licenses/gpl.html" target="_blank"&gt;GPL&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/BSD_licenses" target="_blank"&gt;BSD&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/MIT_License" target="_blank"&gt;MIT&lt;/a&gt;、&lt;a href="http://www.mozilla.org/MPL/" target="_blank"&gt;Mozilla&lt;/a&gt;、&lt;a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank"&gt;Apache&lt;/a&gt;和&lt;a href="http://www.gnu.org/copyleft/lesser.html" target="_blank"&gt;LGPL&lt;/a&gt;----之中做选择，也很复杂。&lt;/p&gt;&#xD;
&lt;p&gt;乌克兰程序员&lt;a href="http://pbagwl.com/post/5078147450/description-of-popular-software-licenses" target="_blank"&gt;Paul Bagwell&lt;/a&gt;，画了一张分析图，说明应该怎么选择。这是我见过的最简单的讲解，只用两分钟，你就能搞清楚这六种许可证之间的最大区别。&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div id="more" &gt;&#xD;
&lt;p&gt;下面是我制作的中文版，请点击看大图。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://image.beekka.com/blog/201105/free_software_licenses.png" target="_blank"&gt;&lt;img alt="" src="http://image.beekka.com/blog/201105/bg2011050101.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ILove/aggbug/2132650.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ILove/archive/2011/08/09/2132650.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ILove/archive/2009/06/23/1509607.html</id><title type="text">利用矩阵进行坐标系转换</title><summary type="text">之前做拓扑图，本来打算整一套坐标系统在里面的，后来因为时间原因暂时用了最原始的方法实现。现在稍稍得闲，重新开始思考这个问题。不过在搜索的时候，意外发现.Net Framework类库中自带的有实现坐标系转换功能的类。Reflector了一把，发现代码看不懂了——都是利用矩阵操作的。矩阵这玩意儿，几年没用早忘完了。于是认真学习了一把，顺便把如何用矩阵进行坐标转换的过程记录和注解一下。文中部分内容摘取自MSDN，搜索“变换的矩阵表示形式”即可找到。</summary><published>2009-06-23T11:10:00Z</published><updated>2009-06-23T11:10:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2009/06/23/1509607.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2009/06/23/1509607.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2009/02/26/1398920.html</id><title type="text">技术人员的误区(zz)</title><summary type="text"> 编码人员的误区 误区一：因为任务紧迫，所以没有时间想 有些人认为只有在领导规定的时间内完成任务才是最重要和最紧急的。至于方向是否正确，功能是否完整则没有时间去考虑。 这些人陷入了多写些代码和程序就会安全了的假象当中。殊不知方向错了，跑得越快，损失越大。 抱有这种想法的根本原因在于他们的不自信，不知道如何分析问题，找出最佳解决途径和细致的评估影响面，因而无法向上级提出一个更加合理的时间。 例如： Bulk Address feature 的设计者也是说时间紧，没时间细想。后来的结果就是这个 feature 的 design 和代码被一次又一次的推翻和重做。而我们的 leader 也因为反复的向 Jerry Lu 解释上次做错了能否接受我们新的 Solution 而招致了 Jerry Lu 的反感。  误区二：在最后一刻告诉 Leader 代码写完就算开发任务完成了 这种人认为只要写完代码告诉 Team Leader ，自己就可以交差了。 如果做错了，大不了重做； 如果漏做了，大不了补做； 如</summary><published>2009-02-26T08:53:00Z</published><updated>2009-02-26T08:53:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2009/02/26/1398920.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2009/02/26/1398920.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2009/02/20/1394704.html</id><title type="text">Javascript中的类实现</title><summary type="text">Javascript本身并不支持面向对象，它没有访问控制符，它没有定义类的关键字class，它没有支持继承的extend或冒号，它也没有用来支持虚函数的virtual，不过，Javascript是一门灵活的语言，下面我们就看看没有关键字class的Javascript如何实现类定义，并创建对象。一：定义类并创建类的实例对象在Javascript中，我们用function来定义类，如下：Code h...</summary><published>2009-02-20T04:43:00Z</published><updated>2009-02-20T04:43:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2009/02/20/1394704.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2009/02/20/1394704.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2008/12/11/1353034.html</id><title type="text">Remember: 我们是做产品的，不是搞学术研究的 &amp;amp; 用事实说话，不要臆断</title><summary type="text">近来发现，有很多同事在设计Asp.Net Application时，选择用字符串拼Html文本而不用GridView等控件，原因居然是“Asp.Net太慢”。看来有必要再次明确一个本质问题：我们是做产品的，不是搞学术研究的；同时要强调一个习惯：要用事实去证明你的猜测，而不要臆断。一、Remember：我们是做产品的，不是搞学术研究的直接贴一个前阵子的一封邮件，“全在邮件里面了”：发件人:  发送时间: 收件人: 主题: 答复: 关于WebService的性能损失 这个问题里面，缺少对用户场景的描述。 我认为，我们实际应该关心的并不是这两种方式的性能究竟差别有几倍，而是他们是否会对用户、对业务产生影响。 在这个例子里面，1500次的访问，WebService多出了5000毫秒，平均每次访问多出了3ms。那么我有以下几个问题：1、当用户执行一次操作的时候，会调用几次Web Service，从而会多出多少毫秒？2、多出的这些时间，是不是我们必须省下来，还是在允许接受的范围内、可以忽略不计？3、如果用户的一次操作确</summary><published>2008-12-11T09:13:00Z</published><updated>2008-12-11T09:13:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2008/12/11/1353034.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2008/12/11/1353034.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2008/12/08/1350430.html</id><title type="text">Socket状态变迁图</title><summary type="text">服务端,端口的状态变化　　先在本机（IP地址为：192.168.1.10）配置FTP服务，然后在其它计算机（IP地址为：192.168.1.1）访问FTP服务，从TCPView看看端口的状态变化。　　下面黑体字显示的是从TCPView中截取的部分。　　1、LISTENING状态　　FTP服务启动后首先处于侦听（LISTENING）状态。　　State显示是LISTENING时表示处于侦听状态，就是说该端口是开放的，等待连接，但还没有被连接。就像你房子的门已经敞开的，但还没有人进来。　　从TCPView可以看出本机开放FTP的情况。它的意思是:程序inetinfo.exe开放了21端口，FTP默认的端口为21，可见在本机开放了FTP服务。目前正处于侦听状态。　　inetinfo.exe:126</summary><published>2008-12-08T07:57:00Z</published><updated>2008-12-08T07:57:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2008/12/08/1350430.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2008/12/08/1350430.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2008/04/24/1168454.html</id><title type="text">虚函数的调用机制</title><summary type="text">前几天在看《.Net框架程序设计》的时候，好像记得书中有提到说每个对象在创建后都会有一个字段保存了一个内存地址，这个内存地址指向对象实际类型的方法表，其中维护了类型每个方法的签名以及他们的入口地址的对应关系。每次调用方法的时候会到这个表中去查找方法入口地址。而根据我之前对于程序的了解，只有虚函数才会需要保存在这个“函数指针表”中，而非虚方法因为在编译时就已经知道了函数入口地址的相对偏移量（因为确切的知道将要调用的是哪个类的哪个方法），所以最终生成的cpu call指令中可以直接得到函数入口地址（模块加载时的基地址加上偏移量就是实际的入口地址）。而虚方法在编译时无法知道具体调用的是哪个方法，所以才会用这个“虚函数指针表”来使系统能够在运行时获得要调用的是哪个方法。</summary><published>2008-04-23T17:11:00Z</published><updated>2008-04-23T17:11:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2008/04/24/1168454.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2008/04/24/1168454.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2008/04/17/1157229.html</id><title type="text">.Net，你为什么会慢</title><summary type="text">自打使用.Net以来，他给我的印象就一直是：慢。不过这几天看了一下.Net程序运行时的原理，才明白了我们平时的.Net程序是为什么慢的，也明白了在某些情况下其实.Net程序运行起来也不比非托管程序慢。</summary><published>2008-04-16T17:35:00Z</published><updated>2008-04-16T17:35:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2008/04/17/1157229.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2008/04/17/1157229.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html</id><title type="text">理解 Thread.Sleep 函数</title><summary type="text">我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢？思考下面这两个问题：1、假设现在是 2008-4-7 12:00:00.000，如果我调用一下 Thread.Sleep(1000) ，在 2008-4-7 12:00:01.000 的时候，这个线程会 不会被唤醒？2、某人的代码中用了一句看似莫明其妙的话：Thread.Sleep(0) 。既然是 Sleep 0 毫秒，那么他跟去掉这句代码相比，有啥区别么？</summary><published>2008-04-07T06:45:00Z</published><updated>2008-04-07T06:45:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html"/></entry><entry><id>http://www.cnblogs.com/ILove/archive/2008/04/07/1139686.html</id><title type="text">Refactoring to, towards, and away from pattern</title><summary type="text">Refactoring to, towards, and away from pattern&#xD;1、设计过度和设计不足同样不可取&#xD;2、设计欠账&#xD;3、模式的真正价值只是一种思想，而不是一个框图。&#xD;4、模式是否会使得代码更加复杂</summary><published>2008-04-06T17:15:00Z</published><updated>2008-04-06T17:15:00Z</updated><author><name>[虫子]</name><uri>http://www.cnblogs.com/ILove/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ILove/archive/2008/04/07/1139686.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ILove/archive/2008/04/07/1139686.html"/></entry></feed>
