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 とほとんど同じで、色を付けるパターンが存在している。

参考サイト

以下のサイトが詳しい。

2012年11月5日

pyobjc 2.4 のインストール

概要

Python の Objective-C ブリッジライブラリ「pyobjc」の 2.4 が 2012/11/01 にリリースされたのでインストールメモ。

インストール

以下は pip でのインストール手順。core を先にインストールしないと依存性が解消されないので注意。

pip install -U pyobjc-core
pip install -U pyobjc

ドキュメント

各種ドキュメントは以下にある。

サンプルソース

pip でインストールするとサンプルがインストールされないので、以下のURLから取得する。

サンプルの内容は Mac での Objective-C の知識が無いと意図が理解はできないと思われる。
Python から Objective-C の API が簡単に利用できるというのが便利。

2012年11月1日

Python モジュールバージョン番号フォマットに関してのメモ

概要

Python モジュールを開発する際のバージョン番号のフォーマットに関してのメモ。

ドキュメント

PEPが存在する。

形式

形式は以下。

N.N[.N]+[{a|b|c|rc}N[.N]+][.postN][.devN]
  • major
  • minor
  • micro
  • releaselevel
    • dev
    • alpha
    • beta
    • candidate
    • final
  • serial

バージョン番号表示

setup.py でバージョン番号が表示できるように作成する。

python setup.py --version

関連プログラム