2014-07-04

bpe : org-mode で Blogger


Markdown で Blogger

Blogger は、残念ながら Markdown に対応してないんですよね。
Blogger で 無理やり Markdown を使うために、今までは Tips - MarkdownをHTMLにembedする : 404 Blog Not Found の方法を使ってました。
簡単に言うと、textarea 内に Markdown を書いて、js で HTML に変換するってだけです。

この方法のいいところは、Markdown -> HTML 変換なしで Markdown のまま post できることです。
自分で HTML に変換してから post だとそのワンステップ自体も、後で Markdown と HTML を同期するのも面倒ですから。

この方法の問題は、スマートフォン等のモバイルデバイスでうまく表示できないことです。
そりゃナシだろってくらい致命的な問題ですが、これまではそれを知ってて無視してました。
アリテイに言うと、スマートフォンからのアクセスを捨ててたわけです。
今ではたしかに大問題ですが、その昔はそれほどでもありませんでしたし。
ていうかもっと正直に言うと、すっかり忘れてたんです。
最近ひさしぶりに自分のブログを iPhone で見て、そういやそんな問題あったなと。

それで、そろそろなんとかしなきゃならないなということで、このエントリを書くにいたったわけです。

Blogger で Markdown を使うには、StackEdit というテもあります。
StackEdit は Web 上の Markdown エディタで、入力した Markdown を直接 (Blogger を含む) blog 等のサービスに post する機能があります。

ただ、残念ながら HTML タグが含まれているとうまく変換できなくなってしまう問題がありました。
HTML を埋め込めない Markdown って …。
それに、ブラウザ上のエディタなんて、かったるくって使ってられないですよね。

tumblr なら、 Markdown に対応してるんですよね。
tumblr も使ってる のでそっちに一本化してもよかったんですが、
放置してどうしようか迷ってるうちに、org-mode で Blogger に post するテを発見したので、そっちを採用することにしました。

考えてみたら、Markdown より org-mode のほうが more better ですよね。
Markdown なんて、表現力でいったら org-mode のサブセットに過ぎないし、org-mode は HTML エクスポートくらい普通にできるんだし。
なんでスッとそっちを思いつかなかったのか、不思議です。
とはいえ、Tips - MarkdownをHTMLにembedする : 404 Blog Not Foundを採用した当時は、まだ emacs 使ってなかったのでしょうがないんですが。

ただ、HTML エクスポートができるとはいえ、org-mode で快適に Blog を書くためにはもう一つ条件があります。
HTML への変換のステップをなくすことです。
幸い、変換 -> post を一気にやってくれる elisp を 作ってくれてる人 がいたので、そこは No 労力でクリアです。

org-mode で Blogger

org-mode から Blogger に post するには、bpe を使います。

もし、まだ googlecl をインストールしてなければ、gdata-python-client と一緒にインストールします。
で、いったん
$ google blogger list
でもして、認証を通しておきます。

ここでハマったのが、googlecl が PYTHONPATH に設定したパスを見てくれないことでした。
そのせいで、gdata を import してるとこで落ちてしまいます。
結局、googlecl の shebang のパスと僕の環境の python のパスが違ったという、なんでもないことが原因でした。
brew とかで適当に python をインストールしたまま放置してると、こんな簡単なことでつまずいてしまいますのでご注意を。

