Project Anaconda

Evernoteの発見により、Spiderは瀕死の重傷を負ってしまいました。

細かい点を見れば存在価値も見出せるので、息の根を止められたというわけではないのですが、はたしてそれらのために作り続けるだけの価値があるのかというと難しいところがあるので、再起不能の重傷を負ってしまったといえるでしょう。

一方、Spiderを利用して作ろうとしていたアプリケーションは、Evernote単体では実現できない機能を提供するので、少なからぬ動揺を受けてはいるものの、未だ健在です。

何を作ろうとしていたかといえば、反復学習のためのアプリケーションです。学習は、新たに取得した記憶を自身に定着することで進んでいく側面があります。これは、同じことを繰り返し行うことで実現されるのですが、自分で意識的に行おうとするとなかなか難しいところがあります。効果的な反復学習を行うには、一定の時間を空けることが必要といわれています。どの情報を、いつ取り組んだのか、すべて自分で管理するのは、情報が増えれば増えるほど難しいものです。そのため、アプリケーションによる学習履歴の管理が必要となるのであり、類似のソフトウェアも存在するようですが、わたしが望む機能を備えているものは無いようです。

このようなソフトウェアを、まるで知識に巻き付いて取り込んでいくものだということで、Anacondaと名付けました。

最初はSpiderのネットワークを利用してアプリケーションを構築しようと考えていたのですが、先述のとおり、Spiderは再起不能となってしまったので、依って立つ土台を大きく変える必要があります。

どうやら、Evernoteは、付属するアプリケーションや、Web APIを利用することで、そのデータベースにアクセスすることができるとのことです。だとすれば、ウェブアプリケーションとの親和性が強いということになります。ウェブアプリといえば真っ先に思い浮かぶのはPHPですが、個人的には、あまり好きではありません。使えるものならば、Rubyを使いたい。そういえば、Rubyにも優秀なフレームワークとしてRuby on Railsというものがあります。噂には聞くのですが、実際に使ったことはありません。

ということで、Ruby on Railsを使って、Anacondaを実装することに決定しました。

とはいえ、Ruby on Railsに関しては素人なので、「流儀」を学びながらの開発となります。その過程については、このブログに書き込んでいく予定です。

さて。まずはAnacondaが備えるべき機能を明らかにしておきましょう。いわば、これから歩む道の到達点です。

  • ある情報について、チェックした日時の履歴を管理することができる。
  • チェックした日時の情報をもとに、現在においてチェックすべき情報を選び出すことができる。
  • もととなる情報は、独自形式を用いず、(ある程度)一般的な形式による。すなわち、他のアプリケーションでも利用できるものとする。

ひとまずは、こんなところです。すでに作成に取りかかっていることもあるので、これは枝葉を取り除いた後の姿になっています。最初はいろいろと別の機能も搭載することを考えていたのですが、そうすると「これは一体いつ完成するのか?」ということになってしまうので、できるだけシンプルな機能だけを搭載することにしました。その代わり、外部とのインターフェイスには最大限の柔軟性を持たせ、多様な外部アプリケーションとの連携を前提としています。

使いやすいWindows用テキストエディタは? – はじめに

以前から、使いやすいWindows用テキストエディタを探しています。

「使いやすい」とは、「自分の手になじむ」「自分の感性に合う」という意味であって、客観的な評価基準があるというわけではありません。この「自分にとって」という主観的な評価基準をできるかぎり客観的に表現するのであれば、不完全ながら、次のようになるでしょう。

  • よけいな機能がなく、テキスト入力に集中できること。(「よけいな」も主観的評価ですが…)
  • 軽快に動作すること。例えば、数万行のテキストを読み込んでも操作が重くなったりしないこと。
  • 制限がないこと。例えば、読み込むことのできるファイルのサイズに上限がないこと。
  • マクロ機能を備えていること。
  • emacsのキーバインドが利用できること。
  • 頻繁にバージョンアップがされており、最新の技術を取り込んでいること。
  • メニューに半角文字を使っていたり、奇抜なカラーリングをしていたり、美的センスに欠陥がないこと。
  • フレキシブルな設定ができる(細部にわたり動作を制御できる)一方で、その設定はシンプルに(少ない手順で)行えること。

いろいろと使ってみてはいるのですが、なかなか「これぞ!」というものに出会えません。そりゃあ、これだけ高いハードルを設定すれば、そうかもしれませんが。

