01
March, 2007*

attachスパムへの対策その後2 *

attachされたファイルのリンク元をたどっていくと、PukiWikiではなくblogに行き着いた。

ページランク上げではなく、単純にtrackbackスパムのリンク元に使われていた :(

3月 *

あっという間に年度末。

今月はイベントてんこ盛り ;)

 

 

02
March, 2007*

Picasa Web *

http://picasaweb.google.co.jp/home

-じゃま研さんの日記より

250MByte使えて便利そう。
アルバムPukiWikiで管理しようと考えたこともあったけど、PicasaをWikiページに取り込むのも面白そうだ :)

とりあえず専用のアカウント取得 ;)

明日は広島なので、無理をせずに寝よう...

 

 

03
March, 2007*

広島-呉方面 *

map.png

私用で広島方面に移動。しかも日帰り X(

大和ミュージアム *

アルバム/2007-03-03 呉

落語 in 広島 *

mon.jpg

遠いよ :(

 

 

04
March, 2007*

Google Picasa アルバム *

http://picasaweb.google.co.jp/home

Google Picasa用のプラグインを書いてみた。

サーバ/PukiWiki/picasa

思ったより使えそうだ :)

Google サイトマップ *

コメントによると、 www.google.com/schemas/sitemap/0.84 よりも www.sitemaps.org/schemas/sitemap/0.9 の方が良いらしい。

http://www.sitemaps.org/protocol.html

にしたがって、schema関係変更。

 

 

05
March, 2007*

Picasa Web *

写真ごとに #comment を入れたい気もするが...

写真をWiki側に取り込んでいないので、attachディレクトリも圧迫しないしページの作成も削除もお手軽。

試しに2つのアルバムを作った :)

ニコニコ動画 *

http://www.nicovideo.jp/

何とかガンマテスターになれたのに、まだ再開せず :(

中の人は大変なんだだろうなぁ...

 

 

06
March, 2007*

URL長すぎ *

http://su-u.jp/juju/%A5%A2%A5%EB%A5%D0%A5%E0/2006-07-29%20%C0%B1%A4%CE%B2%A6%BB%D2%A4%B5%A4%DE%A5%DF%A5%E5%A1%BC%A5%B8%A5%A2%A5%E0.html

ページ名がそのままURLになる仕様なので、ものすごく長くなった :(

将来UTF-8化なんかしたら、さらに50%増しと思うと...

ニコニコ動画(γ) *

復活しているのでマッタリ。

相変わらす、「陰陽師」と「とかち」が人気 :)

 

 

07
March, 2007*

定例会 *

週末は定例会。

仕事に少し余裕ができた(ような気がするだけかも)ので、参加できそう。

でも、日曜仕事してそうだ。

コンテンツ *

気が付いたら、コンテンツの97%が日記でした X(

最終手段 *

Application.ScreenUpdating = False

なんでもかんでもScreenUpdatingを入れるのはどうかと... :(

 

 

08
March, 2007*

VBでハッシュを求める *

MD5をVBで処理すると遅くなってしまうので、advapi32.dllを使うと簡単だし速い。

あまりサンプルが見当たらなかったので、書いてみた :)
(ついでもあったのでSHAも...SHA-256のサンプルはあるのか?)

Option Explicit

Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" _
                            (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, _
                             ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptReleaseContext Lib "advapi32.dll" _
                            (ByVal hProv As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptCreateHash Lib "advapi32.dll" _
                            (ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, ByVal dwFlags As Long, _
                             ByRef phHash As Long) As Long
Private Declare Function CryptDestroyHash Lib "advapi32.dll" _
                            (ByVal hHash As Long) As Long
Private Declare Function CryptHashData Lib "advapi32.dll" _
                            (ByVal hHash As Long, pbData As Any, ByVal cbData As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptGetHashParam Lib "advapi32.dll" _
                            (ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, ByRef pcbData As Long, _
                             ByVal dwFlags As Long) As Long

Private Const PROV_RSA_FULL   As Long = 1
Private Const PROV_RSA_AES    As Long = 24
Private Const CRYPT_VERIFYCONTEXT As Long = &HF0000000

Private Const HP_HASHVAL      As Long = 2
Private Const HP_HASHSIZE     As Long = 4

Private Const ALG_TYPE_ANY    As Long = 0
Private Const ALG_CLASS_HASH  As Long = 32768

Private Const ALG_SID_MD2     As Long = 1
Private Const ALG_SID_MD4     As Long = 2
Private Const ALG_SID_MD5     As Long = 3
Private Const ALG_SID_SHA     As Long = 4
Private Const ALG_SID_SHA_256 As Long = 12
Private Const ALG_SID_SHA_384 As Long = 13
Private Const ALG_SID_SHA_512 As Long = 14

Private Const CALG_MD2        As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2)
Private Const CALG_MD4        As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4)
Private Const CALG_MD5        As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5)
Private Const CALG_SHA        As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA)
Private Const CALG_SHA_256    As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA_256)
Private Const CALG_SHA_384    As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA_384)
Private Const CALG_SHA_512    As Long = (ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA_512)

