2015年3月17日火曜日

[kdb] IDE: QInsightPad

QInsightPad に関するメモ

QInsightPad - windows専用のIDE

[QInsightPadの特徴]
・Good
Windows専用でExplorerとの統合がよい
ウィンドウがタブ型
Namespace一覧が見やすい
入力補完が見やすく、使いやすい(ユーザー定義オブジェクトの補完には事前にnamespace更新が必要)
フォント等設定項目が豊富

・Bad
日本語を入れるとencodingが"BOM付き"UTF-8になるという困ったWindows仕様
グラフがイマイチ(可能性は非常に感じるのだけど。。。)
1つのファイルの行数が増えると非常に重い
日本語コメントの直後の行が動かないことがある(最後をascii文字にするとか何らかの対応が必要)
利用期限が2015/9/30に設定されており、開発者がバージョンアップしてくれない場合使えなくなる可能性あり。


[おすすめ設定]




・Q Settings
- Namespace Explorer
Refresh on server change - ctrl+spaceでの保管には最後に読み込んだNamespace情報が使われる

- Grid
Show dictionaries in grid view - dictionaryをgrid形式で表示
Add # column

・Editor
Switch connections in page activation - オンにするとそれぞれのtabで別々のconnectionになる。オフがおすすめ

・Fonts & Colors
デフォルトフォントはいまいちなので何かに変えたほうがよい。現在のオススメは "Migu 1M"


[Debuggerの使い方]

TBW


[kdb] IDE: StudioForKdb+

StudioForKdb+ に関するメモ

StudioForKdb+ - ベーシックなIDE、Javaベース、オープンソース

[studioメモ]

・フォント設定
studio.properties のフォント項目を変更すればよい
font.size=14
font.name=Monospaced

・Syntax Coloering設定
studio.properties のtoken.xxx項目を変更すればよい
token.BACKGROUND=ffffff
token.KEYWORD=0000ff
...

[studio 拡張版]

https://github.com/Naoki-Yatsu/studio

Multi-Axis Chartが楽にかけます。おすすめですよ

2015年3月16日月曜日

[kdb] Dictionary and Table

dictionaryとtableに関するメモ

□ dictionary
key(domain list)とvalue(range list)の対応をあわらしたもの

QforMortals/dictionaries

q) dict: ()!()    / 空で作成
q) dict[`a]:1     / 値を追加
q) dict[`b]:2.0   / intとfloatで型が違うのでエラー
'type
q) dict
a| 1
q) type value dict
7h
q) type key dict
11h

q) dict: ()!()   / 空で作成
q) dict[`]: ::   / generic nullを最初に入れると型が不定になる
q) dict[`a]: 1;
q) dict[`b]: 2.0;
q) dict
 | ::
a| 1
b| 2f
q) type value dict
0h

q) dict@`b      / @でもアクセスできる
2f
q) dict.a       / 不定型にすると"."でアクセスできるようになるっぽい
q) dict.c:`C    / 値の追加もできる
q) dict
 | ::
a| 1
b| 2f
c| C

q) dict: dict _`   / `を削除したい場合
q) dict _`a        / これは消えて見えるだけ
b| 2f
c| `C

q) dict2.a:1       / 何も無いところから定義するとこちらの形になる
q) dict2
 | ::
a| 1
q)dict3[`a]: 1     / dictionaryがないとダメ
'type

※「::」は generic null をあらわす非常にわかりにくい記号...



□ dictionaryとtable
dictionaryはテーブルに変換することができる
dictionaryの作り方によって変換方法は主に2種類ある

※前提: dictionaryのkeyがsymbolのリストであること
(A) valueがatomである(もしくはatomとして扱いたい何か)
⇒ enlist
(B) valueがconformableなリストである(atomか同じ長さのリスト)
⇒ flip
q) .Q.w[]        / valueがatomのリスト
used| 120288
heap| 67108864
peak| 67108864
wmax| 0
mmap| 0
mphy| 16640253952
syms| 591
symw| 19098
q) flip .Q.w[]   / flipはダメ
'rank
q) enlist .Q.w[]
used   heap     peak     wmax mmap mphy        syms symw 
---------------------------------------------------------
120336 67108864 67108864 0    0    16640253952 591  19098


q) dict: `a`b`c!(1 2;3 4;5 6)
q) dict
a| 1 2
b| 3 4
c| 5 6
q) flip dict   / valueがリストのときはflipで
a b c
-----
1 3 5
2 4 6
q) enlist dict
a   b   c      / enlistだと違う形のテーブルになる
-----------
1 2 3 4 5 6


2015年3月7日土曜日

[kdb] tick / tickerplant (1) tplog

tickerplantのtplogの取り扱い

・参考: First Derivatives - q for Gods 23
http://www.firstderivatives.com/Products_pdf.asp?downloadflyer=q_for_Gods_July_2014

・tplogの読み込み
作成済みのtplogの読み出し方法
tplogはupd関数とその引数がそのままの形で記述されている。そのため、通常のloadでは読み出しができない。
q) get `:tplog
`upd `MarketData           (0D00:00:00.068812000 0D00:00:00.068812000 0D00:00..
`upd `MarketData           (0D00:00:00.168898000 0D00:00:00.168898000 0D00:00..
...
読み出し(実際に再実行)には、専用の-11!関数を使う
q) \l schema.q   / schemaファイルを読み込み
q) upd:insert    / upd関数を定義
q) -11! `:tplog  / 
...              / tplogの行数が出力される

q) value each get `:tplog   / -11!はこれと同様(より効率的)

[kdb] テーブル保存・読み出し set/get/save/load

テーブル保存・読み出し関連

・save
テーブルを保存する。そのままならbinaryで拡張子をつけると各形式で保存される。
引数はsymbol型で指定する。
q) save `table         / currentディレクトリに保存(`:table set table と同じ)
`:table
q) save `:/tmp/table   / fullpath指定
`:/tmp/t
q) save `$"/tmp/table"
`:/tmp/t
q) save `table.csv     / csv形式で保存
`:table.csv
・load
binaryで保存したテーブルを読み出す。
qファイルやディレクトリは\lを使用する。
q) load `table   / 読み出し (table: get `:table と同じ) 
`:table

q) \l /tmp/q.q   / qファイルの読み込みはsystem command

q) \l /tmp/dir   / ディレクトリの読み出しはsystem command
q) {load ` sv `:dir,x} each key `:dir   / ↑と同じ
...
・set
X set Y
YのデータをXのファイル名で保存する。saveよりも汎用的。
Xに/で終わるディレクトリを指定するとsplayed tableで保存できる。ただし、primary key以外はenumeratedされていないといけない。
q) `filename set table   / tableをfilenameで保存。tableはsymbolはNG
`filename
q) `:savename/ set table   / tableをsavenameでsplayedで保存
`:savename/
q) `:dir/tr/ set .Q.en[`:dir] tr   / enumeratedに変換しつつsplayedで保存
`:dir/tr/
・get
ファイルからデータを読み出す
q) table:get`:filename   

q) table:get`:dirname/   / splayed tableを取得