SakuraWi - BLog

みんなのウェディングの新米エンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

7月も終わりが目の前に

毎日コードを書いているわけですが、いろんな環境を扱うことが難しいなと感じております。 production環境のエラーはなかなか対処が難しい!!

今日はユーザ認証のMailerあたりの実装をして、なんとか動くようになりました。やったぜ。

かなり基礎的な内容を実装するという感じで進めていて、 ちょっと新しいことに挑戦できていない気味かな?という感じ。

Rspecを用いたテストも並行して書いているのですが、どこをテストするのか、などなどがまだ全然ですね。 経験によってどんどんカバーさせる予定。

水飲みまくり生活

結局水が最強 500mlのやわらない入れ物に入ったガイザー以上のものはない。

プレゼン用メモ

なかなかこれは発表に使えそうですね。 keynoteなどにシンタックスハイライトしたコードを貼り付ける方法

シンタックスハイライトしたコードをスライドに貼り付ける - taku_okaのブログ

尊敬する人の新しい門出

7月21日の金曜日に、僕の尊敬している瀬津勇人さんがニフティ株式会社をご退職されるとのことでパーティが
東京カルチャーカルチャーにて行われ、参加してきました!!!

瀬津さんから招待されたこともあって、退職パーティに参加してきました。

集まった人は120人以上で、退職にあたってこんなにもたくさんの人が集まってくれる人望がすごい、と思いました。

自分もこうなりたいとまたまたおもうきっかけになりました!

最後の挨拶をきいていて、会社に雰囲気やブランドを生み出すことってものすごく大切で、
きっとものすごく難しいものなのだと思います。
そんな中心に立って、文化を作ってこられた経験をされてきている方はそうそういらっしゃらないと思うので
吸収しよう!と考えております。

これまでにもたくさんの偉業を成し遂げてこられた方だと思いますが、今後もお付き合いさせていただこうと思っております!

土日

土曜日と日曜日は、友人と伊豆半島へ旅行(?)に行き、疲れて帰ってきましたw

大学時代からずっと仲良くしていたグループで、4年間ずっといろんな場所で遊びに行ったメンバーで、
タイに旅行にいったり、島根や諏訪湖、富士山登頂、ヒスイ海岸などなどいろんなところへ行ったメンバーです。

そんな友人たちと社会人になってひさびさに集合。 みんなまぁ、3ヶ月なんでほぼそのままでした。

バカできるメンバーってよいですね。

なんだか毎週熱海とか伊豆系にいっているぞ・・・笑

カーズ3

みてきました。 感動ですね。 みてくださいな。

掴んだ栄光と、その先にどんな決断が待っているのか。 結構テーマは深い内容だと思います、ちっちゃい子がみても大丈夫なのか?

nikonのCM?

映画館でみたnikonのCM作品?がなかなかによかったです。 youtubeで探したけど見当たらない。

ヒットな予感

化物語の監督の人の新作らしい。

いうて全部みていないけどw

映画『打ち上げ花火、下から見るか?横から見るか?』

ポケモンGOと過ごしたアツい夏

ポケモンGOのリリース日は、2016年7月22日です。
そうです、明後日一周年記念なのです。

ということで、ポケモンGOの思い出話を書きます。

あの衝撃を忘れはしません。
社会現象となったスマホゲームといっても過言ではないでしょう。

当時、大学生だった自分は、Twitterにてリリースを知り、すぐさまダウンロード。

なにができるかもわからなかったため、起動したまま自転車にのって、近所を少し回り始めました。
すると、ポッポ、イーブイを捕まえることができました。

っだこれ、やべえ

と思ったのを覚えてます。

ポケストップを回した時の快感。

少し遠出してピジョンと遭遇した興奮。

そのまま学校へ行く途中に出会ったカイロス。
ボールがぐらぐらする部分でフリーズしてしまい、ゲットにならなかったバグ。

興奮は冷めることはありませんでした。

そのまま、立命館が大学へ向かいました。
そこには、無数のポケモントレーナーたちがいました。
スマホ片手に学内を歩き回る生徒たち。

僕は感じました、

っっべえな!!

BKC(立命館大学の滋賀のキャンパス)は洞窟扱いなのか、ゴルバッドの巣窟でした。
リリース3時間ほど、ズバットばかりでるBKCではすぐにゴルバッドに進化させることができて、
「オレのゴルバッドCP350あるでw」

ポッポのCP30とかを持っていた自分は思いました。

っっべえ、つええな!

それから、友人たちと合流しました。
「どんだけやった!?何捕まえた!?」

何もネットにも情報が出回っていない状態での、手探りでやるゲームの感覚でした。

それから出会った人数人で、学内をひたすらに歩き回りました。二時間ほど歩き回ったと思います。

やはり、興奮は覚めませんでした。

車の免許を手にしていた自分は、それから5日間は車を運転しまくって、各地へポケモンを入手しに行きました。

ポケモンの巣の情報がまだない時代、車に友人をのせ、スマホを渡してゲットを任せて
ひたすらに車を走らせました。
たまごの孵化と、ポケモンを探すためです。

