S3クローンMinioを使って、自前MicroServices用データストレージを構築する
Minio
Minioという、S3のクローンサービスがある。Goで書かれたAWSのS3のオープンソースクローンで、API互換のあるすごいプロダクトだ。Minioの起動時のヘルプに書かれている説明が非常にわかりやすいので、そのまま引用する。
Minio - Cloud Storage Server for Micro Services.
S3は使いたいが、個人プロダクトだからそんな派手な利用をするわけではないし、そんなちまちましたことでS3の料金をシミュレーションしてわざわざ胃を傷めたくないので、何かしらいい感じのクローンが無いかと思って探していたところ、普通に[s3 互換][検索]でぐぐったら上の方にこのエントリが出てきたので、早速試してみた。
なお、Minioはサーバー版のDLページに移動すると書いてあるが、「Minio server is under active development. Do not deploy in production.」とのこと。確かに、コミット履歴を見てみると、そこそこの勢いで更新され続けている。自分は単なる自分用のしょうもないサービスのストレージに使いたかっただけなので問題ないが、素直にプロダクション環境に使いたいなら、S3を使ったほうが良さそう。あるいは、S3でCI回すのがコスト的にキツイ時の代替手段程度だろう。
起動
ダウンロードページにも書いてあるが、非常に簡単。
$ curl https://dl.minio.io/server/minio/release/linux-amd64/minio > minio
$ chmod +x minio
$ ./minio
Goで書かれているので、単体のバイナリとして配布されているのが嬉しい。
ただ、上の方法だとhelpが表示されるだけなので、実際に起動するときは
$ ./minio server ./
の様に、serverコマンドとオブジェクトを保存するディレクトリを指定する必要がある。
起動すると、Minio内でAWSのaccess_key_idとsecret_access_keyとして扱える値が表示される。
素晴らしく簡単。
ConoHaちゃんが好きすぎるので、WebAPIを叩くためのGemを(途中まで)作ってみた
この記事は、ConoHaちゃん Advent Calendar の22日目です
TL;DR
ConoHaちゃんが、普通にクラウドサービス的に使えて便利な上にマスコットは清楚かわいいしWebAPIも用意されていてプログラマフレンドリーだし、好きすぎるからAPI用のRubygemを途中まで作ったけどいろいろ大変だった話。
ConoHaちゃん
このはちゃんは、昔は一応VPSサービスと言っていましたが、リニューアル後はクラウドと名乗っています。フルSSDが使えて転送量は定額、そして一番小さなインスタンスだと国内で(たぶん)一番安い料金設定がステキです。
このはちゃんとの出会いは、丁度いまの会社に入った時に、同僚の人たちに「このサービスのキャラかわいいよ」と教えてもらったことに始まります。確かにキャラが可愛かったことと、サービスとしても気軽にサーバーを借りられて、しかも転送量が一定であること、さらに結構頻繁にイベントや勉強会をやっていて、そこでクーポンをばらまいてくれるというどの辺が清楚なのかわからないところが好きで、いまでは自分で何かするときにはとりあえずこのはちゃんのサーバーで検証してたりします。先日、別のAdvent Calendar に書いた「Deep learning でニコ生監視システム」にも、ConoHaちゃんのサーバーを使っています。
ちなみに、1年くらいはもらったクーポンで運用できてましたが、最近は普通に課金しまくってます。
ゲームプラットフォームとしてのSlack
この記事は、 Slack Advent Calendar の19日目です。
Slackは、ゲームプラットフォームだ
最近、よくSlackをチームのチャットツールだと誤解されている方をお見受けしますが、皆本質を見誤っていると言わざるを得ません。Slackがチャットツールではなく、ゲームプラットフォームだという理由は、次の点から明らかです。
-
Emojiという美麗なグラフィックのアセッツ、しかもどれだけ登録しても無料
-
Emojiのサイズが統一的で、ドットとしての役割も果たす
-
テキストベースの複雑なコマンドも入力可能なコントローラ
-
ユーザー識別も可能なので、複数のコントローラでマルチプレイも可能
-
画面描写がシンプルなので、難しいことを考えずにただ更新前と更新後の画面を用意するだけ
-
あといろいろと
以上のように、Slackがゲームプラットフォームだということは疑いようのない事実ですが、その反面ゲームプラットフォームとしてはやや機能が不足していると思われる面も少なくありません
-
音を鳴らせない
-
FPSが低い
-
Directなんとかとまではいかないものの、なんか微妙に不便でよくわからないAPI
-
あといろいろ
まあなんというか、Slackはゲームプラットフォームなのに割とゲームを作る能力としては低いです。むしろ最近は、副産物としてのチャットツールの方を成長させようと躍起になり、ゲームプラットフォームとしての本分を忘れ去っているように見えます。
Deep learning で、全ニコ生番組をリアルタイムで監視するシステム作ってみた
この記事は、ドワンゴAdvent calendar(表)の15日目の記事です
ドワンゴでエンジニアをしている @kinoppyd です
TL;DR
ニコ生を監視し、新しく始まったユー生を定期的に視聴し続け、Deep learning Framework の Caffe を使って画像認識し、何が放送されているのかをリアルタイムに知るシステムを作りました。
注意:この記事の中で使っているニコ生へのアクセス方法に関しては、すべてGoogle検索で分かる範囲の情報を使っています。開発者として知っている情報は一切使っていないことを明言しておきます。また、そこそこの数のリクエストを飛ばすので、真似してニコ生側から垢BANされたとしても、一切の責任を負うことはできません。
何の話か
弊社では、なんか人工知能のラボが立ち上がるくらい、人工知能や Deep learning への関心を高めています。毎日サラッとみんなDLの話をしているのに、私自身はDLをまだ利用したことが無かったので、体験してみたくなって作ったという話です。
残念ながら、DLにあまり造詣が無いので、DLの仕組みやチューニングの話は、この記事ではトピックに上がりません。
ともあれ、DLといえば画像認識の話をよく聞きます。画像に何が映っているのかを、かなり高い精度で理解することが出来るデモを幾つか見たこともあります。そこで、生放送のようなリアルタイム性の高いサービスをリアルタイムに画像認識し、何が映っているのかをリアルタイムに認識させるのは面白いんじゃないか? そうだ、せっかくだし今やってる番組全部解析させてみればいいかな、と思ってこのシステムを作ってみました。
建前
画像認識を使ってニコ生の全放送を監視することによって、ニコ生では今何がトレンドで、どういう放送が人気を集めるかということを可視化して分析するツールが作りたかった。
本音
猫が出てくる生放送をすぐに知りたいんだよおおおおお仕事中に猫の映像を見てなごみたいんだよおおおおおお
劇場版ガールズ&パンツァーを観てきた
神だった
これはすごい、最初から全力の、最後まで総力戦って感じだ。もう1回、いやもう何度か観なくては……
Spectre 007 を観てきた
James Bond が大好き
ジェームズボンドシリーズがとにかく大好きで、しかもリブート後初のスペクター登場ということで楽しみにしていた。
とりあえず、観た感想としては、これはロジャームーア時代の007クオリティだわ、って感じだった。さすがに、ロジャームーア以降最高の駄作ダイアナザーデイを超えることは無かったけど、クレイグボンドでは最下位の出来。
楽しめたところとダメだろと思ったところが半々くらいで、まあこんなこともあるよね、って感じの普通の007映画。
とりあえず、車のエンジンが唸る音はもっと聞かせて欲しかった。せっかくのアストンマーチンDB10なのだから。
とりあえず、あと1回くらい観に行こうかな
007そのものの大ファンなので。
ほんの少しだけネタバレ感想
あのすげえタフな悪役、ジョーズじゃねえのかよ
serial experiments lain を観た
動機
先週、一連のキルミーベイベー騒動で、AmazonビデオのDL済みコンテンツすらリモートで削除されたという話を聞いた。
デジタルメディアの購入者は作品を所有することができず、ただ観る権利を与えられているだけであり、その権利はいつ剥奪されてもおかしくない。そういうことを改めて再認識すると、いま手元に所有していない作品はいつの日か突然触れることができなくなってもおかしくない、という焦燥が浮かんできた。
なので、せっかくの祝日だから、今まで観たいと思っていたけど観れていなかった作品を観ようと思い、ずっと観たいと思っていた serial experiments lainを観た。
https://youtu.be/Bb1bXNI4mUQ(バンダイチャンネルで公開されている無料の1話目)
Chinachu + Ruboty = 超便利
ruboty-chinachuプラグイン作ったよ
Rubotyという、Rubyで実装されたbotエンジン用のChinachuプラグインを作った
Chinachuは、Nodeで実装されたLinux用の世界一キュートな録画サーバーだが、キュートなだけではなくAPIが完備されていて、プログラマフレンドリーでサイコーな録画サーバーでもある。前に導入用のエントリも書いた。
diffコマンドの exit code って、差分がなければ0、差分が有れば1、失敗したら2なんだね
T/O
タイトルの通り
悲しみ
いま書いてるRubyのコードで、シェルコマンドを実行する必要がある場所は、Open3を介して実行するようにしているんだけど、Open3#capture3メソッドは(というか、Rubyのprocess.cが)exit codeが1の場合、success?メソッドをfalseで返すようにしているらしく、普通のコマンドと挙動が違う
shellコマンドの実行を共通化していると、diffコマンドだけこの特殊な挙動を切り分けなくてはいけなくて辛すぎて泣きそう
diffyとかのライブラリとは違い、ディレクトリ構造の違いを取得したいケースなので、つらい
補足
自分で確認していないけど、チャットでもらった情報だとcmpとdiff3もそうらしい
Gemを初めてRubyGemsにリリースしたよ
作ったもの
何これ
たまにしょうもないもの(たとえば、キルミーベイベー画像ジェネレータとか)を作ってGithubにプッシュするけれど、ライセンスとかもうどうでも良いし好きに使って欲しいけど、ライセンスの表記が無いのも使いたい人が戸惑う。そういうときに最高のライセンスWTFPLがあるのだが、作ったものにいちいちこいつを入れるのもめんどくさい。
そんなときに、コマンド一つでWTFPLのライセンスファイルを生成してくれるGemです。
Usage
$ echo 'gem "wtfpl_init" >> Gemfile
$ bundle install
$ bundle exec wtfpl
これで、wtfplコマンドを実行したディレクトリにLICENSE.mdファイルが作られて、中にはWTFPLのplain text が入っている。
Gemの作り方
RubyGemsのページやDevelopers.IOのブログが参考になります。
RubyGemsのページが王道なのだろうけど、Bundlerが大部分を肩代わりしてくれるので、大事な手順は次の二つだけ
RubyGemsのAPIキーを手に入れる
$ curl -u YOUR_RUBYGEMS_USER https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials
このコマンドで、RubyGemsからGemのパブリッシュに必要なAPIキーを手に入れられる。もちろん、先にRubyGemsに登録しておく必要はあるので、サインアップを忘れずに。
curlでアクセスするときにユーザーネームを渡すので、Basic認証がかかり、パスワードを聞かれる。サインアップしたときのパスワードを入れると、APIキーが降りてきて、それを$HOME/.gems/credentials に保存する
Gemをビルドしてパブリッシュ
BundlerのRakeタスクを使って、Gemをビルド&パブリッシュする
$ bundle exec rake spec
$ bundle exec rake build
$ bundle exec rake release
とりあえずテスト回して、ビルドして、リリース。rake releaseを実行すると、Githubに対象のタグを勝手に打ってくれるらしい。(Rakeタスクを呼んでないからどういう動作になっているのか分からないので、後日読もう)
この二つの手順だけで、GemをRubyGemsにパブリッシュすることが出来る。実際に作ったものが役に立つのかどうかは知らないけれど、変に名前空間を食いつぶすような名前で無ければ、何か作ったら適当にパブリッシュするのが良いんじゃないかと思う。今後は頑張ろう。