読者です 読者をやめる 読者になる 読者になる

WebKitの「折り返し行末にきた文字をタグで囲むと分離禁止される」バグの修正に挑戦してみた

前回に続いて、WebKitのバグ修正に挑戦してみました。今回修正したのは、縦書きテキストレイアウトに関する調査支援者の公募にある折り返し行末にきた文字をタグで囲むと分離禁止されるというやつです。 下記の図が問題が生じている場合の表示ですが、黄色の…

WebKitの「下線がルビで分離される」バグを修正してみた

縦書きテキストレイアウトに関する調査支援者の公募にあるWebKitのバグを治すと10万円が貰える、というのに釣られてバグの修正に挑戦してみました。 挑戦してみたのは下線でルビが分離されるというやつです。コードのクォリティはアレな感じですが、とりあえ…

はてなブログのiPhoneアプリ

iPod touch 欲しい! id:hatenablog と書くとiPod touchが当たるというキャンペーン。 アプリをダウンロードしてiPod touchをもらおう! iPhoneアプリ「はてなブログ」をリリースしました キャンペーンはともかく、アプリの方は予想に反して良く出来ていてビ…

Wicketで継承を利用したページのテンプレートを手軽(?)にプレビュー可能にしてみた

Wicketのページテンプレートは、継承・パネル等を利用することにより、共通部分の再利用が簡単にできるのが便利です。ところが、継承を利用したページ(HTML)をプレビューする場合、継承元ページのCSS等は反映されないため、そのままでは表示結果が実際とは大…

リポジトリをOracle LinuxからCentOSに変更するスクリプトを作成してみた

元ネタはここで公開されている centos2ol.sh です。これはCentOS(及びRHEL, Scientific Linux)からOracle Linuxに乗り換えるために、スクリプトでリポジトリ設定を変更してしまうというもので、その強引な手法が面白かったので、ネタとしてその逆を行うス…

JavaのString.formatメソッドのJavaScript版を作成してみた

JavaのString.formatメソッドと同様の機能を持つ文字列フォーマット用ライブラリのJavaScript版を作成してみました。基本的にJavaと同じ動作になるようにしていますので、Javaに慣れていて他の書式を覚えるのが面倒な方にオススメです。format4js - Project …

MathMLを含むページを表示可能にする軽量のJavaScriptプログラムを作成してみた

MathMLに非対応のブラウザでも、MathMLを含むページを表示可能にする軽量のJavaScriptプログラムを作成してみました。MathMLは数式をXML形式で表現するため、数式を画像として用意する場合とは異なり、細かな修正やプログラムからの操作に便利です。数式を含…

Wicketで階層構造を扱う際にHTMLとJavaコードの構造を一致させる

Scala exercise 6: Tackling the Wicket hierarchy mismatch problemという記事に触発されて、同様の手法をJavaで再現してみました。Wicketでネストされたコンポーネントを扱う場合、HTMLテンプレートに比べてJava側は見通しが悪くなりがちだと思います。元…

Wicketのコンポーネント追加先指定にHTMLのID属性を利用可能にするライブラリを作成してみた

Wicketでコンポーネントを追加する場所を指定する場合、通常は該当するタグにwicket:idという属性を付与する必要があるのですが、代わりにHTMLのID(class)属性を利用可能とするライブラリを作成してみました。Wicketでコンポーネントを追加する場所を指定す…

iPad(のSafari)でフリック入力を実現してみた

前回作成したWebブラウザ上で動作する日本語ソフトウェアキーボードですが、結局フリック入力も出来るようにしてみました。今回も前回と同じくiPhoneやiPadでも動作します。まずはiPadでの画面 そしてこちらはiPhoneでの画面 実物を試してみたい方はこちらか…

Google 日本語入力 Cloud API を利用してiPadのSafariでも動作する日本語ソフトウェアキーボードを作ってみた

最近になってjQueryの使い方を覚えたので、忘れないうちに何かを作りたいなぁと思っていたところ、ちょうどGoogle CGI API for Japanese Inputというのが公開されたので、これを使ったソフトウェアキーボードを作ってみました。 実用性は低いですが、所要時…

Java (.javaファイル) のみで利用可能なDB用ライブラリを作ってみた

