ICFPC 2021 に参加しました

ICFPC 2021 にチーム「グレースたなか」として参加しました。 メンバーは cos, nojima, qwerty, seikichi の4人です。また、チームのリポジトリは https://github.com/seikichi/icfpc2021 にあります。 問題 今年の問題はポーズをうまく変形して穴をくぐると…

Clean Architecture では AP のデプロイをどう扱うべき?

インフラ的なコードを Clean Architecture を使って設計するとき、デプロイはどう扱ったらいいんだろうか? エンティティの永続化 デプロイについて考える前に、より馴染みのある「エンティティの永続化」について考える。 例えば、User というエンティティ…

ぷよぷよのプレイ動画を解析して棋譜を生成する

この記事は KMC アドベントカレンダー の 3 日目の記事です。 昨日は PrimeNumber さんの PEZY-SC/SC2を使った話 でした。 背景と問題 ぷよぷよの上達を阻む問題として「自分の手が良いのか悪いのかわからない」という問題があります。 ツモが毎回ランダムで…

NLL のおかげで Rust で平衡二分木を実装できた

Rust で平衡二分木を書くのは何となく難しいイメージがありました。 unsafe を使わずに実装できるものなのか気になったので、試しに実装してみました。 結論から言うと、unsafe を使わなくても平衡二分木は実装できました。また、unsafe だけでなく、Rc や R…

テストクラスを継承するとインターフェイスのテストが捗る

User オブジェクトの永続化を行う UserRepository というインターフェイスがあるとします。 また、それを実装した2つのクラス InMemoryUserRepository と MySqlUserRepository があるとします。 これらのクラスのテストはどのように書けばよいでしょうか? …

rust-protobuf で読み書きしてみる

rust-protobuf を使ってみる。 大まかな流れ protoc をインストールする cargo build 時に proto をコンパイルするようにする コンパイルによって生成された struct を使って読み書きする protoc をインストールする Ubuntu ならこんな感じ: sudo apt update…

Transactional Database を作りたい

セキュリティキャンプ2018のデータベースの講義に関するツイートがTLに流れてきたのを見て、自分もデータベース作ってみたいなぁと思ったので作り始めることにした。 データベースを作るのは初めてなので、まずは「トランザクションのあるデータベース」と言…

O'Reilly の Kafka 本を読みました

会社の同僚の @ueokande さんから Kafka 本を献本して頂きました。 大体読み終えたので紹介記事を書こうと思います。 https://www.amazon.co.jp/dp/4873118492 Kafka と私 私は2015年ぐらいから2017年ぐらいまで会社のログ基盤を整備する仕事をしていました…

ICFPC 2018 に参加しました

ICFPC 2018 にチーム「銀閣寺GOLD」として参加しました。 メンバーは以下の4人です。 cos nojima qwerty seikichi また、チームのリポジトリは https://github.com/seikichi/icfpc2018 にあります。 問題 今年の問題は小さなロボットたちを操って3Dプリンタ…

BCC/BPFでシステムコールとかをいい感じにトレースする