あとは emacs の設定ファイルに
(require 'bpe)
(require 'htmlize nil 'noerror) ; to fontify source code block on your blog.
(setq bpe:account "your mail address on google blogger")
(setq bpe:blog-name "your blog name")
(define-key org-mode-map (kbd "C-c C-p") 'bpe:post-article)
(define-key org-mode-map (kbd "C-c C-i") 'bpe:insert-template)
;; For Japanese, default is $LANG environment variable.
(setq bpe:lang "ja_JP.UTF-8")
と書けば準備 ok 。

org ファイルを作ったら、上の define-key にあるとおり C-c C-i すればヘッダのテンプレートを挿入してくれます。

こんなかんじ
#+TITLE:
#+OPTIONS: toc:nil \n:nil num:nil
#+TAGS:
#+AUTHOR:

タイトル、タグ、および作成者 (必要ならオプションも) を記入したら、あとは記事を書いて C-c C-p で post するだけですね。

しばらくはこのまま org-mode -> Blogger を使ってみて、もしイマイチだったら 他の elisp を試してみるか、org-mode から Tumblr に post するテもあるようなので Tumblr に引っ越すかも。

2014-06-30

Heroku Buildpack Common Lisp を作りました : heroku labs:enable user-env-compile が廃止されたことについて

これです。
heroku labs:enable user-env-compile の廃止に対応するために、heroku-buildpack-cl を fork しました。

heroku labs:enable user-env-compile の廃止について

Buildpack を使うほうの対応は簡単で、単に heroku labs:enable user-env-compile を使うのをやめるだけです。
既に設定していた heroku config:add は、そのままでちゃんと compile プロセスに渡されます。
Buildpack を作るほうでは、 bin/compile の新しい第 3 引数に渡されてくる ENV_DIR ディレクトリから環境変数を読み込む必要があります。
やりかたは、 Buildpack API | Heroku Dev Center
に記載されている、以下のコードを参考にすれば (というか、まるコピで OK) np です。
export_env_dir() {
  env_dir=$1
      whitelist_regex=${2:-''}
  blacklist_regex=${3:-'^(PATH|GIT_DIR|CPATH|CPPATH|LD_PRELOAD|LIBRARY_PATH)$'}
      if [ -d "$env_dir" ]; then
    for e in $(ls $env_dir); do
      echo "$e" | grep -E "$whitelist_regex" | grep -qvE "$blacklist_regex" &&
          export "$e=$(cat $env_dir/$e)"
      :
    done
  fi
}

Heroku Buildpack Common Lisp について

サンプルアプリ
も用意したので、その readme を読んでもらえれば、簡単に動くサンプルが手に入ります。
…だけではさみしいので、以下、日本語で手順を書いときます。
  1. もしまだ Heroku のアカウントを持ってないなら、まず Heroku のアカウント を作って、Heroku Toolbelt をインストールしてください。
  2. サンプルアプリを fork してください。
  3. cd heroku-cl-example してください。
  4. Heroku Buildpack Common Lisp を使って、Heroku アプリを作ってください。
    こんなかんじです。
    heroku create -s cedar --buildpack https://github.com/craftsmanship/heroku-buildpack-cl.git
  5. Common Lisp の実装を選択してください。
    heroku config:add CL_IMPL=sbcl または heroku config:add CL_IMPL=ccl
  6. Web Server を選択してください。
    heroku config:add CL_WEBSERVER=hunchentoot または heroku config:add CL_WEBSERVER=aserve
  7. SBCL のソースエンコード問題を回避するには、エンコードを指定してください。
    heroku config:add LANG=en_US.UTF-8
  8. デプロイしてください。
    git push heroku master
これだけです。
Cloud で Common Lisp を使いたいと考えている人は、利用してみてください。

2014-06-26

プログラミングClojure 第2版

Lisp 方言なので、Lisper なら理解するのに苦労はない。
Java を知ってれば、なおよい。
今 (2014/6)、PaaS で最もスムーズに利用できる Lisp 族といえば Clojure というところに、この本の価値がある。

2014-06-22

Gaelyk で日程調整アプリ Any Day 作りました

Any Day とは

候補日を設定しといて、参加者に URL を教えとけば、各自の希望日を集められるというものです。

なぜ作ったのか

奥さんに相談されて、そういうサービスをあれこれ探してみたんですが、どのサービスもいまいちマッチしなくて使えませんでした。
なので、もうちょっとだけ自由がきくものを作ろうと。

なにでできているのか

おもに Gaelyk + jQuery + Bootstrap でできてます。

ちっさい

  • *.groovy
    251 行 5788 文字
  • *.gtpl
    516 行 21042 文字
という、非常に小さな規模です。
行数や文字数を少なくしようという努力は、とくにしてないにもかかわらずです。
アプリ自体ごくシンプルなことしかしてないですが、それにしてもこれほど小さくまとまってるのは、Gaelyk のおかげです。

スピーディ

ここまでに使った時間は、たぶん延べ一週間あるかないかだと思います。
Gaelyk を採用したのは初めてなので、次からは最初の少しの学習コストもなくなり、さらにスピーディになると思います。

ちょっとしたワナ

i18n プラグインがちゃんと使えてたら、もうちょっと早くあがったかも。
ローカルでは普通に動くのに、App Engine 上で動かすと、文字化けちゃってダメでした。
試行錯誤のすえ、けっきょく多言語対応自体を先送りにしました。
どうやったらうまく動くのか、誰か教えて欲しいです。
あと、言われてみれば「なるほど、そりゃそうだ」なんですが、GaelykjQuery 使おうとして一瞬驚いたのが、”$”の扱いです。
GaelykGTPL (スクリプトレットを含む、JSP っぽい出力テンプレート) は、ざっくり言うとファイル全体を GString として扱います。
“$” 文字は jQuery (あるいは類似の JavaScript ライブラリ) を使用すると頻出するキーワードですが、これは同時に GString 中に式を埋め込むために使われる文字でもあります。
Groovy の経験のある方はピンときたかもしれませんが、埋め込み式をあらわすもの以外の “$” は、すべて “\” でエスケープする必要があります。
幸い、このことは検索すればすぐにひっかかってくるこの議論を見れば、すぐに理解できます。
おかげで、それほど時間をとられずすみました。
それ以外は、すごくスムーズに作れました。
以前 Grails で家庭内イントラアプリを作ったことがあって、そのときもさくさくだと思ったもんですが、Gaelyk はさらにすごいです。
サイト規模とかプラットホームとか、ターゲットが違うので単純に比較することはできませんが。
Gaelyk 、楽しいです。

2013-02-28

テキストエディタ

Related Posts Plugin for WordPress, Blogger...