アイマスハッカソンに参加した話と安部菜々

この記事はアイドルマスターアドベントカレンダーの18日目の記事です。
前日はtwoterabytesさんで安部菜々にすくわれたかもしれない話です。
うさみんかわいいですよね。今は恒常うさみんがたのしみ。できればスカチケの直前でお願い致します。

アイマスハッカソン

アイマスハッカソンというイベントの第二回が開催されました。
アイマスハッカソンについては以下を参照ください。

github.com

主な目的は

アイドルを愛でる。アイマスに貢献(Contribute)する。  

アイマスの二次創作界隈において、歌姫庭園とかミリフェスとかミリオンリーとかニコ動とかTwitterとかいろいろあるけれど、エンジニアを主な対象とした時にこれという機会がありません。  

これはアイマス界の損失だ!と思い、企画してみました。エンジニアだって、なんかやりたい。  

で、副業でエンジニアっぽいことをしてる人たちが一度に集まって面白そうなナニカを作って盛り上がろうぜというイベントです。今回で第二回を迎えました。

アイマスハッカソン2017

今回はなんと"やよい"つながりということで弥生株式会社 様、懇親会スポンサーに株式会社grooves 様がついてくれました。

imas.connpass.com

こういう趣味系ハッカソンにスポンサー様がついてくれるのはすごくありがたいですね!!!!!!!!!!!!最高です!!!!!!!!!!!

成果物

前回は公式の4コマであるアイドルマスターシンデレラガールズ劇場をいい感じに分割する、miyachik/deregeki-divider を作りました。
今回は、分割したコマをいい感じに感情分類してtwitterのリプライやチャットツールに貼り付けてコミュニケーションを取るために必要な、感情分類をするためのWebAppを作りました。
スライドにも書きましたが、感情分類を適当なAPIに投げてできないかやってみたらアニメ画像なので無のResponseが帰ってきてかなしくなったりしていました。(当たり前)
結構気にはなっていたActiveStorageをいじれる機会にもなったり、趣味とエンジニアリングがいい感じに交差して充実していました。

speakerdeck.com

配信アーカイブもあるよ!

www.youtube.com

雑感

今回は約30人ほどの人数が集まり、個人やチームで開発を行いました。改めて運営の方々には感謝です...!
各チームいろいろな得意分野を持っていて、JavaScriptでぱぱっとゲームを作る人や、Unity使ってARする人、AppleWatchいじり倒す人や形態素解析の話をしまくる人など、本当に色々な発表があってよかったです
次回は3/10にアイマスハッカソン2017 in Osakaが開催決定しているとのことで、お近くの方はぜひ参加してみてください!

Golangでどこでもtwitterできるbinaryをつくる

ドリコムアドベントカレンダー16日目

ドリコム Advent Calendar 2017 この記事はドリコムアドベントカレンダー の16日目です。
前日はgremitoさんの「オレオレDockerfileを作って、サーバーサイドの開発をやっている話。」です。

あなたは誰

先月ドリコム社に中途入社したid:miyachik です。サーバーサイド側のコード書いている人です。
主にRailsを書いて、たまにJavaScriptGolangをさわったりするぐらい。

twitterの話

みなさんtwitterしてますよね。昼夜問わず変な人がいっぱいいてとても有意義で無意義です。
そして、みなさん(おそらく)エンジニアだと思うので、terminal上でコマンドを叩いたときに、よくわからんエラーを吐いてエラったときの鬱憤をネットの海に叫びたい気持ちが多々あると思います。僕はあります。

gotwi

そんな衝動を解決するために、miyachik/gotwi というものを先日リリースしました。

github.com

いわゆるGo製のCLItwitterクライアントなんですが、現状だとつぶやことしかできません。(というかユースケースがそれしかありません)
プログラムを書いていて適当に愚痴りたいときに、ブラウザやクライアントに戻って呟いたりしちゃうと、うっかり変なつぶやきが目に止まって時間を取られてしまったりしまいがちですよね。
そんな人のために求められているのが、このgotwiです。つぶやく機能しかありません。(replyのshowぐらいは実装予定)
terminal上で動作できて、クロスコンパイル可能なのでどこにでもbinaryを配布することができます。
以前も似たようなCLIクライアントをThorを使ってRubyで実装していたのですが、アクセストークンの扱いや、成果物のポータビリティがいまいちだったりで、そのコードを書いたPC上ぐらいでしか使用していませんでした。
ところが、Goで書いたことによってアクセストークンをgo-bindataで埋め込みつつ、任意環境で実行可能なbinaryに吐き出すことが可能になったので、個人持ちのPCから任意のEC2、どこでも簡単に動かすことができます。
今回はその中でも便利だったgo-bindataを使った話をしたいと思います。

