怖話でネストしたリソースのクラス名がぶつかってしまうので、どうつけるかで悩んでいます。

ぶつかるページ

  1. story 1個づつに紐づくcomments(怖い話1のコメント一覧)
  2. なんらかのstoryに紐づくcomments(怖い話のコメント一覧)

story(怖い話)以外にもcomic(ホラー漫画)とかurban_legend(都市伝説)とかあり、それぞれにもcommentがつく。

# config/routes.rb
Rails.application.routes.draw do
  namespace :stories do
    resources :comments, only: :index
  end

  resources :stories, only: :index do
    resources :comments, only: :index, controller: 'stories/comments'
  end
end
% rake routes        
        Prefix Verb URI Pattern                        Controller#Action
stories_comments GET  /stories/comments          stories/comments#index
 story_comments GET  /stories/:post_id/comments stories/comments#index
         posts GET  /stories                   stories#index

URLの意味的にどちらも上記のようにしたいが、commentsコントローラーが被ってしまう。

これを避けてnamespace無しのcommentsコントローラーを使うと今度はcomicのcommentなどとかぶってしまう。

それを避けるにはAllCommentsとかCommentsByStoryなどといったダサい名前しか思いつかない。まいったなあ。

主にアメトーーク!を録画するのに使っているnasneが容量一杯なので外付けHDDを買いました。

I-O DATA USB 3.0/2.0接続【家電対応】外付ハードディスク 4.0TB HDC-LA4.0

しかしnasne、FAT32しか対応してませんでした。メーカー独自拡張とか以外2TBまでしか対応してない。クソがぁ…。

4.0TBの方はPCで使うことにして2TBの別のを買いました。

WD HDD ポータブル ハードディスク 2TB USB3.0 TV録画対応 Elements Portable WDBU6Y0020BBK-JESN / 3年保証

こっちはいけました。ただ注意するのはFAT32でもGPTではなくMBRでフォーマットしないといけないこと。ちょっとハマっちゃいました。くそがぁ…。

最近やっちゃった買い物が多いのでスペックは注意して買って行きたい。

ということで話早えぇ@sotarokさんにApple Watch売ってもらいました。

新しいバンドも届きました。

本当はスキューバブルーのバンドを買ったんだけど間違えて42mmの方を買ってしまったので@machida さんにプレゼントということにして買い直しました…。やっちゃったな…。

今のところやはり時計が一番のキラーアプリなのでAndroid Wareと変わりませんな。

RailsGuidesにちゃんと書いてありますが、ちょっとハマりました。

こういうのはダメ。

Rails.application.routes.draw do
  constraints subdomain: :api do
    scope module: :api do
      namespace :v1, format: :json do
        resources :posts
      end
    end
  end
end

ちゃんと文字列にする。

Rails.application.routes.draw do
  constraints subdomain: 'api' do
    scope module: 'api' do
      namespace 'v1', format: 'json' do
        resources :posts
      end
    end
  end
end

3.9 リクエスト内容に応じて制限を加える

リクエストベースの制限は、Requestオブジェクトに対してあるメソッドを呼び出すことで実行されます。メソッド呼び出し時にハッシュキーと同じ名前をメソッドに渡し、返された値をハッシュ値と比較します。従って、制限された値は、対応するRequestオブジェクトメソッドが返す型と一致する必要があります。たとえば、constraints: { subdomain: 'api' }という制限はapiサブドメインに期待どおりマッチしますが、constraints: { subdomain: :api }のようにシンボルを使用した場合はapiサブドメインに一致しません。request.subdomainが返す'api'は文字列型であるためです。

ドメインやPATHなど、文字列っぽいものは文字列で指定すべきと考えておけば良さそうです。

Nexus PlayerからApple TVに乗り換えました。

理由は最近iPhoneに乗り換えてすこぶる快適なので合わせたかったのと、Nexus PlayerのGoogle MusicアプリはGoogle Musicの音楽聴き放題に入っていてもその機能が使えないのに対して、Apple TVならばApple Musicの聴き放題をそのまま使えるからです。

結果、対して変わらないっすね。主な用途がHulu、Netflix、Youtubeなのでどっちでも変わらんです。どちらもアプリ少ないし。(現時点ではAndroid TVの方が多い)

唯一気になったのは、僕は時々Google Play Storeで映画を借りていたんですが、Google Play Storeの映画のプレビューってのは本当のプレビューで、最初の数分をそのまま見れる形になっています。

これ、海外ドラマじゃなく映画なので最初5分なんてスゲー退屈なんですよね。インターステラーをみたいと思ったんですが、最初の5分見せられてもさっぱりでした。

