Rubyのextendとincludeの違い
まず特異メソッドとは
特異メソッドとは特定のオブジェクトにメソッドを差し込めるというもの。つまり、オブジェクトに依存するということだな。
レシーバ.(ドット)メソッド
という形式でしか使用することができないメソッド。うん、オブジェクトにかなり依存した形式ということか。
a = [1, 2, 3] b = [4, 5, 6] def a.put_number a.each { |num| puts num } end
これはaの配列に対しては使えるメソッドだけれども、bには使えない。これが特異メソッド。
Rubyのincludeとextendの整理
includeはrubyのクラスに機能を追加するのに対して、extendはオブジェクトに対して、機能を追加する。
つまり、Object.new
したものに個別に機能を追加するイメージなのかな。
つまり、レシーバに対して、機能を追加しているということだな。
class Weapon extend Gun end #これはこれと同じ class Weapon self.extend Gun end #extendのレシーバのWeaponクラスに対して、機能を追加している。
ここで特徴的なのはself
というクラスメソッドの形式で追加されているということ。つまり差し込んだメソッドは全て、クラスメソッドになって差し込まれている。extendは差し込まれた先の特異メソッドになっている。今回はclassの得意メソッドなので、入れられたモジュールはWeaponにドットをつけた形式でしか適用することができない。あくまでもレシーバの特異メソッドとして、入れられるので、extendを使うといつでもクラスメソッドと覚えてしまうと痛い目に合いそうな気がしなくもない。よく似たものにpretendというものがあるけどこれは継承関係の中で、差し込んだものが差し込まれたやつよりも上に来るというもの。場合によってはオーバーライドされることがあるということだ。
備忘録(extend)
ちなみにextendしたモジュールの特異メソッドは呼び出し先では使うことができない。だって、特定のレシーバにドットをつけないと使用できないのだから、呼び出し先では違うレシーバで呼ばれているもんね。
90s生まれの邦楽アーティストたち
こんにちは。 いつもプログラミングの話題ばかりなので、たまには僕の趣味の音楽の記事でも書いてみようと思います。
僕自身は音楽は聴くだけで実際に弾いたりはしないのですが、割とオタク?ってぐらいに音楽を漁ってはコーディングの肴にしています。(僕の友人の会社では音楽聴きながらコードを書くのは禁止らしいです。地獄だ、、、、)
いつもは洋楽しか聞かない僕ですが、最近ものすごくセンスの良いバンドが出てきているのでその紹介をして見たいと思います!
Your Romance
まずはYOUR ROMANCEから! これは僕が邦楽に戻ってくるきっかけとなったアーティストです!(邦楽とはいっても歌詞は英語ですw) 80sテイストのPVにボーカルの低めの声から始まって、サビでは裏声をうまく使ったとても爽やかな曲です。
YOUR ROMANCEに似ている洋楽アーティストでSmith Westernsというグループがいるのですが、とっても雰囲気が似ていていい感じです!ボーカルはKaren Omoriという日系人のイケメンさんです!僕はいつもお酒飲むときに聞いています!
The fin.
こちらもハイパーおしゃれなアーティストです。 今の邦楽のセンスの良いアーティストたちってあえて80sのファッションや雰囲気を選んでいて、それを彼らなりの解釈で独自の世界観を作り出していますよね。
なぜ急にこれほどのセンス良いバンドが現れたのか(勝手に考察)
僕が今まで洋楽しか聞かなすぎたってのもあると思うのですが、こんな僕ですら存在を知って大ファンになるセンスの良いアーティストが生まれてきたのはインターネットの力と邦楽の低迷がポイントだったりするのではないかなと勝手に思っています。
まずインターネットの力ですが、ひと昔前の世代と僕らの世代の圧倒的な差は動画サービス(Youtube, Vimeo)が高校生時代に存在していたかが大きな違いだと思っています。僕は1993年の24歳の世代なのですが、僕らの高校2生の頃にちょうどIphone4が出てきて、そこからスマートフォンブームが訪れたように記憶しているのですが、スマートフォンの登場によって動画サービスが爆発的に普及して音楽が無料で見られるのが当たり前になっていったように思います。
そして、それと大きな関連があるのはIphoneが登場した当時は(今も変わらないかもしれないが)オリコンチャートがアイドルや『会いたくて、会いたくて苦しくなる』てきなアーティストが席巻していました。当時の僕はそれがどうしても受け入れられず、洋楽に走りどんどん時代を遡って音楽を聴いていってました。
スマホブームによって良質な音楽を探しやすくなった、かつ日本の邦楽の低迷から受動的でいては良質な音楽を聴けないという特殊な環境から今のセンスある若いアーティストは自分たちの求める音楽をインターネットに求めていった可能性はあるなと思いました。特に思春期の多感な時期に良質な音楽に出会っているとその後に与える影響は大きい?そんな気がします。
これからもしかしたらまた邦楽の全盛期と呼ばれる時代がやってくるかもしれないですね!!
気になっていたRailsの表現
array.map(&:method)
まずmapメソッドは配列に対してブロックを実行して、新しい配列を作るメソッドになります。
numbers = ["68", "65", "6C", "6C", "6F"] p numbers.map {|item| item.to_i(16) } => [104, 101, 108, 108, 111]
注: to_iメソッドで16進数に変換しています。
これを先の方法で書き換えてみると、
numbers = ["68", "65", "6C", "6C", "6F"] p numbers.map(&:to_i(16) ) => [104, 101, 108, 108, 111]
となります。短くかけていいですよね。 具体的に説明すると、まずこれはto_iというメソッドをシンボル型で渡しています。 単純に(to_i)みたいな形で書いてしまうと変数として扱われてしまうので、シンボル型で渡すことでメソッドとして扱われます。 さらに&と記述することでブロックとして展開されます。
map(&)
を見かけたら、 頭の中で
map{|x| }
に変換し、
:to_i
を見たら
map{ |x| x.to_i}
の中の.to_i部分を意味していると変換してみましょう。 頭の中で常に変換すると、英語を読むみたいにコード読めるようになる(はずです) ブロックはRailsでは必須のイディオムですが、map {|item| item.to_i(16) }の書き方は少々長くなってしまうので積極的に&:を使っていきたいですね。
ER図を描くためのツール~MySQL Workbench~
DBに新しいテーブルを追加して、アソシエーションなどの関係を考える際にER図を書いて、頭を整理しながら実装を進めていくと思いますが、今回はそのER図が簡単に書けるMySQL Workbenchというツール紹介します! ER図はExcelで書いている人も多いかと思いますが、 Excelで書く場合の短所として
- テーブルのカラムの詳細を書き込めない
- アソシエーションの関係がわかりづらい
- エンジニアちっくじゃない
などが挙げられますが、Workbenchは一度は見たことあるあの定番のER図を簡単に書くことができます。
DBの設計図どうしてますか?
今回、新しい機能追加にあたりテーブル追加の必要が出てきたのでいつものように紙に書きながら設計していたのですが少々複雑なので線が多すぎてごちゃごちゃになってしまい断念。Googleで検索してもWindowsしかつかないソフトばかり出てきたのですがWorkbenchはMySQLを出しているOracleの製品ということもあり、普段使っているDBとの相性がいいです! 短所としてはよく落ちる….そんなに複雑なことはしていないのにとにかく落ちます。自動セーブ機能があるので多分?消えてないはずw
このメニューからアソシエーションの定義ができ、キーの設定も自動でしてくれます! 矢印もわかりやすくていいです!!
Special Thanks!!
Workbenchの使い方がわかりやすくまとまっています!! http://qiita.com/noborus/items/11438d16f790b1d42ad8
SQL備忘録&RDS接続方法
EC2からRDSに入り、DBの値を操作する必要が出たので備忘録として残しておきます。 RailsをやっているとActive Recordが優秀すぎてSQLをあんまり勉強しなくても値操作ができてしまうのでいざDBを操作する必要に駆られた時にいつもSQLの 構文を検索して調べているのでいい加減残しておこうと思います。
ローカルからRDSに接続
まずEC2に接続します。
EC2からRDSに接続
パスワード入力を求められるので入力
mysql -h RDSのエンドポイント -P ポート番号(3306) -u DBユーザー名 -p データベース名
基本はローカルの接続方法と似ています。
mysql -u root -p
追加されているのRDSエンドポイント, ポート番号ぐらいです。 エンドポイントはDBの場所を指します。 ポート番号は以下の定義ですね。
TCP/IPネットワーク上でコンピュータ同士が通信を行う際には、 IPアドレスとポート番号をセットで用いて通信を行います。
引用: https://www.nic.ad.jp/ja/basics/terms/port-number.html
一種のコンピューター接続なのでポート番号を指定します。
例えるならば、 とある住所の建物の中の部屋に入るイメージです。 エンドポイントでDBの住所を検索して、ポート番号で何号室かを指定するイメージです。 住所に部屋番号書いてあるじゃん!というツッコミは今回はなしです。
私の場合はMySQLを使っているのでポート番号は3306です。
データベース内のテーブルのカラムを編集する
データベースが選択されていると仮定して、
UPDATE テーブル名 SET カラム名 = 値 WHERE id = 値
UPDATE: UPDATE文はデータの更新をする際に使用します。 SET: 値の設定 WHERE: どのカラムかを指定
SQL文は文章っぽいのでわかりやすいですね。
参考
Rails勉強会が本格スタート
Rails勉強会
エンジニアとして就活したいという大学の友達が何人かいたため、友人を集めて実際に勉強会を始めることしました。
具体的に今週やった内容
実際に始めるまでにかなり時間がかかってしまいましたが、彼らの熱意が全く冷めなかったこともあり先週の土日を使い開発をスタートすることができました。実際に教える側としてやってみると以前の自分を見ているような感じをして、自分の成長を感じました。
Syntaxエラーが出たよ! No method エラーが出た!!!
などエラーに対する叫びが鳴り響く二日間でしたが、目標としているところまでを終えることができました。 自分も普段はScaffoldを使って開発しているので改めて中身を理解しながら、そして説明しながらコードを書くのはいい勉強になりました。
今後、どのように進めていくかは検討中です。