日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

2016年振り返りと2017年どうしようかなみたいな雑記

なんとなく振り返って、来年の自分が一年前に何を思っていたかをまとめるだけの記事です。
去年の日記みてとりあえず大変な一年だったとか言ってるけど結局今年も大変だった気がする。
人生がカラフルに色づいていて楽しい😇

arata.hatenadiary.com

■去年書いてた今年の抱負

  • 4コマんま動かしたい
  • Goについて強くなりたい
  • Scalaについて強くなりたい
  • JavaScriptのBabel周りに慣れたい
  • 本をたくさん読もう

4コマんまは諦めちゃったなw
Go, Scala, Babel周り慣れた気がする。
Scalaはもうちょっと強くなりたい。
本はすごいH本, Pythonからはじめる数学入門はちゃんと読んだけど他は読み終わらなかったなぁ
来年も読んでいきたい。

Darkでやったイベント

Dark のイベントで参加したものあたり。
今まで通り最低限LT会は頑張るとして、結構もくもく会で新しい人が来てくれるので
publicにちょくちょくやっていきたいなぁと思った。
色々なイベントは雑な気持ちでカジュアルにやっていきたい。

  • もくもく会
    • 16回
      • connpassで募集したのが3回かな
    • 去年が12回らしいので頑張ったなという感じ。
    • 来年もやっていきたい
    • 12/24に行ったのは20/24(≒ 83%)の参加率ですごかった
  • LT会
    • 3, 6, 9月に開催しました
    • 12月に開催失敗したので1月に開催予定です
  • 野良イベント

その他

■ 参加したイベント

  • プライベート
    • ScalaMatsuri
    • PyLadies Meetup(手伝い) ✕ 2
    • Hadoop / Spark Conference Japan 2016
    • Jagmo
    • Gotandajs #3, #4
    • 雑兵Meetup
    • PyCon JP
    • Mackerel User Group Meetup
    • 秋のJavaScript祭り
    • RustのLT会
  • 会社関係のイベント
    • CTOからの挑戦状1st, 2nd
    • Treasure 2016
    • ギークフェスタ(夏)
    • サポーターズ1 on 1イベント n回

去年より減った気がする
Darkのイベントが増えたせいか、やる気がなくなったせいか
来年はまたphp触りそうなのでphp勉強会とか行きたいなぁ
あとCTOからの挑戦状の記事かけてよかった。

techlog.voyagegroup.com

■ 見たアニメ

グリムガル良かった
リゼロ良かった。レム・・・小説読まないとなぁー
デュラララもよかった。池袋楽しそう。
ReLifeのEDがクリティカルヒットするのでやばい

■ 弾けるようになった曲

電子ピアノ買ったので結構弾いてたらなんだかんだ弾けるようになって楽しい。
今は、ドラクエの序曲、海の見える街、天体観測、エピローグ ~親しき仲間へ~ を練習中

感想と抱負

voyarockのおかげでたくさん色んな曲弾けるようになってよかった。voyarock最高!
DarkでISUCONやらSECCONやら色んなイベントできてよかった!Dark最高!
来年はたくさん色んな曲を弾けるようにしたいなぁ
目標は楽譜見ずに10曲
Darkは内輪な人を増やしたいなぁ。
入り込んで来やすい環境作りたい。

■来年の抱負

  • 本を3冊は完走したい
    • FP in Scala
    • すごいE本
    • ゼロから作るDeep Learning
    • DDDの鈍器っぽいやつ
    • SICP
  • ピアノで10曲暗譜
  • Darkのpublicなもくもく会の回数を増やす
    • 今年は3回だったので5回くらいは最低限やりたいなぁ

来年は笑いながら未来の話をしていこうと思いまっす。
今年もありがとうございました。

大体新卒(?)コミュニティDarkでやってるtips集

この記事は IT勉強会/コミュニティ運営 Advent Calendar 2016 の19日目として書かれてます。

qiita.com

こんばんは。Darkの運営をやってるうちの一人 ara_ta3 です。
せっかくわがままを言って空けていただいたのに遅れてしまって大変申し訳無いです・・・

DarkはDevelopers at Real Kommunityの略で、大体(定義無し)新卒のエンジニアが多いコミュニティです。
土曜日の午後からの緩やかなもくもく会や、3ヶ月に一度のLT会(?)をやっているので興味がわいた際には是非遊びに来てください。
次回はクリスマスイブと呼ばれている日にもくもく会があるので興味があればお越しください!

