<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
  <channel>
    <title><![CDATA[Q.yuhen]]></title> 
    <link>http://www.rainsts.net/</link> 
    <description><![CDATA[秋雨漏更夜，琴音动心痕。RainTrail Studio.China 2000-2009]]></description> 
    <language>zh-cn</language> 
    <copyright><![CDATA[Copyright 2010, Q.yuhen]]></copyright> 
    <webMaster><![CDATA[qyuhen@hotmail.com (Q.yuhen)]]></webMaster> 
    <generator>LBS v2.0.313</generator> 
    <pubDate>Tue, 09 Feb 2010 08:40:29 +0800</pubDate> 
    <ttl>60</ttl>
  
    <item>
      <title><![CDATA[Ubuntu Bug #477169]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=920]]></link> 
      <category><![CDATA[Linux]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Sat, 06 Feb 2010 13:39:05 +0800</pubDate> 
      <description><![CDATA[Wubi 方式安装的 Ubuntu 9.10 在升级内核后，可能导致 Grub2 无法正常引导，直接进入命令行状态。<br /><div class="code">GNU Grub, minimal BASH-like line editing is supported.For the first word,TAB lists possible command completions.</div><br />解决方法：<br /><br /><a href="https://bugs.launchpad.net/ubuntu/+source/lupin/+bug/477169/comments/210" title="https://bugs.launchpad.net/ubuntu/+source/lupin/+bug/477169/comments/210" target="_blank">https://bugs.launchpad.net/ubuntu/+source/lupin/+bug/477169/comments/210</a><br /><div class="code">For a patch/workaround:<br /><br />A) get the wubildr in https&#58;//bugs.edge.launchpad.net/ubuntu/+source/grub2/+bug/477104/comments/90 and copy it over C:\wubildr </div>]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=920]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[extern alias]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=919]]></link> 
      <category><![CDATA[C# Language]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Sun, 31 Jan 2010 14:46:29 +0800</pubDate> 
      <description><![CDATA[再次遭遇类型完全限定名(Type.Fullname = namespace + type name)撞车。简单点说，就是项目引用的 A.dll 和 B.dll 都有一个 MyNamespace.Class1 这样的类型。于是在我们使用该类型的时候就有点麻烦，我们和编译器都无法确认究竟是调用 A.MyNamespace.Class1 还是 B.MyNamespace.Class1。<br /><br />可以利用 extern 修改引入的程序集的别名，在 Solution Explorer 窗口中，分别选择被引用(Reference)的 A.dll 和 B.dll 程序集，右键打开该程序集属性窗口，将 Aliases 从默认的 global 改为 A 或 B。<br /><div class="code">using System;<br />using System.Collections.Generic;<br />using System.Linq;</div>]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=919]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[String in Stack?]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=918]]></link> 
      <category><![CDATA[C# Language]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Sun, 31 Jan 2010 01:29:42 +0800</pubDate> 
      <description><![CDATA[对于中文分词、文本聚类这些海量密集型字符串处理系统而言，.NET String 现有机制还是有一定的性能瓶颈的。就算我们用 StringBuilder 也不可避免 Heap Gen0 的频繁回收，我们是否可以像 C 语言那样在堆栈帧里直接处理字符数组呢？<br /><div class="code">unsafe static void Main(string[] args)<br />{<br />&nbsp;&nbsp;char* p = stackalloc char[10];<br />&nbsp;&nbsp;char* temp = p;<br /><br />&nbsp;&nbsp;foreach (var c in &quot;abcdefg&quot;)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;*(temp++) = c;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;*temp = &#39;\0&#39;;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;var s = new String(p);<br />}</div><br />借助 unsafe stackalloc 关键字我们可以直接在栈上分配内存块，如此利用指针就可以进行高效处理。栈的好处在于无需 ]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=918]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[起点，纪念！]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=917]]></link> 
      <category><![CDATA[Misc]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Tue, 26 Jan 2010 04:38:46 +0800</pubDate> 
      <description><![CDATA[下狠心将系统全部重做，整个迁移到 Ubuntu Desktop 9.10。虽然在 VMware 里用了小半年，但真个替换 Windows 终究有点不习惯，主要是许多用了 n 年的工具软件都没了。希望在 Ubuntu 10.4 / Visual Studio 2010 发布前，我能完全适应新的环境。<br /><br />发文纪念一下。鉴于某些原因，联络没有以前那么方便了，如有事寻我，可走如下途径：<br /><br />1. 手机短信，24 小时在线。<br />2. 电子邮件，每天会检查一次。<br />3. QQ， 不定时上，晚上多半会晃荡一阵。<br /><br /> <img src="http://www.rainsts.net/styles/default/images/smilies/icon_smile.gif" border="0" alt="[smile]" />]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=917]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[pthread_create memory leak ?]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=916]]></link> 
      <category><![CDATA[ASM C/C++]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Thu, 21 Jan 2010 15:50:08 +0800</pubDate> 
      <description><![CDATA[线程(thread) 对于 Linux 内核来说就是一种特殊的 &quot;轻量级进程&quot;。如同 fork() 处理子进程一样，当线程结束(exit)时，它会维持一个最小现场，其中保存有退出状态等资源，以便主线程(或其他线程)调用 thread_join() 获取这些信息。如果我们不处理这个现场，那么就会发生内存泄露。<br /><div class="code">void* test(void* arg)<br />{<br />&nbsp;&nbsp;printf(&quot;%s\n&quot;, (char*)arg);<br />&nbsp;&nbsp;return (void*)0;<br />}<br /><br />int main(int argc, char** argv)<br />{<br />&nbsp;&nbsp;pthread_t tid;<br />&nbsp;&nbsp;pthread_create(&amp;tid, NULL, test, &quot;a&quot;);<br /><br />&nbsp;&nbsp;sleep(3);<br />&nbsp;&nbsp;return (EXIT_SUCCESS);<br />}</div><br />编译后，我们用 Valgrind 检测一下。<br />]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=916]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[Python Essential: 2. Built-In Types (1)]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=915]]></link> 
      <category><![CDATA[Dynamic Language]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Mon, 18 Jan 2010 19:08:15 +0800</pubDate> 
      <description><![CDATA[按照用途的不同，我们可以将 Python 内置类型分为 &quot;数据结构&quot; 和 &quot;程序结构&quot; 两大类。<br /><br /><b>数据结构</b><ul class="ubb-list" ><li> None: null</li><li> Numbers: int, long, float, complex, bool</li><li> Sequences: str, unicode, list, tuple, xrange</li><li> Mapping: dict</li><li> Sets: set, frozenset</li></ul><b>程序结构</b><ul class="ubb-list" ><li> Callable: BuiltinFunctionType, type, object, FunctionType, MethodType</li><li> Modules: ModuleType</li><li> Classes: object</li><li> Types: type</li></ul>----------- 分隔线 -------------------<br />]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=915]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[cbase]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=914]]></link> 
      <category><![CDATA[ASM C/C++]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Sun, 17 Jan 2010 17:33:20 +0800</pubDate> 
      <description><![CDATA[<a href="http://library.gnome.org/devel/glib/stable/" title="http://library.gnome.org/devel/glib/stable/" target="_blank">GLib</a> 系出名门(<a href="http://www.gtk.org/" title="http://www.gtk.org/" target="_blank">GTK+</a>)、很丰富很强大，可惜某些部分有内存泄露的嫌疑；<a href="http://home.gna.org/gdsl/" title="http://home.gna.org/gdsl/" target="_blank">gdsl</a> 专攻数据结构，非常专业，只是接口设计太复杂了些，用起来太麻烦；<a href="http://www.hyperrealm.com/main.php?s=cbase" title="http://www.hyperrealm.com/main.php?s=cbase" target="_blank">cbase</a> 很好，功能齐全，接口简洁，非常适合像我这样习惯了 .NET FX、JDK 的懒人。cbase 和 GLib 一样是个功能丰富的函数库，搭配使用还是很爽的，几乎就是个 C Framework 了。<br /><br /><b>1. Install</b><br /><br />下载、解压缩。<br /><br />$ <b>wget </b>]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=914]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[还有完没完？]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=913]]></link> 
      <category><![CDATA[Misc]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Sat, 16 Jan 2010 01:58:12 +0800</pubDate> 
      <description><![CDATA[对于 Google 之争，我本来是个纯粹的酱油众。三十大几的人了自然有自己的想法，不左不右，只关心自己的钱包。可这几天实在受不了了，一群人上下乱窜，把一个商业公司的商业行为都捧到啥啥的价值上了，TNND! 有点犯恶心了。就算某部傻×了些，那也不是今天才知道，既然做生意那就做生意吧，不愿意做就算了，本来也不指望这几个钱。非得搞出一堆精英分子满世界玩悲情，连我这个路人甲看着屏幕上几个英文字母都觉得有点别扭了。<br /><br />过犹不及，等他们打出个结果再说不行么。就算原来有理也被这群精英们整出反感来了，还有完没完啊！哦，另外学舌一句：受不了就朝东边游泳吧，盖子还没来得及加上。路过的要是愿意发我五毛或者五美分，我也愿意接着，反正穷人不嫌钱少。]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=913]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[让程序崩溃时自动生成 Core Dump]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=912]]></link> 
      <category><![CDATA[ASM C/C++]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Thu, 14 Jan 2010 20:54:24 +0800</pubDate> 
      <description><![CDATA[程序总免不了要崩溃的…… 这是常态，要淡定！  <img src="http://www.rainsts.net/styles/default/images/smilies/icon_sweat.gif" border="0" alt="[sweat]" /> <br /><br />利用 setrlimit() 函数我们可以将 &quot;core file size&quot; 设置成一个非 0 值，这样就可以在崩溃时自动生成 core 文件了。(可参考 bshell ulimit 命令)<br /><div class="code">#include &lt;sys/resource.h&gt;<br /><br />void test()<br />{<br />&nbsp;&nbsp;char* s = &quot;abc&quot;;<br />&nbsp;&nbsp;*s = &#39;x&#39;;<br />}<br /><br />int main(int argc, char** argv)<br />{<br />&nbsp;&nbsp;struct rlimit res = { .rlim_cur = RLIM_INFINITY, .rlim_max = RLIM_INFINITY };<br />&nbsp;&nbsp;setrlimit(RLIMIT_CORE, &amp;res);<br /><br />&nbsp;&nbsp;test();<br /><br />&nbsp;&nbsp;return (EXIT_SUCCESS);<br />}</div>]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=912]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[Python Essential: 1. Types and Objects (2)]]></title> 
      <link><![CDATA[http://www.rainsts.net/article.asp?id=911]]></link> 
      <category><![CDATA[Dynamic Language]]></category> 
      <author><![CDATA[yuhen <null@null.com>]]></author> 
      <pubDate>Fri, 08 Jan 2010 15:58:23 +0800</pubDate> 
      <description><![CDATA[我们在 /usr/include/python2.6/object.h 中可以看到这样的一段话。<br /><div class="code">Objects are structures allocated on the heap.  Special rules apply to the use of objects to ensure they are properly garbage-collected. Objects are never allocated statically or on the stack; they must be accessed through special macros and functions only.  (Type objects are exceptions to the first rule; the standard types are represented </div>]]></description>
      <wfw:commentRss><![CDATA[http://www.rainsts.net/feed.asp?q=comment&id=911]]></wfw:commentRss>
    </item>
      
  </channel>
</rss>
