読者です 読者をやめる 読者になる 読者になる

Workbenchを様々なOSで利用する

Mercurial使いのみなさまこんばんは。Mercurial Advent Calendar 2011 - [PARTAKE]の11日目はは私@choplinからお届けします。

Workbenchとは?

WorkbenchとはMercurialGUIフロントエンドです。
ファイラとの統合機能を提供するTortoiseHgの一部として提供されています。

全てとはいかないまでも、かなりの機能*1をWorkbenchから利用することができます。
充実したGUIクライアントが提供されていることがMercurialを選択するメリットの一つと言えるでしょう。

Workbench自体の解説は本エントリでは行いませんので、興味が有る方はTortoiseHgを参照して下さい。

どのOSで使えるの?

TortoiseシリーズなのでWindows用と思われがちですが、WorkbenchはQTを用いてGUIが作られている為、他のOSでも利用可能です。

本エントリではでは、私が利用した経験のあるWindows、Ubuntu、Macでのインストール方法をご紹介します。

Windows

WindowsではTortoiseHgをインストールすると一緒についてきます。

Mercurialも同梱されているので、インストーラ一発でOKです。お手軽ですね。

Ubuntu

パッケージが提供されているのですが、少しバージョンが古いので、別途PPAリポジトリを追加します。

sudo apt-add-repository ppa:mercurial-ppa/releases
sudo apt-add-repository ppa:tortoisehg-ppa/releases
sudo apt-get update
sudo aptitude install tortoisehg

thgというコマンドからWorkbenchを起動することができます。

thg

Mac

Macは少し厄介です。Homebrewを利用していることを前提とします。*2

まずPyQtをインストールします。

sudo brew install pyqt

続けてQScintillaをインストールします。QScintillaのFormulaはPull Requestが出されていますが、まだ本家にマージされていないようですので、各自でFormulaを追加するかパッチを当ててください。

Formulaが追加できればbrew一発でインストールできます。

sudo brew install qscintilla

いくつか必要なPythonパッケージがあるのでそれをインストールしておきます。

sudo pip install Pygments
sudo pip install iniparse

TortoiseHgをcloneします。

hg clone http://bitbucket.org/tortoisehg/thg/ TortoiseHg

リポジトリ内のthgからWorkbenchを起動して下さい。

cd TortoiseHg
./thg

実は

各OSでのインストール方法が
tortoisehg / thg / wiki / Home — Bitbucket
に載っています。

まとめ

優秀なMerucialのGUIフロントエンドであるWorkbenchが様々OSで利用可能なことを紹介しました。

明日は

Mercurial Advent Calendar 2011 - [PARTAKE] 明日は@monjudohさんです。よろしくお願いします。

Vim advent calendar2011 10日目 : VimとKinesisの話

全国のVimmerのみなさまこんばんは。Vim Advent Calendar 2011 : ATNDの10日目は私@choplinからお届けします。

Vimとキーボードの関係

Vimmerであれば当然常日頃からエディタとしてVimを使っていることと思います。中には単なるエディタであることに満足できずにシェルやファイラなどの環境、果ては家族としてVimと接している方もいるようです。

いずれにせよVimmerはコンピュータ側のインターフェースとしてまずVimを選択してるということです。では、物理世界はどうでしょうか?如何なるVimmerといえど物理世界のインターフェースを通さずにVimと接することはできないはずです。*1

コンピュータ型のインターフェースとしてのVimに拘りを持つ貴方は、ぜひ物理世界にインターフェースとしてのキーボードにも拘ってみてください。より貴方にマッチしたキーボードと共に、きっとよりよいVimライフを送ることができるはずです。

本エントリでは私が日常使っているKinesisキーボードと、Vimとの関係をご紹介したいと思います。

なお、キーボードを会社に置き忘れてきたため、一部画像はイメージでお届けします。

Kinesisって?

KinesisとはアメリカのKinesis社から販売されているキーボードのことです。

Kinesis社が販売しているキーボードにはいくつか種類があるのですが、個別の商品名を挙げずに単にKinesisと言った場合にはAdvantage Contouredを指すことが多いようです。

Kinesis Advantage Contouredキーボードについて

まずはその外観を見てください。

