karasuyamatenguの日記

 

2013-09-10

postgres 9.3 でjson

15:45

postgres 9.3にはjsonがネィティブにサポートされている。json内の値をアクセスしたりインデックスできる。


psql (9.3.0)
Type "help" for help.

# JSON型!
yoyodb=> CREATE TABLE publishers(id INT, info JSON);
CREATE TABLE

# JSON型をインデックス!!
yoyodb=> CREATE INDEX ON publishers( ( info->>'name' ) ) ;
CREATE INDEX

yoyodb=> insert into publishers (id,info) values (1, '{"name":"foo"}');
INSERT 0 1
yoyodb=> insert into publishers (id,info) values (2, '{"name":"bar"}');
INSERT 0 1
yoyodb=> insert into publishers (id,info) values (3, '{"name":"baz"}');
INSERT 0 1
yoyodb=> select * from publishers
yoyodb-> ;
 id |      info      
----+----------------
  1 | {"name":"foo"}
  2 | {"name":"bar"}
  3 | {"name":"baz"}
(3 rows)

# col->'key'でJSON内のフィールドをアクセス
yoyodb=> select info->'name' from publishers ;
 ?column? 
----------
 "foo"
 "bar"
 "baz"
(3 rows)

yoyodb=> select info from publishers where info->>'name'='bar';
      info      
----------------
 {"name":"bar"}
(1 row)

yoyodb=> select info->'name' from publishers where info->>'name'='bar';
 ?column? 
----------
 "bar"
(1 row)

debianでのインストール

http://www.postgresql.org/download/linux/ubuntu/


echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' | sudo tee 

/etc/apt/sources.list.d/postgres.list

https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get install postgresql-9.3

DBとユーザの設定

コマンドでこうする

createuser --no-adduser --no-createdb --pwprompt --encrypted yoyota
createdb --owner=ams --encoding=UNICODE yoyodb

あるいは

su postgres
psql
CREATE ROLE yoyota WITH LOGIN NOSUPERUSER NOCREATEROLE ENCRYPTED PASSWORD 'xxxx';
CREATE DATABASE yoyodb WITH OWNER yoyota;

クライアント権限

/etc/postgresql/9.3/main/pg_hba.conf

にこのようなラインを追加

local all all md5


これは超画期的ですよ。スキーマレスなJSONSQLをうまく融合させている。Postgresを優秀なRDBからno-sqlまでカバーする万能DBにしてしまう機能なのかもしれない。これからの開発はpsqlにきまり。

2012-07-07

htmlでもありjpegでもあるファイル

08:12

このURLを開いてソースを見てもらいたい:

http://lcamtuf.coredump.cx/squirrel/

HTMLソースのコメントの中にJPEGデータが埋め込まれている。

そして、画像リンクは同じURL

ソースをよく見てみるとHTMLタグの前に短いバイナリシーケンスがある。多分JPEGのヘッダーのコメント開始までの部分だろう。だとすると、このHTMLJPEG兼用ファイルはJPEGのコメントのなかにHTMLが入っていて、そのコメントの中にJPEGのデータが入っている二つのフォーマットが混った入れ子型ファイルってことになる。可愛いハックだ。

2012-06-21

VIペダル

01:38

VIのモード切り替えを足でやって編集の高速化を可能にするペダルを自作したやつがいる:

https://github.com/alevchuk/vim-clutch

ペダルを踏むと「i」が入力され編集モードに。上げると「ESCAPE」でコマンドーモードに。素晴しいハックだ。

emacs用の「Controlペダル」が出たら使うかも。

2012-06-19

被害妄想症の友人: Pythonでssh

02:09

paramikoというpythonsshライブラリで遠隔マシンの操作が自動化できる。

hello paramiko

import paramiko
transport=paramiko.Transport(  ( 'takao3' ,  22  ) )
transport.connect(username='tengu', password='xxxx')
c=transport.open_session()
c.exec_command('ls hoge > /dev/null')
if c.recv_exit_status()==0:
    print c.makefile('rb', -1).readlines()
else:
    print c.makefile_stderr('rb', -1).readlines()

接続

  transport=paramiko.Transport( ( 'takao3', 22 ) )
  transport.connect(username='tengu', password='xxxx')

pkeyを使うようにすべきだが、passwordを使わなきゃいけないときもある。ところで、TCPソケット以外のTransportって何がるんだろう…

セッション・チャンネル

遠隔コマンドとはChannelと呼ばれるデータストリームでデータをやり取りする。チャンネルを開いてデータを書き込んだり、返答を読み出したり、プロセスの終了を待ったりexit statusを得たりできる。subprocessのPopenみたいな感覚だ。

http://www.lag.net/paramiko/docs/ (help(paramiko.Channel)) を参照。

  # チャンネル(セッション)はコマンド毎に開く
  c=transport.open_session()
  c.exec_command('ls hoge > /dev/null')

  # コマンドが終了するまでブロックする。wait(2)に相当する。
  if c.recv_exit_status()==0:
      # 出力が少いのでバッファさせた出力を読む。
      # 出力が多いと読んだ後にrecv_exit_status()しないといけないだろう。
      print c.makefile('rb', -1).readlines()
  else:
      print c.makefile_stderr('rb', -1).readlines()

サイトのドキュメンテーション(http://www.lag.net/paramiko/docs/)もしっかりしていて、よく管理されたライブラリという印象が得られる。ちなみにparamikoという名は「被害妄想症の友人」という意味のエスペラント語造語だそうだ。

2012-06-13

Flameが世界最高水準の技術によるサイバー兵器であることを証明する機能リスト

10:18

f-secureFlameの凄さを指摘している:

http://www.f-secure.com/weblog/archives/00002383.html

ユーザ監視

keyloggerとscreengrabberをもつ

暗号化通信

SSHSSLLUAライブラリを装備

フルテキスト監視

オフィス、PDFAutodeskファイルなどのドキュメントをディスク・ネットワーク上で発見、テキストを抽出しそれをsqliteデータベースに保存。

盗聴機能

マイクロフォンをオンにして会話をオーディオファイルとして保存。

地域情報

ディスク・ネットワーク上で画像ファイルを探しそこからGPS情報を抽出。 写真がとられた場所を保存。

電話も

Bluetoothで接続されたスマホからアドレス帳を盗み出す

隔離されたマシンからも…

このように集められた情報は暗号化されたSQLiteデータベースとしてUSBスティックに保存され ネットワークのある環境に辿り着いたら送り返されるようになっている。ネットワークと接続されていないハイセキュリティー環境からも情報を盗み出せるようになっている。

...

証明書検証も打ち破る

上記の工作はスーパーコンピュータを使いこなすことが前提となる。このような高度な国家レベルのスパイ活動が2010年から行われていることになる。2010がサイバー戦争元年ということになる。