日暮途遠(Linux)

Just another WordPress.com site

Archive for 6月 11th, 2012

hatena-diary-mode形式のファイル名を「はてダラ」用ファイル名に一括変換

leave a comment »

以下、個人的なメモが主たる目的です。個人的な特殊な用途を前提にしているので、ややこしくなっていると思います。

参考:はてなダイアリーライター(略称:はてダラ) SimpleHatenaMode – CodeRepos::Share – Trac

はてダラの詳細については参考ページを見ていただきたいと思いますが、例えば2011-06-11.txtというファイル名形式のファイルを特定のディレクトリに配置し、./hw.plというコマンドを実行すると、日付ファイル名ごとに一括投稿をやってくれるというものです。

一方、hatena-diary-modeですが、Emacsで利用できる拡張機能のようなものです。実際、不具合があって普通に使えなくなっているのですが、hatena-get-webdiaryというEmacs-Lispのコマンドで、利用しているはてなダイアリーのすべてのデータを日付ごとに、例えば20110611というファイル名で、ローカルのパソコンに保存することができます。

自分の環境では現在、hatena-diary-modeは使えなくなっています。エラーは出ないのですが、投稿も更新も事実上反映されなくなっています。原因は不明ですが、ネットで調べると同じ症状の人は多いみたいです。

hatena-diary-modeは事実上使い物にならないのですが、全く同じような投稿をやってくれるものに、simple-hatena-modeという同じくEmacsパッケージがありました。Emacsからはてなダイアリーに投稿する分には、hatena-diary-modeとほぼ同じ使い方が出来ます。しかしながら、hatena-diary-modeのようにサーバからローカルにデータを一括保存するような機能は実装されていないみたいです(自分が調べたところ)。

simple-hatena-modeは「はてダラ」をEmacsから呼び出し実行する実装になっているようです。その「はてダラ」は、前述の通り、「2011-06-11.txt」という形式でファイルを扱うようになっています。扱うデータの中身はほぼ同じ書式になっているようです。ほぼというのは、致命的に異なる違いがあるのですが、それについては後述します。

具体的に言うと、hatena-diary-modeのhatena-get-webdiaryで取得した日付データのファイル名を、「はてダラ」で扱えるファイル名に変換するのが、目的です。

本題ですが、次のようにコマンドライン操作で、ファイル名の変換が出来ました。

ls  201206* |xargs  rename s/\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)/\$1-\$2-\$3.txt/

具体的には、カレントディレクトリに次のようなファイルがあったとして、

20120601  20120602  20120603  20120604  20120605  20120606  20120607  20120608  20120609

上記コマンドを実行すると、次のようにファイル名が変換されました。

2012-06-01.txt  2012-06-02.txt  2012-06-03.txt  2012-06-04.txt  2012-06-05.txt  2012-06-06.txt  2012-06-07.txt  2012-06-08.txt  2012-06-09.txt

結局、どのようなことがしたいか、あるいは、どのようなことが出来るかといいますと、sedなんかのフィルターを使って、ブログの全記事において、特定の語句を特定の語句に変換して更新する、という使い道です。実際に実行はしていませんが、数年来に及ぶ数百の記事の変換が、ものの数分、あるいは数十秒で実現できるということです。

hatena-diary-modeと「はてダラ」(内部で利用しているsimple-hatena-modeも同じ)の日付ファイルの書式の違いですが、「はてダラ」の場合、ファイルの先頭一行が、その日付のタイトルになるという仕様になっているみたいです。自分が思うにこれは不都合があると思っています。これを無効にして、hatena-diary-modeと同様の扱いにするには、ファイルの先頭に空行を入れる必要があるみたいです。これもsedやfindのexecオプション、あるいはackコマンドを活用すれば、一括で変換できると思います。

ackコマンドを利用した一括変換については、こちらを参考にしてください。

ackコマンドを使ってカレントディレクトリ以下のスクリプトのシェバングを一括置換 « 日暮途遠(Linux) http://bit.ly/Lfv5Yl



