builderscon2018に参加してきました

  1. https://builderscon.io/tokyo/2018
  2. https://qiita.com/kou-sy/items/f0a97c524148d7633abe

builderscon2018に参加してきました。
talkについては資料とそのうちyoutubeに動画が上がるので見てもらった方が良いです。
知らなかったことをしる。というテーマの通り、日常生活をしていては知り得ないJavaCardの話やraspiでものすごく楽しそうに開発をする話、QuicやEnvoyなどの話題について知ることが出来ました。

電子名刺の作成過程を死ぬほど楽しそうに発表していたうずらさんがすごく印象に残っています。

twitter.com


以下、きになった技術などのメモ書きです。

## QUIC

twitter.com

kazuhoさんの発表でTLS1.3とQUICについて

個人的にはこれが一番興味深くて、「スノーデン事件」とかあの辺好きなら楽しめると思います。
transport層からすげ替えるんですね。各技術の問題点とそれをどう克服したのかが楽しく説明されていてワクワクしながら聞いてました。


## Envoy

Envoyとは大規模で近代的なサービス指向アーキテクチャー向けに設計されたL7プロキシーおよび通信バス
所謂microserviceについて回る問題を解決するためのproxy。
導入したいので、自分でも検証してみよう。
中身がC++11なので復習しないといけない。

  1. https://github.com/envoyproxy/envoy
  2. https://qiita.com/seikoudoku2000/items/9d54f910d6f05cbd556d

+ https://speakerdeck.com/seikoudoku2000/envoy-externals-and-ideas-builderscon-2018
+ https://www.youtube.com/watch?v=RVZX4CwKhGE

## Kubernetes

カンファレンスの中で一番登場回数が多かった気がします。
この間でたと思ったのに、普通に運用されてるんだな。

  1. https://kubernetes.io/docs/home/?path=users&persona=app-developer&level=foundational
  2. https://www.slideshare.net/teppeis/kintone-awsdvopsqa-111906067


開催者、発表者、スタッフの皆様お疲れ様でした。
素晴らしいカンファレンスでした。
ありがとうございます。

macでのperoの設定

blog.kazuhooku.com


こちらのツールが非常に素晴らしかったので周りの人に紹介するために書いてます。
本日時点だと以下の手順を踏まないとつかえません。
そのうち、peco本家が対応するとは思いますが、周囲に広めたいので書き残しておきます。

5.0以上じゃないと動かないのでbrew版があるなら消します

brew uninstall peco
Uninstalling /usr/local/Cellar/peco/0.4.9... (6 files, 4.2M)

依存しているものをいれます

brew install source-highlight less

最新版のpecoをinstallします

go get github.com/peco/peco
cd $GOPATH/src/github.com/peco/peco
make
cp releases/peco_darwin_amd64/peco $GOPATH/bin

必要な設定をする

export LESS='-R -N'
export LESSOPEN='| /usr/local/bin/src-hilite-lesspipe.sh  %s'

初回公開時に `/usr/local/bin/src-hilite-lesspipe.sh ` が違うパスになっていました。

cat > ~/bin/pero

#! /bin/sh

exec ack "$@" . | peco --exec 'awk -F : '"'"'{print "+" $2 " " $1}'"'"' | xargs less '
chmod + ~/bin/pero

agでファイル出力時もterminalと同じように閲覧したい

agことthe_silver_searcherをterminal上で使用した場合以下のような形式で出力されます

