<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-34507539</atom:id><lastBuildDate>Tue, 17 Nov 2009 02:23:43 +0000</lastBuildDate><title>X the Unknown</title><description>I want to be the ``X'' in the equation.</description><link>http://blogger.xinside.net/</link><managingEditor>noreply@blogger.com (X)</managingEditor><generator>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-4484777496992254860</guid><pubDate>Sat, 25 Jul 2009 17:05:00 +0000</pubDate><atom:updated>2009-07-26T01:05:33.301+08:00</atom:updated><title>我要不要学学怎么开锁？</title><description>没错！我又被锁了！这应该是今年内第3次被锁了……2009才过了一半多点啊，莫非接下来我还要被锁2，3次……学学怎样开锁下次被锁了的时候说不定可以少点yu&lt;br /&gt;&lt;br /&gt;嗯，顺便回顾一下这3次被锁都是些什么事件：&lt;br /&gt;&lt;br /&gt;第一次被锁在6月12日，地点在番禺的出租屋。原因怀疑是被小偷光顾，不过开锁失败，弄坏了锁，结果就被锁在门外……（其实，我还是庆幸自己能被锁在了房子外面……不然的话我房子里面的东西估计就被扫光了）&lt;br /&gt;&lt;br /&gt;第二次被锁在6月21日，地点在我老家自己的房间。原因不详，估计是RPWT，早上醒来开门去厕所小个便后睡回笼觉，睡醒以后就发现门锁已经坏掉了……结果就被锁了在房子里面。&lt;br /&gt;&lt;br /&gt;第三次被锁是在昨天（写这post的时候已过12点），地点还是在我老家自己的房间。原因估计是球锁锁钮被按下了的房门被风吹上了，加之我自己没有钥匙（家里的锁这几年来换过几次，而我又不是经常在家的，所以我身上没有带着老家的钥匙，带了也可能是开不了的），结果就被锁在门外了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-4484777496992254860?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/07/blog-post_26.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-1222053039789749717</guid><pubDate>Sun, 19 Jul 2009 15:36:00 +0000</pubDate><atom:updated>2009-07-19T23:36:07.321+08:00</atom:updated><title>PS3~</title><description>今天！终于入手PS3啦~不过很可惜问完全场都没有我想要的游戏卖=。=还是的自己回来上taobao买啊！&lt;br /&gt;&lt;br /&gt;哦呵呵呵呵，今后拿这神机干点什么好事坏事呢~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-1222053039789749717?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/07/ps3.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-4675364032940083334</guid><pubDate>Thu, 02 Jul 2009 05:46:00 +0000</pubDate><atom:updated>2009-07-02T13:46:10.520+08:00</atom:updated><title>点名帖</title><description>被猪头Jessie点到了。&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;	&lt;li&gt;大名小名？&lt;/li&gt;&lt;br /&gt;大名X小名x全名陈Xx&lt;br /&gt;	&lt;li&gt;生日？&lt;/li&gt;&lt;br /&gt;1985-06-20&lt;br /&gt;	&lt;li&gt;被谁点名？&lt;/li&gt;&lt;br /&gt;JessieLin&lt;br /&gt;	&lt;li&gt;生日最想要什么？&lt;/li&gt;&lt;br /&gt;BG大家&lt;br /&gt;	&lt;li&gt;喜欢什么颜色？&lt;/li&gt;&lt;br /&gt;蓝&lt;br /&gt;	&lt;li&gt;喜欢什么明星？&lt;/li&gt;&lt;br /&gt;我不追星&lt;br /&gt;	&lt;li&gt;喜欢什么歌手，什么歌曲？&lt;/li&gt;&lt;br /&gt;歌手？很少记名字……歌是我觉得好听就喜欢了&lt;br /&gt;	&lt;li&gt;喜欢什么电影？&lt;/li&gt;&lt;br /&gt;很少看电影，无法回答&lt;br /&gt;	&lt;li&gt;喜欢什么电视剧？&lt;/li&gt;&lt;br /&gt;是电视剧我都喜欢泡，但说到喜欢呢……Laughing Gor！&lt;br /&gt;	&lt;li&gt;喜欢什么风格的衣服？&lt;/li&gt;&lt;br /&gt;没有特别要求&lt;br /&gt;	&lt;li&gt;喜欢吃什么？&lt;/li&gt;&lt;br /&gt;辣的和苦的除外&lt;br /&gt;	&lt;li&gt;喜欢什么男人&amp;lt;女人&amp;gt;？&lt;/li&gt;&lt;br /&gt;你如果问不喜欢什么女人我估计还能答，喜欢的话……最紧要将feel的&lt;br /&gt;	&lt;li&gt;近期的心愿？&lt;/li&gt;&lt;br /&gt;完成GAF&lt;br /&gt;	&lt;li&gt;长远目标？&lt;/li&gt;&lt;br /&gt;well……一时间答不到。相对长远一点的算不算？做一个“我们的”Galgame。&lt;br /&gt;	&lt;li&gt;近期让你烦恼的事？&lt;/li&gt;&lt;br /&gt;感情的，工作的，是人基本上都会烦恼的那些。&lt;br /&gt;	&lt;li&gt;近期让你失望的事情？&lt;/li&gt;&lt;br /&gt;好像没有？&lt;br /&gt;	&lt;li&gt;近期让你开心的事情？&lt;/li&gt;&lt;br /&gt;今个月的奖金不错&lt;br /&gt;	&lt;li&gt;最近常想起的人？&lt;/li&gt;&lt;br /&gt;老爸+老妈&lt;br /&gt;	&lt;li&gt;觉得自己最得意的事情？&lt;/li&gt;&lt;br /&gt;继续没有？&lt;br /&gt;	&lt;li&gt;自己做过最失望的事情？&lt;/li&gt;&lt;br /&gt;同上&lt;br /&gt;	&lt;li&gt;爱情友情亲情什么重要？&lt;/li&gt;&lt;br /&gt;你没要求单选。不过要不要求我都只会答都重要。&lt;br /&gt;	&lt;li&gt;男女间有纯粹的友谊吗？&lt;/li&gt;&lt;br /&gt;有&lt;br /&gt;	&lt;li&gt;暗恋过别人吗？&lt;/li&gt;&lt;br /&gt;有，而且很多&lt;br /&gt;	&lt;li&gt;主动表白过吗？&lt;/li&gt;&lt;br /&gt;有&lt;br /&gt;	&lt;li&gt;觉得怎样才算浪漫？&lt;/li&gt;&lt;br /&gt;别人都说我木&lt;br /&gt;	&lt;li&gt;做过的事情里有后悔的吗？&lt;/li&gt;&lt;br /&gt;嗯……应该有吧，比如说那个，比如说那那个……&lt;br /&gt;	&lt;li&gt;伤心难过会怎样？&lt;/li&gt;&lt;br /&gt;不定，有时候会流下男儿泪，有时候会打机打发掉，有时候会call朋友打发掉&lt;br /&gt;	&lt;li&gt;最难过是什么时候？&lt;/li&gt;&lt;br /&gt;我发现这些问题好像都差不多……有但不记得了&lt;br /&gt;	&lt;li&gt;无聊怎么打发时间？&lt;/li&gt;&lt;br /&gt;打机，看书，写代码&lt;br /&gt;	&lt;li&gt;会失眠吗？觉得是什么原因引起？&lt;/li&gt;&lt;br /&gt;会，生理性失眠：昨晚通顶了今天一睡睡到下午6点，于是就失眠了。&lt;br /&gt;	&lt;li&gt;理想的生活是怎样的？&lt;/li&gt;&lt;br /&gt;在空调房里面看书，喝咖啡，code&lt;br /&gt;	&lt;li&gt;对点你名人的印象？&lt;/li&gt;&lt;br /&gt;猪头一个&lt;br /&gt;	&lt;li&gt;你们认识多久？&lt;/li&gt;&lt;br /&gt;我还是大三学生时的一个夜晚。她，我人生中一个重要的XX，出现了。&lt;br /&gt;也就是说有快4年了吧。&lt;br /&gt;	&lt;li&gt;点名者在你心里的位置？&lt;/li&gt;&lt;br /&gt;我生命中认识到的重要的…………………&lt;br /&gt;………………………………………………&lt;br /&gt;………………………………………………&lt;br /&gt;………………………………………………&lt;br /&gt;……………………猪头中的其中一只。&lt;br /&gt;	&lt;li&gt;记得朋友的生日吗？&lt;/li&gt;&lt;br /&gt;记得，因为有很多东西都会提醒我朋友的生日。&lt;br /&gt;	&lt;li&gt;喜欢哪个城市？&lt;/li&gt;&lt;br /&gt;广州和佛山&lt;br /&gt;	&lt;li&gt;喜欢哪个季节？&lt;/li&gt;&lt;br /&gt;冬天，因为被窝很舒服！&lt;br /&gt;	&lt;li&gt;生活里最三八的人是谁？&lt;/li&gt;&lt;br /&gt;点我名的这个&lt;br /&gt;	&lt;li&gt;为爱的人做过自己觉得了不起的事？&lt;/li&gt;&lt;br /&gt;嗯……好像没？&lt;br /&gt;	&lt;li&gt;口头禅是什么？&lt;/li&gt;&lt;br /&gt;很多的哦！比如说，“嘛”，“囧！”&lt;br /&gt;	&lt;li&gt;重要的日子是什么？&lt;/li&gt;&lt;br /&gt;放假的日子&lt;br /&gt;	&lt;li&gt;最近常笑吗？因为什么？&lt;/li&gt;&lt;br /&gt;我经常笑，没为什么，就爱傻笑&lt;br /&gt;	&lt;li&gt;最近常哭吗？因为什么？&lt;/li&gt;&lt;br /&gt;No，因为没什么值得我哭&lt;br /&gt;	&lt;li&gt;如果明天中五百万你第一件事会做什么？&lt;/li&gt;&lt;br /&gt;存起来，然后逐步实施我构想已久的“阳谋”！&lt;br /&gt;	&lt;li&gt;去KTV最拿手的歌？&lt;/li&gt;&lt;br /&gt;我没去过KTV&lt;br /&gt;	&lt;li&gt;异性朋友多不多？同性朋友多不多？&lt;/li&gt;&lt;br /&gt;多不算多，都差不多&lt;br /&gt;	&lt;li&gt;觉得什么才算朋友？&lt;/li&gt;&lt;br /&gt;冇乜具体标准的，我认为是就是了。&lt;br /&gt;	&lt;li&gt;最怕什么？&lt;/li&gt;&lt;br /&gt;蟑螂等一切拍死了以后很核突的生物。&lt;br /&gt;	&lt;li&gt;掉眼泪是软弱的表现吗？&lt;/li&gt;&lt;br /&gt;不一定&lt;br /&gt;	&lt;li&gt;出门第一件事情？&lt;/li&gt;&lt;br /&gt;出门以后的第一件事？关门。&lt;br /&gt;	&lt;li&gt;喜欢的动物是什么？&lt;/li&gt;&lt;br /&gt;狗，猫，马，鸟，很多很多&lt;br /&gt;	&lt;li&gt;有几双鞋子？&lt;/li&gt;&lt;br /&gt;经常只有一双，偶尔两双&lt;br /&gt;	&lt;li&gt;爱逛街吗？&lt;/li&gt;&lt;br /&gt;也说不上喜欢，说不上讨厌&lt;br /&gt;	&lt;li&gt;现在用的包是什么颜色的？&lt;/li&gt;&lt;br /&gt;黑色&lt;br /&gt;	&lt;li&gt;喜欢过白天还是黑夜？&lt;/li&gt;&lt;br /&gt;黑夜，因为最近我很野猫&lt;br /&gt;	&lt;li&gt;对自己哪里最满意？&lt;/li&gt;&lt;br /&gt;没有。&lt;br /&gt;	&lt;li&gt;现在烦不烦？&lt;/li&gt;&lt;br /&gt;之前不是问过了吗？&lt;br /&gt;	&lt;li&gt;如果对恨的人说一句话会说什么？&lt;/li&gt;&lt;br /&gt;“……”&lt;br /&gt;	&lt;li&gt;你觉得你和陈冠希哪个帅？&lt;/li&gt;&lt;br /&gt;我&lt;br /&gt;	&lt;li&gt;小时候最深刻的事情？&lt;/li&gt;&lt;br /&gt;被烟花烧到颈了&lt;br /&gt;	&lt;li&gt;觉得自己现在孤单吗？&lt;/li&gt;&lt;br /&gt;不觉得&lt;br /&gt;	&lt;li&gt;如果受伤会怎么抚平？&lt;/li&gt;&lt;br /&gt;过几天就自然抚平了&lt;br /&gt;	&lt;li&gt;有过自杀的想法吗？什么时候？&lt;/li&gt;&lt;br /&gt;有过，不只一次，不过终究只是考虑各种可能性的时候顺带产生的其中一种想法。某一次是在1年半前。&lt;br /&gt;	&lt;li&gt;酒和烟什么比较有吸引力？&lt;/li&gt;&lt;br /&gt;都没有，我都不喜欢&lt;br /&gt;	&lt;li&gt;如果你可以马上实现一个愿望，你希望是？&lt;/li&gt;&lt;br /&gt;变成有钱佬&lt;br /&gt;	&lt;li&gt;觉得多啦A梦和麦兜喜欢哪个？&lt;/li&gt;&lt;br /&gt;麦兜&lt;br /&gt;	&lt;li&gt;现在脑子里想着谁？&lt;/li&gt;&lt;br /&gt;麦兜。因为上一题刚刚答完&lt;br /&gt;	&lt;li&gt;如果遇到坏人怎么办？&lt;/li&gt;&lt;br /&gt;还真的没想过，随机应变吧。&lt;br /&gt;	&lt;li&gt;觉得自己是好人吗？&lt;/li&gt;&lt;br /&gt;算吧&lt;br /&gt;	&lt;li&gt;我的问题多不多？&lt;/li&gt;&lt;br /&gt;很多&lt;br /&gt;	&lt;li&gt;爱谁时间最长？&lt;/li&gt;&lt;br /&gt;算上暗恋的吗？算的话，高中时候从高一暗恋到高三上学期的某女生。&lt;br /&gt;	&lt;li&gt;你记得自己第一个同桌是谁吗？&lt;/li&gt;&lt;br /&gt;太久远了！我的生活和galgame里面的情节差太多，没有所谓的青梅竹马，所以也不会记得。&lt;br /&gt;	&lt;li&gt;为什么你的通讯录里没有我的号码？&lt;/li&gt;&lt;br /&gt;你肯定是吃过期罐头吃多了，居然敢说我的通讯录里面没有你的号码&lt;/ol&gt;&lt;br /&gt;我可没办法找到10个人那么多去传。鉴于你这个要求太无理，我就不执行了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-4675364032940083334?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/07/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-1225969202783326323</guid><pubDate>Thu, 02 Jul 2009 04:53:00 +0000</pubDate><atom:updated>2009-07-02T12:53:44.699+08:00</atom:updated><title>Apocrypha 1.5， 8月见</title><description>原文为EVE DEV Blog 2009年6月30日文：&lt;a href="http://www.eveonline.com/devblog.asp?a=blog&amp;amp;bid=672"&gt;APOCRYPHA 1.5 THIS AUGUEST&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;自从三月，Apocrypha发布以后，我们就很少从开发最前线上听到新消息了。Apocrypha的发布是EVE Online的一个重大成就。我们把好一些方面都提高到了另一个新高度，例如，在并发游戏人数方面、付费玩家数量方面。更重要的是，我们对Apocrypha中提供的新特性和功能感到自豪。&lt;br /&gt;&lt;br /&gt;现在我们正如火如荼地实现冬季更新。说实话，冬季还很远；Apocrypha要搞一个夏季更新还太早了点，于是我们考虑发布一个小型更新，而不是等到冬天才把我们的成果一股脑儿地摆出来。如无意外，八月中就可以看见Apocrypha 1.5的面世了。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;小型、中型和大型的船插&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;你曾经想过弄一艘极速的放风筝专用的护卫舰，但无法承受相关船插的昂贵价格吗？又或者曾经想把你的巡洋舰弄成顶级血牛？抑或是曾经想把你的小小拉货船扩大一点货仓？现在这些想法都能实现了！&lt;br /&gt;&lt;br /&gt;我们正准备加入小型和中型尺寸的船插（现有的船插将成为大型船插）。这些船插做起来成本更低，买起来价钱更便宜。我们希望这样做能够让更多的人感受得到船插的乐趣；同时当你的插满船插的船被爆掉的时候，你会少哭一点。Chronitis会在下一篇blog里面作更进一步的说明。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Apocrypha 1.5的Lv4史诗系列&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Apocrypha 1.5的内容是非常丰富的。我们加入了一些新的史诗任务系列，与Apocrypha 1中引入的lv 1史诗任务不一样，这些全部是lv 4的，也就意味着这些任务会有富挑战性，理所当然奖励也更丰厚。这些引人入胜的故事会以特定种族为主题，围绕伦理、阴谋、荣誉等等为某些人所欠缺的要素展开。对于那些熟悉EVE以及熟悉我们的工作的人来说这不太算是一个重磅炸弹。和史诗系列在Apocrypha中初次登场的时候一样，这些新的任务给我们展示了一个深入而有趣的故事，而你的选择将会影响故事的结局。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;特种货仓 - 黑隐特勤舰的燃料仓&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;我们正准备引进一个系统，这个系统允许我们在船上部署一个特殊的货仓。我们会从允许在黑隐特勤舰上增加燃料仓开始，陆续还可能会扩展到其他一些船。这意味着我们正为你的燃料增加更多存放的空间，同时也不会破坏平衡性，让黑隐特勤舰变成终极的拉货船。这种技术同时打开了部署其他类型仓库的可能性的门，比如说一个弹药专用舱，生体货物专用舱，等等。这些想法会在未来的资料片里面作进一步探讨。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;势力战争新奖赏 - 击杀数LP&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;我们一直都在密切监视势力战争带来的大规模卡机，不断分析网络的行为和玩家的行为，以及详细检查代码。我们收到的那些被报告的卡机现象并不会总是出现，这使得跟踪卡机和解决卡机现象变得困难。目前我们已经分配了工程师去解决这个问题，他们正与我们的质量保证部门和捉虫专家在紧密合作中。&lt;br /&gt;&lt;br /&gt;同一时间，为了使势力战争变得更有趣，我们正尝试让击杀和占领都可以获得LP奖励。每个势力都有一个特别的LP商店，提供独占的奖品给势力战争的热衷者们。更详细的介绍接下来会有Ytterbium为我们进行介绍的。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;50%特性 vs 50%维护&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;我好几次被玩家问到，“花在开发新特性上的时间和花在修补现有的系统的时间大约是怎样分配的”。答案很简单，我们分配了50%的开发时间到新特性的开发上，余下的就分配到对现有系统的修饰、重做以及修补缺陷上。我们认为这样的分配是合理的——不断向前发展的同时维护我们目前已有的。EVE现在已经超过了65万行代码，对比她刚刚发布的时候的28万行，我们认为很多东西都需要得到维护和重构。得益于这些维护的工作，Apocrypha 1.5将会带来为数不少的修补和改进。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;冬季更新&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;跟随着冬季的接近，我们会持续对冬季更新进行报道。目前我可以说的是，冬季更新将关注主权方面的问题，你将无法走进去（声明了主权的星域？）。请持续关注我们dev blog的未来几个月的更新吧。RSS一类东西的狂热者们也可以来订阅我们的&lt;a href="http://www.eveonline.com/feed/"&gt;RSS&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;谢谢大家的阅读！&lt;br /&gt;&lt;br /&gt;- Torfi Frans&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-1225969202783326323?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/07/apocrypha-15-8.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-209801837221659193</guid><pubDate>Thu, 18 Jun 2009 07:56:00 +0000</pubDate><atom:updated>2009-06-18T15:56:14.983+08:00</atom:updated><title>继续流水账</title><description>话说最近越来越喜欢尽可能地在Emacs里面搞定一些日常的东西，比如说写的这篇Post。没错，这篇Post是在Emacs里面写的，至于效果如何……其实我也是第一次用……&lt;br /&gt;&lt;br /&gt;最近Jessie跟我说打不开我的blog。后来试过实际上打还是能打开的，只不过慢的囧，用了代理可能会有所改善吧。Godaddy的域名是搞得比较有名气的，但主机的部分就马马虎虎。今年过后再找别的空间看看吧。&lt;br /&gt;&lt;br /&gt;不过现在才过了半年呢……嘛，访问rss feed是相对比较快点的，所以……欢迎访问：http://feeds2.feedburner.com/xtheukn！&lt;br /&gt;&lt;br /&gt;潜水1个多月，都干了些啥呢？嗯……&lt;br /&gt;&lt;br /&gt;5月中旬从Raine JJ那里得知网易有道和TC合作搞编程竞赛跑去参加了。其实在大学时期就已经知道Topcoder的大名，只不过一直都没想过去试试。做过好几次练习和比赛以后才倍感自己水平太低了，DIV1的题目只能勉强推倒前两题（有时还推不倒……）；然后总喜欢在比赛以后和某人讨论500分的题目，讨论一个多小时后两人一起恍然大悟：“哦！”（或者……“啊啊啊啊啊！”）。几次下来觉得这样的比赛很有趣，虽然到目前为止我还没challenge过别人……嘛，多点参加这样的活动应该对我很有益的，以后也多点参加好了~&lt;br /&gt;&lt;br /&gt;上面说的是TC的部分。至于网易有道和TC合作的部分……嘛，算是勉强进入了晋级赛，有件免费的T-Shirt（今天刚刚送到），有个“绿色通道”的机会，接下来就是等着在21日的晋级赛里面当炮灰了。不过当炮灰也当得很有意义就是。&lt;br /&gt;&lt;br /&gt;然后其余时间就是玩点游戏和继续开发GAF。嗯……不过开发着开发着，总发现自己的经验还是差很多，想把系统设计得好一点，最终的结果就是已经做好原型改了一次又一次。嘛，这也算是个学习的过程吧，不过效率似乎很低……&lt;br /&gt;&lt;br /&gt;最近又燃起了对Galgame的爱了！5、6月里面玩了2个新作，有一个现在仍然在继续，有All Clear的想法啊！逆转口水肩（逆转检事）也在5月底出了，花了不少时间总算通关。老实说我还是喜欢逆转裁判系列多一点，可能是因为逆转口水肩的故事和逆转裁判系列的关联性少吧……不过撇开故事本身，其他方面还是一贯的“逆转”水准，BGM经常听得我热血沸腾啊！&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-209801837221659193?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/06/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-7524417883138643351</guid><pubDate>Thu, 30 Apr 2009 06:53:00 +0000</pubDate><atom:updated>2009-04-30T14:53:06.081+08:00</atom:updated><title>潜水了一个多月</title><description>上浮一下。看看最后一篇写事的post，原来已经是2月份的了，这么说我潜水已经快3个月咯……自己没啥感觉，可能是因为生活一直都不够激情啊。&lt;br /&gt;&lt;br /&gt;3月份开始就受raine师姐引诱，一起跳进了GAF的坑里面去了（Well，其实GAF只是我擅自作出来的名字……我们两个并没有在叫什么名字这个问题上花过心思）。然后就发现自己在思维上的诸多不足。嘛，经验不足应该也是一个原因。raine姐你千万别介意多拉我几把啊！&lt;br /&gt;&lt;br /&gt;（顺便再BS某sara）&lt;br /&gt;&lt;br /&gt;然后现在项目处于"SUCKED"状态。啊神啊，快点给我点灵感吧！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-7524417883138643351?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/04/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-6090732633279384503</guid><pubDate>Mon, 23 Feb 2009 06:46:00 +0000</pubDate><atom:updated>2009-02-23T15:33:37.207+08:00</atom:updated><title>C++高阶函数（一）</title><description>&lt;strong&gt;0. 前言&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;看见了标题不要以为以下的内容是C++的高级话题。这里的``高阶''是与``函数''连在一起作为名词的。高阶函数（high-order functions）有点借用了数学中高阶的概念。当一个函数是以另一个函数作为参数，或者以另一个函数作为返回值的时候（或者两者兼备），就可以称作是高阶函数。举个例说：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;typedef int (*int_func)(int);&lt;br /&gt;&lt;br /&gt;int f(int_func g, int x) {&lt;br /&gt;  return g(x);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;这里，函数 f 就可以称作是一个高阶函数，因为它以另一个函数（实参 g ）为参数。&lt;br /&gt;&lt;br /&gt;高阶函数在函数式编程里面是很普遍，在命令式编程里面可能比较少提到，但对于C++来说，高阶函数已经不是新事物了。很多地方，例如C++的标准库自身，或者C++的巨牛库boost，对在C++中使用高阶函数已经有不同方面的支持。虽然目前还有很多方面我还没有触及到，但为了避免自己没记性忘掉，我还是准备把我不完全的认识先记录下来，日后继续慢慢更新。嗯，期待自己能写出一个系列呢~。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. 函数的生成&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;生成函数？&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;假如现在有一个简单的函数（实际上是函数对象。这里用的是函数的纯抽象概念：只要表现得和函数一样的，都可以叫作``函''。下面的描述，如果不需要严格区分函数和函数对象，那么我一律称作函数），作用是做加法的：&lt;br /&gt;&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;template &lt;class t=""&gt;&lt;br /&gt;struct x_plus {&lt;br /&gt;  T operator () (T op1, T op2) const {&lt;br /&gt;     return op1+op2;&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;如果有两个int变量x, y，那么&lt;br /&gt;&lt;pre lang="cpp"&gt;x_plus&lt;int&gt;()(x, y);&lt;/int&gt;&lt;/pre&gt;&lt;br /&gt;得到的结果就是x+y。对于x_plus&amp;lt;int&amp;gt;()来说，它是一个二元函数。&lt;br /&gt;&lt;br /&gt;通过把其中一个值变成常量，x_plus&amp;lt;int&amp;gt;()就可以表现像一个一元函数了：&lt;br /&gt;&lt;pre lang="cpp"&gt;x_plus&lt;int&gt;()(x, 1); //     ---------------     (1)&lt;/int&gt;&lt;/pre&gt;&lt;br /&gt;相当于计算x+1。&lt;br /&gt;&lt;br /&gt;函数生成的过程与上面的这个过程是类似的。通过将一个函数的某一个变量绑定为另外一个变量，就可以得到一个新的函数。&lt;br /&gt;&lt;br /&gt;然而严格地说，上面的函数调用(1)依旧是二元函数，只不过其中一个参数被固定了。对于一个一元函数，它被期望的调用方式应该是：&lt;br /&gt;&lt;br /&gt;&lt;pre lang="cpp"&gt;_i_am_an_unary_function_(x);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;于是，在对于一些需要使用一元函数的场合，x_plus&amp;lt;int&amp;gt;()是无法使用的：&lt;br /&gt;&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;template &lt;class unary_function=""&gt;&lt;br /&gt;inline int _i_need_an_unary_func (unary_function f, int x) {&lt;br /&gt;  return unary_function(x);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;_i_need_an_unary_func ( x_plus&lt;int&gt;()(x, 1), 10 ); // error&lt;br /&gt;&lt;/int&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;std::bind1st和std::bind2nd&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;标准库的std::bind1st和std::bind2nd提供了一个解决方案，使得我们可以将x_plus&amp;lt;int&amp;gt;()转化为一个真正的一元函数：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;#include&lt;functional&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;_i_need_an_unary_func ( bind2nd(x_plus&lt;int&gt;(), 1), 10 ); // ok&lt;br /&gt;_i_need_an_unary_func ( bind2nd(x_plus&lt;int&gt;(), 1), 10 ); // ok&lt;br /&gt;&lt;/int&gt;&lt;/int&gt;&lt;/functional&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;这里的x_plus&amp;lt;&amp;gt;实现于最开始时候定义的有点区别，会在后面说明。&lt;br /&gt;&lt;br /&gt;std::bind2nd(x_plus&amp;lt;int&amp;gt;(), 1)和x_plus&amp;lt;int&amp;gt;()(x, 1)的区别在于前者将一个参数绑定到某个已有函数的某个实参上，从而生成一个新的函数，而后者是一个函数调用（而且是不合法的函数调用，这里的 x 会因为未定义而产生编译错误）。所以对于std::bind2nd(x_plus&amp;lt;int&amp;gt;(), 1)，以下的调用是合法的：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;bind2nd(x_plus&lt;int&gt;(), 1)(10); // ok, equivalent to function call: x_plus&lt;int&gt;()(10, 1)&lt;br /&gt;&lt;/int&gt;&lt;/int&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;std::bind1st和std::bind2nd是类似的，区别在于绑定参数的位置不一样：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;bind1st(x_plus&lt;int&gt;(), 1)(10); // =&gt; x_plus&lt;int&gt;()(1, 10)&lt;br /&gt;bind2nd(x_plus&lt;int&gt;(), 1)(10); // =&gt; x_plus&lt;int&gt;()(10, 1)&lt;br /&gt;&lt;/int&gt;&lt;/int&gt;&lt;/int&gt;&lt;/int&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;因为std::bind1st和std::bind2nd的实现是类似的，我只考虑实现其中一个的基本原理：&lt;br /&gt;&lt;br /&gt;bind1st返回的可以是普通函数指针或者函数对象，然而对于返回普通函数指针，实现起来似乎不怎么方便&amp;gt;&lt;a name="context1" href="http://www.blogger.com/post-edit.g?blogID=34507539&amp;amp;postID=6090732633279384503#comment1"&gt;*&lt;/a&gt;&amp;lt;，所以一般都是返回函数对象：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;template &lt;class class="" a1=""&gt;&lt;br /&gt;struct x_bind1st_c {&lt;br /&gt;  x_bind1st_c(const F&amp;amp; _f, A1 _a1) : f(_f), a1(_a1) { }&lt;br /&gt; &lt;br /&gt;  return_type? operator () (argument_type? a2) const {&lt;br /&gt;     return f(a1, a2);&lt;br /&gt;  }&lt;br /&gt;private:&lt;br /&gt;  F f;&lt;br /&gt;  A1 a1;&lt;br /&gt;};&lt;br /&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;上面的实现还未完整，但不妨先进行分析。通过x_bind1st_c&amp;lt; x_plus&amp;lt;int&amp;gt;, int &amp;gt;(x_plus&amp;lt;int&amp;gt;(), 1)，就可以产生一个函数对象func。函数对象里面已经定义了operator()(...)的成员，所以可以通过func(x)的方式来调用这个函数对象，达到预期的效果。&lt;br /&gt;&lt;br /&gt;实现中还有部分地方没有明确：operator()(...)的返回类型是什么？实参a2的类型又是什么？或许可以假定为与A1相同，但这毕竟没有普适性：要求一个函数的返回值与实参类型相同、所有实参的类型都一样，这样的要求显然不合理。函数需要返回什么值，实参接受什么类型，是被绑定的函数决定的，如此考虑的话，直接从被绑定函数中获取是最好的方法。为了这样，需要对x_plus&amp;lt;&amp;gt;的定义稍微修改一下：&lt;br /&gt;&lt;pre line="21" lang="cpp"&gt;&lt;br /&gt;template &lt;class t=""&gt;&lt;br /&gt;struct x_plus {&lt;br /&gt;  typedef T return_type;&lt;br /&gt;  typedef T arg1_type;&lt;br /&gt;  typedef T arg2_type;&lt;br /&gt;&lt;br /&gt;  T operator () (T op1, T op2) const {&lt;br /&gt;     return op1+op2;&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;然后……重新写一次完整的x_bind1st_c的定义吧：&lt;br /&gt;&lt;pre line="1" lang="cpp"&gt;&lt;br /&gt;template &lt;class f=""&gt;&lt;br /&gt;struct x_bind1st_c {&lt;br /&gt;  typedef typename F::return_type return_type;&lt;br /&gt;  typedef typename F::arg1_type arg1_type;&lt;br /&gt;  typedef typename F::arg2_type arg2_type;&lt;br /&gt;&lt;br /&gt;  x_bind1st_c(const F&amp;amp; _f, arg1_type _a1) : f(_f), a1(_a1) { }&lt;br /&gt;&lt;br /&gt;  return_type operator () (arg2_type a2) const {&lt;br /&gt;     return f(a1, a2);&lt;br /&gt;  }&lt;br /&gt;private:&lt;br /&gt;  F f;&lt;br /&gt;  arg1_type a1;&lt;br /&gt;};&lt;br /&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;x_bind1st_c是一个类模板，使用的时候必须显式指定模板的参数。可以利用函数模板的自动推导简化使用：&lt;br /&gt;&lt;pre line="16" lang="cpp"&gt;&lt;br /&gt;template &lt;class f=""&gt;&lt;br /&gt;inline x_bind1st_c&lt;f&gt;&lt;br /&gt;x_bind1st(F f, typename F::arg1_type a1) {&lt;br /&gt;  return x_bind1st_c&lt;f&gt;(f, a1);&lt;br /&gt;}&lt;br /&gt;&lt;/f&gt;&lt;/f&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;x_bind1st就这样完成了。（我并没有看过标准库的实现，所以我不保证这就是std::bind1st的实现方式。事实上我觉得标准库应该比我上面简单的实现考虑得更多，比如const和volatile关键字的修饰。不过我觉得基本原理应该是这样的。）&lt;br /&gt;&lt;br /&gt;x_bind1st（算是简化+删节版的std::bind1st吧，所以下面把两者合在一起统称bind1st/bind2nd）的实现同时也提示了几点：&lt;br /&gt;&lt;br /&gt;1、只能用在接受两个参数的函数对象上。&lt;br /&gt;&lt;br /&gt;所以对于非二元的函数对象，无法使用bind1st/bind2nd；而且对于普通的函数，因为缺少return_type、arg1_type和arg2_type的定义，所以也不能直接使用；相同的情况存在于类成员函数指针中，不过成员函数指针的情况有点特殊，下面将会提及。&lt;br /&gt;&lt;br /&gt;为了让bind1st/bind2nd可以为普通的函数绑定，标准库定义了一个ptr_fun，用来包装普通函数，使得bind1st/bind2nd可以用在普通函数上；对于类成员函数指针，标准库也定义了mem_fun/mem_fun_ref来包装，使得bind1st/bind2nd可以用在成员函数指针上：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;int func1(int op1, int op2) {&lt;br /&gt;  return op1+op2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;struct X {&lt;br /&gt;  int func2(int op) {&lt;br /&gt;     return op;&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;std::bind2nd(std::ptr_fuc(func1), 10)(20);&lt;br /&gt;std::bind1st(std::mem_fun(&amp;amp;X::func2), &amp;amp;x)(10);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;成员函数X::func2只接受一个参数似乎和之前的说明矛盾。其实这是因为成员函数需要接受一个额外的参数（this指针的由来）。除去这个额外参数以后，就只能再接收一个了。&lt;br /&gt;&lt;br /&gt;2、被绑定的参数只能是兼容于被绑定函数的可接收参数的类型（即存在隐式转换）。&lt;br /&gt;&lt;br /&gt;简单的说就是你不能这样调用bind1st/bind2nd来实现生成类似于f(x)=(10+x)+x的函数：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;std::bind1st(&lt;br /&gt;  x_plus&lt;int&gt;(),&lt;br /&gt;  std::bind1st(x_plus&lt;int&gt;(), 10)&lt;br /&gt;)(20);&lt;br /&gt;&lt;/int&gt;&lt;/int&gt;&lt;/pre&gt;&lt;br /&gt;原因很简单，因为经过bind1st/bind2nd后得到的是一个函数。除非原来的函数接受的就是函数类型的参数，否则，由于不存在隐式转换，这样的调用将产生错误。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="comment1"&gt;*&lt;/a&gt; 或许可以考虑一下返回的是一个函数指针。但如果返回的是一个函数指针，那么这个函数的定义至少应该类似于：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;R bind1st(A2 a2) {&lt;br /&gt;  return &amp;amp;func_to_be_bound(a1_bound, a2);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;返回值、参数a1和a2的类型先不作考虑。&lt;br /&gt;&lt;br /&gt;为了记录func_to_be_bound，bind1st必须定义为一个函数模板。这样的话就要求函数的参数列表中须新增用来接受func_to_be_bound的形参。这样的话又会破环bind1st的接口：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;template &lt;class f=""&gt;&lt;br /&gt;R bind1st(A2 a2, f func_to_be_bound);&lt;br /&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;另一个可能的形式是这样：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;template &lt;class f=""&gt;&lt;br /&gt;R bind1st(A2 a2) {&lt;br /&gt;  retrun f(a1, a2);&lt;br /&gt;}&lt;br /&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;这种形式中 f 是一个非类型的模板参数。如果 F 是一个指针类型的话， f 就是一个指针，也能算是整型的非模板参数，所以这样的形式是接受的。问题在于调用须以这样的形式进行：&lt;br /&gt;&lt;pre&gt;bind1st&lt;f_type, f_ptr=""&gt;(a2_arg);&lt;/f_type,&gt;&lt;/pre&gt;&lt;br /&gt;和之前的bind1st的用法差别甚大。或许可以尝试写一个辅助函数来简化：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;template &lt;class f=""&gt;&lt;br /&gt;R bind1st_aux(F f) {&lt;br /&gt;  return &amp;amp;(bind1st&lt;f, f=""&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/f,&gt;&lt;/class&gt;&lt;/pre&gt;&lt;br /&gt;然而这种方式实际使用中会产生编译错误，因为模板的实例化参数使用了函数参数。函数参数的值是在运行期才能决定的，而模板则要求在编译期完成实例化。&lt;br /&gt;&lt;br /&gt;而且上面那样的函数模板无法接受非整型的函数对象作为模板参数，除非把函数对象定义为全局变量，并将函数对象的地址作为参数传入。局部变量因为储存在栈区，地址取决于栈的使用状况，故只能在运行期判明，不能用作模板参数（我认为理论上静态变量也是可以的，因为都是储存在静态区，地址是可以在编译期决定的。不过在gcc 3.4.5上只有使用全局对象时编译才能通过）。&lt;br /&gt;&lt;br /&gt;暂时能想到的用普通函数指针来实现会存在的问题就这些，似乎对于普通函数指针来说限制是比较多的。如果哪位有用普通函数指针的不错的实现的话，请告诉我吧！&lt;br /&gt;&lt;br /&gt;另外，这不知道算不算是函数对象比普通函数要灵活的一个例子呢？&lt;br /&gt;&lt;br /&gt;&amp;gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=34507539&amp;amp;postID=6090732633279384503#context1"&gt;back&lt;/a&gt;&amp;lt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-6090732633279384503?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/02/c.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-1280580803978040886</guid><pubDate>Sat, 07 Feb 2009 12:59:00 +0000</pubDate><atom:updated>2009-02-07T21:33:45.064+08:00</atom:updated><title>WinMain-&gt;main</title><description>我想基本上每一个有Windows GUI编程经历的人都知道：对于一般的Win32 Console程序（就是一般的C/C++程序），程序的入口是main；对于一般的 Win32 GUI程序，程序的入口是WinMain。&lt;br /&gt;&lt;br /&gt;对于main不一定就是一般C/C++程序的入口，看过不少相关的评论也算是知道的，main仅仅是一个标准规定的符号；对于GUI程序，如果用前面的情况类比，那么WinMain也不一定就是入口。只不过……你想象过用main来换掉WinMain吗？&lt;br /&gt;&lt;br /&gt;我是没有想过的，虽然这说的通，main怎么说都是标准的定义，WinMain不过是微软自己定的，但main没有WinMain定义的参数。再说进入WinMain之前的“初始化”也可能和进入main之前的不一样。&lt;br /&gt;&lt;br /&gt;不过经过今晚，尽管无法断言初始化的工作是否一样（十有八九是不一样的），但是用main来代替WinMain，应该是行得通的。WinMain的四个参数中，第二个一般用不上，第三个和main的第二个差不多，第四个是可以显式指定的，剩下的第一个，可以通过GetModuleHandle(NULL)来获得，结果：&lt;br /&gt;&lt;pre lang="cpp"&gt;&lt;br /&gt;int main () {&lt;br /&gt;&lt;br /&gt;HINSTANCE hInst = GetModuleHandle(NULL);&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然后编译，链接，记得链接上GUI程序所必需的核心库。然后运行，得到的结果和WinMain看上去是一样的，除了多了个黑色底的console window。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-1280580803978040886?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/02/winmain.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-8804891006739831333</guid><pubDate>Sun, 01 Feb 2009 15:19:00 +0000</pubDate><atom:updated>2009-02-01T23:19:46.460+08:00</atom:updated><title>又一年开始了</title><description>转眼，春节的假期就已经结束了。今天是初七人日，我祝大家生日快乐的同时，也拜个晚年，祝大家新年新气象，牛年牛气冲天！&lt;br /&gt;&lt;br /&gt;还没来得及回味春节的点滴，就要马上收拾心情迎接又一年的工作了。人越是年长，时间好像就越不够用的样子。Anyway，自己祝自己在这新的一年里面，有新的突破——&lt;br /&gt;&lt;br /&gt;——在各种不同的方面。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-8804891006739831333?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/02/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-8182980850931342383</guid><pubDate>Wed, 07 Jan 2009 12:25:00 +0000</pubDate><atom:updated>2009-01-07T20:25:58.369+08:00</atom:updated><title>emacs 23.0.60.1</title><description>自从去年狠了心从vim转到emacs以后，emacs就基本上成了我的默认编辑器了。一直以来我总希望把自己的电脑整理得有条理一点，然而每次到最后都是搞成一锅泡收场，而我每次重装电脑前总会把emacs忘记备份一次……&lt;br /&gt;&lt;br /&gt;于是每次重装过以后再次用上Emacs就成了一件很囧的事情。emacs不像vim，release的周期太~~~长了，而且为了使用支持unicode的版本，win32上运行的emacs还必须得从源代码编译。虽然有一个叫ntemacs的项目，不过编译日期貌似是前年的了，部分功能和用惯了的CVS HEAD的功能有不少差别（印象中还有些让我受不了的bug）。&lt;br /&gt;&lt;br /&gt;而每次编译需要的功夫还不少（仅对win的系统来说）：首先你要安装一个cvs的client取获得CVS HEAD，然后为了正常编译，你必须提供cp、rm等等几个命令——就是要装上gnuwin32的coreutils package；然后，为了增加图片/图标的支持，你还必须要有些额外的图像处理库——又是一轮安装；如果不想手动拷贝帮助文件，那还得把texinfo package也装上（对CVS HEAD的emacs来说，还得找版本旧一点的texinfo package，最新版的使用时总会出现错误）；这一堆东西搞好了以后，你才有机会去编译emacs。&lt;br /&gt;&lt;br /&gt;一堆废话下来，我想说的其实只是：为了避免日后再重复这样的囧工作，我还是把我编译好的在这里暂存一个为好。我编译出来的emacs的版本号见本post标题。编译中加入了sse2优化和no debug的选项。如果哪位和我一样觉得麻烦而又觉得我编译的版本合要求的话，可以在这里下载&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2009/01/emacs-23.0.60.1.zip"&gt;emacs 23.0.60.1&lt;/a&gt;&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2009/01/_emacs.zip"&gt;&lt;/a&gt;~&lt;br /&gt;&lt;br /&gt;同时也在这里备份一个自己的&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2009/01/_emacs.zip"&gt;.emacs(.d)&lt;/a&gt;，虽然不是怎样高级的东西……不过要用的时候没这个东西可是噩梦啊！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-8182980850931342383?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2009/01/emacs-230601.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-8715093237959029258</guid><pubDate>Wed, 31 Dec 2008 14:29:00 +0000</pubDate><atom:updated>2008-12-31T22:29:39.265+08:00</atom:updated><title>Goodbye, 2008.</title><description>当我还在不断回忆我是不是在2007年底也写过类似的文章的时候，2008也要过去了。回过头再看看2008——大事很多，雪灾，地震，奥运，海啸，只不过这些事都大到不单单只和我一个人有关系；真正属于我个人回忆的，似乎很多，但想要拼凑成回忆的时候，发现似乎又没有多少。感情比起还是大学生的时候，真的是贫乏多了。呵呵，感觉人突然变得有点麻木了。&lt;br /&gt;&lt;br /&gt;今晚老妈问起我：下年是什么年？&lt;br /&gt;&lt;br /&gt;我：牛年咯。&lt;br /&gt;&lt;br /&gt;妈：牛年啊……这么说你要24岁了哦？&lt;br /&gt;&lt;br /&gt;我：对啊，我已经快24了。（本命年了）&lt;br /&gt;&lt;br /&gt;爸（对我妈）说：等到下次猪年了，你就60岁了。&lt;br /&gt;&lt;br /&gt;听到这里我才心里一震，啊，原来他们已经踏在奔60的路上了。&lt;br /&gt;&lt;br /&gt;我上一次的本命年，是1997年，那年我应该小学要毕业；眨眼间另一个本命年又快要来了，这是的我已经大学毕业并且已经工作了。等到再下一个本命年的时候，我的父母应该也变成爷爷奶奶了吧。谁的“下一个本命年”，对谁来说都没有多少次。时间总是出人意料的短，而留给我去创造回忆的时间，是越来越少了。&lt;br /&gt;&lt;br /&gt;但愿，在再次为我的“下一个本命年”的到来感慨的时候，我能有更多值得一次又一次重温的记忆吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-8715093237959029258?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/12/goodbye-2008.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-4853560174171837239</guid><pubDate>Mon, 15 Dec 2008 09:09:00 +0000</pubDate><atom:updated>2008-12-15T17:09:55.294+08:00</atom:updated><title>年末GalGame群BG计划</title><description>今天看见远在美国的好友Dason的签名档写道，他会在16号回国。聊着聊着就说起了GG群有没有小聚的计划。回忆中我能记起的最的上一次的聚会已经是去年10月的HOLD BG，GG群确实很久、今年内也没有什么聚会了，所以和dason计划了，我们两个要BG了！&lt;br /&gt;&lt;br /&gt;GG众们！我们需要知道你们的时间，好安排一下到底在什么时候举行这次BG，请在这文章后面留下回复吧！&lt;br /&gt;&lt;br /&gt;如果有哪个想加入BG队伍，也跟在这后面留个回复吧。&lt;br /&gt;&lt;br /&gt;P.S.: 我个人是希望能够在2008年结束之前举行的啦。实在不行，dason元月10日就要回美国，在那之前也ok吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-4853560174171837239?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/12/galgamebg.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-1883623381826504248</guid><pubDate>Wed, 19 Nov 2008 02:55:00 +0000</pubDate><atom:updated>2008-11-19T10:55:44.119+08:00</atom:updated><title>囧人的病毒</title><description>话说今天打开firefox打算查点资料，顺手打开了google reader看看东西。排在第一条的是大学同学sand的blog上的一篇文章：&lt;a href="http://flyingsand.com/sand/pro-scan-onlinecom-com-is-virus-site.html"&gt;小心病毒网站pro-scan-online.com&lt;/a&gt;；还没看清楚内容的同时，我在google上看到了一些感兴趣的内容（绝对不是只供成年人观看的内容！我知道你们肯定喜欢把病毒和那种东西联系在一起的！），于是点了进去……&lt;br /&gt;&lt;br /&gt;firefox的窗口关掉了，随后弹出一个窗口，内容就和事后才认真看的小sand sand的文章里面说的一模一样，只是网址有点不同：antivirus-premium-scan.com.（com后面的一点也是网址的一部分）。点了“OK”（后来证实点“Cancel”也是一样），一个看上去真的很“Pro”的杀毒软件的扫面界面在运作……&lt;br /&gt;&lt;br /&gt;让我囧掉的是……就像sand他引用Klikit-Linux Community某个thread上所说的内容一样，我运行的是linux的操作系统……但这的东西还提示说它扫描到了一些本应只存在于windows的东西。&lt;br /&gt;&lt;br /&gt;所以要我中招是不可能的事情了。如果你不小心中招了，小sand sand的post应该可以帮到你。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-1883623381826504248?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/11/blog-post_19.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-4750536073628594383</guid><pubDate>Sat, 08 Nov 2008 03:31:00 +0000</pubDate><atom:updated>2008-11-08T11:31:16.883+08:00</atom:updated><title>囧事无所不在</title><description>话说现在我还是决定把linux装在我的笔记本电脑上面，反正新的内核已经直接支持无线网卡了。为了避免某某时候不得不用回windows的麻烦，我在160G的硬盘上划了60G出来，装了个xp，剩下的分配给linux。&lt;br /&gt;&lt;br /&gt;挑选发行版的过程就不说了，只能用郁闷来形容。在宿舍里把一切弄好了，回到公司打开电脑准备工作的时候，发现……居然还有选择性不能上网。比如公司的邮箱，或者是我的xtheukn。起初以为这个firefox的缘故，不过想想不对，以前在windows下面我也照样用firefox浏览的。切换到xp下面再试，浏览无任何问题；回到linux，就浏览不了了。&lt;br /&gt;&lt;br /&gt;莫非是发行问题？于是这几天我就把自己不少的时间花在了发行的切换上，ubuntu，fedora，archlinux来回换，那个囧问题依旧（顺道一说fedora 10的preview更囧一点，连从路由上dhcp回一个ip都失败了）。回宿舍再试，居然又没有这样的问题了，这样我才把焦点转移到公司的路由器上……&lt;br /&gt;&lt;br /&gt;不过路由器挑系统我就已经没听过了（你知道？那恕我孤陋寡闻吧……），居然还挑网站就真的让我囧到不敢相信。半信半疑之下把路由换成了另一个，果然能访问了。&lt;br /&gt;&lt;br /&gt;囧！&lt;br /&gt;&lt;br /&gt;然后今年，靠自己的权限用了某特殊手段，终于把路由的问题解决掉了——没什么，其实就是升级固件。不过原来到底是为什么，我现在也弄不清楚。哪位网络牛人能够帮我解决一下这个囧问题？？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-4750536073628594383?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/11/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-5090632463176140079</guid><pubDate>Mon, 27 Oct 2008 01:56:00 +0000</pubDate><atom:updated>2008-10-27T09:56:11.467+08:00</atom:updated><title>三聚氰胺；石子</title><description>前段时间刚刚闹完三鹿奶粉-三聚氰胺一事以后，昨晚香港新闻又报道说在港鸡蛋也检出了三聚氰胺……对我来说还有更恐怖的是昨晚的自来水里流出了大小不一的石子，最大的大概有小指指头那么大……莫非自来水也吃了三鹿奶粉生了结石……&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-5090632463176140079?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/10/blog-post_27.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-712027817252864790</guid><pubDate>Tue, 21 Oct 2008 06:03:00 +0000</pubDate><atom:updated>2008-10-21T14:25:46.835+08:00</atom:updated><title>12riven攻略后感</title><description>8结局All Clear是昨晚的事情了。在刚刚开始攻略的时候，sara就和我说，评价比不上E17的，现在看来是有点道理的。&lt;br /&gt;&lt;br /&gt;从各个方面说说感受吧。先是人设。嘛玩完以后我才发现这些人设还真的很想E17的：缪很像优，游游的衣着也挺像sara的，炼丸也给我有点像E17中的那两个的感觉。后来看了初回里面的攻略本才发现，这是故意的……&lt;br /&gt;&lt;br /&gt;CV方面……嘛其实我一般都不记得CV的人名，有点印象的只有清水爱一个，只不过在游戏里面完全听不到Lucky Star里面小早川优的影子……当然，这个与她配的角色有关。后来搜了一下，嘛，确实还是不错的阵容的。&lt;br /&gt;&lt;br /&gt; 音乐方面，还是阿保刚操刀；志仓千代丸的OP theme third bridge感觉不错哦，呆会找找有没有long ver.再听多几次。&lt;br /&gt;&lt;br /&gt;最后，是剧情方面咯。先写一点无剧透的。之前说评价比不上E17有点道理，是因为觉得12R里和Infinite作品有点区别（R11除外，我还没玩过），恋爱的比例高了，谜团虽然还是主要的（不然就不是Infinite了），但可能不太足够让人得到更甚于E17的刺激。另外具体到细节的剧情上，可以看到E17的影子——具体是什么属于剧透部分，给人的感觉是“啊，和E17的一样啊”。没创新的话，评价相对低也是正常的了。&lt;br /&gt;&lt;br /&gt;剧情上分为3条路线：炼丸路线、鸣海路线以及∫路线（下面将称作积分路线）。很明显不玩到积分路线是得不到故事的全貌的，最后的结局也不是最好的。与E17不一样的是，12R并没有多个女主角的结局。顺带一提的是结局的名字——8个里面有起码5个让人觉得是粗制滥造的。&lt;br /&gt;&lt;br /&gt;最后牢骚一句和12R本身没有关系的：光谱的翻译错别字太多了，意思有些也有所偏离（我的感觉），不过玩中文的还是更容易理解点的。&lt;br /&gt;&lt;br /&gt;无剧透的到此为止，下面是带剧透的。&lt;br /&gt;&lt;br /&gt;&lt;!--more--&gt;&lt;br /&gt;&lt;br /&gt;之前说过12R里面用了和E17一样的手法，主要是指时间。游戏一开始炼丸和鸣海都同时赶到了integral饭店的楼顶目睹了缪被冥挟持，千里出现为了救缪的场景，让人有一中这是同时发生的事情，事实上——在integral路线中这一点就揭开了——他们两个目睹的时间是相差了24小时的，牵涉的人物也不一样。这些在游戏的开头是被隐藏了的。这其实就是E17中的翻版，只是时间间隔上，R12比E17的要短多了。我们大概会认定R12会是比E17不一样的作品，大概也没想到E17的手法会照搬到R12上，所以在积分路线上刚刚看到这一点的时候，我还怀疑是不是翻译错了。虽然这个时间差用得很好，但……正如之前说过的，照抄注定了评价上的档次会低一点。&lt;br /&gt;&lt;br /&gt;不只在时间差这点上照抄，为了改变历史往返于现世界和A世界的行动，与E17也是很相似的。啊啊，越想越觉得打越是不是江郎才尽了。&lt;br /&gt;&lt;br /&gt;还好在游戏中的设计的理论，与E17是有所不同的，不然12R就只能沦为骗钱的作品了。虽然薛定谔的小猫猫在12R中也有出场的机会，但量子理论在12R中只能算是一个串场的，更为主要的是自我意识与识阈下（台湾的翻译，大陆的话，应该是称做阈下知觉）的关系。游戏中是多次强调了这两个之间的关系（多到我烦），Ψ能力的根本原理也是基于这个。&lt;br /&gt;&lt;br /&gt;至于逆转录病毒NRM66，配角而已，不像CURE，花费的笔墨不怎么多。&lt;br /&gt;&lt;br /&gt;不过，这个“自我意识与识阈下”的关系，似乎还没有得到足够的完善。比如说，日蚀症候群是因为自我意识与识阈下之间的距离超过了12分钟，自我意识无法回到现世界，那么，炼丸等人逗留在离现世界24小时的A世界，按道理应该会出现日蚀症候群的症状才对，但……怎么看都不觉得有呢；又或者说，在A世界中的诞吾其实是Ψclone中的omega的自我意识，然而他能逗留在A世界的时间，似乎可以超过了12分钟——他同时是幻象的成员，如果随便在12分钟后就消失回现世界，游游或者其他幻象众很难不会察觉，而且，他是Ψclone，脑内应该没有CODECS。&lt;br /&gt;&lt;br /&gt;另外还有一些到结束依旧没有交代好的事情，比如说5月20日，炼丸救缪，他们的自我意识被送到5月20日的现世界，那么识阈下呢？到5月21日中午之前，炼丸和缪的识阈下到底经历了写什么并没有交代，只知道21日，缪以千里的模样出现，后来被诞吾的三发子弹击中，生命垂危，炼丸以理文六高中学生的模样闯进手术室。21日12：00以前，缪和炼丸应该没有回到现世界干涉历史，但为何在现世界中会有这段经历，也是让人（起码让我）想不通的。&lt;br /&gt;&lt;br /&gt;另外如果说只有在A世界中被观察确认后回到现世界中才能干涉历史的话，那么，21日的A世界，integral tower的电梯大概是被炼丸观察到未被炸毁的，这样回到现世界的话，将会成为事实。这样现世界所做的功夫是否化为乌有，还真的不好说。不过，就算电梯的历史被改变，存有division的服务器未被炸毁的事实应该是未被任何人观察到的，这一点，倒可以用来解释剧情；但现世界中，C4爆炸的地方就在诞吾的旁边，不知道这样的爆炸是否会给他带来致命的伤害，即使不会，也应该是垂危的程度。快死的识阈下是会影响到A时间的自我意识的，缪和真琴的情况就是证明，然而诞吾依旧可以面不改色的执行任务，似乎有点说不通（这一点对于炼丸也是同样的情况：被机枪扫了3下要送去医院急救，A世界的他却一点事都没有）。另外从CG上，诞吾已经被爆炸的气浪推离了integral tower观望台的范围。从465米高的地方掉下去，除非有E17的CURE帮助，不然是没有存活的可能的，但实际上……&lt;br /&gt;&lt;br /&gt;此外，也有与核心思想关系不大的问题，游戏中是没有交代清楚的，比如说炼丸视点中，曾经用无限电发出的求救信号，在鸣海视点中被收到了，但是这个信号到底是否起了实质的作用，到all clear了以后依旧都还没说清楚。如果这个片段插进去仅仅是为了显出游戏的思想深度，那也实在无聊了一点。&lt;br /&gt;&lt;br /&gt;总而言之，虽然游戏的思想确实吸引，但并不够完善，这大概也是让人觉得比不起E17的一点。&lt;br /&gt;&lt;br /&gt;不过撇开与E17的比较，12R依旧是值得好好玩一下的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-712027817252864790?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/10/12riven.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-4745017283880538508</guid><pubDate>Sat, 18 Oct 2008 05:07:00 +0000</pubDate><atom:updated>2008-10-18T13:07:29.492+08:00</atom:updated><title>12riven get. 攻略始動！</title><description>中断的胶片挑起了我的瘾，于是12riven就成为了我下一个目标。在我认为，Infinite系列最经典的当然就是Ever17啦，不过我没玩过Remember11……说不定R11比E17更好一点。&lt;br /&gt;&lt;br /&gt;我估计R11的PC中文版应该是有的，不过没什么兴致去找来玩玩……&lt;br /&gt;&lt;br /&gt;然后今天12R入手！淘宝从香港买回来的初回版，等发货等了3天，说是报关有点问题；不过快递的速度倒是出乎我意料，半天就到了，我原本还担心这个星期天没得玩的。花了我2xxRMB，真是肉痛……希望12R能给我相应的回报吧，不然……唉。&lt;br /&gt;&lt;br /&gt;本来是想上网找一个的……日文的PC版好像是3月就已经发售了，要找一个应该不难，问题是这种需要慢慢思考其中内容的游戏，我的日语水平还应付不来；繁体中文版是8月发售的，本来想，过了两个月，应该到处都有的了吧结果……一个都没有！据说是网上验证的问题，就算有镜像也玩不了。从现在到手的这个12R来看似乎确实是这个问题：网上验证（也可以用短信），验证后只能在一台机器上用，要是想换机器玩或者同一台机器的硬件有变化都得先在原来的机器上解锁然后在新机器上上锁，才能进行游戏……感觉还真的挺麻烦的。嘛，不过被人破解应该是迟早的事。类似的验证方法xp就用过，结果怎样都不用我说啦。&lt;br /&gt;&lt;br /&gt;只是我不太想等到那个时候了……再说这东西还能做收藏品。再一次希望12R是值得我这样冲动地买来收藏的。&lt;br /&gt;&lt;br /&gt;然后，攻略开始。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-4745017283880538508?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/10/12riven-get.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-2186712925078047123</guid><pubDate>Sun, 12 Oct 2008 17:18:00 +0000</pubDate><atom:updated>2008-10-13T01:18:42.876+08:00</atom:updated><title>秋之回忆 中断的胶片</title><description>我也是最近才知道 秋之回忆 中断的胶片 的中文版已经卖了很久了。怎么说我也算是一个准MO迷啊，自然也得All Clear一次了。&lt;br /&gt;&lt;br /&gt;我不想复制粘贴一次网上的介绍，仅仅说下自己all clear一次以后的感想。&lt;br /&gt;&lt;br /&gt;在攻略的过程中我不怎么感觉到郁闷——前4作的MO，基本都是欠揍型男主角，优柔寡断，玩着玩着实在让我很想进入游戏中扁他一顿的——这一作里面，只有明日香篇还能让我有点强烈想凑男主角的感觉。嘛，不过这个能不能算是缺点？&lt;br /&gt;&lt;br /&gt;大概也因为如此剧情上感觉干脆利落毫不拖沓，直接的结果就是尽管有13个结局，all clear的时间倒可能只需要1天左右。像本作的“精神领袖”日名雄介说的那样，弯路是必须的。这种一根竹一样的剧情，总让人感到意犹未尽。&lt;br /&gt;&lt;br /&gt;嘛，不过要我说，是像想君那样三角恋不断还是像这作这样笔直的故事发展更吸引一点，我是不会选择的。&lt;br /&gt;&lt;br /&gt;要说5个女主角里面最好的剧情，我觉得应该是麻寻篇的。不管怎么说，这篇的分量可是比其它4篇的都要多的啊！另外，副标题的含义，我觉得在麻寻篇里面得到了最多的阐释，让我不禁想如果要选一个官方的结局，大概非麻寻篇莫属了。美海篇我觉得也不错，赚了我点热泪；明日香篇是让我郁闷的——郁闷什么前面说了；香月篇就有点差强人意了；最让我觉得摸不着头脑的就是——well也就剩下一篇没说了——瑞穗篇（看见瑞穗这个名字我就总想起某某伪娘游戏，你知道我说哪个的。具体游戏的名字不记得了啊！），从开始到结束都让我一头雾水，结局也让人郁闷：我实在分不清哪个算是BE哪个是GE，说结局A是GE吧，女主角最后被车送上天国了；说结局B是GE吧……不能走在一起一般都不算是GE吧。嗯，或者，其实瑞穗只有两个NE？&lt;br /&gt;&lt;br /&gt;最喜欢的女主角……选不出来，不过最让我没feel的女主角我倒能说出来：雨宫瑞穗了当然是。这与我看不明瑞穗篇的剧情有关……同时我也不太喜欢御姐型或人妻型的。&lt;br /&gt;&lt;br /&gt;另外这作的OP我觉得倒是比想君和从那以后的要好了不少。&lt;br /&gt;&lt;br /&gt;“知道吗？只要一直抱有梦想，心愿终究会得到实现”，类似这句的话在本作里面出现了好几次。乐观思想的思想充满了本作，这大概也是与前4作不太一样的。&lt;br /&gt;&lt;br /&gt;然后有点可惜的是MO前几作的角色都没怎么出来串场一下。不过万年配角稻穗信是依然屹立不倒！确实是一个历史悠久的名字啊！只是他今年只有20岁我有点吃惊。作为澄空高中生二年级学生的他，开始当配角的时候他应该是17岁左右……也就是说从MO这5作的跨度大概只有3年……嗯，不过由此我得不出“短”的结论……&lt;br /&gt;&lt;br /&gt;小狗狗智也也登场了。我觉得它应该还有“一蹴”的别名，然而游戏里面好像没出现过……上作的果凛被麻寻当成了偶像。然后还有刚才才发现本作的配角木濑步——原来也是上作的配角啊。&lt;br /&gt;&lt;br /&gt;雨在本作也取回了点重要的地位，不过像MO2那样的“雨何时停”的对白，还是没能听得到。那可是句一说就让我想起MO系列的经典对白啊。&lt;br /&gt;&lt;br /&gt;总的一句来说，秋之回忆 中断的胶片，即使不是MO迷，也是值得玩的，然而，依旧撼动不了MO2经典的地位——至少我这样认为。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-2186712925078047123?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/10/blog-post_13.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-1028033385813163340</guid><pubDate>Sat, 04 Oct 2008 04:16:00 +0000</pubDate><atom:updated>2008-10-04T12:20:35.394+08:00</atom:updated><title>被新电脑折腾了一番</title><description>昨天入手了我这辈子的第一台笔记本电脑，神舟的优雅HP550，高兴的同时自己的钱包也减了一次大肥……&lt;br /&gt;&lt;br /&gt;机器不错，唯一有点瑕疵的是屏幕有一点坏点……因为在提货之前必须下200的订金，开箱发现有这么一个也换不成了……为了一个点花多200……于是也认是运气差点算了。还好那一个小点不太容易发觉。现在的这篇post就是我用笔记本发的。&lt;br /&gt;&lt;br /&gt;本来，我是想在小本本上装Linux的操作系统的，虽然HP550才用得多点东西（自带200w像素的摄像头！QQ视频更方便了~），但前段时间实在被Windows郁闷 得不行了。买本的时候，本着不能太贵但要够用而且跟得上的思想，买了神舟的这台HP550。配置是不错的哇：除了CPU是上代的迅弛的技术外，其它都是迅弛2的。本来想着新技术总是要好一点的啦，结果回家发现……Linux的驱动还跟不上……intel官方网站上只有wifi 5100的Windows版的驱动，没有Linux版的；预先下载好的Ubuntu 8.04的内核版本是2.24.x，也只刚好支持到上代迅弛技术的那个49xx网卡（具体型号不记得咯），要内核支持则要2.26版本的内核。嘛不怕麻烦 的编译了一次，结果好像是因为顺序搞错了没成功。编译内核是件囧事啊，短时间内没动力没欲望再来一次了。看来太新了也未必好……&lt;br /&gt;&lt;br /&gt;在Windows上，功能就发挥的比较全面（顺带一提附带的驱动全是Windows的……）。本来是打算，台式Windows本本Linux，不过现在看来暂时最好是倒转过来……等等驱动，或者等等2.26版本内核的Ubuntu，或者，真的就倒过来吧，反正Linux上我的电视卡也可以用的，只不过能玩的游戏就少了……我始终戒不掉那游戏瘾哇！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-1028033385813163340?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/10/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-7649425756073503833</guid><pubDate>Mon, 29 Sep 2008 16:20:00 +0000</pubDate><atom:updated>2008-09-30T00:20:05.756+08:00</atom:updated><title>书是原著的好</title><description>读一本书，如果有能力并且有机会的话，最好还是读原著的。&lt;br /&gt;&lt;br /&gt;我说的“原著”指，用以描述书的内容的语言，与作者编写书时候用的那种语言是一致的，狭指原文和译文之间的关系。&lt;br /&gt;&lt;br /&gt;记得应该是在初中，好像是一个语文学习交流会上面，一位语文老师这样对我们说过：读三国演义，你不能用粤语来读，得用普通话来读，因为作者写这本书的时候，用的就是普通话；只有用普通话，你才能更接近作者写书时候的想法，读懂作者的思路。&lt;br /&gt;&lt;br /&gt;罗贯中是不是说我们现在说的国语我自然不清楚，多半不是；用粤语来读是不是就一定不能准确领悟到正确的意思我也不敢说，毕竟国语写的汉字和粤语读的汉字都是一样的，而且我也没仔细钻研过《三国演义》；但是读别的语言的著作，就真的最好读原著的。看着母语写的书当然舒服，但有时候却会因此读不懂原作者想表达的意思：经过翻译的书，表达的不再是单纯的原作者的意图。翻译者再优秀，他翻译的书里面都无可避免地渗进了他的想法和见解。如果你读某一本翻译的著作时发现语句不通观点奇怪，那么你不妨找回原著对照一下——这有可能是翻译者弄出的Bugs。&lt;br /&gt;&lt;br /&gt;所以有能力（懂原著所用的语言的话）、有机会（买得起原著话——不是都有影印版的），多读原著吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-7649425756073503833?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/09/blog-post_30.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-7657178707421859465</guid><pubDate>Sat, 27 Sep 2008 06:49:00 +0000</pubDate><atom:updated>2008-09-27T19:02:11.524+08:00</atom:updated><title>认识迷宫</title><description>之前的某篇post上，我提起过我学习过了如何生成迷宫。乘今晚终于把迷宫游戏重新写了一次，来总结一下吧。&lt;br /&gt;&lt;br /&gt;至于重新写的目的，皆因想顺便练习巩固一下学习过的设计模式的使用，不过我如今写的这个迷宫还是比较微型的，用到的不多。&lt;p&gt;&lt;/p&gt;来个截图先：&lt;br /&gt;&lt;div id="attachment_372" class="wp-caption alignnone" style="width: 310px;"&gt;&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2008/09/maze_screenshot.jpg" rel="lightbox[371]"&gt;&lt;img class="size-medium wp-image-372" title="maze_screenshot" src="http://www.xinside.net/wordpress/wp-content/uploads/2008/09/maze_screenshot-300x220.jpg" alt="迷宫游戏的截图" width="300" height="220" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;迷宫游戏的截图&lt;/p&gt;&lt;/div&gt;&lt;strong&gt;原理&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;话说我第一次接触如何生成一个迷宫应该是在初中的时候，因为我记得那个时候我才在我住的地方可以买到电脑报的报摊。看守报摊的是一对老夫妻了，不知道他们现在过得可好？&lt;br /&gt;&lt;br /&gt;回到主题。我已经记得不清楚了，好像那时候上面的方法是有一个专门的数组，然后0代表通路1代表是墙的，接下来的就真的不知道了，因为那个时候我还看不懂。完全把迷宫写在一个数组里面应该算不上生成的方法吧，只是表示的方法，因为生成迷宫的是人脑不是电脑。&lt;br /&gt;&lt;br /&gt;勉强算得上是方法的，应该是依靠填充0和1的随机数到一个二维的数组，0代表通路1代表墙，然后再图形化出来。不过这样的算法其实很囧，生成出来的能不能叫迷宫……我不知道了。&lt;br /&gt;&lt;br /&gt;我不懂定义什么叫迷宫，不过我玩过的迷宫，一般都是只有一条路的，从起点到终点只有唯一一条路径，当然这不是绝对的，不过这种迷宫有一个附带的好处就是，你在迷宫走过的正确路径，可以构成唯一的一幅图画。我想这样的迷宫大家应该都玩过很多的啦。&lt;br /&gt;&lt;br /&gt;其实可以让条件更严格：迷宫中任意一点都有且只有一条通往另一点的路径。&lt;br /&gt;&lt;br /&gt;考虑一下这样的迷宫其实是什么？任意两点之间都有通路，而且通路唯一，也就是不会构成回路——没错，那就是树。&lt;br /&gt;&lt;br /&gt;迷宫可以用树的结构表示这一点其实可以用来解释右手规则（或者左手规则）：这所谓的规则其实只是人工地遍历树罢了，迷宫的入口是树的根，出口是树结构中的某一个结点，所以是绝对可以从入口找到出口的。&lt;br /&gt;&lt;br /&gt;所以怎样构建迷宫其实就是怎样去构建一棵树。那么有什么方法呢？&lt;br /&gt;&lt;br /&gt;最直接的方法就是数据结构书经常有代码例子的直接生成啦，不过我感觉这个方法其实……跟人工生成没太大区别，你觉得呢？&lt;br /&gt;&lt;br /&gt;间接生成树的方法就是从一个图中得出，比如说遍历，或者是最小生成树。图是现成的，一个3×3的迷宫完全可以看成是一个由9个顶点构成、每两个相邻的顶点之间就存在边的无向图。然后喜欢深度遍历还是Prim算法还是其他的就是你的选择了。&lt;br /&gt;&lt;br /&gt;知道了以上的基本原理，生成一个迷宫就不是难事了。下面的没有什么原理上的东西了，只是我实现的具体细节。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;实现&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;以下我只是选择我觉得主要的挑选部分代码写写。更详细的代码可以在&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2008/09/xmaze.zip"&gt;这里&lt;/a&gt;下载。&lt;br /&gt;&lt;br /&gt;首先要考虑的是如何表示。根据原理，可以将迷宫考虑成由行x列个小房间构成，排列成一个矩形（不考虑三角形啊五边形等等异形状迷宫）。于是，对应的图的表示也可以简单一点，直接用一个二维数组表示。数组中的每一个元素，都包含了四边的情况：对应到生成树中，若与在这一边邻接的房间之间有通路的，则这一边是通路，否则就是一面墙。于是，可以设计一个Room类：&lt;br /&gt;&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Room &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;:&lt;/span&gt;&lt;br /&gt; Wall&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; walls&lt;span style="color: rgb(0, 128, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 221);"&gt;4&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;]&lt;/span&gt;;&lt;br /&gt; &lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;/* other operations */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Wall类代表了一面墙。也可以用其他类型定义walls这个数组，只要能区分出是不是一面墙——bool型也是可以的。至于我的实现中有个Wall类是因为……这是在设计初期的产物，后期发现了，但懒得改了。所以在我的实现中，Wall类只是简单地定义为了一个空的类：&lt;br /&gt;&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Wall &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;为了实践Iterator模式我专门为二维数组写了一个Array2D类，然后再为这个类写了两个Concrete Iterator：按行的Array2DRowIterator和按列的Array2DColIterator。这样做的原因仅仅只是作为Iterator模式的实践应用，没有其他特别意义^o^。&lt;br /&gt;&lt;br /&gt;为了储存RowxCol的一个迷宫，需要RowxCol大小的数组，每个数组中包含一个Room的实例。试想一个100×100的迷宫，那么就需要10000个Room的对象，然而这些Room对象很多都是类似的——只有4个面，最多只有16种不同的情况。没错，这里我将Room类设计成了Flyweight。这样设计的结果是，Room的实例只需要16个，而 100×100的迷宫，需要的是10000个指向这16个实例的指针。指针的大小是4bytes，Room类的大小是起码16bytes，算算空间能节省了多少？&lt;br /&gt;&lt;br /&gt;用4个2进制位就可以刚刚好表示完这16个独立的Room实例了。所以我设计了这样的Room构造函数：&lt;br /&gt;&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;Room&lt;span style="color: rgb(0, 128, 128);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 119, 136);"&gt;Room&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; wallsig &lt;span style="color: rgb(0, 0, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(32, 128, 128);"&gt;0xF&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; i&lt;span style="color: rgb(0, 0, 128);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;; i&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 221);"&gt;4&lt;/span&gt;; i&lt;span style="color: rgb(0, 0, 64);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   walls&lt;span style="color: rgb(0, 128, 0);"&gt;[&lt;/span&gt;i&lt;span style="color: rgb(0, 128, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;wallsig &lt;span style="color: rgb(0, 0, 64);"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 221);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;lt;&amp;lt;&lt;/span&gt;i&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;     walls&lt;span style="color: rgb(0, 128, 0);"&gt;[&lt;/span&gt;i&lt;span style="color: rgb(0, 128, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128);"&gt;=&lt;/span&gt; SiteFactory&lt;span style="color: rgb(0, 128, 128);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 119, 136);"&gt;Factory&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;.&lt;span style="color: rgb(0, 119, 136);"&gt;CreateWall&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;SiteFactory是用来构建Room和Wall的类（毫无疑问Wall也是可以做成Flyweight的）：&lt;br /&gt;&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; SiteFactory &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;:&lt;/span&gt;&lt;br /&gt;SiteFactory&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;~SiteFactory&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; SiteFactory&lt;span style="color: rgb(0, 0, 64);"&gt;&amp;amp;&lt;/span&gt; Factory&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt; Room&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; CreateRoom&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt; Room&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; CreateRoom&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt; Wall&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; CreateWall&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; std&lt;span style="color: rgb(0, 128, 128);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 119, 136);"&gt;map&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, Room&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;gt;&lt;/span&gt; roomsPool;&lt;br /&gt; Wall&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; wall;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;SiteFactory是一个Abstract Factory，同时也是一个Singleton。这里的Singleton用的并非使用GoF描述的使用指针+Lazy Initialization的方法，而是把Singleton的实例定义成静态成员函数内部的静态局部变量，需要获取的时候直接返回局部变量的引用。这样的好处是，不用去担心如何销毁Singleton的实例，实例是在栈上分配的，会在作用域结束（也就是程序结束）时自动析构。只不过……我觉得引用到局部变量在概念上始终不太完美，虽然因为这同时是静态的关系而不会带来实际问题。&lt;br /&gt;&lt;br /&gt;在表示的层次上主要的问题就是这些，下面继续考虑一下构造的层次。&lt;br /&gt;&lt;br /&gt;经过原理上的分析，可以知道用遍历或者是生成树的方法都可以生成迷宫的树结构。其中生成树的方法是要求权值数据了，嫌麻烦的可以都赋1，或者随机赋予。这次的迷宫中，我没有用这个原理来实现生成的算法，不过给我的感觉，带权值可以较精细的控制迷宫的结构，但算法会复杂一点点。&lt;br /&gt;&lt;br /&gt;而我使用的是遍历的方法，为了比较结果我同时实现了深度和广度遍历，使用了Strategy模式：&lt;br /&gt;&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; BuildingStrategy &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;:&lt;/span&gt;&lt;br /&gt; BuildingStrategy&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Build&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;MazeContext&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; context&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; r, c;&lt;br /&gt;   unvisit &lt;span style="color: rgb(0, 0, 128);"&gt;=&lt;/span&gt; context&lt;span style="color: rgb(0, 0, 64);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;gt;&lt;/span&gt;GetRows&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt; context&lt;span style="color: rgb(0, 0, 64);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;gt;&lt;/span&gt;GetCols&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;   visitedTable &lt;span style="color: rgb(0, 0, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 221);"&gt;new&lt;/span&gt; Array2D&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;context&lt;span style="color: rgb(0, 0, 64);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;gt;&lt;/span&gt;GetRows&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;, context&lt;span style="color: rgb(0, 0, 64);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&amp;gt;&lt;/span&gt;GetCols&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;   getARandomPosition&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt;context, r, c&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt;   extendFromThePositionUntilEnd&lt;span style="color: rgb(0, 128, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 64);"&gt;*&lt;/span&gt;context, r, c&lt;span style="color: rgb(0, 128, 0);"&gt;)&lt;/span&gt;;&lt;br /&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;/* other primitive or non-primitive operations and data members */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;}&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;很明显我还会派生出两个具体的Strategy，DepthConstructStrategy和WideConstructStrategy。特别列出了Build方法是因为它是一个Template Method，这个方法体现了深度遍历和广度遍历的一般步骤：建一个已访问房间的二维数组确保不会访问已经遍历的房间visitedTable)，然后挑选一个随机的位置(getARandomPosition)，最后从这个位置开始遍历直到结束(extendFromThePositionUntilEnd)。&lt;br /&gt;&lt;br /&gt;至于如何实现这个extendFromThePositionUntilEnd，其实就是图遍历的算法，就不用我来说了，市面上随便一本数据结构的书都比我说得详细。&lt;br /&gt;&lt;br /&gt;当然，Strategy一般可以实现成Flyweight。我也是这样做的。&lt;br /&gt;&lt;br /&gt;如何表示以及如何构造的问题都解决了，剩下来的是如何表现。表现的方式就五花八门了，像最初我实现迷宫游戏的时候，用的是Windows GDI；现在这个则使用了Curses；想要点3D效果，弄弄OpenGL或者Direct3D也OK。因为这个原因，我想就不说关于表现的部分了。我的详细实现，可以在代码中找到。&lt;br /&gt;&lt;br /&gt;Well……关于迷宫大概就说到这里啦。经过自己的研究学习，发现生成一个迷宫其实是很简单的事情，最核心的代码也就20行出头，倒是为了把某些可以用的上的设计模式练习一下，整个代码的规模扩大了好多倍……另外就是按广度遍历原理生成的迷宫，不知道是不是我实现得有点问题，得出来的迷宫简单得不行啊……&lt;br /&gt;&lt;br /&gt;在这里再放一次我实现的代码的&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2008/09/xmaze.zip"&gt;链接&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;然后接下的任务啊，我想我应该学习和修炼一下自己写的代码的质量了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-7657178707421859465?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/09/blog-post_27.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-2318621100184948745</guid><pubDate>Wed, 17 Sep 2008 07:57:00 +0000</pubDate><atom:updated>2008-09-17T15:57:52.268+08:00</atom:updated><title>WP Site转正+小改动</title><description>一个月过去了，我决定把WP Site绑定到xinside.net的root上。嗯，应该可以说，xtheukn改版了吧。&lt;br /&gt;&lt;br /&gt;原来的blogger版依旧同步运行，不过如果要访问blogger site，只能访问blogger.xinside.net了，友情链接中也放上了blogger site的link，还是喜欢blogger那个style的朋友可以继续在那里浏览，不过评论我希望都发在这边咯，方便一点……。至于原来已有的连接到xtheukn的链接，大概都会得到有效的转移（大概，是因为我不知道我覆盖得是不是100%……），所以旧链接的浏览应该是不会有问题的。漏网之鱼如果你发现了，请务必告诉我，我会想办法尽力让旧链接正常工作的。&lt;br /&gt;&lt;br /&gt;然后，大概就是换了个theme……旧的那个theme在我搬迁以后不知道为何不能正常运作，所以就暂时换成现在的了。另外就是permalink的格式统一为%year%/%month%/%day%/%postname%/，这样看上去应该美观一点吧，postname是经过&lt;a href="http://www.moon-blog.com/2007/08/wordpress-plugin-chinese-pinyin-slug.html"&gt;pinyin slug&lt;/a&gt;转化的。不过pinyin slug默认生成的东西都挤在一堆了……于是稍微作了修改。变成的样子就是你现在看到的这篇post的permalink的样子。如果你觉得有用的话可以在&lt;a href="http://www.xinside.net/wordpress/wp-content/uploads/2008/09/pinyin-slug.php"&gt;这里下载&lt;/a&gt;我改动过的文件。&lt;br /&gt;&lt;br /&gt;然后……没了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-2318621100184948745?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/09/wp-site.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-693387524450715260</guid><pubDate>Mon, 15 Sep 2008 19:06:00 +0000</pubDate><atom:updated>2008-09-17T17:11:36.240+08:00</atom:updated><title>八月十六的夜晚</title><description>&lt;p&gt;我的意志是很薄弱的，明明知道晚睡对身体不好，偏偏还是会因为这样那样的原因搞到3，4点钟都还没睡。比如说忽然发现某某游戏很好玩，或者忽然发现某某问题急需解决（事实证明基本上没3，4点才急需解决的问题），或者很想知道某某事情的来龙去脉等等。而这样的结果往往是让我3，4点钟都很难睡着，比如今晚。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;今晚的月光，听说比昨夜十五的还要圆。夜空一片云都没有，月光就这样穿过窗户直射在地板上。柔柔的月光，使我又不禁想起了老家。&lt;/p&gt;&lt;p&gt;学生时总是可以轻而易举地背出“独在异乡为异客”，却总很难明白何谓“每逢佳节倍思亲”，家里的酒和学校的酒，都觉得一个味道；工作以后，时空距离依旧，不同的是，我觉得家里的水更甜。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;大概，人越老，才越会发现某些东西宝贵，更想去珍惜。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-693387524450715260?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/09/blog-post_16.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-7408021416368126679</guid><pubDate>Fri, 05 Sep 2008 05:56:00 +0000</pubDate><atom:updated>2008-09-05T13:56:23.269+08:00</atom:updated><title>我也是会生气的。</title><description>是不是很久以前用过这个标题做QQ的签名档的？&lt;br /&gt;&lt;br /&gt;我也是人，我也有七情六欲，自然也会生气。只是，我一般都会压抑住的，因为我觉得还是和气一点更好，针锋相对并不是解决问题的办法。&lt;br /&gt;&lt;br /&gt;但我从来没有舍弃过作为人所拥有的这种感情。&lt;br /&gt;&lt;br /&gt;生气，现在回忆起来，爆发得最凶的一次大概要追溯到高中一年级，那是气得一手扯着同学cjl（帮我买第一个modem的那个，可参考一下The story of ``X''），眼睛直瞪着他。不过架是没打成（要真的打起来，我还是有80%胜算的，呵呵。老实说，活到现在我还没真正打过一次架，小时候和妹妹的那些不算~）。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-7408021416368126679?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/09/blog-post.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-34507539.post-4716663585517165478</guid><pubDate>Wed, 27 Aug 2008 16:27:00 +0000</pubDate><atom:updated>2008-08-28T00:27:40.985+08:00</atom:updated><title>文章整理完毕</title><description>Blogger上的文章都导入到Wordpress上来了，标签和分类都作了重新的调整。分类还可能好分一点，打标签就实在想破了头，虽然现在已经都打好了标签，但事实上我不知道是不是都打的恰当……如果你觉得我打得不恰当，一定要对我说哦！&lt;br /&gt;&lt;br /&gt;而每篇文章的内容，基本都逐一去掉了blogger加上的html标记，只是去掉了那些标记，文章的格式也乱了，于是你可能会看见几段话挤在一起……虽然很想再慢慢作调整，但工作量不少啊……日后慢慢再说吧。&lt;br /&gt;&lt;br /&gt;文章同步已经完成了，日后的同步也不用担心了，问题在于评论……Wordpress到Blogger的评论同步是不可能的了，起码在现阶段是不行的，因为Blogger只支持blog owner发布评论。当然……手动过去肯定也ok，只是评论时间就确实没办法了。&lt;br /&gt;&lt;br /&gt;Blogger到Wordpress的评论同步倒不成问题，看看这次的文章导入就知道了，只是可能要对IFB插件稍作修改。甚至真的懒过头，自己写几句SQL插入到数据库也行。&lt;br /&gt;&lt;br /&gt;这样，对xtheukn的变更就差不多了，剩下的，大概就是整个wp site放在root去了，不过这应该是在我更熟悉Wordpress以后才会发生了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34507539-4716663585517165478?l=blogger.xinside.net' alt='' /&gt;&lt;/div&gt;</description><link>http://blogger.xinside.net/2008/08/blog-post_28.html</link><author>noreply@blogger.com (X)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item></channel></rss>