PICTとjoでテストケースをJson形式で作る
はじめに
PICTは、Microsoft製のPairwise法でテストケースをいい感じに絞り込んでくれるコマンドラインツール。 詳しくは↓記事を参照。(私がPICTの存在を知ったきっかけ) qiita.com
で、このPICTの出力は tsv 形式なので、 まあそのままでもテストケースとしては十分に扱いやすい。
ただ、せっかくだから Json 形式にしてあげたい。
そこで jo
コマンドを使ってみた。
PICTに食わせるファイル(モデルファイル)
DATA1: A, B, C DATA2: 1, 2, 3
pictでくみあわせ作成
$ pict a.txt DATA1 DATA2 A 3 A 2 B 3 C 2 B 1 C 1 B 2 C 3 A 1
作りたい json
[ { "DATA1": "A", "DATA2": 3 }, { "DATA1": "A", "DATA2": 2 }, { "DATA1": "B", "DATA2": 3 }, { "DATA1": "C", "DATA2": 2 }, { "DATA1": "B", "DATA2": 1 }, { "DATA1": "C", "DATA2": 1 }, { "DATA1": "B", "DATA2": 2 }, { "DATA1": "C", "DATA2": 3 }, { "DATA1": "A", "DATA2": 1 } ]
試行錯誤の結果
$ pict a.txt \ | \ # awk で "jo DATA1=A DATA2=1" のような行を作っている awk 'NR==1{for(i=1;i<=NF;i++){h[i]=$i}} NR!=1{r="jo"; for(i=1;i<=NF;i++){ r = r " " h[i] "=" $i } } $0 = r' \ | \ # awk で作った jo コマンドを実行して {"DATA1":"A", "DATA2":1} を作っている sh \ | \ # jo -a で Array にしている , -p は pretty-print の意で見やすくするために使用 jo -a -p
メモ
jo -a $(jo DATA1=A DATA2=1)
はうまく動くんだけど、
echo jo DATA1=A DATA2=1 | jo -a
は動かない。
$ echo jo DATA1=A DATA2=1 | jo -a ["jo DATA1=A DATA2=1"]
まあ、冷静に考えれば当然で、jo -a
は渡された文字列をそのまま素直に配列にしてるだけなので、
事前にjsonオブジェクトになるよう書いてあげないといけない。
つまり↓なら良い。
$ jo DATA1=A DATA2=1 | jo -a [{"DATA1":"A", "DATA2":"1"}]
prometric(US版)でAn error has occurred, please try again later.と出たら
Appointment Verification の時にそんなエラーが出た。
私の場合はすごくショボいミスで、 住所を日本語で書いてたのが不味かったらしい。 Chromeの自動入力に任せて英語化をサボったのが悪かった。
直前のコマンドをクリップボードにコピー
直前のコマンドをクリップボードにコピーするaliasを設定した。
alias yy='fc -ln -1 | pbcopy'
Linuxには pbcopy コマンドがないので、
if [ "$(uname)" != 'Darwin' ]; then apt install xsel grep "^alias pobcopy.*" ~/.bash_aliases || echo "alias pbcopy='xsel --clipboard --input'" >> ~/.bash_aliases fi
こんな感じで xsel コマンドをインストールしてる。
Debian系しかフォローしてないひどいあれですが。
Ruby Kaigi Day1 行ってきた
行ってきた。
場所は汐留。新橋駅から歩いて10分くらい。
朝、役所に用事があって行ってたので間に合うか不安だったけど、なんだかんだ30分前には着いた。 朝の時点でサイン対象の本が販売されていて、APIデザインとメタプログラミング買った。超絶技巧はサイン込みで持ってた。 その上二冊の分厚い本に加えて、Tシャツとパーカーも鞄の中に突っ込んだのでパンパンに。
MatzのKeynoteは、80%くらい Ruby ConferenceとRebuildの内容だったので、だいたい分かってる上で聞いてた。そのせいか会場の空気感と外れてしまったのがもやもや。
==~
でヒアドキュメントのインテントを消してくれるのは知らなかった。これは便利そう。
フォードとアランケイのくだり(求められたものではなく、必要とするもの・されるものを作ろう)はすごく心に刺さった。
2.3.0さっそく使おうとしたけど、ruby-buildではまだ対応してなかったので、初めて自分でコンパイルすることに。 せっかくだから rbenv で管理できるようにスクリプト化したけど、Dockerでやってるよ、という人もいて、その手もあったかという感じ。確かに、そろそろMac上で手軽にUbuntuとかCentOSとか触りたいし、導入進めようかなぁ。
続いて、すっごくコアな、Rubyのコンパイルの話やdid-you-meanの仕組みの話などなど聞いた。 テンプレートエンジン戦争とか。
最後の、RubyTrickはすごかった。時間を見つけて解析してみたい。
fcコマンドとpbcopyコマンド
最近、 fc
コマンドを知った。
Windowsの比較コマンドではなくて、Linuxの、コマンド履歴を出力する方。
つまりは history
と同じ。
history
も fc
も、ShellのBuild-inコマンド。
$ type fc fc is a shell builtin
ちなみにうちの環境は、oh-my-zsh入れてるので、history
はfc
のaliasになってる。
$ type history # oh-my-zsh/lib/history.zsh によるもの history is an alias for fc -l 1
fc
だけ打つと、直前のコマンドが実行される。
実行される前に、 Editorが立ち上がり、 /tmp/
以下にファイルが作られて開かれる。
開かれたファイルには、直前のコマンドが入力されている。
このコマンドを編集して保存して終了すれば、直前のコマンドに手を加えて実行することができる。
ちょっと気持ちよくワンライナー書いた後に、修正したくなった時に使うと便利かもしれない。
history
コマンドと同等の出力もできる。
fc -l [数値]
で出力する履歴の数を制御できる。1 だと全て。-1 だと直近1つ。
$ history | tail -n 2 1493 type fc 1494 history $ fc -l -2 1494 history 1495 history | tail -n 2
数値を並べると、逆順にもできる。tac
しなくていい。
$ fc -l 3 1 3 echo $ZSH 2 pwd 1 ls
-n
つければ、番号が消える。
$ fc -ln 3 1 echo $ZSH pwd ls
もともと、fc
を知ったのは、入力したワンライナーをクリップボードにコピペしたかったから。
pbcopy
と組み合わせて、
$ fc -ln -1 | pbcopy
とすれば良い。
mac で vim で ruby な環境構築メモ
いい加減、macのvim環境を整理しようと思って手を出した。 いつか清書してQiitaにUpするかもしれない。 (N番煎じだと思うのでモチベーションはそんなにない)
macで、と書いたけど、なるべく Linux でも動くスクリプトを意識している。
環境
- Macbook pro El Capitan
メモ
基本は Qiitaのこの記事を参照。とても良い記事。
ただし、vimは、macvim-kaoriya を利用しているので手順が違う。
というか、そもそも Mac 向けの手順ではなく、Linux向けの記事
macvim-kaoriya https://github.com/splhack/macvim-kaoriya
vim-plugin
↑の記事を参考にもろもろインストール。 自分の設定をGitHubに晒しているけど、ぐちゃぐちゃで恥ずかしい状態。
Lua
luaをbrewで入れたので、vimrcでluaのパスを指定しないとだめ。 .vimrcの適当なところに、
if has("mac") " lua is installed by homebrew set luadll=/usr/local/Cellar/lua/5.2.4_1/lib/liblua.dylib end
こんな感じで書いておく。
参考 Readme · splhack/macvim-kaoriya Wiki · GitHub
RSense
RSenseのインストール、設定はこんな感じのスクリプトを実行
brew list rsense 1>/dev/null 2>&1 || brew install rsense ruby /usr/local/Cellar/rsense/0.3/libexec/etc/config.rb > ~/.rsense
/usr/local/Cellar/rsense/0.3/
を、もっと汎用的に書けないものか悩み中。
ctags
Xcodeに入ってるみたいだけど、使いたいのは別のctagsなので設定が必要。
$ ctags -R /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ctags: illegal option -- R usage: ctags [-BFadtuwvx] [-f tagsfile] file ...
alias を設定すれば済む話だけど、何となく、Native Mac な設定を残しておきたい性分なのでしてない。
実践vimのアドバイスにしたがって、gitのhookを利用して、commit時にctagsを実行するように。 git hookのテンプレートを自分で作れるらしい。 下記、記事を参照して、~/.git_template/hooks を作っておく。
#!/bin/bash if [[ $(uname) = "Darwin" ]]; then ctags_bin=$(brew --prefix)/bin/ctags else ctags_bin=ctags fi [ -x ${ctags_bin} ] && ${ctags_bin} --tag-relative -R -f .git/tags
ctagsの対象ファイルを絞るとか、いろいろ調整は必要と思うけどとりあえずこれで、
<C-]>
で、メソッドの定義元にジャンプできるようになった。
↑でできてるので、 vim-tags
プラグインは入れてない。
Rubocup
gem install rubocup
NeoBundle 'https://github.com/scrooloose/syntastic.git' let g:syntastic_mode_map = { 'mode': 'passive', 'active_filetypes': ['ruby'] } let g:syntastic_ruby_checkers = ['rubocop']
完
Reference
Dashに慣れた方が、他のドキュメントも読めるし便利だろうと思いつつ値段に尻込みしている最中。 vimで読むのが便利ならDashじゃなくても良いんじゃないかなぁ。。。うーん。
gem install rubocop refe2 bitclust-dev which rbenv && rbenv rehash bitclust setup
rubyはrbenvでインストールしているので、ref_refe_cmdのパスを変えてあげる。
NeoBundle 'thinca/vim-ref' NeoBundle 'yuku-t/vim-ref-ri' let g:ref_refe_cmd = $HOME.'/.rbenv/shims/refe'
これで、K
でドキュメントが見れる。
<CR>
と <C-I>
と <C-o>
で移動すると良い感じ。
bundlerでインストールした場合(一部未解決)
gemをbundlerでインストールすると、ドキュメントが付属しない。 なので、別途インストールする。
bundle install bundle exec gem rdoc --all
こうすれば、 :Ref ri XX
でドキュメントを見れる。
が、
bundle install --path vendor/bundle
のように、 別のディレクトリにインストールすると参照できない。
パスの問題なんだろうなー、と思いつつ解決できていない。
jenkins plugin のインストール数ランキング作ってみた
URL
http://yasuhiroki.github.io/jenking/
仕組み
世に出ている jenkins plugin のインストール数は json 形式でネット上に保存さている。
その json をかき集めて、ただ表にまとめただけ。
json は月一でしか更新されないので、私が手元のPCで集計したものを github に Upしている。
なのでJenkins公式HPに負荷が掛かるわけではないので、怒られないはず。たぶん。
今後
そもそも、こういうものはいずれ作る予定、ってどこかの資料に書いてあった気がするので、そんなに作りこむ予定はないです。