画面の拡大・縮小

クラムシェルモードででーっかい42inchディスプレイwで仕事する時に必要なショートカット。 (文字が小さすぎて見にくい。Nekoteniは目があんまりよくない)

ブラウザ(Chrome)、ターミナル

  • 拡大 : ⌘ + +(プラス)(shift + ; セミコロン )
  • 縮小 : ⌘ + ー(マイナス)

Mvim

  • 拡大 : ⌘ + =(イコール) (shiht + - マイナス)
  • 縮小 : ⌘ + ー(マイナス)

勝手な所感

  • 説明を受けて納得しやすいのは⌘に+、-。
  • Mvimのショートカットは、操作感優先(同じキーをshift使うか使わないかだけ)。
  • テンキーがあるキーボードを使ってる人には⌘に+、-の方が楽w

盛大に勘違いしていたこと

@items = Item.all っていうインスタンス変数をコントローラに設定してあったとして。

Nekoteniはね・・・@items は @itemの集合体だと思ってたんだよ・・・。

わかってる人には「は?」だよね。 「何言ってんの?お前?」だよね。

つまりね、こういうこと。

<% @items.each do |item| %>
  <%= link_to item.name, item %>
<% end %>

これのね、|item|にね、@itemsをばらした@itemが入ってると思ってたのw

@itemsっていうコンテナの中にいっぱい@itemが詰まってるっていうイメージね。

なんでこんな盛大な勘違いしたかっていうと、自分が調べた情報を自分に都合よく解釈してコンボ技に発展させたから。

前提:Railsガイドに書いてあった一部分のみ覚えていた。

1冊の雑誌にだけリンクしたいのであれば、以下のように書きます。
<%= link_to 'Magazine details', @magazine %>

Rails のルーティング | Rails ガイド

Nekoteniはlink_toのパスへの理解にあやふやなところがあって、何で.each doした時のlink_toのパスがitemだけになるのかわからなかった。

 ↓

そういやRailsガイドに「1冊の雑誌にだけリンクしたいのであれば...」ってあったなぁ。

 ↓

@itemsと@magazineを見比べ。

 ↓

あ!@items.each doしたら|item|には@itemが入るのか〜\(^o^)/ (👈@itemsは@itemの集合体だと勘違いした瞬間w)

Railsガイドにはちゃんと書いてあるわけですよ。 コントローラに@magazine = Magazine.find(17)って設定したら、っていう前提が。 でもそこはもう忘れてるわけ(笑)

自分の知ってることを、何とか目の前の事象と結びつけて理解しようとするのは、人間の性らしいので責められるものではない。 けど、それが勘違いというものの原因でもあるので、理解したつもりになってるものへの再学習をしないとな、とNekoteniは思ったのでした。

もとい、何で <%= link_to item.name title %> のpathが titleだけでいいのかというと、Railsがよしなにやってくれてる、という一言に尽きるらしい。

@items = Item.all で、@itemsにはItemのインスタンスがたくさん入ってるっていう理解はしてた。

そのインスタンスの中には当然idがあって、Railsさんが「あ、これはItemクラスのインスタンスだね。あ、idもあるね。んじゃパスを自動で作ってあげるよ」ってよしなにやってくれてるらしいw

大まかな理解としては、 <%= link_to item.name, item_path(item) %> の省略形って感じでいいみたい。

@itemsも@itemもインスタンスを入れるための単なる器であって、コントローラに設定されてないとviewでは使えないんだよー!ということを、改めて理解したのでした。ちゃんちゃん。

user_idをnilから1にする