この記事は KMC Advent Calendar 2017 の7日目の記事です。 昨日の記事は id:dnek さんの Unityで漢字パズルアプリを作ったよ(Android/iOS) でした。 シンプルだけどこだわって作っている感じがしてすごくよいですね。 (自分の作ったゲームはゲーム性へのこ…

EncoderDecoder で日英翻訳をしてみた (その4)

前回は Attention 付きの EncoderDecoder モデルを紹介した。 今回は、モデルではなく、予測時のアルゴリズムを変えて精度向上を目指してみる。 前回までの翻訳アルゴリズム モデルがすでに得られているとする。 前回までは、このモデルを使って、翻訳元の文…

EncoderDecoder で日英翻訳をしてみた (その3)

前回からの続き。 Chainer を用いて、Attention つきの EncoderDecoder を実装する。 モデルの実装 まずはモデルのコンストラクタ。 前回と同じく、LSTM の実装には NStepLSTM を使った。 class EncoderDecoder(Chain): def __init__(self, input_dimension:…

EncoderDecoder で日英翻訳をしてみた (その2)

前回 は基本となる EncoderDecoder を紹介した。 この記事では、Attentionと呼ばれるテクニックを紹介する。 Attention EncoderDecoder では、Encoder から Decoder に渡されるのは、ひとつの固定長ベクトルだけだった。 入力系列がどんなに長かったとしても…

EncoderDecoder で日英翻訳をしてみた (その1)

『Chainer による実践深層学習』の8章を読みながら色々試してみた。 EncoderDecoder EncoderDecoder は、機械翻訳などの、系列が入力され系列が出力されるような問題を扱うモデル。 seq2seq とも呼ばれるらしい。 以下のような好ましい性質を備えている: …

Gmail の優先トレイの論文を読んだ

最近、会社のグループウェアの通知がやたらと多い。 人によっては全ての通知を見ているらしいんだけど、自分の場合は自分宛て通知はみるけど、それ以外の通知は一部しか読んでない。 どうせ一部しか読まないのであれば、できるだけ価値のある通知を読みたい…

git の pager を設定する

git grep や git log などのコマンドを実行したとき、デフォルトでは less がページャーとして使われる。 git log の場合はデフォルトの設定で特に困っていないが、git grep で出力が数行しかない場合にページャーが表示されるのはちょっと鬱陶しい。 git --…

Noise-contrastive estimation の雑なメモ

word2vec のモデルの説明で、以下の尤度関数の最大化を行いたいが、分母にある正規化項の計算が重すぎてこのままでは計算できないという話があった。 word2vec では、この尤度関数を直接最大化するのではなく、正例とノイズとを区別する2クラス分類問題の新…

Word2Vec メモ その2

昨日の記事の続き。 Word2Vec を Chainer で実装していく。 完全なコードは以下の URL にある。 workspace/learning-chainer/word2vec at master · nojima/workspace · GitHub model 誤差関数をネットワークとして表現すると下図のようになる。 普通のニュー…

Word2Vec のメモ その1

Chainer 本 を読みながら Word2Vec を Chainer で実装してみたので、その過程でわかったことをメモしておく。 注意: 素人なので完全に間違っているかもしれない。 Word2Vec Word2Vec の目的は、各単語の 分散表現 を求めること。 単語の分散表現とは、単語の…

ICFPC 2017 に参加した

C++

ICFPC 2017 にチーム「ゲームセンターYAGI」として参加しました。メンバーは以下の4人です。 cos nojima qwerty seikichi リポジトリは https://github.com/seikichi/icfpc2017 です。 今年の問題 無向グラフが与えられます。 このグラフの頂点は都市か鉱山…

Ubuntu 16.04 で pystan を動かす

MCMC サンプラー Stan を Python から呼び出すためのライブラリ pystan を使ってみようとしたら ABI 問題のせいでちょっと嵌ったのでここにメモしておく。 Anaconda3-4.3.0-Linux-x86_64 をインストールした。 そして pystan を pip でインストールした。 pi…

明日使えない Linux の capabilities の話

(この記事は KMC アドベントカレンダー 2016 の3日目の記事です) はじめに みなさん以下のようなことで困ったことはないでしょうか? ポート80を listen したいけど特権ポートなので、一般ユーザの権限で動くデーモンでは bind できない。 1024未満のポート…

Protocol Buffers が本当に遅いのか実際に確かめてみた

C++

Protocol Buffers で検索すると Protocol Buffersは遅い という MessagePack 作者による2008年の記事が未だに上位に来る。 一方で、Protocol Buffersは遅いのか という反論記事も見つかる。 一体遅いのか速いのかどっちなんだ!!ということで、ベンチマーク…

protocol buffer 3 をビルドしてインストール

C++

最近 version 3 が出た protobuf を試しに動かしてみたメモ。 導入手順 Releases から C++ のアーカイブをダウンロードしてきて展開する。(protobuf-cpp-3.0.0.tar.gz というやつ) 展開後のディレクトリに cd して、以下の手順でビルドする。 ./configure ma…

ICFPC 2016 に参加しました (チーム: モダン焼き フジ)

C++

ICFP Programming Contest にcosさん、qwertyさん、seikichiさんとチーム名「モダン焼き フジ」で参加しました。 チーム名は大学生のころによく行ったモダン焼き屋さんの名前から取りました。 最終結果はまだ公開されていないけど、Leaderboard が凍結された…

Kafka の勉強 (2日目)

昨日の記事に引き続き、Kafka の設計についてドキュメント を読んでいく。 4.3 Efficiency 4.2 節ではディスクの効率について議論した。 ディスクの効率以外で、この種のシステムでよくある非効率性は、次の2つだ。 小さな多数の I/O オペレーション 過剰な…

Kafka の勉強 (1日目)

Kafka のドキュメント を読みながらわかったことをメモしていく。 設計に興味があるので 4. Design から読む。 4.1 Motivation 以下のような性質を持つデータハンドリングプラットフォームが欲しい。 高いスループット 低いレイテンシ partitioned, distribu…

unique_ptr で今風な C++ コードを書こう!!

はじめに お久しぶりです。KMC OB の id:nojima です。 この記事は KMC Advent Calendar 2014 の10日目の記事です。 昨日は id:murata さんの「受験生応援!Javascriptでひねくれ数列」 でした。 今日は C++ の unique_ptr の話です。 (最初は rvalue につ…

ICFPC 2014 参戦記

C++

ICFP Programming Contest 2014 に @cos65535 さん, @qwerty__ さん, @seikichi さんとチームを組んで参加した。 レポジトリ: https://bitbucket.org/kmc-ob-icfpc-2014/icfpc2014 25日(金) 21:00 コンテスト開始。問題を読み始める。 パックマンみたいなゲ…

VirtualBoxにArch Linuxをインストールしたときのメモ

VirtualBoxにInstall media 2012.08.04 を使用してArch Linuxをインストールしたときのメモ.VMのディスクサイズは40GB,メモリは4GB.メモリサイズが1GB以上あるときはswap作らないほうがパフォーマンスがでるらしいのでswapなし.いつの間にかインストーラ…