第116回東京エリアDebian勉強会参加、そしてJessieインストーラBeta1

先の8/23に、第116回東京エリアDebian勉強会に参加してきました。 今回のお題 東京エリアDebian勉強会は、参加に際してなんらかの「お題」が出ます。ここ最近は「もくもく会」と呼ばれる「みんなでその場で集まって、各自が抱えている課題に黙々と取り組む」スタイルが多く、お題の内容は「もくもく会での目標」となることがほぼ常態になっています。 私の目標は KAKASIのローマ字テーブル見直し 積ハードの消化 ECS LivaのeMMCに関する問題 といったあたりを考えていたのですが、当日の午前中にイレギュラーが発生したので、急きょそちらをもくもく会のターゲットにしました。 DELL Latitude E6520購入 日経トレンディネットでDELL Latitude E6520が約4万円で販売という記事をみかけ、急きょ開店直後のPCボンバーへ赴きました。あらかじめスペックはある程度把握していたのですが、店頭で現物も見せてもらえたので、以下の点を評価してその場で購入を決意しました。 1080p フルHDディスプレイ SandyBridge世代だけどCore i7-4200M 今となっては貴重なIEEE1394端子搭載 メモリは最大8GB(もしかしたら16GBいけるかもしれない) eSATA端子搭載 ビデオにNVIDIA GF119内蔵 特に1394はいまだDVビデオカメラを持っている身としては貴重です。今まで使っていた動画配信用のノートPCは液晶を壊してしまったので、これでdvswitch+icecast2でのOgg Theora/Vorbisによる自由ソフトウェアでの動画中継も可能です。 Debianのセットアップ wheezy 7.6 まずは普通に現状の安定板、7.6のインストーラーを試しました。使用したメディアはUSBメモリです。 無線LANで躓く E6520の無線LANデバイスはIntel Corporation Centrino Advanced-N 6205、iwlwifiドライバで動作します。このドライバはnon-free firmware blobが必要なのでhttp://cdimage.debian.org/cdimage/unofficial/non-free/firmware/から取得しておき、インストールメディアにudebファイルを置いておく必要があります。デバイスの認識自体はこれだけでいけました。 問題は接続勉強会の会場はWPA2-PSKな無線LANが来ていたのですが、SSIDとパスワードを入力してもうまくネットワークに接続できませんでした。きちんとログを見ていなかったので、原因はまだわかっていません。再度インストールにトライすれば確認できるだろう、ということでとりあえずこの問題はさておいて、ちょっと前にリリースされたJessie Installer Beta 1を使ってみることにしました。 Jessie Installer Beta 1 次の安定板になるJessieは来年初頭には出るだろうと思われます。まずはbeta 1インストーラーをためし、何か不具合がないかを調べようと試してみました。 無線LANが認識しない いきなりこれです。有線(82579LM e1000e)は普通に認識できました。幸い会場には有線の口とケーブルもあったので、そちらを使ってインストールを続けました。 インストール完了後であれば、firmwre-iwlwifiをインストールすることで無線LANを使えるようになりますが、インストール時にうまく検出できていないのは問題です。 再起動できない wheezy, jessieどちらにも共通していますが、再起動がうまくゆきません。ただしシャットダウンはうまく動きます。それぞれでインストールされるカーネルのバージョンは3.2.0, 3.14.0です。 世代的に枯れたハードウェアだと思うので、BIOSあたりが怪しいのではないかと思っています。バージョンを確認してみると、A00… Continue reading 第116回東京エリアDebian勉強会参加、そしてJessieインストーラBeta1

twitter gemの更新に追従

