2009/06 | 2009/07 | 2009/08
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2009年7月 1日

ステロイド・アステロイド

ここ1週間で寿司3回も食べてるぞ。

家の用事のために午後半休 & 病院へ。ばあちゃんが検査した後迎えに行けという指令で、しかも、帰りに寿司を希望とのことで(検査の前は血を採るからご飯食べれんし)。…というわけで3回目なんですが。スシロー、漁漁、くら…とまったくてんでばらばら。

祖母が先日原因不明の状態のまま入院をすることになって、その後薬にステロイドが使われることになった(その経緯は知らない)んやけど、ステロイドは強すぎる薬なので急に服用を止めると副作用が激しいようで、服用する量を徐々に下げていく必要がある(なんかタバコやめるときみたいな感じやね)。後期高齢者にステロイドを使うのがほんまにええのんかどうかというのは個人的には思うけど、それはそれとして、

「もう数値上はなんともないけど、薬だけどんどん出して、また数ヶ月経って薬出して、薬ばっかり飲ませようとして…」

要は、検査しても異常値は出てこないけど薬だけ出してくるというのに、薬代をせびられているように感じているようです。薬が強いから、薬を徐々に減らさないといけないと言うのは説明されてるんですけど、どうやらその説明が理解できないようで…というか、難しくて受け付けないんでしょうか。

ボケというのもありかとは思いますが、ひ孫の話題にはちゃんとついていっているので、話題に選択性があるだけということかと。高齢者に新しい薬とか、しかも基本一人でいる人にってのはなんか怖いですね。

▲top

投稿者 ただ : 21:34 | トラックバック (0) カテゴリー ; mein Erbe

2009年7月 5日

注目されない選挙

知事選があったので、よっこらしょと投票へ。あんまりこっちの知事選は注目されてないね…ていうか、注目しようもないか。

まぁ、ちょっと前に「チャンス」とか失言っぽいのもあったことはあったけど、全体的には致命的な失敗をしたわけでもなく、インフル対策でも中途半端な時期で交代してしまって、今年の冬に有効な対応が出来なかったりとか影響が出たら出たで困るしなーとか。こういう危機対応はやっぱり経験やろうし。

そして明らかに多勢に無勢でしょう。

▲top

投稿者 ただ : 21:40 | トラックバック (0) カテゴリー ; mein Erbe

2009年7月 6日

みんな…オラに元気を分けてくれ

日経新聞をめくっていてふと目に飛び込んできた広告があったのが、これ。

GRIDY : http://gridy.jp/

流行のSaaS型グループウェアで、特段これについては惹かれるというわけではないんやけど、利用に関してイニシャルコストもランニングコストが発生しないところが売りのよう。そして、GRIDYというこの名前の意味するところに僕は惹かれた。

GRIDYのGRIDはグリッド(分散)コンピューティングなんやね。分散コンピューティングについては、SETI@homeをはじめとして膨大な規模の解析をするにあたってスパコンじゃなくて、多数のPCの一部分を使って超並列処理をするプロジェクトとかで使われてて今じゃもちろんゲノム解析にも使われることがある。

けど、この分散コンピューティングって研究では利用されてても、利用される側のPCは特に何のメリットもなく、半ば無償の労働的な活用のされ方やったのよね。つまりはリソースは提供しててもその電気代は払ってくれない、みたいな。今回のGRIDYは、グループウェアを完全に無償にする代わりに、HDDの容量とCPUリソースを提供してもらうということらしい。そして、サービス提供側は利用者PCのリソースを分散コンピューティング用のリソースとして研究機関に有償提供する、と。一日中つけっぱなしにするPC(サーバー)があって、夜中は軽いバッチ以外特に利用してない、とかいうのがあればサービス利用のためにうってつけなんかも。

Web2.0の無料経済モデルのある意味延長上ともいうべきビジネスモデルになるんかな(行動ターゲティングとは別の方向性として)。

