编程这玩意吧,也是一种童子功

当然比不上音乐,但我一直觉得十岁左右启蒙最好,而要是到了二十出头还没上手,那这辈子也没太大希望了。

最近代码整理大计划,忽然就想起自己初一初二时候写的“坦克游戏”。我自己这早已灰飞烟灭了,多亏dr同学还存了底。

所以在Tank@Github,大家可以瞻仰一下古老的Pascal代码(Github都识别不出来的语言……),还有比如初中编程水平的变量名都是jf、mx(初中词汇量),一个文件1000行,一个函数300行之类,= =|||。不过加License的时候,赫然发现那个MOUSE.PAS是白菜同学写的(我差点编成TPU直接放进来)…… 所以白菜同学这库函数范儿的代码才是项目亮点!

最后其实如果你装个Dosbox这玩意还真能跑起来啦,所以截图奉上:

为神马我年轻的时候能写出这马牛逼的程序,现在却还是个傻波伊

开源第二波。

这是我06年4-5月份在ibm实习时帮老板干的小私活。这网站关了有一百年了,我当时的nb老板据说已经转去做文化产业…… 所以我估计现在开源出来没人追究,何况当时编小私活,一没协议,二来还是让ibm开的工资,囧……

这是个在地图上进行标注、分享、发现的网站,有点foursquare的意思。可惜06年初,iphone还没个鬼影,google map上非卫星图的北京还只有三条大路,这玩意后来不了了之也不奇怪……

现在读读这程序,我真他马诧异这程序是不是自己写的……比如06年我就写了前后端之间纯api连接的应用;后端我还自己实现了一个微型unit test框架;前端是一个非常良好的可扩展结构,以支持不同类型的地图标注——我当时还真是一个模式和TDD的控。最重要的是这程序五一节左右搞完,而我大概是3月份才开始学的php和js。

忽然想起,《此间的少年》中间一个段落,老校长独孤求败在灯下抚摸着自己年轻时候的学术著作黯然神伤,因为他知道自己再也写不出来了…… 我操……

好了,源代码还是在github上。源于我从来对php都没有爱,所以后端的unit test我今天整理的时候简单试了一下但没能重新搭起来——如果有人php熟能跑起来就真是太给力了。前端我当时做了一个ajax的mock(indexAjaxMock.php),所以即使没有后端这个程序也可以玩——下面的截图也是这么来的:

没事开开源也是正经事

在我一门心思想做个程序员的时候——那大约是05到08年间的事了——我写了许多代码。只是其中不少些写完之后便没有下文了。花心思写的,就这样没闲在硬盘里,删之可惜。但留着,若不勤于备份还要时时提防硬盘坏掉,很是着恼。

干脆开源吧,那是很直接打算的。但若真的开源,简单的setup、usage文档总是要有。懒人如我,就一直懒到许多代码都年久失修,才终于打算一鼓作气。

这第一波,先把07年底和马博合写的“ppt管理”和“paper管理”系统open出来。

写这两个东西的动机,是因为ppt和paper是读博两大功课,但平日ad-hoc地管理ppt和paper很不方便。所以写了两个特定领域的多用户内容管理系统。曾想把这个贡献给实验室信息化建设,当然后来老师决定用plone(神一样的plone,每次上传ppt都需要一个重新学习过程)……

代码就放到俺的Github上(PPT管理Paper管理)。基于rails 1.2.5(多遥远的版本号),部署使用参见README。值得一提的是,paper管理中collection部分的数据库设计是不遵循范式的典型错误,可供吸取教训。

一些截图(更多猛击这里这里)——话说插入图片时,我想起这css可能是抄了些饭否:

PPT管理——PPT详情页面

Paper管理——Paper详情页面

SproutCore – Client-Side RoR

引:昨天吐了一大篇出来,今天没什么力气,捡要点写。

首先我是Ruby on Rails fan。其次RoR出来之后,很多人都在抄它这事实就不说了。因此考虑如今的web应用和客户端应用已经是同构的了——web应用的架构其实是客户端的MVC的一个简化,所以咱为啥不搞个客户端应用的RoR出来?不偶然的是,现在这世道只要你想得到的就有人做,比如人家JavascriptMVC都tm出到2.0了。这玩意我原来试过,还行。

