平衡点
2010/12/12
_ 最近知った細かい設定. 便利な設定
今年も Emacs Advent Calendar やってますね.
毎度勉強になります. ちなみに昨年のは以下
昨年は鬼軍曹.elという大リーグ養成ギブスが出ていて, 今年もワクワクしていました. 今年さっそく設定したのは以下の二つ
特に, 無駄な行末の空白を削除する方法は, 「以前設定していた筈なんだけれど, どうやったんだっけ」という状況だったので, ストレスの解消具合がハンパないです. というより, Emacs でコード書く人は全員これ設定しておいて欲しいなぁ...
という, 毎度の与太話でした.
2010/12/14
_ git で CVS と仲良くする方法
「CVS なんて○○だ!」と Linus センセイの様に断言できたら良いですが(いや, 断言してますが), かと言って布教にかけるコストがアレなので, 自分だけ Git で作業するために, git cvsimport/exportcommit を使っています. 某所よりリクエストがあったので, メモを残しておきます.
git cvsimport
cvs で管理されているリポジトリから, 手元に git clone するためには git cvsimport を使います. 初回に一度やれば良いのですが, 普通にやったら微妙に author とか変だったので, とりあえず authors.txt を作成しておきます.
$ cat authors.txt uwabami=Youhei SASAKI <uwabami@gfd-dennou.org> ...
そんでもって
$ git cvsimport \ -v \ -A authors.txt \ -d PATH_TO_CVSROOT \ -C MODULE_NAME \ GIT_REPOS_NAME
みたいに.
- PATH_TO_CVSROOT は :pserver: とか :ext とか.
- -A authors.txt は非推奨らしいですが, コレをやっておかないと git log のメールアドレス等が悲しくなります.
- MODULE_NAME は CVSROOT から取得したいモジュール名
- GIT_REPOS_NAME は作成したい git のリポジトリ名
CVS のリポジトリを置いてあるサーバで git と cvsps が動作しないと駄目です. 無ければ適当に install しておきましょう(もしくは管理者にお願いしましょう).
初回取得時は, コミット数に応じてそれなりに時間がかかります. Delta か DAG か, という違いです. 取得したら git gc しておくと良いでしょう. あとは普通に git リポジトリの様に作業します. 面倒なのは CVS の変更点の取得です. git pull/fetch, git svn rebase みたいにはできないみたいで, 毎度上記コマンドラインを叩く必要があります(Makefile でも書いておくと良いかな). 当然ながら, 既に取得した CVS のコミットを再度取得することは無いですが.
git cvsexportcommit
手元で作業した内容を, 御本尊の CVS リポジトリにコミットするには git cvsexportcommit を使います. しかしながら, 面倒なのは CVSROOT に直接コミットできないことですかね.
- cvs の working copy に git からコミット
- cvs で CVSROOT へコミット
という二段構成になります.
git cvsexportcommit \ -v \ -w PATH_TO_CVS_WORKING_COPY \ COMMIT_HASH
- PATH_TO_CVS_WORKING_COPY は cvs checkout した CVS の working copy
- COMMIT_HASH は git のコミットハッシュ値. 省略した場合は cvsimport した所から git の HEAD まで全て
です. うまくいったら, CVS の作業コピーで今迄通り cvs commit します.
感想
エラい面倒です. Git とは言いませんが, せめて Subversion に移行してくれませんか, とか((CVSROOT を rsync して手元にコピーしている, と聞いた時は憤死しそうになった. それなら Git で良いじゃんかヽ(`Д´)ノウワァァァン!!)).
以上, またもやくだらないお話しでした.
2010/12/20
_ SKK の辞書の充実(あるいは, 他の形式の辞書からの変換に関するアレコレ)
この記事は SKK Advent Calendar の 12/20 日分の記事です. 昨日は Daiki Ueno さんによる ibus-skk 0.0.1 Antinews でした.
id:khiker さんに誘われたので, 軽い気持で参加したは良いけれど, 他の人の記事ほどタメになる記事は書けないなぁ, なんて思いつつ, お題の通り「他の形式の辞書から変換することで SKK の辞書を充実させて幸せになる」お話をしてみようと思います.
SKK の辞書は SKK辞書 で公開/開発が行なわれており, 必要に応じて複数の辞書を変換候補として設定したり, 辞書サーバに管理させる辞書を追加したりして使います. 辞書サーバを上げない/上げられない場合には, 手元の適当なディレクトリに辞書を置いて, skk の起動時に読み込む(もしくは変換候補が無い段階で読み込みに行く)みたいな設定をします.
それはそれとして.
専門用語の辞書, というのが世の中には幾つか公開されているわけです. 個人的な必要性から, とある辞書を常に使い続けています.
この手の「有志がメンテしている専門(?)用語の辞書」って結構沢山あります. 例えば フリーのかな漢字変換辞書たち なんかにリストがありますね(最終更新が 2004 年ですし, リンク切れているのもあったりしますが). これらの辞書の形式としてメジャーなのは, *nix/BSD 系の場合は Wnn/Canna, Windows の場合は MS-IME とか ATOK とかです. そんな訳でこれらの辞書を SKK で使う場合には, SKK の辞書形式に変換する必要があります. SKK 本家の方でも辞書を変換するためのツールが 辞書メンテナンスツール の方で公開されていますね.
...
とか, これだけだとなんか紹介しただけですので, とある辞書を変換する際にはまった話など. 2ch の顔文字辞書として2ちゃんねる顔文字辞書・2chアスキーアート・AAアイコン素材 MatsuCon の辞書を使用しています. で, 顔文字って「;」を使う事が多いんですね. ですが skk の辞書の形式では「;」は注釈のためのセパレータだったりします. そんな訳で, 適当に辞書を変換したあとで文字列を置換しておく必要があります. たとえば,
#!/usr/bin/env ruby require 'nkf' src = ARGV[0] if ARGV.size < 1 puts "usage: kaomoji2skk.rb ime_dictionary" exit 0 end File.open(src, "r") {|f| f.each do |line| line_euc = NKF.nkf("-S -e",line) if line_euc =~ /^([^!]+?)\t(.+?)\t.+$/ entry = $1 content = $2 if content =~/;/ puts entry + " /(concat \""+ content.gsub(';','\\\\073')+"\")/" elsif content =~/\// puts entry + " /(concat \""+ content.gsub('/','\\\\057')+"\")/" else puts entry + " /"+ content +"/" end end end }
こんな塩梅で. まあ, 辞書の文字コードが SJIS 決め打ちだったりするのであんまり汎用性が無いですが, こういうはまりもありますよ, というネタでした((うひー. 石投げないで)). そんな訳で, 顔文字で満足できない人は id:znz の 「はてなダイアリーキーワードふりがなリスト」をSKKの辞書に変換なんかも使うと良いと思います.
...てか, こんなネタしか無いのかね, 私は...
というわけで, 辞書を充実させて, 楽しい SKK ライフを!!
次回は id:lisp_interaction の記事です. +(0゜・∀・) + ワクテカ +
...誘われたのにショボくてすみません > id:khiker
2010/12/22
_ 天文台ミーティング
毎年恒例, ウチの研究グループの天文台ミーティングです. ミーティングの内容はともかくとして, 天文台に来たら必ず行かなければならない(と個人的に思っている)のは, 深大寺の蕎麦屋さん「多聞」です.
寒い日だと, 冷たい蕎麦は辛かったりするのですが, 今日は良い感じに暖かくて, 迷わず「いつもの」を注文しました. つけとろ大盛り.
二年前より少ない気がしないでも無いが, 風のウワサ(?)によると, 最近裏メニューで「大盛りより多い」盛りがある, らしい.ちなみに二年前の盛りは...
ここは量もさることながら, 味も良い(好み)なので, あっというまに完食でした.
2010/12/26
_ org-mode と howm の連携?
org-mode は非常に強力で, なんとか howm と連携できないかなぁ, とかジタバタしてましたが. やっぱ Todo なんかを howm と連携するのは面倒です. というわけで, org は結局単なるアウトライナーとして使用することにしました. orgstruct とかでも良いのですが, アウトライナーとしてはヘッディングの fold しかできなかったので. howm の設定は以下の通り(主な部分だけ)
;; goto, come-frome の記号の変更 (setq howm-ref-header "==>") (setq howm-keyword-header "<==") (setq howm-directory "~/Desktop/Dropbox/howm") (setq howm-file-name-format "%Y%m%d-%H%M%S.howm") (setq howm-keyword-file "~/Desktop/Dropbox/howm/.howm-keys") (setq howm-keyword-case-fold-search t) (setq howm-list-title nil) (setq howm-menu-refresh-after-save nil) (setq howm-refresh-after-save nil) ;; org-mode と併用 (require 'org) (add-to-list 'auto-mode-alist '("\\.howm$" . org-mode)) (setq org-startup-truncated nil) (setq howm-view-title-header "*") (setq dired-bind-jump nil) (setq org-startup-folded nil) (global-unset-key "\C-x\C-z") (setq howm-prefix "\C-x\C-z") ; 一覧表示の順序 ;(setq howm-prepend t) ;; 以下は決まり文句 (setq howm-menu-top nil) (setq howm-menu-lang 'ja) (setq howm-history-file "~/Desktop/Dropbox/howm/.howm-history") (setq howm-menu-file "~/Desktop/Dropbox/howm/.howm-menu") (require 'howm) (set-face-foreground 'howm-mode-title-face "turquoise") ;; タイトル色 (set-face-foreground 'howm-mode-keyword-face "yellow") ;; <<< (set-face-foreground 'howm-mode-ref-face "yellow") ;; >>> (set-face-foreground 'action-lock-face "cyan") ;; 下線文字 (set-face-underline-p 'action-lock-face t) ;; 下線は文字と同色 (set-face-underline-p 'action-lock-face "red") ;; 下線 ;; ;; elscreen + howm でバッファを操作. (require 'elscreen-howm) (eval-after-load "howm-mode" '(progn (define-key howm-mode-map "\C-c\C-c" nil) (define-key howm-mode-map "\C-x\C-z\C-c" 'howm-save-and-kill-buffer/screen)))
はまったのは elscreen-howm が \C-c\C-c を持っていってしまうことでした. というわけで ad hoc ですが上記の様に. 快適快適.
2010/12/30
_ mobilepoint と pdnsd
帰省中.
実家に帰る際に, 東海道新幹線の中で mobilepoint で接続しようと試みるも, アドレスが取れるのだけれども, 接続できない. ちょっとジタバタしてみたら, 名前解決ができていない模様で.
モバイル用途のラップトップでは pdnsd + resolvconf でもってローカル様の DNS cache + proxy を上げているのだけれども...
- DHCP で割り振られた DNS を直接叩くと, 名前解決可能
- pdnsd 経由だと反応無し
しばしジタバタしたものの, やる事が他にあったので, とりあえず先伸ばしに.
wireless gate は良く使うんだけれど, こういう事があるとちょっと考えモンかなぁ...