2012年11月28日

パソコン日記(2012)


1997年からはじめた身の回りのコンピュータ全体の日記コーナーです。

仕事でソフトウェア開発をやっているので、仕事も趣味もコンピュータです。 そんな生活の中で起こったことや気づいたことを紹介します。
毎日書いてるわけではないのですが、のらりくらりと続いています。


2025年 2024年 2023年 2022年
2021年 2020年 2019年 2014年 2013年
2011年 2010年 2009年 2008年 2007年
2006年 2005年 2004年 2003年 2002年
2001年 2000年 1999年 1998年 1997年

リンクアイコン トップページへ戻る


2012/01/04(水)

実家でのAndroid 無線LAN接続

年末年始に実家へ帰省しました。
実家の無線LAN にAndroid WALKMAN Zシリーズを接続するために、まずノートPCを有線LAN で接続してWeb の管理画面にアクセスして状況を確認しました。
どうやらAOSS は利用していない様子でした。
無線LANルータ本体横のシールにSSIDや接続key が書かれていたので、 それをAndroid 側に設定するとつながりました。

BUFFALOから
AOSS 接続アプリがAndroid マーケットに無償で公開されていたので事前にインストールして帰省したのですが、 利用する機会がありませんでした。

Android GMail とTwitter の通信はSSL

Android WALKMAN Zシリーズ(NW-Z1070)がAndroid(v2.3.4) 標準のGMail アプリとTwitter の公式Android アプリにて通信に用いるプロトコルを確認したく、 無線LANルータ(ブリッジモード)とルータの間にポートミラーリング機能を持つハブ(PCi S-0116FF) を挟み、Wireshark でモニタしてみました。
確認したところ、GMail もTwitter もhttps で通信していました。
パブリックな無線LANでも安心してよさそうです。

2012/07/11(水)

Apache でSSLだけをlisten する設定

Apache でSSLサイトをたてる場合で、tcp ポート443 は使うけど80 は不要な場合、 httpd.conf の「Listen 80」をコメントアウトすればOK です。

2012/07/12(木)

Cygwin のbash シェルスクリプト

WindowsXP にCygwin を入れて利用しているのですが、ふとbash スクリプトを実行できるのだろうか、と試したところ、普通にWindows 上でシェルスクリプトを動かせることがわかりました。 シェルスクリプトの改行コードはCR LF ではなくLF である必要がある点は注意です。

いろいろいじっているうちに、スクリプトの中からCygwin のコマンドだけではなくWindows 側のプログラムを呼び出せるだろうか、 と疑問に思いました。
具体的にはJava VM(JRE: java.exe)でJava で書いたプログラムをCygwin 上のbash シェルスクリプトから起動したいです。

結論としては可能でした。
ただ、スクリプトの中でjava クラスの起動引数にファイルのパスを渡す場合に /cygdrive/c/といった変換パスが渡される場合があるので、 それをJava の中でWindows 形式のパス表現へ変換する処理が必要となりました。

2012/07/13(金)

TortoiseSVN はDIGEST 認証のWebDAV に接続できない

Apache のWebDAV でSubversion のサーバをたてました。
認証はBASIC認証ではなく、セキュリティに優れるDIGEST 認証を用いるよう設定しました。
すると、eclipse のプラグインからは接続できるのですが、TortoiseSVN からは接続できません。

現在のTortoiseSVN v1.7.7 はWebDAV に対してBASIC 認証でないと接続できないとわかりました。
仕方がないので認証をBASIC 認証へ変更したところ、TortoiseSVN からも接続できるようになりました。 SVN(WebDAV) のユーザは全て再作成しました。

2012/07/15(日)

sendmail で送信先を限定する設定

メールの送信を中継する中間のサーバを構築しました。
情報漏洩を防止するため、このサーバには次の要件がありました。 調べたところsendmailで簡単にできることがわかりました。

(メーラ)→(中継サーバ: sendmail)→(SMTPサーバ: sendmail)

