沖縄・宜野湾エンジニア勉強会 第2回をしました & 第 3 回のお知らせ

こんにちはこんばんは!沖縄・宜野湾エンジニア勉強会の 2 回目をやったのでレポです。 勉強会の概要などは下記リンク先を見てください。

connpass.com

今回も前回と同様、前半に 20 分枠の発表、後半に LT という構成。 参加者は前回に引き続き、学生が多めでフレッシュな感じでした。 もうちょっと職業プログラマとかも増えるといい塩梅の割合になるので、増えるといいなー。増やしたい。

20分枠は 3 つ、LT は 11 個ありました。Twitter に言及がある発表でそれぞれのタイトルとちょっとしたメモを書きます。 Twitter#ginowanstudy ハッシュタグを見ながら書いているので、書いてる内容が違うよーという指摘があればください。

  • (20分枠) @Intel0tw5727 さん「Python でなんでも高速化」
    • Python による映像の顔識別タスクを Cython や MultiProcessing を用いて高速化
    • 対局動画を対象に解析
    • MultiProcessing の並行処理による高速化で処理結果が順不同ではないということを示すのに。対局動画の時計が順序どおりに進んでいることで可視化していたのが面白い
  • 自分「Firebase でアプリを作るのどんな感じ?」
    • 序盤に自分が作りたい英語学習アプリの feature をゆったり説明していてほとんど喋れなかった反省
  • @hashk1 さん「新海誠を再現してみた」
    • 実写を CartoonGAN で新海誠風に変換する
    • モデル等は論文著者が公開してくれているらしい
    • アニメは輪郭がはっきりしているので GAN の discriminator 向けにあえて輪郭をぼやかしたものを入れる
    • 結構それっぽかったので、これでまじぽか 2 期決定では!?とか想像していた
  • (こっから LT枠) うまはらさん「Atom の Package を作ってみた」
    • 初 LT & LT 駆動開発
    • Atom で動くタイマーを作った
    • 学生の時によく emacs の拡張書いてたの思い出す。身近なところからコードをかいていくようになるのは良さそう
  • @DEKA1066 (デカ中澤) さん「IoTエンジニアを目指してシソを育ててみた」
    • 合法ハーブ SHISO の水やりなどを自動化
    • 働かずに飯を食いたい・Rails の勉強をしたい・IoT プロジェクトをやりたいを実現するのが今回の IoT プランター
    • うちも最近、ミツバを育てるようになったけど水やりをすぐ忘れる
    • 資料が Youtube にアップロードされているのが新しい
  • ピロシキさん「Linux で DS-Lite のゲートウェイを作った話」
    • 家のネットワーク周りの話で初LT!
    • DS-Lite (IPv4 over IPv6 をやるやつ) の説明がメイン
    • ネットワークの話も増えてくるといろんな話が聞けて面白い
  • tan さん「プログラミングトレンドの話」
    • いま一番ナウい Julia の話をしていた(曲解)
  • @tompng (ぺん) さん「流体解析の話」
    • 粒をたくさん動かすと楽しい話
    • 流体シミュレーションについて、段階的に説明するわかりやすい LT だった
  • 山田さん「Macbook背面のステッカー検出してみた(かった)話」
    • ステッカーを検出する
    • 先日、PyData Okinawa であった OpenCV 回をアレンジしたものとのこと
    • 勉強会でやったのを実践の形に持っていくのはすごい
  • toubaru さん「Vue.js で XSS」のお話
    • Vue.js で起きうる XSS パターンの解説
    • 資料のボリュームがすごい
    • いつも丁寧に書いてらっしゃるイメージなので、初心者向けに 20 分枠でいろいろ話してもらえると楽しそう
  • 篝さん「PDFからテキスト抽出!」
    • タイトルの通りなのですが、懇親会でぺんさんと続きをやっていたのが良かった
    • LT は基本的に全部細かく喋るのは無理なので、懇親会で深掘っていくやりかたでも OK
  • 328 さん「BugBounty の話」
    • 実例をもて BugBounty の流れを説明
    • 珍しい話で良かった
    • 何気にセキュリティ枠が2つもあるのが宜野湾エンジニア勉強会の多様さを表している気がする