不过今天又发现之前在feeds被略过(信息过载要命呀)的另一个玩意,SproutCore。1.0RC,亮点是Apple开源出来的,Demo上看性能不错。一句话来说就是一个客户端应用的RoR,framework+building tools,架构就是纯正MVC(包含observer)。

SproutCore这类东西和YUI、Extjs这类的区别,基本上就是PHP和RoR的区别。用SproutCore能做的是YUI完全能做。但我的观点是YUI、PHP这个层次的框架(PHP+一堆包也算个框架了)最大的问题在于不能帮助开发人员构建应用的整体架构。虽然它们的能力完全没有问题,但如果你是一新手,那就很容易在一开始直接晕菜,而老手则经常要在一开始做很多Copy&Paste的dirty work。相反RoR、SproutCore都提供一个强制但合理的完整应用架构。你用这框架就直接得到一个骨架,在上面直接添加具体的应用内容就行了。这类框架同时提供一系列building tool来帮助你跟随这个架构来构建应用,所以构建应用本身也就成了应用架构学习的过程——特别是针对新手。(RoR在开发时的优点其实真不用我废话了。)

当然客户端用到MVC这么重载的架构,一定得是很rich很rich的客户端了。不过我是觉得在未来几年里,客户端一定会变得现在想不到的重载,这个观点不算激进。如果你坚信页面用HTML+jQuery就完事了,那咱就不相与谋了,但如果你有一天你考虑要用到YUI、Extjs这级别的东西,不妨关注下SproutCore的发展。不要小看漂亮架构的力量,现在YUI这玩意ms基本的东西已经做绝了,新加的多是些稀奇古怪的功能。但是看看SproutCore的DataSource实现,这是我现在看到最漂亮的客户端Data Access实现了。

你看我的技术讨论好像有点又大又空,一点实例都没有。告诉你,其实我现在特别讨厌技术,写这些字,耽误我多少看书的时间!所以有兴趣你就自己看SproutCore这项目的wiki去!最后再顺便愤青地表示一下这项目wiki被墙的愤怒,mlgbd!睡觉去,完。

修了一下Mp3tag的豆瓣数据源脚本

2015-05-02 近期可能会整理一下 github pages,如果 2011-01-24 的链接 不能下载,试一下:http://sakinijino.github.com/tools/douban4mp3tag/Douban.com.src

——————————————————————-

2011-01-24 更新:把脚本挪到github上了,下载链接:http://sakinijino.github.com/douban4mp3tag/Douban.com.src

——————————————————————-

这东西是啥,以及yoyicue开始的版本见这篇blog

这个版本失效有一段时间。今天终于不能忍了,就修了一下。失效的原因是豆瓣图片cdn的域名变了,改的时候就顺便把对域名的依赖去掉了。

猛击这里下载,用法之类的见前面提到的那篇blog

ps:mp3tag的脚本也不是一般的难用。。。连个try都没有,orz。。。

当天晚上的更新:基本把解析和抓取重写了(脚本太弱,文档又不清楚,所以代码写得超迂回,囧),稳定性和准确度都比原来强了很多,建议之前没看到这个更新的都重新下载一下

另外和原作者联系了一下,在原作者的google code上也放了一份——beta 1.5版本那个。

OAuth协议更新到1.0a

上个月24号发布了针对上次那个漏洞修补的更新版协议1.0a。协议本身已经是最终的版本了,但暂时还没有合并到OAuth的官网中,按邮件列表中的说法是因为还有一些license的工作要做。下面简单说一下这次的修补。

首先回顾一下针对上次漏洞的攻击:

  1. 攻击者到一个合法的Consumer站点获得一个request token
  2. 利用trap site让受害者授权这个request token
  3. 之后针对callback的不同,有几种不同的处理方法:
    1. 如果Provider站点对第二步(请求用户授权)中的callback没有限制,那么攻击者可以利用trap site将callback设为自己的站点,然后通过这个callback判断受害者何时完成授权。等到受害者授权后,攻击者访问合法的callback来获得受害者的access token
    2. 其他的情况下(使用预定义的静态callback、没有callback由用户手工完成授权),那么攻击者和受害者之间进行竞争,当攻击者恰好在受害者授权和访问callback的间隙访问合法的callback,那么攻击者就获得了受害者的access token

