シェルスクリプトでsprintfのようなことをする

僕はシェルスクリプトを触ったことがほぼないのですが、C言語でいうsprintfのようなことをしたくて手間取ったのでメモです。シェルはbashです。シェルスクリプトでprintfのようなことをするにはprintfコマンドを使って下記のようにします。 value=1 printf "…

Objective-Cで文字列をUTF-16に変換→復元すると文字化けする

iPhoneアプリを作っているときに、文字列をUTF-16に変換してから復元すると文字化けするという困った現象にぶちあたりました。下記のコードを実行します。 NSString *str = @"はろーわーるど"; // UTF-16のchar配列を取得 const char *chars = [str cStringU…

Single Property Indexを作らないとComposite Indexも作成されない?

昨日行われたappengine ja night #9で話題になった次の二つについて試してみました。 プロパティa、bに対してSingle Property Indexは作らずにComposite Indexだけを作った場合、a=1、b=2、c=3のようなフィルタを使えばComposite Index + ZigZag Scanを試せ…

App Engine上で順位・平均・中央値等を計算するライブラリを作る

先日のエントリー「Google App Engineでランキングやページングを実現する」にたくさんのブックマークをいただきありがとうございます。まさかここまで盛り上がると思っていなかったので驚いています。前のエントリーでSkip ListではなくB-treeによる実装に…

Google App Engineでランキングやページングを実現する

昨日一昨日、Google App Engine (GAE)に関する日本最大の勉強会(だと思う)appengine ja night #7 (ajn7)が行われました。その中で『ランキング問題』が話題に上がりました。『ランキング問題』とは、何十万件もの点数のデータがあるときに、App Engine上で…

Indexable B-treeを作る

新幹線で東京に移動している間に前の記事、Google App Engineでランキングやページングを実現するに信じられないくらいのブックマークがついていてびっくりしているのですが、新幹線の中でぼーっと考えているとより高速なランキングを作る方法に気付きました…

DatastoreMapのソースをGitHubにアップする

タイトル通り、DatastoreMap(やMemcacheMap、DatastoreOutputStream等)のソースをGitHubにアップしました。GitHub初めてでよくわかってないけど、これでいいのかな?GitHub - koher/Koherent-App-Engine-Library-for-Java: Koherent App Engine Library is…

Google App Engine用に作ったDatastoreMapを高速化する

以前に、Google App Engine for Java(以下GAE/J)のデータストアにHashMapのような感覚で書き込む(または読み込む)ためのDatastoreMapというクラスを作成しましたが、より現実的な利用を考えて高速化を行いました。java.util.Mapのメソッドを仕様に忠実に…

Google App Engine上にFileOutputStreamを実装する

Google App Engine for Java(以下GAE/J)で、FileOutputStreamのような感覚でデータストアに書き込むためのOutputStreamを実装しました。 背景 GAE上ではFileOutputStreamを始めとしたファイル書き込みのためのクラスを利用することができません。代わりに…

Google App EngineのDatastoreをMapでラップする

