安卓模拟器、HAXM、Hyper-V

刚才打算用 Android Studio 配套的模拟器测试一个 apk,谁知启动虚拟设备的时候遇到 “Unable to open HAXM device: ERROR_FILE_NOT_FOUND” 这样的报错。

有人在 Windows 10 上通过禁用 Hyper-V 并重装 HAXM 解决了该问题。此法在我的环境中有效。简单查了一下,Hyper-V 和 HAXM 都是虚拟化技术。前者是微软提供的,Windows 10 自带。后者是英特尔提供的,专门用于加速安卓模拟器。看上去这两者不兼容。如果不禁用 Hyper-V,直接重装 HAXM 的话,在安装过程中就会报错。

然而我将 Hyper-V 禁用之后,Docker 又用不了了。

各种软件之间的兼容还真是个问题。

权限问题导致 git 服务器无法使用

这两天在公司的 Synology NAS 服务器上搭建了一个 git 服务器。其实 Synology NAS 服务器是自带 Git Server 包的,可以一键安装,非常方便。但是我没有将权限设置好,这就导致 git 服务器一直无法使用。

先是按照 NAS 文档的说明,我需要 ssh 到服务器上创建一个 git 仓库文件夹。然而我 ssh 登录之后却被提示 Could not chdir to home directory: Permission denied。尝试 cd 到任何一个文件夹都被提示没有权限。可是 ls 打印出的文件夹权限明明都是777。最后发现原来是在 NAS 的 管理系统中,我将用户组对文件夹的访问权限设成了 No Access。原来管理系统设置的权限优先级比操作系统层面的文件夹权限还高,也不知是怎么做到的。

git 仓库创建好后,能够正常 pull。但是 push 的时候一直在 writing objects 这一步卡住。依然是因为权限问题。这回就是操作系统层面的文件夹权限没设置好——我的 git 用户账号对 git 仓库文件夹没有写权限。后来我在用户主目录下重新创建了一遍仓库才解决了该问题。

顺便吐槽一下 Synology NAS 的 Git Server 文档。原文档让我在 /volumeX 目录下用 git init  创建 git 仓库,并且在客户端用 ssh://用户名@服务器地址/git仓库文件夹名  形式的 URL 访问 git 服务器。然而实际上要用  git init --bare --shared 命令来创建仓库, 用  ssh://用户名@服务器地址/git仓库绝对路径 形式的 URL —— URL 末尾应该是 git 仓库的绝对路径,而不是 git 仓库文件夹名。

EMwI更新:版本1.1 支持批量添加

使 WordPress 媒体库支持外链图片的 External Media without Import 插件自发布以来,就收到了好些用户的反馈。其中相当一部分用户希望插件可以支持批量添加的功能,也就是一次性可以添加多个 URL 。非常惭愧的是,虽然我大约一年前就收到了这样的建议,并且自己也觉得应该添加这个功能,但却一直没能抽出时间做这件事。两个月前本想利用自己睡前或是上学前的零碎时间一点点把代码给写了,但途中又因为各种事情中断了。

直到这几天终于把批量添加的功能实现并发布了出来。当前最新版本更新到1.1。该版本将原本只能输入一行的文本框( <input> )改成了可输入多行( <textarea> )。用户可在文本框中输入多条 URL,每条 URL 占一行。点击添加按钮就会一次性将文本框中的多条 URL 添加进媒体库中。

其实现在因为我个人网站的主机搬到了 Vultr,配置比以前好了不少,所以我自己已经(至少是暂时)用不上 External Media without Import 这个插件了。但是插件自发布以来陆续收到好些用户的肯定、期待和反馈,甚至连给我差评的都会跟我说声 sorry,并肯定我的想法。再加上插件在 WordPress 官方上的主页也显示插件有1000多个活跃安装。这些都是对我莫大的鼓励,也让我感到做好这个插件不仅仅是为了我自己。大家的反馈也让我有点找到了自身的价值。因此现在基本是怀着不愿辜负这批用户的心情继续改进着这款插件。

昨晚发布版本1.1之后,我就开始一条条地回复那些曾经提出希望支持批量添加功能的用户留言。然而有点让人难过的是,WordPress 官网上有的留言太旧,都被系统自动关闭,无法回复了。这让我感到更加惭愧。

不过只要还有用户在期待,我还是会继续维护改进这个插件的。这款插件还有很多可以改进的地方,除了批量添加的功能外,用户们也提出了不少其它问题。版本1.1发布之后可能也会有新的 bug。只要我能抽出可支配的业余时间,都会优先处理 External Media without Import 插件的问题的。希望我做的东西可以继续为大家带来价值。

