<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://johnnyaya.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fjohnnyaya.spaces.live.com%2fblog%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Johnny's Madhouse: Blog</title><description /><link>http://JohnnyAya.spaces.live.com/blog</link><language>en-US</language><pubDate>Wed, 30 Jul 2008 04:12:11 GMT</pubDate><lastBuildDate>Wed, 30 Jul 2008 04:12:11 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://JohnnyAya.spaces.live.com/feed.rss</cf:parentRSS><live:type>blog</live:type><live:identity><live:id>4793654248282431158</live:id><live:alias>JohnnyAya</live:alias></live:identity><image><title>Johnny's Madhouse: Blog</title><url>http://blufiles.storage.live.com/y1paNc5JJpWGNAQs0A-_BTA3YEoEKYkKwnFgETFUQYi_VIKF0uk1a5Tgst6g3wRDxiG</url><link>http://JohnnyAya.spaces.live.com/blog</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Using gcc to check syntax error in template.</title><link>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!941.entry</link><description>&lt;div&gt;我不知道大家有没有用过gcc 3.14版本后的gch pre-compile header. 其实和msvc的pch概念上是很相似的,这类预编译技术总是会做一些cpp的语法检测,来及早的发现代码编写中的错误.但是相比msvc只做普通class的编译,gcc更加入了template的预编译检测,这使得我们可以通过gch对我们编写的template做一个初级的语法解析和验证,很多vc中需要template instance后才会发现的语法问题,在这里可以得到轻松解决.我们再也不会遇到在msvc下编译通过仍然忧心匆匆,而不得不再一个test cpp代码中instance一个template来验证的困窘情况了(你可是要验证所有的member function,否则msvc只会check你调用的function的语法). 这对于库工作者和发布者无疑是一个很好的工具. 废话不多说,我就说说我的使用方法和新得.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;编译生成gch方法很简单,你只需要在你的makefile中指定好要编译的header file,输出为与其同一目录下的gch文件即可,for example:&lt;/div&gt;
&lt;div&gt;假设我们的目录结构为,gcc 操作目录为Solution&lt;/div&gt;
&lt;div&gt;Solution&lt;/div&gt;
&lt;div&gt;  |- Base&lt;/div&gt;
&lt;div&gt;      |- base.h&lt;/div&gt;
&lt;div&gt;      |- base.cpp&lt;/div&gt;
&lt;div&gt;  |- Engine&lt;/div&gt;
&lt;div&gt;      |- engine.h&lt;/div&gt;
&lt;div&gt;      |- engine.cpp&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我们需要编译base.h 为gch,写&lt;/div&gt;
&lt;div&gt;c:\Solution:&amp;gt;  gcc -c ./Base/base.h -o./Base/base.h.gch&lt;/div&gt;
&lt;div&gt;好了, 你不用特别指定gch,所有该目录下的cpp都会先找是否有gch文件存在,如果存在就会去include这个编译好的东西.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ok,介绍一下我的做法,由于跨平台工作的关系,每个平台都需要有自己的gch/pch file, msvc上可以通过指定pch来回避这个问题,但是gcc的gch文件必须要在和其原文件一致的目录下(我知道-I可以解决,但是那样太丑...), gcc提供的解决方案是:&lt;/div&gt;
&lt;div&gt;把base.h.gch做成目录,然后在目录里放入你compile好的gch文件,而文件和文件数目并不受限制,gcc在compile到include base.h的cpp文件时,会把目录中的文件都搜索一遍找出第一个符合条件的文件(refer to: gcc manual-3.20 Using Precompiled Header - section 7 ), 所以我们就可以将上诉代码写成:&lt;/div&gt;
&lt;div&gt;c:\Solution:&amp;gt;  gcc -c ./Base/base.h -o./Base/base.h.gch/base_win32_debug.h.gch (当然之前要把base.h.gch folder create出来) 我的makefile 写法如下:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;# ----------------------------------------------------------------&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Platform = PS3&lt;/div&gt;
&lt;div&gt;Configuration = Debug&lt;br&gt;FullPath_GchSrcs += ./QuickTest.h&lt;br&gt;GchDir := $(addsuffix .gch,$(FullPath_GchSrcs))&lt;br&gt;FullPath_Gchs := $(addsuffix _$(Platform)_$(Configuration).h.gch,$(addprefix $(GchDir)/,$(basename $(notdir $(FullPath_GchSrcs)))))&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;# Debug Flag ( choose debug or not )&lt;br&gt;# Optimization Flag ( -O0:disable -O/-O1:general opt -O2:advance opt -O3:all opt )&lt;br&gt;ifeq ($(Configuration),Debug)&lt;br&gt;Flag_Debug := -g&lt;br&gt;Flag_Opt := -O0&lt;br&gt;else&lt;br&gt;Flag_Debug :=&lt;br&gt;Flag_Opt := -O1&lt;br&gt;endif &lt;br&gt;CFlags := $(Flag_Debug) $(Flag_Opt) $(Flag_PreDef) $(Flag_Inc) $(Flag_BuiltIn_Functions) $(CFlag_Spec)&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;# flag_inc, flag_predef, flag_builtin_functions, cflag_spec 的飞机自己搞&lt;br&gt;&lt;/div&gt;
&lt;div&gt;.PHONY: gchs clean-gchs&lt;br&gt;gchs: $(FullPath_Gchs)&lt;br&gt;$(FullPath_Gchs):&lt;br&gt;     $(MKDIR) $(ErrDir)&lt;br&gt;     $(MKDIR) $(GchDir)&lt;br&gt;     $(ECHO) compiling $(basename $@)...&lt;br&gt;     $(ECHO) - &amp;gt; $(ErrDir)/$(ErrLogName)&lt;br&gt;     $(ECHO) --[$(Project)]$(patsubst %/,%,$(notdir $@))-- &amp;gt;&amp;gt; $(ErrDir)/$(ErrLogName)&lt;br&gt;     $(CC) -c $(CFlags) $(basename $(GchDir)) -o $@ 2&amp;gt;&amp;gt;$(ErrDir)/$(ErrLogName)&lt;br&gt;     $(CAT) $(ErrDir)/$(ErrLogName) &amp;gt;&amp;gt; $(ErrDir)/$(Project).err&lt;br&gt;&lt;/div&gt;
&lt;div&gt;# ----------------------------------------------------------------&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;说了那么多但其实下面才是重点. 虽然说gch可以pre-check template 的 syntax, 但是这也带来了一些不必要的麻烦,比如说我们习惯性地在template 中写一些inline define, 而这些define往往会调用一些其他类或class, 在vc中由于template 编译放在template instance后, 一些因为头文件放置关系不严谨的define 和 declaration的问题不会很容易出现, 但是这种形式的放置在gch编译中就会出现错误.举个例子&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在 test_tmpl.h 中我们有如下定义&lt;/div&gt;
&lt;div&gt;template  &amp;lt;typename T&amp;gt;&lt;/div&gt;
&lt;div&gt;class TTestUndefine&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;public:&lt;/div&gt;
&lt;div&gt;    inline void test_function()&lt;/div&gt;
&lt;div&gt;   {&lt;/div&gt;
&lt;div&gt;          CTestMng::GetInstance()-&amp;gt;DoSomething();&lt;/div&gt;
&lt;div&gt;   }&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在test_mng.h 中我们定义:&lt;/div&gt;
&lt;div&gt;clas CTestMng&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;public:&lt;/div&gt;
&lt;div&gt;      static CTestMng* GetInstance() { return ms_instance; }&lt;/div&gt;
&lt;div&gt;      void DoSomething() { return; }&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;protected:&lt;/div&gt;
&lt;div&gt;      static CTestMng* ms_instance;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;OK, 我们不要care 这个Singleton的构造啊,销毁阿等OOXX的东西,就假设我们已经有这么一个singleton.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;然后我们做了如下的precompile header&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;base.h&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// api includes&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// template includes&lt;/div&gt;
&lt;div&gt;#include &amp;quot;test_tmpl.h&amp;quot;&lt;/div&gt;
&lt;div&gt;#include ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// common classes includes&lt;/div&gt;
&lt;div&gt;#include &amp;quot;test_mgn.h&amp;quot;&lt;/div&gt;
&lt;div&gt;#include ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;好了,这个base.pch文件在vc上编译不会出现问题,但是gcc中,由于会对template作预编译处理,我们会发现类似CTestMng undefine这样的错误,原因是由于我们的header file组织是按照先template后common class的顺序来的. 由于header file的include并没有特别好的组织形式,对于大型项目我们很难预知两个header file的dependence关系( 虽然我有自己做的exIncludeCheck 工具 :), 不过广大群众们没有:p ), 所以我的做法是,把template 的inline function defines都写入hpp中,然后在gch include的最末端include 这一系列的hpp文件,如下:&lt;/div&gt;
&lt;div&gt;base.h&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// api includes&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// template includes&lt;/div&gt;
&lt;div&gt;#include &amp;quot;test_tmpl.h&amp;quot;&lt;/div&gt;
&lt;div&gt;#include ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// common classes includes&lt;/div&gt;
&lt;div&gt;#include &amp;quot;test_mgn.h&amp;quot;&lt;/div&gt;
&lt;div&gt;#include ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// late-inline defines&lt;/div&gt;
&lt;div&gt;#include &amp;quot;test_tmpl.hpp&amp;quot; &lt;/div&gt;
&lt;div&gt;#include ...&lt;/div&gt;
&lt;div&gt;             ...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;这样的形式你就不用再为哪个头文件放前哪个头文件放后而烦恼了.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;gch编译常见问题:&lt;/div&gt;
&lt;div&gt;对于如下class (代码简写)&lt;/div&gt;
&lt;div&gt;tmpl &amp;lt;typ T&amp;gt; struct classA { int data_mbr1; };&lt;/div&gt;
&lt;div&gt;tmpl &amp;lt;typ T&amp;gt; struct classB : public classA&amp;lt;T&amp;gt;&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;    int dosomething() { return data_mbr1;} &lt;/div&gt;
&lt;div&gt;    classB( const classB&amp;amp; _b )&lt;/div&gt;
&lt;div&gt;       : data_mbr1(_b.data_mbr1)&lt;/div&gt;
&lt;div&gt;    {&lt;/div&gt;
&lt;div&gt;    }&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;会编译错误 -- undeclare data_mbr1. &lt;/div&gt;
&lt;div&gt;                -- undeclare _b.&lt;/div&gt;
&lt;div&gt;这个虽然我觉得不应该,但gcc tmpl的check对于member的归属很严格,所以代码最后写成:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;tmpl &amp;lt;typ T&amp;gt; struct classA { int data_mbr1; };&lt;/div&gt;
&lt;div&gt;tmpl &amp;lt;typ T&amp;gt; struct classB : public classA&amp;lt;T&amp;gt;&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;    typedef classA&amp;lt;T&amp;gt; base_t;&lt;/div&gt;
&lt;div&gt;    typedef classB&amp;lt;T&amp;gt; self_t;&lt;/div&gt;
&lt;div&gt;    int dosomething() { return base_t::data_mbr1;} &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;    classB( const self_t&amp;amp; _b )&lt;/div&gt;
&lt;div&gt;       : data_mbr1(_b.data_mbr1)&lt;/div&gt;
&lt;div&gt;    {&lt;/div&gt;
&lt;div&gt;    }&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;好了, 以上只是我用gch来写template的一些心得和技巧. &lt;/div&gt;
&lt;div&gt;高效编程需要一系列辅助工具,还是希望大家多share技巧和工具. &lt;/div&gt;
&lt;div&gt;众人: O_O O_O O_O O_O O_O O_O O_O O_O O_O &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当然exIncludeCheck暂时不share了, 这个嘛..... 我开发很久的也,怎么能够说share 就 share !!!!!!&lt;/div&gt;
&lt;div&gt;众人: 囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4793654248282431158&amp;page=RSS%3a+Using+gcc+to+check+syntax+error+in+template.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=johnnyaya.spaces.live.com&amp;amp;GT1=JohnnyAya"&gt;</description><comments>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!941.entry#comment</comments><guid isPermaLink="true">http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!941.entry</guid><pubDate>Sun, 06 Apr 2008 04:59:37 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://JohnnyAya.spaces.live.com/blog/cns!42867B2414EA9EB6!941/comments/feed.rss</wfw:commentRss><wfw:comment>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!941.entry#comment</wfw:comment><dcterms:modified>2008-04-06T04:59:37Z</dcterms:modified></item><item><title>被这东西搞死了</title><link>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!937.entry</link><description>&lt;div&gt;Macro的一个大陷阱,今天被这个东西搞死了! 看看下面这段代码为何会编译错误:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// ===================================================================&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;#define EX_DEFINE_COMMON_CONTAINER_FUNCTIONS( _std_container_t )                                            \                  &lt;br&gt;    INLINE AllocatorType GetAllocator()                     { return _std_container_t::get_allocator(); }   \&lt;br&gt;    INLINE Iterator Begin()                                 { return _std_container_t::begin();         }   \&lt;br&gt;    INLINE ConstIterator Begin() const                      { return _std_container_t::begin();         }   \&lt;br&gt;    INLINE Iterator End()                                   { return _std_container_t::end();           }   \&lt;br&gt;    INLINE ConstIterator End() const                        { return _std_container_t::end();           }   \&lt;br&gt;    INLINE R_Iterator RBegin()                              { return _std_container_t::rbegin();        }   \&lt;br&gt;    INLINE R_ConstIterator RBegin() const                   { return _std_container_t::rbegin();        }   \&lt;br&gt;    INLINE R_Iterator REnd()                                { return _std_container_t::rend();          }   \&lt;br&gt;    INLINE R_ConstIterator REnd() const                     { return _std_container_t::rend();          }   \&lt;br&gt;    INLINE bool Empty() const                               { return _std_container_t::empty();         }   \&lt;br&gt;    INLINE SizeType Size() const                            { return _std_container_t::size();          }   \&lt;br&gt;    INLINE SizeType MaxSize() const                         { return _std_container_t::max_size();      }   \&lt;br&gt;    INLINE void Erase( Iterator _pos )                      { _std_container_t::erase( _pos );          }   \&lt;br&gt;    INLINE void Erase( Iterator _first, Iterator _last )    { _std_container_t::erase( _first, _last ); }   \&lt;br&gt;    INLINE void Clear()                                     { _std_container_t::clear();                }   \&lt;br&gt;    INLINE void Swap( self_t&amp;amp; _container )                  { _std_container_t::swap( _container );     }   &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;template &amp;lt; typename T &amp;gt;&lt;/div&gt;
&lt;div&gt;class TVector : protected std::vector&amp;lt;T&amp;gt;&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;public:&lt;/div&gt;
&lt;div&gt;    typedef TVector&amp;lt;T&amp;gt; self_t;&lt;/div&gt;
&lt;div&gt;    typedef std::vector&amp;lt;T&amp;gt; base_container_t;&lt;/div&gt;
&lt;div&gt;    EX_DEFINE_COMMON_CONTAINER_FUNCTIONS(base_container_t)&lt;/div&gt;
&lt;div&gt;}; // end class&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;// ===================================================================&lt;br&gt;&lt;/div&gt;
&lt;div&gt;尽管复制上面的代码...错误原因居然是:&lt;/div&gt;
&lt;div&gt;...............................&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;...............................&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;...............................&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;...............................&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;...............................&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我在#define后面的那个 &amp;quot; \&amp;quot; 后面手贱多敲了几个空格.... 囧囧囧囧囧囧囧囧囧&lt;/div&gt;
&lt;div&gt;还好vim的syntax highlight够强.....搞了我半个多小时,shit...........&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4793654248282431158&amp;page=RSS%3a+%e8%a2%ab%e8%bf%99%e4%b8%9c%e8%a5%bf%e6%90%9e%e6%ad%bb%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=johnnyaya.spaces.live.com&amp;amp;GT1=JohnnyAya"&gt;</description><comments>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!937.entry#comment</comments><guid isPermaLink="true">http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!937.entry</guid><pubDate>Wed, 26 Mar 2008 15:04:25 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://JohnnyAya.spaces.live.com/blog/cns!42867B2414EA9EB6!937/comments/feed.rss</wfw:commentRss><wfw:comment>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!937.entry#comment</wfw:comment><dcterms:modified>2008-03-26T15:04:25Z</dcterms:modified></item><item><title>我又开始幼稚了.....囧!!!</title><link>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!932.entry</link><description>&lt;div&gt;我发现我果然是狂热的技术主义者,所以我只能凸那些成天把商业盈利拿出来叫嚣的人啊,其实他们在寻找的是一种自我安慰而已-_-|||||,却发现技艺上已经追不上你的步伐了! 我正在找新一轮的挑战. 下个目标 -------------- 还是Griffon Engine (囧.....上次的不也是这个吗) &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4793654248282431158&amp;page=RSS%3a+%e6%88%91%e5%8f%88%e5%bc%80%e5%a7%8b%e5%b9%bc%e7%a8%9a%e4%ba%86.....%e5%9b%a7!!!&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=johnnyaya.spaces.live.com&amp;amp;GT1=JohnnyAya"&gt;</description><comments>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!932.entry#comment</comments><guid isPermaLink="true">http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!932.entry</guid><pubDate>Tue, 04 Mar 2008 13:51:13 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://JohnnyAya.spaces.live.com/blog/cns!42867B2414EA9EB6!932/comments/feed.rss</wfw:commentRss><wfw:comment>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!932.entry#comment</wfw:comment><dcterms:modified>2008-03-04T13:51:13Z</dcterms:modified></item><item><title>加班归来</title><link>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!912.entry</link><description>&lt;div&gt;还在说周二打球可以慢有兴致地更新呢,结果 T_T 加班...........&lt;/div&gt;
&lt;div&gt;最近最郁闷的事情要属我那台360 由传说中的3红变成1红,太猛了-_-||| 就等着秋季微软出65nm版本了, 要不是sony的PS3没游戏玩我真想买台来以示我对微软的抗议!! &lt;/div&gt;
&lt;div&gt;话说回来ps3是可以装linux用cell sdk来写程序的, 就是gpu用不了, 有兴趣的玩家可以试试. 这算什么,算是sony对索饭们的弥补么?&lt;/div&gt;
&lt;div&gt;再次喷一下360那无良的质量!&lt;/div&gt;
&lt;div&gt;再说程序, 周六闲来写了棵红黑树, 结果bug太多于是放弃, 想想stl就有了何必再写, 顺手改了改, 加了些查找代码放到Griffon里运行正常, 也就没做太多测试了. 周日无聊写了个光源管理器,其实就是把LightGroup加上一堆范围检测最终得到每个物体的LightList. 写完了,但是还没来得及测试0_0....恩..不管了,能用就行,有bug再说......&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4793654248282431158&amp;page=RSS%3a+%e5%8a%a0%e7%8f%ad%e5%bd%92%e6%9d%a5&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=johnnyaya.spaces.live.com&amp;amp;GT1=JohnnyAya"&gt;</description><comments>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!912.entry#comment</comments><guid isPermaLink="true">http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!912.entry</guid><pubDate>Tue, 28 Aug 2007 15:30:58 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://JohnnyAya.spaces.live.com/blog/cns!42867B2414EA9EB6!912/comments/feed.rss</wfw:commentRss><wfw:comment>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!912.entry#comment</wfw:comment><dcterms:modified>2007-08-28T15:30:58Z</dcterms:modified></item><item><title>Johnny的YY编程空间重新开张</title><link>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!906.entry</link><description>&lt;p&gt;重新整理空间，把所有以前的日记都删除了，所以留过言的同学们千万不要生气。。。
&lt;p&gt;话说Beowulf的项目还没结束，所以也就不多说了。接下去准备好好把这个空间办起来，就以Griffon Engine 的开发作为日记吧。主要写空间太废时间了，最近又忙到飞起，想来周二公司有乒乓球可以打，所以回来后正好可以整理一周的头绪，所以暂定周二作为更新日记的时间，周六周天不定期更新。
&lt;p&gt;那么。。。。。。今天还是就先这样吧-_-|||||||||| 华丽的闪人&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=4793654248282431158&amp;page=RSS%3a+Johnny%e7%9a%84YY%e7%bc%96%e7%a8%8b%e7%a9%ba%e9%97%b4%e9%87%8d%e6%96%b0%e5%bc%80%e5%bc%a0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=johnnyaya.spaces.live.com&amp;amp;GT1=JohnnyAya"&gt;</description><comments>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!906.entry#comment</comments><guid isPermaLink="true">http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!906.entry</guid><pubDate>Tue, 21 Aug 2007 14:52:40 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://JohnnyAya.spaces.live.com/blog/cns!42867B2414EA9EB6!906/comments/feed.rss</wfw:commentRss><wfw:comment>http://JohnnyAya.spaces.live.com/Blog/cns!42867B2414EA9EB6!906.entry#comment</wfw:comment><dcterms:modified>2007-08-28T15:14:02Z</dcterms:modified></item></channel></rss>