2011年12月25日日曜日

LaTeXを更に手軽に書けるようにしてみた@MilkTeX

個人的にひっそりと開発しているLaTeXのトランスコンパイラMilkTeXですが 、実験レポートを書いていて不便だった点をいろいろと改良しました。

表のセルを直感的に結合

LaTeXで表のセルを結合しようとするとmultirowを使って
\begin{tabular}{|c|c|c|}
\multirow{3}{|c|}{結合}\\
a & b & c \\

のように書かなくてはならないのですが、なんともわかりにくい!

というわけで、「+」を使って、直感的にセルを結合できるようにしてみました。 セルの区切りに「/」ではなく、「+」を使用するとそのセルを結合します。 更に、+を左に固めれば左寄せ、右に固めれば右寄せになります。

@tabular |c|c|c|:
    --
    1/2/3
    左寄せ++
    ab+/c
    +中央寄せ+
    d/e+f
    ++右寄せ
    gh+/i
    --

特殊単語でいろいろ手軽に記述

先頭が特殊な記号で始まる単語(次の空白文字までの部分)が、勝手にLaTeXタグに変換されます $で始まる単語は、引数を取らないタグになります。要するに\latexみたいな記号を 前のバージョンより、手軽に書けるようになりました。

数式モード中で先頭が_, ^で始まる単語は添字として扱われます。

更に先頭が -> で始まる単語はラベル参照となります。

  • @latex;=$latex→\latex
  • a_x, a_x+1 ^2 , a_x_k+1 →a_{x}, a_{x+1} ^{2}, a_{x_{k+1}}
  • 図->label→図\ref{label}

題名とラベルの指定を一括

なにかブロック要素の後に題名とラベルをつけるのはよくあることなので、 @figure<題名|ラベル> []のように指定することで勝手に題名とラベルを付けてくれます。

startdocumentタグ

documentタグのブロックのために、延々タブを1つ下げつづけるのは面倒なので、 startdocumentタグを用意しました。@startdocumentと書いた後は、ファイルの終わりまで、 自動的にdocument要素として出力されます。

サンプル

実際にどんなふうに変換されるか、サンプルはこちら

2011年12月24日土曜日

Google Bookmarks 拡張機能比較!

実験のレポートで忙しいのですが、どうも忙しいと片付けをしたくなるもの。。。特に最近は実験に限らずwebで調べながら作業することも多いので、見たいページを放置してたら、タブが30個なんてこともザラになってきました。こんな時こそ、Bookmarkをうまく活用したいものですが、 ChromeデフォルトのBookmarkはあまりにも使いにくい・・・。GoogleBookmarkもそのままだとごちゃごちゃしてる上、登録するにも何するにもページを移動しまくらなきゃなりません

なので、使いやすいBookmark用のエクステンションを探してみることに

ひとまず、評価がそこそこの拡張機能を落としまくってみました。どうせ無料だし。 個人的に評価基準として重視したのは、

  • ページを移動しなくていいか
  • 検索しやすいか
  • 見やすいか
  • 手軽さ
ってなとこです。

シンプル Google ブックマーク★★

個人的な感想としては微妙・・・検索もできませんし、振り分けも単純にタグで分かれてるだけです。ついでに登録画面も別で開いちゃいます。オプションもソート順序のみ。ただ、タブが開くときのうにゃっとした感じとか、デザインは個人的に結構好きです。

SimpleGoogleBookmarks★★★★

なかなかの使い勝手の良さです。登録もポップアップの中で行えますし、 特に素晴らしい点が、ラベルの扱いやすさです。登録時にも、既存のラベルをどんどんクリックしていけば、 すぐさまラベル付が完了しますし、検索時にも、ラベルをどんどんクリックするだけで複数のラベルで絞込み検索をかけられます。 このへんは、使った拡張機能の中で一番の出来でした。ですが、致命的な問題は、表示が割りとあちこち崩れていることと、 ページ名を登録時に自動で読み込んでくれるのはありがたいのですが、読み取り方がかなり雑で、 アドレスがそのまま登録されたり、変なところに改行がはいって登録されて表示がめちゃくちゃになったりします。 このへんが無ければかなりいいのに・・・残念。

Google bookmarks★★★★★

かなりおすすめです。デザインも綺麗ですし、操作性もよく、スイスイ動きますし、登録・検索・移動をすべてポップアップの中でこなせます。 こちらはデザインが崩れることもありませんし、登録も正常に行えます。当然、ラベルの入力の補完も自動で行なってくれます。 欲を言えば、もうすこし、詰まった感じがなくなればいいのと、SimpleGoogleBookmarksの複数タグ選択機能が付いていれば完璧なのですが・・・。

BoogleMarks★★★★★

