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

日頃の行い

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

Slack内でActiveなユーザ数をMackerelのサービスメトリックで表示してみた

Go Mackerel Slack

コミュニティでSlackを使ってるんですが、どれくらいの人が普段見てるんだろうと思って可視化してみました。
計測したい数は今User Presenceがactiveなユーザ数です。

api.slack.com

Mackerelのサービスメトリックがカジュアルに使えてとても便利なので今回はそれを利用しました。

mackerel.io

作ったコードはこんな感じです。
とても素朴なコードです。
これをcronで毎分動かすことで、毎分activeなユーザ数をMackerelのサービスメトリックに投げています。
Slackのライブラリを使おうとしたのですが、Presenceがなぜか取れなかったりしたのでとりあえず自前で書きました。

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "time"

    "github.com/joho/godotenv"
    mkr "github.com/mackerelio/mackerel-client-go"
)

type response struct {
    OK      bool   `json:"ok"`
    Members []user `json:"members"`
}

type user struct {
    ID                string      `json:"id"`
    Name              string      `json:"name"`
    Deleted           bool        `json:"deleted"`
    Color             string      `json:"color"`
    RealName          string      `json:"real_name"`
    TZ                string      `json:"tz,omitempty"`
    TZLabel           string      `json:"tz_label"`
    TZOffset          int         `json:"tz_offset"`
    Profile           interface{} `json:"profile"`
    IsBot             bool        `json:"is_bot"`
    IsAdmin           bool        `json:"is_admin"`
    IsOwner           bool        `json:"is_owner"`
    IsPrimaryOwner    bool        `json:"is_primary_owner"`
    IsRestricted      bool        `json:"is_restricted"`
    IsUltraRestricted bool        `json:"is_ultra_restricted"`
    Has2FA            bool        `json:"has_2fa"`
    HasFiles          bool        `json:"has_files"`
    Presence          string      `json:"presence"`
}

func main() {
    err := godotenv.Load()
    if err != nil {
        log.Fatal(err.Error())
    }
    client := mkr.NewClient(os.Getenv("MACKEREL_TOKEN"))
    token := os.Getenv("SLACK_TOKEN")
    resp, err := http.Get(
        fmt.Sprintf("https://slack.com/api/users.list?token=%s&presence=1", token),
    )
    if err != nil {
        log.Fatal(err.Error())
    }
    body, _ := ioutil.ReadAll(resp.Body)
    defer resp.Body.Close()
    r := response{}
    json.Unmarshal(body, &r)
    c := 0
    for _, u := range r.Members {
        if u.Presence == "active" {
            c++
        }
    }
    err = client.PostServiceMetricValues("Dark", []*mkr.MetricValue{
        &mkr.MetricValue{
            Name:  "dark.slack.active_rate",
            Time:  time.Now().Unix(),
            Value: c,
        },
    })
    if err != nil {
        log.Fatal(err.Error())
    }
}

github.com

実際の画面がこんな感じでした。
深夜帯に少しいるのはbotも数えてしまっているからかもしれないので、
botを除く処理を挟もうとこの記事を書いてる際に思いました。
ブログ書くのは整理にもなって良いですね。

f:id:arata3da4:20170324185031p:plain

まとめ

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集

Go Slack AdventCalendar

この記事は 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で遊ぶようのチャンネルがあると便利
  • 適度なタイミングで何かをしようと促すチャンネル便利