第三回は もくもく会 + LT になります!場所が琉球大ではなく CODE BASE さん になるので気をつけてください。 土曜日 & 長時間になるので参加しづらいかもしれませんが、LT だけ参加とかでも構わないのでどんどん参加してください!

ginowan.connpass.com

沖縄・宜野湾エンジニア勉強会(大LT大会)をやりました

沖縄・宜野湾エンジニア勉強会(大LT大会)というのをやりました。 今のところエンジニアリングに関する話をざっくばらんに話していくふわっとした勉強会です。

勉強会を作った理由としては、自分が沖縄に引っ越してきたばかりで知り合いが少なかったので友達を作りたかったのがひとつです。もうひとつは新潟に長岡IT開発者勉強会(NDS)という最高の勉強会があって、似た勉強会はないかなぁと探してたんですが見つからなかったというのです。NDS は東京以外でもエンジニアリングについて熱心に喋る人たちがいて、とても楽しく盛り上がれる会があるんだということを教えてもらった勉強会です。多彩な話が聞けて勉強になり、当時自分みたいな若造がふざけた話を話をさせてもらえるくらい、間口の広さがとにかくすごいです。ここで随分スキルアップしたのを覚えています。沖縄・宜野湾エンジニア勉強会という名前は NDS からインスパイアさせていただいて雰囲気を似せてみました。

かなり雑に作ったイベントというのもあり、他のイベントで宣伝するたびに中身が変わっていった結果、最終的には 20分枠 + LT 大会になりました。そんなふわっとした会でも 20 分枠で喋ってくださる方がいたり、LT も 20 人ほど喋ってもらえてすごくありがたかったです。20分枠は @AnaTofuZ さんのオレオレ言語をライブコーディングで作る話や @d_ishitaka さんのKubernetesの話とガチな内容からはじまりました。LT大会に関しては初めての会なので、自己紹介程度でいいよ〜って書いてたはずなのですが、かなり作り込んできている面白いLTばっかりでした。

今回は琉球大学で開催させていただいたからなのか学生が多く、新鮮な会になったかなぁと思います。20分枠の方も学生だし、初めてLTやりますという学生も多く、沖縄は優秀でアグレッシブな学生がいて良いなぁという印象を持ちました。若者と一緒にいると元気が出ますよね。学生以外も元気があって楽しい内容が多く、ウェブサービスやゲームを作っている人、データをやる人、セキュリティをやる人、ハードをやる人、意味わからないコードを書く人と、色んな人たちの話が聞けて、すげー知識欲が満たされました。こういうのがいいんや!

当日の雰囲気は #ginowanstudy hashtag on Twitter 辺りで分かると思います。

またやってくださいという話もいくつかいただきましたし、来月にも何かやろうかと思います。勉強会の前日に考えたのですが「何でもある、何にでもなれる Hackable な勉強会」というフレーズがエモくて気に入ってるのでぜひそんな感じにしていきましょう!こういうのやってみたい・やってほしいみたいなのがあればぜひ Discord サーバーへお願いします!


懇親会も楽しかった。琉球大学は直前に連絡しても10人以上入れる居酒屋があって便利。

f:id:jewel12:20180712230556j:plain

オープニングの資料

自分の LT の資料。

go/misc/wasm/wasm_exec.js は何をしているのか - ミントフレーバー緑茶会

もともと 5 分じゃ無理だと思ってたけど想像以上に時間が足りなかった。最初からダメダメだったので続く人のハードルを下げることができたらいいなぁと思ってたんですが続くLTはガチなLTばかりでハードルを下げる意味はなかった。

ハッカーズチャンプルー2018に参加した

hackers-champloo.org

