Monthly Archives: 8月 2013

2013-08-29 , ,

org-modeでblog(jekyll, jekyll-bootstrap, ox-jekyll.el使用)

blogをorg-modeで書くようにしました。

org-modeでblogと言うと真っ先に見つかるのが次のページです。

http://orgmode.org/worg/org-blog-wiki.html

色々方法があるみたいですが、jekyll(ジキル)を利用する方法を採用しました。
o-blogはEmacs上だけで完結するので魅力的なのですが、投稿を1ファイルにまとめなければならないらしい1 のでやめておきました。
今後は1投稿1ファイルで行きたいので。
Blorgit は凄そうなのですが、設置が面倒くさそうなので試していません。
結局、一番簡単そうなjekyllにしました。

jekyll はrubyで作られたblogの静的生成ツールです。

jekyllは通常Markdown形式で書かれたテキストを入力としますが、さすがにorgは扱えません。
でもHTMLは入力として受け付けてくれます。
なので、Emacs上でorgからhtmlへ(投稿内容部分のみを)エクスポートし、
それをjekyllで(blog用のヘッダーとかページ移動とかコメント欄とかが付いた)htmlへ変換するという手順を踏むことになります。

20130829_flow.png

orgからhtmlへのエクスポートには、ox-jekyll.el と org-publish を使用しました。

jekyllの入力ファイル(.mdや.html)には、その先頭にページの付加情報を記したyamlヘッダー2 をつける必要があります。
ox-jekyll.el はorgからhtmlを生成するときに、そのyamlヘッダーを良い感じに付加してくれます。
ox-jekyll.elorg-octopress の一部ですが、jekyllでもそのまま使えます。
タイトル、日付、カテゴリーなど、投稿の付加情報は#+で始まる特殊なコメントで指定することになります。

#+TITLE: org-modeでblog
#+DATE: 2013-08-29
#+JEKYLL_LAYOUT: post
#+JEKYLL_CATEGORIES: Computer
#+JEKYLL_TAGS: Emacs Blog
#+JEKYLL_PUBLISHED: true

blogをorg-modeで書くようにしました。

まあ、1投稿1ファイルにするならこんな所でしょう。

タグを指定する機能が無かったので、categoriesと名の付く部分をコピーしてtagsに置き換えて対処しました。

ヘッドラインをタイトルにして、プロパティで付加情報を指定するような方法も考えられます。例えば次。

* blog-by-org-mode
 :PROPERTIES:
 :title: org-modeでblog
 :date: <2013-08-29 Thu>
 :categories: Computer
 :tags: Emacs Blog
 :published: true
 :END:
 blogをorg-modeで書くようにしました。

org-jekyll なんかはこの方向みたいですね。
この方法はrefileがやりやすそうです。
つまり、プライベートなメモ書き用orgファイルに下書きをして、公開したいと思ったらC-c C-wでblog用のファイルへ移動してしまえばいいわけですね。
でも1投稿1ファイルのスタイルでこれをすると、ヘッドラインの前に何か書いてあったらどうするかとか、ファイル名と英字タイトルが一致していなければならないとか、新しいファイルを作るならどのみちrefileでは対応しきれないとか、色々問題がありそうです。

org-publishはorg-modeに標準で付いてくるエクスポート機構です。
blogのソースorgファイルが入ったディレクトリからjekyllの_postsディレクトリへorg-jekyll-publish-to-htmlを使用してエクスポートするよう、org-publish-project-alistを設定しておきます。
そうすると、簡単なキー操作だけで変換処理が実行できます。
ox-jekyll.el を使ったorg-publishの設定については、次のサイトを参考にしました。

jekyll自体はCygwin上のruby gems経由でインストールできました。
posix-spawnを開発最新版にしなければならなかったり3
pygmentsを0.5.0へダウングレードしなければならなかったり4 しましたが、
参考になるサイトがいくつかあったのでそれほど苦労はしませんでした。

jekyllだけではblogに必要な様々な機能を設定するのが面倒なので、jekyll-bootstrapを使います。
jekyll-bootstrapを展開し、_postsディレクトリに投稿となるhtmlを2013-08-29-example.htmlのような形式で配置すれば準備完了です。
あとは、jekyll buildすれば_siteディレクトリに結果が出力されるので、それをサーバにrsyncか何かでコピーすればOKです。

残りの問題:

  • 投稿ワークフローの改善
  • 生成が遅い

投稿作業の流れは今のところ、

  1. org/_posts/2013-08-30-title.orgに必要なものを書く(新規で書く場合だけでなく、既存の文書からコピーまたは移動して投稿したい場合もある)
  2. org-publishまたはorg-publish-current-fileする。
  3. jekyll serve –watch –limit_post 10 で生成し、ブラウザからlocalhost:4000を見て確認
  4. update.sh起動(jekyll build –safe && rsync -v -rz –checksum –delete _site/ user@example.jp:/blog/ )

のように複雑です。何とかしないと。

