服务器架好之后,就想着怎样把所有的服务统一管理。My Book 上的 Transmission,主机上的 eMule,还有 MiPony,这些程序都带有用于远程控制的 WebUI。但是这些服务分散在内网的多个机器上,需要设置逆向代理才能从外网统一访问。

首先根据教程安装上 Rewrite 2.0 和 Application Request Routing 2.0。但是,在设置 Rewrite Rule 的之后,远程访问总是报告 404 文件未找到。后来终于找到原因,在 IIS 7.5 上需要用“服务器场(Server Farm)”来引导请求指向。

首先,在新建一个服务器场,就叫做 eMule。这个服务器场只有一个服务器。(由于我的 eMule 远程控制端口开在 5000,所以要先把 httpPort 改成 5000,再点“添加”)

585_add_server_to_farm.png

然后,在 Inbound Rewrite Rule 里面选择“指向直服务器场”。

586_inbound_rule.png

逆向代理的好处不仅仅是中心管理,而且还能使用 SSL 加密连接和 IIS 集成的用户验证,这样可以使远程管理更加安全。


后记:有些时候 Geek == Freak(翻译成中文就叫“沙比”)。本来也想把 uTorrent WebUI 集成进来的,结果发现 uTorrent 的用户验证没办法关掉,而 IIS 7.5 又需要另外一套验证。uTorrent 官网上有很多人建议把用户验证作为可选项,可是得到的回复都是“为了安全起见,俺们不会那么做。否则小白的机器就会被别人控制,所有下载都会被删光光……” 就一个简单的明文验证还叫安全?难道坏蜀黍们就不会嗅探远程密码、得到控制权限么?做个可选项,并且默认启用会死?


2011/02/06 更新:

终于把 uTorrent 也给设置好了。这里需要耍个小聪明,因为我的服务器使用的是简单密码登录,而 ARR 在做逆向代理的时候,会把 HTTP 头的验证部分也传递过去,所以只需要在 uTorrent 里面把用户名/密码设置成跟登录服务器的一致就可以了。

另外,uTorrent 2.0 以上版本的 WebUI 加入了 Auth Token,这个“安全巧妙”的设计却使用了一种非常傻缺的方法来实现:在 javascript 脚本里面不断请求 http://{host}/gui/?token= 或者http://{host}/gui/token.html。我的转向目录设置为 /utorrent/,所以请求 /gui/ 下面的东西 IIS 理所当然地回复 404 文件未找到。

解决方法也很麻烦,要在 uTorrent 程序配置路径中找到 webui.zip,用 WinZip/WinRAR 将里面的 webui.js.gz 解出来,再用 gunzip 解出 webui.js,把里面的 urlBase(在 3.8.0 中是 guiBase)变量强制改为“./”,再用 gzip 封包,然后替换到 webui.zip 中。到这里还没完,还需要重新启动 uTorrent 才能使更改生效!

最后,终于把 uTorrent 也整合到中心管理中了。


2011/02/06 另更新:

如果在根节点设置 Rewrite Rule,则必须使用服务器场。如果在某一站点节点设置 Rewrite Rule,可以不使用服务器场,直接填写 http://server-address/service-url 即可。

首先,在讨论标题提出的问题之前,先鄙视一下 Linux!

好吧,本人 Linux 小白,自认不知好歹,竟然自己在 Western Digital MyBook World Edition 上面装 CUPS。折腾了一整天,终于排除万难,成功打印测试页。期间经历“can't resolve symbol 'stderr'”、“/usr/lib/cups/filter/foomatic-rip failed”、“Job stopped due to filter errors.”、“getopts: not found”等等恐怕各位开源高手都前所未见的错误,但是本 Linux 小白全部克服了!在没有完整文档的情况下克服了!

过五关斩六将之后,发现 Foomatics 驱动不能挂 Windows 客户端。好吧,咱用 PDF/PS 文件还不成么。无奈强大的 lp/lpr 命令直接“can't resolve symbol 'stderr'”(“老婆”不知错,罢工了,嘿嘿)。又找不到源代码来重新编译 lp/lpr。结局就是一整天的功夫全部白费了。


回归主题。这次麻烦的是 8 年半前买的 HP LaserJet 1000 激光打印机。这打印机没什么问题,这么长时间了一直正常工作,可是 HP 在 2005 年就终止了驱动程序更新。值得一提的是,HP 这款打印机使用了 Hostbase 技术,也就是说由驱动将要打印的页面转换为打印点阵,而打印机只负责打印就可以,无需任何计算。这种变态节省打印机设计复杂度的方案直接导致驱动无法与别的型号通用。

AMD 在 2004 年的时候划时代地推出了 64 位处理器,随后微软也赶时髦,搞了个 64 位操作系统。怎么说这也是科技的进步,可就是 HP 放出一句“我们正在开发 64 为驱动程序”之后就再无下文了。

如今是日历都以 201x 开头的年代,64 位马上就要取代 32 位。前几天组装服务器之后,Windows Server 2008 R2 直接默认安装为 64 位版本。

主板驱动很顺利就装上了。怎么说这块主板也有五六年历史了,正在感叹 Windows Server 2008 R2 对于驱动程序的兼容性真不错,HP LaserJet 1000 驱动直接拒绝安装。

于是,眼睁睁地看着还能正常工作的打印机却派不上用场,扔了可惜,留下来的话也就只能再装一台 Windows XP 电脑连接,如此一来家里真跟开网吧没什么区别了。

