月別アーカイブ: 2012年4月

Windows Vista Home Premium リモートデスクトップのホスト機能を有効化する

4年ほど前に購入したDell Inspiron。大学生の間ずっとメインに使ってたマシン。
卒業するときにMacBookProを買って以来放置ぎみだったが、放置しておくのももったいないし、Windowsでしかできないこともたまにあるので、どうせならリモートデスクトップでいつでもつなげるようにしておこう思ったので、やってみた。

ところが、OSであるWindows Vista HomePremiumのグレードにはリモートデスクトップのホスト機能を有効にすることができないらしい。

そこで調べてみると、パッチを当てれば有効化できることが分かった。

まず、以下のサイトよりSP1以降用のパッチのzipファイルtermsrv_sp1.zipをダウンロードする。
Enable Remote Desktop Connection on Vista Home Premium

ダウンロードできたら適当なフォルダに解凍し、自分のOSのグレードにあったバッチファイルを管理者権限で実行する。

たったこれだけ。
もしかしたらポートの設定も行う必要があるかもしれない。

以下のサイトを参考にした。
Vista Home SP2でリモートデスクトップのホストに挑戦





ちなみにMacからの接続はMicrosoftのRDC2を利用した。
接続時にはIPアドレスを指定する必要があるみたい。
Remote Desktop(Microsoft)

[Excel][VBA]上下で列を比較し、同じであれば色を付ける

仕事中に書いたExcelマクロをメモ。

上下でセルを比較し、同じであれば色を付ける。
このとき、連続する値が切り替わったとき、分かりやすいように赤と黄色で交互に色を付ける。
例えば以下のような表があったとすると

マクロ処理前

マクロ処理前

処理後は以下のようになる。

マクロ処理後

マクロ処理後


aaaは連続するので黄色、その後bbbも連続しているが、上のaaaと区別しやすいように色を変える。
cccは連続しないので色付けなし。
色は黄色、赤と切り替えていく。

ソースファイルは以下

Sub Macro1()
'上の行と比較して、列Aの値が同じであれば色を付けるマクロ
'連続する値が変わると、背景色を変える

    Dim coler As Integer      '色フラグ
    Dim flg As Integer        '連続フラグ
    Dim row As Long           '現在行
    
    Dim p_row_value As String '1行前のセルの値
    Dim n_row_value As String '現在行のセルの値
    
    '各変数の初期化
    p_row_value = ""
    n_row_value = ""
    coler = 0
    flg = 0
    
    '最終行まで繰り返す
    Dim i As Long
    For row = 1 To Cells(Rows.Count, 1).End(xlUp).row
    
        '現在行列Aの値を取得
        n_row_value = Cells(row, 1).Value
        
        '上の行と値が同じであれば色を付ける
        If n_row_value = p_row_value Then
               
            '連続が途切れた場合はカラーフラグを変更
            If flg = 0 Then
                '0なら1に、1なら0に
                coler = (coler + 1) Mod 2
            End If
                
        flg = 1  '連続フラグON
            
        Cells(row - 1, 1).Interior.Color = f_coler(coler) '上の行B列の色を変更
        Cells(row, 1).Interior.Color = f_coler(coler)     '現在行B列の色を変更
           
        Else
           flg = 0  '連続フラグOFF
        End If
        
        '現在行列Bの値をセット
        p_row_value = n_row_value
        
    Next row
    
    '完了表示
    MsgBox ("処理が完了しました。")

End Sub

Function f_coler(flg As Integer) As Long
    If flg = 0 Then
        'フラグが0であれば赤を返す
        f_coler = RGB(255, 0, 0)
    Else
        'フラグが1であれば黄を返す
        f_coler = RGB(255, 255, 0)
    End If
End Function

ちなみに、ループの条件は

For row = 1 To Cells(Rows.Count, 1).End(xlUp).row

列Aを最終行からさかのぼって、最初に値がある行まで。
これで途中が空白セルで抜けてても、最終行までチェックできる。

ついでにもう一個。
これはメモ。