以前Wicketを使っていた際は、データベースの操作にHibernate(JPA)を利用していたのですが、今一つ気に入らない部分がありました。下記のような部分です。 設定をXMLファイルで書かないといけない。 テーブル定義とマッピング定義を分離できない。 カラム名…

XenのdomUを別のホストにssh経由で移動する

今回はdomUをネットワーク経由で別ホストにお引越しする方法のメモです。イメージファイルを利用している場合は単にファイルをコピーするだけですが、LVMを利用している場合は少しだけ面倒になります。Xenとしては共有ディスクを利用するのが正しい姿な気が…

domUが送受信するパケットのIPアドレスを制限する

前回に引き続きCentOS 5でのXenに関するネタです。今回実現したいのは、例えばdomUのIPアドレスが192.168.1.2だった場合、それ以外のIPを利用して送受信するのを防ぐことです。これはdomUのroot権限を持ったユーザが、IPアドレスを詐称して通信する場合など…

CentOS 5 (Xen)でdomUのVG名をdom0から変更する

virt-install でCentOS 5をテキストモードでインストールすると、LVMのVG名がVolGroup00に固定されてしまいます。VGが同じだと後で悲しい状況になることが多いので、インストール後に変更しておいた方が無難です。変更する方法はいくつかあると思うのですが…

Wicket 1.4-m3 で Generics の仕様変更

ちょうど少し前にWicket 1.4でのGenerics化にて大論争というページを教えてもらったのですが、その結論が見えてきたみたいです。 This release is our final take on how to apply generics to our codebase with restraint. We hope to provide an elegant …

URLのパス部分に%2Fを含む時の扱い

Web

お知り合いのページを見て初めて知ったのですが、Apacheは標準ではパス部分に %2F(/をエスケープしたもの) を含むURLに対して404を返すそうです。このままだと、最近流行り(?)の "/" でパラメータを区切る場合に、"/" 自体を値に含めることができません。そ…

自然言語で検索ってどうなんだろう?

グーグル先生を超える良回答連発、Powersetを使ってみたタイトルは「グーグル先生を超える良回答連発」なのですが、個別の検索結果をページレベルで見るとそれほど違わない感じです。Googleでは答えが見つけられなかった例として「MacBook AirってUSBポート…

int *n; *n = 5;