概要 Rubyのtwitter gem Version 1.7.2を前提に書いていたコードを5.11.0向けに書き直したという話。 経緯 2011年ごろ、Twitterの自分のタイムラインを定期的に取得して保存するロガー的スクリプトをrubyとtwitter gemで書いて使っていました。 そのスクリプトは2013年のAPI変更で使えなくなってしまいました。この時には「過去のツイートを取得する」機能がTwitter側から用意されていたので、じゃあそれでいいやと思い、運用を止めました。 しかし、実際に取得できる情報は自分のツイートのみで、自分のタイムラインそのものではありませんでした。現状のTwitter検索は過去の内容を探すのも難しいので、「以前書いたスクリプトを直して再度自力でログを取ろう」と思い立ったので、そのために実施した修正についての記録をここに残しておきます。 修正点 クライアントインスタンスの取得と認証情報の設定 twitter 1.7.2では、Twitterモジュールのモジュール関数を呼び出して処理を行うことができたので、その方法を使って実装していました。5.11.0ではその手段が提供されなくなったので、REST APIを使う方法をとりました。 oauth_tokenとoauth_token_secretというアクセサは5.11.0でも使えますが、deprecated扱いなので警告が出ます。 タイムラインの取得 取得方法は単純で、今までTwitter.user_timeline()を読んでいたところをクラスメソッドuser_timelineに変えるだけです。 created_atの扱い 1.7.2ではツイートの作成時刻created_atは文字列で返されていたのでDateTime.parseで処理していましたが、5.11.0ではTime型を返すようになっています。 既存のコードをいじるのが面倒だったので、to_sした結果をDateTime.parseに渡しています。無駄ですがコードの変更は少なくてすみます。 結果 これらの修正で、自分のコードは無事動くようになりました。その後以下のような機能拡張を施して今にいたります。 自分だけでなくフォロワーのツイートも取得する(user_timelineの代わりにhome_timelineを使う) 各ツイートにscreen nameを付加する(x.user.screen_nameを参照) 自分がつけたfavoriteも記録する(client.favorites()メソッドを使う) UserStreamについて 今回、あえてUserStreamを使う方法は採用しませんでした。どうも同一ユーザーによるサードパーティアプリから接続できるUserStreamの数に制限があるようで、現状制限いっぱいいっぱいだからです。 しかし今回自作ロガーを再度稼働させたことで、UserStreamを貼りっぱなしのクライアントを立ち上げておく必要性は大きく下がったので、今後はUserStreamの利用も考えてみたいところです。 参考  The Twitter Ruby Gem http://rdoc.info/gems/twitter/ ソースコード https://github.com/sferik/twitter 関連書籍 [amazonjs asin=”4862670849″ locale=”JP” title=”Twitter API プログラミング”]

Published
Categorized as 開発

GData.SpreadsheetsライブラリのListFeedに潜む罠

ほぼ1日ぐらいはまっていたのでメモ代わりに記録しておきます。 Googleの各種サービスはWeb APIを持っているだけでなく、.NET, Ruby, Python, Java等の各種言語向けSDKを用意しています。これを使ってGoogle Spreadsheetsを操作しようとして、ちょっとはまりました。 Spreadsheet APIのリファレンスには、spreadsheetを操作する2種類の方法を提供しています。ListFeed型(行単位処理)とCellFeed型(セル単位処理)です。 CellFeedは割と簡単で、指定した矩形範囲のセルを逐次処理させるのに向いている手段です。ただし、こちらにも若干の罠があって、デフォルトでは値の入っているセルのみしか操作できません。APIリファレンスのサンプルの書き方もそのようになっています。値の入っていないセルも捜査対象にするためには、CellQueryのReturnEmptyプロパティにReturnEmptyCells.yesを代入しておく必要があります。 上記のコードは、5×3のセルすべてにアクセスするためのコード例です。ReturnEmptyを指定しないと、値の入っていないセルはとばして結果を返してきます。 本題のListFeedの罠についてですが、まずAPIガイドのサンプルの一部を見てみます。 このコードをまっさらなシートに対して実行をすると、API側がHTTPステータス400を返すので、GDataRequestExceptionが発生します。 何が問題なのかというと、ListEntry.CustomのプロパティであるLocalNameは「1行目のカラムの値」との対応付けがなされている前提のAPIだからです。上記の例だと、1行目に”firstname, lastname, age, height”という値が入ったセルが必要だということです。このことについて気付いたのは、値の入ったシートに対してListFeedで読み出しをしてみたら、1行分だけ少ない結果が返ってきたからです。CellFeedはそういう制約がないため、1行目を含めて内容の取得、変更等ができます。 あとになってガイドを読み返したら、以下のような説明がありました。 list row Row of cells in a worksheet, represented as a key-value pair, where each key is a column name, and each value is the cell value. The first row of a worksheet is always considered the… Continue reading GData.SpreadsheetsライブラリのListFeedに潜む罠