' Create Hash
Private Function CreateHash(abytData() As Byte, ByVal lngAlgID As Long) As String
    Dim hProv As Long, hHash As Long
    Dim abytHash(0 To 63) As Byte
    Dim lngLength As Long
    Dim lngResult As Long
    Dim strHash As String
    Dim i As Long
    strHash = ""
    If CryptAcquireContext(hProv, vbNullString, vbNullString, _
                           IIf(lngAlgID >= CALG_SHA_256, PROV_RSA_AES, PROV_RSA_FULL), _
                           CRYPT_VERIFYCONTEXT) <> 0& Then
        If CryptCreateHash(hProv, lngAlgID, 0&, 0&, hHash) <> 0& Then
            lngLength = UBound(abytData()) - LBound(abytData()) + 1
            If lngLength > 0 Then lngResult = CryptHashData(hHash, abytData(LBound(abytData())), lngLength, 0&) _
                             Else lngResult = CryptHashData(hHash, ByVal 0&, 0&, 0&)
            If lngResult <> 0& Then
                lngLength = UBound(abytHash()) - LBound(abytHash()) + 1
                If CryptGetHashParam(hHash, HP_HASHVAL, abytHash(LBound(abytHash())), lngLength, 0&) <> 0& Then
                    For i = 0 To lngLength - 1
                        strHash = strHash & Right$("0" & Hex$(abytHash(LBound(abytHash()) + i)), 2)
                    Next
                End If
            End If
            CryptDestroyHash hHash
        End If
        CryptReleaseContext hProv, 0&
    End If
    CreateHash = LCase$(strHash)
End Function

' Create Hash From String(Shift_JIS)
Private Function CreateHashString(ByVal strData As String, ByVal lngAlgID As Long) As String
    CreateHashString = CreateHash(StrConv(strData, vbFromUnicode), lngAlgID)
End Function