Sub Macro2()

    Dim coler As Integer     '色
    Dim flg As Integer        '連続フラグ
    Dim row As Long           '現在行
    Dim s_row As Long         '開始行
    Dim e_row As Long         '終了行
    
    Dim p_row_value As String '1行前のセルの値
    Dim n_row_value As String '現在行のセルの値
    
    Dim i As Long             'ループ用カウンタ
    
    '各変数の初期化
    p_row_value = ""
    n_row_value = ""
    coler = 0
    flg = 0
    
    '最終行まで繰り返す
    For row = 1 To Cells(Rows.Count, 1).End(xlUp).row
        n_row_value = Cells(row, 1).Value
        
        '上の行と値が同じ時の処理
        If n_row_value = p_row_value Then
                
            '新たに連続が始まるときは連続の開始行を取得
            If flg = 0 Then
                coler = (coler + 1) Mod 2
                s_row = row - 1
            End If
            
            flg = 1  '連続フラグON
        
        
        '上の行と値が違う時の処理
        Else
            '連続が途切れたら連続の終了行を取得し表示処理
            If flg = 1 Then
                e_row = row - 1 '終了行の取得
                Call s_check(s_row, e_row) '表示処理
            End If
            
            '1行だけの場合は列bの値を見て、Yなら列cにYYを表示
            If Cells(row, 2).Value = "Y" Then
                Cells(row, 3).Value = "YY"
            End If
            
            flg = 0  '連続フラグOFF
            
        End If
        
        '現在行列Bの値をセット
        p_row_value = n_row_value
        
    Next row
    
    '完了表示
    MsgBox ("処理が完了しました。")

End Sub


Sub s_check(s As Long, e As Long)
'連続する行s〜eの列Eの値をチェックし、結果を列Hに表示する
'引数 s : 開始行
'引数 e : 終了行

    Dim i As Long
    Dim ii As Long
    Dim Yno As Long
    
    'Yが存在する行数の初期化
    Yno = 0
    
    行sから行eをチェック
    For i = s To e
        If Cells(i, 2).Value = "X" Then
        ElseIf Cells(i, 2).Value = "Y" Then
            'Yが存在すればその行数を保持
            Yno = i
        End If
    Next
    
    
    'Yが存在しなければ何もしない
    If Yno = 0 Then
    
    'Yが存在する行が最後
    ElseIf Yno = e Then
        For ii = s To e
            '行sから行eに削除を表示
            Cells(ii, 2) = "YY"
        Next ii
        
    'Yが存在する行が最後でない
    Else
        For ii = s To e
            '行sから行eにoutputを表示
            Cells(ii, 2) = "XX"
        Next ii
        
    End If
    
End Sub
  1. まず、列Aを上から見ていき、連続する値があるか調べる。
  2. 連続する値があれば、連続の開始行と終了行を取得する。
  3. 開始と終了の間の列Bをチェック
    • すべてXであれば何もしない。
    • Yが存在し、最終行がXであれば列Cの開始〜終了行までXXを表示
    • Yが存在し、最終行もYであれば列Cの開始〜終了行までYYを表示
  4. 単一行であれば、行Bをチェックし、Yのときのみ列CにYYを表示

実行前後のイメージはこんな感じ。

マクロ処理前

マクロ処理前


マクロ処理後

マクロ処理後

PS3のリモコンを買ってみた

去年の正月、グランツーリスモ5をプレイするためだけに購入したプレステ3。
といっても、もともとあまりゲームをしない体質なので、ずっと眠っていたような状態だった。
そこで半年ほど前にTORNEを購入して、録画機器として活用することにした。
さすがSONYって感じの使いやすさ。実家にあるSHARPのブルーレイレコーダーよりも
断然使いやすい。

ただ一つ、PS3購入時から気になっていたことがあった。それはコントローラーのバッテリー持ちの悪さである。
ワイヤレスなのはいいけど、電源切り忘れて1日置いとくともう電池切れ。
電源切ればいいだけの話なんだけど。

そこでリモコンが無いか調べてみると、Bluetoothのリモコンがあることが分かったので早速ヤフオクでポチってみた。
今日届いたのがこれ。

SONY CECHZR1J

PS3用Bluetoothリモコン

このリモコン、本体に登録しないと動作しない。
まずは普通にPS3を起動し、「設定」→「周辺機器設定」→「BDリモートコントローラー登録」を開く。
そしてスタートボタンと、エンターボタンを長押しして登録完了。

コントローラーもいいけど、形的にも机の上置いとくのは邪魔臭いので、リモコンは正解だった。
リモコンにあるボタンはコントローラーにもあるボタンなので、操作性も変わらず使いやすい。