GnuPG key signの作業をする(signing-party/caff)

先日JNUGの総会へ行ってきて、OpenPGPの鍵の本人確認をしてきました。その後にやるべき作業を、忘備録として記しておきます。 key signの作業を楽にするためのツールはいろいろありますが、今回はsigning-partyパッケージに含まれるcaffを使います。 Package: signing-party Version: 1.1.4-1 Maintainer: Thijs Kinkhorst <thijs@debian.org> Description-ja: 各種 OpenPGP 関連ツール signing-party はあらゆる種類の PGP/GnuPG 関連ツール集で、キーサイン、 キーリングの分析、キーサインパーティの準備用ツールを含んでいます。 . * caff: “CA – Fire and Forget” 鍵にサインしてメールを送信します * pgp-clean: 自己署名以外の全署名を鍵から削除します * pgp-fixkey: 鍵から破損したパケットを除去します * gpg-mailkeys: サイン済みの鍵をその所有者へ単純にメール送信します * gpg-key2ps: 指紋を短冊にした PostScript ファイルを生成します * gpgdir: 再帰的にディレクトリを暗号化するツールです * gpglist: あなたの UID にサインした人を表示します * gpgsigs: GnuPG 鍵の一覧に対してサイン済みの鍵に注釈を付けます… Continue reading GnuPG key signの作業をする(signing-party/caff)

Intel Celeron N2806のeMMC(RPMB)

ECS LivaというBay-Trail MベースのPCがあります。秋葉原の複数の店舗やAmazonで扱っています。2万円しない小型PCで、メモリ(2GB)とストレージ(eMMC 32GB)を搭載しているので、OSさえ用意すれば他には何もなくても使えるマシンです。 公式でUbuntu 14.04が動作すると書かれているのですが、やはりDebianを使いたいのでなんとかしてインストールしてみました。 しかし、wheezyのインストーラではストレージを認識できません。Linux kernel 3.8から入ったsdhc_acpiというホストドライバが必要なのですが、Debian wheezyの標準kernelは3.2と古いのが原因です。 結局、自分は一度Ubuntu Live USBイメージから起動して、debootstrapで頑張ってDebianをインストールするという手段で実現しました。Debianさえ入ってしまえば、backportsにある3.14 kernelがwheezyでも使えます。 最初はwheezy用のインストーラを作るべく頑張ってみたのですが、3.14 debian udebにsdhc-acpi.koが含まれていないというバグがあるため(kernel debにはある)、kernelパッケージを作り直す必要がありました。しかし作り直しても、eMMCデバイスは見えるけれどもアクセスすると固まるという問題があったため、挫折しました。 今のbackports kernelでは一応動いていますが、Replay Protected Memory Block(RPMB)と呼ばれる領域にアクセスできないという不具合があります。この警告はUbuntu kernelだと出ません。 [ 3.202626] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 [ 3.205033] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 [ 3.207399] mmcblk0rpmb: timed out sending r/w… Continue reading Intel Celeron N2806のeMMC(RPMB)

KAKASIのコードについて

