my new gear…… (thank you @Do_Su_0805 !) pic.twitter.com/bvmlkGC22j
— うなすけ (@yu_suke1994) 2017年12月26日
お金に余裕ができたら一眼レフが欲しいと思っていたところに、 @Do_Su_0805 が一眼レフを安価で譲ってくれるとのことで、待ってましたとばかりにお願いしました。
最近はちょっとしたイベントの度に持って行き、パシャパシャするのがとても楽しいです。
(このエントリに触発されて書いているというのもあります)
RAW+JPEGで撮影しています。SDカードが64GBなので、最高画質で大体1300枚ほど撮影できます。
一眼レフを手に入れて、勢いでやっていきになってAdobe Creative Cloudフォトプランを購入しました。取り込みについてはLightroom(Classic)に全部任せています。(撮影日付ごとにフォルダが切られ、その中にオリジナルのファイル名で保存される。ClassicでないとRAW+JPEGでの管理ができなかった)
イベントごとに日付を先頭に含むコレクションを作成して、そこに全部を突っ込んでいます。
まずはコレクションの写真をざっと見て、現像しないものに「除外」フラグをつけていきます。
採用する写真に対しては、とりあえず思考停止「自動補正」をして、その上で明るすぎるのを暗くしたり、ノイズ除去などをやっています。その辺をアレコレする知識が無いのと、Adobeへの信頼です。
現像まで終わった写真は、Google Photoにアルバムを作成してアップロードしています。そこから、イベントに応じた共有をしています。Google Photoのアルバムの共有リンクを発行することもあれば、Dropboxにも保存して共有リンクを発行したりもします。
まだ自分のユースケースだと、その場で現像とかは不要かなーという感じなのでFlashAirを買うことはないなと思いますが、時間次第な気もします。
それよりも、屋内の暗い場面での撮影でノイズが結構気になるので、撮影技術の向上や、F値の低いレンズの購入のほうが先になるのかなと思います(今はキットレンズ)
強い意思で沼に深く嵌らないようにしたいです。
高専DJ部 Advent Calendar 2017 - Adventar
25日目です。
高専DJ部以外では初のDJでした。出演させていただきありがとうございました。とても楽しかったです。
Skrillexでもベタベタなのを流すチャラすけ #ハコクラ pic.twitter.com/1VhfcW0tC2
— DJ Futoshi@12/24ハコクラ (@dj_futoshi) 2017年12月24日
チャラい?知らない概念ですね……
17日目です。
まあ脱チャラと言えるのではないでしょうか。
チャラい #kosendj pic.twitter.com/5DFoaXuxAh
— あそなす (@asonas) 2017年12月16日
前回のDJ部、#15の再現Mixも録っておいたので貼っておきます。
#kosen10s Advent Calendar 2017 - Adventar
13日目です。
8月22日の秋吉会、直前に旅行をしてきたこともあり、僕は現金が枯渇していました。 具体的には、秋吉会での割り勘で確実に足りる、という額は財布に無く、かといって数万円を口座から引き落とすとカードの請求額が払えなくなる、というカツカツっぷりでした。
このような状況だと、一旦僕がカードで払って、他のみんなには人数頭で割った金額を渡してもらう、という割り勘手法になるかと思います。
でも、そもそも割り勘って面倒ではないですか?人数で割り切れない金額になることもありますし、割り切れたとして、金額をその額面丁度で支払えることなんて稀です。 ざっくり千円単位に丸めて、貸し借りの概念が発生するのもどうかなーと思います。これは気分の問題ですが。
さてその時、ちょうど割り勘アプリがいくつか出てきていました。その時検討対象だったのは、PaymoとKyashでした。
Paymoはレシートの撮影が必要という手間は必要ですが、そのおかげで収納代行業者として機能するので、割り勘した金額をあとから銀行に振り込むことができます。
参考 ユーザー体験から紐解く「個人間送金」アプリの仕組みと歴史(日本編) | hajipion.com
なので、Paymoを使うことにしました。
秋吉会で、さく、どくぴー、でなり、puhitakuにPaymoを使ってもらいました。その時の体験が良かったので、以降のkosen10sのイベントで割り勘が必要になったときも、Paymoが使われるようになりました。
僕が記憶しているうちで、Paymoによる割り勘が行われたkosen10sのイベントは以下の3つです。
現金レス割り勘、超便利です。
2017-12-17 kosen10s Advent Calendar 2017 へのリンクを追加
高専DJ部 Advent Calendar 2017 - Adventar
そういうことなので、録り直しました。左右に別れているささやきの音声とかがちゃんとなってると思います。
いや〜長いMixだった。
もともとCFPとして応募していたのですが落選してしまい、どうしようとなっていたところ、pixivさん主催で前夜祭が開催されることになり、その中でLT大会が催されるということなので早速応募しました。
https://github.com/unasuke/fukuoka_ruby_kaigi_02_lt
最初は5分枠で応募していたのですが、10分枠で話してみて「5分とか無理だな」ってなりました。
僕らが高速化したのはRuby実装です。
まずはslow query logの有効化、それからinnodb_buffer_pool_size
を1Gにしました。
今回はサーバーが複数台あるので、手元で叩いて各サーバーにssh経由でgit pull
とsudo systemctl restart
をさせようと思ったのですがなかなかうまくいかず、結局サーバーにsshした上で実行するscriptになってしまいました。
このscriptはちょこちょこ書き替えが発生していました。
CREATE TABLE user (
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(191) UNIQUE,
salt VARCHAR(20),
password VARCHAR(40),
display_name TEXT,
avatar_icon TEXT,
created_at DATETIME NOT NULL,
INDEX(name)
) Engine=InnoDB DEFAULT CHARSET=utf8mb4;
ただ、このQueryを実際に流すのを忘れていて、終了10分前とかに気づいてIndexを張ったというポカミスがあります。
定石というか、なんというか。あわせてAPP_ENV
(Sinatra)もproduction
にしています。
これも定石。しかし、nginxから返すようにしてから数十件の静的ファイルへのリクエストがタイムアウトするようになってしまいました。はじめはnginxが詰まったのだろうか……と考えていましたが、その後Discordでeth0で頻繁にネットワーク遅延が発生していると報告がなされました。もしやと思って僕からnginxへのリクエストがタイムアウトする旨を使えたところ、報告された方も同様の症状だったそうで、「これはインスタンスガチャか……?」となりました。
しかし競技終了後、Cache-control public
やlast-modified
、Etag
の値などは考慮していないことに気付き、やはり自分達に原因があったのでは……となりました。(このへん詳細ちょっと不明です)
これは最初、アプリのコードを読むと静的やんけ〜〜となったので雑にpublic以下にhtmlを生成して置いたところ、ステータスコードでひっかかってダメでした。nginxで返すときにステータスコードも強制的に302に書き替えたりもしてみましたが、Locationヘッダーも必要でアーそうですねとなって一旦撤退しました。
しかしその後、「一度File.openとかで変数に格納して、それを返すようにすればいいのでは?」と気付きを得てそのようにしたところ、有意なスコアの上昇が見られてよかったです。もっと早く気付くべきですね。
/message
と/history/:channel_id
へのGETは、その内部で実行しているSQLにN+1問題があることがわかります。なので、これをjoinして解決することにしました。
statement = db.prepare(
'SELECT message.id, message.created_at, message.content, message.user_id, user.name as user_name, user.display_name as display_name, user.avatar_icon as avatar_icon FROM message INNER JOIN user ON user.id = message.user_id WHERE message.channel_id = ? ORDER BY message.id DESC LIMIT ? OFFSET ?'
)
rows = statement.execute(@channel_id, n, (@page - 1) * n).to_a
statement.close
@messages = []
rows.each do |row|
r = {}
r['id'] = row['id']
statement = db.prepare('SELECT name, display_name, avatar_icon FROM user WHERE id = ?')
r['user'] = statement.execute(row['user_id']).first
r['user'] = { display_name: row['display_name'], avatar_icon: row['avatar_icon'], name: row['user_name'] }
r['date'] = row['created_at'].strftime("%Y/%m/%d %H:%M:%S")
r['content'] = row['content']
@messages << r
end
hashにぶち込んでレスポンスを返すところ、特にuserの情報の部分では、/history/:channel_id
ではerbから参照しているのでhashのkeyがSymbolになっているとベンチマークでエラーが出るのにはちょっとハマりました。
あと競技終了後のDiscordで、statement.close
の漏れがけっこうあることを指摘されていて、この辺の知識がなくstatement.close
の有無がどう影響してくるのか不明で放置してしまっていました。
レギュレーションには/fetch
へのアクセスは採点対象ではないことが書いてあり、/fetch
へのアクセス回数を減らせられればその分リクエストの処理が可能なのではないかと思い5秒までのばしてみましたが、ベンチで有意なスコア上昇が見られなかったことと、pumaのスレッド使い尽したらリクエスト受けられないのでは?と思いrevertしました。短くしようかとも思いましたが時間が足りず挑戦していません。
もともとサーバーそのものは3台提供されていましたが、リクエストはapp1台とdb1台で処理していました。
これをVarnishにより、まずリクエストはapp1で受け、/profile
へのPOSTと静的ファイルへのリクエストはapp2のnginx + pumaで、それ以外はapp1のpumaで受け、裏のdb1にデータを取りに行くという構成にしました。
多分今回のなかで一番大仕事かつ成果のあった作業だと思います。(これでベストスコアが出た)
長時間サーバーを起動しっぱなしにしていると、/initializeが規定時間内に終わらなくなってしまいました。これは、isubata.ruby.service
の再起動で解消されるので、ベンチマーク実行前にserviceの再起動をかけるようにして凌いでました。
去年の提出スコアが0だったことを考えると、スコアが11204というのはもう去年の何倍というスケールには収まらない成長っぷり(?)でめちゃくちゃ嬉しいです。が、もっとやれることあっただろ、というところでもあります。
あと予習とか訓練が足りなかったかなーと思います。(2週間前にisucon4の予選問題でリハーサルをしただけ)
分単位で記入していますが曖昧です。
時刻 | 行動 |
---|---|
9:05 | うなすけ 会場準備 |
11:41 | うなすけ ラブライブ サンシャイン 1期完走 |
13:00 | 競技開始、みんなで予選当日マニュアルのgistを読む |
13:10 | うなすけ Ruby実装を使うようsystemctlで設定、初期実装でのスコアを見るため先頭2台をenqueue (6173) |
13:19 | うなすけ アプリのコードをローカルにscp |
13:24 | うなすけ private git repositoryを用意 |
13:30 以降 | うなすけ → deploy script、のほ → MySQL、やまま → アプリ理解 に分担 |
14:32 | のほ slowquerylog など有効化 |
14:34 | うなすけ deploy scriptの大枠が完成 |
15:00 ごろ | やまま インスタンス内からbundler消失疑惑がありあたふた |
15:26 | やまま systemdの設定とnginxの設定をrepository管理下に |
15:37 | うなすけ RACK_ENVをdeploymentに |
15:43 | のほ innodbbufferpool_sizeを1GBに |
15:45 | うなすけ user.nameにINDEXを張る(コード上のみで実際には張らず) |
15:48:40 | スコア 6227を記録 |
16:03 | うなすけ SQLのJoin化に着手 |
16:07:40 | スコア 6403を記録 |
17:00 ごろ | やまま 静的ファイルをnginxから配信するように悪戦苦闘中 |
17:23 | うなすけ SQLをJoinするように |
17:44:30 | スコア 5698を記録 |
17:45 | やまま pumaとnginxの間をunix domain socketで繋ぐ |
17:46:46 | スコア 8540を記録 |
18:08 | うなすけ /login と /registerのGETをnginxから返すようにする |
18:48 | うなすけ /login と /registerのGETをnginxから返すようにするのをやめる |
18:54:47 | スコア 10852を記録 |
18:56:27 | スコア 8248を記録 |
18:57 | やまま Varnishの導入に着手 |
18:59:24 | スコア 3016を記録 |
19:04:44 | /initializeがTimeoutし始める |
19:17 | うなすけ /fetchで5秒sleepするようにしてみる |
19:27:48 | スコア 5678を記録 |
19:39 | やまま Varnishを使ったrequestの分散に着手 |
19:51:22 | スコア 4032を記録 |
19:57 | うなすけ /fetchで5秒sleepするコードをrevert |
20:00 | やまま Varnishを使ったrequestの分散を完了 |
20:00ごろ | みんなで他になにかできるか確認 |
20:31 | うなすけ /loginと/registerを変数から返すようにする |
20:31:26 | スコア 11246を記録 |
20:35ごろ | あまり覚えてないけど再起動試験とかしてたはず |
20:40 | user.nameにINDEXが張られる |
20:42:42 | スコア 12033を記録(ベストスコア) |
20:51:28 | スコア 11204を記録(提出スコア) |
誤字の修正とメンバー紹介を追加しました。 (ykztsさんありがとうございます )
このイベントで新曲披露できなかったら土下座と宣言して、なんとか土下座せずに済みました。タイトルは色々な音を弄ってみるために適当に付けたプロジェクトファイル名がそのまま残っています。
欲を言えば高専DJ部の度に1曲つくっていきたいけど、できるかな……
スノーで加工されてリアルタイムでVJのおもちゃになってるうなすけ君の様子です #kosendj pic.twitter.com/hozPlyaKed
— とーかさん🦐10/21 kosendj (@touka_tt) 2017年10月21日
うなすけくん、DJだけはどんどんチャラくなっていく #kosendj
— HolyGrail@10/29ハコクラ (@HolyGrail) 2017年10月21日
うなすけくんこのままナイトプールDJとかやったら虚無捨て太郎いけそう(いや、いけない) #kosendj
— HolyGrail@10/29ハコクラ (@HolyGrail) 2017年10月21日
DJ. DJだけチャラ太郎 じゃん #kosendj
— JC手作り料理@10.21(土)茶箱 (@furaji) 2017年10月21日
スピーカーからモテたいという気持ちが伝わってくる #kosendj
— あそなす@高専DJ部10/21早稲田 (@asonas) 2017年10月21日
VJのお気持ちが出てしまった #kosendj pic.twitter.com/H41DB1MuM0
— HolyGrail@10/29ハコクラ (@HolyGrail) 2017年10月21日
これからもチャラチャラズンズンパリピEDMでやっていくぞ!!!!!!!!
経緯です pic.twitter.com/pvO2zH6ODy
— 🌈✨HolyGrail✨🌈 (@HolyGrail) 2017年9月7日
うなすけくんにFF14のゲームカードをプレゼントします! #光のうなすけくん https://t.co/2r1biLIlF7
— 🌈✨HolyGrail✨🌈 (@HolyGrail) 2017年9月18日
プレゼント完了しました!!! #光のうなすけくん pic.twitter.com/5vRGzoHo9u
— 🌈✨HolyGrail✨🌈 (@HolyGrail) 2017年9月18日
#光のうなすけくん pic.twitter.com/p6hUAgyhzG
— うなすけ (@yu_suke1994) 2017年9月23日
詳しくは #光のうなすけくん
でよろしくお願いします。
いやー、おとなってこわいですね!!!!!
敵に絡まれまくるUnasukeちゃんが可愛い。 #光のうなすけくん pic.twitter.com/Uc5uiSbZ9d
— ふーすのー (@fooyuta) 2017年9月23日
ふーすのーありがとう……
とりあえず200日くらいは遊べる(ありがとうございます)のでやります。気が向くか要求されたらYoutube Liveで配信もします。以後よろしくお願いします……
録音で片方のチャンネルがごっそり抜け落ちているので聞いてると違和感があるかと思います。
今回は色々がありましたね…… そうめんが美味しかったです。
さて、
の3曲は、FL Studioを買って編集したものなのですが、打ち上げで「曲作らないの」と言われたので、次回の高専DJ部までに1曲作ることを目標にします。