PowerPoint のスライド毎に画像を貼り付けていくマクロ

  数百枚ある写真を 1 枚 1 枚 PowerPoint に貼り付けていくという気の遠くなる作業を頼まれたので作成.

Option Explicit

Public Sub addPhotoParPage()

    Dim i As Integer
    Dim strPath As String

    Dim objFileSystem As Object
    Dim objFolder As Object
    Dim objFile As Object

    strPath = BrowseForFolder()

    If strPath = "" Then
        Exit Sub
    End If

    Set objFileSystem = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFileSystem.GetFolder(strPath)

    i = 0
    For Each objFile In objFolder.Files
        ' スライドの追加
        ActivePresentation.Slides.Add( _
            Index:=ActivePresentation.Slides.Count + 1, _
            Layout:=ppLayoutText).Select
        ' 画像の挿入
        ActiveWindow.Selection.SlideRange.Shapes.AddPicture( _
            FileName:=objFile.Path, _
            LinkToFile:=msoFalse, _
            SaveWithDocument:=msoTrue, _
            Left:=0, _
            Top:=0).Select
        ' 50 回に一回 DoEvents 発生
        i = i + 1
        If i Mod 50 = 0 Then
            DoEvents
        End If
    Next

    Set objFile = Nothing
    Set objFolder = Nothing
    Set objFileSystem = Nothing

End Sub

Private Function BrowseForFolder(Optional varRoot As Variant) As String

    Dim objFolder As Object

    ' フォルダ選択ダイアログを表示
    Set objFolder = CreateObject("Shell.Application").BrowseForFolder( _
                                 0, _
                                 "画像があるフォルダを選択してください", _
                                 &H11, _
                                 varRoot)

    ' 選択内容を取得
    If Not (objFolder Is Nothing) Then
        BrowseForFolder = objFolder.Items.Item.Path
    Else
        BrowseForFolder = ""
    End If

    Set objFolder = Nothing

End Function

Subversion で直前のコミットを取り消し,なおかつ Trac も同期する方法

  勢い余ってコミットしたはいいけど,恥ずかしい間違いがあってコミットをなかったことにしたい場合の対処方法です.

対象のリポジトリ /svn/foo  
現在のリビジョン 100       
直前のリビジョン 99        
対象の Trac 環境 /trac/foo

1. 取り消したいリポジトリをディレクトリごとバックアップする

 $ mv /svn/foo /svn/foo.bak

2. 同名のリポジトリを作成する

 $ svnadmin create /svn/foo

3. バックアップしたリポジトリから直前までのリビジョンをダンプして,新しく作ったリポジトリにロードする

 $ svnadmin dump -r 0:99 /svn/foo.bak | svnadmin load /svn/foo

  これで,リビジョン 99 までのリポジトリが完成します.

4. Trac と同期する

$ trac-admin /trac/foo resync

  以上,はてブしておいた記事がそのまま役に立ちました.ふー.

- YappoLogs: 悪のりで学ぶsvnadmin/trac入門実用編
  http://blog.yappo.jp/yappo/archives/000477.html

- ref.: svnadmin dump
  http://subversion.bluegate.org/doc/re33.html

- ref.: svnadmin load
  http://subversion.bluegate.org/doc/re38.html

電波時計が壊れたっぽい

  

  数年愛用している電波時計の目覚まし時計.
  いつまでたっても電波を受信できないのか,ずーと針が回りっぱなしです.

TortoiseSVN で公開鍵を使う方法

  TortoiseSVN で svn+ssh を利用した場合に,認証をパスフレーズではなく公開鍵で行う方法を紹介します.

  SSH クライアントには TortoiseSVN 付属の TortoisePlink を使います.
  TortoisePlink は PuTTY 由来らしいので PuTTY 形式の鍵を使う必要があるみたいです.

  PuTTY 形式の鍵を生成したり,OpenSSH の鍵を PuTTY 形式に変換したりするために,PuTTYgen が必要になります.
  PuTTYgen は以下のサイトで入手できます.この記事の執筆時点の最新版は 0.58 です.

- PuTTY Download Page
  http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