こちらもおすすめです。機能的にはGoogle Bookmarksとほぼ同じ。正直好みの問題かと。こちらのほうが、ブックマークをツリー形式で表示してくれるのでわかりやすい人はわかりやすい。あと、セッションを保存という謎の機能がありますが、ちょっと触っただけなのでよくわかりません・・・もしかすると、スゴイ機能なのかも・・・。オプションもかなり充実していますが、MouseOver機能はお勧めしません。ツリーが開きまくって、分けわかんなくなります(汗

Google Bookmarks Browser★★★

こちらも複数ラベル選択可能です。ただし、登録画面は別画面になります。SimpleGoogleBookmarkとくらべると、デザインはシンプルかつまとまっていて綺麗です。ただし、絞り込み時に選択候補から存在しない組み合わせを除外してくれないので、どの組み合わせのラベルが残っているのかよくわかりません。

まとめ

個人的には、Google bookmarksBoogleMarksがおすすめです。ただし、これらにはラベルの複数選択機能がないので、1つの拡張機能を使うことにこだわらずSimpleGoogleBookmarksあたりを併用すると、更に便利かもしれません。

2011年12月22日木曜日

さくらインターネットからpythonでメール送信

はじめに

仕事とは別件で、さくらインターネット共用サーバーでメーリスの自動登録システムを組んだのですが、 その時、メールの送信でつまずいたので記録しておく。

pythonで書いてありますが、他の言語でも参考にはなるはず。


まず、基本的には、下記のサイトの
Pythonでメールを送信したい人のためのサンプル集

に書いてある方法を組み合わせれば大丈夫なのですが、いくつか注意点があります。

まず、さくらのSMTPサーバーは、一般的な25番ポートではなく587番ポートを使用します。 25番ポートからでも送信できるようですが、25番ポートは迷惑メールなどでよく使われるらしいので、587にしておくのが無難だと思われます。 そして、TLSという方式で認証を行なってから送信します。 まあ、要するに、上記のリンク中の「gmailを使って送信してみる」の方法で行えば問題無いのですが、 送信用のアカウント(メールアドレス)をどのように準備するかを紹介します、

送信用アドレスの作成

まずは、コントロールパネルにログインし、管理画面の「メールアドレスの管理」を選択します。

そして、メールアドレス名とパスワードを設定し、登録します。このとき設定したパスワードはのちのち使用するので、忘れないようにしてください。これだけで準備は完了です。

コードを書く

さて、いよいよ送信用のプログラムです。先程も述べたように、基本的には上記サイトの方法で問題ないですが、 設定が少し厄介です。まず、SMTPサーバーとの接続は、さくらインターネットのアカウント(なんとか.sakura.ne.jp)で行います。 そして認証は、先ほど作成したメールアドレス名と先ほど設定したパスワードを使用します。

あとは、上記のサイトに従って設定すれば、送信できます・・・と言いたいとこですが、じつは上記のサイトの「日本語を含んだメール」の設定には 不備があります。msg = MIMEText(body, 'plain', encoding)をmsg = MIMEText(body.encode(encoding), 'plain', encoding)に書き換えてやる必要があるみたいです。そうしないと、Unicode.DecodeErrorだったかなんかが発生します。また、この手のPythonで日本語を扱うシステムは、基本的に文字はすべてUnicode文字を使用するようにしたほうがよさげです。

参考

Pythonでメールを送信したい人のためのサンプル集
Pythonで日本語メールを送る。

2011年12月20日火曜日

今になってGAE+Djangoで開発を始めてみる

目的

とりあえず、最近、GoogleAppEngine + Django + FacebookAPIという、 わりとマニアックな環境で作業してて、情報の古さや、Google App Engine Helper for Djangoの中途半端な互換性に 苦しめられることが多いので、備忘録的な感じで気づいたことでも書いていこうと思う。
そして、どさくさに紛れて、自作アプリやらソフトやらの宣伝をしてやろうという魂胆

知っておくべきこと

導入したあとで、がっかりしないように知っておくべきこと、
  • ビューとURLの制御に関しては問題なし
  • データモデル(データベース操作)に関してはDjangoと互換性がない。
  • よって、Djangoのデータモデルを使用する機構も使用不可(authなども多分無理かな)
  • ただし、formに関しては互換性のあるモジュールが存在する。
GAEのデータモデルはかなり特殊なため、データモデル関連の機能はform以外全く使えません。 それに連動して、Django関連のライブラリも使えないものが多いです。 つまり、GAE上で今までにDjangoで作ったアプリを即動かせるぜ、ってわけじゃないので注意してください。

導入編

Google App Engine SDK for Python

ひとまず、本家のスタートアップサイトに従って、 こちらからGoogleAppEngineSDKを落として解凍します。 Django使うなら当然Pythonの方です。

Google App Engine Helper for Django

次に、ここ から、Google App Engine Helper for Djangoを落として解凍。実は、解凍したファイルそのものがGAE上で動くようにカスタマイズされたDjangoプロジェクトなので、cp -r なり何なりでディレクトリごとコピーして、適当に名前をつけます。ここではチュートリアルに従ってmysiteとでもしておく。

.google_appengineの設定

すでにDjangoに触った人なら、このまま、manage.py runserverで起動だ!と言いたいところですが、まだいくつかやることがあります。 まず、DjangoをGAE環境で実行するために、mysite下に.(どっと)google_appengineを自分で作ってやる必要があります。 .google_appengineディレクトリの先にGoogleAppEngineSDKが置いてあるものとして、そこからGAEのテストサーバーとか必要なファイルをとってきて、 実行してくれるわけです。じゃあ、解凍したGoogleAppEngineのディレクトリをまるごとコピーすればいいんだな、ってなるかもしれませんが、(別にそれでも問題ないはずですが)実際には、シンボリックリンクでオッケーみたいです。ln -s コマンドでもつかって、作っちゃいましょう。

ファイルの修正

2011年12月の段階では、地味にバグがあって、このままじゃ起動できません。appengine_djangoの__init__.pyの210行目あたりの、 appconfig, unused_matcher = dev_appserver.LoadAppConfig(PARENT_DIR, {})appconfig, unused_matcher, from_cache = dev_appserver.LoadAppConfig(PARENT_DIR, {}) に変更します。 どうやら、GAEの仕様が変わったのか戻り値の個数が変化して、バグっていたようです。

実行

さて、ここまでくれば、mysite下で、./manage.py runserverでテストサーバーを起動できます。 サイトによっては、Djangoのバージョンが・・・とか書いてありますが、現在のGAEはバージョン1.2のDjangoが標準で入っているので問題ないです。 localhost:8000/もしくはlocalhost:8080/にアクセスして、画面が表示されたら完了です。