改名啦改名啦~

有的朋友可能知道我有另一个网名——纸箱猪。我现在越来越喜欢这个名字,所以决定将这个名字用作自己常用的中文网名。“子子翔的技艺空间” 也会改名为 “纸箱猪的技艺空间”(不过我的独立站点的名字倒是早就改了)。英文网名嘛,还没有。不过我觉得 Box Pig 也不错。

顺便再给自己的各种个人空间打遍广告:

我的个人独立站点:http://zxtechart.com/

我的 CSDN 技术博客:https://blog.csdn.net/zzxiang1985

我的 github:https://github.com/zzxiang

公司的主策云海发挥了他许久没捡起的像素画功,友情为我画了一张纸箱猪御用 Logo:

其实我原来用的头像也是原创的。那是我在学素描的时候,用 Blender 观察研究阴影时渲染出来的一张图:

最近有两个月没打理个人空间,都要长出杂草了。其实近来收获和感想都不少,憋了挺多东西想写的。无奈实在是忙得不可开交。在学校上学的同时还做着三份工作,参与教会服侍,最后挤时间写自己的小项目。于是时间和精力管理成了我现在的最大课题。

说起来前段时间我个人做的 WordPress 插件收到了第一个差评,也陆续堆积了很多用户反馈,但是一直没来得及处理,心里也有点愧疚。果然开源项目一做起来,支撑着自己做下去的不但有兴趣,还有责任。

修炼之旅还在继续,我会加油。虽然来我空间做客的朋友少之又少,但是你们的一点点关注也让我的修炼之旅不至于那么孤单。谢谢你们 ^_^

被NTFS的bug困扰了一个多星期

这篇文章其实写于2012年5月2日。原文是发表在我的CSDN博客上:《被NTFS的bug困扰了一个多星期》。昨天收到一条评论说文章写得太有趣了。于是把文章又读了一遍,感觉的确是一段宝贵有趣的回忆。因此不禁想把它搬到自己的个人站点上做个备份。珍贵的东西放在别人家里总是怕不知哪天就被丢掉了。其实我的CSDN博客上还有几篇我自认为更有趣的故障排除类的日志,有空时也会一篇篇搬过来。

原文发表的时候还是Windows 7的年代。当时微软也已经就文中提到的bug发布了补丁。如今已经是Windows 10的年代,虽然我没亲自验证,但这个bug在Windows 10上估计已经不存在了吧。

// ========= 一点也不华丽的分割线,以下是原文 =========

继续阅读被NTFS的bug困扰了一个多星期

关于游戏的“正规元素”

在阅读Tracy Fullerton的《游戏设计梦工厂》时,我对书中提到的“正规元素”这个概念始终感到困惑。为什么这些元素是正规的?难道还有不正规的元素吗?

英文原文中这个概念应该就叫做“Formal Element”,见《The formal systems of games and game design atoms》这篇文章,里面Formal Game Elements一节与《游戏设计梦工厂》第3章所写的“正规元素”是相同的。然而知道了英文原文也无助于理解为什么这些元素是formal的,是不是还有informal的元素。

一次偶然的机会,我得知身边的策划云海竟然在《游戏设计梦工厂》成书之前曾参与过早期校阅工作,还提过一些用词建议,在成书之后也向译者陈潮提过一些翻译问题。不禁喜出望外,立马抓住他问起了“正规元素”的问题。他说,对于这个词,翻译组也很纠结,他自己也和翻译组纠结过。可能翻译为“基础元素”或“核心元素”会更好。这只是作者为了后面的讨论,先规范地定义一下这些专业词。不过“正规”这个说法确实不好理解,给人一种这些元素很正经,其它元素不正经的感觉 😆 。

这么说来,其实所谓“正规元素”也就是一个游戏所要具备的重要元素,即玩家、目标、操作、规则、资源、冲突、边界和结果。借用一篇知乎专栏的话,这八个维度是“组成游戏的部分、零件”。可能并不是每个游戏都一定包含所有这八个元素,但只要是个游戏都至少含有其中某些元素。

顺便贴一下云海在讨论这个问题时画的一张图。很多小人在抗议:“为什么我们没有被列为正规元素?!”作者表示:“因为你们不正经!”

主机无法访问后学到了一些东西

上周五突然发现我无法访问自己的博客了,但是国内的朋友可以访问。心里一惊:不会被封了吧?!