1. 鍵を新たに作成する方法


  1. 鍵の生成
     PuTTY を起動し右中央部にある [Generate] を選択します.
     マウスをひたすら動かしていると,そのうち鍵が生成されます.

  2. 公開鍵をサーバに登録
     Public key for pasting into OpenSSH authorized_keys file の部分をコピーして
     $HOME/.ssh/authorized_keys に貼り付けます.
     
     $HOME/.ssh/authorized_keys がない場合は作成しましょう.

  3. 秘密鍵の保存
     右中央部にある [Save private key] を選択します.
     PuTTY の秘密鍵の拡張子は ppk になります.ここでは

   C:\keys\svn.ppk

     として保存します.
     秘密鍵のパスフレーズは,同じ画面の「Key passphrase」で設定します.

  4. TortoiseSVN で公開鍵を使うように設定
    「TortoiseSVN 設定」の「ネットワーク」を開きます.
    「SSH クライアント」に TortoisePlink を選択して,先ほど作成した秘密鍵を以下のように指定します.

   TortoisePlink -C -l username -i C:\keys\svn.ppk

     username はユーザ名です.-C オプションは圧縮を有効にするオプションです.
     

  以上が,鍵を新たに作成した場合の TortoiseSVN で公開鍵を使う方法になります.

2. 既にある OpenSSH の鍵を PuTTY 形式に変換する方法


  1. 鍵の変換
     PuTTY を起動し右中央部にある [Load] を選択します.
     秘密鍵にパスフレーズが設定してある場合は,パスフレーズの入力画面が表示されるので,パスフレーズを入力します.

     すぐに PuTTY 形式の鍵に変換されます.

  2. 秘密鍵の保存および TortoiseSVN で公開鍵を使うように設定
     上記「1. 鍵を新たに作成する方法」の「3. 秘密鍵の保存」からの手順と全く同じになります.

  以上が,OpenSSH の鍵を PuTTY 形式に変換した場合の TortoiseSVN で公開鍵を使う方法になります.

3. 確認

   試しに,コミットログを表示するなどしてみてください.
   パスフレーズによる認証のときは,以下のように「Password」という入力画面が表示されました.

   Password

   しかし,公開鍵認証の場合は,以下のように「Passphrase for key "..."」という入力画面が表示されます.

   Passphrase

- tortoisesvn.tigris.org
  http://tortoisesvn.tigris.org/

PHP 4 の --enable-versioning はトラブルの元か?

  PHP 3 と PHP 4 を共存させる場合に,configure オプションに --enable-versioning を指定します.
  実はこれが思わぬ落とし穴になる場合があります.

  それは,DSO で拡張モジュールが動的にロードできないというものです.
  PHP 4.4.4 + Apache 1.3.37 on Solaris 10 x86 の環境なので,もしかしたら環境依存かもしれません.

  コンパイル・インストールはうまくいきますが,Apache を再起動すると以下のようなエラーが出ます.

- SQLite の場合

PHP Warning:  Unknown(): Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20020429/sqlite.so' - ld.so.1: httpd: fatal: relocation error: file /usr/local/lib/php/extensions/no-debug-non-zts-20020429/sqlite.so: symbol executor_globals: referenced symbol not found in Unknown on line 0

- Xdebug の場合

Failed loading /usr/local/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so:  ld.so.1: httpd: fatal: relocation error: file /usr/local/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so: symbol zend_compile_file: referenced symbol not found

  CLI 版では,全く問題なくロードできるので,原因が全然分かりませんでした.
  これらのエラーが出る場合は,--enable-versioning を外して PHP 4 を再コンパイルするとうまくいくと思います.

  もはや,PHP 3 を共存させることは皆無に等しいと思うので,--enable-versioning のことは忘れてしまったほうがよさそうです.

  参考までに --enable-versioning をマニュアルを見てみると,

--enable-versioning

   要求されるシンボルのみをエクスポートします。 詳細な情報は INSTALL を参照ください。
--enable-versioning

   Solaris 2.x および Linux が提供するバージョン管理機能を 有効にします。PHP 3 限定です!

  とあります.

- Configure オプション
  http://www.php.net/manual/ja/configure.php

- ref.: Blog::koyhoge - [PHP] --enable-versioningを止めるの巻
  http://d.hatena.ne.jp/koyhoge/20061213/1165999933