2013年8月18日

MSDNサブスクリプションで思うこと

 よく、テスト環境のつくるのに、頻繁にWindowsOSをインストールし直すんですが、毎回、Windows Updateのパッチを当てきるのに何時間も費やしてしまうのを何とかしてほしいと思っています。

 毎月、毎月は大変だと思いますが、ある程度パッチのリリースがたまったら、それらを全部あてたバージョンをダウンロードできるようにしてほしいですのよ。

 今も、WIndowsXPのWindowsUpdateをやっているけど、「このコンピュータに該当する最新の更新プログラムを確認しています…」のまま緑の■が横に流れてます。


早くおわってよ。

Microsoft Access 2010のパッケージソリューションの作り方

 最近、MS Accessでアプリケーションを作成してほしいという依頼があって作ることは簡単にできるんですが、セットアップをどう簡単にしようかと考えてました。

 一番ラクなのは、ドキュメントベースでこの手順でセットアップしてくださいと書くことです。
もっとラクにするためにセットアップを作ることにしました。

 MS Access2010って作ったものをパッケージしてインストーラとしてまとめてくれる機能があるんですよね。とっても便利です。

 あまり、高度なことはできませんが、以下のことはやってくれるようです(自分調べ)。
  • デスクトップにショートカットを作る。
  • ショートカットのアイコンが指定できる。
  • スタートメニューにショートカットを作る。
  • 一緒にインストールするファイルを指定できる。
  • AccessのSecurityのレジストリにインストールしたフォルダを登録してくれる
    →これをしないと毎回、実行していいの?って聞かれる。
  • Access2010のランタイムのインストールをしてくれる。
    →ランタイムを指定しておくとやってくれます。

ポイント1

[セキュリティのレジストリは、以下のように設定します。
「追加レジストリ キー」を設定するところがあります。


  • ルート:すべてのユーザー
    他にも、
  • キー:Software\Microsoft\Office\14.0\Access\Security\Trusted Locations\[任意の名前]
    [任意の名前]には、例えばシステムの名前とかでも良いと思います。実際にレジストリを見るとLocation0とか書いてありますが、これらと重複しなければOKです。
  • 名前:Path
  • 値:[DATABASEDIR]
    [DATABASEDIR]と書いておけば、ルートインストール フォルダーとインストールサブフォルダーで指定したフォルダが自動設定されます。

ポイント2

Accessランタイムのサービスパックのインストールも同時にさせる。
パッケージソリューションでは、Accessのランタイムを指定しインストールさせることができます。
 合わせて、AccessのServicePacke1や2または、その他のインストールも同時にしたい場合、できあがったパッケージのSetup.iniを編集してやることでセットアップのプロセスに組み込むことができます。
Setup.iniは、セットアップのルート\Files\Setup\Setup.iniにあります。

では、編集方法。
 Accessのランタイムをインストールするようにしておくと、「[ChainedInstall_1]」という記述を見つけることができます。これは、AcceccRuntime.exeをインストールするためのものなのでそのままにしておきます。
例えば、AccessRuntimeのサービスパック2(accessrtsp2010-kb2687444-fullfile-x86-ja-jp.exe)を同時にインストールしたい場合は、以下のように記述を追加します。


  1. [ChainedInstall_2]
  2. TaskName=Access Runtime SP2 Setup 
  3. TaskType=exe
  4. Path=\Files\accessrtsp2010-kb2687444-fullfile-x86-ja-jp.exe
  5. IgnoreReturnValue=0
  6. ;cmdline=/passive


1行目は、AccessRuntimeは、「ChainedInstall_1」なので「ChainedInstall_2」にします。
2行目は、このセットアップは何かをわかりやすい名前を書きます
3行目は、実行するファイルの拡張子を書くようです。(msi形式の場合は、msi)
4行目は、実際に実行するファイルのパスを指定します。
AccessRuntime.exeが配置してあるパスにしておくのが無難だと思います。
5行目は、多分、Ignoreなのでセットアップが無効(失敗とか)だった時の戻り値だと思います。0であれば、何もなかったように次に進みます。
6行目は、不要です。実際にセットアップされるファイルへの引数だと思います。今回は不要です。


 これで、Accessランタイムベースのアプリケーションのインストールがラクになると思います。
ポイントしか書いていませんので、実際にやってみてください。

2013年8月14日

入力画面項目チェックのロジックの提案[初心者向け]

 画面入力値のチェックをするときに、1項目ずつチェックをすると思います。
その場合、入力チェック用の関数などを作ってチェックをすると思います。
 その場合の構造の提案です。
例としてMS Accessで考えてみます(なんでもいいんですが)

■仕様


  1. 会員ID、会員名、会員住所の必須入力チェックを行う。
  2. 入力チェックは、入力項目のエラーがあったら、それ以降の項目のチェックは行わない。
  3. エラーのあった項目にフォーカスをあてる

■画面イメージ

  会員ID [         ]
  会員名 [               ]
  会員住所 [               ]

■ロジック

Private Sub 登録_Click()

    If 入力チェック() Then
        ' エラー
        Exit Sub
    End If

    ' 登録処理をここに実装


End Sub

' True..エラーなし False..エラーあり
Private Function 入力チェック() As Boolean
   
    Dim msg As String
    Dim error_item as Control

    Do
        '
        ' 会員ID必須入力チェック
        If IsNull(会員ID) Then
            msg = "会員IDは、必須入力です"
            Set error_item = 会員ID
            Exit Do
        End If
        '
        ' 会員名必須入力チェック
        If IsNull(会員名) Then
            msg = "会員名は、必須入力です"
            Set error_item = 会員名
            Exit Do
        End If
        '
        ' 会員住所必須入力チェック
        If IsNull(会員住所) Then
            msg = "会員住所は、必須入力です"
            Set error_item = 会員住所
            Exit Do
        End If
    Loop Until True
   
    if msg = "" Then
        入力チェック = False
    Else
        入力チェック = True
        MsgBox msg, vbExclamation Or vbOkOnly, "入力エラー"
        error_item.SetFocus
    End If

End Function

■ポイントと解説

あまり考えないと、各項目エラーチェックをするかどうかを以前の項目でエラーがあったかのフラグを立ててチェックを行うと思います。

 ですが
 エラーがあったら、エラーメッセージのセットとエラーのあった項目の保存をしてエラーチェックを一気に抜け、仕様のとおり、それ以降の項目チェックを行いません。
 ロジックの赤字のところがポイントです。

 Do Loopは、ループがしたいわけではなく、それ以降のロジックを実行したくないためにブロック構造を作り出すために使っています。

 メリットとしては、以下のことがあります。

  • 各入力項目は、他のエラー状態を考える必要がない
    (ということは、入力チェックをする項目が増えた場合は、そのことだけを記述すればよい)
  • フォーカスのセッとメッセージ表示トロジックが1箇所にまとめられる
  • 余計な変数を作る必要がない(弱い理由ですが)

これで、ちょっと改造しやすくて、わかりやすいプログラムができるのではないでしょうか?






2013年8月13日

Subversionリポジトリバックアップメモ(案1)

Subversionのリポジトリバックアップのメモ


 Subversionでソース管理をしている場合に、リポジトリが壊れても復旧できるようにするためにバックアップを常にとっておく。
 その手段として、リポジトリの同期機能(svnsync)を使う。

  1. 同期先のリポジトリを作成する
    svnadmin create リポジトリ名
  2. hookスクリプトの準備
    pre-revprop-change.tpmlをpre-revprop-changeにリネームして、スクリプト内を「exit 0」だけにする。
  3. 同期先のリポジトリの初期化
    snvsync init 同期先のリポジトリ 同期元のリポジトリ
    例)svnsync init file:///var/appdata/svnbackup/repo_backup http://server_name/repos/repo --username [username] --password [password]

    [username]は、リポジトリへアクセスするユーザ
    [password]は、リポジトリへアクセスするユーザのパスワード
  4. リポジトリを同期する
    svnsync sync 同期先のリポジトリ
    例)svnsync sync file:///var/appdata/svnbackup/repo_backup  --username [username] --password [password]