ちなみに、僕が購入したのは古いモデルで、新しいモデルはAmazonで2800円ほどで買えるみたい。

[SQLServer]デッドロックを発生させてログを拾ってみる

先日、DBサーバーSQLの処理に時々時間がかかってしまうという問題が発生した。
おそらくデッドロックが原因ではないのだが、「そういえば、デッドロックのログってどうなってんだ?」って話になって、調べてみるとトレースフラグなるものを設定しておかなければ、デッドロックが発生してもログに残らないらしい。

トレースフラグはSQLServer Management Studioのクエリウィンドウから、以下のコマンドを実行すれば良い。

-- SQLServerログにデッドロックのログを出力する
DBCC TRACEON(1204,-1)

-- エラーログにデッドロックのログを出力する
DBCC TRACEON(3605,-1)

-- トレースフラグの設定確認
DBCC TRACESTATUS

-1をはグローバルフラグで、このオプションをつけなければセッションを終了したらトレースフラグはオフになってしまう。

これでログを採る準備は完了。
デッドロックが発生すればログを出力してくれる。はず。。。

気になったので、自分でデッドロックを起こしてみた。
方法としては、一つのテーブルに対して、複数のセッションから1行ずつアップデートをかけ、
デッドロックを発生させる。
まずはテーブルの作成から。簡単なテーブルと、レコードが2件あれば良い。

--テーブルの作成
CREATE TABLE T_TEST
(
  ID INT NOT NULL,
  VALUE CHAR(2) NOT NULL
)
GO

--テストデータを入れる
INSERT INTO T_TEST VALUES
(
  1,
  '11'
)

INSERT INTO T_TEST VALUES
(
  2,
  '22'
)

-- 一意キーをセットする
ALTER TABLE T_TEST
ADD CONSTRAINT PK_T_TEST
PRIMARY KEY(ID)
GO

COMMIT

--データが2レコード表示される
SELECT * FROM T_TEST

そして、SQLServerManagementStudioをもう一つ立ち上げる。
片方のSQLServerManagementStudioをA、もう片方をBとする。
まずはAにて以下のSQLを実行。

BEGIN TRANSACTION

UPDATE T_TEST SET VALUE = '11' WHERE ID = 1

次にBにて以下のSQLを実行

BEGIN TRANSACTION

UPDATE T_TEST SET VALUE = '22' WHERE ID = 2

これでID=1の行はセッションAのロックがかけられ、ID=2にはセッションBのロックがかけらた状態に。

コミットはせず、続けてセッションAにて以下のSQLを実行。

UPDATE T_TEST SET VALUE = '222' WHERE ID = 2

するとID=2のレコードにはセッションBのロックがかかっているため、解放待ちとなる。

ここでセッションBにて以下のSQLを実行する。

UPDATE T_TEST SET VALUE = '111' WHERE ID = 1

このSQLはセッションAの解放待ちとなるため、ここでデッドロックが発生。
数秒後(設定による?)に片方のSQLは実行され、もう片方のトランザクションはロールバックされる。

ログの確認方法は、オブジェクトエクスプローラにて
管理」→「SQL Serverログ」→「現在」で確認することができる。
少し分かりにくいが、Node1、Node2がそれぞれのセッションを表しているようで、それぞれどのSQLを発行した際にデッドロックとなったか、どちらをロールバックしたかを確認することができる。

ちなみに、トレースフラグの解除は以下のコマンドをクエリウィンドウから実行する。

-- SQLServerログにデッドロックのログを出力する
DBCC TRACEOFF(1204,-1)

-- エラーログにデッドロックのログを出力する
DBCC TRACEOFF(3605,-1)

-- トレースフラグの設定確認
DBCC TRACESTATUS

PHPのアップデート

レンタルサーバー(CentOS5.8)にデフォルトでインストールされていたPHP5.1.6。
最新のWordPressを利用するには5.2.4以降のインストールが必要。
以下の手順でPHPのバージョンを変更した。

# yum erase php
# yum erase php-common

次に以下のコマンドでPHP5.3をインストール。

# yum install php53
# yum install php53-*

その後apacheを再起動。

# /etc/rc.d/init.d/httpd restart

WordPressの移行メモ

