10分前に放送アニメを通知する

サーバを入れ直して、なにがツラいって plagger の環境作り直すことですね。なんか毎回のようにハマるし悲しい限りです。今 plagger でやらせてることってのが、朝に今日の天気予報を push させるというのと、10分前に放送アニメを通知すること。天気予報はどうにでもなりそうだったので、アニメ通知のほうをなんとかできれば、いちいち plagger 入れる必要ないんじゃないかなーということで、python で書いてみた。

cron で10分間隔で回す。しょぼかるから番組情報を拾ってくる。〜10分後に放送する番組があったら im.kayac に push するという感じ。feedparser は標準じゃないので、apt-get install しよう!!!

#!/usr/bin/env python
# coding: utf-8

import feedparser
import datetime
import urllib2, urllib
import hashlib

url = 'http://cal.syoboi.jp/rss2.php?usr=yutamoty&titlefmt=$(Mark)%20$(StTime)%20[$(ChName)]%20$(Title)%20$(SubTitleB)'

class IMKayac:
    def __init__(self, id, password=None, sig=None):
        self.id = id
        self.password = password
        self.sig = sig

    def notify(self, msg):
        if isinstance(msg, unicode):
            msg = msg.encode('utf-8')
            path = 'http://im.kayac.com/api/post/%s' % self.id
            params = { 'message':msg, }

            if self.password:
                params['password'] = self.password

            if self.sig:
                params['sig'] = hashlib.sha1(msg+self.sig).hexdigest()

            urllib2.build_opener().open(path, urllib.urlencode(params))

d = datetime.datetime.today()
d10 = d + datetime.timedelta(minutes=11)

item = feedparser.parse(url)

for entry in item['entries']:
    title = entry['title']
    time = entry['updated']
    t = datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+09:00')

    if d <= t:
        if d10 >= t:
            if __name__ == '__main__':
                im = IMKayac('username','password','1')
                im.notify(title)

しょぼかるRSSについてはヘルプを参照。ユーザ作って表示させる放送局をしぼらないと push されすぎてつらいと思う。
rss2.php - しょぼいカレンダーのヘルプ

これで、リアルタイムで見たいアニメがあった場合でも大丈夫。今期だと IS と まどかマギカ はリアルタイムで見るようにしてます。毎度、しょぼかるにはお世話になっております。

WM3500R のバッテリー残量を Growl で通知する

WM3500R をうっかり契約して家の固定回線解約しました。将来的には、softbank の2年縛りが切れたらそれも解約して docomowimax の2回線で生きていこうと思ってます。それで、実際使っててバッテリー残量が分かりにくいし、いちいち管理ページに見に行くのもめんどいので Growl で通知できるようにした。

勉強中の pythonスクリプト書いてみた。これを cron 登録して適当な感覚で回すことでだいたいの残量を把握するようにしました。

ちなみに、実際の WM3500R の使い勝手ですが、すごい満足してる!!! 前、契約してたときは我が家すらギリギリ電波入るけど速度でないとかいう状況だったけど、今は、余裕の電波状況で速度も満足なレベル。エリアに関しては地下は勿論全滅だけど、地上ではそれなりに使えるようになった感じ。少なくとも通勤の山手線とかに関してはまったく問題なく使えて、むしろ softbank のほうが電波入らないことがある。バッテリーに関しては、本当に8時間稼動とか可能なレベルなのでバッテリー切れとか気にする必要が殆どない。

ということでお金ない感じの人は家回線とスマートフォン回線を wimax に集約すれば、生きていける〜。

家ではかったスピードテスト

#!/usr/bin/env python
# coding: utf-8

import urllib2
import scrapemark
import Growl

username = 'ユーザ名'
password = '設定したパスワード入れる'

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, 'http://web.setup/index.cgi/eco_mode_main',
        username, password)

handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
html = urllib2.urlopen('http://web.setup/index.cgi/eco_mode_main').read()

