そのたおおぜい

研究とか英語とかプログラミングとか

実施内容26

頑張ったよ今日って感じなので書いておく.

 

  • 部屋の掃除
  • PC開けてダスター吹いて掃除
  • Discord立ち上げ
  • ↑のロゴ制作
  • ↑のスライド制作
  • ↑のTwitterで宣伝

 

がんばった.むっちゃ疲れた.寝る…….

食生活の見直し

最近乱れ過ぎなので少しでも軌道修正したいと思ってたらこんなものが.

 

newsteam.livedoor.biz

 

これ良さげなので実践していきたい.

後週報,日報を一切書かなくなったのが本当にマズいと思うので,頑張って書いていこう.

Dockerを初めて使ったのでメモ

大したことはしていないけど,とりあえずメモっておく.

Dockerのインストー

OSがWindows10の Home なので,Docker Toolboxをつかった.インストールの仕方はこのページが詳しい.

devcenter.magellanic-clouds.com

裏でVirtualBox経由でLinuxが動いているので,世間一般にあるコマンドもWindows上で普通に使える.良いですね.

とりあえずUbuntuでも使ってみる

sudo docker run -i -t ubuntu:14.04 /bin/bash

このコマンドで動く.-i -tで起動してそのままターミナルに入れる.この時,いちいち事前にパッケージをローカルに持ってくる必要はない.いきなりこのコマンドを入れるとパッケージをダウンロードしてくれる.便利だ.あとは普通にUbuntuできる.楽しい.

データサイエンス用のコンテナを使うまで

github.com

こんなものが存在すると聞いて飛び上がって驚いた.というわけでとりあえず使ってみる.READMEのコマンドを実行.

docker run -it --rm -p 8888:8888 jupyter/datascience-notebook

ただし,これだと,表示されるURLからnotebookにアクセスできない.理由がissuesとQiitaに書いてあった.

github.com

qiita.com

さっきもちらっと書いたけど,Docker Toolboxは裏でDocker用にVMが別途動いている.つまり,VMで動いているipythonにアクセスしようとした場合,VMを経由してアクセスする必要がある.具体的には,VM側の設定を開いてポートフォワードするようにしてあげれば良い.

f:id:hagyou:20170722194931p:plain

VirtualBoxGUIで立ち上げて,該当するDocker-machineを選択(特に何もしていなければdefault)して①高度→②ポートフォワーディングを選択する.

f:id:hagyou:20170722194952p:plain

①で項目を追加,②に適当な名前,ポート番号を入力.これでコンソールに出てくるnotebookのURLをそのまま利用できるようになる.

編集したコンテナを保存

これ,結構戸惑ったので書いておきたい.Dockerで普通にコンテナを終了してもう一回立ち上げると 作業内容が保存されていない .もちろん,保存する方法はあるが,その場合,作業したコンテナをDockerのイメージとして保存する必要がある.イメージをまるまる保存するので,変な話Wordファイルの名前を変えてバージョン管理するみたいな地獄っぽい話のような気もする.

ただこれ,Docker自体の思想というか,使い所のお話が原因だと思っていて(結構適当にしか調べていないので眉唾で聞いてほしい),要するに開発環境を共有することが前提の場合にDockerを使うべきってことなんだと思う.

この辺のページを見れば普通にできる.

ottan.xyz

qiita.com

感想

結局最後の保存の部分が引っかかった.個人でローカルで開発するためだけに使うなら,普通にVagrantでいい気がする.Win10ProならHyper-Vが使えることもあって早いからDockerを使う方がいいってこともあるだろうけど,Homeなら結局裏でVM動いていて重いし,これなら別にVagrantでいいよなと言う気持ち.もちろんサーバなんかに環境をまるまるデプロイことが前提の場合は絶対にDockerの方がいいと思う.

www.slideshare.net

こんなスライドもあった.

SlackAPIでattachmentsが表示されなかった時

GoogleAppScript経由でSlackのAPIchat.postMessageを叩いて投稿するみたいなことがしたかったんだけど,その時に結構な時間ハマったので,今日はそんな話です.参考文献はこちら.

stackoverflow.com

attachments field actually does get sent as a string of JSON, but URL-encoded into a parameter.

要するに,Attachment部分は文字列で渡してあげる必要があるらしい.さすがにこれだけだとわかりづらすぎるので,ちょっと例を挙げる.世間一般でGAS経由でSlackのAPIを叩く場合,大抵の場合こんな感じで叩いている.

  var url = "https://slack.com/api/chat.postMessage";
  
  var payload = {
    "token" : "トークン",
    "channel" : "チャンネル名",
    "as_users" : true,
    "text" : "なんかテキスト",

   // ここにattachmentsを書く
  };
  
  
  var params = {
    "method" : "post",
    "payload" : payload
  };
  
  var response = UrlFetchApp.fetch(url, params)
  Logger.log(response);

要するに,URLのパラメータは関数側に放り投げて作ってもらっているってことです.挙動が見たい人は以下のページ参照.

Class UrlFetchApp  |  Apps Script  |  Google Developers

