ドットで線を描く

「2Dグラフィックスのしくみ」という本が面白かったです。メモリのデータはどのように画面に表示されるのかという話がわかりやすく書いてあります。2次元に並んだピクセル上に直線や円を表示したりベジェ曲線を描いたり、画像を加工したりペイントツールの仕…

WebAssemblyを触りたかったのでCASL2 Playgroundの実装で使ってみた

以前このブログでも紹介したWebブラウザでCASL2を動かすCASL2 Playgoundですが、バイトコードインタプリタの実装をTypeScriptからC++へ移植しWebAssemblyでJavaScriptから使うように実装してみました、という日記です。 github.com 実装してみた理由は、ただ…

Intel MacのUbuntu上でAndroid OSをビルドした

AOSP (Android Open Source Project) のCodelabがあるのでチャレンジしてみた日記です。 AndroidのBluetoothまわりを調べていてOSレイヤーの実装をいじってみたくなり、Android OSをビルドできる環境がないものかと考えてました。ビルド環境に求められる要件…

CASL2 Playgroundの実装ちょっと変えた

以前、WebブラウザでCASL2を動かすCASL2 Playgoundを実装しました。 github.com その時の日記に書いていたのですが、作り変えたい部分があったので作り変えました、という日記です。 変更前 アセンブラとして機械語を生成する処理と、Commet2上で動きをシミ…

AndroidでgRPCクライアント

AndroidでgRPCクライアントの実装をしようと思ってチュートリアル読んだけど、すっと分からなかったのでメモ。まずは、Goで簡単なgRPCサーバーとクライアントを実装、その後クライアントをAndrodアプリとして実装する、というのをやってみました。 実装して…

確率木って便利ですよね・・・?

この記事は統計学 Advent Calendar 2022 24日目の記事です! 確率木というのを Head First Statistics という本で知りました。 条件付き確率とベイズの定理について確率木を使うとすごく分かりやすいなぁと思ったのですが、この本以外では見かけたことがなく…

苦戦しながら統計検定2級に合格した

統計検定2級に合格したのだけど、ググると出てくるような「合格する方法!」のようにはいかず大変でした、という日記です。 きっかけ 統計学をちゃんと勉強したことがなく苦手意識がとても強かったのです。過去に簡単そうな書籍を読んだことはありましたが、…

WebブラウザでCASL2を試せるCASL2 Playgroundをつくってみた

この記事は個人開発 Advent Calendar 2021の7日目の記事です! CASL2とは基本情報技術者試験のために策定されたアセンブラ言語です!そのCASL2をWebブラウザ上で書いて実行できるWebサービスをつくりましたという日記です。 github.com なぜつくったのか? …

コーチングを受けてみた

元同僚と話していたら、いつのまにか(セミプロ?)コーチになっていたのでコーチングしてもらいました!という日記です。 急だったにも関わらずやってくれて @katsutomu に感謝です! 初めての経験だったのでどんな感じなんだろ?という気持ちで受けたので…

SICPを読み始めた

SICPを何年か前に読んでいたのですが、途中まで読んでそのまま積ん読になってました。そのことをふと思い出したのでまた読み始めております。読みながらコード書く時の環境についての日記です。 SICPとは計算機プログラムの構造と解釈という本の略称。 ja.wi…

Android Gradle Pluginを4.0.0から4.0.1へアップデート ( Android11 の Package visibility )

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の一部の問題は、本だと解説されてたりします。 プログラミングコンテスト攻略のためのアルゴリズムとデータ構造作者:渡部 有隆マイナ…

記念日を忘れないためのAndroidアプリをつくった

以前、記念日を忘れないためのWebアプリを作りました。 bati11blog.hatenablog.com しかし、致命的な弱点がありました。それはオンラインじゃないと動かないということです。つまり、飛行機で上空にいるタイミングで「もう少しで結婚記念日だわね〜」みたい…

GAE Go1.11 のdev_appserver.pyでホットリロードが効かないとき

Go

GAE Go1.11 の dev_appserver.py でホットリロードが効かないなーというとき、dev_appserver.py実行時に以下のメッセージが出力されてました。最後の1行が出力されているとホットリロードが効きません。 $ dev_appserver.py dev.yaml INFO 2019-09-22 10:30:…

SQLアンチパターン・ジェイウォークのクエリをシェルでやる

SQLアンチパターンという本があります。 その本の1章がジェイウォーク(信号無視)。ジェイウォークで紹介されているようなデータがtsvファイルとして手元にある場合に、SQLではなくシェルでなんとかするお話です。 ジェイウォーク tsvファイル SQL vs シェ…

MQTTサーバーを実装しながらGoを学ぶ - その12 Contextを使ったgoroutineの停止

前回、別goroutineで発生したエラーハンドリングをしました。具体的にはサブスクライバへの書き込みでエラーが発生した場合にサブスクリプションの削除処理するようにしました。今回は、 context.Context を使ってgoroutineを停止することで、クライアントが…

