木匣子

Web/Game/Programming/Life etc.

Lua> io.write("\27[2J")

Programming in Lua 第六章 More About Function 开头有一个例子。它在终端屏幕上输出一个用*号组成的正弦曲线:

function eraseTerminal()
	io.write("\27\[2J")
end
-- writes an `*' at column \`x' , row \`y'
function mark (x,y)
	io.write(string.format(**"\\27\[%d;%dH*"**, y, x))
end
-- Terminal size
TermSize = {w = 80, h = 24}

-- plot a function
-- (assume that domain and image are in the range \[-1,1\])
function plot (f)
	eraseTerminal()
	for i=1,TermSize.w do
		local x = (i/TermSize.w)*2 - 1
		local y = (f(x) + 1)/2 * TermSize.h
		mark(i, y)
	end
	io.read() -- wait before spoiling the screen
end

plot(function (x) return math.sin(x\*2\*math.pi) end)

这段看似没什么稀奇的 example code 里第二行的 “\27[2J” 和第七行的 “\27[%d;%dH” 吸引了我。 我在 Lua 解释器的交互模式下,动手试了一下 :

io.write("\27\[2J")

屏幕被清空了,就好像在终端里执行了 clear 一样!而根据注释说明:

io.write(string.format("\27\[%d;%dH*", y, x))

这段代码的用途就是在屏幕的第y行,第x列打印一个 * 号。 这个神奇的 \27 打头的字符串是什么东西呢?\27 在 ascii 码表示的是 ,但这和终端又有什么关系? 经过一番搜索,在 google 的帮助下终于找到源头:Terminal codes - http://wiki.bash-hackers.org/scripting/terminalcodes

Terminal (control-)codes are needed to give specific commands to your terminal. This can be related to switching colors or positioning the cursor, simply everything that can’t be done by the application itself.

这是一种用来控制终端界面的指令,可以改变光标所在的位置和颜色——那些CLI程序无法完成的事情。 在另一份代码中,我找一了一个封装好的终端控制代码。更直观了说明了 Terminal codes 的作用: https://bitbucket.org/lmb/diluculum/src/44c52aec561b/Lua/ANSITerminal.lua

列出 cocos2d-x Android 项目中的 cpp 文件

将 cocos2d-x 的项目移植到 android 平台时,需要用 build_native.sh 来编译 cpp 文件。而在此之前,还要将项目用到的所有 ../../Classes/*.cpp 增加到 proj.android/jni/Android.mk 文件的 LOCAL_SRC_FILES := hellocpp/main.cpp \ 这行下面。

通常一个大项目会有数十甚至数百个cpp文件,如果逐一手工添加的话,必定累死。基于 DRY原则(don’t repeat yourself),必须要有一个脚本来快速完成这件事。对于强大的 shell 只要这样一句就 ok 了。

find ../../Classes/. -name "*.cpp" | xargs

鼠须管之五笔配置

实习生涯过去半个多月了,公司给配的 iMac 昨天到了。充裕的硬盘和内存,使用起来就是爽快,不用像折腾 Macbook Air 那样小心翼翼。新机子到手后,当然有很多事要做。装上各种开发工具和常用软件,当然少不了输入法! 小时候接触电脑比较早,99年当时五笔输入法很火热,学电脑都会先学打五笔。当时的拼音没有像今天这么智能,超级难用。所以五笔在大陆地区中文输入法的地位还是挺高的。没学多久就能比较流利地打字了……后来,随着年龄的增长,我的拼音水平是越来越差,所以更加依赖五笔。

USB 网卡 for MacBook Air

用了 Air 有那么一段时间了,有爱也有恨,不过还是爱更多一点,hah。Air 的轻薄注定它容不下一个小小的 RJ42 以太网接口(可见它有多薄!),所以在一到晚上就断电断网的校园环境,很有必要配备一个 USB 网卡。

至今我买了两块 USB 网卡,前一块不知道怎么地就坏了。还好这东西不贵,十几二十块就能淘到。但是选购的时候要注意一些事项:

Vimium 中文版 - 像黑客一样使用浏览器

很久以前申请了 Chrome 开发者,一直也没做些什么扩展。最近给同学介绍扩展的时候推荐了 Vimium ——这是一个我非常喜欢的工具,可以让我以 Vim Editor 的方式来浏览网页。特别是看漫画的时候,我可以手不离键地操作甚至换页(双击“]”键)。 但是很多网友抱怨它的英文键盘说明看不懂,所以我决定借助开源的力量将它做一次简单的汉化,于是就有了:

Vimium 中文版

Vimium 是一个 Google Chrome 浏览器扩展程序。受到伟大的 Vim 编辑器的启示,它向浏览器提供了一系列用于快速浏览网页的快捷键。 本项目是基于 philc/vimium 的汉化版本. 项目地址: https://github.com/mutoo/vimium Chrome 扩展地址: https://chrome.google.com/webstore/detail/vimium-中文版/bedaaeieijphebekbfnkpllociojglip?hl=zh-CN

给页面链接添加平滑滚动效果

做完厦图答题神器,发现即使是这样一个简单的小页面,也可以添加上很赏心悦目的效果。正好我想要给页面的链接 (local-links) 加上平滑滚动效果,搜索了一下发现 jQuery 的插件正好提供了这样的功能——$.scrollTo(); $.scrollTo(); 是一个能平滑滚动到页面上特定位置或元素的 jQuery 插件,还提供了丰富的动画效果。

图书馆入馆考试自动答题(2012)

今年课业很闲,在新生群里认识了很多学弟学妹,其中不乏对技术很有兴趣的同学。于是打算找几个志同道合的一起做些小项目。 正好他们军训过后要参加图书馆入馆培训,培训之后需要参加一个在线测试,分数高于80分的才可以从图书馆借阅书籍。于是我把去年写的代码翻了出来,重新运行了一下,发现很多题目已经过期了,正确率已经不足40%。这是一个不错的信号——就拿这个小项目动手吧。 这次的目标是制作一个可以自动完成入馆考试的脚本,并提供一个网页供他人使用。

SAE 中级开发者证书

九月初SAE更变收费制度,对未通过开发者认证的免费用户实施按月收费,很大程度上影响了一些开发者的积极性。 正好暑假完成了天猫来找茬应用的开发,且在公测时已有近万人参与游戏。随后我参看了SAE开发者认证的申请条件,其中中级开发者:

  1. 至少有1个应用是原创应用
  2. 原创应用功能基本完整
  3. 应用须超过1000人次使用

一看已经符合申请资格了,果断上交了申请表。如果通过的话,可以享有优厚的福利:价值: 1200元/年

  1. 每月免费获得1万云豆
  2. 一次原创应用推广机会
  3. 获得SAE授权荣誉证书

今天收到EMS寄来的快件,里面是《新浪云计算开发者荣誉证书》。嘿嘿,这下可以放心使用SAE了。有空做些好玩的东西,下次争取有机会申请个高级开发者。 SAE 开发者证书(中级)

上图为 Weibo 分享时自动生成的图片,并非证书扫描件。