▲top

投稿者 ただ : 20:49 | トラックバック (0) カテゴリー ; 仕事関係 , News

2009年7月 9日

も え あ が れ!

このためだけに東京へ行ったといっても過言ではない!!
…いや、出張なんですが。しかも、限りなく雑用に近い出張。

雑用は雑用らしく、パワポ編集係として働きました。…入社して何年経つんだこの雑用係は。

というわけで、背後から撮影。後ろ姿もちゃんと光ってる!

そんでもって鉄人ばりに仰いで見る。

ちゃんと細部まで凝ってるんよね、見てるだけでもめちゃ興奮する。ガンダムがどうとかいう次元じゃなく、ここまでちゃんとしたつくりのロボットとか、気が知れんてなくらいですよ。今にも飛びそう。飛ばんのは知ってるけど(物理的にもムリよね、無重力化装置でもない限り…無理に飛ばそうもんならロケット発射台が必要やし)。

一般公開本番の2日前(オープニングセレモニーの前日)やったから、テストっぽいことやってるようやったけど、それでも見れただけで十分。

▲top

投稿者 ただ : 23:02 | トラックバック (0) カテゴリー ; お出かけ

2009年7月15日

Pylons で使う paster command を作ってみる

以前から家で使っているPylonsですが、今ひそかにRSSリーダーっぽいものを作ってます。

…Eudora8.05のRSSリーダーはなんか挙動がおかしくて、一旦取り込んだものと重複するものを取り込まないようになっているはずなのに、明らかに無視されて同じアイテムがどんどん増殖していくので、もう見るに見かねて、という感じで。InfoseekのRSSリーダーを使ってた(る)のですが、それと同じような操作感のもので自分用のを作ってしまえ、ということで。ああ、この感覚、はるか彼方昔にVB触ってたときのだ。

SQLAlchemyだったりは前にも軽く触ってきてたのでModelを作るのも、Controllerを作るのも、大して苦はなく。
で、RSSフィードを登録したり取り込んだURLにリファラを隠してジャンプさせたりすることまでとりあえず出来たので、今度は定期的にRSSを更新する機能を…と思ってたんですが、Railsでもなかなか充実してないこの機能、やっぱりPylonsでも状況的には同じということでしょうか。

RoRでは、RailsアプリでActiveRecordを使ったバッチ処理 その3(ref. ひげろぐ)なんかにまとまってたりします。やっぱり、バッチ処理とかしようもんならActiveRecordが有効になってることに越したことはないから、script/runner コマンドは重宝するようで。

Pylonsでは、Cron jobs and command-line utilities(ref. Pylons Cookbook)で、paster COMMAND のCOMMANDを作る方法が書かれている。…んやけど、Railsのscript/runner やったりPylonsのpaster shell のように必要なモジュールがあらかじめ読み込まれてるとかそんな親切なことはやってくれてないんよね。というのも、Pylons によるオレ様フレームワークの作り方(2)(ref. Loose Agilist)やPasteScriptでコマンドを作る(ref. aodag blog)にあるように、テンプレートだったりプロジェクトのファイルを生成するんに便利なようになってるらしいから…? Pylons Cookbookにもあるけど、「paster COMMANDでプロジェクトのモジュールを読み込ませるにはShellCommandのソースコードを参照して」というなんともそっけない解説のみ。

▲top

投稿者 ただ : 22:13 | トラックバック (0) カテゴリー ; プログラミングとか

Pylons で使う paster command を作ってみる(2)

というわけでー(ざこば師匠風に)。

ShellCommandクラスをざっと見たけどなんかさっぱりわけワカメ(死語)だったんで、なんとか必要なパーツをかき集めてみる。プロジェクト名が rssret として、ま、まずは軽くrssret/commands/__init__.py と RSSフィードの自動取得のためのスクリプトとして、autoupdates.pyを作る。

from paste.script.command import Command

from paste.deploy import appconfig