自宅サーバーにて運営していたブログですが、家庭の事情でネットが切断されることが多かったり、DDNSがうまく動作してくれないことがたまにあったりで、使いたいときに使えないことが多かったので、この度レンタルサーバーを借りて、そちらに移転することにしました。

1.レンタルサーバーの申し込み

レンタルサーバーはSaaSesという所のVPSサービス、Osukiniサーバーを選びました。
2012年4月30日までは初期費用0円キャンペーン中だったので一番安い月450円のLTプランを選びました。
OSはCentOS 64bitを選びました。

SaaSes

2.WordPressのコアファイルを抜き出す

旧サーバーのWordPressのコアファイルはApacheのドキュメントルート下のwordpressディレクトリに配置してました。
このディレクトリごと、新サーバーのApacheドキュメントルート下にごっそりと移植します。
僕はあまり小難しいことはできないのでSFTPを使って、いったん作業しているローカルにフォルダをコピーした後、またSFTPで新サーバーにコピーして、ドキュメントルート下に配置しました。

3.MySQLよりWordPressのデータベースを移植する

このデータベースの移植に昨夜インストールしたphpMyAdminを利用しました。
まず旧サーバーのデータベースをエクスポート。


これでデータベースがエクスポートされ、localhost.sqlというファイルがダウンロードできます。
この.sqlファイルは、テーブルのCreate文や、Insert文などのSQLが書かれています。
このダウンロードされたファイルを新サーバーのphpMyAdminでインポートします。

ここで問題が発生。php.iniがデフォルトなので、upload_max_filesizeが2M。
先ほどダウンロードしたlocalhost.sqlは2.9M。アップロードに失敗しました。
なので、php.iniを編集。

# vi /etc/php.ini

以下の部分を編集。

; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
; upload_max_filesize = 2M デフォルト値
upload_max_filesize = 4M

Apache2のリスタート

# /etc/rc.d/init.d/httpd restart

これでアップロードでき、新サーバーのMySQLにデータベースを取り込むことができました。

4.PHPのアップデート

データの移行が完了したので、t-wata.com(新サーバー)/wordpress/にアクセスしてみました。
しかし、PHPのバージョンが古いため対応してないとのメッセージが表示されました。
移行するWordpressのバージョンは3.3。
デフォルトでインストールされているPHPのバージョンは5.1.6。

そのため、以下の方法でPHPのバージョンを5.3.3にアップデート。
PHPのアップデート

5.WordPressのデータベースの設定を変更

PHPのアップデートをしたので、再びt-wata.com(新サーバー)/wordpress/にアクセスしてみました。
するとデータベースエラーが発生して、見ることができない。
これはWordPressの設定ファイル無いの、データベースの設定項目の情報が古いままであったことが原因でした。

# vi /var/www/html/wordpress/wp-config.php

以下の部分を編集して、設定。

// ** MySQL 設定 - こちらの情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', '(データベース名)');

/** MySQL データベースのユーザー名 */
define('DB_USER', '(ユーザー名)');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', '(パスワード)');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

/** データベースのテーブルを作成する際のデータベースのキャラクターセット */
define('DB_CHARSET', 'utf8');

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');

これで再び、t-wata.com(新サーバー)/wordpress/にアクセスしてみると、無事表示されました。

6.サブディレクトリをルートディレクトリとして表示

今の設定では、ルートディレクトリhttp://t-wata.comにアクセスすると、apacheのデフォルトのindexが表示されてしまうので、設定を変更。
WordPressの設定画面から、サイトアドレスをhttp://t-wata.comになっていることを確認。
そして、wordpressディレクトリ内にあるindex.phpをドキュメントルートにコピー。
コピーしたindex.phpの下記部分をWordPressの設定画面で設定したサイトアドレスに変更して保存。

/** Loads the WordPress Environment and Template */
require('./wordpress/wp-blog-header.php'); //ここを編集

これでhttp://t-wata.comにアクセスすると、トップページが表示されるようになりました。

7.ディレクトリ所有者の変更

wordpressディレクトリの所有者がrootになっていたため、記事を投稿する際に画像のアップロードができませんでした。
そこで以下のコマンドでwordpressディレクトリの所有者を変更。

# chown -R apache:apache wordpress

これで画像もアップロードできるようになりました。

とりあえず、現在の設定はここまで。
今のところ、以前と変わらず動いているようなので、大丈夫かな。