‘Development’ 分类的存档

用几个晚上的时间写了一个解数独的程序。用了Tkinter做的GUI。

2008年11月17日23:18 | 没有评论
分类: Development, Fun

老婆出去玩了,我一个人在家里没事干,花了一天用Ruby写了一个开心网的Shell。目前支持“争车位”的功能。

2008年9月21日02:19 | 1 条评论
分类: Ruby, Web
标签: ,

我认识的很多人都是开心网的用户。而这些人中,又几乎所有的人都在玩“争车位”的组建游戏。我也玩了一下,一开始觉得挺能满足人的虚荣心的,毕竟可以通过鼠标就可以买到自己梦想的车了。但是不到一星期,我就有了写一个程序,自动去玩的冲动。 最开始写了一个简单的贴条程序,也就是根据一些策略,给自己车位上的车贴条。(这就是为什么有的人会发现我早上6点多给他们的车贴条的原因,显然我是不可能6点钟起床的)后来,老婆说有一个人老贴他的条,想小小的报复他一下。我就又写了一个小程序,定期的据报那个人的车(如果在自己的车位上就直接贴条了)。这个程序没有怎么使用,老婆就说已经和平解决矛盾了。 共享一下我对于“争车位”游戏的技术分析: 首先,因为开心网登录没有使用capcha,就是经常看到的验证码机制,所以给写程序登录开心网亮了绿灯。 第二,这个游戏的算法简直太简单了,因该不能称为游戏吧,因为它的交互性很少,都是一个人自己玩(这个与从Facebook上抄袭过来的朋友买卖是鲜明的对比)。更像是一个初学级别的算法题。 第三,这个游戏前台即使使用的是Flash也没有对HTTP请求的内容进行加密。这样我就可以轻易的截取这个游戏发送的所有HTTP请求进行分析了。发现,制造类似的请求非常之简单。 介绍四个“争车位”游戏的内部机制: 在“争车位”游戏的首页,源代码中找到var v_userdata=这一行JavaScript,后面就是一个JSON格式的数据信息,包含了自己车位的信息。(比如,车位上停了什么车,谁的车,挣了多少钱,车位的ID,等等,另外还有自己车的信息)找到var g_verify=这一行,后面就是一个verify string,只要有了这个字符串,开心网就会认为对面是一个用户。 /parking/post.php是贴条的网址。只要把自己的某个车位ID以及那个验证字符串和一个置为空的下划线变量POST到这个网址。这个车位上的车就会被贴条。(当然必须是你自己的车位) /parking/usercar.php是获得好友的“争车位”数据的的网址。只要把好友的用户ID(是一串数字,并不是用户名,在任何开心网的URL里面看到uid=xxxxxxx,这个就是用户ID了)以及验证信息作为参数GET这个网址,就会得到这个好友的车位信息和所有的汽车的信息。包括,几辆车,停在哪里,等等。这个没有好友限制,任何人的信息都可以得到。(只要你能知道对方的用户ID) /parking/call.php是举报的网址。只要把指定的车位ID以及验证信息POST给这个网址,就把该车位上的车举报了。这个是有好友限制的,也就是必须是好友才能举报。 只要搞定了这4条,写程序去“争车位”就应该没有什么问题了。 最后附上一个简单的贴条程序:(用Ruby写的) http://www.zhangdi.name/UserFiles/File/kx_parking.rb

2008年9月17日17:40 | 2 条评论
分类: Ruby, Web
标签: , ,

在Ubuntu或者Debian中,使用gem安装某些程序的时候,会出现下列错误: extconf.rb:1:in `require’: no such file to load — mkmf (LoadError) 解决方法很简单: sudo apt-get install ruby1.8-dev

2008年9月16日00:47 | 没有评论
分类: Ruby
标签: ,

一直在非常缓慢的学习RubyOnRails。工欲善其事,必先利其器。程序员的利器之一就是编辑器。所有接触过Rails的人,都会对一个叫做TextMate的编辑器记忆深刻。但是我不是Mac用户,而TextMate又坚持不出Linux和Windows版本。想花钱用都没有机会。(当然,除非先花钱买个MacBook)这就坚定了我继续使用我自己的利器--Vim的决心。 在Ubuntu里面配置Vim非常简单。apt-get吧。然后gem install vim-ruby吧。这样你的Vim就有了最新的对于Ruby的支持。这还不够,因为我要开发Rails应用。要让Vim懂Rails。有个非常帅的Vim插件,rails.vim。它可以让人不离开Vim把Rails的一切都搞定。比如,script/generate model xxx,只需要在Vim里面:Rgenerate model xxx。还可以帮助非常快速的在Rails项目中切换文件。功能很强大,具体看这里吧。 不过,我使用的Rails是2.1+版本,这个rails.vim有一点问题。在:Rgenerate migration xxx的时候,总是打开一个空文件,而不是自动生成的migration文件。经过研究,发现原来是Rails2.1+后,每个migration文件的前缀由原来的序号变成了一个UTC的时间字符串。而rails.vim的策略是先-p执行一下命令,然后分析生成的文件名,再真正执行命令,最后打开文件。这个逻辑对于其他的命令都OK,只有migration不行。就是因为它的命名规则中加入了UTC时间字符串。导致了第一次-p执行和第二次真正执行之间文件名不同(因为时间还是稍微有差别的,比如1秒)。 知道了问题,就可以轻松把它修正。这就是源代码的力量。 在rails.vim中搜索这句话: 1 edit `=RailsRoot().’/’.file` 替换为: 1 2 3 4 5 6 7 if target == "migration" let suffix = strpart(file, stridx(file, "_")) let filename = system(’ls ‘.RailsRoot().’/db/migrate/*’.suffix) edit `=filename` else edit `=RailsRoot().’/’.file` endif

2008年8月26日18:53 | 没有评论
分类: Ruby
标签: , , ,

解包: 1 2 tar xvjf file_name.tar.bz2 tar xvzf file_name.tar.gz 打包: 1 2 tar cjvf file_name.tbz file_name tar czvf file_name.tgz file_name 一目了然了:x是eXtract的意思,c是Create的意思;v是查看进度;f是指定文件名;j是bzip2压缩方式,z是GNUZip压缩方式。

2008年8月7日00:08 | 2 条评论
分类: Linux
标签: , ,

网上有很多类似的文章。我这里总结一下最简单的方法。 1. 下载包含OpenSSL的Apache Http Server。目前的最新版是apache_2.2.8-win32-x86-openssl-0.9.8g.msi 2. 安装Apache。最好装在磁盘的根目录下,例如:C:\Apache2.2\。安装时必须制定一个域名,如果只是本机测试,可以在hosts文件中随便加入一个域名指向本机IP就可以了。 3. 打开文件:%安装目录%\conf\httpd.conf,将下面两行的注释去掉: LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf 4. 在Console中切换到目录:%安装目录%\bin。运行下面三行命令:(在执行第一个命令时,会被问很多问题,最重要的是Common Name项的值要和你的网站域名相同。例如test.com,www.test.com之类的。) openssl req -new -out server.csr -config ..\conf\openssl.cnf openssl rsa -in privkey.pem -out server.key openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 5. 完成之后,将目录中的server.key和server.crt拷贝到%安装目录%\conf目录中。 6. 重启Apache Http Server服务。 7. 访问https://test.com。(假设安装时使用此域名。) 如果Apache服务启动失败,尝试运行%安装目录%\bin\httpd.exe,可以看到错误信息,对于修正错误会很有帮助。

2008年2月19日02:00 | 4 条评论
分类: Development, Web