go-bindata

github.com

go-bindataは、任意のdataをビルドして、dataをbinaryに変換しGoのコードに埋め込みアクセスできるようなgoのソースを生成してくれるライブラリです。

Install

% go get -u github.com/jteeuwen/go-bindata/...
% go-bindata -h

で、問題なければgo-bindataコマンドが使えるようになっています。

Build

以下のディレクトリ構成で作業をするとして

├── Makefile
├── README.md
├── main.go
├── settings.local.toml
└── settings.sample.toml

このsettings.local.tomlをbuildするbinaryに含めることによってアクセストークンなどの秘匿情報を実行binaryに含めてしまうことができます。
今回はtwitterAccess Tokenが必要になるので、下記を参考に自分のAccess Tokenを取得するようにしてください。(2017年12月時点)

Access tokens from apps.twitter.com — Twitter Developers

.tomlとは、yamlのような設定記述言語で、yamlより色々とシンプルな点や、Goのサポートが厚いことからよくGo界隈では使われています。

github.com

# settings.local.toml
ConsumerKey="YOUR TWITTER_CONSUMER_KEY"
ConsumerSecret="YOUR TWITTER_CONSUMER_SECRET"
AccessToken="YOUR TWITTER_ACCESS_TOKEN"
AccessSecret="YOUR TWITTER_ACCESS_SECRET"

これを

% go-bindata settings.local.toml

とすることで、settings.local.tomlの中身が圧縮してbinaryに変換され、アクセス可能なメソッドの生えているbindata.goが生成されていると思います。
あとは、以下のように、Asset("#{ファイル名}")とすることで、binaryに埋め込んだ文字列やその他のリソースを読み込むことが可能です。

func main() {
    data, err := Asset("settings.local.toml")
    if err != nil {
        panic(err)
    }
    fmt.Print(string(data))
}

debug時などに注意が必要なのは、data本体はbindata.goに含まれているので、実行時にbindata.goを含める必要があります。

% go run main.go bindata.go
ConsumerKey="YOUR TWITTER_CONSUMER_KEY"
ConsumerSecret="YOUR TWITTER_CONSUMER_SECRET"
AccessToken="YOUR TWITTER_ACCESS_TOKEN"
AccessSecret="YOUR TWITTER_ACCESS_SECRET"

gotwiでは、このようにしてアクセストークンなどをbinaryに埋め込んでいるので、あとは任意の環境にビルドしたbinaryを、実行したいサーバーに配置することで、どこでも実行することが可能になります。

gotwiのクロスコンパイル

様々な環境で動かすためには、build時に$GOOS,$GOARCHを指定する必要があります。
環境変数に指定できるものは下記を参考にしてください。

Installing Go from source - The Go Programming Language

指定なしでbuildをした場合は、build時の環境が参照されるようになります。
例えば、Linuxamd64な環境へのbuildは以下のようになります。

% GOOS=linux GOARCH=arm64 go build main.go bindata.go
=> 直下に gotwi が生成される
% ./gotwi "Hello!"
=> "Hello!"が投稿

その他にも、build時には任意のオプションをつけられるので、公式のドキュメントを参照すると良いです。

go - The Go Programming Language

注意点

  • このbinaryが流出してしまうと、それこそ誰でもアクセストークンの所有者として呟けてしまうので、管理には気をつけてください。
  • go-bindataでビルドしたbindata.goの時点では、Goのソースに圧縮されたbyte列が入っているだけなので、ちょっと頑張ればアクセストークンを復号できるんじゃないかと思います(それこそ無圧縮とかにすると簡単に)。なので.gitignoreしましょう。

まとめ

  • どこでも実行可能な自分が呟けるbinaryを吐き出せる、gotwiを作りました。
  • 使い始めて一ヶ月くらいですが、なかなか快適です。クロスコンパイル可能なbinaryを吐き出せるGoは雑なCLIツールを作るのに非常に良い
  • AWS LambdaのGoサポート の話もありますし、Golangは良い
  • twitterはほどほどに

明日は hayabusa333 さんの「Elixir環境構築にて暗号化でエラーにならないために」です。

iOSDC 2017に参加したまとめ

