大学生のときに撮影したモノクロフィルムのスキャンデータを Colorize した
ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付け
Colorize が気軽にできるとわかって何かおもしろい使い方がないかなと考えて、大学生のころに撮影したモノクロフィルムのスキャンデータをつかうことを思いついた。
つかう手順として最初に Torch のインストールが必要で、これをいれたあと lua を起動しようとしてもうまくいかったけど、結局 torch 上で lua をうごかせば問題なかった。
手持ちのスキャンデータはフィルムごとにフォルダにいれていたので LuaFlieSystem(lfs) でファイル操作が必要だったけど Python やってる感じと違和感がなかったのでサクサクできた。そのまま回してたらメモリがなくなってしまったので GC 動かしたけど簡単にできてよかった。 gist.github.com 結果としては森とか空は綺麗に色がつくけど、その他は厳しい感じになった。
以上です。
DURR がほしかったけど売り切れなので python で memento mori
Skrekstore — A shivering bracelet that investigates our perception of 5 minutes.
DURR 5分に1度振動して時間の伸び縮みをおしえるプロダクトがあるのですが もう購入できないのでどうにか体験したいなと思って5分に1度アスタリスクを出力するのを書きました
これだけだとターミナルみてないとわからないので画面を光らせるとかそういうのやりたいけど方法がよくわからない
あと 5分ごとなら pomodoro にもつかえるなと思ったので pomodoro モードもつけた ポーズ機能とかリセットとかないのでそういうのもつけたい
generator で pomodoro のメッセージをコントロールするところが無駄に悩んだ
なぜ5分なのか
なにかで DURR のひとたちのインタビューを読んで 1分だとうざいし 10分だと伸び縮みがよくわからないけど 5分だといい感じ だそうで そうした
壊れた図bot をつくった
図bot という最高の手動bot がありますが これがグリッチしたら最高じゃんと思ってつくって運用していつのまにかフォロワーが500を超えたので紹介します
まあふつうに twitter の bot + glitch という感じなので特に言うことないのですが
グリッチに関しては以下を
安全に glitch できるようにした - >>> (trs is snobbishness) == True
自動投稿に関してはよくわからなかったので crontab をつかいました
本体
#! usr/bin/python # -*- coding: utf-8 -*- from config import * import glitch.glitch as glitch import twitter import urllib import base64 import pickle import os import glob import random from replyPattern import replyPattern class TwitterClient(object): def __init__(self): # config に置いたキーから oauth 設定 self.t = twitter.Twitter( auth=twitter.OAuth( OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET )) # 図bot から画像取得 def get_user_tweets(self, screen_name="zu__bot", counts=1): ut = self.t.statuses.user_timeline(screen_name=screen_name, counts=counts) try: media_url = ut[0]["entities"]["media"][0]["media_url"] status_id = ut[0]["id_str"] return (media_url, status_id) except KeyError: return ut[0]["text"] def get_timeline(self): return self.t.statuses.home_timeline()[0]["text"] def post_tweet(self, msg=None): self.t.statuses.update(status=msg) #データ付きの投稿 def post_with_media(self, data=None, msg="", reply=None): try: params = {"media[]": data, "status": msg, "in_reply_to_status_id": reply } self.t.statuses.update_with_media(**params) return True except: return False def latest_status_id(self, latestid): with open("latestStatusID", "rb") as f: try: lastid = pickle.load(f) except (pickle.UnpicklingError, EOFError): lastid = None if latestid != lastid: with open("latestStatusID", "wb") as w: pickle.dump(latestid, w) return True else: return False #再破壊 def get_reply(self, screen_name="kowaretazu_bot", counts=1): ut = self.t.statuses.mentions_timeline(screen_name=screen_name, counts=counts) if ut: status = ut[0]["text"] reply_id = ut[0]["id_str"] return (status, reply_id) else: return None def reply_checker(self, status): status = status.lstrip("@kowaretazu_bot").lstrip().lstrip("@zu__bot").lstrip() if status in replyPattern: return True else: return False def latest_reply_id(self, replyid): with open("latestReplyID", "rb") as f: try: lastid = pickle.load(f) except (pickle.UnpicklingError, EOFError): lastid = None if replyid != lastid: with open("latestReplyID", "wb") as w: pickle.dump(replyid, w) return True else: return False #破壊 class GlitchClient(object): def __init__(self, url): self.savepath = url.lstrip("http://bs.twimg.com/media/") urllib.request.urlretrieve(url, self.savepath) self.glitched_image = "glitched{0}.jpg".format(random.randint(0, 62)) def glitch(self): glitch.glitch(self.savepath, max=True) def image_cleanupper(self): names = glob.glob("*.jpg") names.remove(self.savepath) names.remove(self.glitched_image) list(map(os.remove, names)) def b64_to_utf8_decoder(self, filename): with open(filename, "rb") as f: return base64.b64encode(f.read()).decode("utf8", "ignore") #キーワードきたら破壊 def onemore(t=None): reglitch = t.get_reply() try: if t.reply_checker(reglitch[0]): return t.latest_reply_id(reglitch[1]) except (TypeError): pass return False def glitch_machine(zubot=None, t=None): g = GlitchClient(zubot[0]) g.glitch() data = g.b64_to_utf8_decoder(g.glitched_image) if t.post_with_media(data, "@zu__bot", zubot[1]): g.image_cleanupper() def main(): try: t = TwitterClient() zubot = t.get_user_tweets() if onemore(t): glitch_machine(zubot, t) return if not t.latest_status_id(zubot[1]): return glitch_machine(zubot, t) #なんかエラー起きたら投稿 except: t = TwitterClient() t.post_tweet("Sorry, 壊れた図_bot has been broken.") if __name__ == '__main__': main()
replyPattern = {"one more", "もっかい", "壊して" }
よければ楽しんでください
安全に glitch できるようにした
いままでのやつはファイルのデータのランダムな文字列をランダムな文字列で置換するというもので 画像ごとぶっ壊してしまうことや 全く壊せていないことが多々あった
そこでデータにある最多の文字を選んで壊すことで安定的に壊すようにした
オプションの intense
をつけると前と同じ動作で壊す
参加しなかったけど参加できた PyCon JP 2014
先日 PyCon JP 2014 が終わりました
自分は仕事でつかっていないので楽しみのためだけにアーリーバードの 7kという参加費を払う気になれなかったので不参加でしたが、すべてのセッションおよび LT で YouTube による Live があったので 自室にいてもほぼリアルタイムに会場の雰囲気を味わうことが出来ました
画質も音質も良く スライドと話者がバランスよく表示されるレイアウトも見やすくて 結局 今回の参加費にはこういったところへの対価も含まれているんだなと当然なことを感じました(会計内容知りませんが
またパーティーの参加費やコーヒーブレイク ランチ またカンファレンスのためだけに光ネクストの引き込み工事兼1ヶ月分の契約まで含まれていて そういったサービス向上のおかげで自室で好きなセッションが見られたというのが感謝しかないなと思いました
アーカイブもありますのでまだまだ参加できます
https://www.youtube.com/playlist?list=PLMkWB0UjwFGm4Ao5w2CKv24tl_Op_kxs5
21世紀でよかった
スライドのまとめ
http://minhavoz269.blogspot.jp/2014/09/pycon-jp-2014_16.html
Mac OS X Mavericks でデュアルモニタをする際に Dock を任意のディスプレイに表示させる
任意のディスプレイの右下もしくは左下にカーソルを移動させるとできるっぽいです
ホットコーナーの設定とかは関係ないみたい