こちらのブログは閉鎖して、ブログを移転します。
2009年10月9日金曜日
サンシャイン牧場
初めてのmixiアプリに挑戦
久々にmixiにログインしたら、なんか色々mixiアプリの招待がきてた。色々みてると、今話題のサンシャイン牧場を発見。名前こそ聞けど、mixiにぜんぜんログインしてなかったから、ずっとなんだろう?と思ってた名前だった。サンシャイン牧場をプレイ
とりあえずやってみた。Flashアプリなのね。
昔やっていた「牧場物語」のゲームを思い出した。あれよりははるかにシンプルだが、これぐらいのシンプルさだから、続くのかもね。中国の方が開発されているようで、日本語が辺なところが多々あるのはご愛嬌。
Safariで切り取って、Dashboardに設置してみた。なかなかよいかも。
マイミクがすでに何十人もこれやってたおかげで、最初のうちから、いろんな牧場見に行ったり、荒らしたりできて楽しい。メッセージ見ると、結構な頻度で周りからのちょっかいがくる。なんかサーバーのアクセスログ見てる気分だ。。。でもなかなか面白い。
iPhoneで
少しやってみたが、結構こまめに見ておかないと、干からびてたり、育ったのに収穫し忘れて、作物をどんどんマイミクに持っていかれたりする。となると、iPhoneなんかでチェックしたいところ。しかしサンシャイン牧場はFlashアプリなので、iPhone上ではそのままでは遊ぶことができない。
てっとり早い方法としては、VNCやリモートデスクトップなどを使い、PC上のブラウザで実行しているサンシャイン牧場を、iPhoneからリモートで操作する方法が思いつく。
今回使用したiPhoneアプリは「Mocha VNC Lite」というVNCクライアントである。Mocha VNCには有料版と無料版があるが、今回の様にサンシャイン牧場したいだけであったら、無料版で十分。
macでの設定方法は、iPhoneからWindows、Mac PCを操作できるアプリ【Mocha VNC Lite】 などを参考のこと。Windowsだったら、PC側にVNCサーバーを導入してMocha VNC Liteを使うか、もしくはWindows標準のリモートデスクトップを有効にして、iPhoneアプリとしては「RDP」を使用すればいいと思う。
導入後、iPhoneの画面から、家のmacを遠隔で操作しているスクリーンショット。
こんな感じ。
水やり、虫取りは、作物をタップしていくだけなので、3G回線でもなんらストレスなく使えた。
拡大縮小もVNC側でできるから、特に操作ではこまらなかった。
投稿者 takabow 投稿日時 10/09/2009 0 コメント
ラベル: 日記
2009年10月6日火曜日
backup shell script
#!/bin/sh
export LANG=C
DATE=`date '+%Y%m%d_%H%M'`
GENERATION=2
BACKUP_PATH='/path/to/backup/dir/'
ARCHIVE_TARGET_DIR='/path/to/target/dir'
ARCHIVED_FILE_NAME=${ARCHIVE_TARGET_DIR##*/}_${DATE}.tar.gz
archive() {
echo "archive ${ARCHIVE_TARGET_DIR}"
tar zcf /tmp/${ARCHIVED_FILE_NAME} ${ARCHIVE_TARGET_DIR}
}
delete_old_backup() {
num=`ls -t ${BACKUP_PATH}${ARCHIVE_TARGET_DIR##*/}_*.tar.gz | wc -l`
num=`expr ${num} - ${GENERATION}`
if [ ${num} -gt 0 ]
then
echo "deleting ${num} files..."
for file in `ls -t ${BACKUP_PATH}${ARCHIVE_TARGET_DIR##*/}_*.tar.gz | tail -${num}`
do
rm -f ${file}
done
fi
}
if archive
then
mv /tmp/${ARCHIVED_FILE_NAME} ${BACKUP_PATH}
delete_old_backup
echo 'backup successful!'
fi
投稿者 takabow 投稿日時 10/06/2009 0 コメント
2009年9月30日水曜日
ATNDのイベントをGoogle Clendarに登録するGreasemonkeyスクリプト
探せばもうありそうな気もするけど、ほしいなと思ったので書いてみた。
インストール
Firefox アドオンのGreasemonkeyがすでに導入済みならば、
ここをクリックして、スクリプトをインストールできます。
ソース
最終更新:2009/10/05 01:04
ボタンが表示されない場合があるのを修正しました。
やっつけ仕事。
// ==UserScript==
// @name atnd2gcal
// @version 1.3
// @namespace http://tbl.jp
// @description author: takabow
// @include http://atnd.org/events/*
// ==/UserScript==
(function() {
var xpathTitle = "id('main_title')/h1";
var xpathMemberList1 = "//div[@class='side_member_num']"
var xpathMemberList2 = "id('member_list')";
var xpathDate= "id('events_show_contents')/div/dl[1]/dd/abbr/@title";
var xpathPlace= "id('events_show_contents')/div/dl[3]/dd[@class='location']";
var title = document.evaluate(xpathTitle ,document,null,7,null).snapshotItem(0).firstChild.data;
var eventDiv = document.evaluate(xpathMemberList1 ,document,null,7,null);
if(!eventDiv.snapshotItem(0)) {
eventDiv = document.evaluate(xpathMemberList2 ,document,null,7,null);
}
var abbr1 = document.evaluate(xpathDate ,document,null,7,null);
var abbr2 = document.evaluate(xpathPlace ,document,null,7,null);
var startDate = abbr1.snapshotItem(0).firstChild.data;
var endDate = startDate;
if(abbr1.snapshotItem(1)) {
endDate = abbr1.snapshotItem(1).firstChild.data;
}
var place = abbr2.snapshotItem(0);
var place1 = place.firstChild.data;
if(place.childNodes[1]) {
place1 += place.childNodes[1].firstChild.data;
}
var gcalURL = document.createElement('a');
var gcalp = document.createElement('p');
var gcalImg = document.createElement('img');
gcalImg.src = 'http://www.google.com/calendar/images/ext/gc_button2_ja.gif';
gcalImg.alt = "このイベントをGoogle Calendarに登録";
gcalURL.href = 'http://www.google.com/calendar/event?action=TEMPLATE&dates=' + startDate + "/" + endDate + '&location=' + encodeURIComponent(place1) + '&text=' + encodeURIComponent(title) + '&details=' + document.URL;
gcalURL.appendChild(gcalImg);
gcalp.appendChild(gcalURL);
eventDiv.snapshotItem(0).appendChild(gcalp);
})();
投稿者 takabow 投稿日時 9/30/2009 0 コメント
ラベル: JavaScript
2009年4月25日土曜日
Debug Hacks Conference 2009
4/23(木)にDebug Hacks Conference 2009に参加してた。実のところ、いわゆる最近流行の"勉強会"に参加するのはこれが初めて。最初ちょっとどきどきした :D
最初に感想
かなり面白く、また有益なカンファレンスだった。実際日頃から開発をしている人の考え方やアプローチを聞くことができた。
ところで、今回の参加者の方はやはり仕事で開発をされる方や、趣味で開発をされている方が多かったのだろうか。そこは実は結構気になるところだったりする。なぜなら自分は開発者ではないからだ。趣味で開発をしないといったら嘘になるが、仕事でソースコードに触れる機会はほぼないし、学生時代と比べて日常的にソースコードに触れることはほとんどなくなってしまった。
しかしながら、仕事ではコンサルティングといったことを行うため、さまざまなシステムを見る機会がある。そこではパッケージ製品やお客様の重要なシステムのように、ソースコードにアクセスできないものが多々ある。そのような場合printf()デバッグなんてそもそもできないわけで、限られた情報やツールを使ってシステムを解析し、問題点を特定する必要がある。
Conference中に「バグは自明である」という言葉が登場した。まったくもってその通りだと思う。しかしソースコードを見ることができないシステムのように、外から隠ぺいされた場合バグは自明ではなくなってしまう。
今回、書籍DEBUG HACKSやDebug Hacks Conferenceに期待した内容は、上述したように如何にして"非破壊的"にシステムの問題点を特定するかである。その方法はログを見るといった基本的なところから始まり、straceなどのツールを使うこともあるだろう。もちろんアーキテクチャを知らなければ、ツールを使えたとしても本質的な部分へのアプローチは難しい。
今まで断片として学び経験してきたDebug手法だが、DEBUG HACKSを通して、これらの基本及び応用を、体系だって再度学んで行きたいと思う。
発表内容の詳細は他の方がblogで詳しく書かれているし、そもそも動画もアップされているので、中身についてはメモ程度に。
よしおかさん
書籍DEBUG HACKSの "はじめに" を朗読。
大和さん
自分は参加登録のページでの投票にstraceの話を聞きたいと投票したのだが、したかいがあったかな。
~strace~
・straceの定石は最後から見る
・strace -i でアドレス表示
→ アドレスを使ってgdbでブレークポイント
Q:アドレスがランダマイズされる場合はどうすればいい?
A:基本的にはそういう場合は使えない。それが起こらない環境でやるしかない。
大岩さん
RPMコマンドの -f オプションや -lオプションのことは初めて知った。そういう使い方もあったのかと。sh -x はよく使ってる。デフォで使っておきたい。
~RPMコマンドによるデバッグ~
問題:/var/spool/clientmqueue/ にファイルにどんどんたまる
解決:ファイルが作成されないようにしたい
疑問:いつ誰が作ってるか分からない。
・こういうときはrpmコマンドを使う
# rpm -qf /var/spool/clientmqueue
→ sendmail-8.13.802.2AX と表示されるのできっとメール関係
・実際に生成されるファイルの中身を見る。
→ logwatch が書かれていた
# rpm -ql logwatch | grep etc
~スクリプトのデバッグ~
・bashであれば -x オプション
→ 結果だけでなく、実行されたコマンドも表示される。
安部さん
~GDBネタ~
・ユーザー定義コマンドが便利
→ debuginfoがなくても、がんばればきれいに構造体をダンプできる。
→ でもアドレスとか変わっちゃうだけで使い物にならなくなる。
→ やはりdebuginfoのシンボル情報だけでもあると楽
島本さん
~malloc() free()で障害~
・free()でsegmentation faultが起こった。
・大体の場合はこれはアプリケーションのバグ
- 2重開放
- 不正アドレスの開放
・デバッグ方法は
- メモリバグ検出ツール(Valgrind)
- glibcのMALLOC_CHECK
吉田さん
~Debug Hacks Hacks~
・Debug Hacksを使うためには、問題をの切り分けが必要。
・相関関係≠因果関係
・真の目的は何かを考える?
→ 期限は?
→ "できるだけ早く"ではダメ。明確に。
→ 最悪のケースを考える
・事例調査
・誰が対処する?
→ 自分より効率的に対処できる人や団体。助言をもらえる人。
・責任と期限を決めたら行動ありき
・目的のために、"有効ならば"手段は選ばず。
→ つまり本末を転倒しない
・原因は?
→ 疑わしいものがあったら1つずつ試す。
→ まとめてやるとどれが原因か分からない。
・事前準備
各種バックアップなど
・覚悟を決める
→ 壊れたら最悪どうする?
・切り分けの方法
→ 再現性
→ 再現手順が100%になったらほぼ完璧
Yuguiさん(園田裕貴さん)
・Rubyそのものの開発のお話
・バグを再現させる
・しかし現実にはレガシーコードの存在
→ テストがないコード
→ そのコードはなぜ必要?本当に必要?
→ 不要だと思うなら削除
→ 削除しても動くなら本当にいらないコード
・バグは自明である
→ assertをたくさん仕掛ける
→ assertを消していったら最終的に1箇所しか残らなかった。
・デバッグで特定に苦労する時点で敗北
→ しかし負けることもある。
・バグを二分探索
・誰(何)がデータを壊したか?
1. その場で壊された → 自明
2. フレームを上に上る → 引数
3. ひたすらwatch、条件でbreak point
・それでも敗北するときもある。マルチ・スレッド。
→ 最終的には試行錯誤
おまけ
Q:本の表紙が蚊取り線香なのは?
A:むしをとりましょう
→ 蚊取り線香
よしおかさんから告知
・5/9に新宿のジュンク堂で、共著のみなさんとお話し
・5/28(木)参加できなかった向けに、またイベントを開催。ミラクルリナックスの会場予定。
・Japan Linux Symposiumが10/21~23に秋葉原で開催。Linusとかも来る。
戦利品
2009年4月21日火曜日
平成21年度データベーススペシャリスト試験
平成21年度春期試験データベーススペシャリスト試験(DB)を受けてきた。高度情報処理技術者試験は一昨年のテクニカルエンジニア(ネットワーク)1に次いで2つ目。
所感
所感としては、ネットワークは普段触れていたら受かるような試験だったのに対し、データベースは普段触ってるだけじゃ受からない試験かなというところ。
一昨年のネットワーク試験では、特に午後対策もせずに臨んだが、当時大学院で専攻していたこともあり合格することができた。
しかし今回のデータベース試験はというと、用語や定義をしっかり覚えておかなければ、とても記述問題を書くことができなかった。
午前
今回から午前が午前Iと午前IIに分かれた。午前Iは高度情報処理試験の共通問題(30問)。午前IIはデータベーススペシャリストの専門問題(25問)。採点に関しては今までどおり、午前Iが合格点に満たなければ午前IIは採点されず、午前IIが合格しなければ午後Iは....という方式。
午前Iは今までで言うところの基本情報や、ソフトウェア開発技術者の午前問題に近い気がする。計算問題は定番の問題が登場。ただし、用語や制度名の意味を問う問題は、ここ2年ぐらいに登場した新しいものも出てくるので注意。
午前IIは2/3はSQLや正規化といったいわゆるDB的な問題だけど、残り1/3はどちらかというとIT一般問題。DBの問題は勉強するとして、残り1/3の一般問題は午前Iの延長みたいな感じだから、午前Iの勉強でまかなえそう。
とりあえず試験後に公開された解答で採点したところ、
午前I : 25/30
午前II: 22/25
だった。
午後
午後Iは、まじめに勉強(対策)していない自分にとって地獄の問題だった。まず問3が普通のSQLを含む問題だったので、迷わず選択。さて問題なのがもう1問をどうするか。問1も問2も、まじめに勉強した人にとっては簡単だと思うけど、サボった自分にとってはとても書けない記述問題。「関数従属」とかそういう単語を使いまくって記述するやつですね。仕方なしに問2を選んだけど、これはマジで落ちた。ムリ。
午後IIは、午前Iが散々だったのでもうまじめに受ける気力がなくなってぐだぐだ:p
問1を選択した。バックアップとレプリケーションが絡む標準的な話だったので、割と書くことができた。
あー・・・午前Iが悔やまれる。
1:新区分における「データベーススペシャリスト試験」に相当する過去試験
2008年12月17日水曜日
RHEL5をDELLへ入れようとすると、インストーラがハングアップする(Xが起動しない)
Red Hat Enterprise Linux 5 Update 2 をDELLのとあるPCにインストールしようとしたら、最初のメディアチェックのあと、インストーラーが立ち上がらずハングアップ。
Running anaconda, the Enterprise Linux system installer - pease wait...
Probing for video card: Intel Corporation 82Q963/Q965 Integrated Graphics Controller
Attempting to start native X server
Waiting for X server to start...log located in
と出た瞬間にハングアップ。画面真っ暗。
ドライバの相性問題かね。
とりあえずtextでインストールしたけど、やっぱりその後startxしてもハングハング。
探してみたらこんなの発見。
別にこれじゃなくてもいけると思うけど、まぁ新しいからこれ入れとくことにしたー
[xorg-x11-drv-i810]
http://www.jp.redhat.com/support/errata/RHEA/RHEA-2008-0420J.html
xorg-x11-drv-i810は、X Window System のX.org実装に対応したIntel統合グラフィックスチップのドライバを提供します
yum install xorg-x11-drv-i810
で簡単インストール。
あとは
/etc/X11/xorg.conf のDeviceセクションでドライバをi810に書き換えるだけで完了。
Section "Device"
Identifier "Videocard0"
#Driver "intel"
Driver "i810"
EndSection
無事startxできました。
投稿者 takabow 投稿日時 12/17/2008 0 コメント
2008年12月16日火曜日
SyntaxHighlighterを試す
public class Test {
public static void main(String args[]) {
System.out.println("Hello world!");
}
}
できた
投稿者 takabow 投稿日時 12/16/2008 0 コメント
ラベル: memo
NetAppに再起動なしでdefault gateを設定する
ファイルサーバーとして使っているNetApp社のストレージの設定をしていたときのこと、、、
NFSマウントして使っているのだが、こいつのネットワークの設定でデフォルトゲート間違ってたので修正したら、再起動しないと反映されないとか書いてやがった。
ちなみにブラウザから設定していた。
デフォルトゲートが間違っているために、一部のネットワークからNFSマウントできなくて困っていたのだが、すでに接続されているネットワーク(のNFS)を切断は避けなくてはならないため再起動できない。sshで直接接続してから、ルーティングテーブルを手動で書き換えようと情報量の少ないman routeをみながらあれこれ試してたらやっとできた。 ←(危険)
例えば192.168.1.1 -> 192.168.0.1 に変えたければ、以下のコマンドでいけた。
>route delete 192.168.1.1
>route add net 0.0.0.0 192.168.0.1 1
でも
>route -fしてフラッシュすると消えちゃうっぽい。
気持ちよくなるためには、やっぱそのうち再起動が必要なのかね。
NetAppはわからん。
全然普通のUnix的なコマンド少ないし(lsぐらいほしい)、
sshからの切断が Ctrl+Dだったりするし(exitって叩いたらCtrl+Dしろって出る…)。
投稿者 takabow 投稿日時 12/16/2008 0 コメント
ラベル: Network
2008年11月21日金曜日
夕焼け空に映える富士山
昨日今日と、会社から見える富士山がきれいだった。都内からでもこんなにもみえるんだね。
投稿者 takabow 投稿日時 11/21/2008 0 コメント
ラベル: Photo