Google App Engine for Javaで、ちょっとしたデータを永続化するためだけにDatastoreを触るのは面倒です。そこで、Datastoreをjava.util.Mapでラッピングしたクラスを作ってみました。(もうすでに誰かが作ってそうなにおいがぷんぷんするんですが軽く調べて…

近況

箇条書きですが・・・。 大学院復学(?)の凍結 はてなのアルバイト応募の凍結 システム開発の請負(この前はASでPapervision3D) AR(拡張現実感)関連のプロジェクトに参画予定 2010年中に複数のWebアプリを企画・開発して収益化を目指す 東京に戻る予定 …

Google中国撤退(?)関連記事

昨日から追っかけてましたが、せっかくなので並べてみます。「」の中はてきとーなので元記事をご参照下さい。 事の発端となったGoogleの発表の日本語訳 Google「中国の検閲はもう許さん。場合によっては中国から撤退する!」 中国に対するあたらしい姿勢 そ…

Pure-Perl RDBMSのKoherent::DBを公開しました

http://www.koherent.org/db/にてモジュールを公開しています。インストール方法などはリンク先から。Perlの練習用に作った上にまだα版でテストも全然できていないのでバグだらけだと思いますが・・・。

改名します(PerlShell→Koherent::DB)

PerlShellですが、もろもろの事情でKoherent::DBに名前を変更します。あとはデッドロックの対処とPODを書けば公開できそうです。

重力ブロック崩しとオセロ

はてなのアルバイト応募用に過去に作った作品を探してたんですが、公開できそうだったものを二つ公開しました。 balls - 重力ブロック崩し 重力や空気抵抗などが存在するブロック崩しです。重力、空気抵抗、衝突の撃力などを運動方程式に入れて得られた加速…

追記型MVCCで機能するB-treeによるインデックス

PerlShellKoherent::DBのインデックスがとりあえず機能するようになりました。最初実装していた手法が正しく動作しないことに、かなり実装が進んでから気付いたのでずいぶん時間がかかってしまいました。単純なB-treeなら実装が簡単ですが、どうやって追記型…

実装状況報告: Standaloneモードでの動作確認とトランザクションのサポート

このところ実装に注力してブログの更新が滞ってしまっていましたが、PerlShellKoherent::DBがとりあえず動くようにはなりました。当初の予定に加えて次の機能を実装することにしました。 StandaloneモードとClient/Serverモードの両立 追記型MVCCによるトラ…

limitメソッドとLimitedViewクラスの実装

limitメソッドは、SQLのLIMITやOFFSET*1相当の機能を実現するためのメソッドです。今回は、limitメソッドとそれを実現するLimitedViewクラスの実装について書きます。 例で使用するテーブル これまで同様、次のようなテーブルがあるものとして話を進めます。…

恒常的なディスクアクセスへの対処

最近、PCを起動しているだけでも絶え間なくディスクアクセスが行われており気になっていました(Windows XP SP3での話です)。調べてみたところ、JQS(Java Quick Starter)が原因のようだとわかりました。 JQSの停止方法(Windows XP、Windows 2000) まずはJ…

ROLLBACK TO (SAVEPOINT)をどう実装するか

これまで書いてきた記事は実装のほぼ固まったものについて解説する形のものが多かったですが、それらとは区別し、現在検討中のことについて検討事項のカテゴリーで書きたいと思います。今回は、ROLLBACK TO(およびSAVEPOINT)の実装について書きます。なお…

方針変更について

PerlShellKoherent::DBの作成についての方針を一部変更します。Pure PerlのRDBMSを作るで、次のように書きました。 10月上〜中旬くらいまでにある程度形にする。 まずはMyISAMのような、トランザクションなし、テーブルロックで動作するものを作る。 これら…

order_byメソッドとOrderedViewクラスの実装

実装の楽なlimitメソッドから書こうかと思いましたが、order_byメソッドなくしてlimitメソッドは使い物にならないので、先にorder_byメソッドの実装について書きます。order_byメソッドではSQLのORDER BYのように検索結果をソートして取得するためのメソッド…

whereメソッドとConditionedViewクラスの実装

友人の結婚式に出るために関西に帰ったり、Module::Starterを触ったり、PostgreSQLのトランザクションの実装を調べたりしている間にずいぶん間が空いてしまいました。さて、前回までにSELECT/INSERT/UPDATE/DELETE、つまりCRUDのためのAPIを一通り考えた*1の…

UPDATE、DELETE、INSERTのAPI

これまでは参照(SELECT)のためのAPIを考えてきましたが、次に更新(UPDATE)、削除(DELETE)、挿入(INSERT)のAPIを考えたいと思います。なお、GROUP BYに当たる検索方法を検討していませんが、これらはプログラム上で実現できるうえに実装が大変そうな…

SELECTのAPI(4) インデックスの利用

SELECTのAPI(2) 様々なSELECT文への対応で述べた検索ではインデックスを活用した検索を実現できません。ここではインデックスを用いた検索のAPIを考えます。 例で使用するテーブル これまで同様、次のようなテーブルがあるものとして話を進めます。 members:…

SELECTのAPI(3) イテレータによるデータアクセス

これまで、テーブルからのデータの読み出しそのものに関しては触れませんでした。ここでは、どのようにテーブルからデータを読み出すかについて考えます。テーブルから数百万件というような大量のデータを読み出す場合、すべてのデータをメモリ上に読み込ん…

SELECTのAPI(2) 様々なSELECT文への対応

パッケージ越しにソートサブルーチンを渡してもうまく動作しないようなので、ORDER BYでは通常のサブルーチンを渡すように変更しました。 (参考)パッケージ越しのソートサブルーチンがうまく働かない - $koherent->diary (2009.09.21) APIを考えるにあたっ…

パッケージ越しのソートサブルーチンがうまく働かない

Perlのソートサブルーチン(ソート定義サブルーチン)が次の「Case C: パッケージ越しのソートサブルーチンの利用」でうまく働いてくれません。 ソース #!/usr/bin/perl use strict; my $by_num = sub{ $a <=> $b; }; #####################################…

SELECTのAPI(1) 概要

SQLと言えばまずはSELECT文です。ということで、最初にSELECT文相当の検索用APIを考えたいと思います。 例で使うテーブル 以下、次のようなテーブルがあるものとして話を進めます。 members: メンバーを格納したテーブル。 member_id family_name first_name…

実装の方針

併せて、方針変更についてもご覧下さい。 (2009-10-16) RDBMSの実装においては、次のような要素がキーになると思います。 インデックス キャッシュ トランザクションと同時実行制御 テーブルやビューの結合 SQLやAPI 実行計画とオプティマイザ これらについ…