Sublime Text 3のスニペットが便利

この間から、CodeEval をチョコチョコとやっていて、いつのまにやら日本国内でのランクが5になっていたよ。ま、人数が少ないようだけど。
で、たまに Ruby を使うけどたいていは Python でコードを書いている。そのコードなんだけど、プログラムの要求条件がファイルから入力して1行ずつ処理する、というのがほとんどだ。ということは毎回同じコードを書くことになるわけだけど、ここで Sublime Text のスニペットを使うと便利なので、今日はその作り方のメモ。

メニューから [ツール] → [スニペット追加] を選ぶと、次のような雛形が表示される。これを編集して、保存すればいいわけだ。

<![CDATA[
  Hello, ${1:this} is a ${2:snippet}.
]]>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<!-- <tabTrigger>hello</tabTrigger> -->
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->

で、どこをどう編集すればいいのかというと、まずは CDATA の中身(Hello,~となっているところ)。ここが実際に貼り付けられるコード片になる。${1:this} とか ${2:snippet} となっているところは一種の変数のようなもので、貼り付けたあと続けて書き換えられるようにカーソルが移動する。もちろんなくてもいい。${0} と書いておくと貼り付けた後そこにカーソルが移動する。
<tabTrigger> の中はスニペットを呼び出すショートカットのようなもので、これを入力してタブキーを押すとスニペットが貼り付けられる。
<scope> はどんな状況で有効になるか、らしい。source.python とあるのは Python のソースコードを書いているときに有効になる。

結局、こういうのを書いた。

<![CDATA[
import sys

test_cases = open(sys.argv[1], 'r')<br /]]> for test in test_cases:
${0}

test_cases.close()

]]>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
codeeval-python2
<!-- Optional: Set a scope to limit where the snippet will trigger -->
source.python

これを、C:\Users\takatoh\AppData\Roaming\Sublime Text 3\Packages\User フォルダの下に、codeeval-python2.sublime-snippet という名前で保存する。Sublime Text は .sublime-snippet という(長い)拡張子のファイルをスニペットと認識するようだ。フォルダは上記のフォルダ直下でなくてもいいみたいなので、Sunippets というフォルダを作ってその中に保存した。

さあ、準備は完了したので使ってみよう。Sublime Text を立ち上げて新規ファイルを開く。何も書く前に test.py とでも名前をつけて保存する。これで Python を編集するモードになって、上のスニペットが使えるようになったはずだ。
codeeval-python2 とタイプしてタブキーを押すとスニペットが貼り付けられるはず・・・だけど c をタイプした時点で候補に出てきた。これは便利。

Windows7でSublime Text 3を使ってみる

普段は秀丸エディタを使ってるんだけど、Sublime Text 3 を導入してみたのでメモ。といってもググればいくらでも出てくるので、要点だけ。参考にしたページは主にここ。

 cf. 『初心者向け』 Sublime Text 3 導入と日本語化について – Naverまとめ

ダウンロードとインストール

ダウンロードはここから。

Windows の 64bit 版をダウンロード。
ダウンロードしたファイルをダブルクリックしてインストール。インストール自体は簡単そのもの。

Package Control