Written by 廣野秀樹

2012年6月11日 at 10:59 午後

カテゴリー: Emacs

Tagged with

たまにしか使わないけど、とても便利なコマンドxargs

leave a comment »

参考:いまさらxargsの便利さを主張してみる — ディノオープンラボラトリ

タイトルの通りですが、xargsコマンドの便利さを紹介する記事を書いてみました。xargsは私が大好きなコマンドの一つで、標準入力から渡されたファイル名などを引数とみなして、別のコマンドの引数として起動するというものです。

わかりやすく紹介されています。時々、思い出したように使うことのあるコマンドですが、確かに便利です。年に数回しか使っていないと思いますが、強力なコマンドの一つだと思います。

Written by 廣野秀樹

2012年6月11日 at 9:58 午後

カテゴリー: UNIXコマンド

Tagged with

Ubuntu 12.04にLaTeX環境をインストール

leave a comment »

参考:Lazuli » [LaTeX]Ubuntu12.04LTSでIPAフォントを埋め込んだPDFを作成する

Ubuntu 12.04 LTS で LaTeX環境をインストールし、さらに IPAフォントを埋め込んだ PDF を作成します。

Ubuntu 11.10 までは以前ブログで書いた手順で正しくインストール可能だったのですが、12.04 では「ttf-ipafont」パッケージが標準でインストールできなくなってしまったので、ここにて改めて書きなおしておきます。

わかりやすく参考にさせていただいて本当にありがたいです。

以下手順のメモです。

 Texmaker、jsarticleのインストール
 sudo apt-get install texmaker
 sudo apt-get install okumura-clsfiles

IPAフォントのインストール
 sudo apt-get install otf-ipafont

シンボリックリンクの作成(一行コピペで済ませるようにしました。)
 sudo mkdir -p /usr/share/texmf/fonts/truetype &&  \
 cd /usr/share/texmf/fonts/truetype/ &&  \
 sudo ln -s /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf &&  \
 sudo ln -s /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf

「/etc/texmf/dvipdfm/jis-cjk.map」の編集(バックアップ残しています)
 cd /etc/texmf/dvipdfm
 sudo cp jis-cjk.map jis-cjk.map.back
 sudo vi jis-cjk.map

設定変更の反映
 sudo mktexlsr
 sudo update-texmf
 

Written by 廣野秀樹

2012年6月11日 at 7:01 午後

カテゴリー: LaTeX

Tagged with

Emacsの矩形選択モード

leave a comment »

参考:emacsの矩形選択モード紹介 | tech.kayac.com – KAYAC engineers’ blog

標準の矩形選択

emacsに最初から用意されている関数です。 それぞれの関数にはそれぞれキーバインドが設定されています。

コマンド 呼ばれる関数 動作
C-x r c clear-rectangle 矩形領域を空白文字に置き換える
C-x r d delete-rectangle 矩形領域を削除する
C-x r o open-rectangle 空白文字で埋まった矩形領域を挿入する
C-x r t string-rectangle 矩形領域を文字列で置き換える
C-x r k kill-rectangle 矩形領域を削除してキルリングに追加
C-x r y yank-rectangle キルリングの矩形領域を貼り付ける
C-x r r copy-rectangle-to-register レジスターに矩形領域を登録する
C-x r i insert-register レジスターに登録された矩形領域を貼り付ける

なにも設定する必要なく使うことができるのでお手軽ですが、 どの部分が選択されるかが若干わかりにくく、 通常のリージョン操作方法と異なるので覚えにくいという欠点があります。

滅多に使わないので、この標準で十分です。わかりやすくまとめられています。

Written by 廣野秀樹

2012年6月11日 at 6:37 午後

カテゴリー: Emacs

Tagged with

rbenvによるRubyのバージョンの切り替え

leave a comment »

