2004-09-10

tdiarygrep 追加

msearch の精度の低さで放置していた日記内検索は結局 tdiarygrep にした。これは日記データに直接 grep を掛けるので負荷が高く遅いのであまりやりたくなかったんだけど、検索できない日記なんて不便でしゃあないと実はずっと前から思っていたのでこれにした。設置が楽なのが何より強み。

ちなみに今回入れたのはオリジナルの方。これで Google が拾ってくれなくても検索できる。よしよし。

FreeBSD で自分に必要な update だけを知る

方法が分からない。ただ、作る方法はあるなぁと思っている。

  1. pkg_db と ports skelton の distinfo を比較して skelton の方が新しいやつをリストアップ
  2. pkg_db と FreshPorts を比較して、FreshPorts に新しい情報が出ているやつをリストアップ
    • どこまで戻るかがあれだけど。手元の skelton より新しい日付は全部さらうってのもアリだな。
  3. pkg_db と CVSWEB と比較するのは面倒そうなのでやりたくない

ほんとは portupgrade でできるような気がしないでもないんだけど、man をざっと見た限りはそんな機能なさそう。

みんなこういうのまったく必要に感じないのかな? 誰か作ってくんないかなぁ。local で閉じる場合は以下のような感じ?

  • /var/db/pkg 内の directory 名をさらって
  • バージョン番号と package の名前を分割してハッシュにする
  • 名前で whereis を掛けると skelton の位置が分かる
  • distinfo を読んでバージョンを比較
  • 食い違ってるやつを出力

と思ったら

portupgrade -an

でいいっぽいぞ。何やってんだ、おれ。

あー。すごい重い。しゃーないっちゃしゃーないけど。なんか全部 Makefile なめてるし。やっぱもっと pkgdb と distinfo だけをうまく使った方法があってもいいような気がするな。

portupgrade -an の結果を整形

重たいのは承知のうえで富豪手抜きアプローチ。こんな感じで。

#! /usr/bin/env ruby
# -*- ruby -*-

print "Have you executed CVSUP recently ?\n"
print "Please wait for a while. Take coffee break ;-)\n"

needupgrade = Hash.new()

cmd = open( '| sudo portupgrade -an 2>&1' )
while line = cmd.gets
  if ( line =~ /Upgrading '(.*)' to '(.*)'/ )
    needupgrade.store( $1, $2 )
  end
end
cmd.close()

if ( needupgrade.size > 0 )
  maxlength = 0
  needupgrade.keys.each { |string|
    if ( string.length > maxlength )
      maxlength = string.length
    end
  }

  needupgrade.keys.sort.each { |pkg|
    printf( "%-*s --> %s\n", maxlength, pkg, needupgrade[pkg] )
  }
else
  print "All ports are up-to-date ! Congratulation !\n"
end

STDERR をリダイレクトしてるのは no need な upgrade の情報が STDERR に出ちゃうのでそれをカットするため。

これでインストール済みの ports のうち、アップデートがあるものをリストアップできる。もちろん cvsup はしてないとダメだし、pkgdb が矛盾してて portupgrade の出力が途中で止まった場合のことは考慮してません。

名づけて listupgrade かな?

るびま創刊

イマドキ、という感じがしないでもない Web Magazine が創刊されました。

Rubyist Magazine

日本 Ruby の会責任編集。Code Reading 読んでみるかなぁとか、なんだかんだ影響受けてたりしますが。

About

例によって個人のなんちゃらです