Android Gradle Pluginのバージョン4.0.0から4.0.1へアップデート。何が変わったのでしょうか? https://developer.android.com/studio/releases/gradle-plugin#4-0-0 This minor update supports compatibility with new default settings and features for…
Aizu Online Judge の Shell Sort の問題 をやってて、なんか分かった気がしないなぁと思ってました。 Aizu Online Judgeの一部の問題は、本だと解説されてたりします。 プログラミングコンテスト攻略のためのアルゴリズムとデータ構造作者:渡部 有隆発売日:…
以前、記念日を忘れないためのWebアプリを作りました。 blog.bati11.info しかし、致命的な弱点がありました。それはオンラインじゃないと動かないということです。つまり、飛行機で上空にいるタイミングで「もう少しで結婚記念日だわね〜」みたいな会話にな…
GAE Go1.11 の dev_appserver.py でホットリロードが効かないなーというとき、dev_appserver.py実行時に以下のメッセージが出力されてました。最後の1行が出力されているとホットリロードが効きません。 $ dev_appserver.py dev.yaml INFO 2019-09-22 10:30:…
SQLアンチパターンという本があります。 その本の1章がジェイウォーク(信号無視)。ジェイウォークで紹介されているようなデータがtsvファイルとして手元にある場合に、SQLではなくシェルでなんとかするお話です。 ジェイウォーク tsvファイル SQL vs シェ…
前回、別goroutineで発生したエラーハンドリングをしました。具体的にはサブスクライバへの書き込みでエラーが発生した場合にサブスクリプションの削除処理するようにしました。今回は、 context.Context を使ってgoroutineを停止することで、クライアントが…
前回の続き。別のgoroutineで発生したエラーをerror channelを使ってハンドリングしてみたいと思います。ハンドリングの処理でmapを使ったのですが、goroutineセーフにするため sync.Map を使ってみました。 目次。 handleSub でエラー 別goroutineを受け取…
前回、goroutine, channel, selectを使って Broker を実装しました。この Broker をサーバーで利用し、MQTTでメッセージを配送してみます。 その前に <-chan chan<- []byte という型が読みづらいので type を使って対応します。その後、読み書き可能なchanne…
前回はgoroutineを使って、複数クライアントと同時に接続できるようにしました。今回は、複数のgoroutine間をchannelをつないでメッセージやりとりし、Publishされたメッセージを別のSubscribeしているクライアントに配送します。channelの所有権やselectを…
前回までで、クライアントがPUBLISH、またはSUBSCRIBEすることができるようになりました。次は、クライアントからPUBLISHされたメッセージを、SUBSCRIBEしている別のクライアントへ送る処理を実装していきます。が、その前にgoroutineを使ってサーバーが複数…
前回で、クライアントからのPUBLISHを受け取るところまで実装できました。今回はSUBSCRIBEを受け取るところを実装します。いつも引用してる図で言うと、右側の「Computer」や「Mobile device」からMQTT Brokerへの通信です。 引用元:API Builder and MQTT f…
前回の続きです。handlerのエラーハンドリングからやります。その後、mosquitto_clientからPUBLISHパケットを自作サーバーで受け取れるようにしました。最後にhandlerのリファクタリングで Untyped constant declaration というconstの便利な使い方を知りま…
前回の続きです。前回までで一応 CONNECTパケットをstructに変換する処理ができました。これでクライアントからのCONNECTパケットをサーバー側で解釈できます。 今回は、CONNECTに対するレスポンスであるCONNACKに取り掛かります。また、実際にサーバーとし…
前回の続きです。 今回は、MQTTのCONNECTパケットのペイロードから。ペイロードをbinaryパッケージを使って実装します。その後、regexパッケージを使って入力チェック処理を書いてテストします。Goではテストカバレッジが簡単に取得できるようだったので、試…
前回で func ToFixedHeader(bs []byte) FixedHeader という関数を実装しました。この関数の引数のチェックとエラーハンドリングからやります。Goにおけるエラーハンドリングを学んでいきたいと思います。 目次。 error CONNECTパケットの可変ヘッダー Goのエ…
前回、固定ヘッダーを表すstructの実装に着手しました。 // fixed_header.go package packet type FixedHeader { PacketType byte } func ToFixedHeader(bs []byte) FixedHeader { b := bs[0] packetType := b >> 4 return FixedHeader{packetType} } ここか…
2018年はGoとMQTTデビューをしたので、学んだことの振り返りも兼ねて、GoでMQTTサーバーを実装してみます、という日記です。 使用するGoのバージョンは1.10.7です。 MQTTとは以下のようばPubSubを実現するプロトコルです。詳細は実装しながら確認していきま…
VS CodeにGoのプラグインを追加するとテストの実行を支援してくれる機能が色々入ります。カーソルがあたってるテストケースを実行したり、テストファイルとテスト対象ファイルを切り替えたり。例えば、コマンドパレットで Go Test Function At Cursor という…
ISUCON8の予選に @hanhan1978, @trtraki とyokohama-northというチームで参加しましたが、最終スコア30824で敗退しました。無念。。 以前と同様のメンバーでしたが、今回は役回りを変更。過去に参加した時はいつもDB等ミドルウェア・OS周りをやってたけど、…
Goでechoサーバーを書いた時のシステムコールはどうなってるのかなぁ、と思って調べてみた時の日記です。 前にCでechoサーバーを書いた時は以下のような実装をしました。 socket でソケットを作成する bind でソケットをバインドする listen でListen状態に…
書き出したら長くなってしまい4回分になってしまった日記です。 ReactとGoogle Sign-In ReactRouterを使ってGoogleログイン前と後で画面を変える ReactRouterを使ってGoogleログイン前と後で画面を変える(続き) 今日は、Google SignInでログインした後、自…
前回、前々回に引き続き、Google Sign-In をReactなSPAで使った時の日記です。 今回は、前回できなかった /login と /private のルーティングを実装する。 /login ログイン前: ログインページを表示 => ログインに成功すると / へ遷移 ログイン後: / へ遷移 …
前回に引き続きGoogle Sign-In をReactなSPAで使ってみた時の日記、2日目です。 今回はReactRouterを使って、ログイン前と後で画面を変えてみます。 ReactRouterを導入 ReactRouterを使う。バージョンは 4.2.2 。 $ npm install --save-prod react-router-do…
Google Sign-In をReactなSPAで使った時の日記です。 サーバーとの連携やセッションの管理について少し悩んだのでメモっておきます。ちょっと長くなりそうなので何回かに分けます。 Google Sign-In Google Sign-Inと言っているのはこれのこと。 developers.g…
Java アドベントカレンダー 2017 5日目の記事です。 以前書いた記事のJMockit のバージョンが古くていつか更新したいなぁと思っていたので更新しました! blog.bati11.info この記事は、JUnit実践入門のMockitoについて説明してる部分をJMockitでやってみま…
地元の勉強会のための準備です。 yokohama-north.connpass.com 前提 $ node -v v8.2.1 $ npm -v 5.3.0 準備。 $ npm init MobX インストールします。 $ npm i mobx -D MobXを使ったストアのサンプル。このチュートリアル分かりやすいです。 MobX: Ten minute…
前回、前々回の続き。 echoサーバーを書いてみたときのメモ その1 ソケットAPIとTCP echoサーバーを書いてみたときのメモ その2 なぜ複数クライアントを捌けないのか 複数クライアントを同時に捌くために以下の方法で対応してみる。 ブロッキングI/Oのまま。…
前回、echoサーバーを書いてみた。その続き。 echoサーバーを書いてみたときのメモ その1 ソケットAPIとTCP - bati11 の 日記 このechoサーバーだと同時に複数のクライアントを捌けない。どうしてか?実際に試して見る。クライアントから2回telnetでつないで…
echoサーバーを書いた日の日記。 Head First C の11章を参考に、クライアントから文字列を受け取り、受け取った文字列をそのままクライアントへ返すechoサーバーを作る。echo サーバーは30000ポートを使用することにする。途中疑問に思ったところは主にUNIX…
プログラミング言語作成ハンズオンに参加してきました。楽しかったです! プログラミング言語を作成したことがないので、こういう勉強会で教えてもらえるのはすごくありがたいです。 connpass.com 午前中はざっとプログラミング言語処理系についての説明。そ…