IXY DIGITAL 920 ISはスゴイかも

先日、あのmiyagawa氏Blogにて言及していたIXY DIGITAL 920 ISを購入しました。これは良いですね。

IMG_0054

IMG_0038

IMG_0195

IMG_0125

これは先日、TDLに行ったときの写真。露出やらISOやらをちょこちょこ弄りながら撮ったので、今イチな写真が多かったのですが、それでも雰囲気のある良い写真も撮れました。これからの季節は外出するイベントが増えるので、良い写真を撮りまくってみたいですね。

  • 定価 : ¥ 20,980
  • 発売日 : 2008/09/20
  • 出版社/メーカー : キヤノン
  • おすすめ度 : (14 reviews)

[Movie]ターミネーター4 観てきた

[youtube:http://www.youtube.com/watch?v=0V1p2Bk9GYs]

昨日、たまには映画でも観ようと近くのシネコンへ。
そこでたまたま先行ロードショーをやっていたターミネーター4を観ました。

シリーズものは回を重ねるごとに品質が劣化することが多々あり、正直期待していなかったのですが、良い意味で予想を裏切られました。特にクリスチャン・ベイル(ジョン・コナー役)がすごく良かったです。ダークナイト(ヒース・レジャー)の時もそうですが、この人、主役をやってもなぜか脇役を引き立ててしまうんですよね。今回も、この映画での超重要人物(マーカス・ライト)をうまく引き立てています。でも自分自身の存在感は重く残している・・
すごい役者さんです。
嫁さんはターミネーターシリーズをまったく観ていませんでしたが、なかなか楽しめたそうです。


  • 定価 : ¥ 3,980
  • 発売日 : 2008/12/10
  • 出版社/メーカー : ワーナー・ホーム・ビデオ
  • おすすめ度 : (159 reviews)
    ピッコロと神様の物語
    本当にアメコミ映画なのか!?
    ジョーカーのみでもよかったかな?
    深みのある映画
    人間は善であり、同時に悪である。

ACIDMAN ある証明

[youtube:http://jp.youtube.com/watch?v=tvZqME9Ce0A]
ACIDMANの全ての曲が好きだが、これは名曲中の名曲
特にこのライブ映像はヤバすぎる


[WordPress]WPtouch iPhone Themeを導入した

このBlogをiPhone、iPod Touchで閲覧しやすくする為WPtouchというPluginを導入しました。以下スクリーンショット

IMG_0010.PNG

シンプルでとてもわかり易いです。

IMG_0012.PNG

本文も見やすくなっています。
iPhoneで見てくれる方も増えてきてますし、しばらく様子を見てみます。


[Python]Twitter版LogWatchのようなもの

GW期間に3連休(年に2回あるかどうか!というくらい貴重)をもらったので、Pythonのお勉強を兼ねてTwitter版LogWatchのようなものを作ってみました。

20090505_02


24時過ぎとかにcronで実行させると、FriendsとFollowersそれぞれのリストを前日に保存しておいたリストと照合し、追加した(された)および削除した(された)Friends/FollowersをリストアップしてGmailで自分宛に送信します。Twitter APIを扱うモジュールはPython-twitterというものを使用していますが、前回と同じく、easy_installで入るものでなくtrunkにあるものを使用しています。

作ってみて色々思ったこと

  • 結構行数が増えてきたので、Classにまとめようと思ったけど、次回チャレンジする
  • Pythonで書いている人は文字列囲むのにダブルクォーテーションとシングルクォーテーションどちらなのか。もしくは使い分けしているのか
  • 変数命名が納得いかない。どうしたものか。
  • 自分で書いた英語がそもそも怪しい><
  • コードを書き始めてから、このblogを書き始めるまで13時間くらいかかった。半年前だったら1週間以上かかっただろう。この進歩(牛歩だが)が嬉しい

コードはこちら。Python2.6(MacOSX dmg)で動作確認は取れています。但しcronでの運用はまだ行っていません(先日セッティングした自鯖に入れるつもり)。

#!/usr/bin/env python
# coding: utf-8
# 
# Please Note it.
# Python-twitter od the trunk version(r137 or higher)in necessary.
# svn checkout http://python-twitter.googlecode.com/svn/trunk/ python-twitter
#

import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
import twitter
from datetime import *


TWITTER_USER = "TWITTER_USER"
TWITTER_PASSWD = "TWITTER_PASSWARD"
GMAIL_USER = "GMAIL_ACCOUNT"
GMAIL_PASSWD = "GMAIL_PASSWARD"
api = twitter.Api(TWITTER_USER, TWITTER_PASSWD)
FRIENDS_LIST = "friends.txt"
FOLLOWERS_LIST = "followers.txt"

def get_allfriends(): #friendを取得
    friends, cnt = [], 1
    while not len(friends) % 100:
        friends += api.GetFriends(page=cnt) 
        cnt += 1
    friend = []
    for i in friends:
        user = i.screen_name
        user = user + "\n"
        friend.append(user)
    return friend


def get_allfollowers(): #followerを取得
    followers, cnt = [], 1
    while not len(followers) % 100:
        followers += api.GetFollowers(page=cnt) 
        cnt += 1
    follower = []
    for i in followers:
        user = i.screen_name
        user = user + "\n"
        follower.append(user)
    return follower


def flw_list_open(FOLLOWERS_LIST): #前回のfollowerリスト読込
    flw = open(FOLLOWERS_LIST, "r") 
    flw_list = flw.readlines() 
    flw.close() 
    return flw_list


def frd_list_open(FRIENDS_LIST): #前回のfriendリスト読込
    frd = open(FRIENDS_LIST, "r") 
    frd_list = frd.readlines() 
    frd.close() 
    return frd_list


def set_followers(): #followerリストのマッチング
    FLW, RMV = "%(flws)s", "%(rmv)s"
    follower = get_allfollowers()
    flw_list = flw_list_open(FOLLOWERS_LIST)
    fl = open(FOLLOWERS_LIST, "w") 
    new_flw = []
    for flws in follower:
        if flws not in flw_list:
            new_flw.append(FLW % locals())
        fl.write(flws)

    rm_flw = []
    for rmv in flw_list:
        if rmv not in follower: 
            rm_flw.append(RMV % locals()) 
    return new_flw, rm_flw, follower


def set_friends(): #friendリストのマッチング
    FRD, RMV = "%(frds)s", "%(rmv)s"
    friend = get_allfriends()
    frd_list = frd_list_open(FRIENDS_LIST)
    fl = open(FRIENDS_LIST, "w") 
    new_frd = []
    for frds in friend:
        if frds not in frd_list:
            new_frd.append(FRD % locals())
        fl.write(frds)

    rm_frd = []
    for rmv in frd_list:
        if rmv not in friend:
            rm_frd.append(RMV % locals())
    return new_frd, rm_frd, friend


def create_message(from_addr, to_addr, subject, body, encoding):
    msg = MIMEText(body.encode(encoding), "plain", encoding)
    msg["Subject"] = Header(subject, encoding)
    msg["From"] = from_addr
    msg = MIMEText(body.encode(encoding), "plain", encoding)
    msg["Subject"] = Header(subject, encoding)
    msg["From"] = from_addr
    msg["To"] = to_addr
    msg["Date"] = formatdate()
    return msg


def send_via_gmail(from_addr, to_addr, msg):
    s = smtplib.SMTP("smtp.gmail.com", 587)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login(GMAIL_USER, GMAIL_PASSWD)
    s.sendmail(from_addr, to_addr, msg.as_string())
    s.close()


def main():
    DATETIME = datetime.now()
    YESTERDAY = DATETIME + timedelta(hours=-24)
    DATESTR = DATETIME.strftime("%Y/%m/%d% %H:%M:%S") 
    STR_YESTERDAY = YESTERDAY.strftime("%Y/%m/%d")

    subject = "Logwatch for %s's Twitter" % TWITTER_USER 
    from_addr = GMAIL_USER
    to_addr = GMAIL_USER
    new_flw, rm_flw, follower = set_followers()
    new_frd, rm_frd, friend = set_friends()

    """
    メールの本文にあたるところ
    もうちょっとうまく書けないものか
    あとそもそも英語があやしい
    """
    body = "################ Logwatch for %s's Twitter ################" % TWITTER_USER + "\n"
    body += "Processing Initiated:%s" % DATESTR + "\n"
    body += "Date Range Processed:%s" % STR_YESTERDAY + "\n"
    body += "Period is day." + "\n"
    body += "\n"
    body += "--------------------- Followers Begin ---------------------" + "\n"
    body += "%s Users Followers" % len(follower) + "\n"
    body += "Followed by ..." + "\n"
    if new_flw == []:
        body += "Nobody followed you yesterday." + "\n"
    else:
        for nfl in new_flw:
            body += "%s is followed you yesterday" % nfl + "\n"
    body += "Rmoved by ..." + "\n"
    if rm_flw == []:
        body += "Nobody Removed you yesterday." + "\n"
    else:
        for rfl in rm_flw:
            body += "%s is Removed you yesterday" % rfl + "\n"
    body += "---------------------- Followers End ---------------------" + "\n"
    body += "\n"
    body += "--------------------- Friends Begin ---------------------" + "\n"
    body += "%s Users Friends" % len(friend) + "\n"
    body += "Following ..." + "\n"
    if new_frd == []:
        body += "No follow yesterday" + "\n"
    else:
        for nfr in new_frd:
            body += "following %s yesterday" % nfr + "\n"
    body += "Rmoving ..." + "\n"
    if rm_frd == []:
        body += "No Remove yesterday." + "\n"
    else:
        for rfr in rm_frd:
            body += "Removing %s yesterday" % rfr + "\n"
    body += "---------------------- Friends End ---------------------" + "\n"
    body += "\n"
    body += "############## Logwatch for %s's Twitter End ##############" % TWITTER_USER + "\n"
    msg = create_message(from_addr, to_addr, subject, body, "utf-8")
    send_via_gmail(from_addr, to_addr, msg)

if __name__ == "__main__":
    main()

[2009年5月6日追記]
送られてきたメールを確認すると、改行されたくないところで改行されてたりするので、時間見つけて修正します。
[追記ここまで]

[2009年6月20日追記]
最近Follower数がかなり少なくカウントされていると思っていて、時間がとれたので調べてみたんだけど、page=1が97になっていてカウントが止まってしまっている。100で割り切れなくなるまでカウントされるロジックなので、本当に97ならしかたがないのだけど、page=2にもFollowerがちゃんとある。調べた結果がこちら。うーん変だなあ・・

[root@centos ~]# python
Python 2.6.2 (r262:71600, May 14 2009, 20:12:16)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import twitter
>>> api = twitter.Api('ACCOUNT', 'PASSWORD')
>>> f = api.GetFollowers(page=2)
>>> print len(f)
58
>>> f = api.GetFollowers(page=1)
>>> print len(f)
97
>>> f = api.GetFollowers(page=3)
>>> print len(f)
0
>>> 

[追記ここまで]


PAGE TOP