ここしばらくKAKASIのソースをいじっています。いい加減あたらしいバージョンをリリースして、しばらくは他のことをやりたいのですが、次に戻ってきたときいろいろと忘れそうなので、記録として残しておこうと思います。 そもそもKAKASIとは何か オリジナルのKAKASIはたかはしもとのぶさんによって作成されたソフトウェアです。漢字、カタカナ、ひらがな、ローマ字を相互に変換する機能をもっています。SKKの辞書を用いて、 オリジナルのKAKASIに、単語を分割する「分かち書き」機能をパッチとして作成したのが、馬場さんです。馬場さんはこの機能を利用して、freeWAISやNamazuなどの全文検索ソフトウェアで日本語を扱えるようにしました。 自分もNamazuの開発にかかわる中で、パッチとしてKAKASIの機能をメンテナンスするのはしんどい、KAKASIのリリース自体長らく行われていない、といった理由で、Namazuの開発の一環としてKAKASIの開発を継承することをたかはしさんに打診し、受け入れられて今に至ります。 最近の作業 KAKASIのバージョンは長いこと2.3.4でリリースが止まっていました。2006年ごろ自分がリリースをしようとした痕跡があるのですが、その後Debian方面でlibtext-kakasi-perlのテストが通らなくなった等いろいろな要因で「これはリリースしないといけない」と思い、ようやく出せたのが2014/1/18です。このリリースで一番大きい変化はUTF-8のサポートです。といっても、iconvに依存しています。KAKASI本体がISO-2022-JP, EUC-JP, SJIS(cp932)の変換機能を持っているのですが、UTF-8対応のためにテーブルを持つのもどうかな、と思いiconvを使うようにして実装しました。 これでひとまず解決か、と思いきやperlモジュールでテストが通らない問題が直っていませんでした。何が起きていたかというと、分かち書きオプション-wを付加したときに、先頭に余計な空白を出力するために、期待されていた出力とは異なっていたのです。 このバグはDebianパッケージの自動ビルドで発覚しました。開発者がアップロードしたアーキテクチャ以外(mips, arm等)のパッケージは、自動的にビルドサーバーによってパッケージが作成されます。その時make testまで実行するので、ライブラリの変化によってバグが顕著化されました。 これを直すために作業を進めていたところ、さらに複数のバグが発覚し、それらの対応も必要になり、今に至ります。 KAKASIの基本データ構造Character kakasi.hで様々なデータ構造が定義されていますが、文字を格納する基本となる型Character(実体はstruct character)が入出力の基本となります。 typedef struct character { char type; unsigned char c1, c2; } Character; typeは文字の種別を表し、0~5, 127の値をとります。値の定義は同様にkakasi.hで行われています /* character set */ #define ASCII 0 #define JISROMAN 1 #define GRAPHIC 2 #define KATAKANA 3 #define JIS78 4 #define JIS83 5 #define OTHER… Continue reading KAKASIのコードについて

さくらVPSでLXCを使う(dummynet+bridge+proxy arp)

