木匣子

Web/Game/Programming/Life etc.

Programming in movies

前段时间在推特看到一个很有意思的视频,Programming in movies vs. programming in real life.

然后昨天 onionzzc 给我发过来一个网页:hackertyper。咋一看正是视频里面的那个装逼工具,哈哈。打开网页后在键盘上乱敲,一行行的代码就出来的。

这份代码可不是随便生成的,它来自 Linux 内核的 groups.c,很有 Geek 风味。

另外,如果你连按三次 ALT 键,可以获得 ACCESS GRANTED(获得权限)提示;连按三次 CAPS LOCK 键(大小写锁定键),可以获得 ACCESS DENY(拒绝访问)提示;按 ESC 键可以隐藏提示。

hackertyper.png

split or explode it?

刚才在社区里有人提问如果将帖子从<!--more-->分割开,获得摘要和剩余内容。

有仁兄回答说用 split() :

$post = split("<!--more-->", $context, 2);
$summary = $post[0];
$extended = $post[1];

但是注意到PHP手册里面有这样一句话:

Tip preg_split() 函数使用了 Perl 兼容正则表达式语法,通常是比 split() 更快的替代方案。如果不需要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费。

也就是说,如果分隔符是常量的话,使用 explode() 可以更加高效。

$post = explode("<!--more-->", $context, 2);
$summary = $post[0];
$extended = $post[1];

实际上 split() 在 PHP 5.3.0 已经被弃用:

Warning This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

有意思的是这个 warning 只出现在英文文档里,而中文文档里只是一个 Tip.

Light-Bot Game

Light-Bot 是一款十分有趣的解迷游戏。通过给小机器“编写”程序来移动它,点亮所有蓝色的方块就可以完成任务了。

小机器人能做的事不多,可以前进左转右转向前跳(越过障碍或跳下台阶),点亮(或关闭)灯以及调用独立函数。每一个指令都要消耗一个单位的存储空间。主函数有12个指令空间,另有两个独立函数,每个有8个指令空间。玩家使用这些指令编写巧妙的程序操作机器人去完成任务。

简单的地形通常用顺序执行很轻松就可以通过,但后面的关卡还涉及到了递归,非常有意思。

今天又去回顾了一下这个游戏,发现已经有 Light-Bot 2 的版本了,新的版本还加入了新的元素:传送门,条件方块,以及更加丰富的迷题。甚至提供关卡编辑器供玩家创造内容,可以将自己做的关卡发布到平台上给别人消遣。

此外,在 Light-Bot 的官方网站上,还提供了 iOS 版和 Android 版,可供下载。以后买个来启发小孩子学编程还真不错。

LaTex 公式解析器

最近一段时间看了不少数学方面的书,自从买了 Jot+ Pro 电容笔后,做笔记都直接用平板手写了。

想来今后会经常在博客中引用一些公式,但一直没有发现比较直截了当的方法。

之前用 Evernote 做笔记的时候都是用 LaTex 在线公式编辑器写好,然后再将图片复制到 Evernote 存档。

若是写博客要发个公式还要复制粘贴图片地址,在各个页面间切换,真是受不了,Orz。

了解一下 Markdown 的语法和 Typecho Plugins 的开发方式后,决定自己写一个转换器,来自动完成公式的转换。

于是有了这个插件: LaTex Plugin for Typecho

A\times B=\begin{vmatrix}
\hat{i} & \hat{j} & \hat{k}\\ 
A_0 & A_1 & A_2\\ 
B_0 & B_1 & B_2 
\end{vmatrix}

顺便科普一下:

LaTeX 是一种基于TEX的排版系统,由美国电脑学家莱斯利·兰伯特在20世纪80年代初期开发,利用这种格式,即使用户没有排版和程序设计的知识也可以充分发挥由TEX所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。
wikipedia

Typecho 0.9.0 issue

在SAE上搭建了Typecho,尝试搜索中文时发生301重定向,不断循环(如图所示),然而搜索英文没有问题。

typecho-issue-116.png

昨晚向官方提交了 Bug 后,今天很快就解决了。

当前用户可以手动修改源码,或者下载 Archive.php 覆盖 0.9.0 版的源文件。

/path/to/typecho/var/Widget/Archive.php

如果懒的话,就等待下个版本发布吧,LOL.

Crontabs Extension

Crontabs 是一个有趣的 Chrome 浏览器扩展。

Easy Tab Scheduling for Chrome

它的名字来自一个 Unix 命令:

crontab 命令常见于 Unix 和 类Unix 的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。
wikipedia

通常我们在服务器的 crontab 文件里写上时间表,指定什么时候该做什么事,如运行指定的脚本等等。

正如它的名字,Crontabs 用来指定浏览器在什么时间打开、关闭或刷新浏览器标签。

Crontabs

Markdown 101

最近在社区里发现了这个开源博客程序 Typecho. 它的界面十分简洁,感觉非常亲切。以至于很久没写博写的我也想重操旧业 :b

Typecho 最吸引我的有两点,一是上传文件非常便利,充分利用 HTML5 的特性,支持拖拽上传。(要是能粘贴上传图片就更赞了)。
即使是在 SAE 平台上,很容易通过插件就可以无缝接入 Storage.

另一点是 Typecho 支持使用 Markdown 语法撰写文章。

在圆内平均分布的点

要想在一个圆内随机取一个点不难,通常可以分成两个步聚:

  1. 随机选一个角度(0~360);
  2. 随机选一个小于半径的长度。

代码(processing):

float rad=random(TWO_PI);
float dist=random(1)*radius;
point(cos(rad)\*dist, sin(rad)\*dist);

这样可以确保点落在以原点为中心,半径为radius的圆内。 但是如果不断地重复这样取点,最终会发现在圆心的点更容易被取到,也就是说圆内的点被取到的概率不平均!最终会出现如图最左边这样的分布:

circle