看到Shoegazer写了篇关于他使用的Firefox3.0的扩展。参考了他的选择,我也作出了自己的选择。
应用程序: Firefox 3.0 (2008061004)
操作系统: MacOS Leopard 10.5.3
- Extension List Dumper 1.14.1 转储已安装扩展的列表。
- Fast Dial 1.90 通过缩略图快速访问最喜欢的网站页面
- gladder 2.0.2.2 Get over Great Firewall with Great Ladder!
- Greasemonkey 0.8.20080609.0 面向 Firefox 的用户脚本管理器
- iGetter Extension 2.7.5 Adds iGetter contextual menu commands.
- MediaWrap 0.1.7.3 纠正不规范的网页内嵌媒体,使 Firefox 能准确播放。
- PicLens 1.7.0.3458 Discover More
- Stop-or-Reload Button 0.2.2 Turns the stop and reload buttons into a single one. When you can stop, you have a Stop button, otherwise you have a Reload button. (Like Safari)
- Tab History 1.0.5 Links opened in a new tab retain their history.
- Tab Mix Lite CE 3.0 轻巧便捷的标签式浏览辅助扩展。
- Taboo 0.2.1 The cure for tabitis
- Text Link 2.0.2008052801 允许通过双击载入网页中的 URI 文本。
Tags: Firefox
今天解决了[Project Euler](http://projecteuler.net)的[第18个问题](http://projecteuler.net/index.php?section=problems&id=18),记录一下解题思路。
题目如下
——–
从三角型的顶端逐行往下移动,然后路径上数字的和最大是23.
1
2
3
4
| 3
7 5
2 4 6
8 5 9 3 |
以上这个例子就是,3+7+4+9=23.
找到以下三角形从顶到底路径的最大和:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| 75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 |
*注意:这里只有16384种路径组合,所以可以使用暴力方式得到答案。但是Problem 67,同样的题目,三角形有一百行,不能用暴力方式求解。所以,找到一个聪明的方法才是正道。*
More
Tags: 算法
今天的算法挑战题目如下:
输入字符串,比如: “fb,bc,ac,eb,da,ga”
每组2个字母,用逗号分割。
第一个字母是节点,第2个字母是它的父结点。
写个函数处理输入字符串,并输出整个树的结构。
输出结果:
1
2
3
4
5
6
7
| c
|-a
| |-g
| |- d
|-b
|- e
|- f |
More
Tags: 算法
开始使用 [WWW::Mechanize](http://mechanize.rubyforge.org/mechanize/classes/WWW/Mechanize.html)
—————————
本教程的目的是帮助你开始使用Mechanize。读完这篇教程之后,你将可以抓取页面,点击链接,填写和提交form,抽取数据和其他一些可能有用的事情。此教程仅仅只是涉及到了非常粗浅的功能,但因该已经足够帮助你起步了。
让我们抓取一个页面
—————–
你要做得第一件事情就是在代码里引用mechanize,然后初始化一个新的mechanize实例:
1
2
3
4
| require 'rubygems'
require 'mechanize'
agent = WWW::Mechanize.new |
现在我们将使用刚刚创建的agent来抓取一个页面。就拿Google开刀吧:
1
| page = agent.get('http://google.com/') |
发生了什么事情?我们让mechanize去抓取Google的主页。Mechanize会自动存贮相关的cookie,甚至会跟踪Google发过来的自动跳转。Agent会帮我们抓回来一个页面,我们可以用来抽取数据,找到并且点击链接或者填写一个form.
More
Tags: Mechanize, Ruby
测试了一段时间之后用mechanize+hpricot要比用正则方便很多,所以完善了一下上次写得脚本。
功能算是比较完善了,能够自动去拿目标用户的所有消息,不用手工输入留言页数了。
大家感兴趣的话可以点击这里下载。
用法:
1. 解压得到脚本“BackupFanfou.rb”.
2. 用任意文本编辑器打开上述脚本,在末尾加上下面两行:
1
2
| b = BackupFanfou.new("你的饭否登录帐号", "密码")
b.backup("需要备份的用户名", "备份保存路径") |
例如:
1
2
| b = BackupFanfou.new("allengnr@gmail.com", "XXXXX")
b.backup("allendang", "~/Documents/Test.txt") |
Tags: Hpricot, Mechanize, Ruby
上次用的方法比较原始,这次用点新鲜的方式。
mechanize是一个可以模拟浏览器动作的库,功能非常强悍,以前用HTTP库比较头疼的登录和Cookie管理等等都可以轻松搞定了。
Hpricot是一个轻量级的HTML解析库。
这两个东西加在一起基本上对于所有的HTTP相关任务都可以轻松搞定了。
现在来看看思路:
用mechanize登录饭否,模拟点击“我的主页”链接。
用Hpricot拿到包含消息的div,再拿到div下面包含具体消息的span,搞定。
代码如下:
More
Tags: Hpricot, Mechanize, Ruby
学习了一天的Ruby,其语法实在很有趣,忍不住写了几行代码。
早就有了备份我的饭否消息的想法,因为我把饭否真正当作了一个微型Blog,希望若干年后能看着现在发的零碎话语而能记起更多的东西。但是饭否并不提供备份的功能,如果它有朝一日停止运营,那么我发的东西都会立刻蒸发。
所以这次就以备份饭否消息为目标写个Ruby小程序吧。
最先的想法还是我最熟悉的套路,抓取页面HTML,然后使用正则抽取需要的数据。
More
Tags: Ruby, 正则表达式
2008-2-20
这个版本主要做了一些bug的修复,但是我始终没有发现为什么在Leopard下面会退出。因为在我的Leopard下面没有问题,希望发现这个现象的朋友帮忙把Log贴出来让我看看。
0.91 Bug修复:
1. 确认导出到iPod格式的编码为UTF-8。
2. 修改文件编码判断部分。
发布地址
我一直想要实现平滑的滚动,可是对于Cocoa的了解程度自认还在一个初级的阶段,特别是UI库的认识太差了。希望一段时间之后能有多一点的时间着重学习这个部分。
另外一个部分是文本编码方面,以前一直都没怎么接触过,这些天也是第一次看到如何自动判断文本编码和编码转换的文章,这方面也需要加紧学习进度。 iPhone SDK将在本月发布,等到手之后打算做一个iPhone可用的版本,毕竟UMD格式相较于纯文本来说更加适合移动设备使用。
届时会开始做Mac和iPhone两个版本之间的联动,最少要做到阅读书签同步和书籍管理。最好能到豆瓣和起点自动抓取图书信息。
Tags: BookReader, Cocoa
2008-1-12
0.9 新增功能:
1. 支持翻页。
2. 导出到iPod格式(自动分割文件和制作索引)。由于我没有iPod不能测试,哪位朋友帮忙看下有没有什么问题。
0.9 Bug修复:
1. 自动滚动之后再用鼠标滚轮会出现跳回文件开头的现象。
More
Tags: BookReader, Cocoa
YY它已经很久了,昨天终于入手!在折腾了一整天之后破解完成,完美了。
上图:

再来一张

目前iPhone 1.1.2还不是太完善,短信还不能群发,也没有复制粘贴。
Tags: iPhone