スタッフブログ
jQuery派のなおとです。
今日もjQueryを使った画面表示などをいろいろやっていたのですが、まだまだ使いこなせていない自分にもどかしさを感じています。
キモはやはりセレクタをいかに使いこなせるかでしょうか。
XPathに近いようでいてまた一味違うし、集合の操作などSQL的なところもあったりして、奥深いです。
操作の対象をうまく掴むことができれば、あとは画像の切り替えや、テーブルのある行だけ背景色をハイライトしたり、また色を元に戻したりといった、よくあるような効果を追加するのは、すぐにできます。
まだたいしたことをしていないので、その方面もまだ修行が足りないと思っています。
とはいえやはり、おもしろい!javascriptでありながら独特な書き方があるのが、とても気に入っています。
なおとです。 先週とある指令を受けて、WEKOに興味を持ちました。
ブログの記事を読むと、弊社の龍司社長はオフィス文書の検索に感心したようです。 そこに焦点を当てて調べてみました。
まずWEKOモジュールをダウンロードして、ソースを眺めてみることにします。
- weko1.31.tar.gz
私は弊社の他のメンバーと違ってNetCommons2の経験が少々足りないので、勉強を兼ねて手探り状態です。
始めに、データベースのテーブル定義を見ます。 同時に日本語の言語ファイルも見て、関係がありそうなところにアタリをつけていきます。
- repository/sql/mysql/table.sql
- repository/language/japanese/main.ini
すでに前記の記事で書かれているように、検索エンジンとして、MySQLに標準で組み込まれている全文テキスト検索(FULLTEXT INDEX)が使われているようです。
これで検索用インデックスが格納されるテーブルの名前「repository_fulltext_data」が分かりました。
※Windows上で動いているなどで対応していない場合には、部分一致検索(LIKE検索)に切り替えるようです。
そこでテーブル名をキーにソースを全文検索すると、次の2つのファイルが該当することが分かりました。
- repository/components/RepositoryAction.class.php
- repository/action/edit/createfulltext/Createfulltext.class.php
ここまで絞り込まれると、あとはソースを読むだけです。
オフィス文書をテキスト形式のデータに変換する
この仕組みで検索可能にするためには、対象となる内容を予めテーブルに置き、さらにインデックスという、素早く効率的な検索をするための付加的なデータが必要です。まずはデータを登録する部分を見ていきます。
すると、PHPから外部のコマンドラインを呼び出して、オフィス文書をテキスト形式のデータに変換する処理を見つけました。 ごく簡単に、核心部分を引用します。
- wvWare
wvHtml input.doc output.html
- xlhtml
xlhtml input.xsl > output.html
- poppler
pdftotext -enc UTF-8 input.pdf output.txt
詳しくは各ツールのマニュアルでコマンドライン・オプションを調べると分かります。 (例:man poppler)
検索用インデックスを作成〜実際に検索する
上記のように変換したテキストファイルの中身をテーブルに挿入したあと、インデックスを生成しています。
検索はデータベースに対して検索クエリを投げると、結果が帰ってきます。
最後の方は駆け足になりましたが、概要は以上です。
私は数年前に、Namazuを使った全文検索を扱ったことがありました。 wvWareやxlhtmlといったツールは、その時にも使われていたのを思い出しました。
こんにちわ、なおとです。
今日の話題は、よく使う bulletin(ニュース)モジュールの問題点を修正したことについてです。
問題の状況
- Windows環境で作成したDBのデータをUNIX環境に持って行った場合
- windowsでXOOPSを運用していると、この現象は顕在化しない
- ルート側のdirnameに大文字を混在させてインストール/利用している
- テーブル名は小文字で作られる
- しかしテーブル名にアクセスするとき、〜$xoopsDB->prefix($mydirname.'_topics')〜というコードでテーブル名をつくってクエリを生成している
- $mydirnameには大文字が含まれていて、内部的にはそのテーブル名は存在しない、というエラーが起こる
影響を受けるバージョン(調べた部分のみ)
- bulletinHD 2.16(PEAK配布バージョン)
- bulletinHD(HD1.0.2 以前)
- bulletinを元にした派生版
解決方法
prefix()を呼んでいる箇所を全てチェックし、必要に応じてstrtolower()を挟む
他の解決方法も検討しましたが、今回は上記対応を行いました。
修正用の差分ファイル
bulletin テーブル名不正規問題修正パッチ (ダウンロード)
2008.12.26 13:40 追記:この現象は、 Windows環境で作成したDBのデータをUNIX環境に持って行った場合に限定されます。
通常の環境の場合、上記の差分ファイルパッチを当てると、逆に動作しなくなります。
ただ、WARPなどの環境でデータを作成してから、UNIX環境にデータを移行して運用なんてケースも考えられるので、その場合は上記パッチを適用して頂いた方が良いと思われます。
なおとです。ちょっと体調が崩れかかっています。気をつけます。
師走。街中ではイルミネーションが賑やかです。 弊社オフィスからの帰り道では、後楽園、東京ドームシティのイルミネーションが盛大ですね。 ほかに、茗荷谷近くの播磨坂にも行きました。 いつもながら、歩いて帰る途中で、なんとなく見ています。
話題は変わりますが、開発中のリポジトリについて、変更点をまとめて知りたいときがあります。 リポジトリビューアでその機能がある場合はそれが一番ですが、コマンドラインでもできる方法を知っておくと、役に立つかもしれません。
ここで紹介するのは、例によってネットで検索して知った方法です。 リビジョン1にディストリビューション(配布パッケージ)そのままのアプリケーション(Package Legacy 2.1.6等)をインポートしてる、という前提です。 リビジョン1が空の場合は、結局全部が追加されたことになって差分の意味がありません。適宜オプションを調整します。
$ svn diff -r "1:HEAD" -x "-b --ignore-eol-style" https://svn.example.net/myproject/trunk/ |awk '/^Index/ {print $NF}'
なおとです。
今日社内で、興味深い「井戸端談義」がありました。 タブ談義とコーディング規約についてという、プログラマには定番の話題です。 内容に詳しく触れることは致しませんが、私としても有意義でした。
私は与太話として、XOOPS Cube Legacyやホダ塾ディストリビューションでは、パッケージに収録されたファイルの改行コードが、「CR+LF」になってる(ことが多い)と話しました。 すると、誰ということもないのですが社内の熟練プログラマでも、そのことに気づいていなかった(意識していなかった)というのです。
内容はどうあれ、こういったコミュニケーションはとても大切だなと再認識しました
なおとです。
今日はJavascriptを楽に記述できる頼もしいライブラリ「jQuery」を使って、よくある showHide() アクションを実装してみます。 showHideとはつまり、ボタンを押すことによって、画面の中の一部分が開いたり閉じたりする動きのことです。
ちょっと長いですが、全体を以下に示します。
こんばんわ。なおとです。今日は自転車通勤にトライしました。
ところで、私は今「インターネットを256倍使うための本」という本を読んでいる途中なのですが、なかなか興味深いです。
- インターネットを256倍使うための本 (Vol.1)
- インターネット ホームページデザイン―インターネットエンジェルたちのためのWWW&HTML
- Webの創成 ― World Wide Webはいかにして生まれどこに向かうのか
- 教科書には載らないニッポンのインターネットの歴史教科書
ここに挙げたのは、私が読んで感銘をうけた本のタイトルです。共通しているのは、ネット黎明期の空気や秘話を伝えている、歴史書のようなところです。
はじめから歴史を書くつもりの本だけでなく、当時はそのつもりでなくても、今読むと懐かしく、当時の雰囲気を伝えているというものもあります。
文系というか、社会学的な視線でこのインターネット界隈の技術史やできごとを眺めて、そこから普遍的なものを掴んで今に生かしていきたいと思っています。
こんにちわ。なおとです。朝晩冷えますね。
.fixed-inline { display: inline-table; width: 2em; }
<p> <span class="date fixed-inline">2008-11-1</span> <span class="title">...
</p>
置換要素ではないインライン要素は、幅や高さは「なり」というのが、CSSの仕様です。 ある部分の幅を固定したいとき、それはブロック要素にして、配置はfloatにするなり、というのがよくやる方法だと思います。
例えば箇条書き的な配置のインラインのテキストがあって、それに何か見出し的な何かを、表組みのような配置で追加したくなったとします。 しかしtable要素にしたくなかったとか、マークアップはspanを使っていたのを変えたくないとします。これはあくまで例えです。そのときに知ったのが、冒頭の記述です。 inline-tableの存在理由からすると、逸脱した使い方に思えます。よく考えて使ってください。
なおとです。
私がここで記事を書くときに、しばしば「できるエンジニア」ということを話題にしてきましたが、今回もそんな話です。
いろいろできるに越したことはない、ということではあるのですが、その中でもサーバやOSなどは付き合いが深い領域だったりします。 そうでなくとも、開発の現場にある程度いると、否応なしに接する機会がやってくる筈です。「そのとき」にある程度のスキルと経験が備わっていないと、あたふたしたり、時間がかかりすぎてしまったりします。 日頃から接するような環境でいたり、情報収集的なことをやっていると、それが役に立つのです。
非常に簡単ではありますが、たとえば次のようなものが挙げられます。
- OSのインストール
- 開発環境の整備
- 個々のサーバアプリの定常管理
- Windowsネットワーク/ファイル共有
- 小規模なLANの構成(ルータ、ファイアウォール)
今までの経験でも、このあたりの知識は役にたちました。
こんにちわ。なおとです。
日に日に秋が深まっていくようなこの頃ですが、私は風邪をひいてしまったようです。 皆様もご自愛ください。
バージョン管理の秘訣は、自分でバージョン管理しないこと!
バックアップなどはバージョン管理システムに任せましょう。
「自分でバージョン管理」とはなにかというと、例えば自分のところで抱え込むことが挙げられます。 複数の修正内容をいっぺんにコミットするような事態があると、「いつ(順序)、だれが、どこを」修正したかの情報を、 リポジトリではなく、自分で持ってしまうことになります。
ほかにもいろいろあるのですが、言いたいことは楽をしましょう、そのためにシステムはありますよということです。