意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

Debian: 「libmysqlclient_r.so.16: cannot open shared object file」って言われたときの対処

GitLabをインストールしていたら、こう言われました。

 Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` 
(libmysqlclient_r.so.16: cannot open shared object file: No such file or directory -
 /home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/mysql2-0.3.11/lib/mysql2/mysql2.so)

たぶん、Debianを最新版にしたので、このバージョンのライブラリがないのだと思われます。

対処

debian libmysqlclient_r.so.16」ググったら以下のページが見つかったので、指示に従う。 http://packages.debian.org/squeeze/libmysqlclient16

  1. /etc/apt/sources.listに以下を追加: deb http://security.debian.org/debian-security squeeze/updates main
  2. sudo apt-get update
  3. sudo apt-get install libmysqlclient16

これで解決しました。

latexdiffを日本語LaTeX文書でうまく扱えるようにする

今,後輩の卒論を添削しているのですが,LaTeX文書をきれいに比較(diff)してくれるようなものを探してたら, latexdiff という便利ツールを見つけました.

Pascal Junod » LaTeXdiff によると,こんな感じで綺麗にdiffできるようです.

  • 赤字:新しい原稿で消した箇所
  • 青字:新しい原稿で追加した箇所

f:id:sky-y:20130203005811p:plain

インストール

私はMacでTeX Live 2012(MacTeX - TeX Users Group)を入れていたせいか,いつの間にかlatexdiffが入っていました.

必要ならソースからコンパイルもできるそうです.手順は以下を参照.

日本語LaTeX文書に対応させる

英文LaTeX文書であれば,以下の要領でいけると思います.

$ latexdiff input1.tex input2.tex > output.tex
$ platex output.tex
$ platex output.tex
$ platex output.tex
$ dvipdfmx output.dvi

ただし,日本語LaTeX文書だとUnicodeのNFD/NFC(濁点などを分離する・しない)の問題で, 余計なところまで差分と見なされてしまう場合があります.

参考:紹介マニアどらふと版: Mac OS X におけるファイル名に関するメモ(NFC, NFD等)

そこで,この問題を解決しつつlatexdiffを便利に使えるようにするシェルスクリプトを作りました.

まず,iconvをインストールしてください. MacならHomebrew, Macportsなどで,Linuxならapt-getやyumなどでsearchすれば見つかると思います. Homebrewには無いようです.無い場合はソースからコンパイルしてください.申し訳ございません.

次に,gistに置いてあるスクリプトをjlatexdiffという名前で保存し,PATHの通っているところに放り込んでください(私は~/binに入れています).

sky-y / jlatexdiff.sh : gist

私はlatexmkを使っているのでこれがデフォルトですが, 使っていない人はスクリプトのplatex部分をコメントアウトして使ってください.

また,うちで使っているLaTeXUTF-8を受け付ける仕様です. 他の文字コード用のを使っている人は,iconvを使って適宜スクリプトをいじってください.

使い方は以下の通りです.

$ jlatexdiff [old file name].tex [new file name].tex

不具合があれば,ご報告いただけると幸いです. なお,このスクリプトは以下のサイトを参考にしました.

latexdiffで幸せな添削ライフを!


おまけ: latexmkの簡単な紹介

latexmk は,

  • めんどくさい複数回コンパイルを自動的にやってくれる
  • texファイルから一気にpdfまで作ってくれる

という神ツールです.余裕がある人は,設定すると幸せになれます.

参考:

Wordpress: BackWPupがInternal Server Errorになってしまう件

私は別のブログでWordpressを使っており、 バックアップのためにBackWPupというプラグインを使おうとしました。

参考: 今こそ安心できるWordPressバックアップを!復旧作業まで実際にやってみたWordPress丸ごとバックアップ法 | 情報科学屋さんを目指す人のメモ

しかし、上記リンクのように設定して「Run now」とすると、 「Error 500: Internal Server Error」となってしまい、 もう一回リロードするとLog画面に何も出ない状態(真っ黒)で止まってしまっていました。

バックアップ先ディレクトリの所有ユーザ名をチェックしよう

悩んだ挙げ句ずいぶん放置したのですが、先日ふと気づいてディレクトリの所有ユーザやパーミッションをチェックしたところ、ユーザがrootになっていました。

$ ls -ld /var/www/blog/BackWPup/ # バックアップディレクトリ
drwxr-xr-x 2 root root 4096 2013-01-03 11:27 BackWPup/

そこで、ユーザをWordpress専用ユーザ(ここではwww-data)に変更しました。

$ sudo chown www-data:www-data BackWPup/  

これでもう一度「Run now」したところ、無事に動きました。

もしBackWPupでトラブルになっている方がいれば、バックアップ先などのディレクトリの所有ユーザ名やパーミッションをチェックしてみて下さい。

はてなブログに移行しました

はてなブログに移行しました

僕はブログを以下のように使い分けていました。

そのうち、技術系ブログとして今まではてなダイアリーを使っていましたが、この度そのブログをはてなブログに移行しました。

理由は、Markdown記法が使えるためです。 私は最近Markdownでものを書くことが多く、こちらの方が都合がよいと感じたのです。

特に、ソースコードのシンタックスハイライトが使えるようになったとのことで、移行を決意しました。

参考:はてなブログの markdown 形式で ソースコードハイライト - memo @atotto

これからも当ブログをよろしくお願いいたします。

Advent Calendar 2012 俺用まとめ

俺による俺のための俺のAdvent Calendarまとめ。やや研究寄りです。

Advent Calendarの季節がやって来ました!
Advent Calendarは技術系コミュニティから火がついた、
「あるテーマにそって12/1から12/25まで1日に1つずつブログ記事を公開するお祭り」です。

自分が主催してるやつ

プログラミング以外について、ドキュメント作成を効率化するTipsを集めるAdvent Calendarです。

主に論文や報告書など、物書きや事務処理、アイデア整理などに関するツールやTipsならだいたい何でもOKです。

Markdown, Org-Mode, LaTeX, HTML/XML, アウトラインプロセッサ, マインドマップなどなど。
まだまだお待ちしています。

文書系

  • TeX & LaTeX Advent Calendar : ATND
    • 敵だっ!! 嘘です、仲良くやりましょうヽ(´ー`)ノ
  • #LOVEFONT Advent Calendar 2012
    • 特定のフォントを愛する人が、そのフォントの一体どこがいいのか、どうしてそのフォントでなくてはダメなのかを語る、フォントについてのAdvent Calendarです。

