2007年6月28日木曜日

名古屋

emobileは、名古屋駅では当然使えたけど、長久手の方はだめだった。
エリアマップを見ると、ぎりぎりエリア外か。

ちょっと時間があったので、新幹線の改札の近くにあった、喫茶店で休憩して、
珍しいので、あずきカプチーノを頼んでみた。
予想を上回るものが出てきたが、当然ながら、あずきは全部入れた。

最初は、ちょっとあずきの風味がする、かなり甘いコーヒーだけど、
最後の方は、コーヒーのにおいがするあずきを食べることになる。
まあ、残せばいいんだけど。

帰ってきて調べたら、有名なものみたいね。


DCF_0070

日付incrementをリストの内包表記で書いてみた

リストの内包表記で、ジェネレータが作れるのを忘れていたので、
考えてみたけど、こんなのしか思いつかなかった。

毎回、timedeltaを作るから、なんかもったいないな。

前回yieldした値がとれれば、前回+deltaを返すだけなんだけどな。

>>> from datetime import timedelta, date, datetime
>>> d = date(2007, 6, 23)
>>> delta = timedelta(days=1)
>>> for i in (d+timedelta(days=x) for x in range(0, 10)):
  print i

2007-06-23
2007-06-24
(省略)

なんとか、毎回timedeltaを作らないようにしてみたけど、さすがにこっちの方が遅いな。
timedelta作らなくても、rangeでタプル作ってて意味なさそうだし、reduceで関数呼びまくるし。

>>> for i in (reduce(lambda x,y: x+delta, range(0, c), d) for c in range(0, 10)):
  print i

2007-06-23
2007-06-24
(省略)



mono meeting

おわった。
今日の収穫

  • ag = 銀

Windowsのfiberの話は、おもしろかった。
Windowsのfiberを、複数のスレッドをまたいで動かそうとすると、やばいことが多いよという話。

moonlightはXAMLとかが結構動かせていて、期待できるかもと感じたが、
今のところSliverlightのやつをそのままではなくて、portingしているものもあるらしい。
そのままどっちでも動かせるようになったら、何か作ってみようかな。
(着いたときから、ちょっと眠かったので、なんか誤解してるかも)


Python Workship the Edge 2007に行く人が、すぐ近くに二人いて、ちょっと驚いた。
まあ、IronPythonがあるから、それなりに関連はあると思うけど。



2007年6月27日水曜日

Jericho HTML Parser 2.4が出てた

仕事でもたまに使っている、Jericho HTML Parser2.4がリリースされていた。
これは、HTML/XMLがぶっ壊れててもそれなりに読めるうえに、extractTextが最高に便利で手放せません(2.4でdeprecatedになったけど、ちゃんと代替手段がある)。
LuceneでIndex作るときとか、mecabを使うときに活躍してます。

StAXと、これがあるから、結局Javaをつかうことになることが多いな。

そのうちサンプルおいてみようかな。



2007年6月20日水曜日

VistaでNetscreenとのVPN接続

Vistaに対応したNetscreen-Remoteが今のところないのだが、VPNが使えないと困るので、Vistaでどうにかならないか調べてみた。

Vista(or XP)のIPSecでつなぐのは、認証設定&こっちが動的アドレスでは無理っぽいので、VMWareをつかってその中でつなぐようにしてみた。

VMwareのNATでつないでみたが、IKEとかは済んで、鍵のアイコンも出るのだが、VPN上で通信できない。
ホストOS側でキャプチャすると、port unreacheableを返しているっぽい。
なお、VistaでPPPの接続をキャプチャできたのは、Microsoft Network Monitor 3.1betaだけだった。Network Monitor 3.0とかWireshark 0.99.5では、キャプチャできなかった。

で、さらに調べていたら、ICSを使っている例があったので、HostOnly&ICSを組み合わせてみたら、無事に通信できた。
ダイアルアップ接続に、HostOnly用のアダプタとの接続共有を設定するだけ。


XPにしたからどうでもいいけど、一応書いてみる。



Vistaやめた