' Create Hash From File
Private Function CreateHashFile(ByVal strFileName As String, ByVal lngAlgID As Long) As String
    Dim abytData() As Byte
    Dim intFile As Integer
    Dim lngError As Long
    On Error Resume Next
        If Len(Dir(strFileName)) > 0 Then
            intFile = FreeFile
            Open strFileName For Binary Access Read Shared As #intFile
            abytData() = InputB(LOF(intFile), #intFile)
            Close #intFile
        End If
        lngError = Err.Number
    On Error GoTo 0
    If lngError = 0 Then CreateHashFile = CreateHash(abytData(), lngAlgID) _
                    Else CreateHashFile = ""
End Function

' MD5
Public Function CreateMD5Hash(abytData() As Byte) As String
    CreateMD5Hash = CreateHash(abytData(), CALG_MD5)
End Function
Public Function CreateMD5HashString(ByVal strData As String) As String
    CreateMD5HashString = CreateHashString(strData, CALG_MD5)
End Function
Public Function CreateMD5HashFile(ByVal strFileName As String) As String
    CreateMD5HashFile = CreateHashFile(strFileName, CALG_MD5)
End Function

' SHA-1
Public Function CreateSHA1Hash(abytData() As Byte) As String
    CreateSHA1Hash = CreateHash(abytData(), CALG_SHA)
End Function
Public Function CreateSHA1HashString(ByVal strData As String) As String
    CreateSHA1HashString = CreateHashString(strData, CALG_SHA)
End Function
Public Function CreateSHA1HashFile(ByVal strFileName As String) As String
    CreateSHA1HashFile = CreateHashFile(strFileName, CALG_SHA)
End Function

' SHA-256
Public Function CreateSHA256Hash(abytData() As Byte) As String
    CreateSHA256Hash = CreateHash(abytData(), CALG_SHA_256)
End Function
Public Function CreateSHA256HashString(ByVal strData As String) As String
    CreateSHA256HashString = CreateHashString(strData, CALG_SHA_256)
End Function
Public Function CreateSHA256HashFile(ByVal strFileName As String) As String
    CreateSHA256HashFile = CreateHashFile(strFileName, CALG_SHA_256)
End Function

' SHA-384
Public Function CreateSHA384Hash(abytData() As Byte) As String
    CreateSHA384Hash = CreateHash(abytData(), CALG_SHA_384)
End Function
Public Function CreateSHA384HashString(ByVal strData As String) As String
    CreateSHA384HashString = CreateHashString(strData, CALG_SHA_384)
End Function
Public Function CreateSHA384HashFile(ByVal strFileName As String) As String
    CreateSHA384HashFile = CreateHashFile(strFileName, CALG_SHA_384)
End Function

' SHA-512
Public Function CreateSHA512Hash(abytData() As Byte) As String
    CreateSHA512Hash = CreateHash(abytData(), CALG_SHA_512)
End Function
Public Function CreateSHA512HashString(ByVal strData As String) As String
    CreateSHA512HashString = CreateHashString(strData, CALG_SHA_512)
End Function
Public Function CreateSHA512HashFile(ByVal strFileName As String) As String
    CreateSHA512HashFile = CreateHashFile(strFileName, CALG_SHA_512)
End Function

CryptAcquireContext()を使うとき、Windows2000やXPの場合dwFlagsを指定する必要はないが、2003 Server等はセキュリティ云々でCRYPT_VERIFYCONTEXTの指定が必要。

PROV_RSA_AESが使用可能なら、SHA-256、SHA-384、SHA-512も使用可能。
環境がないのでテストできないけど、2003 ServerとかVistaなら使用可能かも。
(advapi32.dll依存ではないはず...自信なし :(

 

 

09
March, 2007*

J:COMを解約 *

ついにJ:COMを解約した。

Webによると、解約は文書でしか受け付けないとか書いている。しかも書式は書いていない :(

しかも撤去工事費も必要らしい。設置工事費に撤去費は含まれていないのか?

あとは、CSの入る環境を準備せねば...

 

 

10
March, 2007*

定例会 *

鉄道模型の話だけで90分...盛り上がりました :)

正直、その発想は思いつかなかった。

懇親会 *

今回は5時〜8時半まで。

3時間以上呑んでも、3,000円超えない。計算あってるのか?

 
  • 仕事が早く終わったら乱入!とか考えてたけど、終わったのは23時でした -- TOMO 2007-03-12 (月) 21:59:57
  • 待ってたのにー -- JuJu 2007-03-12 (月) 22:11:07

 

11
March, 2007*

PukiWiki Plus!のキャッシュ *

プラグインによってはUA_PROFILEで出力を変えてあったりするので、キャッシュもUA_PROFILE毎に分けた。

携帯で見ることはないけど、携帯用のキャッシュをパソコンで見たりすると顔文字が変 :(

ネットdeダビング機能 for LANDISK *

http://www016.upp.so-net.ne.jp/hirakky/SoftWare/index.html

via hard で loxse な日々

RDのネットdeダビングをLANDISKで使えるようにするヤツ。
これのためにだけにでもdebian26化の価値はありそう :)

とりあえず、あまっているほうのLANDISKに入れてみよう。

 

 

12
March, 2007*

携帯からの更新 *

携帯から間違って更新されることが多すぎです :(
編集用ページがクローラにインデックス化されているのが問題なんですが...

CHTML1.0にあわせて携帯用ページにはmetaを吐かないようしているのですが、もう我慢できません。

<meta name="robots" content="NOINDEX,NOFOLLOW">

1行だけ許してください。
クローラ相手にだけ付けても良いんだけど...

検索 *

サンプルソースを探していて、自分のページがヒット...
メモとして日記に書いていたのを忘れていた :(

メモだけ別ページ作ったほうが、後で探すときに便利そう。
blog見たいにタグでまとめられれば良いんだけど。

 

 

13
March, 2007*

条件付きGET *

添付ファイルとRSSに、Last-Modified:を返すようにした。

少しは転送量が減ったりするのだろうか...

mod_deflateは使わない方向で :(

ネットの調子が悪い *

夜限定でものすごく調子が悪い。

パソコンとルータには問題はなかったので、BBIQ側の問題か... X(

しばらくはネットなし生活になりそうなので、そのぐらい我慢できないと :)

 
  • うまく機能していなかったら、教えてください -- JuJu 2007-03-14 (水) 00:58:25

 

14
March, 2007*

Vistaが欲しい *

今のパソコンをVista化するとXP Professionalのライセンスがもったいないので、新しく買うしか :(

DELLは光デジタル出力が付いていないので、やっぱり作るしかないのかな。
自作するモチベーションはないなぁ X(

Googleマップ *

http://maps.google.co.jp/maps?f=q&z=20&ll=35.698264,139.772127&spn=0.001745,0.002913&t=k

凄いズームするようになったよ :)

日本は画像が荒い気がするけど。

 

 

15
March, 2007*

もじぴったんDS *

今日は、もじぴったんDSの発売日ですよ。

今週はヨドバシへ行かないので、来週買いますです :)

ROMなので、ふたりのもじぴったんは期待薄?

Google:もじぴったんうぇぶ 壁紙・MP3ダウンロード

 

 

16
March, 2007*

温度センサ *

Kick4で何度も話題になったDS18B20。

DS1820は確か大量に買った個人が、サイトでばら売りしていたような気がするけど見つからず。

DS18B20はエリスショップが取り扱っているので、それほど入手は難しくないはず。少し高くなるけど :(

自宅に数個は在庫があるので、しばらくは持ちそう :)

 

 

17
March, 2007*

最後の更新 *

ここから更新するのは多分最後 :(

しばらくはAIR-EDGE経由になりそう...

 

 

18
March, 2007*

部屋の片付け *

朝5時に起床して部屋の片付け :)

協力ありがとうございました。

 

 

19
March, 2007*

喉の調子が悪い *

昨日埃を吸い込んだのか喉が痛い :(

しかも微熱で頭があまり回らない。

[買い物]もじぴったんDS *

もじぴったん買った :)

今日は調子が悪いので、遊ぶのはまた今度。

 
  • ふたりのもじぴったん入ってました :) -- JuJu 2007-03-21 (水) 22:25:40

 

20
March, 2007*

部屋の片付け *

パソコンをまだ箱から出していないので、ノートパソコン生活 :)

画面は狭いけど、ニコニコ動画を見るにはちょうどいい感じ...メンテ中でつながらないけど :(

まだ何がどこにあるかわかりません。

 

 

21
March, 2007*

PDFのファイル名をリネーム *

http://www.shirou.jp/blog1/?p=441

shirouさんとこでの話題。

私はPDFの内部プロパティのタイトル名を取得し、ファイル名をリネームするvbsを書いて半自動化しています。
タイトルがちゃんと入っていないPDFファイルには使えないけど...

要Acrobat(Readerじゃないやつ、Elements不可)
拡張子vbsにして、ドラッグドロップで実行。

Set FSO = CreateObject("Scripting.FileSystemObject")
Set PDDoc = CreateObject("AcroExch.PDDoc")
Set Args = WScript.Arguments
For i = 0 to Args.Count - 1
    FullName = Args(i)
    If FSO.FileExists(FullName) And (LCase(FSO.GetExtensionName(FullName)) = "pdf") Then
        FileName = FSO.GetFileName(FullName)
        PathName = FSO.GetParentFolderName(FullName)
        PDDoc.Open FullName
        Title = Trim(PDDoc.GetInfo("Title"))
        PDDoc.Close
        If Title <> "" Then 
            NewFileName = Title & ".pdf"
        Else
            NewFileName = FileName
        End If
        NewFileName = Trim(InputBox("新しいファイル名", FileName, NewFileName))
        If NewFileName <> "" Then
            NewFileName = Replace(NewFileName, """", "”")
            NewFileName = Replace(NewFileName, "\", "¥")
            NewFileName = Replace(NewFileName, "/", "/")
            NewFileName = Replace(NewFileName, ":", ":")
            NewFileName = Replace(NewFileName, "*", "*")
            NewFileName = Replace(NewFileName, "<", "<")
            NewFileName = Replace(NewFileName, ">", ">")
            NewFileName = Replace(NewFileName, "|", "|")
            If NewFileName <> FileName Then
                Set File = FSO.GetFile(FullName)
                File.Name = NewFileName
                Set File = Nothing
            End If
        End If
    End If
Next
Set PDDoc = Nothing
Set FSO = Nothing

ショートカットを作るだけなら、こんな感じかな。
自宅にAcrobatがないので未確認。

Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set PDDoc = CreateObject("AcroExch.PDDoc")
Set Args = WScript.Arguments
For i = 0 to Args.Count - 1
    FullName = Args(i)
    If FSO.FileExists(FullName) And (LCase(FSO.GetExtensionName(FullName)) = "pdf") Then
        FileName = FSO.GetFileName(FullName)
        PathName = FSO.GetParentFolderName(FullName)
        PDDoc.Open FullName
        Title = Trim(PDDoc.GetInfo("Title"))
        PDDoc.Close
        NewFileName = Title & "(" & FileName & ")"
        NewFileName = Trim(InputBox("ショートカット名", FileName, NewFileName))
        If NewFileName <> "" Then
            NewFileName = Replace(NewFileName, """", "”")
            NewFileName = Replace(NewFileName, "\", "¥")
            NewFileName = Replace(NewFileName, "/", "/")
            NewFileName = Replace(NewFileName, ":", ":")
            NewFileName = Replace(NewFileName, "*", "*")
            NewFileName = Replace(NewFileName, "<", "<")
            NewFileName = Replace(NewFileName, ">", ">")
            NewFileName = Replace(NewFileName, "|", "|")
            With Shell.CreateShortCut(FSO.BuildPath(PathName ,NewFileName & ".lnk"))
                .TargetPath = FullName
                .WorkingDirectory = PathName
                .Save
            End With
        End If
    End If
Next
Set PDDoc = Nothing
Set FSO = Nothing
Set Shell = Nothing

TOSHIBA VARDIA *

いま買うならこの辺かな?

 

 

22
March, 2007*

パソコンのファンがうるさくなった *

DELLのデスクトップパソコンのファンが少しずつうるさくなってきた :(

買ったときはそんなにうるさくなかったので、ファンが痛んできたのか?
動画なんて見ているとファンの回転数が上がっていくので、結構つらい。

同じサイズのファンを買ってきて交換できないか検討中。
でもOptiPlexは本来業務用で標準保証が3年なので、保証が効かなくなるのもつらい X(

 

 

23
March, 2007*

PDFのファイル名をリネーム2 *

そういえば私のパソコンにもAcrobatは入っていないので、別の方法を検討。
(Elementsでも使えればイイのにー)

検索すると、Xpdfが使えそうなので、サックリダウンロード。

xpdfのpdfinfo.exeを同じフォルダにコピーすれば動きます。

Shift-JIS Unicode 変換テーブルは http://unicode.org/ のヤツをテキトウに変換しただけなので間違えている可能性あり。

 
  • 遅ればせながら、さっき試してみました。ちゃんと動作するようですよ。 -- shirou 2007-03-29 (木) 20:05:15

 

24
March, 2007*

大雨 *

久々に大雨。コレで明日晴れたりしたら桜の開花も加速しそう。

駅までの途中の道が川のようになっていて、靴が水浸しで気持ち悪い :(

阿部さんに別れを... *

このサイトと共にお世話になった*1BBIQと最後のお別れ。

工事業者のおねぃさんが、屋内配線をニッパーでブチブチ切って帰ったよ。
屋外配線はそのままらしい。撤去も大変だから?...電柱の使用量は?...

そういえば、清のほうが長かったかな :)

 

 



*1 初期はBBIQ上にサーバを置いていました。現在はsakura上にあります。