沖縄の宜野湾コンベンションセンターで開催されたハッカーズチャンプルーというイベントに参加してきました。 イベントの存在自体は知っていたのですがあんまりキャッチアップできておらず、いつの間にか参加人数が満員になって焦った(無事キャンセル待ちで入れました)。 初めて参加したのですが、トークの話題にデザイン, Go, Clojure, CTOの今ここにいるまでの話, VTuber など全体的に話題が散らばっており、これぞチャンプルー!って感じでした。 技術系イベントでは自分では取りに行かないような話題をざっくばらんに聞いて、最近の動向とかを知るのが好きなのでとても楽しかったです。

トークの感想

特に面白かった話としては fujiwara さんのベンチマーカーの話。

Goとコンテナで作るWebアプリケーションベンチマーカー / Benchmarker built with Go and Container - Speaker Deck

スマホゲームはリリース時にキャンペーンをしたり広告をうつので、初期のリクエストが最大のピークだったりすることもある。 そんなときにスケールしなくて障害→メンテになったら機会損失が大きい。ちゃんとスケールするか、モニタリングはできているかということを確認するためにベンチマークは重要。 シナリオを定義してテストできるものは JMeter などいくつかあるが、今回は Go で自作している。 シナリオを書くのに集中するという点に対して一貫している実装だと思った。

  • ベンチ側で同じ構造体を使いまわせる
    • サーバーサイドが Go で書かれている場合、ベンチ側で同じ構造体を使いまわしたりできる
  • リッチなレポーティングは他に任せる
    • ベンチ中に何が起きているかというレポーティングはモニタリングに任せればいい、なのでリッチなレポートは作らない

あとは CloudWatch のカスタムメトリクスにシナリオ情報のタグを仕込んどいて、コンテナ単位のトレースはできるようにしていたり、書くことがあるかはわからないけど Go でのベンチ作りのノウハウが参考になった。

あやぴーさんの Clojure の話も面白かった。ブランディングとしての Clojure での求人はそこそこだけど、Ring を使ったライブラリの組み合わせによる実装の保守・機能開発はうまくいっているとのこと。

ハッカーズチャンプルーについて

冒頭にも書いたとおり、技術系イベントは自分では取りに行かないような話題をざっくばらんに聞いて最近の動向とかを知ったり、話をしたりするのが好きなのでそういうイベントが沖縄にも無いかなーと思っていた。ハッカーズチャンプルーは完全に欲しかった場所!って感じのイベントだったのですごく満足でした。

もともとそういう場がほしかったので

沖縄・宜野湾エンジニア勉強会(大LT大会) - connpass

という場を作っていたのだけど、クロージングで LT 参加しよう!という話になって、便乗して名前だけイベントの紹介ができてよかった。 ハッカーズチャンプルーみたいなのをもうちょっと短いスパンでカジュアルにできたらいいなーと思う。

とても楽しいイベントありがとうございました!懇親会も 2 次会まで参加させていただいて最高だった

Google Home に喋らせる

自発的に Google Home に喋らせたい。

喋らせている人たちはローカルの Google Home に対してローカルネットワーク内のラズパイなどで API 叩いて喋らせるみたいな感じになっている。

ググるgoogle-home-notifier が主流に見えるが、ラズパイで動かすにはセットアップに一手間いる。Go 製の homecast があるのでバイナリを置くだけにしたい。

どういう仕組みか

  • Google Home を探して音声再生 API を叩く
  • 再生する音源は Google Translate で利用されている text-to-speech を利用している

Google Home を探す

HashiCorp の mdns という mDNS のクライアントを利用して探している。Google Home のホスト名には _googlecast._tcp というサービス名が含まれ、付加情報部には md=Google Home が含まれるのでこれでフィルタリングする。

Google Home が複数台ある場合などはホスト名を控えておいて個別に操作することになりそう。

喋らせる

Google Text to Speech に再生させたい文字列を渡して音声ファイルの URL を取得する。 go-cast を使い、Google Home で音声ファイルを再生する。

