25042013 sake
最近、黒字に金かよ〜とジャケ買いした白瀑の山本がすこぶる美味かった。
美味かったので、飲み終わったあとに白瀑の赤いラベルの純米酒を続けて購入して飲んでしまった(こっちも美味かったが、山本飲んだ後だったので、、、)。
そして今週はいわせさんで購入した紀土の特純のしぼりたて(生酒)を飲んでる。生酒だからフレッシュだけど、やや酸が強いというか攻めてくる。これは紀土全般に言えるかな。
25042013 sake
25042013 work
Zabbixのweb監視はトリガーの設定がちょっと面倒くさい。hostに紐付けなきゃいけないけど、なぜそうしないといけないの?っていう。まぁ歴史的経緯の賜物なんだろうなぁということはすぐ分かったけど、コンフィグにwebの項目があるのにトリガーのとこにはないのは気持ち悪い。
webの監視も、webアプリだけ監視したい場合があってそういう時どうすんの?なんて悩むわけだけど、お決まりのやり方は本に書いてなかったので、tweetしたら色々教えてもらった(感謝)。
死活監視をしているサーバーでwebアプリを運用している場合は1でよいとして、webアプリだけの場合は2か3かな。2の場合はネットワークの死活と紐付けられるので、複合型トリガーを作るには便利で、3の場合はトリガー作成の際、余計なアイテムが出てこないというメリット・デメリットがあるそうです。
自分の環境に応じて選択すればよいと思う。
24042013 life
著者の「経理・財務」感を語っている本って感じだった。「お金」よりも「人間」が大事というスタンス
決算書に載らない財産で、一番大きいのは人間です
24042013 Python
区切り文字の数が変だったり、日付がおかしい(19950000みたいなの)場合はpandasの場合は容赦なくコケる(しかもエラー内容がわからなかったりする)。
Rの場合しれっとスキップするのでさくさく感はあるのだけど、どのデータ落としたのか注意していないとわからないので、自分の場合はまずは綺麗なデータにするということをきちっとやるほうが、自分でデータをネグったという認識ができて後々悩まなくてよいかなと思っている。
実行結果。pandasのmulti indexは便利ですね。
In [2]: execfile("ml1.py") In [3]: d.head() Out[3]: DateOccurred DateReported Location YEAR MONTH Location YEAR MONTH AB 2004 3 1 1 1 1 1 2005 4 1 1 1 1 1 2010 7 1 1 1 1 1 AK 1990 1 1 1 1 1 1 3 1 1 1 1 1
この先がよくわからないんだけどdate_rangeかなんかで月ごとのSeriesを作ってからjoinすればいいのかなぁ。
コード。最初に汚い行(tabの数がおかしい、日付の表現が変)というデータを捨ててpandasに読み込めるようにしてからpandasで処理しています。
import pandas as pd from datetime import datetime from numpy import nan import re re_date = re.compile("\d{4}[01]\d[0123]\d") with open("ufo.tsv", "w") as w: with open("ufo_awesome.tsv") as f: for l in f: s = l.split("\t") if len(s) == 6: if re_date.match(s[0]) and re_date.match(s[1]): if int(s[0][4:6]) > 0 and int(s[0][6:8]) > 0: w.write(l) def get_loc_code(loc): l = loc.split() if len(l) == 2 and len(l[1]) == 2: return l[1].upper() else: return nan d = pd.read_table("ufo.tsv", header=None, names=["DateOccurred", "DateReported", "Location", "ShortDescription", "Duration", "LongDescription" ], parse_dates=["DateOccurred", "DateReported"], date_parser=lambda x: datetime.strptime(x, '%Y%m%d') ) d = d.drop(["LongDescription", "ShortDescription", "Duration"], axis=1) d.Location = d.Location.apply(get_loc_code) d = d.dropna() d = d[d.DateOccurred > datetime(1990, 01, 01)] d["YEAR"] = d.DateOccurred.apply(lambda x: x.year) d["MONTH"] = d.DateOccurred.apply(lambda x: x.month) d = d.groupby(["Location", "YEAR", "MONTH"]).count()
23042013 work
一昨年くらい前の静岡インフラ勉強会で紹介されてたzabbixが良さそうと思って書籍を購入したんだけど、購入後放置していた。
最近やっと使い始めたら、便利なんだけどメールの送信設定でハマった。
がtwitterのzabbix界隈の人達のおかげで設定できた。zabbixユーザー層厚い。というか厚いのはいいことだ。それから、職場のネットからはtwitterが遮断されているのでiPhoneでやり取りすんだけど、zabbix界隈の人達の助言がなかったらどんだけ時間をムダにしたんだろとか。
まぁ、それ以上にうちのIT部署は死活監視なんて使ってないんだけどねーw
メールを送るのに
と3つの段階を踏む必要がある。ちなみに二番目の設定を忘れていた(わかりにくい)。ちなみに、ここまで設定してもメールが送信できなかったのではまった。
まずはエラーログってことで/var/log/zabbix/zabbix-server.logを覗いてみるもののなんも出力されてないのでイラッときた。エラーが出るのは想定内だけど、エラーログが出ないのは想定外なんで、ああいうのでイライラするのは環境に慣れているせいかもと思った。
ここから、twitterのzabbix界隈の人達の助言にお世話になりっぱなしで。
とエラーが見つかるということを知った(今回の場合後者だった)。ログによると permission denied (13)っていうエラーでメールの送信ができていなかった。
あらかじめ、telnetでメール送れることを確認してあったので、permission deniedがでるのは謎だったのだけど、若干悩んだ挙句SELinuxが有効になっていることに気づきdisabledにして無事送信できるようになった。
管理->メディアタイプorユーザーの設定のところにテスト送信をするという機能がついていればこれほど悩まず解決したのにと思った一方で、悩んだおかげで多少詳しくなったからまぁいいかなぁと。
1章のデータをpandasのread_tableで読み込もうとすると
CParserError: Error tokenizing data. C error: Expected 6 fields in line 755, saw 7
となって、エラー終了する。 これはlong descriptionの中に区切り文字であるtabが含まれているせいで、カラムの長さがちゃうよっていうエラーなんだけど、こういうダメな行をスキップするオプションが見つからなかった。
pythonでデータのクリーニングをやる場合にはpandas使うよりもforループ回して、要素を一つ一つチェックしていくほうがやりやすいかも。対話的じゃないので、途中のデータを取っておきにくいのでデータがでかい場合試行錯誤しにくいけど。
21042013 drum'n'bass
古いのを入れてみた。レコードをmp3にしなきゃいけないけど面倒くさい。
と思っているうちにハードがなくなってしまうのでどうにかしないといけない。
Converge Master / June Miller The Rain / Rockwell Gift / Subwave Colemanism / Fracture & Neptune Cold Fear / Icicle A Certain Sound (97 Mix) / Paradox Past present future / Triad + Synth sense Half Top Feelings (Amoss Remix) / June Miller SpectraSoul - The Last attempt / None Tripwire / Rockwell Foundation / Breakage Future Proof / blu mar ten Halow / Martsman Polar / Dub Phizix Pressure / Stickman
ここから先は覚えていない。
21042013 R
土曜日の入門機械学習読書会のためにRstudioをいじっているけどこれはかなり便利。
1章のデータ(UFOの目撃頻度を可視化する)
2章のデータ(体重と身長)
まだ4章までしか読んでいないけど、丁寧に解説してあってわかりやすい。メモリ管理はARCなので今風なのかな。
kobold2dはcocos2dの足りないところを追加したライブラリのようだ。
4章では落ちてくる蜘蛛をよけるゲームをつくる。音の扱い方もこの章で学ぶ。
deprecatedになっていたメソッドがいくつかあった。
//self.isAccelerometerEnabled = YES; [self setAccelerometerEnabled:YES];
ブロックオブジェクトの使い方もちょっと分かったような。
CCCallBlock* callDidDrop = [CCCallBlock actionWithBlock:^void(){ // move the droppedSpider back up outside the top of the screen CGPoint pos = spider.position; pos.y = screenSize.height + spider.texture.contentSize.height; spider.position = pos; }]; CCSequence* sequence = [CCSequence actions:easeHang, easeEnd, callDidDrop, nil];
19042013 life
王道のビジネス本って感じ
一見すると「イエスかノーか」でしか答えようのない問題にどう取り組み、選択肢をどう創りだし、選択に対する満足度をどう高めるか
The Want Listという知らないフレームワークがあったので役に立った