月次アーカイブ: 9月 2011

こんにちわ、こんにちわ!スポーツの秋、食欲の秋、勉強会の秋を迎えまして、日本唯一のシェルスクリプトコミュニティ「USP友の会」が素敵な勉強会を企画しました!

[USP友の会] やわらかマッドサイエンティスツのプログラミング入門

詳しくは、こくちーずUSP友の会のサイトからご確認いただきたいのですが、

日時:2011年10月09日(13:30 開場 /14:00 開始 /18:00 終了予定)
場所:市ヶ谷健保会館会議室 D室 (東京都新宿区市谷仲之町4-39)
参加費:500円(税込)

となっています。勿論私も参加しますよー。(スタッフなので、参加者として登録していませんが)

で、昨今の勉強会について思うことがいくつか。まず、IPv6やmongodbなど、いわゆる先端技術(IPv6は10年前からその必要性が叫ばれていたけど、IPv4の日本の在庫が枯渇したのは今年なので、いわゆる旬の話題でした)の勉強会や、qpstudyなどのライトなイメージがついている勉強会は、ATNDを墜とすくらいの勢いで人気があります。

しかし、これら最先端の勉強会も大事ですが、もっと根っことなる部分、いわゆる基礎に重きをおいたテーマの勉強会も、地味ながらあることをもっと世間様に訴えたい!>< という気持ちもあるわけでして。やわらかマッドサイエンティスツのプログラミング入門は、特定の言語環境を習得するというよりも、どうやったら手戻りが少なくプログラムを書くことができるか、に焦点を当てています。しかし、私が思うにもっと大事な目的・・・真の狙いはこれなんじゃないかと。
「みんな、護身術を身につけようよ!」ということじゃないかなー、と思うのです。
IT業界の労働環境の悪さ(3Kとも7Kとも言われています)の要因として、「納期直前の仕様変更」や「連結テストフェーズで見つかる単体レベルのバグ」などは誰しも1度は経験したことがあるでしょう。こうした対処をある程度仕方ないと思う向きもあるかもしれません。しかし、最初にある程度きちんと設計していれば、バグをゼロにはできないまでも、後ろ向きな作業のためにリソースを割く割合は減らせるはずです。また、後工程で見つかったバグを修正するとなると、それに関わるプログラムすべてのテストをやり直すハメになります。こうした手戻りの積み重ねが、いわゆる「デスマーチ」となるわけで、誰も幸せになれません。

本来は上流工程である程度のバッファを見込んだスケジューリングをするべき!という声もありますが、そもそも要件や仕様が固まっておらず予算も決まっている中でできることといえば、どうしても「リソースのぶん取り合い」でしかありません。ただでさえ立場の弱いエンジニアはこうした理不尽に対して戦うことは非常に困難であり、いわゆる「大人の事情」で正論がスポイルされることも、ままある話です。

それでも、愚痴で終わったところで本質的な改善にはなりません。相手(顧客、PM、PL、営業など)に理解してもらう努力は、いわゆるオフェンシブなアプローチをまっ先に思い浮かべるでしょう。しかし、我々エンジニアも相手も人間です。攻撃されると正論かどうかより防衛本能が働きます。せっかくこちらが正論を言っても勝ち負けに持ち込まれてしまうと、結局勝敗をつけなければならず、最初から力がある方が勝つに決まっています。それに、禍根を残します。そうではなく、自分を守る術として、仕事のお作法や思考の整理をしたほうが建設的でカドも立たず、誰もがこれ以上不幸にならずに済むと思いませんか?

本物の技術は裏切らない

これは私が信じて疑わない思想信条です。勿論、最新のテクノロジーを否定するわけではありません。学ぶテーマは何でもよいのですが、案外基礎的な物の考え方を取り上げたテーマって、まだまだ少ないと思っています。私みたいに、きちんと基礎を系統立てて身につける機会が少ないまま月日が経ってしまったエンジニアもきっといる筈です。会社は機会を与えてくれますが、まじめにやっても成果は保証してくれません。それに、1人1人に合ったカリキュラムなど、本来組めるはずもなく、通り一遍のことしか教えてくれません(それすらもない会社はブラックです)。こうした環境におかれているエンジニアこそ、是非ご参加いただければと思います。勿論、まだ考え方のフレームワークが固まっていない若手エンジニアも大歓迎です。(むしろ今がチャンス!)

