カマカマの雑草ブログ

個人の日記です

家バーKMY-A3のはなし

社会ではあらゆる形の暴力が蔓延し、無力な人々の日常はおびやかされ続けている現実があります。 そうした現実に対してぼくらはグラスの底に沈んだ答えを片手に人生をやっていく必要があります。
つまり家にバーで出来上がるのは全くもって必然ということです。

KMY-A3(かまや と読みます)はそうした論理を基に形成された家バーです。
基本ずっと一人で勝手に作ってやってるか一人遊びに来るか程度だったのですが、先日それなりに人が来て中々楽しさと大変さがあったのでまとめておきたいと思います。

アイスペールは必須

我が家にはバーカウンターなどというシャレたものはなく、リビングのテーブルの上に酒と割材を並べまくるという宅飲みスタイルになるため、テーブル上に氷をプールできる道具が必須になります。
一応アイスペールは持ってたのですが4人来ると凄い勢いで氷が無くなっていくので大きめのサイズが良さそう。

パール金属 アイスペール 1.5L ダブル ステンレス IENOMI K-6023

パール金属 アイスペール 1.5L ダブル ステンレス IENOMI K-6023

リビングとキッチンの往復がダルすぎる

ミキシンググラスでステアしたりシェイカーでシェイクした後などの使用済み氷を処分するのにリビングのシンクに持ってく運用をしていたのですが、何か作る度に行ったり来たりを繰り返すことになるのでこれが極めてダルかった。 氷を捨てられるビニールなり箱なりが必要になってきます。作る人にアルコールが回って曖昧になってくると使用済み氷使い回すようになるのでまあどうでもよくなるのですが。
後は冷やして保存しておくべき酒や割り材は冷蔵庫にあるので、取りに行ったり戻したりもダルい。劣化を許容出来るならやってる最中は全部リビングに置いておくと良さそう。
あるいはリビングに専用の小さい冷蔵庫を置いてしまうなど……

知識があるとよい

針金紳士というぼくの友人が曖昧な注文をしまくるのですが、人間は基本曖昧なのでその曖昧さに答えるための酒の知識などがあると望ましいです。
今回そういうの一切なかったのでぼくはひたすら強い酒を作りまくってたのですが恐らくこういうことはよくない。 知識をベースに作ったのはオールド・パルくらい。古くからの仲間 を意味するカクテルです(この集まりが小、中学生時代から続く友人の集まりだった)

オールドパル | Campari

グラスがもっと欲しい

カクテルグラス一つしかないので、ショートカクテルは一人しか飲めないみたいな状況になってました。
無限にカクテルグラス欲しいのですが置き場がない。グラスホルダーめっちゃほしい。

そもそも家にバーカウンターが欲しい

カウンターキッチン付き賃貸で職場の近くを調べると賃料がアなので厳しい。石油王の皆さんお願いします。

まとめ

家バーは楽しいのでやってみましょう。カクテル完全バイブルという本があると大体なんとかなるのでおすすめです。

カクテル完全バイブル

カクテル完全バイブル

道具はセットのやつ買っとけば良いと思います。

ところでVA-11 Hall-Aというゲームは大変面白いのでみなさんもやりましょう。

publishing.playism.jp

2018の抱負

抱負

死なない 病まない

こまっていること

  • 自分の人生が完全に余生
  • その割に仕事上の不安がすごい
  • 仕事上の立場が変わる
  • 仕事で何も考えてないことに気付く
  • 人生もそうじゃん
  • 昔はきっとゲームとか作りたかった
  • いろいろ挫折して、そういうのが完全に失せていった
  • 多分トビーフォックスみたいなことがしたかった
  • そのことに対しての行動はまるで足りてはいなかった
  • 秒速の会社を辞めるときのモノローグみたいになってる
  • このままでは会社どころか人生を辞めるリスクがあるのではなかろうか
  • 人生で他に特に何もないが、友人と居るのは楽しい
  • 昔よりは自己肯定感はある気がする、が、どうしろというのだ……
  • メンタル大分マシになってて、これは本当にめでたい デパスキメたりとかはしてない
  • 親友はみんな人生やっていっててすごい
  • 自分の感情として引け目は無いのでマシにはなってる
  • 一方で目的が無いから宙ぶらりんになってる気はする
  • 多分、仕事人間にはなれない
  • プログラミングにフルコミットも、多分そこまで突き詰められない
  • さて人生どうしよう
  • 取り敢えず死にそうだし病みそうな一年だしそれには抗ってくか
  • こうして白馬村のとあるペンションで2018年の抱負が出来上がった

みなさんどうやってるんですか人生

5分やれ

f:id:s-wyvern:20170128011031p:plain

とまあ、そういう趣旨のwebサービスっぽいものを作った。
サービスとしてはクソシンプルで、やること入れてStartって押すと5分タイマーが動いて終わると草が生えるという代物。
緑地活動の一環にどうぞ。

https://five-minutes-worker.herokuapp.com/

裏周り