import os
from datetime import datetime, timedelta

from rssret.config.environment import load_environment
from rssret.model.rssuri import RssUri
from rssret.model.feeditem import FeedItem

class AutoUpdatesCommand(Command):
  # Parser configuration
  summary = "--NO SUMMARY--"
  usage  = "--NO USAGE--"
  group_name = "myapp"
  parser = Command.standard_parser(verbose=False)

  def command(self):
    heredir = os.path.dirname(__file__)
    conffile = (len(self.args) and self.args[0]) or 'development.ini'

    while not os.path.exists(os.path.join(heredir, conffile)):
      heredir = os.path.join(heredir, '../')

    conf = appconfig("config:%s" % os.path.join(heredir, conffile))
    load_environment(conf.global_conf, conf.local_conf)

    from rssret.model.meta import Session as s

    tm_ago = datetime.now() - timedelta(minutes=10)
    for r in s.query(RssUri).filter(RssUri.last_accessed<tm_ago).all():
      print "Checking %s ..." % r.title.encode('utf-8')
      u = r.retrieveItems()
      s.commit()

      if u.filter(FeedItem.created_date>tm_ago).count() > 0:
        print " New feed item found"

    print "Update done at %s." % datetime.now()
    print

ポイントは、

  • load_environment()を使う

  • load_environment()にはpylons.configは使わなくて、paste.appconfigを使う

  • DB engineを保持しているmodel.meta.Sessionは、load_environment()の後にインポートする

とりあえず、これでcommand()の中でModelが不自由なく使える。
paster commandの作り方の中には、setup.pyに[paste.paster_command]\nrssupdates = rssret.commands.autoupdates:AutoUpdatesCommandを入れると書いてあったけど、手っ取り早く使えるようにするためには、egg-infoのentry_points.txtとpaster_plugins.txtの編集をするのでも十分(setup.pyに書いておけば、easy_installでインストールしたときに適用されるけど、インストールが必要)。

$ vi rssret.egg-info/entry_points.txt
  [paste.app_factory]
  main = rssret.config.middleware:make_app

  [paste.app_install]
  main = pylons.util:PylonsInstaller

  [paste.paster_command]
  rssupdates = rssret.commands.autoupdates:AutoUpdatesCommand

Railsの、script/runner よりかは起動のオーバーヘッドがマシな感じがする。

▲top

投稿者 ただ : 23:26 | トラックバック (0) カテゴリー ; PinMarch Samples , プログラミングとか

2009年7月16日

インデックスだけでは済まなかった

会社の案件ではRoRを扱ってるので、前日のバッチ処理なんかは調査のついでという感じだったんですが、

Ruby on Railsでcronでバッチ処理する(ref. Web7s)

みたく、script/runner cron.rb -e production とかすると簡単にModelが利用可能な状態でコマンドラインから処理できるようで。

RailsアプリでActiveRecordを使ったバッチ処理 その2(ref. ひげろぐ)

では、なんかscript/runner ではワンライナー的なものしか使えなくてファイルを実行するにはリダイレクトとか 'eval(IO.readlines("hoge.rb").join)' で無理やりワンライナーにするという解が示されてた…。不安やったんでワンライナー形式にてバッチ処理実行。バッチ処理の内容も特殊といえば特殊(画像をクロップするほうがメインやったり)なもんで、DB周りの負荷はあんまり注意してなかったんですが。ファイルの転送にえらい時間がかかる(10MB×824個=ざっと8.2GB?)。画像ファイルの容量でかすぎ。

データを入れた後、Webで画面を表示してみたところ、処理にえらく時間がかかるようになってしまった。DBに38秒ってどんなけアクセスしてるんだ。script/console でコマンドラインからクエリーを発行してみたら、そのクエリー自体は10秒程度で終わってるにもかかわらず、さらに細々としたクエリーを合わせると結構時間を取られているようで。外部結合がまず疑わしいので、インデックス張ったりしてみたりしたものの、やはり動作が鈍い。824件のレコードを、画面につらつらと表示させているのがどうも遅いために時間がかかっている…みたいで。

