豪鬼メモ

MT車練習中

2021-01-01から1年間の記事一覧

Open-source Japanese-English Dictionary for Kindle

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 ZASというヘッドホン(イヤホン)を買って良かったという話。KZ ZS10 proを買ったという話を以前に書いたが、同じメーカの最新製品である。

Kindle辞書における掲載語義選定の改善

WordNetとWiktionaryを統合した辞書を作って、それからKindle用の辞書を生成している。その際には、WordNet由来の語義とWiktionaryの語義の両方を掲載すると長くなりすぎるので、WordNetの語義があればそれを使い、そうでない場合にのみWiktionaryの語義を使…

和英辞書EDict2の統合

「だらしない」って英語でなんて言えばいいかわかるだろうか。文脈に応じた適切な語を選択するには、辞書になるべく多くの訳語を収録しておく必要がある。そこで、WordNetをWiktionaryの統合英語辞書に、フリーの和英辞書EDict2をさらに統合してカバレッジを…

Kindle for Mac/PC/Androidの英和辞書を入れ替える方法

WordNetとWikitionaryから生成して熟語検索もできる自作の英和辞書をKindleの実機(Paperwhite)に入れて快適に使っているが、同じものをAndroidやPC(Mac)でも使う方法をメモする。もちろん、私の辞書でなくても任意のカスタム辞書を利用することができる。

英熟語とKindle辞書

フリー英和辞書検索システムとそのKindle用辞書データにて、熟語の訳語を表示できるようにした話。英文読解をする上で熟語の理解は必須なので、その支援ができることは重要だ。しかし、熟語を選択して検索するのは難しい。そこで、中心となる単語を調べると…

東京サイクリングと魚眼レンズ

天気が良かったので、都心部のサイクリングに出かけてみた。ついでに、空を写そうということで、オリンパスの魚眼ボディキャップレンズBCL0980だけで各所を撮るという趣向にしてみた。

中華なイパネマ vs 中華のイパネマ

Kindle用の英和辞書を自動生成するにあたり、形容動詞の訳語の表現方法をちょっと改良したという話。辞書データはこちらからダウンロードできるので、興味があれば使ってみてほしい。

オープンなKindle用英和辞書

Kindleの実機(無印、Paperwhite、Oasis、Voyage等)で使えるオープンな英和辞書を作ってみた。以前の記事で紹介したEPUB辞書をKindleのmobiフォーマットに変換したものである。データソースにはWordNetやWiktionaryなどのオープンに使えるものを使っている…

DBMでメッセージキューイング その2 CompareExchangeとモニタリング

以前の記事で述べたように、Tkrzw-RPCのサービスはメッセージキューとしても用いることができる。それをさらに進展させて、任意のレコードの状態変化をリアルタイムに監視して処理できる仕組みを、CompareExchangeメソッドを使って実装した。

Go言語におけるスライスや文字列のアドレス検査と特異値

Go言語でスライスや文字列をよく使うが、コード上ではアドレスが巧みに隠蔽されて、安全なプログラミングができるようになっている。しかし、たまに、アドレスを使ってユニーク性を調べたいときがある。その方法についてメモする。

gRPCでのSSL暗号化と認証

gRPCの通信ををSSL/TLSの暗号化で保護するとともに、クライアント認証をX.509証明書で行えるように、Tkrzw-RPCのサーバとクライアントライブラリを改良した。gRPCではSSL/TLSだけでなく、ALTSやToken-based認証も使えるのだが、まずは手軽かつ歴史のあるなSS…

gRPCのJavaクライアントライブラリ

データベースライブラリTkrzwのgRPCサービスにJavaで接続して操作するためのライブラリを実装した。これにて、当初予定していたC++、Java、Python、Ruby、Goの全てを網羅したので、gRPCのクライアントライブラリを書きまくる旅は終了だ。この記事では、簡単…

gRPCのJava版のアプリケーションを手動またはmakeでビルドする方法

gRPCのJava版のチュートリアルには、Gradleを使ったビルド方法だけが説明されている。Java界隈ではMavenやGradleがビルドツールとしてよく使われているのは知っているが、私はmakeが使いたい。よって、まずはビルドツールを使わずに個々の手順を進める方法を…

DBMでメッセージキューイング その1 メッセージキューサービスの利用法

前回の記事で、メッセージキューを実現するための要素技術について論じた。今回は、それを実際にTkrzw-RPCのサーバに組み込んで、分散処理を行うデモを紹介する。Go、Python、Rubyが一気に出てくるお得な記事だ。

DBMでメッセージキューイング その0 準備

単純なkey-valueストレージであるDBMを使ってメッセージキューを実現するにはどうすればよいかという思考実験をした上で、実装もしてしまおうという企画。初回は、機能要件と要素技術を検討する。