Sublime Text 3 本体のインストールが終わったら、とにもかくにも Package Control をインストールする。Sublime Text には多くのパッケージ、プラグインが用意されていて、それを管理するもののようだ。メニューから [View] → [Show Console] を選ぶか、[Ctrl]+[`] キーを押してコンソールを表示する。次のページから、Package Control インストール用の Python スクリプトをコピペして Enter。

すると、[Tools] → [Command Palette] の中に Package Control が追加される。

日本語化

メニュー等の日本語化。上で追加された Package Control を使って Japanize というパッケじをインストールする。
インストール自体が無事に終わると、設定の仕方がエディタの画面に現れるので、そのとおりにする。以下メッセージから引用。

適用手順
1.C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Japanizeにインストールされている*.jpファイルを、
   C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Default
  にコピーします。※Defaultフォルダがない場合は作成してください。
2.コピーしたファイルをオリジナルのファイル(.jpが付かないファイル)と置き換えます。(念のため、オリジナルのファイルが有る場合は.orgなどを付けて保管しておきましょう。)
3.C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Japanize\Main.sublime-menu(.jpが付かない方)を、
   C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\User
  にコピーします。すると、他のプラグインで上書きされてしまっているトップメニューも日本語化されます。
以上です。

これでメニュー等の日本語化は終了。

その他のパッケージ

とりあえずインストールしたパッケージは次の2つ。

  • ConvertToUTF8
  • IMESupport

Sublime Text は UTF-8 が規定の文字コードなので、Shift JIS のファイルを編集するときには不都合がある。ConvertToUTF8 はファイルを開くときに UTF-8 に変換し、保存するときには Shift JIS で保存してくれる。
IMESupport は日本語入力をインラインでできるようにするパッケージ。

その他の設定

設定は基本的に Json のテキストファイルでするようになっている。メニューから [基本設定] → [基本設定 – ユーザ] を選ぶと、Preferences.sublime-settings というファイルが開く。以下の設定を追加してファイルを保存すると、設定が反映される。

"tab_size": 2,
"translate_tabs_to_spaces": true,
"highlight_line": true,
"highlight_modified_tabs": true,
"draw_white_space": "all",
"show_encoding": true

言語ごとの設定

たとえば、Python のスクリプトを編集するときにだけ適用したい設定を書くには、Python ファイルを開いた状態で [基本設定] → [基本設定 – 拡張] → [シンタックス指定 – ユーザ] を選ぶと、Python.sublime-settings というファイルが開く。ここに上とおなじ要領で設定を書くと Python スクリプトだけに適用される。Python ではタブサイズを 4 にした。

さて、これでしばらく使ってみよう。

LaTeX の数式が表示できるプラグイン

WordPress で LaTeX の数式を表示できるようにするプラグインはいくつかあるようだけど、Easy WP LaTeX ってのが簡単そうで評価も高いようだったのでインストールしてみた。

 cf. WordPressでTeX数式が使用できるプラグイン「Easy WP LaTeX」 ― レンサバ比較のカルマ

インストールは簡単。

  1. WordPressのメニュー
  2. →「プラグイン」
  3. →「新規追加」
  4. →「Easy WP LaTeX」を検索
  5. →「いますぐインストール」
  6. →「有効化」

これでOK。

設定は、WordPress のメニュー → 「設定」 → 「Easy WP LaTeX」 で、色と大きさ、記法の設定ができる。

試しに表示してみると、

[math](a+b)^2 = a^2 + b^2 + 2ab[/math]

LaTeX のソースはこれ。

(a+b)^2 = a^2 + b^2 + 2ab

Windows7にMinGWがインストールできない?

※ 追記あり

gem で nokogiri をインストールしようとしたところ、次のようなエラーが出てインストールできなかった。

^o^ > gem install nokogiri
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing nokogiri:
        ERROR: Failed to build gem native extension.

    C:/Ruby200-x64/bin/ruby.exe extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing.  please visit http://nokogiri.org/tutorials/installing_nokog
iri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=C:/Ruby200-x64/bin/ruby
        --with-zlib-dir
        --without-zlib-dir
        --with-zlib-include
        --without-zlib-include=${zlib-dir}/include
        --with-zlib-lib
        --without-zlib-lib=${zlib-dir}/lib
        --with-iconv-dir
        --without-iconv-dir
        --with-iconv-include
        --without-iconv-include=${iconv-dir}/include
        --with-iconv-lib
        --without-iconv-lib=${iconv-dir}/lib
        --with-xml2-dir
        --without-xml2-dir
        --with-xml2-include
        --without-xml2-include=${xml2-dir}/include
        --with-xml2-lib
        --without-xml2-lib=${xml2-dir}/lib
        --with-xslt-dir
        --without-xslt-dir
        --with-xslt-include
        --without-xslt-include=${xslt-dir}/include
        --with-xslt-lib
        --without-xslt-lib=${xslt-dir}/lib
        --with-libxslt-config
        --without-libxslt-config
        --with-pkg-config
        --without-pkg-config
        --with-libxml-2.0-config
        --without-libxml-2.0-config
        --with-pkg-config
        --without-pkg-config
        --with-libiconv-config
        --without-libiconv-config
        --with-pkg-config
        --without-pkg-config


Gem files will remain installed in C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/nokog
iri-1.6.1 for inspection.
Results logged to C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/ext/nok
ogiri/gem_make.out

調べてみると、どうやら nokogiri はもはや Pure Ruby ではなく、おまけにほかのCライブラリに依存するらしい。
Windows の Ruby 2.0.0 に nokogiri をインストールする方法はこのページに詳しい。

 cf. WindowsのRuby 2.0でNokogiriを使う ― KaoriYa

というわけで、ここからが今日の本題。C のライブラリをビルドするためにまずは MinGW のインストールに挑戦する。
まずは、ダウンロードページから mingw-get-setup.exe をダウンロード。これを右クリックして管理者として実行する。
順調に進むかと思いきや、「”C:\MinGW\libexec\mingw-get\shlink.js” のスクリプト エンジン “JScript” が見つかりません。」というエラーがでてしまう。先週、有効にしたはずなのにおかしい。
とりあえず「OK」をクリックすると MinGW Installation Manager というパッケージ管理ツールのウィンドウが開く。ここでインストールしたいパッケージを選んで(よくわからんので Basic Setup にあるすべてを選んだ)、メニューから Installation → Apply Changes をクリックするとインストールが始まって、しばらくすると無事終わった(ように見える)。
ところが、スタートメニューにもデスクトップにもショートカットが作成されていない。これってやっぱり正常にインストールされてないってことか?

試しに簡単なプログラムを書いてみた。

#include

main () {
    printf("Hello, world.\n")
}

実行結果:

^o^ > gcc -o hello.exe hello.c

^o^ > hello.exe
Hello, world.

なんと、コンパイルができてしまった。どういうこと?

[追記]
gcc が使えたのは、MinGW が正常にインストールされているわけじゃなかった。Haskell Platform に含まれてる gcc が動いていた。

^o^ > which gcc
C:/Program Files (x86)/Haskell Platform/2012.4.0.0/mingw/bin/gcc.EXE

MinGW のほうにパスを通せばいいのかなあ。shlink.js が何をやってるのか調べてみようか。

スクリプト エンジン “JScript” が見つかりません。

Windows7 Home Premium での話。
以前 JScript で書いたスクリプトを実行しようとしたら、次のようにエラーになった。

^o^ > cscript arg1.js foo bar baz
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

CScript エラー: スクリプト "C:\Users\takatoh\Documents\w\sandbox\wsh\arg1.js" のス
クリプト エンジン "JScript" が見つかりません。

ググってみたらYahoo知恵袋の↓このページを見つけた。

 cf. http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13100243473

以下、作業のメモとして残しておく。
まず、コマンドプロンプトを管理者権限で起動する。スタート → プログラム → アクセサリ → コマンドプロンプト、を右クリックして、「管理者として実行」。で、次のようにコマンドを打ち込む。

^o^ > regsvr32 jscript.dll

すると、「jscript.dll の DllRegisterServer は成功しました。」というダイアログが出るので「OK」をクリック。これで JScript が動くようになる。

^o^ > cscript arg1.js foo bar baz
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

foo
bar
baz

Yahoo知恵袋の記事では、JScriptが損傷してるとか書いてあるけど、心当たりが無い。もしかしたら何かのときに損傷したのかも。

ちなみに、VBScript も同じ状態。

^o^ > cscript arg.vbs foo bar baz
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

CScript エラー: スクリプト "C:\Users\takatoh\Documents\w\sandbox\wsh\arg.vbs" のス
クリプト エンジン "VBScript" が見つかりません。

同じやり方では復旧できなかった。なんで?

^o^ > regsvr32 vbscript.dll

これで、成功したとダイアログには出る。が、実際にスクリプトを実行してみるとダメ。

^o^ > cscript args.vbs foo bar baz
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

CScript エラー: スクリプト "C:\Users\takatoh\Documents\w\sandbox\wsh\args.vbs" のス
クリプト エンジン "VBScript" が見つかりません。

まあ、VBScriptは使わないからいいか。

MediaWikiでアップロード可能なファイルサイズを変更する

これは、MediaWiki というよりも PHP の設定によっている。
php.ini を次のように変更する。

post_max_size = 10M
upload_max_filesize = 10M

で、サーバを再起動すると、アップロードできるファイルの最大サイズが10MBになった。

MediaWikiをためす

昨日、Hikiの引越しがうまくいった様なエントリを書いたけど、そのあとよくよく使ってみると、エラーが出て表示ができないページ(Encoding::CompatibilityError とあるからたぶんエンコーディングのエラー)があったり、編集して保存しようとすると「指定したタイトルは既に存在しています。」と出て保存できないページがあるなど、どうも動作がおぼつかない。
そこで、せっかくVertrigoServeでPHPとMySQLがインストールされているので、MediaWikiを試してみることにした。

MediaWiki のダウンロードと展開

以下のサイトから、安定バージョンの 1.21.1 をダウンロードした。

 cf. http://www.mediawiki.org/wiki/Download/ja

ダウンロードしたファイルは .tar.gz なので、まずは tar コマンドで展開。ところがエラーになる。コマンドはあってるはず(たぶん)なのに。

^o^ > tar zxvf mediawiki-1.21.1.tar.gz
tar: Cannot fork: Function not implemented
tar: Error is not recoverable: exiting now

仕方が無いので、gunzip で解凍してから、改めて tar で展開した。

^o^ > gunzip mediawiki-1.21.1.tar.gz

^o^ > tar xvf mediawiki-1.21.1.tar

無事完了。

MediaWiki のインストール

展開したディレクトリを、丸ごとC:\www\wiki にコピー。ブラウザから http://localhost/wiki/ にアクセスすると、MediaWiki のページが表示された。「LocalSettings.php not found.」とあるので、「complete the installation」のリンクをクリックして設定をする。
このあとは難しくない。基本的には質問に答えるだけでいい。強いて言えば、データベースの文字セットをUTF-8にしたくらいだ。
最後に、LocalSettings.php をダウンロードして、index.phpと同じディレクトリにコピーすれば完了。
さあ、ブラウザでアクセスしてみよう。無事メインページが表示されてインストールに成功した。
さて、MediaWiki の記法を覚えなきゃ。

パソコンが壊れたのでHikiを引越しした

WindwosXP が動いていた古いほうのPCが壊れた。といっても、ほぼネット専用機になっていたのでたいした実害は無いんだけど、ただ、いくつかWebアプリを動かしていたので、それをどうにかしないといけなくなった。
そのWebアプリのひとつが、WikiクローンのHikiで、幸いハードディスクは無事だったので、データを回収して新しいほうのPC(といってもWindows7)に引っ越すことにした。

VertrigoServ のインストール

何はともあれ、Webサーバが無くては何もできない。古いPCでは、VertrigoServ という、Apache と MySQL と PHP がセットになっているものを使っていた。なので、今回もこれを使うことにする。まずは以下のサイトから VertrigoServ をダウンロード。バージョンは2.29。

 cf. http://vertrigo.sourceforge.net/

ファイルは実行形式のインストーラになっているので、案内に従うだけで簡単にインストールできた。ひとつ注意点としては、インストール先をデフォルトの C:\Program Files (x86)\VertrigoServ ではなく、C:\VertrigoServ に変えたところ。こうしておかないとconfファイルの編集ができない。たぶんWindows7の権限の問題なんだと思うけどそれを追及するより楽な道を選んだ。
で、変えたところは次の2点。
1点めは、httpd.conf内のWebサーバのポート。デフォルトでは 8080 になっているのを 80 に変えた。

#Listen 8080
Listen 80

コメントアウトしてあるのがデフォルトの設定ね。

もう1点は、DocumentRoot。これはvertrigo.conf内に記述がある(vertrigo.confはhttpd.confにインクルードされている)。

#DocumentRoot "C:\VertrigoServ\www"
DocumentRoot "C:\www"
#<Directory "C:\VertrigoServ\www">
<Directory "C:\www">
    Options Indexes FollowSymLinks Includes
    AllowOverride All
    Order allow,deny
    Allow from All
</Directory>

最後に、C:\VertrigoServ\www を C:\www にコピーして終わり。ブラウザで http://localhost/ にアクセスすると無事、Welcome to VertrigoServ というページが表示された。

Hiki のインストール

Hikiは次のサイトからダウンロードした。

 cf. http://hikiwiki.org/ja/

バージョンは1.0.0。これも基本的にはダウンロードしたファイルを展開して、DocumentRoot以下(C:\www\hiki
に配置、いくつかの設定をするだけでいい……はずなんだけど、いざブラウザでアクセスしてみたら、docdiff/difference がロードできないと言うエラーが出た。配布物内の Gemfile を見ると、どうも docdiff という GEM が必要なようなので、インストールする。

^o^ > gem install docdiff

さて、今度は大丈夫かと思ったら、hikidoc がロードできない、というエラーが出たので、これまたインストール。

^o^ > gem install hikidoc

今度こそ大丈夫、無事 FromtPage が表示された。

Hiki のデータを引越し

最初、これはデータを上書きすればいいだけだと思っていた。が、そうはいかなかった。データは、WebサーバのDocumentRootのそと、C:\hiki_data に置いたんだけど、この中のtextディレクトリの中見たデータそのものなので、基本的にはここに以前のデータを放り込んでしまえばいいはずなんだけど、ブラウザからアクセスしたら、エラーになってしまった。なにやらエンコードの問題らしい。
考えてみれば、古いHikiのバージョンは、0.6.3 でエンコードはEUC、対して新しいほうのHiki(1.0.0)のエンコードはUTF-8らしい。ということはEUCからUTF-8にコンバートできればいいはず、と思って配布部図の中を眺めてみると、tool/convert.rb というスクリプトを発見。中を見るとなんかあたりっぽい。これを使ってコンバートした。

^o^ > ruby -Ic:\www\hiki c:\www\hiki\tool\convert.rb --data-directory=BSL -i euc
-jp -o utf-8

なんか warning がいっぱい出たけどとりあえず無視して、変更されたデータを丸ごとhiki_data/textにコピー。
改めてブラウザでアクセスすると、今度はうまく表示された。

favicon を設置してみた

参考にしたページ:
cf. ワードプレスで簡単にファビコンを設定する方法

Windows のペイントで適当に画像を作って、favikonというサイトで適当にトリミングしてfavicon.icoに変換。これだけでfavikon.icoファイルができた。

WordPressに設定するには、All in one Favicon というプラグインを使った。
プラグインをインストールして有効化したら、Settingの中から、ICO Frontend と ICO Backend それぞれににつくったファビコンをアップロードして、変更を保存ボタンを押すだけ。
Frontend がブログページの、Backend が管理ページのファビコンになるみたい。