公園につくと、そこにはやはり無数のトレーナーたちがいました。
2時間ずつ公園を回ったりしながら、時に飯を食べ、時にカブトをみつけて大歓声をあげ、
カモネギのためにUターンをし、ミニリュウに夢を感じ・・・。

気がつくと、ネットにポケモンの巣の情報とカイリューが最強であるということが判明していました。

京都府、円町公園(だったはず)

そこに、いる。

夜通しでミニリュウを捕まえ続け、夜1時から朝の7時まで、ポケサーチとともに、数多くのトレーナーとともに走り続けました。

・・・カイリューが作れていました。

圧倒的な達成感とともに、車を走らせて帰ったのでした。

公園にはパトカーがきていて、無断駐車をしている車を追い払ったりもしていました。

f:id:Saku-Saku:20170721021735p:plain
7月26日の京都遠征の時のスクリーンショット。
花が舞い、人がごったがえす。まさに祭りでした。

リリース4日間で、レベル21に達していた人は、日本でも結構上位だったと思います。

f:id:Saku-Saku:20170721022025p:plain
今は亡き、ポケヴィジョン。

それから、東京へ就活でくる際には、友人宅に泊めてもらって、ひたすらポケモンGOでした。

不忍池、就活そっちのけで毎日夜中三時間。
ここもまた、ミニリュウの巣なのでした。
夜中にもかかわらず、不忍池には、道いっぱいの人がいました。
ミニリュウの出現を告げるポケサーチの通知がくると、人々は群をなして移動をしていました。

時に、ハクリューが出現しようものなら、500人ほどの人が走るのでした。

きわめつけは、ラプラスです。
お台場に遊びにいっていたときのことでした。

目の前を大学生3人がとんでもない速度で走り抜けて行きました。

なにかがいる。
そう感じました。

スマホをみると、そこにはラプラスの影がありました。

ラプラス

f:id:Saku-Saku:20170721022651j:plain
まじ病気。

サイドンを捕まえるために東大付近から20分歩いたりもしました。

f:id:Saku-Saku:20170721022311p:plain
カナダでケンタロス。

f:id:Saku-Saku:20170721022217p:plain
NYでもやりました。

ポケモンGO plusも早朝から2時間並んで買ったりしました。

だいたい、10月とかもう少しまでやっていたと思います。
最終的には、日本国内でカイリキー以外を捕まえて残り1匹までやりこんでいました。

今のデータ
f:id:Saku-Saku:20170721023205p:plain 開始日がちゃんと刻まれています。

f:id:Saku-Saku:20170721023159p:plain

350kmほどは移動していたようです。

シカゴでイベントがあるそうです。
当時の自分だったら、行ってたなw

f.hidden_fieldとhidden_field_tagの使い方【Ruby on Rails】

form_forタグの中でパラメータを入力させないまま値を受け渡したい時に使用するものとして

hidden_fieldhidden_field_tagがあります。

使い方が少し注意が必要であるため、使用方法をまとめました。

使い方

おおまかな違いは、 form_forの内部で使用するか、単体で使用するか、という使い方にありそうです。

form_forで渡すインスタンスがある場合は、f.hidden_fieldを使います。 一個だけ単体で渡したい時は、hidden_field_tagを使います。

hidden_field_tag

hidden_field_tagの方が使用方法はシンプルに見えます。

<%= hidden_field_tag :email, @user.email %>

公式ドキュメントの例はこちら。

hidden_field_tag 'tags_list'
# => <input id="tags_list" name="tags_list" type="hidden" />

hidden_field_tag 'token', 'VUBJKB23UIVI1UU1VOBVI@'
# => <input id="token" name="token" type="hidden" value="VUBJKB23UIVI1UU1VOBVI@" />

hidden_field_tag 'collected_input', '', onchange: "alert('Input collected!')"
# => <input id="collected_input" name="collected_input" onchange="alert('Input collected!')"
#    type="hidden" value="" />

valueという記述が省略することができるため、シンプルに見えますね。 HTMLとしての出力も書かれているので非常にわかりやすいです。

hidden_field_tag どのシンボルに、どの値を渡すか、という記述ですね。

注意点

以下のコードはRails tutorialの10章より抜粋

<%= form_for(@user, url: password_reset_path(params[:id])) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= hidden_field_tag :email, @user.email %>

      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>

      <%= f.submit "Update password", class: "btn btn-primary" %>

このように<%= hidden_field_tag :email, @user.email %>では、
params[:email]に保存されます。

hidden_field

haml形式の記述になります。 以下のように、第一引数にオブジェクト名、第二引数部分にvalueとして受けわたす必要があります。

= f.hidden_field :shampoo_id, :value => shampoo.id

公式ドキュメントによると、

hidden_field(:signup, :pass_confirm)
# => <input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />

hidden_field(:post, :tag_list)
# => <input type="hidden" id="post_tag_list" name="post[tag_list]" value="#{@post.tag_list}" />

