不具合が出た

また不具合をだしてしまった。
今回の原因は、

  • 試験が未完了
  • 相談ができてない
  • DRが不十分
  • 机上デバッグが不十分

だった。

試験が未完了

なぜ試験が未完了のまま出したのか。
それは時間が足りなかったから。

時間が足りないのをなぜ言わなかったのか。
言ってもスケジュールを伸ばしてもらえるとは思わなかったから。

最低だが、こんな所。
またこの時は相談するという選択肢が自分には無かった。

ただ、報告はするべきだったと思う。
報告をしておけば、顧客も状況はわかっていただろうし。
こっちとしても報告はしているから、最低限の事はできていることになる。

相談ができてない

相談ができてないというか相談しなかった。
相談しても無駄だと思ったから。
相談しても原因の追及やなんとか間に合わせろとしか言われないと思ったから。

今までは相談しても「どうすんの?」とか「それでいけるの?」としか返ってこなかった。
それを聞きたくて相談してるのに、「どうしてそんなこと起きてるの!?」と聞かれ、問題が解決せず、方向性も定まらず、ただ、時間が過ぎていくだけだった。

原因の追及を批判しているわけじゃない。
原因を見つけ、解決策を見つけるのは大事。

ただ、切羽詰まってるのに問題を先に解決せず、原因を追及するのは間違ってると思う。
後で対策をじっくり考えた方がマシ。

それができないから相談しなかった。

DRが不十分

これも時間がないといえば時間がなかったからだが、これは客も悪いと言える。

ただ、最近他のDRで思い込みや不具合を発見でき、DRをするのは非常に有効だと思った。

客がやってくれなくても、社内でできないか調整を考えてみる。

机上デバッグが不十分

今までは机上デバッグを頭の中だけで考えていた。

じっくりやると時間がかかるため。
でもこれも、じっくりやれば解決できるのはわかった。
やり方は下記の通り。

  1. Excelにシンボル名を貼り付ける
  2. シンボル名の隣に実際の値を記述する
  3. コード通りに値を変えていく

これで、漏れを防ぐ事が可能だとわかった。

やっぱり実際に値を見てやらないとわからない。


また、試験の方法としては、

  1. 要求仕様から試験のパターンをExcelに書く。数値も記述する。
  2. 表と要求仕様の目的があっているか確認。
  3. 単体試験を実施し、表通りに動いているか確認。

これで、表の漏れが防げる。

後はコードをフローとしてイメージすると良いかもしれない。

まとめ

時間が無い。
それで、試験やDRをサボった結果、不具合を出す。

時間がなければ、相談すればいいじゃないか。

それができなかった。いや、しようとしなかった。
今までは相談しても解決へ近づいたことが無かったから。

でも、今は上司が変わったおかげで、相談したほうが解決に近くなることがわかった。
方向性を定めることが大事ということもわかった。
きちんと報告するべき意味もわかった。

そういう意味で今回は失敗して正解だったと思う。

顕熱と潜熱について

高顕熱エアコンってなんぞ? - 適当な事を適当にかいていくブログからの続き。

前回、潜熱がなんなのかわからなかったがようやくわかってきたのでまとめ。


ここでもう一回顕熱と潜熱の定義を書く。

  • 顕熱:温度が上昇下降する時に変化する熱。
  • 潜熱:温度が一定で、物質の状態が変化する時に発生する熱。

前回は、温度が一定なのに熱が発生するってどういう事?と疑問に思っていた。

それを理解するには熱と分子の状態について理解しなければならない。

熱とは

まず熱から。
熱とは分子(原子)の運動エネルギーの事。
分子の運動が激しくなると温度が高くなり、分子の運動が緩やかになると温度が低くなる。

分子の状態とは

次に分子の状態について、
固体:分子があまり動かず、分子間の距離もほぼ一定。形は一定。
液体:固体より激しく動くが、分子間の距離は一定。形を変えることができる。
気体:液体よりさらに激しく動く。分子間の距離は大きくなる。

つまり、固体から液体に変わる時は、分子は運動している事になる。

潜熱とは

ここでもう一回潜熱とは、

  • 潜熱:温度が一定で、物質の状態が変化する時に発生する熱。

物質の状態が変化する→分子が運動している→でも、温度は一定→熱はどこへ消えた?
答えは、物質が状態変化する時に熱が使われた。

このように、温度として現れない熱を潜熱という。


文字通り潜んでいる熱という意味だった。
わかれば簡単だった。

参考:
わかりやすい高校物理の部屋
潜熱

VNCで接続に失敗する。

MacでVNCでリモートデスクトップを行おうとしたら、なぜかアクセスできなかった。

そこで、リモート先で、

$ vnc4server :2

とすると、ポート番号5902でなぜか接続できた。

$ vnc4server -kill :1

Can't find file /home/mkit/.vnc/mkit-KVM:1.pid
You'll have to kill the Xvnc4 process manually

と返され、なぜか終了できない。

$ ps aux | grep vnc

で検索しても何も出てこない。

再起動しても直らないので、原因がさっぱりわからない。
これはとりあえず対処法として、5902を使う事にした。