しかし、テキストエディタは意外と多くの方々が作っているソフトウェアであり、探せば理想とするものが見つかるかもしれません。多くの方々が作っているというのは、それだけ何かしらの不満があるということなのかもしれませんね。

まずは、どのようなエディタがあるのか、というところから調査します。同じようなことを考えている人が多いのか、Wikipediaには、代表的なテキストエディタをリストアップしたページがあります。まずは、そこに挙げられたテキストエディタを確認していきましょう(随時更新予定)。

サクラエディタ
オープンソースで開発が進められている和製テキストエディタ。標準で多数の機能を備えている。
秀丸エディタ
老舗の有料テキストエディタ。有料だけあって、豊富な機能を高レベルで備えている。
AkelPad
オープンソースで開発が進められているテキストエディタ。本体はシンプルに作られており(「メモ帳」プラスアルファ程度)、プラグインで機能を追加していく。

SpiderとEvernote

最近流行のEvernoteを使ってみました。

第一印象としては、「緩い」個人用データベースです。

これはSpiderとほぼ同じ方向性です。パクられた!(笑)

というわけで、困りました。Spiderを作り上げても、その到達地点には、Evernoteという同目的かつ高品質な製品が待ち構えています。はたして、Spiderを作り上げる意味はあるのでしょうか?

もしEvernoteの保有する情報を他のアプリケーションから使用できないのであれば、Spiderにも存在意義があります。しかし、Evernoteは、Evernote APIという形で、データベースへのアクセス方法を提供しているのでした。ちゃんちゃん。

これにて、Spiderは息の根を止められました。

今後は、いかにEvernoteのデータベースを外部アプリケーションから操作するか、という観点で研究を進めていきたいと思います…。

ATOKのユーザー辞書が編集できない

日本語変換ソフトとしてATOKを使っています。MS-IMEでも良いのでしょうが、以前から使っているというのと、日本語変換の精度で定評があるということで選びました。長く使っていますが、間違った選択ではないと思っています。

さて、ATOKでもMS-IMEでも、真に使いやすい日本語入力環境とするには、個人に応じたカスタマイズが必要です。辞書の整備もそのひとつで、よく使う単語などは、辞書に登録しておくと後々の作業がはかどります。ATOKの辞書管理はちょっと特殊で(MS-IMEなどを詳しく知らないのでこれが普通なのかもしれないけれど)、ユーザーが自由に作成できる辞書と、システムが使っている辞書があります。ここで混乱を引き起こすのが、「辞書セット」という概念です。辞書セットには、複数の、ユーザー(辞書作成を主たる事業とする企業なども含む)が作成した辞書を登録することができます。これにより、ある特定の辞書セット(たとえば「インターネット関連辞書セット」)に、特定の傾向を持った単語が登録された辞書(たとえば「インターネット顔文字辞書」「インターネット用語辞書」)が登録できるようになります。いちいち辞書をマージしなくてもよいのが便利なのでしょう。しかし、これらの「登録された辞書」とは別に、「ユーザー辞書」というものが、それぞれの辞書セットに作成されます。この「ユーザー辞書」とは、単語登録(Ctrl+F7)や推測変換の情報を貯め込む辞書です。単語登録時に登録先の辞書セットを選ぶことができるのですけれども、ある辞書セットを選択して単語登録をすると、その辞書セットに登録されている辞書(のファイル)に単語が登録されるのではなく、辞書セットに対応したユーザー辞書に単語が登録されます。このユーザー辞書は、ATOK側が自動的に作成してくれます。

さて、登録した単語が間違えていた、他に作成していた自分用の辞書の情報をマージしたい、などの理由により、ユーザー辞書を編集したくなったとします。このとき、「辞書メンテナンス」にある「辞書ユーティリティ」というツールを使うことで、登録されている単語を編集したり、他の辞書から単語情報を持ってきたりすることができる…はずなのですが、メニュー上の項目が灰色になっており、単語情報の編集はおろか、追加や削除もできないようになっている場合があります。

これは、「オンメモリ辞書」という機能を使っているために引き起こされます。メモリ上に辞書を置くのでアクセスが高速化されるのですが(以前使っていた環境ではバグの温床でしたが…最近は改善された様子)、登録された単語情報を編集できなくなるというデメリットも生じてしまうということになります。…ひどいですね!

