2013年4月16日火曜日

シェルスクリプトで自身のフルパスを取得

T/Oです。
いっつも忘れるので。
[bash]
#!/bin/sh

hoge=$(cd `dirname $0`; pwd)/`basename $0`
echo $hoge
[/bash]

こんな感じで。

2013年4月7日日曜日

スタンドアローンで動作する祝日判定スクリプト

タイトルどおりなんですが、仕事で必要なので作ってみました。(ついでに社内のレポートもあったので)。
でも、最近仕事が忙しくて、悲しいかな業務時間に作業してないので、せっかくなのでブログにも置いときます。
社内のレポートは業務時間を使ってもいいことになっているので、有難い制度なんですけどねー。

やりたいこと


日本の祝日を判定したい

1.元データ


スタンドアローンということで、何らかの元データをローカルに保持しないといかんわけで、今回はGoogle カレンダーのAPIを利用しました。

今回利用したXMLリクエスト


http://www.google.com/calendar/feeds/outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com/public/full-noattendees?start-min=2013-01-01&start-max=2013-12-31

リクエストパラメータの意味


詳細は、Google Calendar API v2 Atom Referenceを。























outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com比較的信頼度が高いとされる、mozillaプロジェクトの祝日一覧(mozzila Calendar Project)
 full-noattendees full版からgg:whoを抜いたもの(今回は不要なので)
 start-min=2013-01-01 期間の始まり
start-max=2014-01-31 期間の終わり

2.実際のコード


[python]
#!/usr/bin/env python

from xml.dom.minidom import parse
import sys
import re

def get_parse(fileName):
try:
obj = parse(fileName)
except IOError:
obj = 0

return obj

def get_arg2(arg2):
pattern = re.compile("^\d{4}-\d{2}-\d{2}$")
matched = pattern.search(arg2)

if matched:
argDate = arg2
else:
argDate = 0

return argDate


def main():
fileName=sys.argv[1]
obj = get_parse(fileName)

if obj == 0:
print "file not found"
return 1

argDate = get_arg2(sys.argv[2])

if argDate == 0:
print "argument is unjust. ex)2013-01-01"
return 1

obj_list = obj.getElementsByTagName("gd:when")

for i in obj_list:
if argDate == i.getAttribute("startTime"):
return 0

print "unmatch holiday"
return 2


if __name__=='__main__':
sys.exit(main())
[/python]

3.ざっくり仕様



  • 第一引数に元xmlのファイルパス

  • 第二引数に確認したい日付をyyyy-MM-ddにて渡す

  • 祝日であれば、0、祝日でない場合は2、その他のエラーは1を返す


4.動作イメージ


[bash]
shase$ ./holidayCheck.py japanHoriday.xml 2013-10-15
unmatch holiday
shase$ ./holidayCheck.py japanHoriday.xml 2013-05-05
shase$ echo $?
0
[/bash]

2013年3月26日火曜日

Linuxでのhostsの反映

前に、macでのhostsの変更の反映メモを書いたけど、Linuxでも似たような話があるので、メモ代わりに。


Linuxはリゾルバキャッシュがありましぇーん、とかよく(古い)記事とかであったりしますが、最近のディストロだとだいたい、nscdっていうネームサービスキャッシュデーモンたんが動いており、時々、hostsやらpasswdやらの変更が反映されないみたいな悪さをしてくれやがります。(LDAP関連のトラブルでもよくでてくるんじゃないかな?)

余談だけど、最近のFreeBSDでも動いてるらしい(余談おわり)。

詳細は「man nscd」してもらえればいいんですが、とりあえずhostsのキャッシュをクリアしたいとき(nscdの再起動:nscd restartでもいけるけど)。

/usr/sbin/nscd -i hosts

とかすればおk

2013年3月24日日曜日

macでipfwを使って特定ホストに対する通信を止めたい

環境はMacOS X Lion


