2012年12月3日

Erlang を Emacs でコーディングするための設定

概要

プログラミング言語Erlangを Emacs でコーディングするための設定。

Erlangインストール

Mac の場合は dmg、MacPorts、Homebrew でインストールする方法がある。

dmgの場合

あまり知られていないみたいだが、ちゃんと dmg によるバイナリが配布されている。
以下からダウンロード可能。
https://www.erlang-solutions.com/downloads/download-erlang-otp
アクセスするとブラウザの設定で自動でOperating Systemが選択されるはずだが、Operating Systemが適切でない場合は選択しなおせば dmg がダウンロードできる。
バイナリは通常は 64bit を選択すれば良い。

MacPortsの場合

sudo port install erlang

Homebrewの場合

brew install erlang

動作確認

ターミナルから動作するか確認する。「erl」コマンドで Erlang Shell が起動する。

% erl
1 > 2 + 4.
6
2 > halt().

「.」を忘れないように。「halt()」で終了する。

Emacsの設定

erlang-modeとdistelを設定する。
erlang-mode は Erlang と同時にインストールされる。

MacPorts だと「/opt/local/lib/erlang/lib/tools-*/emacs/」に存在する。

distelは補完とか、その他いろいろ便利なので設定している。

git clone git://github.com/jixiuf/distel.git
cd distel
make

init.el の設定は以下。path 関連の設定が必要だけど、略。