それに対してiTune Storeはプレビューがそれ用の予告編ムービーになっています。予告編ムービーは「おもしろいぞー」って感じでこれでもかと煽ってくるので非常にみたくなります。インターステラーはなかったけど、ゼロ・グラビティの予告編みたら、これ見てぇ!ってなりました。

最初の5分プレビューは無いほうがいいですね。

Nexus Playerのゲームパッドは誰も使ってない可能性が巨レ存・・・? - komagataのブログ

何の話かというと、

  • Aの学習にはBの学習が必須
  • Bの学習はAの経験がないとまったくピンとこない

という問題があって困るってことです。

まあ学校の数学の授業みたいにとにかくBは黙って覚えろ話はそれからだスタイルで行けばいいんですけど、僕自身がそういう学習辛かったなーと思うので何とかしたい。

具体的に弊社のインターンシップのカリキュラムで言うと、

  • railsアプリ作成の学習(has_many :throughtを使うところ)にはRDB設計の学習(正規化や多対多の関連)が必須。
  • RDB設計の学習アプリ作成の経験ないとまったくピンとこない

という問題が起きております。

まずrailsで簡単なhas_many :throughtを使わないアプリ作成を経験し、その後RDB設計の学習をして、戻ってきてhas_many :throught有りのアプリ作成をするというのがいいのかなぁ。

カリキュラムの順番的に行ったり来たりするのは嫌だなぁ。

Kindle Voyage買った。

結果、Paperwhiteの新しいやつでよかったなと思います…。

初代のPaperwhite持ってますが、確かにDPIと速度上がってるんだけど思ったほどではなかった。

ただ、Kindle自体は相変わらず良い。

この意味で(複数でない・一つのもの)シンプルだなーと思ったもの。

偽のシンプル、正しいシンプル - komagataのブログ

芯なしロールのトイレットペーパー

https://gyazo.com/f69ca2f3cb9bcfcd08cf7668fa02d65d

芯とペーパーだったのがペーパーだけになってる。

強度の問題とかで多分芯ありの方がeasyなんだろうけど頑張ってシンプルにしてる。すごい。

iPhoneのTouch ID

https://gyazo.com/0e46f8508f6eab3e16994e2cb52462cc

電源を付ける、認証するの2アクション必要だったのがホームボタンを押す1アクションで両方いけるようになってる。

Nexus6では右のボタンで電源オン、その後ジェスチャー入力だったのが左手だけ1アクションでいけるようになった。

多分ホームボタンと指紋認証は別パーツの方がeasyなんだろうけど頑張ってシンプルにしてる。すごい。

Review.appでの無限ステージング環境をクッソwww快適に使わせて頂いてるんですが、メール内のhost名設定で困ってたら @t-kawa さん、@chiastolite さんが教えてくれました。

あざーす!

% heroku config:get HEROKU_APP_NAME -a kulku-pr-173
kulku-pr-173

取れるじゃな〜い。

staging環境用にconfig/environments/staging.rbをこんな感じにしてみました。

require File.join(__dir__, 'production')

Rails.application.configure do
  config.action_mailer.default_url_options = { host: "#{ENV['HEROKU_APP_NAME']}.herokuapp.com" }
end

これで無限ステージング環境でメールもばっちり。

Rebuild.fmでしって@jishihaさんもやってみたら良かったと聞いたのでReact.js Introduction For People Who Know Just Enough jQuery To Get By · React for Designersをやってみた。

やっぱりサーバーサイドみたいに何も考えずrenderできるのはいいですね。この機能は欲しいんだけどrailsと馴染む感じの連携方法がわからん・・・。

ここ2年ぐらいJSの進化についていくのをずっとさぼってて、最近の半年でその流れを順番に入門していって追体験してる感じです。(今やっとReact.jsに入門の地点)

やっぱり実際に触ってみないとわからない部分多かったなーと思いました。

理想:2-wayバインディングが便利だろう。

現実:あんまりうれしくない。Model -> Viewの1-wayだけでいいよ。

とか、

理想:Web componentが未来。

現実:Polymerクッソ使い辛い。

とか、

理想:componentに分ければ複雑なアプリも解決。

現実:component間連携が死ぬ。

とか、

理想:サーバー側はREST APIだけあればいい。

現実:クライアント側はそんな単純じゃない。パフォーマンスが死ぬ。

とか。

全部に時間を使うことはできないので取捨選択は必要ですが、この、使わないと勘所をかなり外してしまう感は肝に銘じていきたい。