とてもたのしめました。
僕は普段の業務では全くネイティブに関わらないRailsとかちらっとGolang書いたりしている人間なのですが、面白い発表ばかりで素晴らしかったです。

GoによるiOSアプリの開発

www.slideshare.net - 結論としては使い物にはなっていないんですが、現状なにが出来て何ができないのかを知れたのでとても良かった。

ハンズラボ組

iOSデバイス3,500台を管理する、東急ハンズのデバイス管理手法とは

speakerdeck.com

業務アプリの切札、Programable Kiosk Mode大全

speakerdeck.com

エンプラ組の発表がすごい面白かったです。結構好き放題やって管理しているところや、Harakiri-Updaterの仕組みは凄い面白かったです。
たぶん機会がない限り使わない機能ばかりかもしれませんが、(Storeに出さない)個人アプリとかで使えそうな話はあったのですごかった。

まとめ

業務でiOSの庭にいない人間が参加してもとてもおもしろいイベントだったと思います。改めて運営に関わったみなさまはお疲れ様でした。
特にNetworkチームは本当に苦労があったみたいで、でも途中で改善されて凄い快適に使えるようになったり、NOCの方々はお疲れ様でした。
個人的に細かいところに愛があるサービスやイベントが凄い好きなので、運営をしている様子(Wifiのpassやその他の工夫含め)などを見ても凄い楽しそうにしていて、良いイベントだなと感じました。
去年は同じ会社のエンジニア1人くらいしか会場で顔を見知った人間はいませんでしたが、今回は去年より知り合いが増えたのでよかったと思います、改めてお疲れ様でした XD

AppleSpecialEvent2017 まとめ

最初

  • All You Need Is Love流しながら新社屋自慢
  • theaterは柱がなく、ガラスで支えているらしい
  • 初代iPhoneのプレゼン音声流しながら
  • 新社屋についてや、AppleStoreについて自慢
  • AppleStoreをリニューアルしていくらしい
  • アメリカの話ばっかりしてて日本がどうなるかは不明
  • シカゴに新旗艦店

Apple Watch Series 3

  • Watch自体は去年より50%伸びてる
  • Rolexを越して世界で一番の時計となった?
  • 現状二番手で越したいだった。かも。
  • 満足度97%らしい
  • watchOS4 9/19
  • Cellular build in
  • iPhoneと同じ番号で電話を受けれたりGPSとかSiriとか
  • 音楽も聞ける
  • 全面アンテナ?
  • 日本でも出るよ(au,docomo,SB) :tada:
  • $329(no Cellular)と$399(Cellular)
  • 9/15予約9/22発売
  • Series 2はなくなって、Series 1は廉価版として残るらしい

Apple TV

  • 4K
  • HDR
  • A10X
  • コンテンツも色々契約周りを準備中
  • 4K HDRコンテンツの価格はHD版と同価格
  • 4K HDRにアプコンも?
  • 日本は展開に入ってない、解散
  • 9/15予約9/22発売
  • 32GB $149, tv4K 32GB $179, 64GB $199

iPhone8

  • 4.7inch 5.5inch
  • 3DTouch,TrueTone display
  • SpeakerもiPadProっぽくなるって言ってた気がする
  • A11 Bionic(64bit 6core)
  • 12MP,f1.8,portrait
  • 8は1つ、8 plusは2つなのでportraitはplusだけ?
  • 1080p 240fpsの動画が取れる(楽しそう)
  • ARのために初めて最適化されたソフト、ハードウェア
  • 無線給電(Qi)

  • お店とかと契約して充電口を置いてもらったりするとどこでも充電できる

  • 64GBと256GBだけ
  • 8 $699,8 plus $799
  • 9/15予約 9/22
  • iOS11は9/19

iPhoneX

  • One More Things
  • エックスじゃなくてテンです
  • やっぱりホームボタン消えた
  • Spacegrey , black
  • 5.8inch
  • super retina display
    • 2436 x 1125, 458 ppi
    • 有機EL
    • True Toneじゃないんすね
    • 今までの有機ELの欠点を補うEL
  • タップで起動
  • swipe upでホームに戻る
  • Face ID(顔認証)
    • センサーが凄いので暗くてもできる
    • 写真で開けられるとか、ハリウッドのメークアップアーティストによってそっくりの仮面を作って開くかテストをした
    • 大丈夫だった(ドヤァ)
    • 5万回に一回の誤認識から100万回に一回
  • 今までのtouchID系が大体FaceIDになるらしい
  • Animoji(絵文字が動く)
    • ユーザーの顔の動きと、絵文字の顔の動きが連動
    • アニメーションの絵文字で感情を伝えることができる。
    • なんだこれw
    • messagesには音声も付けられるらしく、それで会話したり
  • swipe downでコントロールセンターが出る
  • カメラ
    • 縦に2つになった
    • f2.4
    • 12MP
    • セルフィーportraitもできる(IRセンサー?)
  • フロント側のセンサーが凄い
  • A11 bionic(8と一緒)
  • バッテリーは7に比べて2時間伸びる
  • AirPower

    • watchもair podsも本体も一緒に充電できる
    • AirPowerは後で発売でwireless対応Airpodsケースも後発売?
  • 64GB,256GB

  • $999から10/27予約11/3発売

