2017年1月振り返り

はやいものでもう2017年の1/12が終了したんですね*1。2016年振り返りで書いたように、定量的な指標を導入してみたのでそれを使って振り返りをやろうと思います。

定量的な指標というのはwakatimeで計測した時間です。wakatimeはコーディングしているときの時間を計測してくれるサービスです。
自分が最近何やってるかな、というのの振り返りにはもってこいですね。 プロジェクト名を書いても伝わらないので言語別の指標での振り返りを毎月やっていくことにします。

記録

2017年1月 コーディング時間: 3724分 言語比率 1〜5位

YAML         601 
Ruby         388
ERB          254
Go           233
JavaScript   201

total: 8135 minutes

訂正版
Rank    Name    Minutes
1   Ruby    1658
2   YAML    1511
3   Go  1018
4   JavaScript  326
5   ERB 321

2017-03-15追記: 普通に計算ミスってました。 -> 懺悔 - Smoky God Express

雑感

記録から

えーと、アホみたいにYAMLをいじってますがこれはインフラをやっていたせいです。最近はAWSでDockerを走らせるには、というのをいろいろ試してます。CloudFormationの設定ファイルを書き、hakoの設定ファイルを書き、docker-compose.ymlを書き、circle.ymlを書き。試行錯誤をひたすら繰り返していたらこうなりました。得意言語はYAMLです(キリッ*2。ERBもひたすら多いですがこれも設定ファイルのテンプレートとしてERB使ってたからですね。 Rubyは、まあ普通にアプリケーション書いてたので妥当。
GoとJavaScriptは振り返り用のツールでGo + Vue.jsのwebアプリを作ったのでそれの影響ですね。

総コーディング時間が3724分 = 60時間ちょいなのは、なんか少ない気がする。
AWSの画面でイベント見つめたり、ドキュメント読んだり、どうするかミーティングしたりというのは平常より多めだった気がする。

あと日別で見ると完全にやる気を失っている日が何回かあって、なるほどという感じ。

f:id:hkdnet:20170201000344p:plain

こういうのをなくしていきたいのでアラートとかいれたほうがいいのかな。
「昨日n分しかコード書いてませんけど大丈夫ですか?」的な。

やったこと

ざっと思い出していきます

  • 振り返り用webアプリ書いた
  • google slides apiについて調べてある程度使えるようになった
  • cloudformationに詳しくなった
  • awsでのNW構築ができるようになった
  • hako + ECSあるいはEBを使ったデプロイができるようになった
    • hakoは割と難しいと思うのでなんか記事書きたい

こんなかなー。
やったことはほんとに忘れていくので週次くらいでサクサク書いてったほうがいいかもしれない。

*1:このフレーズを直近3日で使った人70%くらいいそう

*2:なお全然仕様把握してない

『ゼロから作るDeep Learning』を読んだ

www.oreilly.co.jp

年末にやるかと思って買って、買った直後に3日ほど寝込んで結局昨日までかかってしまった。
といっても正月明けてから読んだのはたぶんトータル2時間程度で完全にサボってただけです。

内容は、ゼロから作るとあるだけあって、ほんとにゼロから作ったし、内容も初歩の初歩からでかなり助かった。大学入試以来数学から遠ざかっていたので懐かしさがある。ちなみにどうでもいいが大学入試の数学はセンターも二次もコケた記憶があるのであんまり思い出したくない。
と書いていたらそういえば経済学部では統計もミクロ経済も数式書いてたことを思いだしてきた。ウッ頭が……

1章のPython入門では、お決まりの環境構築から。
個人的にPythonには苦手意識があって、virtualenvだのなんだのというのがよくわかってない。
ただpyenv + condaでの環境構築はかなりスムーズにいって助かった。
numpyも初めて存在を知ったがこれは便利だなーという感じ。
本書に出てきた使い方以外にもたくさんありそうなので別途調べたほうがよさそう。

2〜6章は機械学習部分を作っていくぜーという感じ。
全結合レイヤのみで畳み込みは7章へ。
特に面白かったのはlearning rateの調整の話かな。
このへんはノートで板書をとっていたのだけど、途中でDropbox paperに変えた。
Tex記法で数式書けたりして楽しい。

8章はざっといろんな事例紹介という感じで読みとばしておしまい。
実際になにかやる段になったらもう一度読んだほうがいいかもしれない。

読み終わったので「よっしゃ、じゃあ俺も機械学習やってみっか」という気持ちではあるがMNISTのような使いやすい形になっているデータが世の中にどれくらいあるのだろうと思ってつらさを感じている。 まだCNNの感覚とかつかめてない気がするしChainerとかtensorflowとか聞いたことあるぜってやつらのチュートリアルに手をだすのがいいのかなー。

Slackのスレッド機能をどう使うか

待望のSlackのThread機能きましたね。みなさんつかってますか。

Slackはチャットツールとして手軽でヨサがあったもののフロー型の情報でありその運用過程にはいろいろ問題がありました。
スレッド機能の登場は僕らの頭を悩ませていたそれらの課題をいくらか解決してくれるものと思われました。

  • 同時に複数の話題が流れたりするとどれへのリプなのかわからない
  • ちょっとタイミング逃すと返信しにくい
  • 議論が発散しがち*1

しかし、実際つかってみるとどーもなんか違う感じがあります……。

いや、デフォでスレッド内だけに発言されても……開くのめんどいし……。スレッドの開始位置どこだっけってなるし……。
なんかどうやってつかえばいいのかなあという感じでなかなか難しいなと個人的には思ってました。

そんなスレッド機能ですが今日試しに個人の作業ログとして残してみたらいい感じになりました。
こんな感じ(さっきやっつけで作ったイメージ図*2

f:id:hkdnet:20170126000122p:plain

いままで時間のログとか、やることリスト、やったことリストとかをSlackの分報内で実現しようとして流れて発散しがちだったんですが、これなら続くかも?と思ってます*3

スレッド機能をいい感じに運用できてるチームがありましたらどう使ってるか是非共有してほしいですね。
冒頭にも書きましたけど、みなさんつかってます?どうやって使うといい感じですか?

*1:ちなみに僕はこみ入った議論はチャットでは避けたほうがいい派です

*2:お仕事では分報という個人用チャンネルがあるのでそこでやってます。

*3:なお、過去そういって全然続かなかった例多数

RubyでEnumerableを条件Xを満たすものと満たさないものに排他的に分けたいんだけど

どうするのがいいんでしょうか。
メモリとかパフォーマンスとかそういうのはあんまり気にしない前提です。

以下のサンプルコードでは対象のEnumerableは変数 arr に代入されているものとし、条件Xを満たすかどうかのメソッドは foo?(x) という名前であるとします*1

普通に書く

a = arr.select { |e| foo?(e) }
b = arr.select { |e| !foo?(e) }

排他的に分けたいのにブロックが2回書かれている。 条件に変更があった場合の変更漏れ、うっかり ! つけ忘れるなどのミスをやりそう。微妙。

selectとrejectする

a = arr.select { |e| foo?(e) }
b = arr.reject { |e| foo?(e) }

おんなじブロックを使うからまだミスが減る気はする。が、微差だろう。

引き算する

a = arr.select { |e| foo?(e) }
b = arr - a

排他的っぽい。割とよい

まとめてみる

tmp = arr.group_by { |e| foo?(e) }
a = tmp[true]
b = tmp[false]

hash[true] がそこはかとなくキモい気がする……。

調べてみる

a, b = arr.partition { |e| foo?(e) }

普通にあった*2

参考: https://docs.ruby-lang.org/ja/latest/class/Enumerable.html#I_PARTITION

結論

リファレンス見ろ

*1:どうでもいいけどpredicate methodと聞くと毎回predict思い出してついでにエッグベネディクトまで思い出してお腹がすく

*2:ちなみに記事書き始めてから見つけた

--pathつきでbundleしたときのGemfile内でrequireすると指定したpathからロードしようとしてくる

背景

やんごとなき事情によりGemfile内で色々することになり*1そのためのgemを作って使うことになった。 ローカルではうまくいったけどCI環境にいれてみるとどーもうまくいかない。

事象その1

状況

# Gemfile

source "https://rubygems.org"

require 'awesome_gem'
$ bundle
# 詳細わすれたけどそんなgemねえ系のエラー

解決策

先にグローバルにgem installしておけばいいんじゃね?

$ gem install awsome_gem
$ bundle
# => OK

事象その2

状況

Gemfileは同じ。

$ gem install awsome_gem
$ bundle install --path vendor/bundle
# 詳細わすれたけどそんなgemねえ系のエラー

--path を指定するとまたもrequireでコケる
これはなぜかというと、--path オプションを指定した場合、Gemfileを読み込む時点でrequireでロードするパスがオプションの値になってるっぽい。 だからグローバルにインストールしておいてもそれをrequireしてくることができない

解決策

$ mkdir tmp
$ cd tmp
$ echo <<EOS > Gemfile
source "https://rubygems.org"
gem 'awesome_gem'
EOS
$ bundle install --path ../vendor/bundle
$ cd ../
$ rm -rf tmp
$ bundle install --path vendor/bundle

要は別Gemfileでvendor/bundleに突っ込んでおけばよい。


こんなことでハマる人、たぶんそうそういないと思うけどメモ。

*1:いいプラクティスではない気がしている

自宅の無線LAN環境について

最初に言い訳しておくとNW全然詳しくないので嘘を書いているかもしれませんし、これは日記なので解決したとかそういう話ではないです。

ウチの無線LAN環境には不満がある。長く繋いでると、ときどき「新しいコネクションが張れなくなる」気がする。

いま言っている事象は具体的には、skypeなどの通話は途切れずそのまま続行できるが、その間に新しくwebページを開くとかgit pushするとかの操作をするとNWにつながりません的なエラーを吐く。ブラウザの場合、大体DNSでの解決に失敗しましたと出るがDNSの問題ではなさそうだ。
macの上のバーにある無線LAN状況を示すやつだと、バリ4*1で、ちゃんと接続していることになっている。しかし上述の状態になる。謎い。

電器屋のおねーさんに相談したら「それ老朽化っすよ老朽化。無線LANルータ側の受信部が老朽化してそういうことになります。新しいのどっすか」という返答だった。ふーん、ありがとうございますと思いながらその日は帰って、ラズパイを新しい無線LANルータにしてみることで様子をみてみた。

hkdnet.hatenablog.com

結果、ラズパイのNWは非常に安定していて、何の問題もなく使えたので確かにこれはどうも無線LANルータ本体の問題なのかもしんないっすねえという気持ちが高まっていた。

というわけで家人に買い替えどうすかと聞いてみたところたぶん変えてから1年経ってないとのこと。うーん、じゃあ老朽化じゃないんか?というかそもそも俺と同じ事象起きてる?と聞くと全然起きてないっていう話に。えー、みんな我慢強いなって思ってたら俺だけかよ。受信部の老朽化なら全員に影響ありそうなんだけどそこんところどーなんすか。

うーん、まあとりあえず今のがどんくらい古いのか調べてみますか、と思って型番検索して某ねだん.com見てたら、クチコミでファームウェア品評会してる人が。はー、熱心な方ですね。中の人か?
と、ここでファームウェアアップデート、全然してなくね?と気づく。

調べてみたら現行は1.xでどーも2.x系が出てるっぽい。よっしゃこれはあげてみるしかありませんねと思ってあげてみたのがついさっき。うまくいくといいなあ。


そういえば無線LANの設定画面が見たいからIP調べたくて、 arp -a したIP全部調べてみたけど出てこなかった。
BUFFALO製品はStationRadarなるスマホアプリでLAN内の製品調べられるみたいだからこれつかってみたらさっきの一覧にはないIPで出てきた。ふーん。

そんでファームウェアアップデートした後にもっかい arp -a 叩いたら出てくるようになった。なんでやねん。

*1:たぶんこれ白黒で電波の強さを示してると思っているけど合ってますか?

2016年を振り返って

定量的な振り返りとしてGitHubの草を置いてみる。

f:id:hkdnet:20161230150110p:plain

f:id:hkdnet:20161230150215p:plain

合計: 5319 contributions

定性的な振り返りとして隔月のことを思い出して適当に書く。

1月

昨年の11月末で前職をやめて、今の職場に入りました。
前まで ASP.NET Web Form をやってたけど Ruby + Rails + MySQLという感じになって何がなんだかわからない感じで過ごしていた記憶があります。
とりあえずギョーム的にも最初のほうは暇だったのでわかるようになるまでひたすら rails new してました。そしたらなんとなくRailsの気持ちがわかるようになっていまもなんとなく使ってます。たぶん結局3週間で7回くらいやってる。

2月

どう書くが復活したので参加。ここからなるだけ参加するようにしている。

気が向いて西日暮里.rbに初参加したのがこの月だったと思う。場所は五反田っていう西日暮里の外れのほう*1でした。
2016年の隠れ目標としてどっかのコミュニティに参加して活動するというのがあって、それで選んだのが西日暮里.rbでした。
この後開催されることになる「オブジェクト指向設計実践ガイド読書会」などの企画もあって、適当に参加した割に当たりだったなと思っています。どう書くのときに声を書けて頂いたmtsmfmさんに感謝。

3月

副業が始まったのがたぶんこのくらい。
書いたことのないphpを使って、顔も知らないチャットとかでの連絡も出来ない前任者が書いたコードを、使ったことないフレームワークに載せ替える、という仕事でした。
しかもコード読んでおかしくね?って思って仕様書見ると仕様と全然違うとかあったりして笑う。笑いながらいっぱい直しました。

サービスとして2つのシステムがあってそのうちの片方を担当してました。JSONうけとってなんやかんやして返す、っていうプロトコルだったのだけど、実際に疎通確認ほとんどしないままがーっと作ってからえいやでくっつけて動いたのがほんとよかった。状態少ないシステムだったからなんとかなったけどこれ状態多かったら死んでたね。もうちょいインクリメンタルにやっておくべきだったねと反省した*2

直前でがっちゃんこした割にはその後のバグも少なく、実際リリースした後のバグもそこそこ少なく抑えてきているはず。これはほんとチームメンバーに恵まれたからだと思う。ありがとうございます。

4月

たぶん本業でCrystalのCLI書いてたのがこの時期くらい。Crystalを業務で書いてる人、世界に何人いるんだろうなって思いながら書いてた。

5, 6, 7月

たぶんJSONAPI::Resourcesとかの勉強してました。たぶん。あんまり記憶にない。
忘れてたけどたぶんこのあたりにGitHubパーカー買ってるのでmmyojiさんと初めて会ったりしてるはず。

8月

ブログから察するにCI環境ととのえるべ、っていってShippableつかってみてこれでよさそうだねってなったときかな。さっきから記憶じゃなくてブログ記事に頼ってることに気づいたので来年はもうちょいブログ書いたほうがよさそうだぞ。
Shippableの記事は例えばCI環境のマシン自体が殺された場合全然キャッシュ効かねえとかそういうのがあってまためんどくさい感じがあるのでまだ実は全然プロジェクトで使ってません。すみませんすみません

9月

4月頃に作ってたCrystalのCLIRubyで書き直してた。Crystalを業務で書いてた人、まあそこそこいるかもだけどそれをRubyで書き直してるのたぶんあんまりいないだろうなって思いながらやってた。

10月

謎。完全に空白。

末にオブジェクト指向設計実践ガイドの読書会をやっていてよかった。
これは来年にたぶん最後の9章やると思うのでちゃんと出席して終わりたい。7,8章のところ参加できなかったのが悔やまれる。

あとたぶん3, 4月に書いた副業のコードをリファクタし始めたのもこの頃だと思う。過去の自分のコードに向き合うのはだいぶつらいことを再確認した。

11月

近況っていうエントリがあったからヒントになるかなって思って覗いたらだらだら漫画の感想書いてるだけで過去の自分に殺意が湧いた。

hkdnet.hatenablog.com

それはそれとしてここに書いてあるように青春のアフターが最高で、ひたすら最高なので是非陰キャラオタク系男子には読んで頂きたい。あの Rebuild.fm でも紹介されてましたよ!!!*3

高校時代の友人にあったらCOBOL使いからWEB系jserに転身してたのでテンションがあがってLINEbot作ろうって話になった。
結局bot作成はbot作るぞってのじゃなくてサービスがあってそれの一つのUIとしてbotがあるっていう形式じゃないとつらいよねって話になってbot作成の気持ちは消えてしまったわけだけどLINEbotの作成に役立ちそうな画面は作りました。まだカルーセルとか対応してないですけどふつーの動作確認には使えると思います。

github.com

書いてなかったけどShinjuku.rbにいってLTしてきました。初LTでした。
喋り慣れてる感じがしますねって言われてのはたぶんどう書くのおかげです。ありがとうございます。

12月

「ECS使うべECS!」っていって色々調べものしてたらよくわかんないまま死んだ。今も死んでいる。つらい。
インフラ関連について気軽に聞ける人がいないのは結構困っていて、まあ、一言で言うとマジで困っている。

さすがにそろそろディープラーニングやっておくか、と思って始めた。たぶんいま半分くらいなんだけど楽しい。年末年始の間に終わらせたい。

www.oreilly.co.jp

来年のこと

  • もうちょっと定量的に計測できる指標を増やしたい
  • ブログもうちょっと書こう
    • 特に業務で何やってたのか謎な期間が多い

*1:西日暮里.rbの開催地は全て西日暮里ということになります

*2:とはいえ実際痛い目見てないので本当に反省できてるのかはあやしい

*3: Rebuild: Aftershow 167: Fishing, Cooking and Camping (mirakui) なおmiyagawaさんは全然興味なさそうだった