Ruby on Railsでフロント周りはReact.jsを使っています。 両者とも初、というかWebサービス的なやつを0から作るのが初な気がする。
Sprockets使わずに全部webpackで吐く方針でやってみました。
最初のレンダリング後は全部レスポンスjsonで貰って差分更新するようなスタイルになってます。
Heroku無料枠上で動いてます。なのでたまに動いてません。許せ。
クソ重いんですが一応assetsはAmazon Cloud Frontに載ってます。
NewRelicとかにトラフィック流れてきたらちゃんと調査したい(時間はおそらく無い

もちべ

ぼくの人生というのはあまりにゴミみたいなもので、すぐに怠惰な方向へ走り自己嫌悪のままに一日を終え生涯を終える傾向があるのですが、それでも人は何かをやっていく必要があり、ある程度は自分に自信と誇りを持たなければそもそも社会に適合できないという社会そのものが持つ性質を見据える必要があります。(要出典)

そうした世の中で少しでも日々に自信を持てる時間というのを作り、溜め込み、可視化していくのが人間モドキがまっとうな人間になるための必要なステップだと考えました(補足ですが、このサービスは自身のドッグフーディングを第一目的としたものであり、これから使っていただけるかもしれない方を揶揄する意図はありません)

つまり5分だけがんばる時間を積み重ねていけば日々はきっと良くなるだろう、という信仰のもとにこれは出来上がりました。

がんばる、とは何でも良いとは思ってます。勉強とか、運動とか、睡眠とか、ゲームとか、アニメとか、まあ色々あるでしょう。

インスパイア元としてポモドーロテクニックというのもあり受験期には大変世話になったのですが、そもそも25分とか長すぎるので5分にしてます。とにかく雑で良いのです。

雑であれ短くであれ、少しでも何かを努力したという時間を積み重ねていくことが大切なのです。

というわけで良ければどうぞご利用ください。

本当の理由

作って公開するか悩んでる内に仕事が変わって時間外労働時間が10倍になったので、こりゃお蔵入りさせるなら世に放流だけしといた方が良いな、という背景があります。
なのでメンテとかあんまりすぐ出来ないかもしれません、すみません。
あとHeroku無料枠でごめんなさい。無料枠の分際でAWSのCDNは生意気に使っててすみません。

ゆく年

こういうの書いてたので雑に振り返ります

くる年 - カマカマの雑草ブログ

基礎欲しい

  • ネットワークとかの
    • マスタリングTCP/IPは読んだ
    • C10k問題とかマルチプロセス/マルチスレッドモデルとかイベント駆動モデル辺りのざっとした知識入れた
    • 遅延推測とか全くやってない(去年は必要な機会があったけど今年全く不要だったからそういうもんだと思う)
  • "綺麗なコード"
    • 自分のコードがゴミみたいな汚さということは理解した
    • 同僚とかOSSの綺麗なコード大量に吸った
    • Rubyがちょっと気に入っていて、その言語を取り巻く思想みたいなのを吸うためにRailsでチョイチョイ小さいものを作ったりしてる
    • 業務で雑なMVPっぽいやつAndroidで出来たので一定の成果はあったと思う(全くチームに広まらなかったけどそれはまた別問題)
    • Martin Fowlerの古典とか精神イッてた時に友人に全部投げ渡したので気が向いたらまた買うと思う
  • 古典に学ぶ
    • ヘネパタ本、Code Complete、ゲームエンジンアーキテクチャ全部途中で積んでる
    • ヘネパタはちょっとずつ読んでる、ほ、ほんとうやで……
    • 古典は重いので電子書籍が基本
    • Rebuild.fmで古典は時代背景を理解して読もうねみたいな話がありなるほどと思う(小学生以下の感想)
  • 低レイヤーへのコンプレックスが云々
    • まあ↑読み切ったら多少はマシになるんじゃないでしょうか
      • つまり全然ダメということです。現実は厳しいものですね
    • JNIとかcrash dumpのsymbols analyzeとか仕事でやったので抵抗は無くなった(無くなっただけ)

体力・バイタリティ

  • ジム
    • 通っちゃいるが尋常じゃない頻度でサボっている
    • 主に理由はゲーム・酒・ダルい等があり対策が必要
    • ジムに通う目的の一つである「適正体重までの健康的な増量」は一定の成果があった、約+2kgほど
  • 通院が必要になったら面倒くさがらない
    • そんなに風邪引くこと無かったので良いんじゃないかと思います
    • ただそろそろ歯科医行ったほうが良い気がする……

考える力つけましょう

  • 相変わらず脳は死んでる
  • 読書の癖もついてないので改善のアイデアがないと厳しいんだと思う
    • ジム中に読もうかと思った時期もあったが全く集中できなかった
  • Twitter見ると分かるんですが全く減ってないです

取り敢えず読んでるは読み切りましたか

  • Game Programming Patternは読み切った(というか英語版読んでたし……)
  • オンラインゲームを支える技術はClient/Server型MMOの実践辺りで止まってる

ほか

  • 振り返って自分のブログ見てると何やってる人なのか全く分からねえなこれ
    • 道楽で生きてる人っぽい 蔑称的意味の方のDilettante
    • 本業はモバイルアプリゲームエンジニアです
  • 来年もよろしくお願いします

SorceryでExternalが動かない際にはconfigのcallback_urlを見直してみる

Ruby on Rails初心者の断片プログラマーです(マサカリは程々にお願いしますの意)。
いま個人開発でRuby on Rails触っていて、認証部をシンプルな感じにして最高に楽をしたかったのでSorceryを利用しようとしたのですが、External(外部認証機能、OAuth認可するやつ)をTwitterで利用しようとした際にハマったのでここに解決法を記しておきます。

バージョン

結論

callback_urlのドメインは0.0.0.0だとsessionでrequest tokenを共有できなくてダメというやつです。
開発中はlocalhost, Productionならwww.yourawesomeservice.comとかである必要があります。
yourewasomeserviceは適宜よしなにお願いします。session共有できる設定とかでも多分平気(試してない)。

事象

Sorceryのチュートリアルの通りに進めていると、Twitterを介して認証処理が成功してcallbackした際に401 unauthorizedが返ってくるという問題があります。
他にも以下に挙げられているようなことが原因で発生することがあるみたいです。

Sorceryの実装

この辺
https://github.com/Sorcery/sorcery/blob/master/lib/sorcery/providers/twitter.rb#L45-L53

:request_tokenと:request_token_secretをsessionから持ってきてるのが分かるかと思います。
get_access_tokenの実装はProtocols::Oauth下に
https://github.com/Sorcery/sorcery/blob/master/lib/sorcery/protocols/oauth.rb#L22-L27

get_request_tokenではtokenとsecret見て、nilだったらTwitterに問い合わせる感じになってます。
https://github.com/Sorcery/sorcery/blob/master/lib/sorcery/protocols/oauth.rb#L10-L13

これつまりどういうことかっていうと、初回のrequest_token取得時に利用したsessionと、その後のcallbackで利用するsessionが同一でないとrequest_tokenが適切に渡らず、request_tokenが適切に渡ってないとaccess_token取る前にもう一度request_tokenを発行しようとするわけです。
新しいrequest_tokenを発行しても実際に認証完了しているのは古い方のrequest_tokenなので、認証の済んでいない新しいrequest_tokenを使ってaccess_tokenを取ろうとしても401が返ってくるわけですね。

そして、特別な設定をしていない限りはRailsのsessionは異なるドメイン間で共有されないので、localhost内のsessionにrequest_tokenがあってもcallback実行時の0.0.0.0内のsessionにはrequest_tokenが入っていないという流れが起きます。

終わりに

こうして改めて見ると結構しょーもない理由で悩んでいた気がしますが、人が学びを重ねていく過程においては止むを得ないということで見なかったことにします。
何か誤りなどありましたら教えてください。謝ります。このジョーク超面白くないですか。

A poem of testing

テストコードってなんで必要か

  • 実装時におけるデグレエンバグを防ぐ手段の一つになる
  • コードの動作を明示的に保護できる
  • リファクタリングしやすくなる
  • 大まかなcouplingとIF設計のガイドになる

モバイルゲームクライアントという特殊な環境

通常のiOS/Android Appと比べると……

  • 仕様追加/変更が多い
  • DynamicなUIを求められる箇所が多い
  • 機能単位の直交性があまり高くない

とはいえ複雑化するクライアント事情

  • UIの整合性
  • ユーザの操作制御
  • 複雑なState管理
  • API通信
  • データ加工とView表示

テストを単純に書けば良いというものでもない

書くこと・保守することは間違いなくコストになる

テストを書けそうなら以下の辺りか

  • UI Componentの存在/属性検証
  • UserActionが適切にdispatchされているかの検証
  • ユーザ操作に対して変化するStateの検証
  • Infra層へのrequest/responseが適切かの検証
  • Infra層から得たデータを元にViewObjectを生成するロジックの検証

どこまでやるのか、という程度問題は結局残り続ける(UI要素全検証とかシンドいと思う

経験からクライアント書いててネックになりがちな所は以下だと思っている

  • UIの整合性
  • 複雑なState管理
  • Clientで持たざるを得なかったdomain logic

ソフトウェアをより良くするための保護と、サービスをより良くするための身軽さを両立する位のバランス感覚でやれると嬉しい

ごーるでんうぃーく9日目

昨日はなにもしませんでした。

今日は劇場版『遊☆戯☆王 THE DARK SIDE OF DIMENSIONS』見てGAME ON行ってきました。
シンクロ召喚全盛期だった頃に結構ガッツリやってて原作も全巻読んだくらい熱量だったんですが映画とにかく凄かった。
海馬社長のための映画なので彼が好きな人は見た方が良い。それでなくても原作ちょろっとでも知ってる人だったら見て楽しめると思います。

www.yugioh20th.com

GAME ONの方はPONGとか昔のアーケード筐体やポータブルゲーム機なんかが展示・試遊できる感じで、展示まわりながらゲームやそれ取り巻く環境の歴史とかが見れるやつです。
友人と行ってきてPONG対戦したんですがカドでの打ち返しに固執しすぎて負けました。
閉館ギリギリに行ったのでもうちょいゆっくり見ても良かったかもですね。

www.fujitv.co.jp