|
01 March, 2007*
attachスパムへの対策その後2 *
attachされたファイルのリンク元をたどっていくと、PukiWikiではなくblogに行き着いた。
ページランク上げではなく、単純にtrackbackスパムのリンク元に使われていた
3月 *
あっという間に年度末。
今月はイベントてんこ盛り
02 March, 2007*
03 March, 2007*
04 March, 2007*
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%が日記でした
最終手段 *
| 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)
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
Private Function CreateHashString(ByVal strData As String, ByVal lngAlgID As Long) As String
CreateHashString = CreateHash(StrConv(strData, vbFromUnicode), lngAlgID)
End Function
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
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
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
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
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
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
- 待ってたのにー -- JuJu
11 March, 2007*
12 March, 2007*
携帯からの更新 *
携帯から間違って更新されることが多すぎです
編集用ページがクローラにインデックス化されているのが問題なんですが...
CHTML1.0にあわせて携帯用ページにはmetaを吐かないようしているのですが、もう我慢できません。
<meta name="robots" content="NOINDEX,NOFOLLOW">
1行だけ許してください。
クローラ相手にだけ付けても良いんだけど...
検索 *
サンプルソースを探していて、自分のページがヒット...
メモとして日記に書いていたのを忘れていた
メモだけ別ページ作ったほうが、後で探すときに便利そう。
blog見たいにタグでまとめられれば良いんだけど。
13 March, 2007*
条件付きGET *
添付ファイルとRSSに、Last-Modified:を返すようにした。
少しは転送量が減ったりするのだろうか...
mod_deflateは使わない方向で
ネットの調子が悪い *
夜限定でものすごく調子が悪い。
パソコンとルータには問題はなかったので、BBIQ側の問題か...
しばらくはネットなし生活になりそうなので、そのぐらい我慢できないと
- うまく機能していなかったら、教えてください -- JuJu
14 March, 2007*
15 March, 2007*
16 March, 2007*
温度センサ *
Kick4で何度も話題になったDS18B20。
DS1820は確か大量に買った個人が、サイトでばら売りしていたような気がするけど見つからず。
DS18B20はエリスショップが取り扱っているので、それほど入手は難しくないはず。少し高くなるけど
自宅に数個は在庫があるので、しばらくは持ちそう
17 March, 2007*
最後の更新 *
ここから更新するのは多分最後
しばらくはAIR-EDGE経由になりそう...
18 March, 2007*
部屋の片付け *
朝5時に起床して部屋の片付け
協力ありがとうございました。
19 March, 2007*
喉の調子が悪い *
昨日埃を吸い込んだのか喉が痛い
しかも微熱で頭があまり回らない。
[買い物]もじぴったんDS *
もじぴったん買った
今日は調子が悪いので、遊ぶのはまた今度。
- ふたりのもじぴったん入ってました -- JuJu
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年なので、保証が効かなくなるのもつらい
23 March, 2007*
PDFのファイル名をリネーム2 *
そういえば私のパソコンにもAcrobatは入っていないので、別の方法を検討。
(Elementsでも使えればイイのにー)
検索すると、Xpdfが使えそうなので、サックリダウンロード。
xpdfのpdfinfo.exeを同じフォルダにコピーすれば動きます。
Shift-JIS Unicode 変換テーブルは http://unicode.org/ のヤツをテキトウに変換しただけなので間違えている可能性あり。
- 遅ればせながら、さっき試してみました。ちゃんと動作するようですよ。 -- shirou
24 March, 2007*
大雨 *
久々に大雨。コレで明日晴れたりしたら桜の開花も加速しそう。
駅までの途中の道が川のようになっていて、靴が水浸しで気持ち悪い
阿部さんに別れを... *
このサイトと共にお世話になった*1BBIQと最後のお別れ。
工事業者のおねぃさんが、屋内配線をニッパーでブチブチ切って帰ったよ。
屋外配線はそのままらしい。撤去も大変だから?...電柱の使用量は?...
そういえば、清のほうが長かったかな
|