Ubuntu16.04のkeyringでパスフレーズ無しSSH鍵を使おうとしたらパス入力求められて使えない

startup-applicationでssh-agentのチェック外してログインし直せばうるさくなくなった。 もとは、パスフレーズを何度も入力しなくても済む便利ツールなのだが...。 パスフレーズ無しなんだから空白のままEnterでOKになってくれればいいのに、パスフレーズを入力せよ、と怒られるのですごく困ってた。

Rubyで小数第x位までを表示する

String#%

さらっとググると、

  • puts sprintf("%.1f", 0.11111)
  • puts 0.11111.round(1)

などが見つかる。

が、String#%を使った、もっと簡単な方法があった。

puts "%.1f" % 0.11111 # => 0.1

参考) http://ref.xaio.jp/ruby/classes/string/percent http://docs.ruby-lang.org/ja/2.0.0/method/String/i/=25.html

"%.1f" % 0.1"%.1f" .% 0.1

盲点というか、勉強になったのが、 anarchy golf の解答で、

puts "%.1f" .% 0.15 * 2

のような使い方をしているものがあった。

http://golf.shinh.org/p.rb?Convert+Radians+to+Degrees#Ruby2

一瞬、何が違うのか分からなかったが、

puts "%.1f" % 0.15 * 2 # => 0.10.1
puts "%.1f" .% 0.15 * 2 # => 0.3

確かに結果が違う。 . を付けることで、計算の優先順位が変わったようだ。 よくよく考えれば、メソッド呼び出し時のカッコを省略しているので、

puts "%.1f" .% 0.15 * 2
# ↓
puts "%.1f".%(0.15 * 2)

となっている。

追記

@ebanさんから、↓に書いてあると教えていただいた。

Rubyist Magazine - るびまゴルフ 【第 2 回】

ちゃんと勉強してないことが露呈した...

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 と同じ。

historyfc も、ShellのBuild-inコマンド。

$ type fc
fc is a shell builtin

ちなみにうちの環境は、oh-my-zsh入れてるので、historyfcの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

とすれば良い。