nDiki : grep

2006年4月2日 (日)

howmnDiki の記事も検索対象にする

howmメモツールとして使いはじめている。 ちょっとしたメモを、使い慣れている Emacs 上で簡単に書けるので非常によろしい。

一方、自分の場合まとまった情報やネタは nDiki の方に書いて公開している。 これらのデータは別のディレクトリに DiKicker (WiKicker) 形式のテキストファイルとして保存されている。

どちらも「あのコマンドなんだっけかな」とか「あれをやったのはいつだったっけ?」とよく検索を行うことになる。

今まで nDiki の方は Google であったり Emacs 上で grep をかけたりして検索していたのだが、howm検索機能が便利なので一緒に検索できるようになるとかなり便利だ。

ということで設定を行なった。

現在の設定は下記の通り:

 (setq howm-menu-lang 'ja)
 (setq howm-menu-schedule-days-before 14)
 (setq howm-menu-schedule-days 14)
 (setq howm-search-path '("~/path/to/diki/"))
 (setq howm-search-other-dir t)

 (setq howm-view-title-regexp "^\\(\\*\\|=\\)\\( +\\(.*\\)\\|\\)$")
 (defvar howm-view-title-regexp-pos 3)

 (setq howm-view-title-regexp-grep "^[=*] +")

 (setq howm-menu-expiry-hours 1)
 (setq howm-menu-refresh-after-save nil)

 (setq howm-view-external-viewer-assoc
       '(
         ("[.]\(jpg\|gif\|png\)$" . "display %s")
         ("[.]mm$" . "freemind %s")
         ))

 (setq howm-view-use-grep t)

 (setq howm-process-coding-system 'utf-8)

nDiki の記事のタイトルは行頭 の '* ' で始めるようにしているので、それもタイトル扱いするようにしておく。

これでいつでも C-c , s で、howmnDiki を串刺し検索できる。 いいね。

スポンサード リンク
[ 4月2日全て ]

2006年8月8日 (火)

Linux で使えるデスクトップ検索ツール Beagle でローカルファイルを検索

Windows だと Google Desktop でローカルファイルの検索ができるのだが、残念ながら Linux 版はでていない。 そこで Beagle を入れてみることにした。

Beagle はデーモン形式のバックエンドと、検索インタフェースであるフロンエンドに分かれたているデスクトップ検索ツールである。

ファイルシステム上にあるテキストファイルだけでなくメールや、Firefox でアクセスしたページ、OpenOffice.orgMicrosoft Office のファイルなどをインデックス化し検索できるようにすることができるらしい。

ちなみに今まで

ローカルファイルの検索

メールMew 4 での検索(with Namazu)。
nDiki 記事howm で記事ソースデータを検索 (方法)、あるいは www.naney.org 公開記事を Google で。
メモhowm
開発中のソースコードEmacsgrep-find でだいたい事足りる。たまに ack。
仕事のメモできるだけ社内 Wiki社内 Blog に書いておいて Hyper Estraier
その他grep 程度。

といった感じかな。

それ以外はだいたいファイルの位置をうろ覚えしているので、何カ所か探せば見つかることが多い。

問題はうろ覚えの場所になかった時。 その時はなかなか見つからない。

そんなファイルを見つけるのが楽になれば、導入効果あり。

インストールして試してみる

Linux kernelinotify を有効にする

まずは Linux kernel の設定を確認。inotify が有効になっている方が良いらしい。 この間ビルドした時の .config を見て

 CONFIG_INOTIFY=y
 CONFIG_EXT2_FS_XATTR=y
 CONFIG_EXT3_FS_XATTR=y

となっていることを確認。

/home の extended attributes を有効にする。

/etc/fstab を編集し、

 /dev/hda4 /home ext3 defaults 0 2

 /dev/hda4 /home ext3 defaults,user_xattr 0 2

に変更する。書き換えたら、

 mount -o remount /home

でマウントしなおす。

Beagleインストール

Debian パッケージインストール

Beagle を起動

一般ユーザで

 beagled

で起動する。停止は

 beagle-shutdown

で。

Beagle を設定
 beagle-settings

で設定 UI を起動し、インデックスに含めたくないディレクトリなどを設定。

検索してみる
 beagle-search

検索 UI を起動し検索してみる。 日本語も OK のようである。

GNOME 環境をほとんどインストールしていなかったので、検索結果からファイルを開けずつまらなかたので gonome-control-center、gnome-panel あたりをインストールして環境設定等をしてみた。

KDE 系のクライアントもあるので別途いろいろ確認

Firefox 拡張

xpi ファイルを入れておく。 後は普通に閲覧したページが、Beagle でインデックス化されて検索できるようになる。

設定してしまえば、以前開発して使っていた WWWOFFLE + Namazu よりお手軽である。

感想

デーモンが逐次インデックス化していくので、明示的定期的にインデクサを走らせなくていいというのは楽でいい。

日本語関連がどの程度うまく検索できるのか、検索結果は使いやすい順に出力されるのかが未知数。 しばらく遊んでみて便利かどうか確かめてみたい。

[ 8月8日全て ]

2006年9月11日 (月)

社内 Perl 勉強会 最終回 (第16回)

リャマ本を使用した社内 Perl 勉強会の16回目を開催。 今日は8人全員。

今日は「初めてのPerl 第3版」第17章「上級テクニック」が範囲。 17章では、「Perl らしい」機能 (Perl 流 eval、grep、 map、スライス)が盛沢山。

今回の反省点

robust なプログラムを書くには Perl では eval 必須の機能なので押さえておきたいところ。 grep、map は何だかんだいって自分が練習問題の解答で使ってしまっているので、他の人もある程度見なれているはず。

練習問題の解答としてはスライスは今回は使用せず。

逆にスカラーコンテキストとリストコンテキストについては、まだ理解が不完全な部分があるようなので解説をしておいた。

最終回を終えて

Perl については

Perl の理解が進んだ (「正規表現」が何か少しわかった、使い方がわかった、知識が増えた)

という一方

Perl の気持ち悪さが理解できた。

という意見があった。

プログラミング言語勉強会としては

他の人の書き方を見ることが参考になった。実際に書くことで覚えた。

等、定期的に練習問題をやってくるというスタイルに対する評価が得られた。

4月21日から始めて5カ月弱。勉強会でスキルアップをはかっていこうという雰囲気ができてきているのはいい傾向だと思う。

今後もテーマを選んで継続していきたい。

次のテーマをより実用重視のものにするか、基礎固めのものにするのかは悩みどころである。

[ 9月11日全て ]

2006年10月21日 (土)

Konqueror でリモートホスト上のファイルを SSH 経由でブラウズ

会社のサーバに Web 用のファイルを置く作業を頼まれる。 ちょこちょこ更新があるので、毎回 scp でコピーするのも面倒臭い。 新しいサーバでまだ shfs + autofs の設定もしていないし。

ということで Konqueror から簡単にアクセスできないか確認。ちなみに Konqueror だと

smb://ホスト名/SMB でアクセス

Samba 公開ディレクトリに smbmount などすることなく、簡単にアクセスできる。

SSH 関連についても確認してみた。以下の2つが利用できる

sftp://ホスト名/sftp でアクセス
fish://ホスト名/fish でアクセス

fish は POSIX 互換のリモートコンピュータに対して使えるもので、cat、 chgrp、 chmod、 chown、 cp、 dd、 env、 expr、 grep、 ls、 mkdir、 mv、 rm、 rmdir、 sed、wc あたりを使うらしい。

どちらも Konqueror から shfs でマウントしたディレクトリにアクセスするよりも動作が軽快なので、ちょっとしたファイル転送や編集ならこちらを使った方が便利そうだ。

[ 10月21日全て ]

2007年2月2日 (金)

DiKickergrep 検索機能を追加

DiKicker には自動リンクベースの記事串刺し表示機能があって、同じキーワードを含む記事をまとめて読むことができる。 結構便利なのだが、この機能ではキーワードの設定は Blog の書き手に委ねられている。

社内で DiKicker を一部使ってもらっているのだけれども、それら他人の Blog を読んでいると「あのキーワードで串刺し表示したいな」と思うことがしばしばあることに気がついた。 やはり任意の文字列で串刺し表示する機能が欲しい。

書き手にとっても「自動リンクキーワードにするような文字列ではないけれども、串刺しで読みたい/探したい/見せたい」と思うことが少なからずある。

ということで、検索ベースの串刺し表示機能を実装してみた。

grep ベース

実現には全文検索を行う必要があるが「設置・運用の手間」「ディスク容量」という点から、事前にインデックスを生成するような方法は今回は避けようと思う (www.naney.org 上で自分が使う上での制約からくる理由が一番大きかったりする)。

ということで今回は grep 型で実装することにした。 もともと WiKicker の方の検索機能も現在のところ grep 型である。 WiKicker では自前で WikiPage をスキャンしているが、DiKicker では grep コマンドに任せることにした。 こういうのは専用の grep を使った方が速いはず。呼び出しは

 grep -Flre $escaped_string dir...

というオプション指定。Web ページとしてのページングなどは、自動リンクによる串刺し表示機能のものを流用。

で試したところ www.naney.org サーバでは、load averages が 1 以下の時でだいたい50秒前後。対象ファイル数は 2800弱。予想より時間がかかる。

ただし1回実行した後、ファイルがファイルシステム/OSメモリ上にのっている状態では 0.1秒程度で完了する。

検索結果ページの permalink が検索エンジンにそれなりに捕捉されて、定期的にアクセスがあるようになれば、ファイルがメモリにのっている割合が増えるであろうから平均して実用に耐えられる速度が出るかもしれない。

今後は様子をみながら検索結果のキャッシュ等を処理を整備していく予定。

[ 2月2日全て ]

2007年5月30日 (水)

WiKicker 0.420 リリース - 変更いろいろ

去年の12月3日以来、約半年ぶりのリリース。 リリースしそびれて、随分変更を累積してしまった。 以下主な変更点。

バージョン番号形式を変更

前回の 0.41 に対して、今回は 0.420 とした。 浮動小数点数的には、増分 0.01 で今まで通り。

今後 version.pm が普及した時のことと、developer release を出す時のことを考えて小数点以下3桁ずつのスタイルに移行することにした (関連記事)。

<meta name="robots" content="noindex,nofollow">

2007年1月に実装。 編集ページや履歴ページが検索エンジンに登録されないようにするための機能。

<a rel="nofollow">

2007年1月に実装。 リンク spam 対応。

AutomaticLink 長を可変にした

2007年3月に実装。 特に DiKicker で1文字キーワードによる自動リンクを有効にするために追加した。

'/' の前を省略した自動リンクを有効にするか無効にするかを設定できるように

前述の機能で1文字での自動リンクを有効にしたら、不便な面が出た。

WiKicker / DiKicker では '/' を階層の区切り文字としても扱うことができるようになっていて、サフィックス部分だけでも自動リンクするようになっている。 自動リンクを1文字にしたら「OS/2」というキーワードに対して '2' でも自動リンクが働き、望まないリンクが張られるようになってしまった。 DiKicker では階層的キーワードは無くてもあまり困らないので、'/' の前を省略した自動リンクを無効にできるようにした。

JSON 形式データ出力

2007年4月に実装

(DiKicker) はてなブックマーク数表示機能を追加

2007年1月に実装

(DiKicker) はてなブックマークエントリーページへのボタン表示機能を追加

2007年1月に実装

(DiKicker) grep 検索機能を追加

2007年2月に実装。自分としては重宝している。

(DiKicker) キーワード記事の下部への文字列挿入機能

Google AdSense 挿入用。

(DiKicker) サーバの負荷が高くなったら 503 を返して沈静化を待つようにした

2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。

内部コードの結構な書き換え

ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。

[ 5月30日全て ]

2007年12月18日 (火)

Google Analytics のデータからよく検索されるキーワードを表示するようにした

Google Analytics から1日1回キーワードのレポートを TSV 形式でメールで配信するように設定している。 このデータをもとに「よく検索されるキーワード」を抽出して、nDiki の下の方に表示するようにした。

処理の流れ

  1. メールで配信された TSV 形式データをファイルに保存する。
  2. 検索質問とセッション数の組のデータを抽出する。
  3. 1ワード単位でセッション数を集計する。
  4. 上位のワードについて、nDiki のキーワードリストにあるか照合する。
    1. 完全一致するものがあれば、それを参照キーワードとする。
    2. 大文字小文字一致するものがあれば、それを参照キーワードとする。
    3. ワードを含むキーワードがあれば、その中で文字数の差が少ないものを参照キーワードとする。
    4. ワードで記事を grep 検索してマッチするものがあれば、それを(nDiki 内で検索して見つかる)キーワードとする。
    5. でなければ関連キーワード無しのワードとする。
  5. 各ワードについて、対応するリンクを設定してフッタ埋め込み用の HTML フラグメントを生成しファイルを生成する。
  6. ファイルをサーバにアップロードし、サーバ側でフッタにインクルードする。

1日1回の作業なので、メールからスクリプトにかける部分とアップロードする部分は手動で。

そこそこの処理なので、そこそこの精度なのだけれど傾向は何となくわかる感じだ。

実際にはアクセスログの対象となっているのは nDiki 以外の www.naney.org 内のアクセスも含まれているけれどもまあいいであろう。

キーワードの処理

キーワードの処理は細かいことをいうと結構面倒だったりする。

  • 複合語の処理: 検索ワード側も、nDiki キーワード側も複合語を含むので空白で区切られた語の扱いが大変。特に検索ワード側は語順が正しいとは限らないし、各語が個別の語を表しているのか否かの判断が難しい。
  • 曖昧一致処理: 検索ワード(や nDiki キーワード)が正確な語とは限らないので、曖昧一致させる必要がある。検索エンジン側で曖昧一致させて検索結果に上がっている可能性があるのでその辺りも考慮する必要がある。

などなど。

この辺りは精度を上げようとするといろいろ工夫の余地がって楽しそうではあるな。

[ 12月18日全て ]

2010年2月26日 (金)

Xperia のために FOMA 端末の電話帳を Google 連絡先に

Xperia を使うことを念頭に SO905iCS電話帳を Google Contacts にインポートしておくことにした。

SO905iCS電話帳のmicroSDカードへの書き出しを行い、作成された vCard ファイルフォーマットGoogle Contacts ( http://www.google.com/contacts ) でインポート。

1つだけ問題あり。 ケータイ側で入力してあった読みは、Google Contacts 側では「名前(フリガナ)」というラベルのカスタムフィールドにインポートされるのだが、Web ページ上では編集することも削除することもできない。 Gmail の言語切り替えを英語にするとラベル名が切り替わるなど、ただのフリーなカスタムフィールドではない様子。 Android 端末との同期か何かでないと変更できないのかな?

とりあえず現状編集できないフィールドがあるのは気持ち悪い。 ケータイでも読みによる検索など使ってなかったので、ここは読みを捨ててインポートしなおしておくことにした。

vCard ファイルについて grep -v SOUND した結果を Google Contacts にインポートしなおすことで振り仮名無しで Google アカウント上にもってくることができた。

この件については Xperia 入手後再度確認してみるつもり。

今日のさえずり: ヨイコだからボク一度も飲み会の間に tweet しなかったよ

2010年02月26日

[ 2月26日全て ]

2010年11月16日 (火)

Xperia を root 化してシャッター無音化とスクリーンショット取得可能化

Xperia SO-01B も Android 2.1 になったわけだけれど、NTTドコモも次々 Android 端末出してるし Xperia も後継機種のが出ているしで、ビジネス的にも開発リソース的にも Android 2.2 以降へのアップデートの可能性はちょっと低くなってるんじゃないかなと思う今日このごろ。 であればそろそろ root 化にチャレンジしてもいいよね?

ということで Web で調べ調べしながら root 化。

root 化アプリケーションの z4root を使う。

マーケットで z4root を検索してインストール。 起動したら画面中央の Root ボタンを押す。 「USB デバッグが有効になってないよ」という主旨のダイアログが出たので、ボタンを押すと Xperia の[アプリケーション設定]画面が開く。[開発]の中の[USBデバッグ]をチェック。

再度 z4root を実行して Root ボタンを押す。

しばらく待つと再起動がかかる。

再起動後 z4root を実行するとスーパーユーザ権限与えてねダイアログが出るので許可する(1度ここでもたもたしてたら Root 取れなかったみたいで再度 Root ボタンを押してやりなおした)。

root が取れると z4root の画面は Re-root と Un-root の2つのボタンが表示されるようになる。

Debian GNU/Linux から adb で Xperia にリモート接続できるようにする

Android 開発環境以前インストールしてあったので、その中にある tools ディレクトリの下の adb コマンドを使う。

 adb devices

すると

 List of devices attached
 ????????????    no permissions

と表示される。udev の設定が必要らしい。

 echo 'SUBSYSTEM=="usb",SYSFS{idVendor}=="0fce",Mode="0666"' > /etc/udev/rules.d/51-android.rules

して /etc/init.d/udev restart。adb 系のプロセスが動いていれば kill。

この状態で

 adb shell

を実行して

 $

というプロンプトが出たらリモート接続成功。

カメラのシャッター音設定で OFF を選べるようにする

Xperia の /system/build.prop というテキストファイルを書き換えればいいらしい。

adb shell で入っている状態で su を実行。

 $ su

初めての場合 z4root がインストールしてくれた Android アプリ 「Superuser」が Xperia 上で開いて /system/bin/sh にスーパーユーザ権限を与えて良いかときいてくるので許可する。 うまくいくと adb のプロンプトが # にかわる。

次に /system を書き込めるように remount する。

 # mount ← どこにマウントされているか確認。
 # mount -o remount,rw /dev/block/mtdblock2 /system ← rw で remount。

これまた z4root が インストールしてくれている、UNIX コマンドラインユーティリティをひとまとめにした BusyBox を使う。/system/bin/busybox としてコマンドが入っているのでこれを適宜呼び出す(busybox ファイルを ls やら grep やら vi やらといった名前でコピーするかシンボリックリンクを張るかすると、直接その機能が実行されるようになるのだが、ここではその設定は今はやらないでおいた)。

 # busybox cp /system/build.prop /system/build.prop.original ← 編集前を残す。
 # busybox vi /system/build.prop ← vi で開く。

で vi エディタが開くので /system/build.prop ファイルを編集。

 ro.camera.sound.forced=1

 ro.camera.sound.forced=0

に書き換えて保存したら Xperia再起動

これでカメラの設定画面中のシャッター音で OFF が選べるようになった。

スクリーンショットをとれるようにする

マーケットから Drocap2 をインストール。 drocap2 を実行して、メニューボタンから[設定]を選び、[撮影モード]で[通知で撮る]を選択。 そうすると通知バーを引き出した中に[drocap2トリガー]というのがあらわれるようになるので、スクリーンショットをとりたいときにそれを実行する。

初回は Android アプリ 「Superuser」がスーパーユーザ権限を与えて良いかときいてくるので許可する。 これでスクリーンショットが端末単独でとれるようになった。

めでたしめでたし。

追記

2011年1月19日のソフトウェア更新でマルチタッチ対応した Xperia SO-01B では z4root が使えなくなった。 かわりに Flashtool で root 化ができる。→ 設定方法


[ Android アプリレビュー ]

[ 11月16日全て ]

2011年4月27日 (水)

今日のさえずり: 風強いな。スカートはいてこないで良かった。

2011年04月27日

  • 09:14 風強いな。スカートはいてこないで良かった。
  • 09:26 駅からオフィスの間にベーカリーないかな。そろそろお昼にパン食べたい。ちょっと横道に入るぐらいの範囲にあると嬉しい。
  • 09:42 出社。
  • 10:09 そういえば、朝ドリンクマシーンでアイスコーヒーをチョイスしたら、カルピスみたいなのが出てきた。ミルク水だった(まだ机の上にある)。
  • 12:16 上のフロアに巨大な虎がいてビックリした。PostScript のアレみたいな顔の。
  • 12:43 初学食。
  • 12:46 イーゴカード気になる。
  • 14:46 cpanm 入れて perltidy をセットアップ。perltidy が無いと Perl プログラム書けない。
  • 14:52 1行も修正しないでチケットをクローズできる予感。
  • 15:52 ack も入れて (setq grep-find-command "~/local/perl/bin/ack --nocolor --nogroup ")
  • 16:56 Becky! また「データの整合性エラーが発生しました。」が出た。泣ける。Sylpheed にするか。
  • 17:10 やはり1行も修正せずにチケットクローズった。
  • 17:37 @yasa_gurek0 花粉まだ飛んでますね。止めてみたんですが、そうしたらムズムズが戻ってきました。
  • 18:21 @mahoyaya こちらは Becky! で連日でまくりです。最新バージョンなんですけどねぇ。
  • 18:34 退勤。この時間でも風強いままだな、今日は。
  • 18:57 @yasa_gurek0 やはり例年通りゴールデンウイーク明けまでは飛ぶんですかねぇ
  • 21:38 次の URL から Cacoo 登録すると作成できるシート数が +5 っていうのやってる。 https://cacoo.com/r/y8Zcb @cacooapp
  • 21:39メールきてたから、もうみんな紹介してるのかな。
  • 22:26 @nye_c ありがとうございます。16進数的にはまだまだ……(というありがちな言い訳)。
  • 22:46 「秋田の書店」ってあったのを見て「秋田書店?」と思ったけど、秋田書店の本社は東京都千代田区飯田橋
  • 22:46 秋田貞夫氏によって創立されたから秋田書店なのか。
[ 4月27日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.074706s / load averages: 0.38, 0.42, 0.50
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker