読者です 読者をやめる 読者になる 読者になる

カマカマの雑草ブログ

個人の日記です

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

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

Thinking about Authentication in Mobile Game

モバイルゲームとかってユーザ/パスワード型のbasic認証じゃなく、端末にインストールされたアプリから起動したらそのまま認証してゲームのAPIを叩けるじゃないですか。
ああいうのって実際どう実現するんだろって思いながらOAuth2とかMobage SDKの認証とかアレコレ調べてたら疲れました。
認証用のサーバをAPIサーバと別に用意して3-leggedな感じでやるか、APIと認証機能を持つサーバをひとまとめにして適宜access token発行するかみたいな感じですかね。

取り敢えずの実現はRails&doorkeeperとUnity&WWW (あるいはUniRxのObservableWWW) あたりでイケそう?

ユーキさん

まあ↑もあるんですが、基本的には今日はライフロギング2巻が届いてずっと読んでました。

ユーキさん!  トナリのセカイはホントにアルノですか? ゆきねライフロギング! 2 (桜ノ杜ぶんこ)

ユーキさん! トナリのセカイはホントにアルノですか? ゆきねライフロギング! 2 (桜ノ杜ぶんこ)

サージュコンチェルトの前日譚とも言える話で、この話からシェルノサージュ、アルノサージュへと続く時系列なのですが個人的には大変満足。
結城寧さんと仲間たちのお話と、夢に向かう人々の眩しさと少しばかりの妬ましさと、ある人を救いたくて奔放する彼と彼のお話です。
アンケートに答えると全てを終えた後のお話が読めるようになるんですが、シェルノアルノをプレイした所謂"端末さん"視点だとこちらの方が響くかもしれません。
全体的にとても良いものだったので、ファンの方は是非手にとって読んでみましょう。きっと、もう一度彼女と会いたくなるはず。