PuTTY ごった煮版のレジストリから INI ファイルを生成する

comments(20) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  PuTTY ごった煮版では、設定の保存先をレジストリではなく、INI ファイルにすることが出来ます。
  そこでレジストリに保存された設定から INI ファイルを作成するスクリプトを書きました。

- putty.iniconv-1.0.0.vbs
  http://pocari.org/tools/putty/putty.iniconv-1.0.0.vbs

  使い方はコマンドプロンプトで以下のようにします。
  putty.ini を putty.exe があるフォルダと同じところに置けば完了です。

C:\> CScript //Nologo putty.iniconv-1.0.0.vbs > putty.ini

'
' INI file converter for PuTTY
'
' Usage:
' C:\> CScript //Nologo putty.iniconv-1.0.0.vbs > putty.ini
'
' Copyright (c) 2008 Norifumi SUNAOKA
' <http://cl.pocari.org/2008-05-10-1.html>
'
' Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
'
'
' Version: 1.0.0
'

Const HKEY_CURRENT_USER  = &H80000001
Const PUTTY_SESSIONS_KEY = "Software\SimonTatham\PuTTY\Sessions\"
Const PUTTY_HOSTKEYS_KEY = "Software\SimonTatham\PuTTY\SshHostKeys\"

Set StdOut = WScript.StdOut
Set WMI    = GetObject("winmgmts:{impersonationLevel=impersonate}!\\." & _
                       "\root\default:StdRegProv")
Set WS     = WScript.CreateObject("Wscript.Shell")

' UseIniFile
StdOut.WriteLine "[Generic]" & vbCrLf & "UseIniFile=1" & vbCrLf

