結婚式の二次会用にビンゴゲームのJavaScriptを書いた
WindowsでもMacでも結婚式の二次会用でビンゴをやるためのフリーソフトで良い物が見つからなかったので、JavaScriptで書いてみました。
サンプルは、こちら。
なおこの度も、MITライセンスで、githubに公開してあります。
なお、動作確認は、ChromeとFirefoxとSafariのみ。
インターネット環境がなくても動きます。
機能としては、
- Startボタンでスタート
- Stopボタンでストップ
- 履歴はローカルストレージなので、再読込してもOK
- リセットは、resetボタン。
- ドラムロールが3.5秒間ほど流れる
となっています。
HTMLなので、新郎新婦からデザインの変更が求められたら好きな様に、CSSなどを買えればよいかなと思います。自由にご利用下さい。
あと、iPhoneだと、サイズを調整しないと厳しいですが、iPadなら利用することができました。
なお、ドラムロールの音にニコニコモンズを利用させてもらいました。
http://commons.nicovideo.jp/material/nc79078
kenapoさん、ありがとうございます。
React.jsでLoL生放送のリアルタイムランキングを作ってみました
お盆で会社も気分転換に休んでちょっとしたWebサービスを作ってみました。
世界で一番遊ばれているe-sportsな無料のネトゲ、League Of Legends(LoL)を遊んでいる日本語の生放送だけを抽出して、スコア付けしてランキング化しています。
使った技術はいつもどおりのPlay2/Scala、PlayJsonです。WSは使わずHttpclientをそのまま使っています。WSは罠が多すぎるので...。
やっていることはTwitchのAPIとニコニコの検索APIを叩いてAkka Actorで1分毎に実行しつつそれをCacheに積んでいるだけです。
クライアントサイドは、今回はじめてReact.jsを使ってみました。React.js、以前勉強会に参加した時にはまだまだ使えるようになるの先かなぁと思っていましたが、JSXで書いてコンパイルするというスタイルがおもったより良い感じです。ただエディタは、IntelliJを無理して使うよりはAtomを使ったほうがいろいろ便利でした。
使ってみた感じコンポーネントの再利用がし易い感じがします。TypeScriptとReact.jsを組み合わせて使うと結構保守性も高そう。ただ別に実行速度が高いとかいうわけでもないので、無理して使わなきゃいけないというわけではなさそうですね。
罠としては
- classをclassNameに書き換える必要があること
- {}の中はJ結構JSのコードがかけちゃうので気をつけないと複雑になること
でしょうか。あとComponentというクラスが描画戦略を持っているのですごく頑張って実装すれば最終的に高効率の描画ができそうです。
なおこのサイト、今は前回と今の結果から差分だけをだしていますが、いずれリアルタイムランキングだけではなくLoLのゲーム実況配信者の人気統計みたいなのを取って週間ランキングや月間ランキングを出せればなと思っています。
にしてもこのランキング、今日一日眺めてたけどLoLの女性配信者の多さね...そして、女性ゲーマーでダイアとかゴールドの人がゴロゴロいるってのが本当にすごいなと思います。
JavaFXとRxJavaの勉強のためにSocket通信対応したMac用棒読みちゃんクローンを作ってみた
あけましておめでとうございます。
丁度冬休みということもあって、Mac用の棒読みちゃんクローンを作ってみました。
インストールバイナリもソースコード自体もgithubで配布中。あと、ソースコードはMITライセンスです。
見た目はこんな感じ。
使ったライブラリとしては、
- JavaFX (Java8からデフォルトになったJavaの新UI)
- RxJava (ReactiveExtensionsのJava版)
- gradleのmacAppBundle (Mac用の.appファイルを作ってくるバンドル)
- kuromoji (日本語形態素解析ライブラリ)
- Netty 4系 (高速なTCP通信が可能なサーバー)
実装した機能としては
です。過去読み上げしてくれるMac用のアプリはいくつかあったのですが、棒読みちゃん互換のSocket通信読み上げに対応したものがなかったので自分で作ったというのが軽易です。
ここからは開発の感想です。ここ1年以上ずっとScala書いてるので久しぶりのJavaプログラミングはいろいろ懐かしいものがありました。ただラムダやStreamを使おうとしてみるもののイマイチぱっとしなかったりという感じで、そこはScalaの方が圧倒的に便利です。
まずJavaFXについてです。過去Swing、SWTと触ってきましたが何が特に非同期処理の部分のところが専用のTaskやpropertyのbindを使わなきゃいけなくなっていて結構面倒くさい感じになっています。その他の部分はUIのAPIはかなり素直な作りになっており、初心者にはわかりやすい仕組みになっているのではないかと思います。
個人的に何がすごかったかというと、JavaFX Scene Builderです。こいつが使いやすすぎる。これのためにJavaFXを使ってもいいといっても過言ではない感じでした。fxmlをIDEで協調しながら編集した際にも問題なく利用することができました。
あと、RxJava。元々いろいろ情報は知っていたのですが柔軟なイベントハンドリングをするためのライブラリ。オブザーバーパターンでさえ、様々な実装を用意してくれています。非常に便利なことができるライブラリですが、正直イベントが鬼のように飛びまくるようなUIでは便利ですが、ちょっとしたアプリぐらいであれば、間違った使い方をしてしまうのが少しこわいなと思う所あります。
個人的には、Subjectが様々なバリエーションがあって感銘をうけました。
java - How can PublishSubject and BehaviorSubject be unsubscribed from? - Stack Overflow
GradleのmacAppBundleは、Oracleが.appファイルの作り方を紹介してくれているやつをそのままプラグイン化してくれたもの。kuromojiやNettyは過去何度か形態素解析やTCP/UDPサーバーを作ってみるということをやっていたので、特に問題なく利用することができました。どちらもバージョンが上がってどんどん洗練されている気がします。
このMac用の棒読みちゃん、棒読みさんを今後も少しずついじりながら機能拡張していきたい所です。
追伸
この冬休みずっとFF14とダークソウル2をやっています。真成2層練習パーティが中々集まらないそんなTitan鯖。
ScalaMatsuri祝いにIRCとSlackの相互リレーをするScala製ツールをMITライセンスで公開しました
今日はScalaMatsuriのー日目、皆様お疲れ様でした。
初めてオダスキー先生を見たり、本当に刺激的な内容が多くてとても勉強になりました。
そんな中自分は、Scalaを書きたい欲求が、ガガガーっと沸き上がってきたので、自分が欲しかったIRCとSlackの相互リレーをしてくれるScala製のツールを作りました。きっとIRCとSlackの両運用で一時的に困ってる方が居るかと思いますので、ぜひご活用いただければと思います。
ソースコードはこちら、
MITライセンスなので、好きに改変してお使いください。使っている技術としては、
- sirc
- akka-acotor
- dispatch
となります。
なお現在の仕様では、IRCの設定、SlackのIRCアダプタの設定、SlackのAPIのトークンの設定をして、相互リレーをするチャンネルを設定することで
IRC→Slackは
23:55 ircslackrelay: username: message
23:55 ircslackrelay: _ username: notice is sanded by undersocre _
こんな形式になります。Slack上ではアンダースコアで挟んでIRCのnoticeを表現。またニックネームは、最初の文字の後にサイズゼロスペースを入れることでnotificationに引っかからないようになっています。
Slack→IRCは
23:55 ircslackrelay: username: message
全てnoticeになり同様にニックネームにサイズゼロスペースを入れてあります。
ぜひご活用下さい。素敵なChatOpsを!
追伸
なお、使い方やインストール方法をもっと詳しくQiitaの方に書きました。
WEB+DB PRESS Vol.82 にオブジェクト指向アプローチによる変更に強いテーブル設計という記事を書かせてもらいました
今回でデータベース実践活用の連載2回目ですが、この度は、オブジェクト指向アプローチによる変更に強いテーブル設計、というタイトルで記事を書かせて頂きました。
写真は先ほど届いた査読誌です。
内容は、テーブル設計をやりはじめたばかりの新人エンジニア向けの初歩的なオブジェクト間の関連の定義の仕方から、マーチン・ファウラーのテーブル継承の手法、そして最近流行りの大規模WEBにおける具象テーブル継承のデメリットを打ち消すID設計戦略までを説明しています。
そしてこの度は、漢(オトコ)のコンピューター道で有名な奥野さん、達人に学ぶSQL徹底指南書で有名なミックさんにも査読いただき、とてもよい内容にまとまっていると思います。
おそらくWEBでDBを触っているエンジニアならば読んで損はない記事になっていると思いますので、8月23日発売ですのでぜひお買い求め下さい~。
- 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/23
- メディア: 大型本
- この商品を含むブログを見る
追伸
今回は一番最初に出ているこのWebAPIデザインの鉄則がすごくよい記事だなと思いました。というかいつも悩んでるだよなぁ。
既存のIRCボットをSlack対応させた時にハマった点
最近Slackが大ブームということもあって、IRCやその他のチャットシステムからSlackに移行している方も多いと思います。そんな中、IRCのgatewayがあるということで、IRCのボット資産をSlackに移行するために自身がハマった点が何点かあったのでまとめておきます。
今回IRCからSlack対応させたのは、自身がScalaでメンテナンスしているranking_ircbotというチャンネルにおける発言回数と名言を保存しておいてくれるボットです。
問題になった点は以下4点。
- noticeがない
- IRCの通信をSSL化しないといけない
- IRCのgatewayを使う場合、専用のアカウントがないといけない
- IRCのgatewayでbotが発言しまくると、そのチャンネルにおいてIRCを通じて発言できなくなる
になります。
1.noticeがない。これに関しては諦めざるを得ません。なので、noticeがなくてもよい運用にしましょう。幸い@usernameで呼びかけるとSlackから相手に通知が行くので通常の投稿と、人に通知を送りたい場合は@usernameを入れて対応するということで、通常のメッセージにはあまり反応しないような運用が良いのではないかと思います。あと変わりに_でメッセージを囲ってイタリックにしてやる方法や@usernameにゼロサイズスペースや_を挟んでnotice反応しないようにするのも手です。
2. IRCの通信をSSL化しないといけない。これはSSL対応しているIRCクライアントを利用する必要があります。自身が使っているsIRCというJavaのIRCクライアントライブラリは対応があったため、特に問題なく移行することができました。Java系だと、証明書を登録するか無視するかのどちらかの対応をしなくてはいけないというのがちょっと面倒臭いところです。自分は無視しています。
3.IRCのgatewayを使う場合、専用のアカウントがないといけない。これが一番厄介で、IRCで発言するようにすると、SSLのサーバー認証がユーザーIDとパスワードで行うため、登録ユーザーIDがボットの動きをしてしまうことになります。
なお自身のアカウントでbotを動かすと、人格をbotに乗っ取られるような感じになりますw
なお、ボット専用のメールアドレス等を用意されるのであればそれで対応されるのも良いかと思います。
それでも回避しきれないのが次の問題で、4.IRCのgatewayでbotが発言しまくると、そのチャンネルにおいてIRCを通じて発言できなくなるという問題です(ちなみにこれ解除するためにはパスワードを再生成しないとダメです)。おそらく、Slackが、REST APIの制限の抜け道をIRCでやられないようにこのような制限をかけているのだと思います。
この3番、4番の問題を解決するために、最終的に、取得だけはIRCのチャンネルからストリームで取得し、発言はSlack REST APIから行うようにしました。ただし、こちらは1秒間に1回しか発言しないように制御する必要があります。
そこで自分はScalaで実装していたので、Javaの並行プログラミングユーティリティのSemaphoreを利用して、Slackのクライアントを以下HTTPクライアントのdispatchを使って下のように実装しました。このおかげで1秒間に1回以上連投をせずにちゃんとブロックしてくれるようになります。
Slack API Client for Message Posting with API limi ...
以上が、SlackにIRCボットを対応させるために行った時にハマったこととその対応になります。参考になれば幸いです。