読者です 読者をやめる 読者になる 読者になる

人権真骨頂

とくがたかいことでゆうめい

Crystalでhttpstat実装した

さいしょに

この記事はCrystal Advent Calendar24日目の記事

qiita.com

前日はhaijuさん.   

TL;DR

  • ほぼ初めてCrystalを触った
  • 手始めにhttpstatを作ってみた

f:id:upamune:20161224215639p:plain

httpstatとは

id:b4b4r07さんの記事を読むのが一番はやいと思う.

www.tellme.tokyo

簡単に言うとcurlのラッパーで応答時間がグラフィカルに表示されるやつです.

最初にPython 実装が,続いてGolang, PHP, Node.js, Bashなどの実装が公開される.だけど,Crystalの実装は見つからなかったので作ってみた.

つくってみて

Python実装をそのままCrystalに移植した感じになった.もっと良い感じにできると思う.

Colorize というモジュールが標準で用意されててべんりだった.

Colorize - github.com/crystal-lang/crystal

puts "cyan".colorize.cyan.to_s

とやればシアンで出力されてべんり.

JSONとクラスの対応は JSON.mapping を利用する感じ.

class Stat
  JSON.mapping({
    time_namelookup:    Float64,
    time_connect:       Float64,
    time_appconnect:    Float64,
    time_pretransfer:   Float64,
    time_redirect:      Float64,
    time_starttransfer: Float64,
    time_total:         Float64,
    speed_download:     Float64,
    speed_upload:       Float64,
    remote_ip:          String,
    remote_port:        String,
    local_ip:           String,
    local_port:         String,
  })
end

stat = Stat.from_json(json_str)

とやればマッピングできる.

Crystalはクロスコンパイルできますよとのことだったので,macOS上でLinux用にクロスコンパイルしようとしたが,ドキュメント通りにやったができなかった.

[lala.local]% crystal version
Crystal 0.20.1 (2016-12-05)
[lala.local]% crystal build src/httpstat.cr --cross-compile --target "x86_64-unknown-linux-gnu"
[lala.local]% docker run -it -v $(pwd):/work --rm dockcross/linux-x64 /bin/bash
[root:/work] 1 # cc httpstat.o -o httpstat -lpcre -lrt -lm -lgc -lunwind
/usr/bin/ld: cannot find -lpcre
/usr/bin/ld: cannot find -lgc
/usr/bin/ld: cannot find -lunwind
collect2: error: ld returned 1 exit status

GOOS=linux GOARCH=amd64 go build 的なノリでできると思っていたけどできなかったので急にしんどくなってやめた.どうやればいいんですかね....

かんそう

ベターッと書いてしまったので良い感じに書き直したいが,現状使えているのでフムーという感じになっている.

普段Golangばっか書いててる人間としては zip, map 等のリスト操作系とか to_sto_h で変換できる感じが新鮮.色々機能あるっぽいのでdocsをちゃんと読んでおきたい.どんどん書いて世界観を感じていきたい.

crystal init app httpstat でプロジェクト生成できるのも良いし, gofmt が大好き人間としては crystal tool format が用意されているのも嬉しい.

各種べんりツールはこちらのブログを参考にするとべんり.

rhysd.hatenablog.com

開発スピードとしては,1ヶ月に一度くらいにアップデートがある感じ?

Tags · crystal-lang/crystal · GitHub

このブログを書いているときにもアップデートがあった.

さすがにプロダクションに入れることはやらないけど(社内ツールには入れたりするかも),来年はGolangとCrystalをやっていこうと思う.

 

DMM英会話始めて一ヶ月くらい経った

この記事はAizu Advent Calendar 2016の15日目の記事です.

www.adventar.org

前の人は, id:mizukisonoko で,次の人は, stringamp さん.

k8sベースのPaaSのLast.Backendっていうのを見つけてこれで遊んでみてそれを記事にしようとしたけど,クラウド版は正式リリースされていない.

Last.Backend

OSS版を自分でデプロイして,k8s,RethinkDBをセットアップしてやってたけどうまく動かなかったので(ほんまに機能あんのか?) 最近やってるDMM英会話について書くw

github.com

なぜ始めたか

id:satelliteyezu がSkype英会話のレアジョブをやってた.

www.rarejob.com

以前からSkype英会話やってみたかったけど,月額料金がちょっと高いし,非ネイティブの人の授業どうなんだろうと思っていたけど,話聞いた限り良さそうなので始めるか〜みたいな感じで始めた.

DMM英会話とは

なぜ,Skype英会話は色々あるけど,DMM英会話を始めたのかというと,他と比べるとサイトが分かりやすくて安かったからという理由.一番安いのは月額4,950円.毎日1レッスン(25分) できる.あくまで,1日1レッスンできるっていうやつなので,やらなかったら次の日2回できるみたいなのはない.なので,毎日やらないと損.ちなみにDMM英会話は登録すると,iKnow!のプレミアムプランを利用できるようになる.iKnow!のプレミアムプランは月額1,480円なので,お得.

やってみて

勿論,一ヶ月間で英会話ができるようになったわけではないが,やる前より話せるようになってきた.教材も自分で選べるので,色んなのやっているけど,今はデイリーニュースライトで落ち着いている.フリートークとかもたまにやったりしている.

DMM英会話 初級デイリーニュース教材 | DMM英会話が送る初級ニュース教材、毎日更新!

ボキャブラリー,英文読解,英作文,ディスカッションが一度にできてお得.

瞬間英作文とか最初はやってたけど,ただリピートするだけなのでわざわざこれでやる必要ないなと思ってやめた.

他にも良い効果があって,コミュ力というか社交性みたいなのが上がった気がする.

自分は毎回違う先生を選ぶようにしているので,毎日知らない人と25分話すという感じになっている.これがコミュ力アップにつながっている気がする.家に引きこもっていて誰とも話さないオタクはDMM英会話でリハビリすれば良さそう.

おわりに

DMM英会話は始めるときに招待コードみたいなやつを入れると,いつでもレッスンできるチケットみたいなのが両方に与えられるので,お得.始めるときは,身近にいる人に声をかけて招待コードをもらうと便利そう.

英語やっていき〜〜〜