その他

Emacsのkey-combo.el: haskell-mode用設定のメモ

id:uk-ar さんのkey-combo.elを設定しました。

key-comboを使って読みやすいコードを書く (Emacs Advent Calendar 8日目) - むしゃくしゃしてやった

その際、haskell-mode用のローカルkey-combo設定がうまくできなかったのですが、
解決したので、その顛末をメモ書きしておきます。

前提

私はinit-loader.elで設定ファイルを分割しています。
設定ファイルは以下の順番で読み込まれます。

  • init.el
    • load-pathの設定
    • init-loaderのロード
    • 変数の設定: custom-set-variables

haskell-modeのインデント設定とadd-hook

haskell-modeではインデントの種類を3種類から選べます。
そのためにhaskell-mode-hookに追加する必要がありますが、
私の環境ではなぜかadd-hook関数で以下のように書いても正しく読み込まれませんでした。

;; 36_haskell.el
;; NG: 有効にならない
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

haskell-modeでインデント設定が正しくない場合、
インデントしようとするとヘルプ画面が出て設定の仕方を教えてくれます。
渋々、出てきたヘルプ通りにinit.elで直接custom-set-variablesを使って書くと、
正しくインデント設定が読み込まれました。

;; init.elの最後
(custom-set-variables
;; ...
 '(haskell-mode-hook 'turn-on-haskell-indentation)
;; ...
)

これが、災いの元でした。

add-hookが上書きされてしまう

init.elの最後でcustom-set-variablesでhookを設定してしまうと、
add-hook関数で追加しても設定が上書きされてしまいます。

