2021-01-01から1年間の記事一覧
I made a Japanese-English dictionary for Kindle from WordNet, Wiktionary, and EDict2. You can download the data for free. This post describes how I made it. Because the main users are supposed to be English speakers, I write this article in…
KZ ZASというヘッドホン(イヤホン)を買って良かったという話。KZ ZS10 proを買ったという話を以前に書いたが、同じメーカの最新製品である。
WordNetとWiktionaryを統合した辞書を作って、それからKindle用の辞書を生成している。その際には、WordNet由来の語義とWiktionaryの語義の両方を掲載すると長くなりすぎるので、WordNetの語義があればそれを使い、そうでない場合にのみWiktionaryの語義を使…
「だらしない」って英語でなんて言えばいいかわかるだろうか。文脈に応じた適切な語を選択するには、辞書になるべく多くの訳語を収録しておく必要がある。そこで、WordNetをWiktionaryの統合英語辞書に、フリーの和英辞書EDict2をさらに統合してカバレッジを…
WordNetとWikitionaryから生成して熟語検索もできる自作の英和辞書をKindleの実機(Paperwhite)に入れて快適に使っているが、同じものをAndroidやPC(Mac)でも使う方法をメモする。もちろん、私の辞書でなくても任意のカスタム辞書を利用することができる。
フリー英和辞書検索システムとそのKindle用辞書データにて、熟語の訳語を表示できるようにした話。英文読解をする上で熟語の理解は必須なので、その支援ができることは重要だ。しかし、熟語を選択して検索するのは難しい。そこで、中心となる単語を調べると…
天気が良かったので、都心部のサイクリングに出かけてみた。ついでに、空を写そうということで、オリンパスの魚眼ボディキャップレンズBCL0980だけで各所を撮るという趣向にしてみた。
Kindle用の英和辞書を自動生成するにあたり、形容動詞の訳語の表現方法をちょっと改良したという話。辞書データはこちらからダウンロードできるので、興味があれば使ってみてほしい。
Kindleの実機(無印、Paperwhite、Oasis、Voyage等)で使えるオープンな英和辞書を作ってみた。以前の記事で紹介したEPUB辞書をKindleのmobiフォーマットに変換したものである。データソースにはWordNetやWiktionaryなどのオープンに使えるものを使っている…
以前の記事で述べたように、Tkrzw-RPCのサービスはメッセージキューとしても用いることができる。それをさらに進展させて、任意のレコードの状態変化をリアルタイムに監視して処理できる仕組みを、CompareExchangeメソッドを使って実装した。
Go言語でスライスや文字列をよく使うが、コード上ではアドレスが巧みに隠蔽されて、安全なプログラミングができるようになっている。しかし、たまに、アドレスを使ってユニーク性を調べたいときがある。その方法についてメモする。
gRPCの通信ををSSL/TLSの暗号化で保護するとともに、クライアント認証をX.509証明書で行えるように、Tkrzw-RPCのサーバとクライアントライブラリを改良した。gRPCではSSL/TLSだけでなく、ALTSやToken-based認証も使えるのだが、まずは手軽かつ歴史のあるなSS…
データベースライブラリTkrzwのgRPCサービスにJavaで接続して操作するためのライブラリを実装した。これにて、当初予定していたC++、Java、Python、Ruby、Goの全てを網羅したので、gRPCのクライアントライブラリを書きまくる旅は終了だ。この記事では、簡単…
gRPCのJava版のチュートリアルには、Gradleを使ったビルド方法だけが説明されている。Java界隈ではMavenやGradleがビルドツールとしてよく使われているのは知っているが、私はmakeが使いたい。よって、まずはビルドツールを使わずに個々の手順を進める方法を…
前回の記事で、メッセージキューを実現するための要素技術について論じた。今回は、それを実際にTkrzw-RPCのサーバに組み込んで、分散処理を行うデモを紹介する。Go、Python、Rubyが一気に出てくるお得な記事だ。
単純なkey-valueストレージであるDBMを使ってメッセージキューを実現するにはどうすればよいかという思考実験をした上で、実装もしてしまおうという企画。初回は、機能要件と要素技術を検討する。
Tkrzw-RPCのクライアントがC++、Python、Ruby、Goで出揃ったので、簡単な性能テストをしてみた。以下は1スレッドのスループットをグラフにしたものだ。単位はQPS。
PythonとRubyのクライアントライブラリを書いたので、次はGoだ。gRPC界隈ではGoがよく使われるようなので、優先度高めで着手した。詳しいことはAPI文書をご覧いただきたいが、簡単な使い方をここでも紹介する。
TkrzwのFedora用のパッケージを作ってくれている人から不具合報告を貰っていた。その不具合はPowerPC 64ビットの特定の環境でしか起こらないらしい。その不具合が手元で再現できないので、何が問題なのかもわからず、しばらく直せないでいた。その原因をやっ…
前回の記事でPythonのクライアントライブラリを紹介したが、Rubyのクライアントライブラリも実装できたので、今回はそれを紹介する。詳しいことはAPI文書をご覧いただきたい。
DBサービスを作ろうの一連の連載が終了し、無事DBサービスが完成したので、クライアントライブラリを作る旅に出ている。とりあえずPython版ができたので、使い勝手などを説明したい。Tkrzw-RPC本体については、スライドの方をご覧頂きたい。
データベースサーバの非同期レプリケーション機能を実装したが、そのプロトコルと実装の詳細について述べつつ、妥当性について検証しよう。非常に細かくて重箱をつつく話になるが、神は委細に宿るとも言うし、ないがしろにできないことばかりだ。
ついに、データベースサーバTkrzw-RPCに非同期レプリケーション機能がついた。マスタ・スレーブ構成だけでなく、デュアルマスタ構成もサポートして、オンラインシステムのバックエンドとして利用できる高可用性を備えたシステムになった。Tkrzw-RPC-0.9.0か…
Tkrzw-RPCのレプリケーション機能を実現するために、Tkrzw本体に更新ログ機能をつけた。更新ログ機能は任意のコールバックを呼び出す実装になっていて、それにメッセージキューを接続すると、マルチリーダで任意の後処理ができるようになる。今回は、メッセ…
前回の記事で、レプリケーション機能の実装を見越して、データベースの更新ログ機能を設計した。実装を進めながら思ったのは、データベースに更新があった旨をログとして記録して、またそれを外部に通知するという動作は、メッセージキューと同じ要件を持つ…
データベースの堅牢性を高めるために、データベース本体とは別に更新内容を保存する、更新ログという手法がある。さらに、更新ログを逐次別サーバに転送して適用すれば、レプリケーションが成立する。この記事では、レプリケーションにも使える更新ログの要…
シャーディングによってデータベースを分割することで、通常運用の並列処理性能を向上させることができる。それだけでなく、バックアップ作成などの、他のスレッドをブロックさせうる操作の影響を最小限に留めることができる。その運用方法について説明する。
GCCの不可解な挙動に悩まされている。以下のコードは、負数を出力しないことが期待されるが、-O2以上の最適化をすると負数が出力されてしまう。 #include <cstdint> #include <cstdio> int main(int argc, char** argv) { constexpr uint32_t modulo = 2039; for (int32_t i =</cstdio></cstdint>…
前回の記事にて、バッチ化とストリーム化によってgRPCの性能が向上することを示した。残る高速化の手段は、非同期APIを利用することである。結論としては、サーバ側では非同期APIを利用すると性能がかなり向上する。これを実装したTkrzw-RPC 0.7.1をリリース…
前回の記事で述べた性能評価によって、gRPCによる操作が同一マシン上なら2万QPSのスループットで実行できることが分かった。これはデータベース自体の性能に比べると遅すぎるので、より高いスループットが出せるようにgRPCの使い方を工夫したくなる。今回は…