生成が遅いのはjekyllが静的生成というコンセプトを掲げている以上仕方がないところもあります。
jekyllは毎回サイト全体を生成し直します。
一つの投稿をしただけでも全体を作り直します。
一見、投稿が一つなら一つのファイルだけを生成すれば良さそうに思いますが、
アーカイブページ、カテゴリーページ、タグページ、ページの前後ボタン、関連ページリンクといったものがあると、
他のファイルも再生成する必要が出てきます。
依存関係を厳密に定義できれば最小限のファイルだけ再生成するようにも出来るでしょうが、
設定はかなり面倒になるでしょうね。

2013-08-26

2013-07新番組リスト

今期も視聴数はかなり少なくなっています。

今気に入っているのは、たまゆら、Free!あたりでしょうか。
特にたまゆらは、主人公が本格的に写真に取り組むようになって面白くなってきました。
正直おじさんには眩しすぎます。

新番組:

  • ×07/01(月) 25:00~ TOKYO MX 犬とハサミは使いよう
  • ×07/02(火) 24:30~ TOKYO MX BROTHERS CONFLICT
  • ×07/02(火) 25:40~ テレビ東京 義風堂々!! 直江兼続 ~前田慶次酒語り~
  • 07/03(水) 22:30~ TOKYO MX たまゆら ~もあぐれっしぶ~ (第2期)
  • 07/03(水) 24:30~ TOKYO MX Free!
  • ×07/04(木) 25:29~ TBS 特例措置団体ステラ女学院高等科C3部
  • ×07/04(木) 25:59~ TBS ローゼンメイデン 新作
  • ×07/04(木) 26:54~ 日本テレビ 帰宅部活動記録
  • ×07/05(金) 24:00~ TOKYO MX 空の境界 (再編集版)
  • ×07/05(金) 25:53~ テレビ東京 マジでオタクなイングリッシュ!りぼんちゃん the TV
  • ×07/05(金) 25:55~ TBS ダンガンロンパ 希望の学園と絶望の高校生
  • ×07/05(金) 26:25~ TBS 恋愛ラボ
  • ×07/06(土) 23:30~ TOKYO MX 幻影ヲ駆ケル太陽
  • ×07/06(土) 24:00~ TOKYO MX 『物語 シリーズ』セカンドシーズン
  • ×07/06(土) 24:30~ TOKYO MX サーバント×サービス
  • ×07/06(土) 25:30~ TOKYO MX 神さまのいない日曜日
  • ×07/07(日) 22:00~ TOKYO MX 有頂天家族
  • 07/07(日) 24:00~ TOKYO MX ファンタジスタドール
  • 07/07(日) 24:30~ TOKYO MX ロウきゅーぶ!SS (第2期)
  • ×07/07(日) 25:05~ テレビ東京 魔界王子 devils and realist
  • ×07/08(月) 24:30~ TOKYO MX きんいろモザイク
  • ×07/08(月) 25:30~ TOKYO MX ハイスクールDxD NEW (第2期)
  • ×07/08(月) 25:35~ テレビ東京 神のみぞ知るセカイ 女神篇 (第3期)
  • 07/08(月) 26:05~ テレビ東京 私がモテないのはどう考えてもお前らが悪い!
  • ×07/10(水) 22:27~ TOKYO MX にゅるにゅる!!KAKUSENくん
  • ×07/10(水) 25:00~ TOKYO MX ブラッドラッド
  • ×07/11(木) 25:10~ フジテレビ 銀の匙 Silver Spoon
  • ×07/12(金) 25:00~ TOKYO MX 神次元ゲイムネプテューヌ
  • ×07/12(金) 25:58~ 日本テレビ ガッチャマン クラウズ
  • ×07/13(土) 23:30~ テレビ東京系 君のいる町
  • ×08/18(日) 13:00~ 公式サイト 俺の妹がこんなに可愛いわけがない。(第2期) 第14話~最終回第16話

前期からの継続:

  • 月 19:30 TX △アイカツ! (10/08~)
  • 月 25:30 TX LINE OFFLINE ~サラリーマン~ (※毎週 月,火,水 の帯で5分枠)(01/07~)
  • 火 25:00 MX ゴルゴ13(再放送)
  • 水 23:25 ETV ガッ活! 第2シリーズ
  • 土 06:55 MX がんばれ!おでんくん (01/12~)
  • 土 09:30 TX △ジュエルペット ハッピネス(04/06~)
  • 土 17:30 NTV ○ 宇宙兄弟
2013-08-12

複数の文字符号化方式が混在しているときのmagit文字化け対策コード(magit 1.2.0用)

64ビット版cygwinを入れたらgit-encwrapperがどうやっても正しく動かなくなってしまったので、諦めてmagit側を修正することにしました。

次のelispをロードすることで、magit 1.2.0がgitのencoding属性を使うようになってくれます。

差分のファイルヘッダー部分を認識して各ファイルパート毎に git check-attr encoding でエンコーディングを取得し、そのエンコーディングで decode-coding-region(git diff時) や encode-coding-region(git apply時) を使って変換します。

ファイルのエンコーディングは自動的に判別するわけではありませんので、必ず .gitattributes でencoding属性を設定してください。

(2014-01-29追記:magitの最新版で上のコードは使えなくなったので、git-encwrapperを復活させました)