' Sessions
WMI.EnumKey HKEY_CURRENT_USER, PUTTY_SESSIONS_KEY, subkeys
For Each subkey In subkeys
    StdOut.WriteLine "[Session:" & subkey & "]"
    Call OutputValues(PUTTY_SESSIONS_KEY & subkey & "\")
Next

' SshHostKeys
StdOut.WriteLine "[SshHostKeys]"
Call OutputValues(PUTTY_HOSTKEYS_KEY)

Set WS     = Nothing
Set WMI    = Nothing
Set StdOut = Nothing

'
' OutputValues
'
Sub OutputValues(subkey)
    Set RE = new RegExp
    RE.pattern = "^\-?[0-9]+$"
    
    WMI.EnumValues HKEY_CURRENT_USER, subkey, names, types
    For i = 0 To UBound(names)
        value = WS.RegRead("HKCU\" & subkey & names(i))
        If Not RE.Test(value) then
            value = """" & value & """"
        End If
        StdOut.WriteLine names(i) & "=" & value
    Next
    StdOut.WriteLine
    
    Set RE = Nothing
End Sub


  また、以下のサイトで、Perl 版が公開されているのですが、なぜだかうちの環境ではうまくいきませんでした。

- ゑBLOG: PuTTYごった煮版 レジストリ<->INIファイルコンバータ
  http://yebisuya.dip.jp/yeblog/archives/a000456.html

APC と jQuery を利用してファイルアップロードの進行状況を表示する

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  ネタ的には特別新しいものではないですが、気になっていたので試してみました。
  PHP 5.2.0 以降、APC 3.0.13 が必要です。

1. APC の設定

  普通に APC をインストールして、以下のように apc.rfc1867 を有効にするだけです。

apc.rfc1867 = On

2. アップロードフォームの準備

  普通のアップロードフォームです。
  ただし、"APC_UPLOAD_PROGRESS" という name 属性を持った hidden フィールドを用意します。値は、何でもいいのですが、ここでは "progress_key" という風にしています (本当はランダムにするほうがいいと思います)。

<form id="upload" action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="hidden" name="APC_UPLOAD_PROGRESS" value="progress_key" />
<input type="file" name="file" />
<input id="submit_button" type="submit" value="アップロード" />
</p>
</form>

3. アップロードファイルの処理

  上記アップロードフォームの upload.php ですが、これは通常のファイルアップロード時の処理を書いてください。
  今回はテストなので何もしませ

<?php
// 通常のファイルアップロードの処理
?>

4. アップロードの進行状況を返す処理

  次のファイルを progress.php とします。

<?php
// progress.php
header('Content-type: application/json; charset=UTF-8');
$status = apc_fetch('upload_progress_key');
echo json_encode($status);
exit;
?>


  2 で指定した "APC_UPLOAD_PROGRESS" の値の先頭に upload_ をつけたものを apc_fetch() の引数に指定します。upload_ は設定で変更することが出来ます (apc.rfc1867_prefix)。
  apc_fetch() で取得できる値は次のようになります。

total          アップロードされるファイルのサイズ                              
current        現時点までに受信したファイルのサイズ                            
rate           アップロード速度 (byte/second)           アップロード完了時のみ
filename       ファイル名                                                      
name           <input type="file" /> の name 属性                              
temp_filename 一時ファイル名                           アップロード完了時のみ
cancel_upload アップロードがキャンセルされたかどうか   アップロード完了時のみ
done           アップロードが完了したかどうか                                  
start_time     アップロード開始日時の UNIX TIME                                
  • cancel_upload: 0 = キャンセルされていない、1 = キャンセルされた
  • done: 0 = 未完了、1 = 完了

  これらの値を JSON で出力しています。

5. jQuery を使って進行状況を取得する

  jQuery Form Plugin を使って、フォームを POST し、1 秒毎に getJSON で進行状況を取得します。
  また、getJSON でリクエストに現在日時を渡しているのは、ブラウザのキャッシュを利用しないようにするためです。

var timer = null;

var progress = function() {
    // progress.php を呼び出して進行状況を取得する
    $.getJSON('progress.php', { 'd': new Date().getTime() }, function(json) {
        // 進行状況を % で表示する
        $('#status').html(parseInt(json.current / json.total * 100) + '%');
    });
};

$(function() {
    $('#upload').submit(function() {
        timer = setInterval('progress()', 1000);
        // フォームを POST する
        $(this).ajaxSubmit(function() {
            clearInterval(timer);
            progress();
        });
        return false;
    });
});

6. デモ

  本当は、デモを用意したかったのですが、ここのレンタルサーバでは APC が使えないようでしたのでアップロード状況をキャプッチャしました。
  基本的には、上記の処理を行なっているだけですが、進行状況の表示の部分は Progress Bar Plugin を利用して、プログレスバーで表示しています。



  このデモで使用したファイル一式を以下に置いておきます。

参考


- PHP V5.2 の新機能、第 5 回: ファイル・アップロードの進行状況を追跡する方法
  http://www.ibm.com/developerworks/jp/opensource/library/os-php-v525/

- upload meter for PHP with APC and Json
  http://progphp.com/progress.phps

- PHP: APC 関数 - Manual
  http://php.net/apc

- jQuery Form Plugin
  http://malsup.com/jquery/form/

- Progress Bar Plugin
  http://digitalbush.com/projects/progress-bar-plugin

タグ: [PHP][jQuery][JavaScript]

".svn" を隠す方法

comments(1) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

- ".svn"を隠す。 - ぐらめぬ・ぜぷつぇんのはてダウンロード
  http://d.hatena.ne.jp/msakamoto-sf/20080403/1207190473

  .htaccess で .svn を隠す方法ということですが、以前調べたことがあって mod_rewrite が使えるならば、以下のようにして隠すことが出来ると思います。

RewriteEngine On
RewriteRule ^(.*/)*\.svn/ / [F,L]


  また、.htaccess を利用しなくとも、.svn のパーミッションを 0700 あたりにしても大丈夫な場合もあります。

$ find . -name .svn -type d | xargs -i chmod 0700 {}

  httpd.conf がいじれる環境であれば上記エントリに示してあるとおり

<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>


  これが一番簡単な気がします。

タグ: [Subversion]

IE でどうにかして color:inherit を有効にする

comments(0) | trackback(1)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  IE (6 も 7) では、CSS の color: inherit に対応していないので、以下のような場合に他のブラウザと異なる表示になります。

* {
  color: #000;
}
 
p {
  color: #f00;
}
 
span {
  color: inherit;
}

<p><span>ここは color: inherit を指定しています。</span></p>


- Internet Explorer 6.0
  color: inherit of IE

- Firefox 2.0.0.12
  color: inherit of Firefox

  見て分かるとおりに、IE の場合は、ユニバーサルセレクタで指定した #000 が有効になっています。
  要は、CSS 2 に準拠していないということなのですが、これをどうにかして他のブラウザのように #f00 で表示してやろうというのが趣旨です。

  結論から言うと JavaScript での処理になるのですが、はじめに以下のようなスクリプトを書いてみました。

window.onload = function() {
  if (document.all) {
    var e = document.getElementsByTagName('span');
    for (var i = 0, l = e.length; i < l; ++i) {
      e[i].style.color = e[i].parentNode.currentStyle.color;
    }
  }
};


  要は、親要素の color を適用していくという感じです。もちろん、これでうまくいきます。

  jQuery を利用している場合は、以下のような感じで、

$(function() {
  if ($.browser.msie) {
    $('span').each(function() {
      $(this).css('color', $(this).parent().css('color'));
    });
  }
});


  prototype.js を利用している場合は、以下のような感じです。

Event.observe(window, 'load', function() {
  if (Prototype.Browser.IE) {
    $$('span').each(function(e) {
      e.style.color = e.parentNode.currentStyle.color;
    });
  }
});


  さて、上記のスクリプトを見て分かるとおりに IE でしかこの処理は行ないません。
  となると、IE の CSS 拡張 expression が使えそうです。

span {
  color: inherit; /* NOT IE */
  color: expression(this.parentNode.currentStyle.color); /* IE */
}


  これだとシンプルに書くことが出来ます。
  ただし、expression も問題があって、何かしらのイベントが発生するたびに評価されてしまいます。
  例えば、mouseover だったり riseze だったり。
  あともちろん、validator には通りません。

  結論としては、上記の方法を時と場合によって使い分けるのが良いと思います。

# IE が color: inherit をサポートしてくれるのが一番いいんですけどね……
# IE 8 ではどうなっているんでしょう?

- hxxk.jp - IE 7 と color: inherit
  http://hxxk.jp/2006/11/19/2347

タグ: [CSS][JavaScript][jQuery]

Fiddler が動作しなくなった

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  Microsoft の Proxy 型の HTTP デバッガ Fiddler が突然 (?) 動作しなくなりました。
  それも IE (WinINET) からのみうまく動作しません。Firefox からだと問題なく動作します。

  2.1.4.4 beta にアップデートしたりしてもうまくいかないので調べてみたら、以下のフォーラムの記事を見つけました。

- Bugs: Fiddler started but browser ceased to work
  http://groups.msn.com/HTTPFiddler/bugs.msnw?action=get_message&ID_Message= ...

1> Close Fiddler.
2> Start the Registry editor.  START > RUN > REGEDIT.EXE
3> Navigate to HKEY_CURRENT_USER\Software\Microsoft\Fiddler2
4> Right-click in the pane on the right hand side and choose NEW > STRING VALUE.
5> Name the new string MapSocketToProcess and set its value to False
6> Restart Fiddler.

  つまり、レジストリを書き換えるということです。

  試しにこのとおりにやってみると、うまく動作するようになりました!
  原因は分かりませんが、とりあえず動くようになったのでこれで良しとします。

  環境は、上記の記事では Windows 2000 (SP4) でしたが、うちの環境は Windows XP (SP2) + IE 6.0 でした。

  以下に書き換え後のレジストリを書き出しておきます。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Fiddler2]
"MapSocketToProcess"="False"

キーボードを新調した

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  2002 年に購入したキーボード (Realfirce 106) の調子が、ここ最近あまりよくありませんでした。
  解体して掃除したりしてもなんかいまいちだったので、久しぶりにキーボードを買いました。

  買ったものは、今のと全く同じで Realforce 106 LA0100。違うキーボードも試してみたかったのですが、結局ずっと使っていて手になじんでいるので同じにしました。

  ヨドバシカメラ吉祥寺店で 17,600 円。ポイントが 13% の 2,288 ポイント付いたので、実質 15,312 円でした。
  また、5、6 年はお世話になりそうです。

- 東プレ LA0100 REALFORCE106
  B000EQHU4Y
  amazon.co.jp 詳細ページへ
  東プレ
  ASIN: B000EQHU4Y
  17,115 円