ipfwのチートシート


  • sudo ipfw list
    • ルールの表示
  • sudo ipfw delete "number"
    • ルールの削除
  • sudo ipfw add "rule"
    • ルールの追加"rule"のところはmanでもみてくれ
  • sudo ipfw show 
    • ルールとパケットの表示
  • sudo ipfw -f flush
    • 既存の設定のflush

で、特定ホストに対する通信のblock


denyのところに止めたい宛先アドレスを入れよう
以下、設定シェルの例

#!/bin/sh
ipfwcmd="ipfw"
add="$ipfwcmd -q add"
# flush old rules
$ipfwcmd -f flush
$add deny tcp from me to xxx.xxx.xxx.xxx
$add deny icmp from me to xxx.xxx.xxx.xxx

細かいルールはmanでも見てね(・ω<)

2013年3月23日土曜日

よくつかうsvnコマンドの備忘録


  • 変更ファイル一覧(特定リビジョンの範囲で)


[bash]
svn diff --summarize -r -r [rev01]:[rev02]
[/bash]

2013年2月16日土曜日

mavenプロジェクトでのjvmのバージョン指定してるトコ

mavenのサイトに書いてるけど。

http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
maven-compiler-pluginのトコで指定だってさ。下の例はjdk1.4を指定してる様子。
[xml]

[...]

[...]


org.apache.maven.plugins
maven-compiler-plugin
3.0

1.4
1.4



[...]

[...]

[/xml]

2013年1月1日火曜日

2012年を振り返りつつ、2013年を考える

最初、2012年のまとめを書こうかと思っていたんですが、2012年は個人的に激動すぎて、ちょっと今の段階で振り返って、それをまとめることが難しいという結論になりました。

外部環境の動きによって、もたらされた自分の変化。

自分から能動的に動いた結果の自分の変化。

それぞれあるのですが、どれも今の段階でどうだったのか、評価を下すには早すぎると感じました。2〜3年して振り返った時に、2012年の評価ができるんじゃないかな、と思っています。

個別の事項についての、KPTはできるんですけどね。

というわけで、2013年の豊富を。

仕事の面で。

世の中の動きがどうなるかわかりませんが、Web系のエンジニアとしてやっていこうという気持ちに変わりはありません。今年選択した道を深化させて行きたいと思います。(Web以外のインターネット産業が勃興した場合はその限りではありませんw)

2011年の今頃は、モヤモヤしていたのですが、2012年は個人的な決断を行ったので、今は雑念も少なく、仕事に取り組むことができています。

多くの人にご迷惑をかけました。働くようになって、今年ほど自分の無力を感じたことはありませんでした。スキル的なところもそうですし、人間的なところもそうです。

スキル的なところは、一朝一夕にどうしようもないので、積み上げをしていくしかありません。そのスピードは上げていく必要がありますが。

人間的なところは逆にすぐできることも多くあります。同じ失敗だけはしないようにしたいと思います。今年はそこで、大きな失敗をしました。IT業界ではよくある話ですが、よくある話しとして済ませてはいけないと個人的には考えています。

抽象的なことばかり書いてもあれなので、1つだけ今年記憶に残ったエピソードを書きます。

弊社では、運用と開発に役割が分かれているわけではなく、エンジニア職は基本的に両方をこなします。

今年は3ヶ月ぐらい、実際のサービス運用から離れていた時期がありました。ニートしていたとかではなく、仕事で別のミッションがあったからなのですが。

その後、またとあるサービスの開発&運用をやることになったのですが、運用の感覚みたいなものが欠落していることに気が付きました。

具体的に言うと、リソースのモニタリングにおける気づき、であったり、何かのオペレーション時のリスク(事前察知?)に疎くなっていたり、等。

このあたり、日々の筋トレに近いものがあるのかもしれません。やらなくなると、徐々に衰える。

よくよく考えてみると、仕事って現場から離れると現場感覚が無くなんて、よく言われる話。ただ、それを如実に実感したのは初めてでした。