Home brewed mutt contact query script

In my last post, I mentioned the usage of customized query_command to look up contact email address. Some might wonder why I would want to do this despite there are many mature tools, such as abook and lbdb, available.

The reason is simple. I just do not like to install extra any extra packages for mutt contact management. Having a few scripts safely backed-up to github and providing the same functionality, is much easier to maintain.

github风格的日历显示commit

最近在知道了一个不错的东西,git-cal,可以针对任意git的repo产生github样式的 calendar view。我想把它的输出放到我的shell的motd里面去,不过有几个问题:

  • 它不能对于几个git repo的log进行汇总
  • 它不支持接受STDIN输入
  • 它是Perl写的,我基本上看不懂

在github上给作者留言让他加入接受STDIN json输入的feature request,没有回应,于是 ,自己写了一个。脚本的名字暂定stat_cal,用法目前有两种:

rack-jekyll,新的heroku架jekyll方案

升级了jekyll到0.10.0,突然发现新版本的jekyll会自动删除_site目录里面的旧文件,比如说.git目录!这不是坑爹吗?我以前的那种用hook自动从_site目录里面push去heroku的方法于是就不好使了。

搜索了下,已经有了专门针对jekyll和heroku的gem,名字就叫做rack-jekyll,改几个地方,再从jekyll目录push了下,好了:

在heroku上用jekyll做博客

不久前我刚刚提到在heroku如何用nesta,那个时候说我曾经试过jekyll,但是因为中文支持不好而放弃了。最新的折腾结果表明,其实毛病不在jekyll,而是在我clone回来的jekyll博客所用的markdown处理模块。我克隆回来的那个很流行的tpw版,用的是Rdiscount,问题就出在它身上,改下 _config.yml ,换成Maruku就好了。下面说说现在这个博客是怎么部署的。

jekyll是用来把一堆你设计好的框架和你用诸如Markdown、textile写的帖子一起编译成一个完整的静态html网站的程序。一般来说,一个jekyll项目的目录里面大约有这么些文件

批量下载网页上图像的脚本

叶子无聊乱扔任务,我 也无聊就随手写了个。自己也用不上,纯粹就是玩玩。没有exception handling,因为懒。 写完就随手放到备份的目录去了,或许将来能用上。

#!/usr/bin/env ruby
# coding: utf-8
#   下载某个网页上的所有图片
require 'open-uri'
require 'hpricot'

def parse_img_list(url)
    u = URI.parse(url)
    p = Hpricot.parse(open(url).read)
    img = (p/"img").collect {|v| u.merge(v.attributes['src']).to_s}.uniq.sort
end

def buster_img_list(*list)
    list.collect {|i| 
        Thread.new { open(i.split("/").last,'wb') {|f| f.puts open(i).read } } 
    }.each {|t| t.join}
end

if __FILE__==$0
    require 'optparse'
    options = {}
    parser = OptionParser.new { |opts|
        opts.banner = "Usage: #{$0} [-l] URL"
        options[:list_only] = false
        opts.on('-l','--list-only','显示图片列表') { options[:list_only] = true }
    }
    parser.parse!
    exit unless ARGV[0]
    l = parse_img_list ARGV[0]
    options[:list_only] ? l.each{|u| puts u } : (buster_img_list *l )
end

比较了一下上面两个bash和python的版本。bash的,最短,不过是regular expression hell。python的,最长,if else一堆。不短不长的,就我这个ruby的,不过用了hpricot那 个gem,怎么都透着股诡异的味道。