hidden_field(:user, :token)
# => <input type="hidden" id="user_token" name="user[token]" value="#{@user.token}" />

となっています。 form_forの部分で@userなどといったインスタンスを渡しているので、そのインスタンスの属性と値を指定してあげます。

そのため、valueを直接指定してあげるとうまく動作します。

こっちの方がスマートな記述に見えますね。

= f.hidden_field :shampoo_id, value: shampoo.id

f.hidden_field その属性か、値は何か、という書き方ですね。

注意点

こちらの記述だと、paramsで引用する際には
params[:user][:email]に保存されます。

理由は、@userの、email属性に、valueで渡した値を格納しているからですね。

Userのモデルのnameカラムや、emailカラム、それぞれに受け渡したい場合は、こちらを利用する必要があります。

公式ドキュメント

詳しい内容は公式ドキュメントを参照しましょう。
Ruby on Rails API

qiitaの記事も参考にしました。
Ruby on Rails - hidden_fieldの使い方 - Qiita

歯が痛い気がするという

なんだか歯が痛いような、そうでないような・・・という感覚ってありますよね。 なうです。

いや多分痛くないんだ、大丈夫だ、そういうことなんか今までだって何度もあったじゃないか。

どうも最近体調が優れませんな。 きちんと寝ましょう。

bitcoin

どうも、8月1日に大きな動きがあるようで。 分裂って呼ばれているみたいですね。

ぶっちゃけさらっと読んだだけではまったくわかりません。

ともあれ、ブロックチェーンの根幹のシステムの部分で変化がちょいあるって感じなのでしょうか・・・。

技術的な変革に、賛成と反対があってそれに応じて対応もかわるってな理解です。 薄いです。笑

【技術ブログ】2017/8/1にビットコインに何が起こるのか?BIP-148の意図していることについて | coincheck(コインチェック)

conpass 第六回スタートアップRails勉強会に参加してきました。

友人とともにRails勉強会に参加してきました。

参加者のみなさんや、発表内容はこんな以下のurlを参照してくださいな。
第6回スタートアップRails勉強会 - connpass

続きを読む

update_attributesとupdate_columnsの違い【Ruby on Rails】

Ruby on RailsのTutorialで使用されている、update_columns
そして似たような処理に見える update_attributesがあります。

この二つの違いについて調べてみたことをまとめます。

検索するとqiitaの以下の記事がでてきますね。
どうもこちらの記事によるとバリデーションやコールバックの違いがあるようです。
ActiveRecord の attribute 更新方法まとめ - Qiita

しかし!
最近よく言われますが、公式ドキュメントを参照するのが一番です。
なに?英語が読めない?
読めるようになればいいだけです。 そして読めるようになるには、読む練習が必要です。(自分に言い聞かせる)

ということでこちらも目を通しましょう。

ActiveRecord::Persistence

公式ドキュメント

update_attribute(name, value)

  • Validation is skipped.
  • Callbacks are invoked.
  • updated_at/updated_on column is updated if that column is available.
  • Updates all the attributes that are dirty in this object.

これは,

  • ヴァリデーションはされません
  • コールバックは呼ばれます
  • updated_atか_onのカラムが利用可能であれば更新されます
  • dirty,検知が可能である(変更があったかどうかがわかる) という風に書いていますね。

太字の二つは他のメソッドと異なる場合が多いので注目ですね。

update_attributes(attributes) / update(attributes)

こちらは上記のsがないバージョンですね。
updateは、エイリアスでupdate_attiributeと同様の処理となります。
動きが結構違うのでしっかりと見ておきましょう。

  • ヴァリデーションが適用される
  • コールバックが呼ばれる

ここがポイントです。
また、複数のカラムを同時に更新できるため、タイミングを同じタイミングで更新したいカラムがある場合にはこちらを使用します。

update_columns(attributes)

最後に、update_columnsです。 Rails Tutorialででてきましたね。

公式ドキュメントによると、

-validations are skipped. -Callbacks are skipped. -updated_at/updated_on are not updated. -However, attributes are serialized with the same rules as ActiveRecord::Relation#update_all

とのことです。

  • ヴァリデーションは適用されない
  • コールバックは呼ばれない
  • 更新の履歴は updated_atなどに残らない(更新されない)
  • update_allと同様にシリアライズされる

4つ目については、update_allの箇所で以下のように示されています。

However, values passed to update_all will still go through Active Record’s normal type casting and serialization.

キャストとシリアライズが行われる、となっていますね。 シリアライズというのは、配列のままDBに保存する時などに行われる変換のようです。

使用例

以下の2行の書き換え例ですね。 Tutorialでは、columnsを使っていました。

 update_attribute(:activated, true)
 update_attribute(:activated_at, Time.zone.now)
update_columns(activated: true, activated_at: Time.zone.now)
update_attributes(activated: true, activated_at: Time.zone.now )

まとめ

基本的にはvalidationとcallbackが行われる、
update_attributesを使用しましょう!

参考記事、URL

Rails Tutorial 11章,12章

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう