Nov 11
Oct 23
URL untrim API
这东西是以前做的,本来是用来捕捉重定向後的地址,例如 feedburner。而现在则是多了好些,例如 bit.ly。
用法很简单。例如 http://bit.ly/27bEEn ,那么打开 http://yim.appspot.com/s/bit.ly/27bEEn 就会得到 JSON 格式的输出。你可解码为 PHP 的 array 或者 Python 的 dictionary。
Sep 4
Virtual Desktop + VritualBox 构建虚拟开发环境
Virtual Desktop 的下载地址: http://virtual-desktop.sourceforge.net/安装 Virtual Desktop 后,使用 alt + 1/2/3/4 即可切换虚拟桌面,不过切换有些慢。在切换到第二个虚拟桌面时,开启 VirtualBox 中的任意一个系统,然后全屏显示。需要切换到虚拟桌面1时,按一下右 ctrl(VirtualBox 的设置),然后 alt + 1 切换到第一个桌面。切换有点麻烦,不过还算不错。
Aug 17
不过对于 Mac 用户来说,系统自带的 tar 并不支持 lzma 算法,需要通过 mac-port 安装 lzmautils,那么更具兼容性的 one-liner 如下:
当时用 mac-port 安装的是 lzma_alone,写起来就像是这个样子:
Twitter: http://www.twitter.com/leechael
用于传大文件的 one-liner
个人偏爱传大文件前用 lzma 进行压缩,碰巧这两天需要通过 ssh 传送大文件,写了句趁手的 one-liner,备忘在此。tar --lzma -cf <file_or_dir_name> | ssh <host> "cd <target_directory> && tar --lzma -xf -"
不过对于 Mac 用户来说,系统自带的 tar 并不支持 lzma 算法,需要通过 mac-port 安装 lzmautils,那么更具兼容性的 one-liner 如下:
tar cf <file_or_dir_name> | lzma -zc - | ssh <host> "cd <target_directory> && tar --lzma -xf -"
当时用 mac-port 安装的是 lzma_alone,写起来就像是这个样子:
tar cf <file_or_dir_name> | lzma_alone e -siso | ssh <host> "cd <target_directory> && tar --lzma -xf -"--
Twitter: http://www.twitter.com/leechael
Aug 8
Yang 老师使用 Memcachedb 更熟手;也有点像是 Windows User 和 Linux User (还包括 Mac User?)之间的纷争。会场上有人提及过一些应用场景,询问是否能应用 key-value storage;我这里说一些很虚的观点(并非自己的实践经验,只是很理论的): 1. MySQL,或者说传统的关系型数据库,其存在本身就是合理的。个人觉得,两者可以结合一起来用。
2. 如何用好 key-value storage 是一个规划性的问题。例如大块数据的 serialize/unserialze 的问题,这里就跟关系型数据库的规划一样。没有银弹;key-value storage 的出现不是为了解决所有问题,而是为了解决特定问题。再说 NOSQL,现在 FriendFeed 的解决方案是基于 MySQL 的(参考这里:http://bret.appspot.com/entry/how-friendfeed-uses-mysql),而这里也有一篇关于 NOSQL 的、颇有意思的观点:http://www.dbms2.com/2009/07/01/nosql-sql-alternative/。两个东西都有点旧了,就是这里说到了,顺道推荐一下。 记自己的一个小问题:说话表达实在差,当其时发问或者说话就有点结巴的…
广州技术沙龙归来
草草做总结好了。1. 个人不太喜欢赖勇浩老师的主题:《选好业务和技术,单枪匹马做游戏》。原因比较简单:技术沙龙我只想听技术的。2. Tim Yang 老师的主题比较合口味,可惜深入一点的讲述并没有展开。似乎参加沙龙的很多人都没有接触过 key-value 储存相关的东西。 话说当时我对 Tim 老师的测试中,Tokyo Cabinet/Tokyo Tyrant 的测试结果有些怀疑,回来后跟 fcicq 说了一下,结果被批了一顿…说到底,还是个人的偏好问题。就像 TimYang 老师使用 Memcachedb 更熟手;也有点像是 Windows User 和 Linux User (还包括 Mac User?)之间的纷争。会场上有人提及过一些应用场景,询问是否能应用 key-value storage;我这里说一些很虚的观点(并非自己的实践经验,只是很理论的): 1. MySQL,或者说传统的关系型数据库,其存在本身就是合理的。个人觉得,两者可以结合一起来用。
2. 如何用好 key-value storage 是一个规划性的问题。例如大块数据的 serialize/unserialze 的问题,这里就跟关系型数据库的规划一样。没有银弹;key-value storage 的出现不是为了解决所有问题,而是为了解决特定问题。再说 NOSQL,现在 FriendFeed 的解决方案是基于 MySQL 的(参考这里:http://bret.appspot.com/entry/how-friendfeed-uses-mysql),而这里也有一篇关于 NOSQL 的、颇有意思的观点:http://www.dbms2.com/2009/07/01/nosql-sql-alternative/。两个东西都有点旧了,就是这里说到了,顺道推荐一下。 记自己的一个小问题:说话表达实在差,当其时发问或者说话就有点结巴的…
Jul 13
但问题在于,我们可以通过 /topic/1?action=delete 这般的方式来改变参数。所以对 URL Injecttion 的清理是必须的,我采用的方法是重新写一遍 $_GET 的内容:
这样问题便解决了。
URL Injection 的问题
由于我不喜欢各个 framework 的 URL Rewrite 方案(单点入口)、利用 PHP 自行编写针对 $_SERVER['REQUEST_URI'] 的解析,所以目前我做的项目中,采用的是硬写 Rewrite Rule 的方案,例如这一条 Nginx 中的 rewrite rule:rewrite /topic/1$ /topic.php?action=view&model=topic&id=1 last;
但问题在于,我们可以通过 /topic/1?action=delete 这般的方式来改变参数。所以对 URL Injecttion 的清理是必须的,我采用的方法是重新写一遍 $_GET 的内容:
function rebuild_url_args ()
{
$rs = array();
foreach (explode('&', $_SERVER['QUERY_STRING']) as $str)
{
$str = explode('=', $str, 2);
if (!isset($rs[$str[0]]))
{
$rs[$str[0]] = isset($str[1]) ? $str[1] : '';
}
}
$_GET = $rs;
}
{
$rs = array();
foreach (explode('&', $_SERVER['QUERY_STRING']) as $str)
{
$str = explode('=', $str, 2);
if (!isset($rs[$str[0]]))
{
$rs[$str[0]] = isset($str[1]) ? $str[1] : '';
}
}
$_GET = $rs;
}
这样问题便解决了。
Jul 4
这里的 fwmkeys('prefix') 能取出以 prefix 为前缀的 key list,这比作为兼容方案的 Memcache 或 Memcached 强多了吧? 至于 serialize 和 unserialize,对于 Tokyo Tyrant 来说,这不是主要考虑的;Tokyo Tyrant 本身就具备搜索功能,而且可以外挂 Lua 扩展,除非只使用 PHP 读写 Tokyo Tyrant,并且不以其他语言(Python, Lua, etc.)来做特殊需要的读写,否则用 Memcache 和 Memcached 操作 Tokyo Tyrant 实在鸡肋。
为什么用 memcache/memcached 操作 TokyoTyrant 并不合适
在 Twitter 上发了一些牢骚,还不过瘾,干脆再写一篇东西,谈谈 Tokyo Tyrant。中文世界中能找到的内容相当的少,很大一部分都是转载张宴的那篇东西;英文世界中相对多一点。很多人都转载用 PECL::Memcache 或 PECL::Memcached 与 Tokyo Tyrant 通讯的方法,也有人打补丁在 Memcache 中自动进行 unserialize… 再贴连接就成连接堆积文了。 XD上面提到的不能自动 unserialize 只是其中一个问题,另一个问题则是 memcache 的自动清除过期条目功能是无效的。从这两点看来,无论 PECL::Memcache 还是 PECL::Memcached,都是一个壳,方便在 PHP 中把 Tokyo Tyrant 当作 DBM 使用而已。在日文世界中,目前有两个 PHP Library,一个是 OpenPear 的 Net_TokyoTyrant,一个是参考前者做的 TokyoTyrant_php,两者都因为开发中的关系而缺少文档,不过我认为这比使用 Memcache 或 Memcached 都要好;例如这个使用后者的例子:$tt = new TokyoTyrant_RDB();
$tt->open('localhost', 1978);
$tt->fwmkeys('prefix');
$tt->open('localhost', 1978);
$tt->fwmkeys('prefix');
这里的 fwmkeys('prefix') 能取出以 prefix 为前缀的 key list,这比作为兼容方案的 Memcache 或 Memcached 强多了吧? 至于 serialize 和 unserialize,对于 Tokyo Tyrant 来说,这不是主要考虑的;Tokyo Tyrant 本身就具备搜索功能,而且可以外挂 Lua 扩展,除非只使用 PHP 读写 Tokyo Tyrant,并且不以其他语言(Python, Lua, etc.)来做特殊需要的读写,否则用 Memcache 和 Memcached 操作 Tokyo Tyrant 实在鸡肋。
Jun 28
(这应该是目前唯一一个向第三方站点提交数据的方式了),然后利用 twitter 的 oauth 进行登录验证,留言。留言保存到
TweetBoard 的同时也发布到 twitter,带一个到你发布留言的那个页面。这样静态的页面也能产生交互了,和 facebook
connect,google connect 一样的功效 - 这两者的名字希望我没有记错。google 的那个体验不好,而
TweetBoard 很悦目。 你对某文的评论直接发到 twitter 上了,我认为这能引发你与 twitter
上的好友针对这文的讨论。由于浅尝即止,更多的细节还是未知的。豆瓣可以做这样的东西,因为他们有豆瓣广播,他们也支持
oauth,如果和九点结合起来,会是很不错的样子。据说饭否也准备实现
oauth,那么饭否或许会出现一个饭版(翻版…?…XD),不过感觉这不及对九点更为有用就是了。
小谈 TweetBoard
TweetBoard 是我昨天偶尔看到的又一个利用 twitter api 的东西。试用过后,感觉不错,大致野想到这是怎么做的。 首先页面内要引入一个 bootstrap 脚本。这个脚本在用户某个点击行为后运行,载入另一个脚本 ,建立一个 iframe(这应该是目前唯一一个向第三方站点提交数据的方式了),然后利用 twitter 的 oauth 进行登录验证,留言。留言保存到
TweetBoard 的同时也发布到 twitter,带一个到你发布留言的那个页面。这样静态的页面也能产生交互了,和 facebook
connect,google connect 一样的功效 - 这两者的名字希望我没有记错。google 的那个体验不好,而
TweetBoard 很悦目。 你对某文的评论直接发到 twitter 上了,我认为这能引发你与 twitter
上的好友针对这文的讨论。由于浅尝即止,更多的细节还是未知的。豆瓣可以做这样的东西,因为他们有豆瓣广播,他们也支持
oauth,如果和九点结合起来,会是很不错的样子。据说饭否也准备实现
oauth,那么饭否或许会出现一个饭版(翻版…?…XD),不过感觉这不及对九点更为有用就是了。
Jun 28