Google Cast SDK を見るに Chromecast と API の互換性があるようだ

https://translate.google.com/translate_tts を叩く Text to Speech の使い方は非公式なのでいつか使えなくなるかもしれない。その場合は音声ファイルを生成してどっかに置いておく必要がある。

YAPC::Okinawa 2018 ONNASON に行った

昨日飲みすぎて午前中は倒れてたけど午後から行った。

自分がベストトーク賞に投票した発表はこれ。

  • 小さく一つの仕事に集中させる意思を持ち、妥当そうな設計で Production Ready なミドルウェアを書き上げるのがすごい
  • WS をアプリからクライアントへの通知だけに使って、クライアントからの書き込みは REST API というパターンは参考になる

沖縄に友達を作りに行ったつもりだったけど県外からの人が案外多くて、路線バスで帰る人たちは沖縄に家がある人なのでその人たちと少し喋ったくらいだった。地域コミュニティへ遊びに行かなくては。

1日で終わる YAPC って初めてだった。サクッと楽しめていい。2日あったりすると1日目の夜がピークになって2日目疲れてる。ともかく運営やトークした皆さんはお疲れ様でした。

Docker for Mac で動いているコンテナでホスト側のサウンドカードを使う

自分でスマートスピーカーを作りたくなり、音声認識のところで Julius をいじってるなう。Julius を含む音声認識部分をコンテナで切り出しているところでホスト側 (macOS) のサウンドカードを使わせるようにしたかったのでやり方をメモっておく。

macOS ではなく ALSA の使える Linux 環境であれば Docker の --device オプションで --device=/dev/snd:/dev/snd としたりすれば動くらしい。VirtualBox だとオーディオ設定からホスト側のサウンドカードを利用できるので、コンテナを VirtualBox 上で動かすことで Docker の device オプションによりホスト側サウンドカードを利用できる。VirtualBox を経由するのではなく別のやり方が無いか調べていたら PulseAudio 経由で音声を再生するやり方も見つかったので、これをベースに音声入力もできないか試してみた。

audio - Record Sound on Ubuntu Docker Image - Stack Overflow

大まかな説明

  • コンテナ側
    • PulseAudio の設定で音声データの入力元を /dev/audio とかにしておく
    • socat の tcp-listen で port に流れてきた音声データを /dev/audio に流し込む準備をしておく
  • ホスト側 (macOS)
    • SoX (Sound exhange) でマイクからの音声データを socat で待ち受けているポートに流し込む
  • コンテナ側で録音できる

検証作業

  • Dockerfile
FROM ubuntu

RUN apt-get update && apt-get install -y pulseaudio socat alsa-utils
  • コンテナ側
bash-3.2$ docker build -t mictest . && docker run -p 127.0.0.1:3000:3000 -v `pwd`:/mictest -it mictest
...
root@bf3b26a44c0e:/# pulseaudio -D --exit-idle-time=-1
W: [pulseaudio] main.c: This program is not intended to be run as root (unless --system is specified).
root@bf3b26a44c0e:/# pacmd load-module module-pipe-source file=/dev/audio format=s16 rate=44100 channels=2
root@bf3b26a44c0e:/# socat tcp-listen:3000 file:/dev/audio &
  • ホスト側
bash-3.2$rec --encoding signed-integer -traw --bits 16 --channels 2 --rate 44100 - | nc 127.0.0.1 3000 > /dev/null

rec は SoX の録音用ラッパー。

  • コンテナに戻って
root@8c421891ff69:/# arecord /mictest/test.wav
Recording WAVE 'test.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
// この後めちゃくちゃ音を鳴らして Ctrl-C
  • test.wav を聞くと録音できているよかった