ハマったのはこのpayloadattachmentsを書くところ.これ,変数をそのまんま書いちゃうと,JSON形式であっても文字列じゃないので展開されないらしい.と言ってもわかりづらいと思うので,負例を挙げる.

    // NG
    "attachments" : [
        {
          "color": "#FFD700",
          "title": "ナンタラカンタラ",
          "fields": fieldsList
        }
    ]

このままだとJSON形式にはなっているらしいが,文字列にはなっていない.ので,APIを叩いてもattachmentsが表示されない.らしい.

f:id:hagyou:20170718094445p:plain

chat.postMessage method | Slack

これ,APIのドキュメントからスクショ取ってきたやつなんですけど,これで,文字列でほしいってことらしいです.わかんねーよ.でも,文字列で欲しがっているものは欲しがっているので,JSON.stringify()で文字列にしてあげる必要がある.

    // OK!
    "attachments" : JSON.stringify([
        {
          "color": "#FFD700",
          "title": "ナンタラカンタラ",
          "fields": fieldsList
        }
    ])

こんな感じ.これで後は表示されます.

これ,何がハマるって,文字列にしないでAPI叩いてもAPI側からエラーも警告も返ってこないんですよ.ひどくない?

あと,これは完全に愚痴ですけど,関数自体の呼び方も人によって異なっていたり,そもそも全部JSON.stringfy()で文字列にして送っていたりする人もいて,結局どこからどこまでを文字列にしなければいけないのかが全然わからなかったんですよね.あとSlackのAPI DocmentにあるTesterを使っても普通に表示されます.故にハマったハマった.同じような苦しみを生じさせないためにも記事にしました.参考になった人がいたら幸い.

ジョン・ウィック チャプター2を見た

johnwick.jp

 

待ってたぞ!!!!

 

どんな映画?

  • 伝説の殺し屋である主人公が引退したとおもったら(前作),昔の契約を持ち出されて,断ったら奥さんとの思い出である家を燃やされてブチギレて殺し屋復帰する話.
  • アクションの見やすさ・わかりやすさは相変わらずピカイチで,カメラが動かなくったって爽快感溢れるアクションができることを教えてくれる.
  • 自分の中の3歳児が大喜びするアクション以外のシーン(殺しの準備をするシーン)があって,ぼかぁそこだけで満足です.

 

ほんとうにいい映画だった.ラストがあんまり悲しいものだからちょっと終わったばかりの時は不快だったんだけど,思い返すと良い映画だったと思う.

不快ってわけでもないんだけど,今回はアクションをする場所自体を使った仕掛けが多くって,別にそんなことしないで,今までのジョンウィックのアクションを見せてくれという気持ちになってしまった.別に今回の演出が微妙だったというわけではないのだけれど,この映画に期待していたのは純粋にアクションだったので.

実施内容25

はい.ちゃんと毎日書こうね〜っていってたのにこれですよこれ.とりあえず今日の分から書いていこう.

 

研究

ちまちま作業,ちまちま改善という具合.

 

で,ミーティング

「だめー」「だめー」を連呼されたものの前よりは絶対良くなった気がするので積極的に「だめー」されていきましょう.あと,研究自体も何とかなりました.

 

シンデレラガールズ5th幕張公演

最高の一言に尽きた.本当に涙が出てしまった.あんなに感動的なシンデレラストーリーに立ち会えるんだから,やっぱりこのコンテンツ追いかけていて良かった.あとでツイートだけまとめておく.今回は人生で初めてこう,某所にお手紙を送ろうと思えたので,そんなことをします.はい.

 

ブログ(というかキンプリ・キンプラ

ブログ関連,今週はいろいろあいりすぎた.詳細はこのへん.

hagyou.hateblo.jp

 

hagyou.hateblo.jp

 

アクセス数が普段の20倍ぐらいになったりしていましたし,なぜかGoogleキンプラって検索すると1ページ目にこの記事が出ていてうひょあーって感じです.まぁ,興味持ってくれた人が多いなら嬉しいです.いるかわからんけど.

 

英語

取っていた授業がもうそろそろ終わってしまうので,何かしらで少しずつ続けていきたいと思っている.やっぱりDMM英会話でも使おうかな.

 

来週までにやること

研究は某の実装と引き続きデータのブラッシュアップ

キンプラの応援上映に今日いく予定なので,そちらの記事を書く.

例のお手紙も書く(SSAの現地にいるので,その時に実際にお届けする感じになると思う)

デジゲー博ように企画書をペラ1レベルで書いておく

デジゲー博の申し込み

企画書を簡単に書いておく

買い物(これはプライムデーだし今日やる)

SSAまでの金銭管理(予算確認)

闇作成(するのかこれ)

pylabのimshow()の幅が狭くて残念な時の対処法

from pylab  import *
import numpy

mat = rand(10,50)
im = imshow(mat)
colorbar(im)
gird(True)
hot()
show()

こんなコードを使うとこうなる.

f:id:hagyou:20170705151619p:plain

うーん,なんか横長でしょんぼりって気持ちになりますね.そんな時はimshow()をこうする.

im = imshow(mat, aspect="auto")

するとこうなる.

f:id:hagyou:20170705151723p:plain

みやすい!やったー!

以下,参考文献.

stackoverflow.com

qiita.com