html_utf8 = html.decode("euc-jp").encode("utf8")

batter = scrapemark.scrape("""
<body>
{*
<td class='small_item_td2'> {{ batter }} </td>
</tr>
*}
</body>

    """,
    html_utf8)

g = Growl.GrowlNotifier(
        applicationName = 'GrowlPython',
        notifications = [ 'Demo' ],
        defaultNotifications = [ 0 ],
        hostname = 'localhost',
        password = '',
        )
g.register()
g.notify(
        noteType = 'Demo',
        title = u'WM3500R バッテリー残量',
        description = batter["batter"],
        sticky = False
        )

ちなみに、Python から Growl に通知するやり方はこちらを参考にしました。
PythonからGrowlを利用する | おいぬま日報

追記

WM3500R に繋いでないときの処理の存在忘れてたし、あとで書こう。

誕生日近いのでスクリプト書いた

誕生日が近いのでサーバーに祝って貰えるようにスクリプトを書きました。

#!/usr/bin/env bash

start()
{
        echo "when is your birthday?"
        echo "month?"
        read month
        echo "day?"
        read day
        echo "year?"
        read year
        month=`echo $month | sed -e 's/^\([0-9]\)$/0\1/g'`
        echo "$year,$month$day" > ~/.birthday.txt
}

if [ -f ~/.birthday.txt ];
then
        true
else
        start
fi

BIRTHDAY=`cut -d "," -f 2 ~/.birthday.txt`
BIRTHYEAR=`cut -d "," -f 1 ~/.birthday.txt`
TODAY=`date +%m%d`
YEAR=`date +%Y`
AGE=`expr $YEAR - $BIRTHYEAR`