美しいですね。無骨さを残しながらも細部にわたって打鍵を打つための工夫が凝らされたその姿は正に機能美という言葉を体現していると言えるでしょう。

あえてカテゴリ分けをするならば、いわゆるエルゴノミクスにあたるかと思います。

しかし、Kinesisは単に曲線を用いただけの名ばかりのエルゴノミクスキーボードとは一味違います。
Kinesisで打鍵を繰り返すうちに、Kinesisが真に人間が使うためにデザインされたことが伝わってきます。

Kinesisのハードとしての特徴は各所に記事が上げられているので、本エントリではKinesisのデザインが使った人間にどう影響を与えているかという視点でいくつかKinesisの特徴をご紹介したいと思います。

肘が直線になる

Kinesisを使ったことがない人Kinesisを見ると、まず始めに右手部と左手部が分離された構造が目に付くと思います。

一般的なキーボードでホームポジションに指をおくと、大凡以下のような腕の位置になると思います。

f:id:choplin:20111210201205:image

Kinesisでは左右が分離された構造により、下のように肘から直線的な位置に腕を置くことができます。

f:id:choplin:20111210201257:image

余りにも肘を曲げるスタイルが一般的なため、肘から直線になるメリットは伝わりにくいかもしれません。人にもよりますが、肘から直線になるポジションではよりリラックスというか余分な力が抜けるような感じになります。

こればかりはこればかりは体験して頂かないことには分からないと思いますので、機会があれば是非試して下さい。

特に後継姿勢を取る方は、肩から肘にかけて力が抜ける感覚を味わって頂けると思います。

指の動きだけですべてのキーを打てる

肘を曲げるスタイルだとEscキーやBSキーなど隅にあるキーを押す際に手首を曲げる必要があります。

f:id:choplin:20111210201295:image

少ない回数であればなんてことはないのですが、ESCを打つたびに手首にダメージが蓄積していき、痛みを感じるようになります。*2

上のKinesisの写真を見ていただくと、左手部右手部が手の形に併せて凹んでいることが御覧いただけるかと思います。
更によく見ていただくと分かりますが、実は各キー毎に微妙に段差がついています。*3

この窪みと段差によって、Kinesisでは殆ど手首を動かすことなしに、全てのキーを打鍵することが可能になっています。

これこそがエルゴノミクスでありKinesisの真骨頂です。

Vimであれば打ちにくいキーを別のキーにmapすれば済む話*4ではあるのですが、物理的に手首の動きをなくすことで全キーを無理なく使用することが可能になり、何にmapするかで頭を悩ませる必要がなくなります。

また、必要以上mapすることを避けることで、リモート作業など素のvimを使わざるを得ない場面でも、普段のvimの操作感との差を少なくすることができるでしょう。

余談ですが、この指だけで打鍵する操作感と、上の肘が直線になるポジションで長く打鍵していると、まるで攻殻機動隊のオペレータのような気分になります。

f:id:choplin:20111210210147:image

みなさんも是非この感覚を味わってみて下さい。

親指を活用できる

みなさんは普段打鍵する時に、親指を何に使っていますか?

今私の手元にあるMacbook Air日本語配列だと、親指で打つのはSpace、英数、かな、さらに手首を動かすならCommand、option辺りでしょうか。

Kinesisでは親指部も左右で分離されている上に、左右それぞれで6つものキーが親指に割り当てられています。後で述べますが、Kinesisではこの合計12個のキーに好きなキーを割り当てることができます。

親指は細かい動きには向きませんが、力は強いので、モディファイアキーのように押しっぱなしにする目的には優れた働きをしてくれることでしょう。

好みの配列にできる

Kinesisはその独特な形状から、キーの元々の配列はかなり独自なものになっています。

ですが、Kinesisの機能の一つとして、全てのキーのマッピングをハードウェアレベルで自由に設定することが可能です。*5

よくVimを使う利点として、CtrlやShiftなどのモディファイアキーを使う頻度を下げることができて小指にやさしいという点が挙げられます。中にはEnterすら遠いので独自のmapを設定している方もいるようです。

さらにそこにKinesisを組み合わせることで、親指部などにモディファイアキーを持ってくることが可能になり、小指を無理な負担から完全に開放することができます。