試しに、:select で拾ってくるカラムを絞ってみたら明らかに体感速度がマシになった。どうやら、レコードをオブジェクトに変換してるところがネック?

▲top

投稿者 ただ : 22:05 | トラックバック (0) カテゴリー ; プログラミングとか

2009年7月19日

1食単価700円

再びボーリングへと行くことになり。しかも前回全く方向を間違えた心斎橋にまた。今回は、ちゃんと梅田で最後尾に乗ったんで、心斎橋で出口を間違えることもなく。スコア的には久しぶりにちゃんと出たという感じでした…。

なんか、「握り半額やったらそこで」とかいう暗黙のルールみたいなんができてて

気がついたら2,000円分(外税)食ってた。3食分食べたので、1食当たり700円也。

心斎橋を出たときにちょっと降り始めた雨は、梅田を飯を食って、三宮に着いたら土砂降りになってた。しかも半端じゃない豪雨であっけにとられた…。ケータイで雨雲レーダー見たら数時間は弱まりそうにないし、…困った。

道路が冠水してパトカーが巡回する中、隙を見つけて走って帰った。走っても、歩いても、雨に濡れたときの水の量はさほど変わりがない(嵐の実験より)のは分かっちゃいるけど、ところどころ屋根とか高架があるから、雨宿りできる場所までは走る。

その前後を含めたら5時間くらいはずっと雷光りっぱなし鳴りっぱなしですごかった。電気系統に異常が出なくてよかった。

▲top

投稿者 ただ : 23:28 | トラックバック (0) カテゴリー ; お出かけ

2009年7月21日

ROOKIES -卒業-

また濡れた。

レイトショーはレイトショーでも、今回はミントではない。HATでござい。…というのも観よう観ようとは思ってたにもかかわらず、ようやく観ると決めたときにはミントでのレイトショー上映がなくなってたので。歩いて行けるかなーと不安やったけど、行けんことはなかった。景色が変わらなさすぎて途中で飽きてきたけど。ジョギングで往復とかならOKかも。

歩いてどんなけかかるか分からんかったから、余裕を持って夕飯をびっくりドンキーで食っていこうと思って、店に行ったら、

アテンダ(バイトの女の子)「何名様ですか?」

僕「1人です」

アテンダ「・・・」

えらく不可思議な目で見られた。「えーこんな時間に1人で来るか!?」みたいな。ダメですか!?

30分くらいで食べていざHATへ行ったら、20分ちょっとで着いてしまった。意外と近かった。電車で2つ目の駅降りて歩いて10分やから、ひょっとしたら直接歩いて行った方が早く着くかもしれない。その結果、2時間くらい時間を潰さなければならんくなり、1時間はドトールで半分寝てて、残りは探検と本屋。…それ以外に潰すところがネェ。まぁ、ボケーっとしながらも書かねばならん書類の文言考えてたりもしてたけど。

で、映画が終わったら24時前、雨がザーザー降ってんの。ヤラレタ。

▲top

投稿者 ただ : 00:55 | トラックバック (0) カテゴリー ; お出かけ

2009年7月22日

日蝕終わってから晴れてきた

今日届いたとあるメールから一節、

書類選考の結果、貴殿には面接選考にご参加頂きたく存じます。
つきましては、貴殿のご希望を参考に下記の面接日時を
設定させて頂きましたので

おぉ、えらく上から目線でびっくりした。

日蝕は残念ながら見ることできずでした…(ちょっと手が離せなくて)。しかし昼休みになってから滅茶苦茶日が差してきてえらい暑かったんですけど。ほんま困りもんです。

▲top

投稿者 ただ : 22:47 | トラックバック (0) カテゴリー ; mein Erbe

2009年7月24日

言葉を選ぶと返答につまる

