はい (@ 天下一品 新京極三条店 in 京都市, 京都府) https://t.co/SujsRfyT8t
— うたがわきき🔰💊 (@utgwkk) 2017年1月25日
待ち行列 (@ キラメキJAPAN in Kyoto, 京都府) https://t.co/2ophlMLpLj
— うたがわきき🔰💊 (@utgwkk) 2017年1月26日
2日連続で大きいサイズの麺類を食べていて、いまも胃腸がフル稼働しているような気がする
はい (@ 天下一品 新京極三条店 in 京都市, 京都府) https://t.co/SujsRfyT8t
— うたがわきき🔰💊 (@utgwkk) 2017年1月25日
待ち行列 (@ キラメキJAPAN in Kyoto, 京都府) https://t.co/2ophlMLpLj
— うたがわきき🔰💊 (@utgwkk) 2017年1月26日
2日連続で大きいサイズの麺類を食べていて、いまも胃腸がフル稼働しているような気がする
献血した.これで6回目.看護師さん(?)に「もう5回も献血してはりますね」と言われた.
昼休みに行ったところ*1,40分ぐらいで全部終わったのでお得.寒いせいか人が少なかった.
今回謝礼としてボールペンとポカリスエットの容器をもらった.
これです.でかくて持ち運びに苦労した.電解液を運ばなければならなくなったら使おうと思う.
血液検査の結果が出た. コレステロールの値が上昇傾向にあるので,次回には200を超えているであろうという予想をしている.
アイドルマスター シンデレラガールズ 諸星きらり&双葉杏 1/8スケール ABS&PVC製 塗装済み完成品フィギュア
当たってたらこれください.
たとえばこのようなコードがある.Twitter でいいねした画像付きツイートを保存して,その URL を Slack に投稿して,サムネイル画像を生成して,必要な情報を DB に書き込むという処理をやっている.
client.on_event(:favorite) do |event| source = event[:source] target_object = event[:target_object] if source[:screen_name] == YOUR_SCREEN_NAME && !target_object[:user][:protected] && target_object[:extended_entities] id_str = target_object[:id_str] screen_name = target_object[:user][:screen_name] url = create_twitter_url(id_str, screen_name) download_urls = [] target_object[:extended_entities][:media].size.times do |i| media = target_object[:extended_entities][:media][i] download_url = media[:media_url_https] download_urls << download_url end text = url puts text options[:text] = text Slack.chat_postMessage(options) if filtering(target_object) download_urls.each do |download_url| download_filepath = File.join(IMAGE_DOWNLOAD_DIR, File::basename(download_url)) thumbnail_filepath = File.join(THUMBNAIL_DIR, File::basename(download_url)) begin body = open(download_url + ':orig', &:read) download_url = download_url + ':orig' rescue OpenURI::HTTPError begin body = open(download_url, &:read) rescue OpenURI::HTTPError raise '画像のダウンロードに失敗しました' end end puts download_url File.binwrite(download_filepath, body) Magick::Image.from_blob(body).shift.resize_to_fit(128).write thumbnail_filepath db.transaction begin db.execute INSERT_SQL, download_filepath, screen_name, id_str, Time.now.to_f, target_object[:text] db.commit rescue db.rollback end end end end
私はこれを見て,困惑しているところである.いろいろ思うところはあるが,とりあえず抜粋すると,
私の悪い癖として,書けと指示されなかったらソースコードにコメントを一切書かないことがある
— うたがわきき🔰💊 (@utgwkk) 2017年1月19日
悪い癖だと思う.自分だけのコードであっても,少し時間が経つと意図が不明になるというのはよくあることで,この条件式はこういう意味とかをとりあえず書いておけば,あとでそこを変更することになっても,現状に合うようにするだけで,タイムリープして条件式を解釈しなおす必要がなくなると思う.
これもあまり良くないと思っている.先のコードは,もう少し噛み砕くと,次のような処理をやっている.
これらの処理がぜんぶ,行を空けずに書いてあるので,初めて見た人にはどこまでがどの処理かが分かりづらくなっている.
私は,たとえば,ダウンロードとサムネイルの生成は別個で行われるべきだと考える.
そうして download
というメソッドと generate_thumbnail
というメソッドに分けようと思うが,このコードを素直に切り貼りしただけではうまく動かない.
サムネイルの生成が,ダウンロードに用いる body
という変数(ダウンロードしたファイルのデータを表す)に依存しているのである!
この場合は,サムネイルの生成はダウンロードより後に行われるとしているので,切り分ける際には次のようになるだろうか.
def download(url, save_path) begin # :orig 付きでダウンロードしてみる body = open(url + ':orig', &:read) rescue OpenURI::HTTPError begin # だめなら :orig なし body = open(url, &:read) rescue OpenURI::HTTPError raise '画像のダウンロードに失敗しました' end end end def generate_thumbnail(from_path, to_path) File.open(from_path, 'rb') do |f| Magick::Image.from_blob(f.read).shift.resize_to_fit(128).write to_path end end basename = File::basename url download_path = File::join DOWNLOAD_DIR, basename download url, download_path thumbnail_path = File::join THUMBNAIL_DIR, basename generate_thumbnail download_path, thumbnail_path
勢いよく書いて運用しているコードにあとから機能が必要になったと,これまた深夜テンションで継ぎ足していくと,あとで見直したときに行方不明になってしまう.
普段から疎結合なコードを書く癖がないとすぐこうなる,という典型例っぽい気がしてきた.みなさんは疎結合なコードを書くようにしましょう.あとテストも書きましょう.
人間がコードを書く際,常に正常な判断ができる状態であるとは限らないので,どうしても起こるものは起こるものです.問題はそこからどのようにして軌道修正できるか.
— うたがわきき🔰💊 (@utgwkk) 2017年1月19日
常に正常な判断がしたい,正常とは……?
今週のお題「2017年にやりたいこと」
印税生活を送る
風邪をひきました.11月も風邪をひいていたらしい.
具体的には,咳,喉の痛み,鼻水,痰,微熱,そういった……. 病院で検査してもらったところインフルではなかったが,喉が腫れていたのでそういうことです.
ツイッターを見返すと,月1ぐらいで風邪をひいている様子が観測されて興味深い.
風邪 from:utgwkk - Twitter Search
体調管理には気をつけよう!
インスタントコーヒーをカップ2杯ぐらい一気に飲んで作業する,ということをやっていたけど,効き目が切れると異常な脱力感に襲われたり,体調がなんとなく悪化したりする.
カジュアルに体調が悪化するのは困るので,最近はインスタントコーヒーの代わりに水を飲むようにしている.体調は悪くならないんだけど,眠たいし,甘味とか苦味とかは特にない.
押すと水が24L届いて便利なボタンです.