Ctrlの押しすぎで小指を痛めVimに移ってきた方は、キーボードをKinesisに変えることで更なる安らぎを得ることができることでしょう。

欠点

上に挙げた通り素晴らしいキーボードであるKinesisですが、完全無欠に見えるKinesisにも欠点はあります。

高い

高いです。日本でのKinesisの販売・サポートはフット用マウス・Kinesis社製品(フットスイッチ・キーボード)販売 オリジナルUSBメモリ製作 エジクン技研というところが行なっています。

通信販売も行なっており*6、執筆当時の値段は27,980円です。
私は最早Kinesisがキーボードの基準となってしまったため分からないのですが、一般的にはキーボードとしては高価な部類に入るようです。

他に高級キーボードとされる、Realforce(19,610円)やHHK(19,720円) *7と比べても頭一つ抜けています。

しかし、これでも値下げされたのです。今年前半辺りに値下げされるまでは40,000円弱でした。さらにエジクン技研が取り扱う前は、自分で輸入するしかなく、日本でのサポートが受けられない上に、高い送料を負担する必要がありました。

エジクン技研がいつまでKinesisを取り扱うかは分からないので、Kinesisに興味が有る方は、値下げに踏み切ってくれたエジクン技研に感謝しつつ今の間に手に入れておきましょう。

でかい

でかいです。左右部を分離されている上に親指部が充実しているという構造上、これはさけられません。

目測ですが、一般的なサイズのキーボードに比べて、サイズで1.2-1.5倍程度はあるのではないかと思います。中は空洞なため、重さはそれ程ではありません。

せめて真ん中の空いているスペースを有効活用したいところではあるのですが、微妙に湾曲しているため物を置いても安定しにくく、未だに上手い使い方は見つけられていません。

この記事を読んでKinesis導入してみようと思った方は、まず机の上を整理整頓してKinesisを置くスペースを確保して下さい。それでもスペースが足りない方は、Kinesisを使うことによる生産性向上を武器に、上司に広い机をもらえるように交渉して下さい。

英語配列がベースとなっている

上記したとおり、Kinesisは独自の配列ではあるのですが、ベースは英語配列となっています。

その為、半角/全角などの日本語配列ようのキーが存在しません。配列自体は自由に設定できるので問題にはならないのですが、キーが足りないことで日本語環境でたまに不便なことがあります。

私はWindowsでもLinuxでもIMEの切り替えに半角/全角キーによるトグルではなく、無変換にIME OFF、かなキーにIME ONを割り当てて、Macのようなスイッチ操作にしているのですが、Kinesisでは無変換やかなキーがありません。
そこでF7やF8を親指部に割り当ててIME OFF/ONに使っているのですが、FunctionキーはIME操作のためのキーではないので、たまにアプリのキーマッピングと衝突してイライラします。

モバイルできない

もしかしたらKinesisを常時持ち運びしている方もいるかもしれませんが、常人には少し難しいです。

Kinesisの快適なタイピングに慣れてしまうと、モバイルのキーボードを使う時に苦痛を覚えることがあるようです。

まとめ

エディタにVim、キーボードにKinesis

明日は

Vim advent calendar 明日はLayzieさんです。よろしくお願いします。

SQLで素因数分解をする - Project Euler #3

PostgreSQL Advent Calendar 12/1

ついにPostgreSQL Advent Calendarが始まりました。一日目は@choplinからお届けします。

SQLプログラミング言語である

みなさんSQLは好きですよね。

ところでSQLRDBの操作を行うための言語だと一般的には考えられています。SQL - WikipediaによるとSQLはその為に作られた言語だそうですし、その使い方でとっても素晴らしい働きをしてくれます。

しかし、DBを用いずとも、SQL単体で様々な計算が可能だということはあまり知られていないようです。本エントリではその知られざる実力の一端をご紹介いたします。

SQL素因数分解を行う

ご存知かとは思いますが、素因数分解とはある正の整数を素数の積の形で表すことです。

ぱっと見では中々SQLで解きにくい問題ではないでしょうか?

Project Eulerの#3が素因数分解の問題なので、実際にこれを解いてみましょう。

前準備

問題を解き始める前に、SQLでプログラミングを行う為の道具を用意しておきたいと思います。