さくらインターネットの提供するVPSサービスではDebianが利用できます。VPSのホストはKVMで提供されているようです。VPSのインスタンス一つで別の仮想的な環境が欲しくなったので、LXCを使ってみました。 ループバックインターフェースを持つだけのホストは簡単に作れるのですが、VPSに割り当てられているNICインターフェースをブリッジにするわけにもゆきません。そこで今回はdummynetを利用してホストオンリーネットワークを構築してみました。 dummynetは物理NICとは結びつかない、完全なダミーのネットワークインターフェースを提供します。インターフェース名はdummy0などとなります。使うには単純にmodprobe dummy等としてdummy.koをロードするだけです。Debianで起動時に有効にするためには、/etc/modulesに一行”dummy”と追加しておけばよいです。 次にdummy0をLXCから使えるよう、ブリッジを作ります。 apt-get install bridge-utilsを実行してネットワークブリッジデバイスを扱うためのツール一式を入れておきます。次に/etc/network/interfacesに以下のような記述を追加します。 IPアドレスやネットワークは、別途自分が普段使う範囲とバッティングしない、適当なプライベートネットワークを設定してください。 この状態でifup br0を実行すれば、dummy0デバイスに紐づいたブリッジデバイスbr0が作られます。auto br0を入れてあるので、再起動時にも自動的にbr0がifupします。 この状態で、lxc-create等を使ってLXCコンテナのインスタンスを作成します。ただ、Debian wheezyのlxcパッケージはかなりbuggyで、あんまり動作が信用なりません。私は個人的にsidのlxcをバックポートしたものを使っています。 以下は私の作ったlxcコンテナのconfigの一部です。 私は、コンテナ側の/etc/network/interfacesにeth0のネットワーク設定を書いて設定しています。 基本的にはこれでホストオンリーな環境ができます。しかし、メンテナンス上コンテナ側でも毎日apt-getはしたいので、私の環境ではNAT(masquerade)をできるようにしています。 この時に問題になるのがarpとfowardingです。何も設定しない状態では、br0から外に出ることができません。 まずbr0でproxy arpを有効化します。設定方法はsysctlを使うか、echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arpを実行するかして有効化します。これでbr0から他のインターフェース(eth0等)へ届くようになります。起動時に有効にするためには、interfacesにさらなる設定を追加します。 次はforwardingです。これもprocでも設定できますが、私は以下の内容を書いたファイルを/etc/sysctl.d/ip_forward.confとしています。 最期にNATの設定です。/etc/iptables/rules.v4に以下のような行を書いておきます。コマンドであれば、iptables -A POSTROUTING -s 172.23.186.0/24 -o eth0 -j MASQUERADEという具合です。 これで、VPS上でも外部ネットワークに到達可能なLXCインスタンスを持つことができます。もちろん、静的NATを組み合わせれば、一部のポートをインターネット側で受けることもできます。

Published
Categorized as その他

Debianでrootにaufsを使う(initramfsのカスタマイズ)

大掃除をしていたら初代EeePCが出てきました。最近いろいろあって実マシン環境が複数欲しかったので、この機会にDebianを入れて動かすことにしました。 箱が見当たらなかったので型番がわからないのですが、おそらく 初代EeePC 4G-Xと思われます。当時メモリも一緒に購入したので、RAMだけは2GBとそれなりにあります。

Published
Categorized as Debian

KAKASI 2.3.5をリリース

KAKASI 2.3.5をリリースしました。 実は2006年にリリースしようとしていたのですが、途中で頓挫してしまい実に10年超えのリリース周期となってしまいました。 結構前からCVS版がDebianには入っているのですが、libkakasiが壊れているという問題があるので、このタイミングでのリリースとなりました。あと、 NipponというRのKAKASIバインディングが出来たのが、新しいニュースです。 kanwadictの一新をやりたいところです。辞書は昔からほとんど変わっていないので…

Calibreの達人出版会ストアプラグインを作りたい

昨年は個人的な電子書籍元年でした。Kindle paperwhiteに始まり、Kobo touch、Lideoと3種類の電子ブックリーダーを購入してしまって、電子書籍の良いところ、悪いところも含めていろいろと肌で感じることができました。 これらの端末はみな、ストアとの連携機能を持っています。うっかり続き物を買ってしまうと、次々と続編をお勧めしてきたりして、なかなかあなどれません。 しかし、当然これらの端末に相互運用性などあるわけもなく、そうなると必然的にDRMのかかっていない書籍が欲しくなってきます。 国内の技術系電子書籍でこれらを満たすサイトとして、達人出版会があります。素晴らしい試みだと思います。 しかし達人出版会はその特性ゆえ、電子書籍端末との連携は望むべくもありません。 一方で、最近Calibreという電子書籍端末管理ソフトウェアを使い始めました。USB storageに見える端末(Kindle, Kobo)であれば統一的に扱うこともできます。 このソフトの特徴のひとつに、電子書籍販売サイトから書籍を検索する機能があります。今のところ日本のサイトには対応していないようですが、amazon.comやヨーロッパのamazonに対応しているので、プラグインさえ書けば対応は可能のようです。

Published
Categorized as その他