ヒント

同期先のリポジトリは、fileプロトコルだけではなく、httpでもhttpsでもなんでも良いです。
ただし、1度でもcommitすると同期はできなくなります。


 運用しているリポジトリが何らかの理由で壊れたときは、この同期しているリポジトリを使って復旧する。

2013年8月12日

ファイル圧縮ツールなに使ってますか?

 みなさんは、ファイルの圧縮ツールは何を使っていますか?
いろいろ使って来ましたが、今は、7-zipというツールを使っています。

LHA→zip→DGCA→7-zipとツールを変更しています。

途中、いろいろなのを使っていましたが、圧縮機能が有料だったり、あまりメジャーでなかったり(自分が知らないだけ?)、高圧縮のツールがでたりして、使うのをやめたのも多々あります。


 DGCA(DigitalGCodecArchiver)は、他で使っている人は居ませんでしたが、高圧縮できたので仕事でもよく使っていました。メジャーでないということは、ファイルを展開するツールを持っている人がいないので、自己展開形式にしてファイルを渡していました。
当然、小さいファイルを自己展開機能をつけてしまうと、そのプログラム部分が大きいので、その場合は、zipとかで圧縮して送っていました。

 7-zipは、高圧縮で、いろいろなファイル形式の展開機能が付いているので今では、一番使っているツールです。
 これも、やはり、一般的には普及していないようなので、自己展開形式にしてファイルを圧縮して送っています。
 でも、圧縮レベルを「超圧縮」というのにして使うととんでもなくファイルサイズが小さくなります。
 ベンチマークを取ったわけではないですが、たまたま今、やった圧縮の状況を書きますとこんな感じです。


圧縮前 ファイル数56、フォルダ数25の123,412,480バイト(117MB)のファイル(ファイルは、accdb形式)を圧縮してみた。
  • zip(WIndows標準)
    16,675,382バイト(15.9MB)
  • 7-zip(超圧縮)
    1,542,751バイト(1.47MB)
  • 7-zip(超圧縮)の自己展開形式
    1,705,567バイト(1.62MB)
zip形式の10分の1にサイズになってしまいました。
自己展開形式しても、ほとんど変わりません。


 これで、7-zipを使わない手はないよね。

7-zip推しです。





2013年8月10日

店頭の家電並みと思っているらしい

 あるコンピュータのコンサルの営業のことであるが、手作りのコンピュータシステム(でも)は、量販店で電化製品を買ってきて、コンセントを挿せば動くほど簡単だと思っているらしい。
 だから総合的なテストもせずに本番リリースさせようする。
でも実際、総合テストなんてせずにリリースしたけど。
特に問題も起きずに、稼働しているらしい(小声で、さすが俺。)


誰とは言わないが…。

※電化製品が簡単に作られているというわけではなく、店頭に並んでいるのは完成品という意味です。

スーパーユーザー!

 自分はコンピュータのシステムをよく理解していると勘違いしているユーザは、事ある毎にスーパーユーザを作って、なんでもできるようにしてという。
 当然データの整合性が崩れるてしまう事件が起きる可能性があることなんてこれっぽっちも考えに無い。

誰とは言わないが…。