あまりに重すぎるから、プレインストールされていたWindows Vista™ Businessを消して、ライセンスが余ってたWindows XP(Pro.)にした。
PentiumM(753/1.2GHz)からC2D(U7500/1.06GHzに変わったから、dualcoreになったけど、クロックは下がったから、
ピークが落ちてるのかもと思っていたが、同じマシンとは思えないほど快適になった。



2007年6月12日火曜日

Pythonで日付インクリメント

ログの集計で、日付を一日ずつ進めていく必要があるので、久しぶりに日付周りを調べてみた。
いまは、datetime.timedeltaがあるから、timeでがんばらなくてよくなって、わかりやすくなったね。

>>> from datetime import timedelta, date
>>> d = date(2007, 6, 1)
>>> delta = timedelta(days=1)
>>> d+delta
datetime.date(2007, 6, 2)
>>> def date_generator(start_date, end_date, delta):
  d = start_date
  while d <= end_date:
    yield d
    d += delta

>>> for d in date_generator(date(2007, 6, 1), date(2007, 6, 4), timedelta(days=1)):
    print d

2007-06-01
2007-06-02
2007-06-03
2007-06-04



psyco(python)をつかってみた

今作ってる、ログを読んで解析(logbackでスレッド名毎にまとめたりする)&DB(SQLite)につっこむスクリプトでpsycoをつかってみた。
コード自体は単純で量もあんまり無いので、とりあえず、先頭に以下の二行を足しだけ。

import psyco
psyco.full()

13分かかってたのが、11分になった。何にもしないで、これだけ速くなればいいな。
小手先の最適化(文字列比較でinternしたりとか)はやってみたし、これ以上速くしたいなら、プロファイルとらないとだめだな。
まず、pysqlite2/SQLite3がどのくらいの時間を占めているか調べないと、やるだけ無駄かもしれないし。

PyPyのJITも気になったけど、ドキュメント読んでる暇がなかったから、あとまわし。



2007年6月11日月曜日

emobile

D01NXの外部アンテナなしで、東銀座と、新横浜では問題なく使えた。
今月末行く予定の名古屋はどうかなー。



vistaでbeepがうるさい

VistaでJaneをつかうと、beepがうるさいので、どうにかならないかと調べたら、どうも回避できるっぽい。
Slightly annoying bug: beep on listview selection change.

DelphiのTListViewが問題のようだが、当分これでしのげばいいかな。
それか、ほかのに乗り換えるか。



2007年6月8日金曜日

eix-syncの差分

eix-syncしたあとに表示される差分は、eix-sync -dで、再度みられるのに気づいた。
diff-eixで前回のファイル名を指定するより楽だな。



booでDnD

IronPythonでDnDをbooでまねしてみる。
さすがにあんまり変わらんかな。

namespace DnD

import System
import System.Collections
import System.Drawing
import System.Windows.Forms
import System.Windows.Forms.DragDropEffects
import System.Windows.Forms.DataFormats

class MainForm(System.Windows.Forms.Form):
    def constructor():
        InitializeComponent()

    private components as System.ComponentModel.IContainer = null
   
    protected override def Dispose(disposing as bool):
        if disposing:
            if components is not null:
                components.Dispose()
        super(disposing)
   
    def InitializeComponent():
        self.listBox1 = System.Windows.Forms.ListBox()
        self.SuspendLayout()
        #
        # listBox1
        #
        self.listBox1.AllowDrop = true
        self.listBox1.Dock = System.Windows.Forms.DockStyle.Fill
        self.listBox1.FormattingEnabled = true
        self.listBox1.ItemHeight = 12
        self.listBox1.Location = System.Drawing.Point(0, 0)
        self.listBox1.Name = "listBox1"
        self.listBox1.Size = System.Drawing.Size(292, 268)
        self.listBox1.TabIndex = 0
        self.listBox1.DragEnter += self.ListBox1DragEnter as System.Windows.Forms.DragEventHandler
        self.listBox1.DragDrop += self.ListBox1DragDrop as System.Windows.Forms.DragEventHandler
        #
        # MainForm
        #
        self.AutoScaleDimensions = System.Drawing.SizeF(6, 12)
        self.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        self.ClientSize = System.Drawing.Size(292, 271)
        self.Controls.Add(self.listBox1)
        self.Name = "MainForm"
        self.Text = "MainForm"
        self.ResumeLayout(false)

    private listBox1 as System.Windows.Forms.ListBox
   
    private def ListBox1DragEnter(sender as object, e as System.Windows.Forms.DragEventArgs):
        if e.Data.GetDataPresent(System.Windows.Forms.DataFormats.FileDrop):
            e.Effect = DragDropEffects.All
        else:
            e.Effect = DragDropEffects.None
   
    private def ListBox1DragDrop(sender as object, e as System.Windows.Forms.DragEventArgs):
        data = e.Data.GetData(DataFormats.FileDrop, false) as (string)
        for s in data:
            print self.listBox1.Items.Add(s)

[STAThread]
def Main(argv as (string)):
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(false)
    Application.Run(MainForm())



2007年6月7日木曜日

nioとgzip

普通のファイルを読むつもりで、java.nioを使って書いてたら、gzipされたファイルも読まないといけなくなった。
GZIPInputStreamからは、ReadableByteChannelが取得できないので、困っていた。

FileInputStreamからFileChannel取得していたので、環境が限定されるけど、/dev/stdinでも使おうかと思ったら、
FileInputStreamのコンストラクタで、FileDescriptorを渡すものがあるのに気づいた。

ということで、FileInputStreamコンストラクタに、FileDescriptor.inを渡して解決しました。

まあ、複数のファイルは読めないけど、今回は全部つながっててもいいので、
gzip -dc *.gzとかすれば問題なし。



2007年6月6日水曜日

Boo 0.7.7

いつの間にかBoo-0.7.7がでてた



Vistaのメモリ診断ツールが動かなくなった

TrueImageでバックアップから復元したら、0xc0000225とかいうエラーが出て、メモリ診断が起動しなくなった(その前に一度も起動してなかったけど)。


bcdedit set {memdiag} path \boot\memtest.exe
bcdedit set {memdiag} device partition=c:


で直った。