if [ $BIRTHDAY = $TODAY ];
then
        echo -e "Happy Birthday to You
     Happy Birthday to You
         Happy Birthday Dear "$USER"
               Happy Birthday to You
  Λ_Λ
 ∂/ハ)ヽヽ  ∧ ∧       ∧_∧  ∧ ∧
  ハ`∀´ノ  ( ゚Д゚)       (゚ο゚*)  ( ´ー`)
  /つ * ヽ ⊂~~~~つ  ♪  ⊂~~~⊂  \∽          /|
 /___ゝ  /  | (-_-)  /  ヽ    \.\_∩____//
  (__)_) 〈//  /  (∩∩) 〃〃〃ゝ    \     / ./ 〉
          ~~~~       ~~~~~~     ∪ ̄ ̄∪∪

  Λ_Λ  ♪〜♪♪
 ( ・∀・)     ♪    ∧_∧      / ̄ ̄ ̄ ̄ ̄
 ( つ「 ̄ ̄]       (__´∀`) ∇  < "$AGE" 才になったよ♪
 ( 「 ̄   |       (  <y> ]つ    \____
 . |__iiiiiiiiiiiii        |__|_|
               (__)_)
             ~~~~~~~~~~~~~~~"
fi

このスクリプトをサーバの bashrc とか zshrc あたりでログイン時に立ち上るようにしておけば誕生日の緊急対応時に心がほっこりあたたかくなると思います。思いたい!!!

今年の誕生日もサーバといちゃいちゃする予定しかないですが、がんばって生きていこうと思います。

http://www.amazon.co.jp/wishlist/14QTNU2BN7KTR

ちなみに 2 月 18 日 が僕の誕生日になります。金曜日です。

MacBook Air 11インチ欲しい!ほんとだよ。

ヨドバシで MacBook Air 11インチ 見てきたんですよ、えあー。話変わりますが、最近マイクロ一眼買ったんですよ、 E-PL1 ね。CMの宮崎あおいかわいいし Amazon で半額だったのでついつい購入ね。

そしたら ビックリ 加速度センサ ないんですよ、E-PL1。写真の縦横も判断できないんですよ、E-PL1

るんるん気分で写真撮って、いざ、とりこむぞ!! ってときになって気付いたのね。そういう大事なことは、前もって言っとけと思ったね。

一気にテンションさがったね。

でも、宮崎あおいのこと考えると怒るに怒れないんですよ。あーくそ、かわいい。結局、宮崎あおいの笑顔を考えながら一枚一枚、写真を回転させるお仕事ですよ。

でも、宮崎あおい、もう E-PL1 とかのこと忘れて E-PL2 に夢中なんだろうなー。

ということで

MacBook Air 11インチ欲しい!

です。

tcpflow が楽しい

パケットの中身を見るコマンドとして tcpdump が有名だけど、最近 tcpflow っていうコマンドがあることを知った。 tcpflow は tcpdump と比べてパケットの中身をより見やすくしてくれて大変すばらしい感じ。

debian 環境だけど、余裕の aptitude でインストールできる。

# aptitude install tcpflow

centos とかだと rpmfoge レポジトリにあるみたい。

とりあえず使ってみる
# tcpflow -c

c オプションは、コンソールに内容を表示してログを保存しないようにするオプションでこれつけないで、うっかり起動させるとカレントディレクトリが残念なことになる

インターフェイスを指定して起動
# tcpflow -c -i eth0

これで eth0 に流れるパケットを見ることができる。

色つけてログを見やすくする
# tcpflow -ce -i eth0

e オプションで、in と out で色分けしてくれるのでわかりやすくなる。

tcpdump っぽいことをする

tcpdump のフィルタを使えるので使ってみる。

# tcpflow -ec port 80 -i eth0

port 80 に流れるパケットを見ることができる。

下記みたいにすればサーバ宛のhttpアクセスだけ見ることができる

# tcpflow -ec dst host [ipaddress] and dst port 80 -i eth0

ふむ、便利。

iTerm で screen 使用したときにウィンドウがリサイズされる問題

っていうのが、起こってて再起動とかあまりしないので放置していたけど、ちょっと問題調べてみたら iTerm の設定で無効にできた。

Bookmarks –> Default –> Terminal

「Disable session-initiated window resizing」にチェックを入れる

もしくは「.screenrc」に以下の記述を追加する

termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' 

tdiary で Markdownスタイル を使う

独自ドメインで運用している lql.be にブログ置きたいなーと思って tdiary を設置してるんだけど、いろいろ書式を試してみたいと思ってて Markdownスタイル を試してみるためにセッティングした。

Markdownスタイル のインストール

Markdownスタイルを有効にするために contribパッケージ に含まれている markdown_style.rb をゲットする

# wget http://www.tdiary.org/download/tdiary-contrib.tar.gz
# tar zxvf tdiary-contrib.tar.gz

markdown_style.rb は tdiary のインストール先にある tdiary ディレクトリにコピーする

# cp tdiary-contrib/style/markdown_style.rb tdiary/
# vi tdiary.conf

@style = 'Markdown'

style を Markdown に指定する

BlueClothのインストール

Markdownスタイル を利用するために BlueCloth が必要になる。 gem で 1.0.1 っていうバージョンと 2.0.9 っていうバージョンふたつあって 1.0.1 のほうをインストールした。なんか、2系だと動かない感じがするんだけどどうなんだろう。

gem に BlueCloth があることを確認する

# gem search -r bluecloth

 REMOTE GEMS 

BlueCloth (1.0.1)
bluecloth (2.0.9, 2.0.7 x86-mingw32 x86-mswin32)
radiant-bluecloth2_filter-extension (1.0.0)

BlueCloth のインストール

# gem install BlueCloth

これだけだと上手く使えないらしく gem で落としてきた install.rb を叩いて使えるようにする

# ruby /usr/lib/ruby/gems/1.8/gems/BlueCloth-1.0.1/install.rb

ということで、tdiaryMarkdownスタイル が使えるようになった。 lql.be のブログでは日常系日記を書いていこうかなーと思っています。