「オンメモリ辞書」のチェックを外すと、編集ができるようになります。このとき、再起動が必要になります。

JUnit4のテストとコンストラクタ

Spiderの開発では、JUnit4による自動テストを行っています。オブジェクトの検索処理が心臓部となるので、その正確性を確認しておかなければなりませんし、性質上テストしやすいものでもあるからです。

JUnit4は、アノテーションを使ってテストメソッドなどを指定します。具体的には、@Testを付したメソッドはテストされ、@Before@Afterを付したメソッドはテストメソッドの実行前後に呼び出されます。

ここで、見落としがちなのは、テストメソッドを有するテストクラスのコンストラクタがいつ呼び出されるのか、という点です。

わたしの認識では、何度もテストクラスのオブジェクトを構築するのは無駄ですから、テストクラスのオブジェクトが構築されると、以後、そのオブジェクトが使い回されるものと思っていました。しかし、実際には、テストメソッドを実行するたびに新たなテストクラスのオブジェクトが構築されます。これを見落とすと、初期化されているはずのフィールドが初期化されていなかったり、値を設定したはずのフィールドに何も設定されていないという事態が生じることになります。

なお、JUnit4のAPIリファレンスには、「To run the method, JUnit first constructs a fresh instance of the class then invokes the annotated method.」と書かれており、アノテーションが付されたメソッドを呼び出すときには、JUnitは新しいインスタンスを生成するということが明記されています。その他に、このことについて言及しているドキュメントはあったのでしょうか。自分としては、見かけませんでした。

GoogleアプリケーションとRAMディスク

Google ChromeやGoogle Earthのインストーラを起動しても、何も起こらず、インストールできないという問題が生じました。

しばらく原因が分からなかったのですが、こちらのページによれば、一時ディレクトリをRAMディスク上に設定している場合(さらに一般的にはCドライブ以外に設定している場合)に生じる問題であるようです。セキュリティ上の問題なのか、なんなのか、よく分かりませんが、一時ディレクトリ(環境変数TMP)の指し示す位置をCドライブ上(デフォルトの値が望ましい)にすることで解決することができます。

こんなケースがあるとは思いもよりませんでした。

なお、Google Chromeのヘルプページにもインストールができない場合の項目が存在するのですけれども、まさか「RAMディスクに割り当てている場合には一時ディレクトリを利用できない」とは考えないので、あまり解決になっていないような気もしますね。

NVIDIAのOptimusとPlayOnline Viewer

ThinkPad X60の熱問題に耐えられなくなり、ThinkPad T420を購入しました。届いたのでFF11をインストールしたのですが、PlayOnline Viewerが起動しない(原因不明のエラーにより「動作を停止しました」状態になる)という不具合に遭いました。まだ根本的には解決していないのですが、対症療法的なものを見つけたので、ここにメモしておきます。

こちらの記事によれば、PlayOnline Viewerが起動しないのはNVIDIAのOptimusに問題があるとのことです(ThinkPad T420固有の問題というわけではないらしい)。何が原因なのかわかりませんが、PlayOnline Viewerを起動するとNVIDIAのドライバ(nvumdshim.dll)でエラーが生じて、そのままハングアップしてしまうようです。このハングアップが厄介で、これまた理由は分からないのですが、シェルを巻き添えにしてしまいます。タスクマネージャすら応答しなくなりプロセスの終了もさせられなくなるので、Ctrl+Alt+Deleteでログオフを選ぶしかありません。

対症療法的な対策として、C:\Windows\SysWOW64\nvumdshim.dllを一時的にリネームするなどして除いておくというものがあります。前記DLLが存在しない状態ならばPlayOnline Viewerを起動することができるようになります(これまたこれまた理由が分かりません)。ただし、そのままではFF11が起動しなくなるので、PlayOnline Viewerが起動した後は元の状態に戻しておかなければなりません。

また、nvumdshim.dllを置き換えるという手段があります。古いドライバのDLLに置き換えることで、不具合を避けることができるとのことです。置き換えると、確かに、PlayOnline Viewerがエラーで停止することはなくなります。ただし、他に影響が生じない保証はありませんし、リンク先のファイル自体が安全である保証もありません(いちおうAvira Antivirusでスキャンしましたが何も検出されませんでした)。くれぐれも自己責任で試してみてください。また、既存のファイルはリネームするなどして保存しておくようにしましょう。何らかの問題が生じても、ファイルを元に戻せば復旧できるものと思われます。こちらの手段をとる場合、次のようなスクリプトを使う必要はありません。