gRPCクライアントの各言語の性能比較

Tkrzw-RPCのクライアントがC++、Python、Ruby、Goで出揃ったので、簡単な性能テストをしてみた。以下は1スレッドのスループットをグラフにしたものだ。単位はQPS。

Tkrzw-RPCのGoクライアントライブラリ

PythonとRubyのクライアントライブラリを書いたので、次はGoだ。gRPC界隈ではGoがよく使われるようなので、優先度高めで着手した。詳しいことはAPI文書をご覧いただきたいが、簡単な使い方をここでも紹介する。

Fedoraパッケージ対応とmmapに関する話

TkrzwのFedora用のパッケージを作ってくれている人から不具合報告を貰っていた。その不具合はPowerPC 64ビットの特定の環境でしか起こらないらしい。その不具合が手元で再現できないので、何が問題なのかもわからず、しばらく直せないでいた。その原因をやっ…

Tkrzw-RPCのRubyクライアントライブラリ

前回の記事でPythonのクライアントライブラリを紹介したが、Rubyのクライアントライブラリも実装できたので、今回はそれを紹介する。詳しいことはAPI文書をご覧いただきたい。

Tkrzw-RPCのPythonクライアントライブラリ

DBサービスを作ろうの一連の連載が終了し、無事DBサービスが完成したので、クライアントライブラリを作る旅に出ている。とりあえずPython版ができたので、使い勝手などを説明したい。Tkrzw-RPC本体については、スライドの方をご覧頂きたい。

DBサービスを作ろう その12 非同期レプリケーションのプロトコルと実装

データベースサーバの非同期レプリケーション機能を実装したが、そのプロトコルと実装の詳細について述べつつ、妥当性について検証しよう。非常に細かくて重箱をつつく話になるが、神は委細に宿るとも言うし、ないがしろにできないことばかりだ。

DBサービスを作ろう その11 非同期レプリケーション完成!

ついに、データベースサーバTkrzw-RPCに非同期レプリケーション機能がついた。マスタ・スレーブ構成だけでなく、デュアルマスタ構成もサポートして、オンラインシステムのバックエンドとして利用できる高可用性を備えたシステムになった。Tkrzw-RPC-0.9.0か…

DBサービスを作ろう その10 更新ログによるインクリメンタルバックアップ

Tkrzw-RPCのレプリケーション機能を実現するために、Tkrzw本体に更新ログ機能をつけた。更新ログ機能は任意のコールバックを呼び出す実装になっていて、それにメッセージキューを接続すると、マルチリーダで任意の後処理ができるようになる。今回は、メッセ…

DBサービスを作ろう その9 更新ログのメッセージキュー化

前回の記事で、レプリケーション機能の実装を見越して、データベースの更新ログ機能を設計した。実装を進めながら思ったのは、データベースに更新があった旨をログとして記録して、またそれを外部に通知するという動作は、メッセージキューと同じ要件を持つ…

DBサービスを作ろう その8 レプリケーションを踏まえた更新ログの要件

データベースの堅牢性を高めるために、データベース本体とは別に更新内容を保存する、更新ログという手法がある。さらに、更新ログを逐次別サーバに転送して適用すれば、レプリケーションが成立する。この記事では、レプリケーションにも使える更新ログの要…

DBサービスを作ろう その7 シャーディング最強説

シャーディングによってデータベースを分割することで、通常運用の並列処理性能を向上させることができる。それだけでなく、バックアップ作成などの、他のスレッドをブロックさせうる操作の影響を最小限に留めることができる。その運用方法について説明する。

キャストに関わるGCCの謎挙動

GCCの不可解な挙動に悩まされている。以下のコードは、負数を出力しないことが期待されるが、-O2以上の最適化をすると負数が出力されてしまう。 #include <cstdint> #include <cstdio> int main(int argc, char** argv) { constexpr uint32_t modulo = 2039; for (int32_t i =</cstdio></cstdint>…

DBサービスを作ろう その6 非同期化による性能向上

前回の記事にて、バッチ化とストリーム化によってgRPCの性能が向上することを示した。残る高速化の手段は、非同期APIを利用することである。結論としては、サーバ側では非同期APIを利用すると性能がかなり向上する。これを実装したTkrzw-RPC 0.7.1をリリース…

DBサービスを作ろう その5 バッチ化とストリーム化による性能向上

前回の記事で述べた性能評価によって、gRPCによる操作が同一マシン上なら2万QPSのスループットで実行できることが分かった。これはデータベース自体の性能に比べると遅すぎるので、より高いスループットが出せるようにgRPCの使い方を工夫したくなる。今回は…