可是我的博客一向老实本分啊。关键是,我买的是香港主机,IP是新加坡的,境外主机被封的话难道不应该是国内用户访问不了,国外用户可以访问吗?怎么现在反过来了?所以很可能是主机公园——也就是主机供应商方面的原因,大概线路故障什么的。更何况经过试验,即便从国内访问也无法登陆主机的cPanel管理界面,因此服务商方面故障的可能性很大。

我试着把自己的域名解析到别的网站IP,结果是我的域名可以正常指向别人的网站。因此看来域名没有问题,是IP已经不可用了。

联系主机公园几天都没收到回复,遂决定换主机服务商,搬家。

继续阅读主机无法访问后学到了一些东西

将git工作目录的改动应用到svn

之前在维护自己写的WordPress插件时,为了能够方便地同时向GitHub仓库和WordPress官方的svn仓库提交,我只在本地维护了一个git工作目录,然后用 git svn dcommit向svn仓库提交,用 git push向GitHub提交。(详见我之前写的日志。)

但可能是因为WordPress官方的svn仓库太大,历史记录太多,而git-svn的内部实现又有点问题,所以最近几次我用 git svn rebasegit svn dcommit都毫无反应。思来想去,为了不耽误时间,我还是决定老老实实用svn客户端了。

于是现在我本地就有了两个目录:一个git工作目录,用于向GitHub提交;一个svn工作目录,用于向svn提交。由于svn里的分支和标签实际上就是目录,因此svn工作目录下还有trunk、branches和tags子目录。trunk子目录里的内容才和git工作目录里的内容相同。

一般我是在git工作目录下写代码,因此思路是在git工作目录commit之后,用 git diff生成patch文件, git log输出提交日志到另外一个文件。然后用 patch命令将 git diff应用到svn工作目录。最后 svn commit的时候利用git log的输出,这样就可以做到svn trunk分支的提交和git master分支的提交一一对应。这个过程如下图所示:

继续阅读将git工作目录的改动应用到svn

《游戏设计梦工厂》练习1.3 把你的生活做成一个游戏

列出你生活中的五个可以作为游戏的领域,然后简要地形容每一个可能拥有的游戏结构。

我想这里说的游戏结构应该是指第2章和第3章所说的组成游戏的“正规元素”,即玩家、目标、规则和资源等等。

人生

这就是一个每个人都24小时在线玩的MMORPG,名字可以叫做《地球Online》——当然这里我不是指维基百科收录的那个真的叫做《地球Online》的国产游戏,而是指萌娘百科收录的那个70亿玩家同时在线的世界上规模最大的MMORPG。不过这个游戏的边界(就是将非游戏内容与游戏分开的东西,见书中第3章)太大,不如将范围缩小到我的人生,或者是我的日本生涯。这样这个游戏的时间边界就是我在日本生活的期间,地理边界就是日本,玩家就是我本人。

《模拟人生》移动版

这是一个自由度极高的开放式游戏,最接近的电子游戏应该是GTA和《模拟人生》。不过现实人生的游戏规则就是自然法则与社会规则,而GTA没有那么多社会规则。人生游戏本身没有目标,也不存在通关或输赢一说。玩家角色具有智力、体力、职业技能等属性或是技能天赋,从而决定了角色的行为能力。食物、水、空气等是游戏中的资源。随着时间流逝或是由于玩家的行为,一些事件或是剧情会被触发,玩家就需要和系统或是其他玩家交互。人生游戏内部还包含很多自成体系的大中小型游戏。这些游戏又具有自己的游戏结构,比如:

继续阅读《游戏设计梦工厂》练习1.3 把你的生活做成一个游戏

用UGUI Slider做血条时遇到的一个小问题

前段时间想在小游戏中做一个血条UI,自然而然地想到了用UGUI的Slider。

在Unity中可以通过编辑器菜单一键创建一个Slider。这样的一个Slider里会包含Background、Fill Area和Handle Slide Area三个部分。其中Handle Slide Area就是滑块。血条不需要滑块,因此要将它删掉。

刚用编辑器菜单创建的Slider。需要将Handle Slide Area也就是滑块删掉。

我以为将滑块删掉就万事大吉不用改了,谁知却遇到一个问题。Value为0的时候,血条在表现上还有残留的血量:

Value为1的时候,血量却还没填满整个血条:

后来发现要将Fill Area及其孩子Fill的Left和Right都调成0才行。这样问题就解决了。

这里Left是指UI控件的左边缘相对于Anchors Min X的距离,Right是右边缘相对于Anchors Max X的距离。