(setq erlang-root-dir "/opt/local/lib/erlang")
(require 'erlang-start)
(require 'erlang-flymake)

(require 'distel)
(distel-setup)

Erlang でのプログラム経験がかなり少ないので、ほとんど設定してない。

2012年11月19日

Cassandra 1.1 簡易メモ

概要

Apache Cassandra」の 1.1.6 をとりあえず試すためのメモ。
ネット上の記事が結構古い物しかない印象なので、公開しておく。
触りだけで、深い所までは書いてない。

設置から起動

curl -O http://ftp.riken.jp/net/apache/cassandra/1.1.6/apache-cassandra-1.1.6-bin.tar.gz
tar xvf apache-cassandra-1.1.6-bin.tar.gz
cd apache-cassandra-1.1.6

# conf の中で利用しているディレクトリを作成
sudo mkdir -p /var/log/cassandra
sudo chown -R `whoami` /var/log/cassandra
sudo mkdir -p /var/lib/cassandra
sudo chown -R `whoami` /var/lib/cassandra

# 起動
bin/cassandra -f

デフォルトでは Messaging Service が 7000 ポート、thrift server が 9160 ポートを利用する。

アクセス

標準クライアントは依然から存在する「bin/cassandra-cli」か、新しい「bin/cqlsh」を利用する。
ネットや README だと cassandra-cli を利用しているが、cqlsh の方が使いやすいのでそちらを利用する。

bin/cqlsh localhost

keyspaceの作成

最初に RDB のデータベース相当 である keyspace を作成する。

CREATE KEYSPACE Keyspace1
  WITH strategy_class = 'SimpleStrategy' 
   AND strategy_options:replication_factor = 1;

keyspace に移動

cqlsh> use Keyspace1;
cqlsh:Keyspace1>

column family の作成

RDB のテーブル相当である column family を作成する。cqlshを利用すると、「CREATE COLUMNFAMILY」、「CREATE TABLE」のいずれでも作成できる。
「CREATE TABLE」を利用すると 従来の RDB 的に column も同時に作成できる。とりあえずこちらを利用したサンプル。
Snappy による圧縮を指定して作成する場合は以下のようにする。

CREATE TABLE Users (
  user_id int PRIMARY KEY,
  user_name varchar,
  age int
  )
  WITH comparator=LongType
   AND compression_parameters:sstable_compression='SnappyCompressor'
   AND compression_parameters:chunk_length_kb=128;

確認は「DESCRIBE」コマンド。

DESCRIBE KEYSPACE Keyspace1
DESCRIBE COLUMNFAMILIE 
DESCRIBE COLUMNFAMILY Users

データ挿入

データを挿入してみる。

SELECT * FROM Users;
INSERT INTO Users (user_id, user_name, age) VALUES (1, 'John Smith', 42);
INSERT INTO Users (user_id, user_name, age) VALUES (2, '日本語 挿入', 33);
SELECT * FROM Users;

INSERT は UPDATE と同じ動作をするので、prymary key が重複するデータを挿入すると上書きする。

データ参照

SELECT文を発行する。
まず count で行数を取得してみる。古いバージョンでは count は Row 中の column 数を表示している時もあったが、現在は Row の数を返すようになっている。

select count(*) from Users;

普通に SELECT文が発行できる。暗黙に「limit = 10000」が付与される。

select user_name, age from Users where user_id = 1 ;

データ削除

DELETE文を発行する。

delete from Users where user_id = 1;

「PRIMARY KEY」を設定していると、「PRIMARY KEY」以外の値が消えるだけで「PRIMARY KEY」の値が残るので、論理削除とかにした方が良い場合もある。

ソート

ORDER BY したい場合は、PRIMARY KEY を複合キーで作る必要があるので、PRIMARY KEY を複合キーで作成できる場合にしか使えない。

参考サイト

2012年11月13日

Emacs で Python の補完を強化する jedi を設定してみた

概要

Emacs の Python 補完はいろいろあるが、どれもいまいち遅い。「emacs-jedi」は結構高速に補完してくれるみたいなので、設定してみた。

設定

Python のライブラリをインストール

pip install epc
pip install jedi

Emacs のライブラリを取得。

git clone git://github.com/kiwanami/emacs-deferred.git
git clone git://github.com/kiwanami/emacs-ctable.git
git clone git://github.com/kiwanami/emacs-epc.git
git clone git://github.com/tkf/emacs-jedi.git

init.el の設定

(require 'jedi)
(add-hook 'python-mode-hook 'jedi:ac-setup)

これで auto-complete を利用して補完が可能。eldoc が有効になっていると、関数の引数説明も表示される。
結構高速に動作してくれるのでしばらく利用してみる。

Emacs で似ている文字列を一度に選択して一括編集可能な mark-multiple.el の導入

概要

簡単に複数の同じ様な文字列を選択して、一括編集可能な「mark-multiple.el」を導入してみた。
機能に関しては、「説明動画」参照。

設定

git clone git://github.com/magnars/mark-multiple.el.git

init.el には以下を設定。

(require 'mark-more-like-this)
(global-set-key (kbd "C-<") 'mark-previous-like-this)
(global-set-key (kbd "C->") 'mark-next-like-this)

「C-<」で前方一致選択。「C->」で後方一致選択。

矩形選択の機能もあるので設定しておくと便利。

(require 'inline-string-rectangle)
(global-set-key (kbd "C-x r t") 'inline-string-rectangle)

2012年11月12日

Emacs の region 関連機能をカスタマイズできる expand-region.el の導入

概要

Emacs で範囲選択をいろいろカスタマイズできる、「expand-region.el」を導入してみた。
機能に関しては文章読むより、「解説動画」を見た方が良い。

設定

比較的変更が頻繁にはいっているので、git でソースを clone する方がよさそう。

git clone git://github.com/magnars/expand-region.el.git

init.el への設定は以下。

;; 選択ができるようにしておく
(transient-mark-mode t)

(require 'expand-region)
;; リージョンを広げる
(global-set-key (kbd "C-@") 'er/expand-region)
;; リージョンを狭める
(global-set-key (kbd "C-M-@") 'er/contract-region)

「C-@」で選択範囲を広げる。「C-M-@」で選択範囲を狭める。
その他選択中に「C-Shift-p」で選択範囲の上移動、「C-Shift-n」で選択範囲の下移動、「C-Shift-x」で選択範囲の先頭、末尾移動が可能。

動作をカスタマイズしたい場合は、言語ごとの「-expansions.el」のファイルが沢山はいっているので、参考にすればとりあえず作成できる。

参考サイト

2012年11月7日

Python の pip コマンドでライブラリの更新状況を確認する

概要

Python の pip コマンド最新バージョン 1.2.1 では、ライブラリの更新状況が確認できない。
確認する方法をメモする。

コマンドの設定

pip コマンドは「site-packages/pip/commands/」以下にコマンドが存在し、このディレクトリにコマンドプログラムを配置することで、様々な拡張が可能。

listコマンドを追加する「list.py」が公開されているので、ダウンロードして、配置する。
利用可能か確認したり、利用方法を確認するには、以下のようにする。

pip list --help

ライブラリの更新状況を確認する場合は以下。

pip list -o

インストールしているライブラリの量にもよるが、結構時間がかかるので注意。

2012年11月6日

アスキーアートロゴを作成してみる

概要

現在「tweepy のAPI 1.1 対応フォーク」を作成している。
変な所が無いか知人に見てもらった時、いくつかの指摘の中で、READMEファイルのアスキーアートロゴに関して質問があった。
そこで、このようなアスキーアートロゴの作成方法に関してメモしておく。

bannerコマンド

Mac OS Xで標準的に利用できるコマンドだと「banner」が存在する。「-w」オプションで幅を指定する。

banner -w 30 Hello

「banner」コマンドは自由度がほとんど無いので、あまり便利ではない。

FIGlet

FIGlet」はこの分野でかなり利用されていると思われる。MacPorts や Homebrew で簡単にインストールできる。

sudo port install figlet

brew install figlet

使い方は簡単。

figlet Hello

フォントの変更も可能なので、参考サイト参照。

FIGletのPython実装「pyfiglet」が存在する。

pip install pyfiglet

pyfigletはモジューで提供されて、コマンドがインストールされない。
以下のようにするとコマンドでも利用できるが、普通は import して利用する物だと思われる。

/path/to/pyfiglet/__init__.py "Hello"

TOIlet

色付きでアスキーアートロゴが生成できる。名前やサイトデザインが結構酷いが、品質に問題はないようだ。
これも MacPorts や Homebrew で簡単にインストールできる。

sudo port install TOIlet

brew install TOIlet

使い方は FIGlet とほとんど同じで、色を付けるパターンが存在している。

参考サイト

以下のサイトが詳しい。