平衡点
2007/12/10
_ スペルミス
Fortran を Fotran と書いてました. うわーハズカシー.
ちなみに google 先生に聞くと
- Fotran: 約 20,000 件
- ちゃんと「もしかして Fortran」 と教えてくれた.
- Fortran: 約 1,440,000 件
2012/12/10
_ .gem から .deb へ 〜 gem2deb の紹介
はじめに
この記事は Debian/Ubuntu JP Advent Calendar 2012 : ATND の 12/10(月) の記事です(しかし, これを書いているのは 12/11 である, という...). 昨日はあかべさん(@vbkaisetsu)による nmudiff の使い方 でした.
今日のお題は Debian(>=Wheezy)/Ubunut(>=Precise) で「.gem をお手軽に .deb に」というお話です. 実際にお手軽にできるかは, その .gem の依存関係によりますが...
.gem って? .deb って?
Ruby 用のパッケージシステム RubyGems で使われるファイルの拡張子が .gem です. 実態は tar の archive で, これを展開すると data.tar.gz{,.sig}, metadata.gz{,.sig} が入っています. gem コマンドは metadata の内容に従って, .gem を処理しています.
Debian における配布パッケージの拡張子が .deb です. 中身は ar の archive で, debian-binary, control.tar.gz, data.tar.gz からなります. apt-get などでファイルを取得した後に, 下層で dpkg が動いて, .deb を処理します.
gem2deb って?
そのものズバリ, .gem を .deb に変換するコマンドです.
RubyGems 自体がパッケージシステムですので, 別にわざわざ面倒な作業をしなくても良いじゃないか, という話もありますがパッケージシステムは一つの方が嬉しい (こともあります)よね, ということで.
ちなみに Perl の場合, CPAN で配布されているモジュールを .deb に変換する dh-make-perl なんてものが用意されています. gem2deb はこの Ruby 版だと思って下さい.
gem2deb ってどう使うの?
とりあえず
$ sudo apt-get install gem2deb
してから,
$ gem fetch hogehoge
で .gem をダウンロードして下さい. その後, おもむろに
$ gem2deb hogehoge.gem
とします. うまく行けばこれで ruby-hogehoge という Debian パッケージ(.deb)ができます. その後おもむろに
$ sudo dpkg -i ruby-hogehoge*.deb
とすると, Debian パッケージとして導入されます.
.deb ができなかった Yo!!
残念ですね. なんででしょうか? 多くの場合は test に失敗したから だと思いますが, 如何でしょうか?
理由は幾つか考えられます.
test/spec に使う Ruby ライブラリが導入されていない
metadata や .gemspec を見て, 必要な環境を整えましょう. 一応, Gemfile, metadata, .gemspec を見て, test/spec の実行に必要そうなライブラリは debian/control ファイル内の Build-Depends フィールドに 列挙されています. これを確認してみましょう.
test/spec が特定のディレクトリ構造やRuby 以外の環境に依存していて =gem2deb= が提供している test-runner ではそもそもtest/spec が実行できない
必要に応じて patch 書きましょう. もしくは debian/rules 内の IGNORE から始まる行を有効にするのが良いと思います.
- test/ 以下で実行されることを前提として, 相対パスで必要なライブラリを読み込んでいたりする gem とか?
- .git を参照して spec を実行する gem もあったり(当然 .git は配布物の中には含まれておりません).
- まあ, gem として配布する際には test 走らせることは無いのかな...
ruby1.8 では動かない, もしくは ruby (>= 1.9) では動かない
現状, Debian Ruby Extra チームでは 「複数の ruby 実装で動作すること」を目標にしています. /usr/bin/ruby は, alternatives で提供されていて, 使いたい ruby の実装を切り変えられるようになっています.
- とはいえ, JRuby は Java チームの管轄なので, まだ上記範疇には入っていないですし, rubinius は(ITP されて進展していますが)まだ Debian パッケージには なっていません.
とりあえず debian/control 内の XS-Ruby-Version を適宜弄りましょう. デフォルトでは all になっているでしょうから, これを ruby1.8 とか ruby1.9.1 に変えると良いと思います.
そういや以前(関西闇Rubyかな?), 「Ruby 1.9.3 なのに実行バイナリの名前が ruby1.9.1 なのはなんで?」 とか聞かれましたが, soname 変わってないから, ですね.
$ ruby1.9.1 -v ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
うーん...
まとめ
というわけで, あんまり gem2deb が知られていないようなので, 「こういうモノもあるよ?」というお話を書いてみました.
Teams/Ruby/Packaging には, 現在 Teams/Ruby が行なっている「 gem2deb によるパッケージ作成」の ノウハウがまとまっていますので, Debian パッケージ作成に興味があって, Ruby への愛に溢れている人は, 是非一度眺めてみて下さい (ついでに, 一緒に Debian パッケージを作成/管理しませんか?).
あと gem を配布している/作成している方は 一度 Teams/Ruby/RubyExtras/UpstreamDevelopers なんかを眺めてみて下さると幸いです. ディストリビューションのパッケージメンテナってこんな事気にしてんのかよ, とか, そういう.
最後に一言. gem の配布物って dependency hell 多過ぎじゃない?
明日も罰ゲームで私の予定です.
2014/12/10
_ migemo-el のエラー
Emacs 24.4 + cmigemo + migemo-el(emacs-jp版)で,たまに以下のエラー. (「保険」を探そうとして HoKe の段階で出た backtrace )
Debugger entered--Lisp error: (invalid-regexp "Unmatched [ or [^") re-search-backward("\\(保[[:space:]^M\n]*[険健]\\|ホ[[:space:]^M\n]*ケ[[:space:]^M\n]*[ンノネヌニナ]\\|ほ[[:space:]^M\n]*け[[:space:]^M\n]*[んのねぬにな]\\|h[[:space:]^M\n]*o[[:space:]^M\n]*k[[:space:]^M\n]*e[[:space:]^M\n]*n\\|h[[:space:]^M\n]*o[[:space:]^M\n]*k[[:space:]^M\n]*e[[:space:]^M" 71698 t) isearch-lazy-highlight-search() byte-code("\306^X\307 ^Yr\310\216\311\n!\203^Y^@\312 \n=\204^Y^@\313\n!\210\212\314 ^[\315\216\f\203'^@^M\202)^@^N^]b\210^N^^\203^K^A\316 ^^^_^N \203G^@^N S\211^V \317X\203G^@\306^V^^^N^_\203\315^@\317\224\317\225^^!\211^^\"^N!U\203\232^@\f\203}^@^N\"^N#\203k^@^N^]\202m^@\320 U\203w^@\306^V^_\202\300^@\321u\210\202\300^@^N\"^N#\203\210^@^M\202\212^@\322 U\203\224^@\306^V^_\202\300^@\323u\210\202\300^@\324^N\"^N!\"\211^^$^N%B^V%\325^N$\326\327#\210\325^N$\330^N&#\210\325^N$\331\312 #\210)\f\203\311^@`^U\202\314^@`^V^]*^N^_\204^G^A^N#\203\340^@\306^V^^\332^V'\202^G^A\332^V#\f\203\370^@\322 ^U^N(\206\360^@e\322 ]b\210\202^G^A\320 ^V^]^N)\206^B^Ad\320 ^b\210)\202+^@^N'?\205^Z^A\333^N*\306\334#\211^V+.^G\207" [inhibit-quit save-selected-window--state isearch-lazy-highlight-window save-match-data-internal isearch-lazy-highlight-forward isearch-lazy-highlight-end nil internal--before-save-selected-window ((internal--after-save-selected-window save-selected-window--state)) window-live-p selected-window select-window match-data ((byte-code "\301^H\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) isearch-lazy-highlight-search 0 window-end 1 window-start -1 make-overlay overlay-put priority 1000 face window t run-at-time isearch-lazy-highlight-update isearch-lazy-highlight-start looping found max me mb isearch-lazy-highlight-wrapped ov isearch-lazy-highlight-overlays lazy-highlight-face nomore isearch-lazy-highlight-start-limit isearch-lazy-highlight-end-limit lazy-highlight-interval isearch-lazy-highlight-timer] 5) isearch-lazy-highlight-update() apply(isearch-lazy-highlight-update nil) byte-code("r\301^H\302H^H\303H\"\210)\301\207" [timer apply 5 6] 4) timer-event-handler([t 0 0 250000 nil isearch-lazy-highlight-update nil idle 0])
なんか,timer まわりの変更で悲鳴上がってた気がするんだけれど,なんだったっけ?
とりあえず
(setq migemo-isearch-min-length 2) (setq migemo-use-frequent-pattern-alist nil)
が必要だなぁ. 今回のは後者が原因.
2019/12/10
_ outlook の gb2312 は gbk (cp936)
とあるお仕事の学内通知が来たのだが, 普段使いの Wanderlust で読めず(というか一部が読めず)困ったり.
調べてみたら
ということで, 他にも困っている人はいる様で(毎度 Outlook は酷いモンだ).
というわけで ~/.wl
あたりに
(add-to-list 'mime-charset-coding-system-alist
'(gb2312 . gbk))
とでも放り込んでおく.
2021/12/10
_ org-gcalとorgmineによるAgenda View
この記事は emacs Advent Calendar 2021 の 12/10日分の記事です. 昨日は @toyboot4e さんの「Evil で縦方向 f/F (リピート不可 😢)」でした.
さて, 今日のお題は
- emacsmirror/org-gcal: Org sync with Google Calendar
- kametoku/orgmine: Emacs minor mode for org-mode with redmine integration
のご紹介です.
Emacs JP のslackでは定期的にオンライン懇親会的なイベントが開催されています.
そこで「タスク・スケジュール管理はどうしていますか」という話題が出た時に,
意外と皆さん org-gcal
をご存知なかったので,
良い機会だしここで紹介しておこうかな, と.
…なお, ここでのポイントは「Emacs JP のslackでは定期的にオンライン懇親会的なイベントが開催されています」でしょうか. 皆さん是非Emacs JP のslackにご参加下さい(ダイマ). 以下のURLから参加できますよ!
さて…
閑話休題
…で, org-gcal と orgmine の紹介を書こうと思ったんですが, 諸々の事情により疲労困憊なので, 紹介記事そのものは後日公開, ということでご容赦下さい(すいませんすいません).
解説する予定なのは
- org-gcal による複数カレンダーの連携
- org-capture によるメール・文書からの予定登録
- orgmine による「複数のredmine」「複数のproject」の処理
- AgendaViewによる一覧表示
- 上記を実現するための Agenda Viewのちょっとしたカスタマイズです.
…なお, 私のEmacsの設定はuwabami/emacs: Emacs の設定ファイル群にあるので, ここの該当箇所を見ればなんとなくやりたい事がわかるかもしれません.
(12/10中には中身を追加更新しておきます…).
明日は @kai2nenobu で 「Emacsのオリジナルマグカップを作った話」の予定です.