まとめ/雑感

  • FaceIDは、ホームボタン指を置くという動作をしなくても画面を表側にすることで本当に何もしなくても認証ができるという、ユーザー体験としては進化している気がする
  • 所有者の意図しない認証解除はどれぐらい出来るのか気になる
  • 全面ディスプレイiPadProが欲しい。それならすぐ買う。iPhoneXは悩んで買う。

エモポイント、締めの言葉は

One of the ways that I believe people express their appreciation to the rest of humanity is to make something wonderfull and put it out there. - Steve Jobs

Slackでcustom_emojiを作った個数が多い人順に出す

これは

JavaScriptしょしんしゃです。リファクタツッコミ歓迎。
Slackでcustom_emojiを作った個数が多い人を降順で出すブックマークレットです。
全部見たい場合は
alert(JSON.stringify(sorted,null,"\t")); の部分を適当にいじってください。

// https://#{YOUR_TEAM}.slack.com/customize/emoji で実行

var name_hash = {};
var list = Array.apply(null,document.getElementsByClassName('author_cell'));
list.forEach(function(row){
    if (name_hash[row.textContent.trim()] == undefined){
        name_hash[row.textContent.trim()] = 1;
    }else{
        name_hash[row.textContent.trim()]++;

    }
});
var sorted = objectSort(name_hash);
alert(JSON.stringify(sorted,null,"\t"));

// {'name' => count}のcount降順Sort
function objectSort(object) {
    var sorted = {};
    var array = [];
    var tmp = {};
    for (key in object) {
        if (object.hasOwnProperty(key)) {
            if(tmp[object[key]] == undefined){
                tmp[object[key]] = key
            }else{
                tmp[object[key]] += ","+key
            }
            array.push(object[key]);
        }
    }
    array.sort(function(a,b){
        if( a > b ) return -1;
        if( a < b ) return 1;
        return 0;
    });
 
    for (var i = 0; i < array.length; i++) {
        sorted[tmp[array[i]]] = array[i];
    }
    return sorted;
}

Datadogのdashboardを自動でスクロールする

Datadog便利ですよね、重宝させて頂いています。

Datadogでメトリクスの監視を始めよう!

最近datadog用のモニターを置いたんですが、いかんせん出しているグラフが多すぎてつらかったので、自動でスクロールしてくれるscriptを仕込むことにしました。

モニターに常時映しておきたいけど、みたいmetricsが多すぎる場合に自動でスクロールしてくれるやつです。
事業数字っぽいのもあってdemoを取るか悩んだので、ご自分でconsoleに貼ってごらんください。デモは1秒に1回スクロールします。setIntervalの値を調整してください。

// graphを取得
var graph = Array.apply(null, document.getElementsByClassName('title draggable'));

// fontSizeといじって太字にする
var rectList = graph.map(function(ele){
    ele.style.fontSize = '20px'
    ele.style.fontWeight = 'bold'
    return ele.getBoundingClientRect().top
});

// uniq
rectList = Array.from(new Set(rectList));

// sortしないとおかしい場合があったので念のため
rectList.sort(function(a,b){
        if( a < b ) return -1;
        if( a > b ) return 1;
        return 0;
});
var i = 0;

// 最後まで行ったら先頭に戻す
setInterval(function() {
    window.scroll(0, rectList[i]);
    i++;
    if(i == rectList.length){
        i = 0
    }
},1000)

WWDC2017感想とか

大きく分けて項目は6つ。

  1. tvOS
  2. watchOS
  3. macOS
  4. iMacとiMacPro
  5. iOS(iPhone + iPad)
  6. Music(HomePod)

tvOS

AmazonPrimeが来ると言う話しか覚えていません。