dark.connpass.com

さて、このコミュニティではSlackやGithubを利用していて、そのあたりで色々やっているのでそのへんの話をしようかと思います。

概要

紹介したいのは、
1. 管理者以外も立てられるIssueによるちょっとしたイベント管理
2. たくさんのクソ機能を持つdark bot
3. 豊富なSlackチャンネルです

1. Issueによるイベント管理(LT, もくもく会以外)

このコミュニティを始める時、運営の人間で話したのは3ヶ月に1度くらいは頑張ろう。
あとは適度に適当にやっていきましょう。
みたいなところでした。
とは言いつつ、中でISUCONやってみたいとか、
CTFやりたいとか出てきたりします。
そんな感じの突発的なイベントをするのにGithub Issuesを利用しています。
誰でも立てられるようにしています。

特に、Slackを無料で利用していると、表示できるメッセージ数に限界があるので、
どんなことを話したかを残すのにGithub Issuesに書いていくのは結構便利です。
darkというmeta repositoryを作成し、そこのIssuesに書いていっています。

github.com

最近では id:sota1235 氏がCTF をやってくれたりしました。

Ref

2. たくさんのクソ機能を持つdark bot

このコミュニティのSlackにはdark-botという名のhubotがいます。
色々なとても便利な機能が備わっています!
日々の仕事でたまに疲れて休みたいときにhubotを利用して、
遊ぶことで回復を図るのはとても大切かと思います。

github.com

Slack内で他ユーザと戦える機能

別途hubot scriptとして分離して、他の記事を書いたのでご参考になれば・・・

qiita.com

下記の様に人に対して攻撃したり、魔法を唱えたり、自分のJobを変更したり、社会から攻撃を受けたりするような機能です。
node-questというライブラリを利用しています。

GitHub - ara-ta3/node-quest

f:id:arata3da4:20161219190055p:plain

色んなアニメキャラクターに声をかけてもらえる機能

hubot-characterというhubot scriptによって、
何らかの辛いことが起きたときにでも色んなキャラクターに声をかけてもらえます。

hubot-characterの紹介はこちらで・・・

arata.hatenadiary.com

イメージはこんな感じです。
リゼロが多いです←

f:id:arata3da4:20161220013454p:plain

dark papix

クソコラが流れます。
イメージはこんな感じ。

f:id:arata3da4:20161220021029p:plain

papix氏のクソコラについて詳しくはこちら。

papix.hatenablog.jp

3. 豊富なSlackチャンネル

Slackへの参加者が100人弱に対して、
チャンネル数も100くらいある中で、
あって便利だったなというチャンネルを紹介したいと思います。

timelineチャンネル

全てのチャンネルが活発というわけではないですが、
100個もあると新しい人が入ってきたタイミングでどのチャンネルがおすすめとか、
ここはいると良いよとかやってられません←

かと言って全部のチャンネルを管理するのも手間ですよね。
なので全てのチャンネルの内容が投稿されるチャンネルがあると便利です。
元々hubot scriptで実現していましたが、自前でGoで実装し直して使ってます。
これがあると初めて参加された方に「とりあえずtimelineチャンネルに入ると便利です!」といえるのでとても助かります。

github.com

bot_heaven

botの機能を試して遊ぶことがメインの目的なチャンネルがあると、
日頃の仕事に疲れたタイミングや、なんらかの機能をbotに追加したときに、
試せるので便利です。
hubot imageがよく使われます。
ここではdi -> dark image (=hubot image) というaliasを貼る的なことをしています。

Impl

https://github.com/ngineerxiv/dark-bot/blob/master/src/scripts/dark.js#L87

f:id:arata3da4:20161220021553p:plain

shibuya, ebisu, gotanda

地域関連のチャンネルがあると、その人達をランチや飲みに誘えます。
とても便利です。
このコミュニティでは、突如雑に焼肉を食べたくなったときに、
shibuya チャンネルに集まりがちです。

f:id:arata3da4:20161220021525p:plain

yaseru, r_sugoi_h, r_sicp, ...