接下里来看这次协议对于漏洞的修补:

  1. 1.0协议中callback在oauth认证的第二步(请求用户授权)中通过url参数设置并明文传输。新的1.0a协议中,callback作为oauth第一步(获取request token)的参数(oauth_callback),并参与到签名过程。此外当没有callback时,callback值必须设为oob(out-of-bound)。
  2. Provider在返回request token的同时,返回一个oauth_callback_confirmed参数,其值为true,表示Provider支持1.0a协议。
  3. 用户完成授权后,Provider在redirect到callback时,提供一个新的oauth_verifier参数(无法被猜测的随机字串),该参数会被用在request token换取access token的过程中。如果callback值为oob,那么Provider需要提供页面显示oauth_verifier参数值。而Consumer可以引导用户将这个参数值填入适当位置,来完成授权。

问题的解决:

  1. 通过预先指定callback,并将其作为request token的一部分,可以避免3.1中,攻击者假造callback的情况
  2. 通过oauth_verifier参数,可以避免3.2中,攻击者和受害者竞争访问callback页面的问题。(在使用预定义静态callback或者无callback的情况下,callback无法对攻击者保密。但因为攻击者无法获知oauth_verifier参数值,因此无法换取access token)

协议本身很长,主要修改集中在第6节。此外原先的附录B现在转正成为第11节并增加了一些新的安全建议。

这里还有一些概略的介绍本次修补的文档:An Idiot’s Guide to OAuth 1.0aMoving from OAuth 1.0 to OAuth 1.0a

恩,大抵如此。学术完毕,好累。。。囧。。。

Opera Unite: 所有电脑都是平等的

只不过一些电脑比另一些更加平等。。。

Opera Unite的视频告诉我们:现在服务器统治了Internet,但是每台电脑都应该是网络上的一等公民,所有电脑都是平等的。

不过如果仔细看一下,Opera Unite的文案就会发现,其实有一些电脑比另一些电脑更加平等……

引文:“The interaction is all done via a central Opera Unite server — Opera Unite uses a proxy between the server and its clients (found at operaunite.com) to avoid the need for any special firewall configuration.”

如果我没理解错的话,拿这东西做File Sharing大概不会比QQ传文件或者开心网盘好用吧。。。

也许轻量级的小圈子social应用有用武之地。不过单点瓶颈,所以对墙的免疫力几乎是零,即使所有用户在一个局域网内。

chrome下跑palm webOS的应用

之前一些是在firefox下试的时候的改动,后来在webkit下发现完全不必要,囧。。。全删了,出奇的简单,就是一堆解压缩,Orz。。。

————————————————-

webkit大一统,firefox退散~ 很简单:

1. 到 http://palm.cdnetworks.net/rom/pre_p100eww/webosdoctorp100ewwsprint.jar 下个pre rom
2. 第一次解压缩
3. 找resources/webOS.tar,第二次解压缩
4. 找nova-cust-image-castle.rootfs.tar.gz,第三以及第四次解压缩。。。
5. 把usr目录扔到某个http server根目录下(实际应该只需要usr/palm的内容),但是http server的根目录要是usr
6. usr\palm\frameworks\mojo\builtins\palmInitFramework175_7.js的第33518行(囧。。),改成window[‘palmInitFramework175_7’] = $palmInitFramework175_7;
7. 找一个应用,比如usr\palm\applications\com.palm.app.calculator,在index.html中mojo.js的script标签下加上 <script src=”/usr/palm/frameworks/mojo/builtins/palmInitFramework175_7.js” type=”text/javascript”  />;
8. 找个webkit的浏览器(chrome 2或者safari 4,我就试了高版本,不知道低版本行不行),打开index就ok了~

ps. ms很多应用会显示“This is the hidden window of a faceless application”以及一个Lauch按钮。。。没具体看,我现在就知道calculator可以用~ 啊呜~

PhoneGap,人人都爱js

phonegap.comWeb 2.0 expo大众选择奖(可惜之前reader里被噪音盖过去的东西)。支持用html+js编跨手机平台(iPhone、Android和黑莓)应用,附加的一个项目是xuijs.com(ms被盾了),可以理解为针对手机浏览器的jQuery,因为去掉了很多针对桌面浏览器兼容性的代码,所以体积小了很多。

乍一看确实不错。不过最近又在新闻里冒出来是因为App Store把基于这个开发的应用都给拒了,囧。

附加阅读:

男1:你看你在我领导下学了多么nb的一门语言呀
男2:你是这么领导的。对面是知识的海岸,我们站在这一岸,你把我踹下去,说游,然后我拼了自己的命学会了。。。