watchOS

  • OSとして色々改善したみたい
  • APIとかもアプデ
  • 死ぬほどでかい変更はなかった記憶
  • 新OS配信は秋予定

macOS

  • HighSierraになる => みんな失笑してた
  • Safariがめちゃめちゃ早くなったらしい
  • 動画の自動再生がデフォになって設定できるみたい
  • Photosアプリが強化されてより便利に、Photoshop連携?
  • defaultのファイルシステムがAPFSになって色々ファイル操作が早くなる(複製とか)

iMacとiMacPro

  • iMac 21.5インチ
  • iMac Retina 4K 21.5インチ
  • iMac Retina 5K 27インチ
  • Kaby Lake搭載のiMacが出る
    • そろそろCoffeeLakeと、来年にはCannonLake出るのでタイミング微妙な気もするけど更新はされたことは良いと思う
  • 一番上の5K27インチでRadeon Pro 570、575、580からグラフィックカードを選べて、 VRAMは最高8GB
  • Kaby Lakeプロセッサ搭載のMacBook Proも登場

  • iMacProはひたすら強いの

  • 8~18coreのXeon + AMDの次世代GPU「Vega」を搭載予定
  • 2017年12月予定
  • 一番下のEditonで$4999

iOS

  • iMessageアプリは未だに推している
    • ApplePayの個人間送金
    • 金をよこせというリクエストも送れるみたい
  • Siriで翻訳出来るように、喋ってくれる
    • 英語から中国語・フランス語・ドイツ語・イタリア語・スペイン語に翻訳
    • 日本語はまだ
  • jpegの圧縮率が2倍になったらしい
  • !! Live Photosが編集可能に
    • 切り取りやミュート、ループ、バランス、長時間露光などが出来るように
    • LivePhotos好きなので、良さげ
  • コントロールセンター(下からシュッってするやつ)が1画面に
    • 詰め込みすぎて地獄みたいなUIに
    • 新music以降AppleのUI/UXチームはどこへ行ってしまったのだろうか
  • 運転中のdndモードが実装。通知が来なくなるみたい。
  • FIlesっていうFinderっぽいアプリができてGoogleDriveとかDropboxとかと連携できるみたい
  • AppStoreがリメイク
  • ランキングタブが消えたっぽい?結構UIがガラッと変わった
  • !! ARKit

    • めっっっちゃ楽しそうなのでデモみてください
  • iPadPro10.5インチ

    • 大きさは9.7インチとあまり変わらずベゼルを狭くして画面幅だけ広がったはず
    • A10X
    • スペックも向上して120hz対応とか
    • Browsingのときとかはよしなにフレームレートを落としてくれてバッテリー削減
    • USB3.0
10.5インチiPad Pro 64GB:649ドル
10.5インチiPad Pro 256GB:749ドル
10.5インチiPad Pro 512GB:949ドル
12.9インチiPad Pro 64GB:799ドル
12.9インチiPad Pro 256GB:899ドル
12.9インチiPad Pro 512GB:1099ドル

Music

  • HomePodと言うものを発表
  • A8積んでいるらしい
  • 要はすごいSpeaker
  • 今後Siriをどんどん強化して最高のアシスタントになったら便利になるかも -音楽だけでなく、ニュース、天気、交通状況、スポーツスコア、単位換算、メッセージ送受信、株価や翻訳などなど。HomeKit 連携も可能。
  • 1Kの僕にはあまり欲しいと感じない
  • 12月に発売、$349
  • すぐじゃないのか…忘れられなきゃ良いけど…

まとめ・雑感

  • ハードの発表もあったからか、例年に比べて結構おもしろかった。長く感じた。
  • Keynoteの最初に出ていた、 Keep making Apps, world depends on you. という文言がよかった。エモポイント
  • 新生Musicからそうだけど、AppleのUI/UXチーム的な部署はどうなってしまったのか。
  • ゴミ箱デザインが気に入っている経緯も気になる。
  • ARKitのデモがすごかったので、本当に色々な可能性がありそう。ハコスコ + ARKitで頑張ってHoloLensごっこしたい。
  • 機械学習というコンテキストで話すと、iMacProはAMDGPUじゃなくてnvidiaの方がCUDAとかの文脈で便利という話をよく聞くので、その辺はどうなっているのか全く知らない。
  • 昔からMacAMDGPUを採用しているという経緯はあったりしていたはず。
  • とはいえAMDGPUもとても優秀で、Vegaは期待されているので楽しみ。

余談

f:id:miyachik:20170606061116j:plain