MQTTサーバーを実装しながらGoを学ぶ - その11 goroutineのエラーハンドリング, map, goroutineセーフ

前回の続き。別のgoroutineで発生したエラーをerror channelを使ってハンドリングしてみたいと思います。ハンドリングの処理でmapを使ったのですが、goroutineセーフにするため sync.Map を使ってみました。 目次。 handleSub でエラー 別goroutineを受け取…

MQTTサーバーを実装しながらGoを学ぶ - その10 type, "chan<-"と"<-chan"

前回、goroutine, channel, selectを使って Broker を実装しました。この Broker をサーバーで利用し、MQTTでメッセージを配送してみます。 その前に <-chan chan<- []byte という型が読みづらいので type を使って対応します。その後、読み書き可能なchanne…

MQTTサーバーを実装しながらGoを学ぶ - その9 channelとselect

前回はgoroutineを使って、複数クライアントと同時に接続できるようにしました。今回は、複数のgoroutine間をchannelをつないでメッセージやりとりし、Publishされたメッセージを別のSubscribeしているクライアントに配送します。channelの所有権やselectを…

MQTTサーバーを実装しながらGoを学ぶ - その8 goroutine, pprof

前回までで、クライアントがPUBLISH、またはSUBSCRIBEすることができるようになりました。次は、クライアントからPUBLISHされたメッセージを、SUBSCRIBEしている別のクライアントへ送る処理を実装していきます。が、その前にgoroutineを使ってサーバーが複数…

MQTTサーバーを実装しながらGoを学ぶ - その7 type switch, interface再考, プライベートな関数のテスト

前回で、クライアントからのPUBLISHを受け取るところまで実装できました。今回はSUBSCRIBEを受け取るところを実装します。いつも引用してる図で言うと、右側の「Computer」や「Mobile device」からMQTT Brokerへの通信です。 引用元:https://www.appcelerat…

MQTTサーバーを実装しながらGoを学ぶ - その6 const, iota

前回の続きです。handlerのエラーハンドリングからやります。その後、mosquitto_clientからPUBLISHパケットを自作サーバーで受け取れるようにしました。最後にhandlerのリファクタリングで Untyped constant declaration というconstの便利な使い方を知りま…

MQTTサーバーを実装しながらGoを学ぶ - その5 net, io, bufioパッケージ

前回の続きです。前回までで一応 CONNECTパケットをstructに変換する処理ができました。これでクライアントからのCONNECTパケットをサーバー側で解釈できます。 今回は、CONNECTに対するレスポンスであるCONNACKに取り掛かります。また、実際にサーバーとし…

MQTTサーバーを実装しながらGoを学ぶ - その4 テストカバレッジ

前回の続きです。 今回は、MQTTのCONNECTパケットのペイロードから。ペイロードをbinaryパッケージを使って実装します。その後、regexパッケージを使って入力チェック処理を書いてテストします。Goではテストカバレッジが簡単に取得できるようだったので、試…

MQTTサーバーを実装しながらGoを学ぶ - その3 errorとエラーハンドリング

前回で func ToFixedHeader(bs []byte) FixedHeader という関数を実装しました。この関数の引数のチェックとエラーハンドリングからやります。Goにおけるエラーハンドリングを学んでいきたいと思います。 目次。 error CONNECTパケットの可変ヘッダー Goのエ…

MQTTサーバーを実装しながらGoを学ぶ - その2 go vet, gofmt, go doc

前回、固定ヘッダーを表すstructの実装に着手しました。 // fixed_header.go package packet type FixedHeader { PacketType byte } func ToFixedHeader(bs []byte) FixedHeader { b := bs[0] packetType := b >> 4 return FixedHeader{packetType} } ここか…

MQTTサーバーを実装しながらGoを学ぶ - その1 Table Driven Test

2018年はGoとMQTTデビューをしたので、学んだことの振り返りも兼ねて、GoでMQTTサーバーを実装してみます、という日記です。 使用するGoのバージョンは1.10.7です。 MQTTとは以下のようばPubSubを実現するプロトコルです。詳細は実装しながら確認していきま…

Visual Studio Codeのコマンドをvscodevimでキーバインドする

VS CodeにGoのプラグインを追加するとテストの実行を支援してくれる機能が色々入ります。カーソルがあたってるテストケースを実行したり、テストファイルとテスト対象ファイルを切り替えたり。例えば、コマンドパレットで Go Test Function At Cursor という…

ISUCON8予選で敗退しました...

ISUCON8の予選に @hanhan1978, @trtraki とyokohama-northというチームで参加しましたが、最終スコア30824で敗退しました。無念。。 以前と同様のメンバーでしたが、今回は役回りを変更。過去に参加した時はいつもDB等ミドルウェア・OS周りをやってたけど、…

Goでechoサーバーを書いた時のメモ

Go

Goでechoサーバーを書いた時のシステムコールはどうなってるのかなぁ、と思って調べてみた時の日記です。 前にCでechoサーバーを書いた時は以下のような実装をしました。 socket でソケットを作成する bind でソケットをバインドする listen でListen状態に…