以下、CentOS 5.8 での話になります。
/etc/mail/mailertable ファイルに次のように中継してもよい宛先と、それ以外はエラーにする設定をします。

localhost local:
.example.com smtp:<中継先SMTPサーバのFQDNを設定>
. error:5.7.1:553 Relaying denied

上の設定例では*.example.com 宛てのメールのみ中継し、 それ以外へ送信しようとすると中継を拒否してメーラへエラーが返ります。
* の部分はかならず1以上である必要があります。daresore@example.com のように、 サブドメインがあて先に入らない場合は「.example.com」ではなく、「example.com」 のように先頭に「.」をつけないよう注意します。
sendmail が出力する/var/log/maillog に利用状況のログも記録されるので、正規のSMTPサーバへssh ログインする権限がなくても、 中継サーバの管理者権限があれば利用状況を監視できます。

mailertable を利用するためには、/etc/mail/sendmail.mc へ次の設定を追加する必要があります。

  :
  :
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
  :
  :
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
  :
  :

なお、インターネットサービスプロバイダが提供するSMTP サーバへ中継する場合などで、ポート25ではなく、 587(サブミッションポート)へ接続する必要がある場合は、sendmail.mc に次の内容を定義した上で、
define(`confRELAY_MAILER_ARGS',`esmtp')
define(`RELAY_MAILER_ARGS',`TCP $h 587')

mailertable ファイル中の「smtp:」を「relay:」 に変更するとうまくいく場合があるようです。
(もちろん、SMTP認証も求められる場合、その設定も必要となります)

その他、メール中継サーバとして必要な設定を記述して/etc/mail/ ディレクトリでmake sendmail.cf を実行するとsendmail.cf が自動生成され、/etc/init.d/sendmail restart でsendmail を再起動すると設定が有効になります。

中継サーバによる送信先の限定は、 メール送信を機能に含むシステム開発のテストで、 送ってはならない宛先へメールが行ってしまう誤送信を防止するためにも 非常に有効だと思います。
開発中システムのサーバ設定に本物のSMTP サーバを直接指定するのではなく、 中継サーバをたててそこへメール送信を向けるように設定し、 中継サーバで送信先を自社に限定(それ以外は中継を拒否) すれば本番データのマスク漏れ等のために お客様へメールを送信してしまう誤送信の事故を防止できそうです。
野良の中継サーバであれば、正規のメールサーバの管理者権限がなくても設定可能です。

2012/07/17(火)

stone

POP3 サーバとユーザPCの間にPOP3 通信を中継する中間の野良サーバを建てる必要があり、 Linux(CentOS 5.8) 上でフリーソフトの stone(仙石 浩明さん作) を利用させてもらってます。 POP3 のプロキシーというのははじめてやったのですが、 15名程度のユーザーで安定して動作しています。

stone はソースからmake linux でコンパイルし /usr/local/bin/ へ置きました。
次の設定を/etc/rc.d/rc.local ファイルの末尾へ追記し、OS 起動時にstone を常駐させてます。

# for POP3 proxy
#  -a  specify access log file
#  -l  use syslog for error log
/usr/local/bin/stone -a /var/log/stone/access.log \
-l (POP3 サーバのIPアドレス):110 110 &

アクセスログは-a 引数で指定したファイルへ出力しています。
CentOS ではログを自動でローテートするためにlogrotate が入ってます。 stone のログをローテートするために/etc/logrotate.d/stone を新規に作成し、vi で次のように設定しました。

/var/log/stone/access.log {
    sharedscripts
    weekly
    rotate 12
    create 0644 (ここにファイルのオーナを指定)
    compress
    missingok
    notifempty
    postrotate
      /usr/bin/killall -HUP stone > /dev/null 2>/dev/null || true
    endscript
}

ログをローテートした際にstone に通知する必要があり、最初はkillall でstone を終了して新規にstone を起動していたのですが、 何故かうまくいきませんでした。
ソースを確認したところ、stone もSIGHUP を送るとログを開き直すようなので、 killall -HUP stone でSIGHUP シグナルを送るようにしてうまくローテートできるようになりました。

上の設定の中で、sharedscripts はローテート対象として複数のログファイルを指定する場合に、 ログファイルごとに毎回指定処理を実行するのではなく、 全部のログファイルをローテートしてから最後に1回だけ起動するという設定です。 上の例ではログファイルは1つだけなので、なくても同じになります。

デフォルト  sharedscripts指定
ログファイル1ログファイル1
後処理ログファイル2
ログファイル2ログファイル3
後処理後処理
ログファイル3
後処理

stone のアクセスログに不審な文字列が多数出力されるので驚いて調べたのですが、 /etc/services を参照してクライアントのポート番号に対応する名前を出しているようです。
ほとんどのポートに名前がついていて、それが出てくるわけですね。 ユーザが様々な受信IDでPOP3 サーバにアタックしているのか、とびっくりしました。

2012/07/18(水)

Android のバックアップの気持ち悪い点

Google のAndroid って裏でこっそり無線LAN のパスワード送ってんじゃないか、と不安に思ってたのですが、なんと、 本当に送られてました

Android 端末は「データのバックアップ」の設定があります。 画面の説明では、 「アプリケーションのデータ、Wi-Fiパスワード、その他の設定をGoogle サーバーにバックアップする」とあります。記憶がないのですが、勝手にON になってました。その他の設定という言葉にひとくくりにするのではなく、 潔くはっきりとWi-Fi パスワードと明記されちゃってます。

Wi-Fi パスワード送られるの気持ち悪くないですか? バックアップ先、SDカードじゃダメなの?(私のAndroid WALKMAN にはSD ささらないけど)

仮想SD領域にあるメモ帳データの中に、 出入りしているビルの休日深夜の暗証番号とか書いてあるんだけど、 こういうデータも勝手に送られたんだろうか。
Google のバックアップサーバをクラッカーがクラックすると 宝の山で優先順位の高いターゲットにならないだろうか。

ユーザ作成支援スクリプト

Linux(CentOS 5.8)でsamba とWebDAV(SVN) を利用しています。 ユーザを登録する場合、Linux のユーザ、samba のユーザ、WebDAV のユーザを登録します。 ユーザは多くはないのですが、 同じID・パスワードで何種類も作成するのが面倒でユーザ作成シェルスクリプト を作成したのでここに張っておきます。
Windows 上でCygwin で動作確認しながら、最後にLinux 上で調整しました。
ユーザをある特定のグループに所属させたい場合はGRPNAME=users のところを修正してください。
最近はsamba のユーザはpdbedit というコマンドで管理するんですね。

#!/bin/bash

# "create_user.sh" user create script
#

LOGFILE=create_user.log
WORK_BASE=/cygdrive/c/tmp
if [ ! -d ${WORK_BASE} ]; then
  WORK_BASE=/var/log/
fi
LOGFILE=${WORK_BASE}/${LOGFILE}
GRPNAME=users
DIGEST_PASS_FILE=/etc/httpd/apache_svn_user.htdigest
BASIC_PASS_FILE=/etc/httpd/apache_svn_user.basic

function f_infolog {
  echo "$1" >> ${LOGFILE}
  echo $1
  return 0
}

function f_tstamp {
  /bin/echo -n  "[`/bin/date '+%Y-%m-%d %H:%M:%S'`] " >> ${LOGFILE}
  return 0
}

function f_errlog {
  f_tstamp
  f_infolog "$1"
  return 0
}

function f_abend {
  f_errlog "__ABEND__ $1"
  exit $2
}

function f_chk_linux_user {
  /usr/bin/id $1 > /dev/null 2>&1
  fresult=$?
  if [ $fresult == 0 ]; then
    return 0
  fi
  return 1
}

function f_chk_linux_password {
  dgst=`/bin/grep $1 /etc/shadow | /usr/bin/cut --delimiter=: -f 2 | \
  /usr/bin/wc --bytes`
  if [ ${dgst} -gt 5 ]; then
    return 0
  fi
  retun 1
}

function f_chk_samba_user {
  /usr/bin/pdbedit -u $1 > /dev/null 2>&1
  fresult=$?
  if [ ${fresult} == 0 ]; then
    return 0
  fi
  retun 1
}

function f_chk_digest_user {
  chk_user=`/bin/grep $1 ${DIGEST_PASS_FILE} | /usr/bin/wc -l`
  if [ ${chk_user} -gt 0 ]; then
    return 0
  fi
  retun 1
}

function f_chk_basic_user {
  chk_user=`/bin/grep $1 ${BASIC_PASS_FILE} | /usr/bin/wc -l`
  if [ ${chk_user} -gt 0 ]; then
    return 0
  fi
  retun 1
}

if [ ! -O /bin/su ]; then
  echo "no enough privilege(needs root)"
  exit 100
fi

f_infolog "-------------------------------"
f_tstamp
f_infolog "`/bin/basename $0` for $1 start"

username=$1
password=$2

if [ ${username}XX == XX ]; then
  f_abend "username missing as argument" 101
fi

if [ ${password}XX == XX ]; then
  f_abend "password missing as argument" 102
fi

echo -n "0) create user [${username}]  OK [y/n] ? "
read ANS

if [ ! ${ANS} == y ]; then
  echo "bye"
  exit 0
fi

echo
echo -n "1) create linux user [y/n] ? "
read ANS

if [ ${ANS} == y ]; then
  /usr/sbin/useradd -g ${GRPNAME} -s /bin/bash -m -d /home/${username} ${username}
  result=$?
  if [ $result != 0 ]; then
    f_abend "useradd error" 110
  fi

  f_chk_linux_user ${username}
  result=$?
  if [ $result != 0 ]; then
    f_abend "useradd check error" 111
  fi
  
  f_tstamp
  f_infolog "created linux user [${username}]"
fi

echo
echo -n "2) create linux password [y/n] ? "
read ANS

if [ ${ANS} == y ]; then
  /usr/bin/expect -c "
  set timeout 20
  spawn /usr/bin/passwd ${username}
  expect ssword:\  ; send \"${password}\r\"
  expect ssword:\  ; send \"${password}\r\"
  interact
  "
  result=$?
  if [ $result != 0 ]; then
    f_abend "passwd error" 112
  fi

  f_chk_linux_password ${username}
  result=$?
  if [ $result != 0 ]; then
    f_abend "linux passwd check error" 113
  fi
  f_tstamp
  f_infolog "created linux password for user [${username}]"
fi


#
# <add new user>
#   pdbedit -a -u user
#
# <delete user>
#   pdbedit -x user
#
# <change passwd>
#   smbpasswd user

echo
echo -n "3) create samba password [y/n] ? "
read ANS

if [ ${ANS} == y ]; then
  /usr/bin/expect -c "
  set timeout 20
  spawn /usr/bin/pdbedit -a -u ${username}
  expect ssword:; send \"${password}\r\"
  expect ssword:; send \"${password}\r\"
  interact
  "
  result=$?
  if [ $result != 0 ]; then
    f_abend "pdbedit error" 114
  fi

  f_chk_samba_user ${username}
  result=$?
  if [ $result != 0 ]; then
    f_abend "samba user check error" 115
  fi

  f_tstamp
  f_infolog "created samba password for user [${username}]"
fi

echo
echo -n "4) create SVN password (BNASIC) [y/n] ? "
read ANS

if [ ${ANS} == y ]; then
  /usr/bin/expect -c "
  set timeout 20
  spawn /usr/bin/htpasswd ${BASIC_PASS_FILE} ${username}
  expect ssword:  ; send \"${password}\r\"
  expect ssword:  ; send \"${password}\r\"
  interact
  "
  result=$?
  if [ $result != 0 ]; then
    f_abend "htpasswd error" 116
  fi
  f_chk_basic_user ${username}
  result=$?
  if [ $result != 0 ]; then
    f_abend "SVN user check error" 117
  fi

  f_tstamp
  f_infolog "created apache SVN password for user [${username}]"
fi

echo
echo -n "5) create SVN password (DIGEST) [y/n] ? "
read ANS

if [ ${ANS} == y ]; then
  /usr/bin/expect -c "
  set timeout 20
  spawn /usr/bin/htdigest ${DIGEST_PASS_FILE} \"SVN Server\" ${username}
  expect ssword:  ; send \"${password}\r\"
  expect ssword:  ; send \"${password}\r\"
  interact
  "
  result=$?
  if [ $result != 0 ]; then
    f_abend "htdigest error" 118
  fi
  f_chk_digest_user ${username}
  result=$?
  if [ $result != 0 ]; then
    f_abend "SVN user check error" 119
  fi

  f_tstamp
  f_infolog "created apache SVN password for user [${username}]"
fi


f_tstamp
f_infolog "$0 normal_end time $SECONDS sec"
f_infolog "."

パスワードをコンソール入力するコマンドと対話するためにexpect を利用しています。 入ってない場合、CentOS ではyum install expectで入れてください。 使い方は、上のスクリプト名がcreate_user.sh とするとroot 権限でcreate_user.sh ユーザ名 パスワードです。 質問にy かn で答えていくと必要なユーザを作成します。
(スクリプトの改行コードがCR LFだと実行できないのでLFにしてください)

Linux ユーザを作成し、Linux パスワードは作成しない場合、 そのユーザはsamba やWebDAV(SVN) は利用できますが、Linux 自体へのログイン(ssh やコンソール)はできなくなります。

DIGEST 認証でWebDAV ユーザを作成する場合、上の「SVN Serever」 の文言は適切なレルム名に変更してください。

samba はxinetd で起動

昔samba をたてた時、ユーザやグループを新規に追加しても、 デーモンとして起動済みのsamba は追加されたユーザを認識できず、samba を再起動する必要がありました。 利用者がいると再起動できない場合があるので、 ユーザを追加すると深夜に再起動を予約(at コマンドを利用)し、 確実に利用できるのは翌日から、といった不便がありました。

これを解決するために、今回はsamba をデーモン起動するのではなく、 リクエスト毎にxinetd で起動するようにしました。

/etc/xinetd.d/へ次の内容でnetbios-nsnetbios-ssn を設置し、xinetd を再起動でOK でした。 xinetd は入ってなかったので、yum install xinetdで入れました。

# default: off
# description: samba nmbd
service netbios-ns
{
	disable	= no
	socket_type     = dgram
        protocol        = udp
	wait            = yes
	user            = root
	server          = /usr/sbin/nmbd
	log_on_success  =
        flags           = NOLIBWRAP
}


# default: off
# description: samba smbd
service netbios-ssn
{
	disable	= no
	socket_type     = stream
        protocol        = tcp
	wait            = no
	user            = root
	server          = /usr/sbin/smbd
	log_on_success  =
        flags           = NOLIBWRAP
}

2012/07/24(火)

Apache のhtpasswd とhtdigest

Apache でBASIC認証する場合、htpasswd を実行してパスワードファイルを作成し、ユーザを登録します。
--help で確認できるように、htpasswd には次のようなオプションがあります。

-cBASIC認証用のパスワードファイルを新規に作成する
-D 指定ユーザをパスワードファイルから削除する
-b パスワード文字列をキーボードではなく、引数から受け取る
-p パスワードをプレインテキストで保存する(デフォルトはMD5)
-s パスワードをSHA ハッシュ形式で保存する(デフォルトはMD5)

既存ユーザのBASIC 認証パスワードを変更したい場合はオプション無しでパスワードファイルとユーザ名を引数に与えてhtpasswd を実行します。変更する前の現在のパスワードは聞かれないため、 ユーザにssh でログインさせて自由に変更させられない問題があります。
また、既存ファイルが存在するのに「-c」でBASIC 認証ファイルを新規作成しようとすると、 警告なしの問答無用で既存ファイルが失われます。

DIGEST 認証の場合、 ハッシュではなく復元できる形式でパスワードを保存しないとうまくいかないのではないか、 DIGEST 認証のパスワードファイルは危険ではないかと思ったのですが、 ソースを確認したところ「ユーザ名:レルム名:パスワード」という文字列をMD5 でハッシュ化したものが保存されていました。
なので、次のコマンドラインでhtdigest が作成するファイルの第3 項目と同等のハッシュ文字列を生成できます。

/bin/echo -n ユーザ名:レルム名:パスワード | openssl dgst -md5

改行を抑制するために「-n」オプションが必要です。 シェル組み込みのecho にはこのオプションがないので、/bin/echo を明示的に呼ぶことがポイントです。

htdigest のオプション引数はファイルを新規に作成する「-c」しかありません。 実はいろいろオプションがあるのでは、とソースを見たのですが、本当に-c しかないようです。
パスワードファイルからユーザを削除するには、エディタで該当ユーザを手動削除 する方法が一般的ですが、ソースを見ててアルゴリズム的に htpasswd の-D は、htdigest が作成するファイルにも使いまわしできることに気づきました。

htpasswd -D (htdigestで作成したファイル名) (削除したいユーザ名)

でDIGEST認証のファイルからユーザを削除できます。
なんか間違いそうで少し怖いですね。 htdigest_del_user.sh とかにラッピングしとくとよさそうです。
あ、1つのファイルに同じユーザ名で複数のレルムでユーザ登録している場合、 レルムを問わず指定ユーザが全て削除されるので要注意ですね。

ユーザ名文字列に「:」を含む場合、htdigest でユーザは作れてしまいますが、 このユーザは有効なのかな? htpasswd の-D で削除はエラーになります。

2012/08/13(月)

Norton 先生、Mule を削除する!

Windows XP のhosts ファイルを変更するために、 15年以上愛用しているMule for Windows 2.3 で編集し、save しようとしたところ、 Norton Internet Security 2012 のSONAR が誤認識しやがって、mulent.exe を勝手に削除されてしまいました。環境壊すな。脱力。 今後はmule2 を対象から除外するようにNorton を設定。

SONAR はプログラムの振る舞いを見て未知のウィルス/ワームを抑制する機能のようです。
バルーンTips 風の窓で画面の右下にメッセージが出たから誤検出されたとわかりましたが、 バルーンTips をdisable している環境ではHDD からファイルが消えたように見えるかもしれません。 あるいはファイルが減っていることすら気づかないかも。

2012/08/19(日)

小型液晶モニタ On-Lap1302

リビングのコタツで利用するデスクトップPC用に、小型の液晶モニタを購入しました。 TEKWIND 社の On-Lap1302 という製品で、量販店で15,800 円でした。

On-LAP1302

写真のキーボードはLENOVO のトラックポイント付きUSBキーボード(SK-8855) になります。

13.3インチのTN液晶でWXGA(1366x768)の解像度があります。 HDMIとアナログVGAによる入力が可能で給電はUSB経由です。 スピーカーはついてないので音は鳴りませんが、映像信号を暗号化して伝送するHDCP に対応しているので店頭デモではPS3に接続されていました。

ノートPCの液晶の横に装着して、デュアルモニタにする利用法もサポート (というか、これがメインの利用法なのかもしれない) されていて、 その場合は写真の金具を付属の両面テープでノートPCの液晶側にはるようです。 (ヒンジが硬めなので、開け閉めの時に両面テープがはがれないかな?)
小さい方の写真はこの液晶モニタの裏側で、右横がヒンジ部分です。 180度回転します。

ノートPCにつける金具 ヒンジの様子

給電用USBケーブルと専用HDMIケーブルの長さはどちらも約90cm です。 PCまで届かないので、次のようなHDMI メスメスの中継アダプタで延長しました。 USBの方は延長ケーブルが普通に市販されてますね。

HDMIの中継アダプタ

実際の使用感ですが、視野角による映り具合の変化が大きい(ただし、 輝度を下げると低減)ことと、付属のスタンドの安定感がなく今ひとつです。 ケーブルが角の部分から出るので、引き回しに注意しないと中で断線しそうです。 ケーブルは液晶側のコネクタが独自仕様なので、 断線するとメーカーから直接売ってもらうしかなく残念です。 それ以外はHDMI接続でこのサイズでこの解像度の液晶ディスプレー製品はないはずで、 まあ画面は映るので貴重な製品だと思います。

2012/08/29(水)

Cygwin のemacs 24.1

Windows 7(64bit版) ではMule for Windows 2.3 は古すぎてうまく動かないようです。
代替手段を検討しました。

私はコマンドプロンプト(cmd.exe) の中でコンソールモード(-nw 引数で起動)でEmacs を利用します。Windows NT4.0 の頃から15年以上このように利用してきました。 日本語入力はWindows のIMEです。

いろいろなEmacs がありますが、Windows7 のコマンドプロンプトで-nw で日本語を扱えるものは多くないようです。
あれこれ試してみたところ、Cygwin で配布されているemacs-24.1 でできそうです。

コマンドプロンプトからCygwin のemacs を起動するために、Cygwin のbin やusr\bin を環境変数PATH に通します。 また、日本語入力した文字列末尾の文字化けを避けるため、 環境変数LANGja_JP.sjis に設定します。 .emacsファイルには次の設定を記述しました。 Emacs の中でファイル操作画面を提供するdired で、 グループ名の文字化けを回避したり「f」 によるファイルオープンができるようにするための設定も入れてます。

(set-language-environment "Japanese")
(set-default-coding-systems 'sjis)
(set-terminal-coding-system 'sjis)
(set-buffer-file-coding-system 'sjis)
(set-keyboard-coding-system 'sjis)
(modify-coding-system-alist 'process "" 'sjis)

; to avoid dired problems
(add-hook 'dired-load-hook
   '(lambda ()
       (setq dired-listing-switches "-Gglha")
    )
)

emacs の起動は「emacs-nox -nw ファイル名」です。

emacs 24.1 日本語の様子
emacs 24.1 dired の様子

2012/09/02(日)

ホームネットワークでDLNA映像連携

先日組んだWindow7 機 にはスピーカを接続していません。
音を出せるように、まずアクティブスピーカの購入を検討しました。 BOSE のComputer MusicMonitor とかすごくよさそうなのですが、 4万円近くするのでまだ買わず検討を継続。

ところで、Windows7 はDLNA 等のホームネットワークマルチメディア対応がXP より進んでいることを思い出しました。このPCはリビングに設置しており、DLNA に対応したSONY のテレビKDL-22EX300 やPlayStation3 があり全て有線イーサネットでつながってます。 これらとの連携を実験してみました。

最初にWindows MediaPlayer(Ver 12.0.7601.17514)を起動し、「ストリーム」 プルダウンにある「ホームメディアへのインターネットアクセスを許可する」 をクリックすると、オンラインIDをリンクするだとか、その先にはWindows ユーザーアカウントにオンラインID をリンクするとかといった手続きが控えており、 何かやりたいこととは違う気がします。これはパス。
これは違う

次に、キャプチャして保存した動画ファイルを右クリックすると「リモート再生」 のメニューの中にネットワーク上のDLNA 対応のテレビが選択肢に現れるではありませんか。
テレビへ動画をスロー

それを選択すると、なんと地上波を受信していたテレビをハイジャック して元の動画がテレビ上でリモート再生されました。 DLNA のThrow というやつでしょうか。 かなり簡単です。量販店とかでいたずらされないのか心配になってしまいます。 この方法による再生では、動画の画質はかなりダウンしているようで残念です。

PS3 の方はクロスメディアバーから「ビデオ」のメニューを確認すると、 「Windows Media Player」のアイコンでWindpws7 がDLNA サーバとして認識されてました。
PS3 にMediaPlayer のアイコンが出現

しかしそれをクリックしても、何かエラーになります。 サーバー側で設定が必要なようです。
MediaPlayer 側で「ストリーム」 のプルダウンメニューからネットワークを「ローカルネットワーク」へ設定し、 詳細はもうわからなくなりましたがいくつか設定をすることでPS3 上からWindows7 上のコンテンツにアクセスできるようになりました。 動画の画質も満足できます。

PS3 はSHARP の42inch のテレビに接続しているのですが、このテレビはDLNA に対応していません。 単体でDLNAに対応しているもう1台のテレビ(=さっきから登場しているKDL-22EX300) のメニューにはWindows7 のDLNAサーバアイコンが現れなかったのですが、 「設定」→「通信設定」→「接続サーバー診断」で検索すると検出でき、「ビデオ」 のメニューに現れるようになりました。PS3ではこれが自動検出だったようです。

2012/11/28(水)

正常にシャットダウンできない

夏に組み立てた、Intel DZ77SL-50K マザーボードを用いたWindows7 64bit 自作機ですが、シャットダウンした時に20回に1回くらいの割合でHDD のアクセスランプが点灯したままになり、 シャットダウンがフリーズすることがあります。
待ってもその状態がずっと続くので、 こうなると手動で電源ボタンを長押しして強制的に電源をオフしています。
その後にPCを起動すると、Windows の前回正常にシャットダウンしていませんね、 的な警告は出ないので、OS から見るとシャットダウンに必要な処理は完了できているのかもしれません。

インターネット上の情報を参考に、次の対処を試してみましたが、 いずれも効果はありません。

1. マザーボード関連のドライバを最新のものに更新する
2. shutdown.exe のショートカットを作成し、シャットダウン操作はこれで行う
3. Windows のHDD 省電力設定をOff にする

それではと、2012年11月に公開された、このマザーボード用の最新のBIOS に更新してみることにしました。
すると、更新はうまくいったような感触なのですが、PC が起動できなくなってしまいました。

BIOS アップデート失敗からの回復

Intel のマザーボード DZ77SL-50K のBIOS(2012/11/21 SLZ7710H.86A version 0091) の更新に失敗したようで、PC が起動できなくなりました。

経緯としては、Windows 上から実行できるexe 形式のBIOS アップデートユーティリティ SLZ7710H.86A.0091.EB.WINPE64.EXE を用いました。 ボタンをマウスでクリックするとPCが再起動し、起動時にBIOS がうまく更新されたように見えました。
その後の再起動後、オンボードのHDMI 端子に接続した液晶モニタには全く画面が表示されません。OSも起動されません。 オンボードで圧電スピーカが搭載されてますが、この時にビープ音はありません。 しばらくすると勝手に再起動するのですが、同じことが延々と繰り返されます。

このマザーボードの英語マニュアルをIntel のWeb サイトから入手できます。 それによると、BIOS Setup Configuration ジャンパを抜いて、BIOS の.BIO 形式ファイルをルートディレクトリに置いたCD-R やUSB フラッシュメモリからリカバリできるようです。自力でUSBフラッシュ読むんだ。 これらはbootable でなくてもよいとあります。

INTEL のサイトから2012/11/21 版のSL0091.BIO をダウンロードしてUSB フラッシュメモリのルートディレクトリに置き、 ジャンパを抜いてPCを起動すると画面が映るようになり、何もしなくてもBIOS が自動で読み込まれました。 停止してジャンパを元に戻してBIOS の設定が問題ないこととOS を起動できることを確認。見事リカバリに成功しました。 BIOS とばしても、なんとかできるようになってるんですね。


メインメニュー へ戻る