这到底是谁的错?HP 做出一台很耐用的打印机,AMD 带动科技发展趋势,微软将最新的科技普及,结果却是打印机再也无法使用了。一句话概括,这打印机跟现代高科技不兼容啊!

这次架设 Team Foundation Server 之后,所有的游戏底层代码库 + TGGe 库全部提交到 TFS 上管理。但是,TFS 没有像 MKS 一样的“shared project”概念(已有的工程可以作为其他工程的子工程,也就是“库”的概念)。最后终于找到一个折中的方法实现完整的项目代码重用。

首先,建立、或者从 TFS 取出(check-out)一个代码库解决方案(Solution),其中包括代码库工程(Project)。

然后,在需要使用这个代码库的 Solution 里面,添加现有工程(Add existing project),选择那个代码库工程。这样,库工程就被添加到游戏 Solution 里面去了。但是,缺点是在服务器端并不会保存这个链接,所以一定要在游戏 Solution 里面写好注释声明工程相关性(dependency)。

最后,我的第一个 Windows Phone 7 游戏工程变成了这样。(Sola 是我为 TGGe 取的开发代号,纯属没事闲的)

583_final_hier.png

经过一个星期不屑不懈的努力,终于把服务器配置完成了。现在服务器的作用更强大了:下载、文件寄存、代码托管、RADIUS。

再次不得不感谢微软,MSDNAA 和 Dream Spark 提供了很多免费的工具:Windows Server 2008 R2 (Standard)、Microsoft SQL Server 2008 (Developer)、Team Foundation Server 2010、Visual Studio 2010 (Ultimate)……

以下是 6 块硬盘的真相:

580_wp_000042.jpg

581_wp_000045.jpg

神主板:ASUS A8V-MX(竟然驱动程序在 Windows Server 2008 R2 还能正常使用)

582_wp_000047.jpg

粗略算了一下,家里面容量在 1TB 以下的“小硬盘”有好几块,再加上两台淘汰下来的主机,如果只用作下载机实在太浪费了。干脆拼装成一个服务器,顺便把前些日子写的 Windows Phone 7 代码托管上去,自己给自己 create issue、做 bug fix(纯粹没事闲的)。 想了就做,拼拼补补之后,有了这么一台服务器:

阅读全文 »

回想 2000 年左右,还在国内的时候。当时所有的人都把自己的东西贬低得一无是处。甚至有“专家”撰文说“外国人研究表明,中国的炒菜不健康,因为使用了食用油”云云。

事隔 10 多年了,本来不想回想那一段黑历史,可是昨天 Metro 上的一条菜谱成功地唤醒了这段记忆。

阅读全文 »

下周老婆大人就从国内回来了。估计到时候也没很多时间可以用在游戏开发上。好在最底层的基础库 + 实用库架构已经完成,以后再出问题只需要微调就可以了。

总结了一下目前为止完成的代码。(包含注释)游戏基础库代码量 3333 行(这个数字 - -|||),TGGe Extension 代码量 702 行。

569_wp_000029.jpg

去掉注释什么的,代码量也在 3500 行以上。这是目前我个人制作的最大的工程了。纪念一下。

经过几天的努力,终于开始写 XML Parsing 的部分了。本来应该先写让图片变透明、利用 PNG 制作动画的心得,但是加了 XML Parsing 之后暂时无法到达游戏页面。所以那篇心得过两天再写。

照例首先贴一张开始画面的截图。(取材:《恋爱蜡笔:空之艺术》。看过《只有神知道的世界》的人都知道这款游戏……)

阅读全文 »

今年陪我过圣诞的是——小光~(微软 Silverlight 娘)

 558_dsc03451.jpg 559_dsc03454.jpg

另附一张前天在玩《Memories Off 6 ~T-Wave~》时,无意中松开 RT 得到的画面。(偏旁部首如此排列我看不懂,但是听上去像是“圣诞快乐”这句话)

560_wp_000019.jpg

值得一提的是,本性难移,我这人生 20 多年,每次在从莉莉丝和智莎两种类型之间选择时,都会选择智莎……而莉莉丝,就是那个到最后连朋友都做不成的角色…… P.S. Lunarpages 主机升级了,传个图片费死劲。搞了一个多小时才传好。

继四格 Symbian 之后,Engadget 再度发表四格 Kinect。

551_020kinect10122201-1293008123.jpg

552_020kinect10122202-1293008118.jpg

553_020kinect10122203-1293008122.jpg

554_020kinect10122204-1293008120.jpg

出场游戏:
第二格:《Kinect Adventure》大冒险
第四格:《Fighter Uncaged》格斗

篇首废话:今天没事闲的开始写 TBGE 的初始规格稿。反正过几天圣诞在家,自己写一个玩玩吧。既然打算开始做 TBGE,第一个演示版要简单而且应用到所有功能。于是乎,在网上搜素材的时候发现这么个东东。(不知道这是啥的同学说明你宅的还不够哦~)感谢百度帖吧……

550_2011.gif

从网上找了一个破解的《Mirror's Edge》xex 文件,好处就是可以随意更改 ini。

但是光盘上的 Coalesced.ini 是被打过包的 ini 集合。麻烦归麻烦,随手做了一个 Coalesced.ini 封包/解包程序(cooker)。试了一下运行良好。

想把每关 Speed Run 的时间限制改成 1 小时么?试试这个吧。

下载地址 (需要 .NET Framework 3.0)