毎日プランクチャレンジをしようとか、
月水金にこの本を読もうという通知が来るチャンネルがあります。
私はこれのおかげで ゼロから作るdeep learningPythonからはじめる数学入門 の進捗が最高です。

まとめ

  • Slackも便利だけど、後々残したい情報はGithub Issuesを利用するとさらに便利
  • hubotに愉快な機能を乗せて日々を楽しくしましょう
  • 全てのpublicチャンネルの投稿が流れるタイムラインチャンネルあると便利
  • 適度に地域ごとのチャンネルがあるとご飯に誘えて便利
  • botで遊ぶようのチャンネルがあると便利
  • 適度なタイミングで何かをしようと促すチャンネル便利

Github管理しているmackerelの監視ルールが変更されたらJenkinsからPRを投げる

こちらの記事はMackerel Advent Calendarの11日目の記事として書いています。 qiita.com

mackerelを使って監視ルールをバージョン管理して、もし差分があったら自動でGithubにPRを投げるみたいなものを作った時の話です。
こちらの記事を見ていいなぁと思い、そんなことをやってみたいと思いました。

kakakakakku.hatenablog.com

概要

監視設定を管理している状態ですが、カジュアルにGUIで変更などした後にもその状態をちゃんと管理したいという気持ちがあります。
定期的に変わっていないかを判定して、変わっていたらアラートもありですが、結局その後することはコードに反映させることかと思うので、変更のPRまであげられたら楽だなぁと思いました。
なので今回は変更があった場合は何かアラートを投げるのではなく、PRを投げて人が見れるできる状態まで持っていきたいと思います。

やりかた

mackerelの監視設定と差があるかどうかは上記記事にもあるように mkr diff で確認することが出来ます。
また、同じく上記記事にあるように -e オプションを付ければ異常終了してくれるので便利です。
なので、今回は異常終了した際に hub コマンドを利用してPRを投げたいと思います。

github.com

書いたコード

書いたコードはこんな感じです。

monitors/Makefile at master · ara-ta3/monitors · GitHub

hubコマンドでPRを投げるためには認証(OAuth)が必要で、
CIサーバで行う場合、設定を ~/.config/hub に置く必要があります。
形式はこんな感じです。

github.com:
- user: ara-ta3
  oauth_token: XXXXXXXXX
  protocol: https

書いたスクリプトはこんな感じでした。
diffを取って異常終了だったら(差分があったら)PRを作る。
と言ったものです。

MKR=$(shell which mkr)
HUB=bin/hub
HUB_CONFIG=
dirs=$(HOME)/.config bin tmp
monitors=monitors.json
current=$(shell date "+%Y/%m/%d %H:%M:%S")
pr_branch=update-monitors-json-$(shell date "+%Y%m%d%H%M")
pr_text_file=tmp/pr_text_file

check-mackerel-monitors:
  $(MAKE) diff || $(MAKE) create-pull-request

pull:
  $(MKR) monitors pull --file-path $(monitors)

diff:
  $(MKR) monitors diff -e --file-path $(monitors)

create-pull-request: $(HUB) $(HOME)/.config
  $(MAKE) pull
  $(HUB) checkout -b $(pr_branch)
  $(HUB) add $(monitors)
  $(HUB) commit -m "Update monitors.json $(current). job: $(job_url)"
  $(HUB) push origin $(pr_branch)
  $(MAKE) $(pr_text_file)
  $(HUB) pull-request -F $(pr_text_file)

$(pr_text_file): tmp
  echo "Update monitors.json $(current)." > $(pr_text_file)
  echo "" >> $(pr_text_file)
  echo "job: $(job_url)" >> $(pr_text_file)
  $(MKR) monitors diff --file-path $(monitors) >> $(pr_text_file)

bin/hub: tmp bin
  wget -O $</hub-linux-amd64-2.2.9.tgz https://github.com/github/hub/releases/download/v2.2.9/hub-linux-amd64-2.2.9.tgz
  cd $< && tar xzvf hub-linux-amd64-2.2.9.tgz
  mv $</hub-linux-amd64-2.2.9/bin/hub $@
  rm -rf $<

$(HOME)/.config/hub: $(HUB_CONFIG) $(HOME)/.config
  cp -f $< $@

$(dirs):
  mkdir -p $@

Jenkinsで回してみる

ここまできたのでJenkinsでJobを作ってみようかと思います。
Scriptはこんな感じでした。
事前にmkrコマンドはインストールしています。