ag isatty
src/options.c
355:    if (!isatty(fileno(stdout))) {

src/print_w32.c
50:        !isatty(fileno(fp)) ||

これをファイルなどに書き込んだ場合、ファイルパスが先頭についた形で出力されます。

src/options.c:355:    if (!isatty(fileno(stdout))) {
src/print_w32.c:50:        !isatty(fileno(fp)) ||

これは出力先がterminalかどうかをisattyで判定しているので起きているのですが

351     /* If we're not outputting to a terminal. change output to:
352         * turn off colors
353         * print filenames on every line
354      */
355     if (!isatty(fileno(stdout))) {

terminalで見てる感じでファイルにも出力したいよねという感じでラーメン好きな人に相談したら

ag --heading --numbers isatty

こちらのオプションで似たような出力を得ることができました。

src/options.c
355:    if (!isatty(fileno(stdout))) {

src/print_w32.c
50:        !isatty(fileno(fp)) ||

便利ですね。

なお、こちらで使用されたagは以下のバージョンを使用しております

ag --version
ag version 1.0.2

Features:
  +jit +lzma +zlib

Goで読んだ本-とある同僚からの相談

この記事は Go (その2) Advent Calendar 2016 - Qiita の 18 日目の記事です。

Goを始めるにあたり、皆様はどうしているでしょうか?

などを見て始める方がいらっしゃる一方、 本を手にとって始めて見る方も一定数いらっしゃるかと思います。やはり日本語で書かれていること、本を書かれた方の知見などが得られるのは大きいのではないでしょうか。ここ最近、日本でもGoが流行っているせいか割と多くの本が出版されています。 私も本を読むのが好きなせいもあり、出版されて目立つ物は買って読んでいました。 自分よりその分野に詳しい人が、本を書くという過程で不要な情報をそぎ落とし精製された文章は読んでいてとても楽しいです。そんな感じで本が好きなので、同僚に「どの本がおすすめ?」なんて聞かれるのは割と楽しいわけです。そう言う場合、相手は同僚なのでスキル傾向とかやりたいこととかある程度分かっているので、

  • 入門じゃ無くてもうちょい深いところを知っときたい
  • Windowsで動かす予定があるのでその辺の知識が欲しい
  • 並列周り知りたい

という事前情報がありました。

もうちょい深くということで、

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

Windows対応と言うことで、

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

並列周りということで、

WEB+DB PRESS Vol.95

WEB+DB PRESS Vol.95

をおすすめしたんですが、 「僕の小遣いじゃ、全部は辛いすね。」 というお返事がかえってきまして、うーん。そういう事情もありますよね。そうなると、この中で一番コスパが良い「プログラミング言語Go」をおすすめしました。( 460pあって4000円ぐらいのお値段はお得ですよ。

  • Goの機能について一通り紹介している

- 特に以下は読むまで詳しく知らなかった
- forによる文字列連結のコスト
- UnicodeUTF-8の話
- 定数生成器 iota
- 構造体埋め込みと無名フィールド
- 無名関数のところにあるループ変数の捕捉
- 構造体埋め込みによる型の合成

  • 並行処理も2章さかれていて分かりやすい
  • Cとの接続方法であるcgoの使い方も書かれています

あと、大きなポイントと言えば ブライアン・カーニハンが書いてるのと、 割と大きな声で、「読んだ本?プログラミング言語Go読みましたよ。」って言える。ということろでしょうか。

ただ、個人的には他の2冊もお金が許すならおすすめです。

  • みんなのGo

- 言語を軽く学んだ後、次にやるべきコトが列挙されている
- 著者が活発に開発されている方が多いので経験からくるもので信頼できる
- 一般的な開発などをよく知らない人にはかなりお勧め
- マルチプラットフォームで動作する社内ツールのつくり方 は余り知る機会がすくないのでいい
- The Dark Arts Of Reflections 不可能を可能にする黒魔術 はこの手の黒魔術は知っておくとちょっと上達した気になれるのでいい

  • WEB+DB PRESS Vol.95 特集2 Goによる並行処理 複雑な処理をスイスイ書こう!

- マルチプロセスとマルチスレッド方式という、これまでの並列処理についての特徴などを解説していて並列処理どうしたらいいのてきな人におすすめ
- 美味しいのは、著者のpecoというツールを作る過程で得られた知見とpecoについて詳しく書かれている点です。


クリスマスですし、年末年始の長期休暇にも突入しますし、読んでない方いらっしゃいましたらこれを機会に読んでみられてはいかがでしょうか。

言語間に寄るsplitの仕様の差異

たまたま、goで書かれた物をperlへ移植しようとしていたらsplitの挙動の差が出てきまして、他の言語の場合どうなるんだろうとぱっと思いついた言語で実行して見ました。以下の文字列を言語標準でついている文字列のsplitを実行した結果となります。

"/path/to/hoge/"
言語 結果
perl(5.12) ['','path','to','hoge']
golang(1.5) ["" "path" "to" "hoge" ""]
ruby(2.1) ["", "path", "to", "hoge"]
ptyhon(2.7.8) ['', 'path', 'to', 'hoge', '']
js [ '', 'path', 'to', 'hoge', '' ]
perl6 ("", "path", "to", "hoge", "") # (perl6-m -e 'say "/path/to/hoge/".split("/").perl')
clojure(1.4.0) ["" "path" "to" "hoge"]
php(5.5.14) [0] => [1] => path [2] => to [3] => hoge

単純にsplitをした結果、末尾の扱いに差異が見られました。


言語の樹形図を遡っていけばなんか分かるのですかね。


http://gigazine.net/news/20070126_computer_languages_history/

追記

結果の例の字がtypoしてました。これは、言語別に試したときにtypoしていたようです。

node-nopasteを作りました

npm installで手軽に入るnopasteが欲しかったので作ってみました。

  1. npm installでよほどnodeのバージョンが古くない限りは入るはずです。
  2. defaultの挙動がonmemoryなのでserverを落とすとそのままデータが消えます。
    1. nopaste本来の役割が一時的なデータの保存であるという意味合いがあるのでこうなっています。
    2. 永続化を希望する場合は、redisを立ち上げて環境変数からredisを指定してください。

www.npmjs.com

npm install node-nopaste

まだ0.0.1なので改善したいところなどありますが
ちまちまアップデートしていこうかと考えています。

hubot-karma-simple version up 0.1.4 and bug fix

先日npmにあげたhubot-karma-simpleですが再起動でデータが消える挙動が有りましたのでversion0.1.4にて修正いたしました。

www.npmjs.com