我々エンジニアは、好きな技術を追求する権利があると同時に、たった1人世界に放り出されてもやっていける技術を身につける特権があります。ルーチンワークは楽ですが、決まった仕様以上の仕事(パイ)はありません。しかし、人の意思の数だけ仕事があり、リソースが限られている世界にいる以上は、仕事を作り出せるという特権と引き換えに、リソース以上の仕事はできないというジレンマがあります。こうしたジレンマを自助努力で少しでも解消するための武器は、あなたの刀となり槍となり、時には盾にもなりえるでしょう。

10月9日、市ヶ谷は熱くなるはずです。きっと。500円玉握りしめて来てください。もしかしたら一生ものの財産を得るかもしれませんよ?

http://kokucheese.com/event/index/17259/

 

そういや最近自宅のKVMにVNC経由で動くubuntu 11.04 desktop をインストールしたのを思い出した (っ´∀`)っ ゃーですこんにちは。

この子もDHCPでIPアドレスを取ってくるのを思い出したので、ちょこっとPATHを変えるなどして改造してみました。ソースは以下の通り。
[cc lang='bash' ]
#!/bin/bash
LANG=C # 表示を英語にする (特定の言語環境に動作が左右されないようにするため)
TMPDIR=${HOME}/tmp # テンポラリディレクトリを指定
ADDRFILE=${TMPDIR}/IP_ADDR.txt # IPアドレス記録ファイルを指定
IFCONFIG=/sbin/ifconfig # ifconfigコマンドのフルパスを指定 (一般ユーザにはPATHが通っていないため)
EGREP=/bin/egrep # grepコマンドのフルパスを指定
AWK=/usr/bin/awk # awkコマンドのフルパスを指定
SED=/bin/sed # sedコマンドのフルパスを指定
UPCHK=$(${IFCONFIG} | ${EGREP} '(UP BROADCAST RUNNING MULTICAST)' > /dev/null 2>&1 ; echo $?) # ifconfigコマンドでUPステータスを捕まえる
MAIL=/usr/bin/mail # mailコマンドのフルパスを指定
MAILTO=oresama@example.com # 通知先メールアドレスを指定

[ ! -d ${TMPDIR} ]&& mkdir ${TMPDIR} # テンポラリディレクトリがなければ作成する

# ifconfigによる通知コマンドを関数化する
NOTIFYCMD()
{
${IFCONFIG} eth0 | ${EGREP} UP | ${AWK} '{print $1}' > /dev/null 2>&1 &&
${IFCONFIG} eth0 | ${EGREP} '(inet addr)' | ${AWK} '{print $2}' | ${SED} -e s/addr://g
}

# もしIPアドレス記録ファイルがなく、かつeth0が活性化されていたらメール通知し、IPアドレス記録ファイルを作成する
if [ ! -f ${ADDRFILE} -a 0 = ${UPCHK} ]
then
NOTIFYCMD | ${MAIL} -s "${HOSTNAME} IP Address" ${MAILTO}
NOTIFYCMD > ${ADDRFILE}
# (上の条件に合致しなかった場合)前回のIPアドレスから変更があればメール通知し、IPアドレス記録ファイルを更新する
elif [ ! $(cat ${ADDRFILE}) = $(NOTIFYCMD) ]
then
NOTIFYCMD | ${MAIL} -s "${HOSTNAME} IP Address" ${MAILTO}
NOTIFYCMD > ${ADDRFILE}
fi
[/cc]

こんだけです。そんでは、まーたー (っ´∀`)ノシ ねー♪