仕事を早めに切り上げて、面接って来た。
ぬぬー言葉を選ばないといけないと言うのはやっぱり緊張するなぁ…。

さすがに

「時間の方は大丈夫ですか」

と言われて

「ええ、大丈夫っすよ! 特段忙しいわけじゃないですし!」

とは言えんからなぁ。

まぁ、比較的いいトス上げてくれたので打ちやすかった。
終わった後「面接する方も緊張する」と言われたけど、面接しなきゃならん立場になったらと思うと、確かに期待する答えが返ってくるような質問をしないといけないから、論理的に追い込むとかよりもすごい難しいんやろうな…。

でもほんまに忙しくないというのは問題やな。来月からはちょっと危険な香りが漂ってるんよね…特に9月になると予期せぬ大型連休が。ってこの時点で言ってることが予期されてるけど。

▲top

投稿者 ただ : 22:59 | トラックバック (0) カテゴリー ; mein Erbe

2009年7月27日

18メートル

でかい顔! 鉄人28号の頭部到着 神戸・長田(ref. 神戸新聞)

東京で見てきた(実寸大)ガンダムも、18メートル。

なんか18メートルってのがある種のトレンドだったのか。

▲top

投稿者 ただ : 22:22 | コメント (2) | トラックバック (1) カテゴリー ; mein Erbe

2009年7月31日

TWiki日本語大作戦 リターンズ

TWiki 4.2以上でトピックを編集するときに、自動的にWYSIWYGエディタが使われるようになってるんですが、このWYSIWYGエディタを使うと日本語が大変なことになるんですよねー。個人的にはraweditを使えば全然問題ないんで、特に困ってはないんですが、他人も編集するようにするとなってはそうも言ってられず。

Railsのto_jsonメソッドにも同じような問題があるんで、そのときの対応を参考にさくっと直そう…と思ったら全然参考にならんのでやんの。WYSIWYGエディタの場合、raweditと切り替えが出来るんやけども、そのときにプラグインに定義してあるルーチンをAjaxで呼び出しているらしい。

ということで、$TWIKI_HOME/lib/TWiki/Plugins/WysiwygPlugin ディレクトリのHTML2TML/Leaf.pmと、TML2HTML.pmを編集。

$ diff -c HTML2TML/Leaf.pm.bk HTML2TML/Leaf.pm
*** HTML2TML/Leaf.pm.bk 2009-07-31 17:09:34.000000000 +0900
--- HTML2TML/Leaf.pm 2009-07-31 16:55:18.000000000 +0900
***************
*** 64,69 ****
--- 64,70 ----
          $t =~ s/\[/[/g;
      }
      unless ($options & $WC::KEEP_ENTITIES) {
+         $t =~ s/%u([0-9A-F]{4})/chr(hex $1)/ego;
          $t =~ s/&($text_entities_re);/chr($text_entities{$1})/ego;
          $t =~ s/ /$WC::NBSP/g;
      }

$ diff -c TML2HTML.pm.bk TML2HTML.pm
*** TML2HTML.pm.bk 2009-07-31 17:09:09.000000000 +0900
--- TML2HTML.pm 2009-07-31 17:06:04.000000000 +0900
***************
*** 290,295 ****
--- 290,297 ----
      $text =~ s/$TT0(#[0-9]+;)/&$1/go;
      $text =~ s/$TT0([$TWiki::regex{mixedAlphaNum}]+;)/&$1/go;
 
+     $text =~ s/%u([0-9A-F]{4})/&#x$1;/gs; ## append
+
      # Horizontal rule
      my $hr = CGI::hr({class => 'TMLhr'});
      $text =~ s/^---+$/$hr/gm;

TWikiのデコードのほうが楽やった。まぁ最新のでは直ってるのかもしれんけど。

▲top

投稿者 ただ : 22:11 | トラックバック (0) カテゴリー ; Perl , プログラミングとか

2009/06 | 2009/07 | 2009/08