平衡点
2011/11/06
_ feed2imap で UTF-8 以外の Feed を読む場合[Ruby]
Feed2imap は RSS/Atom feed をパースして imap サーバに送信する, Ruby で書かれたソフトウェアです. 作者は Lucas 先生. RSS/Atom feed を読むために慣れた MUA が使えるのがとても便利で良いところだと思います.
feed のパースと整形には Ruby-Feedparser) が使われています. これは内部で REXML を呼んでいるのですが, 文字列が全て UTF-8 決め打ちになっていたりして, euc-jp とか shift_jis な feed を食べさせると, 綺麗に文字化け(?)してくれます.
というわけで, ad hoc ですが feed を fetch して feedparser(REXML) に渡す前に NKF で文字コードを変換してみたり.
% diff -u httpfetcher.rb.bak httpfetcher.rb
--- httpfetcher.rb.bak 2011-11-06 05:49:55.000000000 +0900
+++ httpfetcher.rb 2011-11-06 05:26:05.000000000 +0900
@@ -24,6 +24,7 @@
rescue LoadError
end
require 'uri'
+require 'nkf'
# max number of redirections
@@ -81,7 +82,7 @@
end
case response
when Net::HTTPSuccess
- return response.body
+ return NKF.nkf('-w', response.body)
when Net::HTTPRedirection
# if not modified
if Net::HTTPNotModified === response
いちおうコレで動きますが, 相変わらず ad hoc.
ちなみに feed2imap は Ruby1.8 決め打ちなので NKF にしましたけれど, Ruby1.9 系列からは Encoding 使うのが良いんでしょうね.
_ Banshee で取得したアルバムアートを jpg にして出力[Ruby]
メモがてら. 要 ruby-mpi3info, unf_ext
#!/usr/bin/ruby1.9.1
# -*- mode: ruby; coding: utf-8-unix; indent-tabs-mode: nil -*-
# Copyright(C) 2011 Youhei SASAKI All rights reserved.
# License: GPL-2+
#
# Code:
require 'rubygems'
require 'mp3info'
require 'digest/md5'
require 'RMagick'
require 'unf_ext'
musicdir = Dir.glob(ENV['HOME']+"/Music/*/*/")
list = Hash.new
norm = UNF::Normalizer.new
musicdir.each do |src|
Dir.chdir(src)
mp3file = Dir.glob("*.mp3")[0]
unless mp3file.nil?
Mp3Info.open(mp3file) do |info|
artist = info.tag.artist
album = info.tag.album
name = artist + "\t" + album
digest = Digest::MD5.hexdigest(norm.normalize(name, :nfkd))
list[src] = "album-" + digest + ".jpg"
end
end
end
cachefiles = Dir.glob(ENV['HOME']+'/.cache/media-art/**.jpg')
cache = cachefiles.collect{|x| File.basename(x)}
found_count = 0
list.each_pair {|key, value|
if cache.index(value)
puts "cp " + cachefiles[cache.index(value)] + " to " + key+"/cover.jpg"
img = Magick::ImageList.new(cachefiles[cache.index(value)])
img.resize_to_fit!(340,300).write(key+"/cover.jpg")
found_count += 1
end
}
puts "hash mismatch is " + (cachefiles.size - found_count).to_s
画像が「アーティスト名+タブ+アルバム名」の nkfd ノーマライズ, なので MP3 のタグから情報を取得して, 画像を探すことに.
2011/11/09
_ DREAM THEATER - a dramatic turn of events[CD]
お買い物.
ア・ドラマティック・ターン・オヴ・イヴェンツ(スペシャル・エディション)(初回限定盤)
ドリーム・シアター, ワーナーミュージック・ジャパン
特典 DVD のドラマーオーディションも凄い. 欲を言えば, 各ドラマーが「Dance 〜 」をどういう風に叩いたのか, フルで聞きたかったが...
いつもよりクリアだけれど, ベースとボーカルが前に出てきた感じで, かなり気に入った.
_ Iceweasel 8.0 + vimperator 3.2 での Error メッセージ[Debian]
Iceweasel 8.0 が unstable に入ってきました. というわけで早速 upgrade した訳ですが...
Processing keyup event: ReferenceError: HTMLIsIndexElement is not defined ReferenceError: HTMLIsIndexElement is not defined at chrome://liberator/content/events.js:115 - ([object KeyboardEvent]) at chrome://liberator/content/base.js:334 - ([object KeyboardEvent]) Processing keydown event: ReferenceError: HTMLIsIndexElement is not defined ReferenceError: HTMLIsIndexElement is not defined at chrome://liberator/content/events.js:115 - ([object KeyboardEvent]) at chrome://liberator/content/base.js:334 - ([object KeyboardEvent]) :
というわけで, google 先生にお尋ねしてみると...
とのことで. まもなくリリースされる vimperator 3.3 では fix されているそうな.
とりあえず nightly build 入れて幸せになっておくことにする.
_ 告知を二つ[Debian]
さっき告知文に大嘘ぶっこいてしまった...
;y=ー( ゜д゜)・∵. ターン
第 53 回関西Debian 勉強会@関西オープンソース 2011
- 日時: 2011 年 11 月 11 日 (金) 13:00~18:00 / 11 月 12 日 (土) 10:00~18:00
- 会場:
- 大阪南港ATC ITM棟 10F (受付・展示会場)
- 〒559-0034 大阪市住之江区南港北2-1-10
- 会場までのアクセス方法: http://k-of.jp/2011/access.html
- 費用: 無料
- セッション、ステージ企画、共に関西オープンフォーラムの企画として開催さ れますので事前に申し込みの必要はございません。会場まで直接お越しください.
- 詳細: http://wiki.debian.org/KansaiDebianMeeting20111112 を参照のこと
セッション: 「なれる! Debian 開発者 — 45 分でわかる?メンテナ入門」
- 11/12 13:00〜13:50 (50 min) [ 会場 : 6F M6 ]
- 講師:やまねひでき(Debian Project)
普段使っている/お世話になっている Linux ディストリビューションの開発ってどんな風にやってるの?難しくないの?大変じゃないの?─そんな疑問に「Debian のパッケージメンテナ」からの視点でお答えします。これさえ分かればキミもディストリビューション開発に参加できる……かもよ!
GPGキーサインパーティ@関西オープンソース 2011
- 11/12 (土) 11:35〜
- キーサインコーディネイタ: 岩松 信洋 / iwamatsu at {debian.org}
- 詳細: https://sites.google.com/site/kspjapanese/kof2011 を参照のこと
キーサインパーティーとは、互いの鍵に署名をすべく、PGP/GPG 鍵を持つ人々が集まるものです。キーサインパーティーは PGP/GPG 鍵を利用する上で非常に重要な概念である、信頼の輪(Web of Trust)を大規模に拡張するのに有用です。また、このようなキーサインパーティーは実際に開発者と面と向かって会う良い機会でもあります。上記のサイトを参考に事前登録をお願いします。
2011/11/12
_ ただダラと posttdiary{-ex}.rb[Ruby] [tDiary]
今んところ, ただダラ(リンク先ドコー?) + simple-hatena-diray の修正版でコレを書いているのだけれど. postdiarxy{-ex}.rb を使うようにしてみた方が良いのだろうか...
んー...
_ rdtool-0.6.31[Ruby]
とりあえず ruby-list にアナウンスを投げてみた.
@see https://github.com/uwabami/rdtool/
気にしていること
- ruby1.9 で rd2man-lib の出力がおかしいような...
- github って tar.gz のファイル名固定できなかったっけ? あれ?
- setup.rb から脱却した方が良いかな
そんなこんなで.
2011/11/22
_ MPD → PulseAudio → Bluetooth Headset でじたばた[Debian]
その1:
PulseAudio 側ではきちんと Bluetooth Headset が見えているのだけれど, MPD からの出力を PulseAudio でつかまえられていなくて, しばし悩む.
per user session になっていたので, mpd の実行ユーザ(Debian では mpd) で pulseaudio が起動していたからだった. というわけで, localhost へ流せば良いよね, ということで.
その2:
paprefs で モジュールが有効にできない. しばし悩むが, BTS#531251 と同じですね
%> strace paprefs 2>&1 | grep /lib/pulse ~
access("/usr/lib/pulse-1.1.0/modules/module-esound-protocol-tcp.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-native-protocol-tcp.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-zeroconf-publish.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-zeroconf-discover.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-raop-discover.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-rtp-recv.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-rtp-send.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/pulse-1.1.0/modules/module-rygel-media-server.so", F_OK) = -1 ENOENT (No such file or directory)
モジュール実体は /usr/lib/pulse-1.0/modules 以下にあるわけで. とりあえず symlink はって, ネットワーク経由を有効化しておく.
その3:
paprefs のソースを見てみると pkg-config の結果は
%> pkg-config libpulse --variable modlibexecdir /usr/lib/pulse-1.0/modules
というわけで, これは正しいのだが. はて? 試しに rebuild してみても, やっぱり pulse-1.1.0 を探しに行く. んー...
ああ, debian/patches/0002-Dynamically-build-the-paths-to-the-modules.patch か. #include <pulse/version.h> でモジュールの場所を決める, と. でコレが間違っているわけだ.
とりあえず BTS するか.
2011/11/26
_ んー.[Computer]
gfortran -g -O2 -fPIC -w -o dclclr dclclr.f -L/home/uwabami/Sources/GFD/dcl/lib -L/usr/local/lib -lf77dcl -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgmodule-2.0 -pthread -lgdk_pixbuf-2.0 -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lSM -lICE -lX11 lm -lgfortran /home/uwabami/Sources/GFD/dcl/lib/libf77dcl.so: undefined reference to `h_' /home/uwabami/Sources/GFD/dcl/lib/libf77dcl.so: undefined reference to `s_'
いやぁ `h_' とか `s_' じゃわかんねぇや(笑) どのライブラリが足らんのだ?
2011/11/28
_ cmigemo の Debian パッケージ[Computer] [Debian]
cmigemo の Debian パッケージが unstable に入りました. スポンサーをして下さった岩松さんに感謝!! *1
現状版は mentors.debian.net にあります. unstable に修正版が入ったら消えてしまいますが, 待ちきれない方は試してみて下さい. そんなに凝った事はしていませんし, 依存パッケージも少ないので, squeeze でも compile して使えると思います.
http://mentors.debian.net/package/cmigemo dget -x http://mentors.debian.net/debian/pool/main/c/cmigemo/cmigemo_20110227-2.dsc
もしくは
$ sudo aptitude install git-buildpackage $ git clone git://git.debian.org/users/uwabami-guest/cmigemo.git $ cd cmigemo $ git checkout origin/upstream -b upstream $ git checkout origin/pristine-tar -b pristine-tar $ git checkout master $ git-buildpackage
です. patch welcome!!
*1 ...さっそく FTBFS 頂きましたが...Orz