最近、公私にわたりデモ環境を持ち歩くことが増えたので、いちいちコンソールからログインしなくてもSSHで一撃ログインできるようにしたいなーと思っている (っ´∀`)っ ゃーですこんにちは。

私が持ち歩いているデモ環境はDHCP配下でIPアドレスを貰うようにしているので、OS起動後にeth0がUPになった後に以下の振る舞いをするようにしてみました。実行環境は、 Scientific Linux release 6.1 (Carbon) ですが、CentOSやFedora、RHELでも動くはずです。

  1. 前回のIPアドレスを保存したファイルがなく、かつeth0のインターフェイスがUPしていたら、指定したメールアドレスにIPアドレスを通知してIPアドレス保存ファイルにIPアドレスを記録する
  2. 前回のIPアドレスと今回のIPアドレスに差異があったら、指定したメールアドレスにIPアドレスを通知してIPアドレス保存ファイルに新しいIPアドレスを記録する

ソースは以下の通り。
[cc lang='bash' ]
#!/bin/bash
LANG=C # 表示を英語にする (特定の言語環境に動作が左右されないようにするため)
TMPDIR=${HOME}/tmp # テンポラリディレクトリを指定
ADDRFILE=${TMPDIR}/IP_ADDR.txt # IPアドレス記録ファイルを指定
IFCONFIG=/sbin/ifconfig # ifconfigコマンドのフルパスを指定 (一般ユーザにはPATHが通っていないため)
EGREP=/bin/egrep # grepコマンドのフルパスを指定
AWK=/bin/awk # awkコマンドのフルパスを指定
SED=/bin/sed # sedコマンドのフルパスを指定
UPCHK=$(${IFCONFIG} | ${EGREP} '(UP BROADCAST RUNNING MULTICAST)' > /dev/null 2>&1 ; echo $?) # ifconfigコマンドでUPステータスを捕まえる
MAIL=/bin/mail # mailコマンドのフルパスを指定
MAILTO=oresama@example.com # 通知先メールアドレスを指定

[ ! -d ${TMPDIR} ]&& mkdir ${TMPDIR} # テンポラリディレクトリがなければ作成する

# ifconfigによる通知コマンドを関数化する
NOTIFYCMD()
{
${IFCONFIG} eth0 | ${EGREP} UP | ${AWK} '{print $1}' > /dev/null 2>&1 &&
${IFCONFIG} eth0 | ${EGREP} '(inet addr)' | ${AWK} '{print $2}' | ${SED} -e s/addr://g
}

# もしIPアドレス記録ファイルがなく、かつeth0が活性化されていたらメール通知し、IPアドレス記録ファイルを作成する
if [ ! -f ${ADDRFILE} -a 0 = ${UPCHK} ]
then
NOTIFYCMD | ${MAIL} -s "${HOSTNAME} IP Address" ${MAILTO}
NOTIFYCMD > ${ADDRFILE}
# (上の条件に合致しなかった場合)前回のIPアドレスから変更があればメール通知し、IPアドレス記録ファイルを更新する
elif [ ! $(cat ${ADDRFILE}) = $(NOTIFYCMD) ]
then
NOTIFYCMD | ${MAIL} -s "${HOSTNAME} IP Address" ${MAILTO}
NOTIFYCMD > ${ADDRFILE}
fi
[/cc]

今回はかなり手抜きです。とりあえず初回起動(正確にはIPアドレス記録ファイルがない状態)かIPアドレスに変更がなければ通知しないので。あとはcronで適当な間隔で起動してあげればOKです。しかし、前回のIPアドレスをいちいち覚えていない場合は過去のメールを探さなきゃならないので、これまた面倒臭いです。

次回は気が向いたらarpコマンドでデフォルトゲートウェイのMACアドレスを拾って、これもまた前回との差分があればIPアドレスを通知するようにしたいと思います。そんでは、まーたー (っ´∀`)ノシ ねー♪

twitterで @mikeda からこんなメンションきた。

どうやらこのエントリを読んでいただいたようですが、確かこれCentOS4.4の時代じゃなかったかなーと記憶してます。前職で急性胆嚢炎やっちまって入院だの自宅療養だのやってたときに書いた記憶だけが鮮明に残ってますが、CentOSだって6.0が出てProftpdもepelからインストールすると1.3.3eです。せっかくなのでアップデートしようかと。

※ 2015/11/07 追記

こちらに新しい記事がありますので、Googleなどから検索された方はこちらをどうぞ。

 

 

…続きを読む