おわり

  • ネットワーク経由で PulseAudio 使ったことなかったけど具体的な使い方が見えてきたのでよかった
  • SoX は音量の閾値を超えたら録音開始したり、色々できるようで便利
    • 音声処理ツールのスイスアーミーナイフとトップページに書かれているだけある
  • 実際は Raspbian にのっけたいので実機で確認したいところだが開発中は手元の MacBook Pro で音声入力でやっていきたい 

社内どうぶつタワーバトル大会をしました

これは VOYAGE GROUP Advent Calendar 2017 - Qiita 14 日目の記事です。

VOYAGE GROUP には社内サークルがいくつかあり、各サークル元気に楽しく交流しています。 自分が所属しているのはゲームサークルで、日夜格ゲーの練習をしています。ここ1年はストリートファイター5をやっているので、プラチナ辺りまでいったらブログでも書こうと思っていたのですがなかなか難しいですね(現在ゴールド)。

社内で流行っているゲームは時の流れにもよりますが格ゲーやイカのゲームだったり、スマホゲームだと Vainglory が強かったりします。そのなかで少しずつ盛り上がりを見せているのが どうぶつタワーバトル (DTB)です!DTBiTunes App Store でも上位に食い込んでくるほど人気になってきているゲームです。今回はその DTB の魅力を伝えていきたいと思います!

といってもシンプルな話で、伝えたいことを一言で説明すると 忘年会はどうぶつタワーバトルで盛り上がろう! です。

概要

動画を見ていただければわかるはずです。動物を積み上げて崩さないやつが優勝、それ以外は敗北と共に屈辱を味わう。それだけのシンプルなゲームです。 社内の人が言ってましたが、動物版ジェンガという感じですね。

シンプルに見えますが、いくつかのセオリーやパターンがあったり、序盤・中盤・終盤とフェーズごとにどう置くべきなのかすごく考えさせられるゲームになります。 勝つためにどうすれば良いのかということは日夜研究されており(たぶん)、 2キリン 5.5象 握力 など専門用語が飛び交うほどの奥の深さを持つゲームです。 今夜勝ちたい ゲーム攻略記事で有名なゴジラインさんでも記事にされています。

【どうぶつタワーバトル】今夜勝ちたい『どうぶつタワーバトル』 | ゴジライン

個人的な攻略法は、 無茶をしない この一言につきますね。

何が魅力なのか

シンプルの中に奥深さががあるのはもう述べたとおりですが、一番の魅力はみんなで遊んだときの 盛り上がり にあると思っています。主要なゲームモードはオンライン対戦なのですが、対戦部屋を作成してから知り合い同士で遊ぶこともできます。

一緒に遊ぶ人に強すぎる人がいたら負けっぱなしで面白くないかもしれないのでは?と思う方もいるかもしれませんが、DTB の難しく楽しいところは一瞬も気が抜けないところです。下手な積み方をするとすぐに負けますし、適当に置いても謎の力により勝ったりします。

謎の力の例です。

どう転んでも面白いし盛り上がる、DTB の面白さですね。飲み屋で数時間 DTB をやって笑いこけている自分に気づいたときは忘れてしまっていた童心を取り戻したかのようでした。

社内大会をしました

社内の色々な人が DTB にハマっているのを見かけて、お昼ごはん休憩がてら社内大会を実施しました!DTB をやっていない人も観戦に来てくれたりと盛り上がりました。

f:id:jewel12:20171215000215j:plain

レート 2000 超えの猛者もいる中、本番のバトルなら強いと意気込んで企画したのですが優勝には至りませんでした……また出直したい。

おわり

企業対抗戦のお誘いや個人的な挑戦などはいつでも受け付けております!きっと盛り上がると思うので、興味ある方は @jewel_x12 までご連絡ください!VG勢はよく#だいだい という部屋で戦っています。

もう年の瀬、忘年会は積もる話もあるかもしれませんが、すべて無視してどうぶつタワーバトルで動物を積んで盛り上がりましょう!笑いで締められればそれでよし!

明日の VOYAGE GROUP Advent Calendar 2017 の記事もご期待下さい!!