;; 36_haskell.el
;; NG: init.elで上書きされて動かない
(add-hook 'haskell-mode-hook
	  '(lambda ()
	     (key-combo-define-local (kbd "-") '("-" " -> " "--"))
	     (key-combo-define-local (kbd "<") '("<" " <- " " <= " " =<< " "<<" "<"))
	     (key-combo-define-local (kbd ">") '(">" " >= " " >>= " ">"))
	     (key-combo-define-local (kbd "=") '("=" " = " " == " "=="))
	     (key-combo-define-local (kbd ":") '(":" " :: " "::"))
	     ))

key-comboも正しくadd-hookさせる

そこで、以下のように書き換えます。

;; 36_haskell.el

;; key-comboの設定用関数
(defun my-haskell-key-combo ()
  (key-combo-define-local (kbd "-") '("-" " -> " "--"))
  ;; (key-combo-define-local (kbd "<=") '("<="))
  (key-combo-define-local (kbd "<") '("<" " <- " " <= " " =<< " "<<" "<"))
  (key-combo-define-local (kbd ">") '(">" " >= " " >>= " ">"))
  (key-combo-define-local (kbd "=") '("=" " = " " == " "=="))
  (key-combo-define-local (kbd ":") '(":" " :: " "::"))
  )

;; 後でまとめてadd-hookするための関数
(defun my-haskell-add-hook ()
  (turn-on-haskell-indentation)
  (font-lock-mode)
  (my-haskell-key-combo)
  )
;; init.elの最後
(custom-set-variables
 '(haskell-mode-hook 'my-haskell-add-hook)
  )

これで、無事にkey-comboがうまく動きました。

XMorgDown:マイント&#12441;マッフ&#12442;をOrgやMarkdownに変換するスクリフ&#12442;ト

XMindのマインドマップ(.xmind)をPandoc経由でいろんなドキュメント形式に変換するRubyスクリプトを作りました。

ダウンロード先:sky-y/xmorgdown · GitHub

Pandocで出力できるドキュメント形式

Pandoc - About pandoc より引用

HTML formats: XHTML, HTML5, and HTML slide shows using Slidy, Slideous, S5, or DZSlides.
Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML
Ebooks: EPUB
Documentation formats: DocBook, GNU TexInfo, Groff man pages
TeX formats: LaTeX, ConTeXt, LaTeX Beamer slides
PDF via LaTeX
Lightweight markup formats: Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile

必要なライブラリ・ソフトなど

  • Ruby 1.9.3 以上
    • rvmの使用をおすすめします
  • Pandoc 1.9.4.2 以上
    • インストール方法はこちらを参照: Pandoc - Installing
    • いずれかの方法でインストールできます:
      • cabal を使ったインストール (Haskell Platform使用、個人的におすすめ) or
      • Pandoc Package Installer (Haskell Platform不使用)
  • Nokogiri (RubyXMLパーサ)
    • インストール方法はこちらを参照: Nokogiri
    • homebrew 0.9 は問題があるので、上記のURLを読んでください
  • zipruby (winebarrel / Zip/Ruby / wiki / Home — Bitbucket)
    • 以下のコマンドでインストール: gem install zipruby
    • rvm使用時に動作しない場合は、rvmのバージョンをよく確認してください

使い方

$ ruby XMorgDown.rb [options] input.xmind
    -o, --output FILE                出力ファイル名
    -t, --to=FORMAT                  出力フォーマット: markdown, org, html, latex, rst,  ... 
    -w, --write=FORMAT               同上
        --pandoc-options=OPTIONS     Pandocのその他のオフ&#12442;ション ("--atx-headers"のように二重引用符て&#12441;くくってくた&#12441;さい)
    -h, --help                       簡単なヘルフ&#12442;
  • フォーマットとPandocのオプションについては以下を参照:

使用例

サンプルファイルは samples/ ディレクトリにあります。

Example 1 (寿限無)
ruby XMorgDown.rb -t markdown -o test1.md samples/test1.xmind --pandoc-options="--atx-headers"
  • Markdown形式(ATX-headeredスタイル)の"test1.md"を生成します

テスト用ファイル

  • 元のXMindファイル: test1.xmind (test1.png as image)
  • サンプル出力 (Org File): test1.org
  • サンプル出力 (Markdown File): test1.md
オフ&#12442;ション "--atx-headers"の意味: HTMLヘッタ&#12441; "<h1>" と "<h2>" に相当するMarkdown出力として # と ## を使ったスタイルを使います
    • これを付けない場合は、下線を使ったヘッダ形式がデフォルトになります
Example 2 (Lorem Ipsum)
ruby XMorgDown.rb -t org -o test2.org samples/test2.xmind
  • Org-modeスタイルの"test2.org"を生成します


テスト用ファイル

  • 元のXMindファイル: test2.xmind (test2.png as image)
  • サンプル出力 (Org File): test2.org
  • サンプル出力 (Markdown File): test2.md