SQLRDBの為につくられたこともあり、関係代数をそのバックグランドとしています。集合を対象とした計算をとても素直に記述することができます。

ですが、いわゆる手続き的なロジックを記述したいこともあるでしょう。

構造化プログラミング - Wikipediaによると、構造化プログラミングでは次の3つが基本要素となります。

  • 逐次
  • 反復
  • 分岐

これらの要素はモダンなSQLであれば満たすことが可能です。

逐次

共通表式WITH句やサブクエリで逐次的に集合を定義できます

反復

再帰SQL(WITH RECURSIVE)を使います。

再帰SQLでは前回定義した集合を基に次の集合を定義する、即ち再帰的に集合を定義することが可能です。

再帰SQLの使い方は本エントリでは詳しくは触れませんので再帰SQL — Let's Postgresなどを参照して下さい。

分岐

CASE式を用いると、任意の条件に応じて集合を定義することができます。

道具は揃った

以上の3要素を組み合わせることで、SQLでも手続き的な記述を行うことが可能です。
これらを利用して素因数分解を行いましょう。

※3要素の内容については個人的に思いついたものを挙げてみました。他にもっといいやり方があれば教えて下さい。

戦略

素因数分解を行うアルゴリズムはいくつか知られているようですが、今回は最も単純な

"小さい素数から順に因数かどうか判定していく"

という方法を採用します。

この方向で素因数分解を行うために、次の2つの問題に分割します。

  1. 与えられた整数の二乗根を上限とする素数集合を求める
  2. 素数集合に対し順に因数かどうかの判定を行う

1.は自明かと思います。素因数分解の為には高々二乗根までの素数があれば十分です。

2.についてですが、単純に素数集合から割り切れるものを取り出すだけでは不十分です。複数回割り切れる素数が存在することがある為です。それぞれの素数が対象の数を何回割り切るかを判定する必要があります。

これらの二つの問題をSQL関数として実装しました。

1.素数集合を求める

素数を求める為のアルゴリズムは多くのものが知られています。

今回は単純なエラトステネスのふるいを採用しています。

2.素数集合に対し、順に因数かどうかの判定を行う

再帰SQLを用いて、素数集合の要素に対し順番にわり切れるかどうかの判定しています。上で述べたように、一度割り切れた素数はもう一度判定を行なっています。

実行!

2.で素因数の集合を返す関数にしているので、関数を実行するだけです。

これで無事SQL素因数分解を行うことができました。

PostgeSQLとの関係は?

PostgreSQLRDBの中でもSQL標準で定められた構文を比較的多く実装しています。その為、SQLのみで逐次、反復、分岐の三要素を満たすことができます。(再帰SQLなどは実装されていないRDBもあります)

また、

  • 配列を扱える
  • generate_seriesが強力
  • SQLで関数を組める

なども等もSQLでプログラミングを行う上で大きな力となります。

つまり、PostgreSQLSQLの処理系として優れた実力を持っている、ということです

結論

SQL! SQL!

明日は

PostgreSQL Advent Calendar 明日の担当はumitanukiさんです。よろしくお願いします!

vimからvim hacksを閲覧する - unite-vim_hacks

vimmerのみなさまは日頃からVim-users.jp - Vim Hacks Projectにある記事に目を通すことが多いかと思います。

Vim-users.jp - Vim Hacks Projectは記事の内容は素晴らしいのですが、閲覧する際にvimから離れなければならないのが玉に瑕でした。

vimmerならばできるだけvimから離れたくないもの。何か方法はないのでしょうか。

解決法

先ほど公開されたUnite sourceを使います。

choplin/unite-vim_hacks - GitHub

:Unite vim_hacks

というコマンドを実行すると、以下のようにUnite上でvim hacksを一覧できます。

f:id:choplin:20111118021746:image

読みたい記事の上でEnterを押すとvimバッファ上で記事を閲覧することができます。

f:id:choplin:20111118021747:image

注意

very alpha なので何か不具合があれば連絡して下さい。

Todo

  • 取得した記事をキャッシュする
  • 記事の表示を綺麗に
    • ハイライティングとか
  • ドキュメント

宣伝

11/19に東京で大規模なvimのイベントがあるようです

http://vim-jp.org/ujihisa.vim-2/
ujihisa.vim#2 - [PARTAKE]