また忘れたので書いておく。゚(゚´ω`゚)゚。

最初の状態

irb(main):006:0* @play = Play.first
  Play Load (0.3ms)  SELECT  "plays".* FROM "plays" ORDER BY "plays"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<Play id: 1, title: "もももショー", description: "もももによるももものためのショー", director: "ももも", created_at: "2017-12-25 09:26:28", updated_at: "2017-12-25 09:26:28", user_id: nil>

@playのuser_idに1を入れる

irb(main):007:0> @play.user_id = 1
=> 1

@playのuser_idに1が入る

irb(main):008:0> @play
=> #<Play id: 1, title: "もももショー", description: "もももによるももものためのショー", director: "ももも", created_at: "2017-12-25 09:26:28", updated_at: "2017-12-25 09:26:28", user_id: 1>

が、Playテーブルには反映していないので、

irb(main):009:0> Play.first
  Play Load (0.1ms)  SELECT  "plays".* FROM "plays" ORDER BY "plays"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<Play id: 1, title: "もももショー", description: "もももによるももものためのショー", director: "ももも", created_at: "2017-12-25 09:26:28", updated_at: "2017-12-25 09:26:28", user_id: nil>

というわけで、.saveでテーブルに反映

irb(main):010:0> @play.save
   (0.1ms)  begin transaction
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  SQL (0.4ms)  UPDATE "plays" SET "updated_at" = ?, "user_id" = ? WHERE "plays"."id" = ?  [["updated_at", "2017-12-26 04:52:08.958645"], ["user_id", 1], ["id", 1]]
   (0.8ms)  commit transaction
=> true

おめでとう!テーブルにもuser_id = 1が反映したよ!

irb(main):011:0> Play.first
  Play Load (0.2ms)  SELECT  "plays".* FROM "plays" ORDER BY "plays"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<Play id: 1, title: "もももショー", description: "もももによるももものためのショー", director: "ももも", created_at: "2017-12-25 09:26:28", updated_at: "2017-12-26 04:52:08", user_id: 1>

デスヨ!覚えとけよ!自分!! 初歩も初歩すぎてまじで泣ける。

得難いもの

2017年は、Railsコーチングのお仕事をさせて頂いた初めての年になりました

Rails Girls高崎で人生初のコーチングを経験!

 ↓

この経験が毎週木曜4時間の3ヶ月に渡るコーチングの仕事を得るきっかけとなった。

 ↓

今日、3ヶ月と2週(延長分)のコーチングが終了。

 ↓

目の前の山を登りきったな、という感がすごい。

コーチングをしてみてわかったこと

  • 予習
    • コーチ側にこそ必要。
    • 生徒側には必要ない(つーかしないほうがいい)。
  • 復習
    • コーチ側に必要。
    • 生徒には必要ないかもしれない。
  • フィードバック
    • コーチ、生徒共に必要。

結論としては、「教える側こそ予習も復習も必要」ということ。

今回のコーチングは1 on 1だったので、生徒さんの特性も織り込みながらのコーチング。つまり、オートクチュールです。

何をどう教えるか(予習)、もっといい教え方はなかったか(復習)、教えた内容への生徒さんの反応はどうだったか(フィードバック)、それをしっかりじっくり見ていく。

仕事としてカウントされる時間以外の時間をしっかり取らないと、大変無様なことになるのでそれはそれは頑張って予習・復習をしました。

そして、回を重ねるごとに変わっていっている部分を見つけ、生徒さんに伝えていくフィードバックはとても大事。

やったことで何かが変わる、それが人間のやる気の源ですから。

できうる限り楽しく、できうる限りイメージを描ける説明で。

何でもそうですが、始まりは楽しくないと続かない。

楽しさや面白さを感じることができたからこそ、その先にある厳しさを受け入れることができるようになると私は信じています。

教えること = 情報の共有(シェア)

コーチングをしていて気が付いたのは、『教える』というのは生徒に一方的に説明することではなく、自分の中にある情報(=知識、経験)を生徒と共有するということなんだということでした。

イメージとしてはジェスチャーゲームのようなもの。

自分の中にあるRailsの知識・経験を相手が「あ!そういうことか!」って腑に落ちるまで身振り手振りで何度でも繰り返し伝えていく。

上から目線で情報を流すのではなく、同じ立場で自分が持っている情報を共有すること。

例えを使い、絵を描き、生徒さんが抱いたイメージを語ってもらい、自分の中にあるものと生徒さんの中にあるものを擦り合わせていく行為なんだなと、最初の数回が終わった頃に痛感しました。

私はまだ初級者の頃の痛みを覚えている

初級をようやく抜け出し始めた身だというのが、今回のコーチングには生きました。

  • 「わからない」ということがどれほど不安で苦痛であるか。
  • 初級者ほど細かいところを疑問に思いがちなのだけれど、上級者にその細かいところを「まだいい」とか「あとでわかる」とか言われて流されてしまうじれったさ。
  • 上級者に質問をしてもなかなか欲しい答えが返ってこないもどかしさ。
  • そもそも、どう質問をしたら上級者に自分のわからない部分を伝えることができるかがわからない情けなさ。

私はこれをまだ、バーチャルな痛みを胸に感じるほど覚えています。

プログラミングの世界(というかエンジニアの世界)というのは、パンピーからすると暗黙の了解が多く、抽象的で、専門用語に溢れている世界です。

そういう新しい世界に慣れつつ、かつ新しい知識を得て行くというのは、本当に大変なことだと思うのです。

それでも、恐らくは胸の痛みは薄れて行っているのでしょう。

いつか私も「いや、それを覚えてないのはまずいんじゃない?」とか苦笑しながら言ってしまうのかもしれない。

願わくばあのツラみを10分の1でも覚えておけますように。

devise使ってて役に立ったサイト

rubygems.orgに紐づいてるのはこのリポジトリgithub.com

このリポジトリのread.meにはdeviseの説明が丁寧に書いてある。 github.com

特に、

in the create action ,
change
@post = Post.new(post_params)
to
@post = current_user.posts.build(post_params)

ここがありがたかった。

Rails Zombieは準備運動として使う

railsforzombies.org

Rails Zombieを準備運動に使っている。 「Resume Challenges」ボタンを押して、Level1~5の問題をコードを書く前にざーっと流す感じで全問やっておく。 Hintも見まくる。とにかく流す。

これをコード書く前にやる。 まぁ、そのうち答えを覚えてくるので、Hint見なくても書けるようになるんだけどねw

何Point取ったとか、この際どうでもいい(とNekoteniは思っている)。

Railsのメソッドは、数学の公式に似てる。 初級者のうちに使うメソッドは、当てはめればなんとかなるものが多い。

中・上級者からしたら「そんなの息をするようなもの」くらいの「当たり前すぎる」メソッドで初級者はひっかかり、悩み、Google先生に走る。 が、初級者がひっかかる「当たり前すぎる」内容って、当たり前すぎてインターネットでは検索にひっかかってこないことが多い。 そんな初級者の姿を見て、中・上級者はイライラするのだ。「何やってんだ?!」って。

ここに初級者と中・上級者の間に深い溝があるような気がする。

カナヅチの使い方を覚え始めて「どうやって使うんだっけ、何と一緒に使うんだっけ」ってモニョってる初級者に「あいつ、カナヅチ持ったまま突っ立って何してんだ?釘も持たないで。『早く作れよそれ!』」ってイライラする中・上級者。 半泣きになる初級者。

どっちの気持ちもわかる。 だから使えて当たり前のものを集めたもの、しかも簡単なものをドリルとして最初にやっておくといい。 簡単なものは複雑なものの最小単位だ。考える足がかりになる。

そういう意味で、私はRails Zombieを準備運動として使っている。

8 Beautiful Rails Apps の各章の概要をメモっておく

8 beautiful rails apps の各章の概要をメモっておく。

www.udemy.com

FileCabinet

Tumblr

Instagram

  • Instagramのようなもの
  • 機能
    • ログインしない:画像・記事を読むこと、いいねボタンを押すことができる
    • ログインする:画像・記事を投稿することができる
  • gems

    • gem 'haml', '~> 5.0', '>= 5.0.4'
    • gem 'simple_form', '~> 3.5'
    • gem 'bootstrap-sass', '~> 3.3', '>= 3.3.7'
      • $ rails g paperclip Play play_img migration file作る時に使うコマンド
      • gem 'devise', '~> 4.3'
      • gem "paperclip", "~> 5.0.0"
      • gem 'masonry-rails', '~> 0.2.4' (jquery用のgem)
      • gem 'acts_as_votable', '~> 0.11.1'
  • GitHub - NEKOTENI/instagram: 8 beautiful rails apps by udemy

Hiptime

ESPN

  • ESPN Forumのようなもの(トピックに対してコメントを入れ、そのコメント内でディスカッションができる)
  • 機能
    • ログインしない:トピックとコメントが閲覧できる。
    • ログインする:トピックとコメントの登録・編集・削除ができる。
  • gems
    • gem 'simple_form', '~> 3.5'
    • gem 'bootstrap-sass', '~> 3.3.7'
    • gem 'devise', '~> 4.3'
  • GitHub - NEKOTENI/espn: 5th apps of 8 beautiful rails apps

Broadway

  • Broadway.comみたいなサイト -機能
    • ログインする:Play(演目)の登録・編集・削除ができる。
    • ログインしない:登録されている演目を閲覧できる。
  • gems
    • gem 'bootstrap-sass', '~> 3.3', '>= 3.3.7'
    • gem 'simple_form', '~> 3.5'
    • gem 'devise', '~> 4.3'
    • gem 'paperclip', '~> 5.1'
      • $ rails g paperclip Play play_img (paperclipのmigration fileを作る時のコマンド)
      • create db/migrate/20171227090441_add_attachment_play_img_to_plays.rb を作ってくれる。