参考:ubuntuにrbenv+ruby-buildをインストールし、rubyを切り替えられるようにする。 – KRAKENBEAL RECORDS

以下手順をメモ。

 必要なパッケージをインストール
 sudo apt-get install build-essential
 sudo apt-get install libreadline-dev libssl-dev zlib1g-dev
 sudo apt-get install libssl-dev libssl1.0.0
 sudo apt-get install git-core curl

rbenvをインストール
 git clone git://github.com/sstephenson/rbenv.git ~/.rbenv

~/.bashrcに設定情報を追記
 eval "$(rbenv init -)"
 PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
 [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"  # This loads RVM

ruby-buildのインストール
 git clone git://github.com/sstephenson/ruby-build.git
 cd ruby-build
 sudo ./install.sh

インストール可能なRubyのバージョンを確認
 rbenv install

指定したバージョンのRubyをインストール
 rbenv install 1.9.3-p194

デフォルトで使用するRubyのバージョンを指定
 rbenv global 1.9.3-p194

Written by 廣野秀樹

2012年6月11日 at 4:59 午後

カテゴリー: Ruby

Tagged with

ワイルドカード?を使った、特定のディレクトリやファイルのバックアップ対象からの除外(rdiff-backup)

leave a comment »

10分でできる簡単バックアップ環境 (rdiff-backup) – まちゅダイアリー(2008-11-17)

特定のディレクトリやファイルをバックアップから除外するときは –exclude オプションを付ける。

$ rdiff-backup --exclude '**.gz' /var/www /var/backup

 

*はワイルドカードみたいですが、なぜ二つつけているのか謎です。

rdiff-backup –exclude ‘**.txt’ ./ /var/backup/aaa/

で試してみると、確かにtxtが拡張子のファイルが除外されていました。

なお、Linuxを含めたUNIXの環境ではワイルドカードというよりファイルグロブと言った方が正確なのかもしれないです。

 

Written by 廣野秀樹

2012年6月11日 at 12:12 午後

カテゴリー: Linux

Tagged with ,

include/exclude オプションによるファイルの選択(rdiff-backup)

leave a comment »

気まぐれサーバー – rdiff-backup – ローカル/リモートのミラーと差分バックアップ-rdiff-backup-気まぐれ Wiki

include/exclude オプションによるファイルの選択 

  • すべてのファイルをバックアップしたくない場合には、–includeと–excludeオプションにより、どのファイルをバックアップするかを正確に指定することが出来ます。すべてのオプションとその意味については、マニュアルを参照して下さい。
  • この例では、無限ループを避けるために、/mnt/backupを除外します。
rdiff-backup --exclude /mnt/backup / /mnt/backup

(実は、rdiff-backupはこの例のような単純なループを自動的に検出することができます。)これは、単なる例であって、実際には /proc も除外する必要があるでしょう。

  • もっと現実的な例として、/proc, /tmp, /mntを除外します。特に、/procは絶対にバックアップしてはいけません。また、バックアップ元のディレクトリがリモートとなっています。
rdiff-backup --exclude /tmp --exclude /mnt --exclude /proc user@host.net::/ /backup/host.net
  • 複数のincludeとexcludeオプションがある場合には、先に書いた方が優先されます。以下のコマンドでは、/usr/local/binをバックアップしますが/usr/binをバックアップしません。
rdiff-backup --include /usr/local --exclude /usr / host.net::/backup
  • rdiff-backup では、rsync と同じようなワイルドカードを使うことが出来ます。すなわち、**はあらゆるディレクトリに一致し、*は/が含まれないディレクトリに一致します。したがって、
rdiff-backup --include /usr/local --include /var --exclude '**' / /backup

このコマンドは /usr/local と /var ディレクトリのみをバックアップします。シングルクオート ” は、シェルが ** を展開することを防ぐためのものであり、rdiff-backupコマンドの一部ではありません。

  • もっと複雑な例を示します。(長いので2行に分けましたが、1行です。)
rdiff-backup --include '**txt' --exclude /usr/local/games --include /usr/local
   --exclude /usr --exclude /backup --exclude /proc / /backup

このコマンドは /usr/local/games/pong/scores.txt を含むすべての txt で終わるファイルをバックアップします。–include ‘**txt’ が最優先されるからです。/usr/local/bin ディレクトリはバックアップされますが、/usr/share と /usr/local/games/pong はバックアップされません。

  • バックアップするファイルをファイル名リストで指定することもできます。たとえば、include-list というテキストファイルの中身が以下の2行だとします。
/var
/usr/bin/gzip

そのときに、

rdiff-backup --include-filelist include-list --exclude '**' / /backup

このコマンドは、/var, /usr, /usr/bin, /usr/bin/gzip をバックアップしますが、/var/log と /usr/bin/gunzip をバックアップしません。ここで、この –include-filelist のはたらきは –include とは違うことに注意して下さい。つまり、–include /var の場合には /var/log にもマッチしますが、–include-filelist の場合にはマッチしません。

  • 1つのファイルリストに、includeとexcludeを両方書くことができます。たとえば、include-list というファイル名で以下のようなファイルを作成したとします。
**txt
- /usr/local/games
/usr/local
- /usr
- /backup
- /proc

このとき、次のコマンドは2つ上の複雑な例とまったく同じことをします。

rdiff-backup --include-globbing-filelist include-list / /backup

ここで、–include-filelist のかわりに –include-globbing-filelist を使いました。これは、それぞれの行をコマンドラインで指定したと同じように解釈させるためです。そうしなかった場合には、たとえば、**txt は”**txt”というファイル名のファイルとして解釈されてしまいます。

 

~/.cacheなんかが含まれているとエラーを起こすみたいです。

引用させてもらいましたが、属性も含まれているみたいです。たまにあることです。

Written by 廣野秀樹

2012年6月11日 at 11:13 午前

カテゴリー: Linux

Tagged with

STDIN.getsで標準入力からデータの読み取りを明示

leave a comment »

rubyで標準入力とファイルからのgets | OKWave

ARGF経由で与えられたファイルからすべて読み取った後に 「標準入力」から読み取りを行いたいのなら、陽に STDIN.gets とオブジェクトを指定すべきだろうと思います。

確かにこれでうまくいきました。getsだけだと直前のARGV[0]で指定して読み込んだファイルの1行目を、勝手に読み込んでいたみたいです。

Written by 廣野秀樹

2012年6月11日 at 9:23 午前

カテゴリー: Ruby

Tagged with

Ubuntu 12.04でのPerlモジュールCrypt:SSLeayのインストール

leave a comment »

Written by 廣野秀樹

2012年6月11日 at 7:18 午前

カテゴリー: Perl

Tagged with

Emacs Lisp基礎文法最速マスター – (rubikitch loves (Emacs Ruby CUI Books))

leave a comment »

Emacs Lisp基礎文法最速マスター – (rubikitch loves (Emacs Ruby CUI Books))

この程度のプログラムならば、
わずか10行(設定込)で済みます。

(defvar file-ring nil)
(defun make-file-ring (files)
  (setq file-ring (copy-sequence files))
  (setf (cdr (last file-ring)) file-ring))
(defun open-file-ring ()
  (interactive)
  (find-file (car file-ring))
  (setq file-ring (cdr file-ring)))

そして、以下のように設定すれば今すぐ使えます。

(make-file-ring '("~/memo.org" "~/project.org" "~/gtd.org"))
(global-set-key [f12] 'open-file-ring)

お好みのファイルに置き換えて試してみてください。

これくらいのプログラムならば、10分あれば書けます。

もし、これと同じ挙動をするEmacs LispプログラムEmacsWikiにあるとしたら、それを探すのに何分かかりますか?

Written by 廣野秀樹

2012年6月11日 at 12:52 午前

カテゴリー: Emacs-Lisp

Tagged with