ufwを使用する

LinuxMintにはiptablesが入っていなかった。
そのかわりiptablesより便利なufwが入っていたのでそちらを利用した。

#現在の状態を確認する
$ sudo ufw status
#TCPポート53番を開く
$ sudo ufw allow 53/tcp
#TCPポート53番を削除する
$ sudo ufw delete allow 53/tcp
#標準ですべてのアクセスを拒否
$ sudo ufw default DENY
#ファイアウォール有効
$ sudo ufw enable
#ファイアウォール無効
$ sudo ufw disable

設定値は「/lib/ufw」もしくは「/var/lib/ufw」以下の「user.rules」に保存される。

iptablesより楽でいい。

さくらVPSのMintにリモートデスクトップで接続

さくらVPSにLinux Mint 14 Nadia (64bit) をインストール - 適当な事を適当にかいていくブログからの続き。
さくらVPSのMintにリモートデスクトップで接続できるようにする。

Mintをリモートデスクトップで繋ぐには

  • vinoを使う
  • vncserverを使う

の二通りがある。今回はvncserverを使用した。

VNCサーバーのインストールと起動

まず、VNCサーバーをインストール

$ sudo apt-get install vnc4server

VNCサーバーを起動

$ vncserver

パスワードを聞かれるので、パスワードを入力。

これで、Macなら⌘+Kで、
vnc://hostipaddress:5901
で接続できる。

ただし、このまま接続すると、暗号化されていないため、パスワードなどがダダ漏れになる。

sshポートフォワーディング

暗号化通信を行うため、sshポートフォワーディングを行う。

ssh -L 10022:hostipaddress:5901 -p 10022 hoge@hostipaddress

その後、
vnc://localhost:10022
に接続する。

これで、セキュアな通信が可能となる。

ちなみに、sshで -p 10022 オプションつけているのは、10022以外のポートではssh通信できないようにしているため。
標準(ポート:22)なら -p はつけなくて良い。
また、sshd_config に Port 5901 を追記することを忘れずに。

/etc/sysconfig/vncservers の設定

このまま繋いでも、真っ黒な画面が表示されるだけだと思う。これはxfceが起動していないから。
そこで、~/.vnc/xstartup に下記を追記する。

exec /bin/sh /etc/xdg/xfce4/xinitrc &

また、複数ユーザーを指定したい場合は、

mkdir -p /etc/sysconfig/
sudo vi /etc/sysconfig/vncservers

で、vncservers ファイルを作成し、

VNCSERVERS="1:user1 2:user2 3:user3"
VNCSERVERARGS[1]="-geometry 1280x992 -depth 16"
VNCSERVERARGS[2]="-geometry 1280x992 -depth 16"
VNCSERVERARGS[3]="-geometry 1280x992 -depth 16"

を記述する。 -geometryが解像度で、depthがビットカラー。なぜかビットカラーが32では黒い画面のままだった。

サービスの登録を行う。

/etc/init.d/vncserver を作成し、以下のように編集する。

 #!/bin/bash
 #
 # chkconfig: - 91 35
 # description: Starts and stops vncserver. \
 # used to provide remote X administration services.
 
 # Source function library.
 # . /etc/init.d/functions
 
 # Source networking configuration.
 # . /etc/sysconfig/network
 
 # Check that networking is up.
 # [ ${NETWORKING} = "no" ] && exit 0
 
 unset VNCSERVERARGS
 VNCSERVERS=""
 [ -f /etc/sysconfig/vncservers ] && . /etc/sysconfig/vncservers
 
 prog=$"VNC server"
 
 start() {
 REQ_USER=$2
 echo -n $"Starting $prog: "
 ulimit -S -c 0 >/dev/null 2>&1
 RETVAL=0
 for display in ${VNCSERVERS}
 do
 export USER="${display##*:}"
 if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
 echo -n "${display} "
 unset BASH_ENV ENV
 DISP="${display%%:*}"
 export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
 su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
 fi
 done
 }
 
 stop() {
 REQ_USER=$2
 echo -n $"Shutting down $prog: "
 for display in ${VNCSERVERS}
 do
 export USER="${display##*:}"
 if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
 echo -n "${display} "
 unset BASH_ENV ENV
 export USER="${display##*:}"
 su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
 fi
 done
 "\n"
 echo "Vncserver Stopped"
 }
 
 # See how we were called.
 case "$1" in
 start)
 start $@
 ;;
 stop)
 stop $@
 ;;
 restart|reload)
 stop $@
 sleep 3
 start $@
 ;;
 condrestart)
 if [ -f /var/lock/subsys/vncserver ]; then
 stop $@
 sleep 3
 start $@
 fi
 ;;
 status)
 status Xvnc
 ;;
 *)
 echo $"Usage: $0 {start|stop|restart|condrestart|status}"
 exit 1
 esac

パーミッションを変更。

$ sudo chmod a+x /etc/init.d/vncserver

さくらVPSにLinux Mint 14 Nadia (64bit) をインストール