はてなブックマークとかで話題になっていたこのコード int main( void ) { int *n; *n = 5; printf( "%d\n", *n ); ... C/C++のポインタの機能--参照渡しのような処理 一見すると普通(?)のコードですが、初期化されていないnを使っているので危険ってやつで…

Wicket+SpringをJavaRebelでリロード可能にしてみた

JavaRebel 1.1M2 の変更点に Springでも動くようになったという記述を発見して、ちょうど良い機会だったので、前から気になっていた Wicket + Spring (wicket-spring-annot) な環境での問題に対処してみました。 Now you can develop Spring with JavaRebel …

RFC 4347 (DTLS) について調べてみた

AES-CTRの時に出てきたDTLSについて調べてみた。DTLSはRFC4347になっているようなので、それを読んでみた時の各章ごとのメモ(意訳?)です。RFC 4347 Datagram Transport Layer Security 1. Introduction TLSは広く普及しているけどTCPのような信頼性があるチ…

Bouncy CastleでOpenPGP鍵を操作する

Bouncy CastleのOpenPGP用ライブラリ(bcpg)を使ってOpenPGP鍵を操作する方法のメモです。以前の日記にsecring.gpgを読み込んで利用する方法がありますので、今回はそれ以外の操作が対象です。 PGPSecretKeyを生成する public PGPSecretKey generateSecretKey…

JCEでAES/CTRを試してみた

TLSの例を調べたついでにJCEで実装する方法を調べてみた。CTRモードを使う時の最大の問題はIVをどう扱うかということだったけれど、JCEのCipherではinit()時くらいしかIVの指定する方法がないような気がする。この場合、複数のブロックを暗号化する場合にIV…

AESのCTRモード(TLSとDTLS用)

AESのCTRモードはストリーム暗号が実現できたり、推奨されるモードに入っていたりする割にはCBCモードと違って情報が少ないのですが、IETFのドラフトにTLSの場合の話があったので、それを調べてみた時の各章ごとのメモです。AES Counter Mode Cipher Suites …

Wicket 1.3.1 が出てた

メーリングリストを見てたらWicket 1.3.1のアナウンスが流れてました。 修正点が結構たくさんあります。以前から1.3.1が出てからと言っていたので、そろそろ1.4も動き始めるのでしょうか?幻の2.0でのGenericsサポートはとても良い感じだったので、Generics…

暗号で使用できるビット数を調べる

Javaは標準では「強力ではあっても制限付きの暗号」という微妙な表現の暗号しか使うことができません。これはブロック暗号なら128ビットまで許可、といったビット数による輸出(輸入?)規制に合わせるために、使用可能なビット数を制限するという意味のようで…

はてなスターって自分の日記にも付けられるのか

この星って押すとどうなるんだろう?と思って何気なく押してみたら自分の日記に星が付いてしまった。何の機能か深く考えたことがなかったけど、調べてみたらこれってWeb拍手みたいなものだったようで。自分に星を付けれる仕様ってのはどうなんだろうと思わな…

JSR-82を使ってBluetoothデバイスを探索する

JavaでBluetoothデバイスを探索する方法のメモJavaとWiiリモコンをBluetoothでつなげてみようという記事に触発されて試してみました。といってもWiiリモコンをもっていないので、同じページで紹介されていたbluecoveを使ってみただけです。bluecoveはDLLを含…

UPnPを使ってルータの外向けIPアドレスを取得する

UPnPを使ってルータの外向けIPアドレスを取得する方法のメモルータのIPアドレスを取得するには、最初にネットワーク内のルータを見つけ出す必要があります。UPnPではSSDP(Simple Service Discovery Protocol)というプロトコルを利用してネットワーク内のデバ…

Wicketが生成するアドレスを今風(?)にする

Wicketが生成するアドレスは標準だとこんな感じで非常に見た目がよろしくないです。 http://localhost:8080/app/?wicket:bookmarkablePage=page.HomePageこんな時はmountBookmarkablePage()を使って特定のパスにページをマッピングすることですっきりします…

JavaからGnuPG(PGP)の鍵を利用する

鍵生成のついでにJavaから利用する方法のメモ自力で読み込みプログラムを作成すると大変なので、Bouncy Castleのライブラリを利用します。必要なjarファイルはbcprovとbcpgの二つになります。最初にGnuPGの鍵が保存されているsecring.gpgを読み込みます。読…

GnuPG(gpg)で暗号用RSA鍵を作成する

GnuPGで暗号用RSA鍵を作成する方法のメモGnuPGはデフォルトではElgamal暗号用の鍵しか作成できませんが、後からRSA暗号用の鍵を追加することはできます。新規に署名用と暗号用のRSA鍵を作成するコマンドはこんな感じになります。 $ gpg --gen-key Please sel…

JavaRebelが良い感じになってきた

気がついたらJavaRebelの1.1M1がリリースされてました。購入した人にはメールで教えてくれても良いのになぁと思いつつ、素直にRSSリーダーに登録しろということなのでしょうね。 JavaRebel 1.1 M1 Released変更点自体はアノテーションのリロードに対応したと…

JCEでDiffie-Hellman鍵交換を行う

JCEでDiffie-Hellman鍵交換を行う方法を調べた時のメモ*1。内容はAとBが秘密鍵を交換するシンプルなものです。最初にAがベースとなる素数等のパラメータを生成します。AlgorithmParameterGeneratorを使わずに、AlgorithmParametersのinit()にDHAlgorithmPara…

persistence.xmlを読み込んでテーブルを作成する

Hibernateでは起動時に自動的にテーブルが作成されるが、それを手動で実行する方法のメモ。Hibernateでのテーブル作成には、SchemaUpdateというクラスを利用すれば良いが、これにはConfigurationという設定クラスを渡す必要がある。起動時にHibernateが構築…

Hibernateで自動生成されるカラム名に文字を付加する

最近PostgreSQLからMySQLに乗り換えたのですが、Hibernateがhbm2ddlでテーブルを生成する時にエラーが出るようになってしまいました。Hibernateでテーブルの自動生成をすると、フィールド名がそのままカラム名になるため、MySQLの予約語と同じフィールド名が…

はてなにお引越し

自前サーバからはてなダイアリーに引っ越してみました。