2007-03-30 Fri
StarLogo TNG Preview 4.1 has been released. StarLogo TNG includes an agent-based visual programming language.
This release includes several bug fixes.
游戏服务器在设计时,会有许多组播的需求。比如一个 NPC 需要向周围的观察者播出它的状态信息。无出不在的各种聊天频道中需要向频道中的参于者广播聊天消息等。
通常,我们会为每个组播的请求维护一张列表,然后再把需要的信息包发送给指定列表上的多个连接。这个过程在很多地方都会遇到,一个设计的不太好的引擎,再这里有可能滋生诸多 bug 。尤其在多服务器的设计时尤其如此。
这两天,我试图寻找一种简洁统一的解决方案。
前几天的一篇 blog 讨论了一组服务器设置多个外部接入点的设计。就着这个思路我们可以引申一下。
当每台连接服务器设置一个不大的上限,比如最多同时处理 8192 个外部连接,那么管理分组倒不会带来太大的负担。
我们只需要在逻辑服务器与连接服务器间定义四条协议。
- 把一个连接加入指定分组。
- 让一个连接退出指定分组。
- 向一个分组广播消息。
- 删除一个分组。
这里,后两条协议是冗余的。
对于第三条协议,如果表示连接号的容量足够大,我们完全可以留一部分号码用于组播。这在 IP 协议中定义 IP 地址的构成时就是用的类似方案。不过我们的设计为了节省带宽,全部用的 2 字节做内部连接号,资源比较紧张,所以就单独设计一条协议了。
对于第四条协议,当最后一个连接退出时,分组就自然取消了。增加一个专门的删除协议,纯粹是使用上的方便。
在连接服务器上维护一个分组,仅仅需要一个 1K 的数组(8192 bits)。而有组播需求时,只用遍历这个数组。在 32 位系统下,只是一个 256 次的循环而已。因为大部分分组的成员都不会太多。数组中充斥着大量的 0 。扫描一下就非常的快了。
连接服务器用一个简单的 freelist + hash 表的技术,就可以高效且动态的管理不限量的分组,无论从 CPU 还是内存的负载来看,都是可以接受的。
我们额外需要做的只是一个分组编号分配管理器。为每个进程分配唯一独立的分组号就够了。在我们现在的设计中,为了尽量避免交互通讯。分配新组号采用不需要反馈的形式。每个需要申请组号的进程,都有独立的组号 id 空间。由分组管理器对若干独立的分组号做一次统一映射。
换句话说,每个服务器进程都可以直接从 0 号分组用起,然后直接用 1 号,2 号,3 号 …… 类似操作系统管理物理内存一样。独立进程拥有的只是虚拟分组号,由管理器映射到全局唯一分组号上。这样就完美的解决了不同服务器进程间的分组编号冲突问题。
It has been announced that the schedule is available for the 2007 International Rexx Symposium. It is "the premier technical conference where Rexx users and developers gather to exchange ideas and information and plan for the future of the language."
The conference will be held from April 30 to May 3, 2007, in Tampa, Florida, USA.

