弐条海月の とはずがたり

そこはかとなく書き綴るブログなるもの

HSPで開発したアプリをLinuxのWineで動かす

社内で保管している膨大な量のテキストファイルを簡易データベース化してこれを検索できるアプリケーションを、Windowsで動作するフリーのインタプリタ型プログラム言語「HSP(Hot Soup Processor)」で開発し、運用しております。このアプリケーションをLinux(Ubuntu、Linux Mint)のWineでも動作するようにここ数日かけて大きく改良しました。その記録です。

まずはこの検索アプリについて説明

この検索アプリは、数々のテキストファイルを1テキスト1行とし、それを1年分にまとめた簡易データベースを検索できるアプリです。簡易データベースの作成アプリも別にあって、毎日動作させては1日に40~50ファイルくらいのテキストを追加しています。簡易データベースは1年に10~12MBくらいのサイズになります。

この簡易データベースは2001年から現在までのファイルを格納していて、自由にその内容を検索できる仕様です。検索結果は年月日、テキストファイルの元の名称、関連する画像の有無なども分かるように一覧表示され、テキストファイル名をクリックすると、右側のエリアにテキストの内容も表示できるようになっています。本来ならば画像で紹介できれば分かりやすいのですが、業務内容が分かってしまうのでできません。

選択したテキストは、内容の一部をコピー&ペーストしたり、あるいはファイルとして書き出すことも可能です。関連画像がある場合は、その画像が格納されているフォルダを開くこともできます。

開発したのは2007年で、そこから改良を加えつつ現在に至ります。未だ完成した!とは言えないアプリなので、現在はβ13ということにしております(笑)。

今回のアプリ改良の目的

このアプリはWindows 9X、XP、Vista、7にて現在運用されておりますが、Ubnutuでも使えるようにしたかったんです。当初はPythonを習得してOSに依存しないアプリケーションの開発に乗り出すつもりでしたが、私が仕事で使っているWindowsマシンが98SEなので、Python 2.5までしか対応していないんです。できればPython 2.6以降で開発したいので、現状では難しい…。そこでHSPで開発したアプリをUbuntu上のWineで動かす方法を試すことにしたのです。

最初の難関

HSP本体をUbuntu上のWineにインストールして動作させることできます。簡単なアプリケーションの開発も十分行えます。ただし、サーバーとの接続がうまくいきません。純然たるWindowsとはパスの概念が異なるのでうまくいくはずがないんですよね。じゃあ、どうすれば良いのか…そこでしばらく時間がかかりました。

問題解決

たとえば、Windowsでアクセスできるサーバーのアドレスが「\\\\SERVER\\○○○○○」だとすると、このサーバーをUbuntu上でマウントした場合は「Z:/home/ユーザ名/.gvfs/○○○○○@server”」になるんです。Ubuntu上のWineでWindowsアプリを動作させる場合、このパスを使ってサーバーにアクセスする必要があります。これが分かってからは、動作しているOSを判別してパスを切り替えれば良いんだと開発が進むと思っておりました。

 

新たな問題

ところが、OSを判別できなかったんですよね(笑)。Windows 98はそのまま98、XPはWindows_NT 5.1、Vistaは同6.1、7は同7.1と判別できますけれども、Ubuntu上のWineはXPの「Windows_NT 5.1」を名乗りやがるんです(爆)。これでは判別できない…そこで新しい方法を試すことにしました。

 

こんどこそ問題解決

その方法とは…デスクトップの場所を探る方法です。Windows 98ではデスクトップの場所が「C:\WINDOWS\デスクトップ」となっております。XP以降では「C:\Documents and Settings\ユーザ名\デスクトップ」です。そして、Ubuntu上のWineでは「z:/home/ユーザ名/Desktop」です。これでOSの判別ができました。後は、いちいちパスを保存した設定ファイルを手動で書き換えるのも面倒なので、検索アプリの起動時にデスクトップの場所を取得し、前回と異なるようであれば違うOS上で動作させていると判断し、INIファイルを再設定する仕様に変更しました。これで異なるOSでも動作させることができます。良かった良かった(笑)。

さらなる高速化へ

この検索アプリは、サーバーに繋がらない環境でもローカルに簡易データベースを格納しているので動作するのですが、サーバーにアクセスできる状況下ですと、簡易データベースの更新もできるようになっているんです。ところが、データベースの更新後も、アプリケーションはサーバー上のデータベースを使って検索する仕様にしていたことをUbuntu上のWineでテストした際に初めて気づきました。

というのも、Windowsで動作させる場合は、サーバー上の簡易データベースを使ってもそう遅くはならなかったので気づかなかったのですが、Ubuntu上のWinëで動作させると検索スピードが格段に遅くなることから判明したのです。

もちろん、サーバーへのアクセスの有無にかかわらず、検索は常にローカル側の簡易データーベスで行う仕様に変更しました。Ubuntu上のWineでの検索アプリのテストはネットブック「HP 1000 mini VIVIENNE TAM Edition」で行いましたが、検索スピードは会社で使うWindowsに比べると爆速でした(笑)。

例を挙げますと、Windows98SEのマシン(Pentium III 900MHz、メモリ512MB)で2001年~2011年の簡易データベースを「プログラム」というワードで検索してみます。年単位で11のテキストファイルからなる総行数158229の簡易データベース中、ヒットした件数(テキストファイル数)は791件。検索から表示まで3回の平均値は16.3秒でした。Ubuntu上のWineで動作させた場合は3回の平均は8.46秒でした。その差は歴然。まぁ、通常の使用では2001年から検索することはほとんどなくて、今年の分あるいは昨年を入れた2年分での検索がほとんどですから、そうなるとほとんど待ち時間はないです。十分な速度で動作していると思います。

結びに

Ubuntu上のWineで動作させることになった時、検索アプリの本体をWindows用とLinux(Wine)用に分けて開発したのですが…やはり不都合というか、面倒なので頑張って統合して開発できて良かったと思っております。また少しだけHSPでのアプリケーション開発のスキルが上がったと自画自賛。でも本当は早くPythonを習得したい今日この頃です(笑)。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

固定ページ

最近の投稿

カテゴリー





カレンダー

2011年7月
 123
45678910
11121314151617
18192021222324
25262728293031

過去の日記はこちら

キーワードで検索