$make -C ${WORKSPACE}/mackerel check-mackerel-monitors HUB_CONFIG=/credentials/hub-for-jenkins-mackerel 

なにもない時の様子

f:id:arata3da4:20161207020839p:plain

その後モニタリング設定を変更して実行してみました。
モニタリングの設定を一つ減らしてJobを実行してみました。

https://github.com/ara-ta3/monitors/pull/4

f:id:arata3da4:20161208225327p:plain

Job結果を載せようと思いましたが、めっちゃくちゃ長かったのでやめました・・・w
とりあえず差分があればPRを投げてくれます。

感想とまとめ

  • mkrコマンド便利
  • diffがあったらPR投げてしまうの便利
  • ずっと役に立つと良いな

Raspberry Pi + hubot + IRKitで家電操作して日々を過ごす

この記事は Raspberry Pi Advent Calendar 2016 の10日目として書かれています。

www.adventar.org

こんにちは ara_ta3 です。
Raspberry Piを気分で買ってあまり色々やるぞ思ってから長い日が経っています。
かなり何番煎じって感じですがSlack + hubot と Raspberry Pi + IRKitで家電操作したときの話をしたいと思います。

概要

やっていることはとても簡単です。
hubotをSlack上に住まわせて何らかの命令を送ったらIRKitにリクエストを飛ばし家電を操作するという感じです。
hubotのレポジトリはこちら。
執事 英語 でぐぐって出てきたかっこいい名詞をbotの名前として選びました。

github.com

hubotの実装

実装はこのあたりからで、configで渡したデータをIRKitサーバにHTTPリクエストで投げています。
(configに乗っけていいのかよくわからなかったのでgithubには置いていません)

https://github.com/ara-ta3/steward/blob/master/src/scripts/home.js#L26

hubot-irkitというライブラリもあったんですが、
jsonをPOSTする程度のものなのでライブラリはいらないでしょう。
jsonは例えばこんな感じのものになります。

    "light": {
        "up": {
            "format":"raw",
            "freq":38,
            "data":[
                18031,8755,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,3228,1150,1037,1150,3228,1190,3228,1190,3228,1190,1037,1150,3228,1190,3228,1190,1037,1150,1037,1150,1037,1150,3228,1190,1037,1150,1037,1150,1037,1150,1037,1150,1037,1150,3228,1190,3228,1190,1037,1150,3228,1190,3228,1190,3228,1190,3228,1190,3228,1190
            ]
        }
    },

IRKitの準備

IRKitは自身がサーバとなってHTTPリクエストを受けてくれます。
今回はローカルのネットワークに置きました。
とりあえずIRKitのIPアドレスが必要なので調べます。
Macのアプリでないかなと思ったらさくっと見つかったのでこれを使いました。

IP Scanner

IP Scanner

  • 10base-t Interactive
  • ユーティリティ
  • 無料

次に送信したい信号の赤外線を記憶させます。
IRKitのサーバの /messages エンドポイントに X-Requested-With のヘッダとともにリクエストを投げると直前に送った赤外線の信号が手に入ります。
X-Requested-With の値はなんでも大丈夫そうです。
なにも赤外線信号を送っていない場合は空のBodyが返ってきます。
また同じエンドポイントに受け取ったデータを送りつけると同様の信号を送ったことになりmす。

# 赤外線信号を送っていないので空bodyのレスポンス
$curl -i 192.168.0.13/messages -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

# ある信号送った後のレスポンス
$curl -i 192.168.0.13/messages -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,3341,1150,3341,1150]}

# このデータをサーバに対して送ると同じことが起きます
# さっきの信号は電気を1段階暗くするものだったので家が暗くなりました
curl -i 192.168.0.13/messages -d '{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,3341,1150,3341,1150]}' -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

赤外線リモコン系は大体覚えさせると便利でした。
ただ、覚えさせるのがめんどい←

感想とまとめ

  • 暑い夏とか家につく少し前のタイミングでエアコンつけたりすると帰った時涼しくてよかった
  • 家に帰る前に電気つけとくと帰ってすぐ明るくて良い
  • 言わずもがな家に帰らない人には必要なさそう
  • Raspberry Piずっと点いてる割にはあまり活用できてないなぁと感じたので来年は何かやっていきたい