潮汕地图
广东人中,潮州人自古有“硬汉”之称,然而,在我的记忆中,抗战史上日军攻占潮州,汕头都是一笔带过,似乎未经激烈战斗。日前,在日本购到《给孙辈的证言》丛书第18集,晚上小女入睡,尚无倦意便拿来一翻,发现其中原日本陆军士官丸山菊夫(八十四岁)所写《仲秋作战中的负伤 弹片摘出三十余》一文,发现这个观点或许需要修正。在丸山笔下,为了潮州的得失,中日两军曾反复争夺,日军为此付出了一千七百人以上的伤亡。看看时间已晚,但文章不长,如果不做考证,大约一个小时可以翻译完。于是觉得还是催促自己勤勉一点儿吧。
以下就是这篇文章的内容,文中的“我”当然是丸山,希望大家不要以为是老萨上广东去了。
昭和十六年(1941年)三月十日,作为南支派遣军潮兵团的预备人员,我被召集入队,在熊本市下河原公园集合后,渡海编入南支海岸地独立步兵第100大队。随即参加了攻占潮州的战斗,因为战况激烈,入队后不到十天,与我同来的战友即有二十名战死。
占领潮阳后,我被选拔参加一年的干部教育,地点在广东白云山南麓中山大学的校舍,而后重新归队。此后,即作为驻汕头的潮兵团直辖部队的一员参加了羊蟹作战。此战中,中国军队为了夺回蟹目山(我查了一下,汕头的确有蟹目山。 -- 萨苏注)阵地,在迫击炮的支援下执拗地发动了多次激烈的反击,激战中山石被炸得乱飞,暴露出山体的岩脉来。雨在不停地下,无处不是潮湿积水,作战极为困难。损失了大量的人员,机枪等兵器也被敌军夺去,这一仗,事实上我们是被打败了。
随后,就是仲秋战役。昭和十八年(1943)九月十日,中国军队在揭阳集结后,再次发动有组织的反攻。不久就攻占了前线小松部队的主要阵地。因为前线动摇危急,所在部队的本田义宏中队长为求逆转战局,命令我“单身潜入敌后进行侦察”。在激烈的炮火中,我深入敌阵潜伏下来。在侦查敌情的时候,却目睹了令我难以置信的一幕。已经被俘的十一名日本兵,被中国军队用枪逼着向自己的阵地冲击,被自己的战友乱枪射杀。兵团部的平田参谋(可能是下令者 – 萨评)此后一直表情严峻。
兵团总指挥请求空军支援,在飞机的支持下,终于渐渐收复了称为“要塞”,“难攻不破”的厚茈坳阵地。然而,此战我军付出了战死七百人以上,负伤千人以上的代价。敌我双方的尸体死亡枕籍,残肢混杂,甚至无法举行火葬的仪式,只好掘大壕沟将其掩埋。
我也在这次“反攻潮州之战”,俗称“仲秋之战”中大腿部被敌人枪弹击中。
十月十三日深夜,风雨大作,为图在这次“反攻潮州之战”中夺回厚茈坳阵地,我军决定夜袭。我奉到的命令是“迂回勇猛出击,摧毁敌捷克(机枪)阵地”,我随即率领部下的分队员深入敌后,准备白刃作战。
中国军的火力凶猛,而我们从其背后的山崖一段一段攀援而上,渐渐摸到中国军背后。我隐蔽地摸向敌军阵地,竟然一直摸到中国军机枪阵地下,并且用手抓住捷克式机枪与射手开始争夺。这时我军的山炮,中国军的迫击炮都开始射击。一颗迫击炮炮弹在我身边炸开,使我左腿负伤,并被掀翻到五米高的陡崖下,左胸也受了伤,顿时人事不醒。苏醒后我因为行动不便,中对将我送到汕头的野战医院救治。
由于药物缺乏,军医竟然不使用麻药,只吩咐我“忍住”就直接用弯曲的钳子在我的伤口中探索起来,将体内残存的弹片取出。疼痛难忍,那种苦宛如地狱。先后摘除了三十多块弹片,全部摘干净是不可能的,因为我已经失血过多。军医命令给我输血,等待体力恢复后继续手术 – 可是后来终于还是没有再次手术。这期间,我背着医生奋力练习柱拐杖,并返回阵地。医生叹气,说我是“粗夯之命”后也就听之任之。
从那时起,已经六十三年了,我的体内和大腿内,还有黄豆大的炮弹破片几个没有摘除,而肺部也一直不好。我这一生都受到它们的折磨。。。
[看看时间,不到一个小时。这一仗看来十分惨烈,然而,丸山只介绍打此战的是国民党部队(重庆军),除此就没有别的说明了。到底是哪个藩号的部队发动了反攻潮州的战役呢?假如每座城都让日军付出如此代价,抗战大概不需要八年。
惊堂一声,侯教方家]
也算写了好些 tcp/udp 应用的程序了。断断续续的看了几本关于网络编程的书。这一本跟编程无关的书也当资料般的查过几章。但这几年来,居然没能抽出时间把它精读一遍,想想还真不是我的风格 :D 直到近几天,我才坚持慢慢的读这本书。
前几天在三亚晒太阳,同行的一个同事(游戏部门的技术总监)在读一本英文版关于 AJAX 的书。市场部的同事看到表示不理解。带书出门,似乎是程序员的共性,其实我自己也带了本正在读的《科学精神的形成》,可惜最终也没能拿出来翻。回想起来,似乎已经有很久没有读纯粹的技术书籍了。也就是那种略微枯燥的,讲解具体技术知识点的书。想想啊,作为程序员,这种历练还是不要断的好。
为什么《TCP/IP 详解》这本书很重要?我这样理解:
面对各种事物,“到底是怎样的?”这个问题时常萦绕在我的脑中。它是我碰到未知问题的第一反应。知根知底后,才能有脑力去想为什么。当想明白为什么后,知识方能融会贯通。然后,就再也忘不掉了。
我承认以前我始终没完全搞明白互联网上的根基:TCP/IP 协议是怎样正确的工作的。那些从网卡上进进出出的比特流如何在交换着信息。我也知道这本书可以解答我的许多问题。但是很惭愧的是,它在书架上立了好久,却没能一页页的翻下去。
好在意识到这点后,就不会再是一个遗憾。
人生中会遇到很多疑问,大部分不会有答案。所以,每本用来解惑的书都值得珍惜。明知道答案在那里却不去努力,是一种悲哀。
在过去三、四个月中,Google(谷歌)地图小团队推出了十余个新功能。最近很多朋友也提到希望介绍、总结一下 Google(谷歌)地图的这些新变化,下面我们给大家简单汇总一下。
1. 新增“鹰眼” - 跟老版地图相比,新版地图的右下角多了一个“鹰眼”,用来定位需要观看的地图局部。
2. 动态地图 - 原来静止的地图动起来了。点住鼠标左键,可以左右上下地拖动地图;使用鼠标滑轮,则能把地图放大缩小。地图左上侧有一个可移动的比例尺,用鼠标在比例尺上直接拉动,也能起到放大缩小的功能。另外,您用鼠标左键双击地图任何位置,就能把该点居中并放大;反之,用右键双击,则地图缩小。
3. 设置自己的默认位置 - 当某地出现在地图上时,您可以将该地“设为默认位置”。这对于查找工作地点,或是家庭住址附近的地图非常有用。
4. 内容更丰富的信息泡 - “周边搜索”框被整合进了信息泡。直接点击在“附近搜索”,就可以寻找周围的相关信息,例如标志建筑、旅游景点、宾馆酒店、各菜系餐厅、茶馆酒吧、健身场所、影院、商城、银行、邮局、和公司企业信息等。
5. 图上加图 - 在涵盖了 146 城市的全国地图上,Google(谷歌)为您添加了很多公园和学校的详细内图。到北京旅游的朋友不妨试试圆明园、颐和园,清华大学,哈哈!导游图!
6. 个性化打印 - 打印时,Google(谷歌)地图还为您留出了一个空间,供添加“注释”。
7. 视野内搜索 – 为了减少用户输入的麻烦,Google(谷歌)以您当前的视野作为缺省的本地搜索范围。试一试吧:用鼠标把地图拖到不同的地区,然后搜索“银行”。
8. 与网页搜索结合 - 为了给用户简单易用的一体捜索体验,我们还把地图与网页搜索整合。例如,在 Google(谷歌)网页上捜索“北京小肥羊”,“广州粤菜”,试试看,您是不是可以方便地直达我们的地图查看结果。