ファイルを置き換えた場合、他のDirectX使用アプリケーションが正常に動作しなくなるおそれがあります。実際、Google EarthのDirectXモードは起動しませんでした(OpenGLモードならば起動できます)。

Continue reading

Radio SureとEclipseを使うときの注意事項

Radio Sureという、インターネットラジオプレイヤーがあります。有料版もありますが、無料版でも十分に常用できる、完成度の高いソフトウェアです。海外の局しか登録されていませんが、洋楽をメインに聴いているのであれば、むしろその方が望ましいでしょう。iTunesにもインターネットラジオ機能が搭載されていますけれど、Radio Sureの方が軽く、また、録音機能も備えているので高機能だと思います。

このソフトウェア、Eclipseと同時に使うと、ちょっとした不具合を引き起こします。それは、Eclipseで名前変更(リファクタリング)をキーボードから実行することができなくなってしまうというものです。メニューから選べば、問題なく実行することができます。

ある日突然、キーボードから名前変更のリファクタリングができなくなってしまったので、どこかで何か起こっているのかなあ、と思っていたところ、Radio Sureで記憶にない録音データが作られていたので、原因が分かりました。

Radio Sureの設定に、「Hotkeys」という項目があります。この項目に、「グローバルホットキーを有効」というオプションがあります。これをチェックした状態にしておくと、Radio Sureがアクティブになっていない場合でも、録音などの操作ができるようになります。そして、ほかのアプリケーションのキー入力をフックして奪い取ってしまうようで、ほかのアプリケーションではそれらのキーが使えないことになってしまいます。

Eclipseで名前変更のリファクタリングに割り当てられているのは、Shift + Alt + R。そして、Radio Sureで録音に割り当てられているのもShift + Alt + R。ということで、このチェックを外せば衝突が回避されます。

アプリケーションを越えてのキーフックは危険ですね。

Firefoxが大量にメモリを使用する現象への対策(続報)

以前の記事の続報です。

おそらく、「It’s All Text!」というアドオンがメモリリークを起こしています。ただ、何が原因なのかは、まったく分かりません(ソースを見ることはできるので自分で突き止めることも不可能ではありませんが…)。このアドオンを有効にした場合、有効にしていない場合よりもメモリ使用量は増加しますし、タブを閉じて減少すべき場合にも減少しないという現象を確認しています。

ただ、他にもメモリリークを起こしているアドオンはたくさん存在するでしょうし(上記アドオンしか調べていません)、日頃見ているサイトによってもメモリ使用量は変わるものと思われます(特定の場合しかメモリリークを起こさない可能性もある)。

そのため、「このアドオンを切ればメモリリークが一般的に解消される」という結論を導くことはできません。しかし、不要なアドオンをオフにすることで、メモリ使用量を軽減することができ、安定的に運用することができるということは言えると思います。

EclipseでSubversion(リポジトリー作成編)

Subversiveのチーム・プロバイダーとコネクターをインストールすると、Subversionを使ったバージョン管理をEclipse上で行うことができるようになります。

すでにSubversionを使ったプロジェクトを進めている場合は、「ファイル」→「インポート」から「SVN」→「SVNからプロジェクト」を選ぶことで、ソースコードなどをローカルにダウンロードできます。

これから新しくプロジェクトを作る場合は、「ウィンドウ」→「ビューの表示」→「その他」から「SVN」→「SVN リポジトリー・ブラウザー」を選びます。すると、同名のビューが開かれるので、リスト上で右クリックをしてメニューを表示し、「新規」→「リポジトリー」を選びます。小さなダイアログが表示されるので、テキストボックスにリポジトリーを作成する場所を入力します(「参照」でディレクトリツリーから選べます)。ここで指定した場所に、Subversionのリポジトリが作成されます。なお、リポジトリーとは、ソースコードなどプロジェクトの情報を蓄積する場所で、Subversionを使ううえで必須のものです。

リポジトリーの用意ができたら、パッケージ・エクスプローラーなどで、バージョン管理したいプロジェクトを選んで右クリックし、「チーム」→「プロジェクトの共用」を選びます。方式を選ぶダイアログが表示されるので、「SVN」を選んで進めます。使用するリポジトリーには、先ほど作成した、ローカルのリポジトリーを指定します。