さくらVPSにMintをインストールして、VNCでリモートデスクトップしたいと思った。
そこで、さくらVPSにNadiaをインストールした。今日はインストールまで。
そのメモを書く。

手順は、

  1. NadiaのisoイメージをDownload - Linux Mintからダウンロード
  2. さくらVPSのVPSコントロールパネルを開き、OS再インストールを選択。
  3. 「ISOイメージインストールへ」をクリックし、アカウント作成をクリック。
  4. 接続アカウント情報がでるので、そこへsftpでアップロード
  5. アップロード完了すると、確認ボタンが出るのでクリックし、ISOイメージでサーバを起動させる。
  6. 「インストールを開始しました」という画面が出る。その画面のホスト名などをメモっておく。
  7. リモートコンソールからVNCコンソールを開く。
  8. Nadiaが起動していると思うので、次にネットワークの設定を行う。
  9. Menu→設定→Network Connectionsを選択。
  10. Wired Connection 1 を選択し、Editを押す。
  11. IPv4 Settingsタブを開き、MethodをManual にし、Addボタンを押して、先ほどメモしたIPアドレスなどを記述する。
  12. Search domainは記述しなくてもよい。(というか何を記述すればいいかわからなかった)
  13. これでネットに繋がるようになったので、デスクトップのインストールをダブルクリックして、インストール。

これでインストール完了〜。
インストールに失敗した場合は、isoイメージがちゃんとアップロードできているか確認したほうが良い。

ちなみに、sftpの例。

$ sftp username@hostname 
sftp> cd /iso/
sftp> put linux-mint-14.iso # ファイル名は適当

最後に、上記をMacのChromeで実施したところ、ChromeJavaプラグインが対応していないため、VNCコンソールを開けなかった。そこで、今回はSafariを使った。
chromeは32bit版しかないのね。知らなかった。

Ubuntuに3TBのHDDを増設した

Ubuntuは標準だと2TBまでしか認識できない。3TBのHDDを認識させるにはパーティションの規格をGPTにしなければならない。

fdiskでは2TBまでしか扱えないため、GNU Partedを使用する。

まず、パーティションを作成する接続先を調べる。

$ sudo fdisk -l 

で接続先を調べる。今回は、/dev/sdb だった。

次に、partedでパーティション作成を行う。

$ sudo parted /dev/sdb

これで、プロンプトが(parted)になる。

次に、

(parted) print

で現在のパーティションの表示。新規の場合は、Numberなどが表示されるだけで数値は出ないはず。

もし、あった場合は、

(parted) rm 1

で消す。2,3もあったら全部消す。

その後、パーティション作成

(parted) mklabel gpt
(parted) unit GB
(parted) print free
(parted) mkpart extended ext4 1 3001
(parted) quit

mklabel gpt で GPTでパーティション作成。
unit GB で開始位置、終了位置の表示サイズを指定。
print free でパーティションを作成する開始位置、終了位置を調べる。
mkpart で今回は増設なので、extended 、ファイルシステムext4、3TBを購入したので、1-3001までを指定。

これでパーティション作成は完了。

次に、ディスクをフォーマットする。

$ sudo mkfs.ext4 -m 0 /dev/sdb
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y # (全領域を使うので y と入力する)

-m をつけないとデフォルトでは5%をシステムで確保してしまうんだとか。
今回は1パーティション全てをext4でフォーマットしたいので、yを入力。

マウントを行う。

$ sudo mkdir /mnt/exthd1
$ sudo chmod 777 /mnt/exthd1
$ sudo mount -t ext4 /dev/sdb /mnt/exthd1

上記で、マウント先を作成してマウントを行う。 -tはファイルシステムを指定するオプション。

最後に、起動時に自動でマウントされるようfstabに追加。

$ sudo blkid /dev/sdb
$ sudo vi /etc/fstab

今回は、dumpなし、fschkもしなくて良いので、
UUID=/dev/sdbのUUID /mnt/exthd1/ ext4 defaults 0 0
を/etc/fstab に追記した。

後は、自分の設定で、

$ mkdir -p /mnt/exthd1/video
$ ln -s /mnt/exthd1/video /var/www/epgrec/video

で、epgrecのvideoのシンボリックリンクを作成し、録画ファイルは全て3TBのHDDに保存するようにした。

参考:
Linux 3TB HDD 増設: 開発系いろいろメモ -- ahiru studio --
http://trialpc.net/blog/2007/09/post-986.php
ディスクのUUIDを調べる方法 - かみぽわーる
Parted でパーティションの作成(分割) その1 | 個人的健忘録 from 2009 - 楽天ブログ
Ubuntu日本語フォーラム / オートマウントについて
LinuxのUbuntuでHDDをext4でフォーマットするコマンド - MiuxMiu
4.8 ストレージの追加と管理[追加ディスクオプション、NAS/Bオプション] | 4 管理・設定ガイド(オペレーション編) | IIJ
[ThinkIT] 第5回:OSSでのバックアップ手法(後編) (1/4)
http://unixlife.jp/unixlife/linux/sys-fstab.jsp
http://www37.tok2.com/home/nobusan/partition/parted/index.html#commands