〜2010年1月中旬〜
DNS serversにカンマ区切りでサーバを並べられるので、127.0.0.1を先頭に置く。
/etc/resolv.confを直接いじらない。
この設定は固定IPのときにしか使えない。DHCPだとDNS serverも配っちゃうので。
そんときは安易ではあるが、NetworkManagerをアンインストールするのが簡単。
まあ、なくても困るようなもんでもないしねえ。
3つ以上チルダで前後を囲めばcode blockとして扱われる。
markdownのインデントは結構面倒だったが、これはいいね。
lib/kd.rb(名前は適当)に
Class.new(Nanoc3::Filter) do identifier :kramdown def run(content, params={}) require 'kramdown' Kramdown::Document.new(content).to_html end end
てな感じで書いて、Rulesに
compile '/' do filter :erb filter :kramdown layout 'default' end
と書けば使える。
外付けのHDDをext3からext4へ移行させた。
単にext4でmountするだけで勝手にext4になるらしい。
と言ってもつなぐと/media/*にext3で勝手にmountされちゃうので、
適当に手動でmountしていじってみることにした。
これでほんとにext4になるのか?
これはなかなか素晴しい。
% PS4=' ${BASH_SOURCE}:${LINENO}(${FUNCNAME[0]}) ' sh -x /etc/profile |&head -n5 /etc/profile:22() '[' -z 500 -a -x /usr/bin/id ']' /etc/profile:28() '[' 500 = 0 ']' /etc/profile:33() pathmunge /usr/local/sbin after /etc/profile:12(pathmunge) echo /usr/bin:/usr/local/bin:/bin:/home/eban/bin /etc/profile:12(pathmunge) /bin/egrep -q '(^|:)/usr/local/sbin($|:)'
なんかいろいろmakeするたびにヘッダがないだのライブラリがないだの言われる。
LiveCDが元だしな。
もう面倒臭いのでgroupinstallでDevelopment Librariesをインストール。
これで少しはましになるか。
CUIなRSSリーダ。なかなかいいんだけど、日本語泣き別れ問題があってちょっと残念。
あとキーバインドもあまり好みじゃない。
今日はなぜかFLDRが更新されなかったので、rsstailを使ってみた。
だいたいいいんだけど、たまにeuc-jpなfeedがあったりするのでnkfを通したほうが無難。
これくらいならRubyでも書けるか。
かなりいいかげんではあるがこんな感じであとは新エントリだけ表示すればいいんだな。
require 'rss' require 'cgi' class String def norm CGI::unescapeHTML(self). gsub(" ", " ").gsub(/<.+?>/m,"").gsub(/\n{2,}/, "\n\n").strip end end ARGV.each do |url| feed = RSS::Parser.parse(url, false) feed.output_encoding = "utf-8" feed = feed.to_rss("1.0") do |maker| maker.channel.about ||= maker.channel.link maker.channel.description ||= "No description" maker.items.each do |item| item.title ||= "No title" item.link ||= "UNKNOWN" end end feed.items.each do |item| puts "title: " + item.title.norm desc = (item.content_encoded || item.description).to_s.norm puts "desc: " + desc unless desc.empty? puts "date: " + (item.date || item.dc_date).to_s puts "link: " + item.link puts end end % ruby feeds.rb http://feed.natalie.mu/rss/natalie/news|tail -n5 title: L'Arc-en-Cielテキストブック第2弾で作品への思いを語る desc: L'Arc-en-Cielのオフィシャルテキストブック「WORDS II」が、3月31日に刊行される。 date: 2010-01-17T13:24:00+09:00 link: http://natalie.mu/news/show/id/26433
前回の更新から変更のあったものだけを取り出したいわけなんだけど、
item.dateやitem.dc_dateが両方ともnilになるfeedがあったりでちょっと困った。
labaqなんだけど。これだと比較できない。
しょうがないので最初のエントリのタイトルを覚えておいて、
これが前回と違ったら更新されているとみなすことにした。
あとIf-Modified-Sinceヘッダもつけてみた。
~/.feedmon/urlsにフィードのurlを1行に1個ずつ書く。
require 'rss' require 'cgi' require 'digest' require 'fileutils' class String def norm CGI::unescapeHTML(self). gsub(" ", " ").gsub(/<.+?>/m,"").gsub(/\n{2,}/, "\n\n").strip end end feedmondir = File.expand_path("~/.feedmon") lastdir = File.join(feedmondir, "last") FileUtils.mkdir_p lastdir loop do urls = File.readlines(File.join(feedmondir, "urls")).map(&:chomp) rescue [] begin urls.each do |url| urlfile = File.join(lastdir, Digest::MD5.hexdigest(url)) last_time, last_title = File.readlines(urlfile).map(&:chomp) rescue [] puts Time.now.strftime("%Y-%m-%d %X") + " " + url begin string = open(url, "If-Modified-Since" => last_time){|f|f.read} rescue => e puts " " + e next end last_time = Time.parse(last_time) feed = RSS::Parser.parse(string, false) feed.output_encoding = "utf-8" feed = feed.to_rss("1.0") do |maker| maker.channel.about ||= maker.channel.link maker.channel.description ||= "No description" maker.items.each do |item| item.title ||= "No title" item.link ||= "UNKNOWN" end end title0 = feed.items[0].title feed.items.each do |item| date = item.date || item.dc_date if last_time and date next if last_time >= date else next if title0 == last_title end desc = (item.content_encoded || item.description).to_s.norm puts "title: " + item.title.norm puts "desc: " + desc unless desc.empty? puts "date: " + date.to_s if date puts "link: " + item.link puts end open(urlfile, "w") do |f| f.puts Time.now.utc.rfc822.sub(/[-+]?0000/,"GMT") f.puts title0 end end rescue puts $@ ensure puts Time.now.to_s + ", updated\n\n" $stdout.flush sleep 15*60 end end
utc.rfc822はなんで-0000になるんだろう?
.*?は気づかなかったなあ。それにしても
nnさんのawkの解
にはまいった。!gsubで必ず0になるからprint $0ってことなんだよなあ。
すばらしい。
昨日の説明は間違ってた。
3,6,9を含まないときは当然gsubは0を返すので、結局!gsubは0か1を返すことになる。
フィールドは1個だけなので$0でも$1でも結果は同じ。というのがミソなんだな。