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

パーフェクトRuby Advent Calendar 2013(13日目) 気になるあの子

パーフェクトRuby Advent Calendar 2013 の13日目の記事です。
12日目の記事は パーフェクトRubyから泣く泣く削った標準添付ライブラリ パーフェクトRuby Advent Calendar 2013(12日目) です。

今日は、私がパーフェクトRubyを読んで思ったこと、気付いたことを書きます。

あの子にこんな一面も

パーフェクトRubyは、Rubyの言語仕様から丁寧に書いてある本なので、普段仕事でRubyを使っている私は「最初の方はだいたい知っている事なはず」と思っていました。 でもおさらい的な気持ちで読むと、あれ、これ知らなかったぞ…ということに結構出くわします。

私が特に「へー!」と思ったのは ブロックの do…end{}のちがいです。どちらを使っても同じだけど、複数行になるときは do…end 1行で書けるときは{}と覚えていました。 でも結合の優先度がちがうんですね。

{}の方が強く結合する

p [1, 2, 3].map {|n| n * 2 }
=> [2, 4, 6]

p [1, 2, 3].map do |n|
  n * 2
end
=> [1, 2, 3]

へー!
こういう知らなかったことに、たびたび出会えるのがとても嬉しいです。
あの子にこんな一面もあったんだ、と思う時のあの感じです。

身元が気になる

Moduleクラスっていうのを今まであまり意識していなかったのですが、なにげなく使っている attr_accessor とか include とかって Moduleクラスのメソッドなんですよね。パーフェクトRubyを読んでから「これModuleクラスのメソッド」って思うようになりました。

パーフェクトRuby読んで「そこ?」って感じかもですが、Object とか Kernel とかのメソッドもそうで、今まで気にせず使っていた子たちの身元が気になりだしました。

意識せず なにげなく使っていたものもあるし、もちろん新しく知ったメソッドもあります。 特に一覧を返す系のメソッドがすきです。

ancestors :祖先クラスとモジュールの一覧を返す

Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]

constants :定数名の一覧を返す

module IncludeModule
  MODULE_CONST_VAR = 1
end

class Constants
  include IncludeModule

  CLASS_CONST_VAR = 1
end

Constants.constants #=> [:CLASS_CONST_VAR, :MODULE_CONST_VAR]

とかとか。ふとした時に便利です。

前からObject#methodsもすきだったし、私は把握したいのかもしれないです。ちょっと高い位置から見渡したい。 そんな深層心理なのかもしれないです。

エピローグ

Rubyともっと仲良くなりたいと思いながら2年くらいやってきて、近づいたり、突き放されたり (被害妄想) しながら それでも少しずつ距離を縮めてきました。
パーフェクトRubyは たぶん私達の仲を取り持ってくれる存在だと思います。 これからもちょー頼りにしています。

RubyWorld Conference 2013 松江で待つ!! ぇー!

先週 RubyWorld Conference に行ってきました。 先輩たちから聞いていた”独特の雰囲気”というのを味わってきました。オープニングで県知事や市長の挨拶があるのも新鮮だったし、Rubyのカンファレンスでスーツを着た人たちがいっぱいいることも新鮮でした。

まつもとさんの「試行錯誤を繰り返せるのが大切」とても響きました。失敗しても、次はうまくやろう!今度こそ、うまくやろう!と。弱ってるときに聞いたら泣きますね。

Aron の「書いてあることを鵜呑みにしないで、自分で確かめよう」には、うぅっと来たし (鵜呑みにしてしまうタイプ) 高井さんの「デモ環境のデータは、本番とほぼ同等のものを使ってます」には、おおっとなりました。 (そうしたい)

そしてmojomboの「インターネットすごい!!!」の話。とても楽しかったです!

個人的に、原点回帰というか、
大学のとき「ディズニーランドが夢と魔法の王国なら、インターネットは夢と自由の王国だ」って言った教授をだいすきになって、彼のゼミに入ったことで、わたしは今この職業についていると思うので インターネット!!! となりました。

あとは、日本神話をもう少し知ってたら島根をもっと楽しめたのかな、と思います。
わたしがこの時覚えたのは、ヤマタノオロチです。

RubyKaigi2013に当日スタッフとして参加してきました!

想いを言葉にするといつも陳腐…じゃなくて、幼稚?バカまるだし?になってしまうのですが今回も書きまーす。思ったこと。感じたことを。

まず、当日スタッフに応募した理由

  • Sapporo RubyKaigi 2012に当日スタッフとして参加して楽しかったから
  • スタッフとして参加した方が、参加者やスピーカーの方に話しかけやすいと思ったから (腹黒)
  • いつもRubyを使って仕事をしていて、便利なgemもたくさん使ってるけど、自分は何も貢献できてないと感じていたから (「そういう人は労働力で貢献できるよ〜」とスタッフ募集記事に書いてあったのでした)

こんな感じです。
あと、Rubyコミュニティに帰属意識を感じたいとちょっと思ったかもしれません。

会期中の3日間は、だいたいホワイエかホールの出入口あたりにいたので、たくさんの方と話すことができました。最初の目論見通り、スタッフTシャツを着ていなかったら話しかけるのを躊躇ったであろう、初めましての方や、お久しぶりですな方とも話すことができました。
札幌Ruby会議で知り合った人と札幌ぶりに再会、というのもあって嬉しかったです。 ある参加者の方も「同窓会に来たみたい」とおっしゃっていました。 知ってる人が増えていくのは嬉しいですね。それと同時に、2年前の私みたいな人には積極的に話しかけたい。そんな気分。

最後、クロージングで舞台に上がる機会をいただけたのは本当に良かったです。舞台上からの景色はすごくて、何度も端から端を見渡してしまいました。みんなこっち見てる!!みんな笑顔!!みんな拍手してる!!瞬間は「わぁ」って。

後から「クロージングでスタッフ全員を舞台に上げたのは、感動のフィナーレの演出じゃなくて (←わたしはコレだと思ってました) 運営チームのみんなに「なにか」を感じてもらいたかったから」という話がありました。

まんまと「なにか」を感じてしまった私は、この気持ちをどうしたらいいのかよくわかりません。

RubyHirobaも含め、この4日間、みなさんの「Rubyだいすき感」がとても伝わってきて、私ももっとRuby!という思いでいっぱいです。 技術ネタ満載なセッションは、これから動画でじっくり楽しみたいと思います!

参加者のみなさん、スピーカーのみなさん、スタッフのみなさん、おつかれさまでした!本当にありがとうございました。 これからもよろしくお願いします。

f:id:akiinyo:20130605221344j:plain

                         Photo taken by @takai

日本Rubyのチュートリアルa版に行ってきました!

コーチから頂いた六花亭のバターサンド (だいすき!) を食べつつ自己紹介をして、さっそくウォーミングアップの問題にとりかかりました。 ランダムでじゃんけんの手を出力するプログラムを作ってみよー。というやつ。
うえあー
普段Railsしかやっていないので、Rubyだけでプログラム書くことに身構える。
しかもインターネットが繋がらなかったのでリファレンスマニュアル引けない(∵ )
ちょー身構える。
よしっ書くぞ。

じゃんけんの手をランダム?ってことは shffule? ってことは配列?ってなんか考える順番ちがう気がする。 でもとりあえず書けました。

hands = %w(パー グー チョキ)
puts hands.shuffle.first

できた!と思ったときに、コーチからヒントが。

randっていうメソッドを使うと乱数がとれます。
rand(3)ってやると「0」か「1」か「2」が返ってきます。

およよ..数字返ってきてどうするの…

あーーなんか配列って数字使うと要素取れるんだっけかなー... って、このエピソードを今日会社の先輩に話したら 「配列に添字でアクセスすることないもんね」って笑ってた! そうそう、そーなの!

そして、このじゃんけんの一番簡潔な答えは

%w(パー グー チョキ).sample

おおおおーーーーさんぷる! おもろーーー

---------------------------(・∀・)---------------------------

続きまして。お釣りの札と硬貨の枚数を出力しましょう問題。
1456円の買い物で2000円を出したときのお釣り

【お釣りの枚数】
10000円:0枚
5000円:0枚
1000円:0枚
500円:1枚
100円:0枚
50円:0枚
10円:4枚
5円:0枚
1円:4枚

みたいな。

gets.chomp でコマンドラインから入力したものを取ってこれるよー
to_i で Integer に変換できるよー
というヒントは最初から与えられました。

とりあえず価格と支払額を変数に入れようか。
そんでお釣りも計算しとこう。

print '何円の買い物をしましたか:'
price = gets.chomp.to_i

print '何円だしましたか:'
payment = gets.chomp.to_i

change = payment - price

でっていう。
ヨッシーじゃなくて、どちらかというと窪塚の

でっていう。

自分がレジ係だとして、お釣り渡す時どうすんのー?って聞かれて考える。
とりあえずレジにお釣りの金額が出るよね。
わたしはお釣りよりもさきにスタンプカードを返す派なので「お先にスタンプカードお返しいたします。」って言う。 それでお釣りが544円だったら、500円1枚と10円4枚と1円4枚取って、レシートの上に乗せて 「544円のお返しでございます。ありがとうございましたー」って
えーどうやってるかな。どうって。わたしどうやってんのー。
うーん無意識。無意識だな。天才だなー。

ってなって、そこからは、もうほとんど答え教えてもらってしまいました…とほほ

大きい方、つまり10000円から割り算していけばでるんすよ。
余剰をさらに割っていけばいいんですよ。
プログラミングというか算数の問題らしいです。はうぅ。

で、10000円から eachでまわしていって、結果をね、どこかにね、入れておこうとね、思ったんですけどね、 とりあえず表示してみなよってアドバイスを頂いて、
うん、え、あ、おお、each の中で puts するのか! そうだよね。表示できればいいんだもんね。ってなんか、いつもとやってること違う感がむっちゃありました。

あーつかれた!あーおもしろかった!
あっという間に時間が過ぎてしまって、もう終わりかーーーという感じ。
見直してみれば、めちゃくちゃ簡単なコード…
でも思いつかんかったら書けんのよー

で、そのほかにも2問用意されていたので 問題のプリントもらって帰ってきました!

文字列を2つ渡してアナグラムかどうかを調べるプログラム
野球の試合結果を記録していって勝敗を出力するプログラム。

アナグラムの方はやりました!できました! テストもかいたお。赤ペン先生に添削してもらうんだー。 絶対お釣りの問題の方が難しいと思ったんだけど、それってやっぱり算数が苦手ってこと? 理数系への憧れとこんぷれっくす。

でもおもしろいねー、ねーねーこうゆうの面白いね。

参加できてよかった。 ありがとうございました!

デザイナー向けプログラム部#p4dに遊びにいってきました!

RailsGirlsたちのために参加者枠を増やしてくださったのに、そこにわたしが滑りこむ。
いつもごめんなさいほんとうにありがとうございます。

簡単に自己紹介をして、やりたいこと別にざっくりグループ分けをしました。
わたしは [design, rails] みたいなひとたちが集まるグループへ。

デザイナーさんが少なかったので、デザイナーさんへの質問会みたいな感じになってしまいましたが、 それぞれ自分が作っているサービスの気になる所を相談するっていうのが出来ました。
サービスの内容とフォントの雰囲気が合ってないとか
ボタンが気になるっていうけど、ボタンじゃなくて背景を変えてみては?とか
ほほー、と思うことが色々ありました。

私はごちゃごちゃしてるのが気になるんですよねーっていう相談をしたら、縦の線がそろってると情報量が多くてもだいたいすっきり見える、とアドバイスをいただきました。 Rubyのハッシュそろえるのと一緒だなー。
分かりそうなことなのに言われるまで気づかないとは、とほほ…という感じ。
教えてもらえてよかったです!

また遊びにいきまーす!

RailsGirlsTokyoに*コーチ*として参加してきました!

3月1日、2日 RailsGirlsTokyo にコーチとして参加してきました。
Railsでwebアプリ作ってみたい!ってゆう初心者の女の子たちを対象にしたイベントです。 むっちゃ楽しそうやろ!

わたしはコーチとして参加したのですが、白状すると、とゆうか見るからに何も教えてなかったです。
NoMethodError が出てている人に typo を指摘したり、gemを追加した後にサーバの再起動を促したり、 「git init したけどなんか変」という人と一緒に悩んだり。
(結局 git init しているディレクトリが一階層上だったことが判明)

コーチとしては最悪だったかもしれませんが、
@a_matsuda さんのワークショップと、笹田さんのインスタンス変数の講義を受け、
個人的には最高に充実したイベントでした。
ごめんなさい精進します。。。

アフターパーティでは、参加者の方といっぱい話せて嬉しかったです。
みんなこれからもっともっと勉強していきたいというようなことを話していて、なんだか眩しかった。 翌朝は心なしか低血圧がいつもよりましだった気がします。Girlsのきらきらパワーすごい。

今度はコーチと参加者という感じじゃなくて、みんなで集まって、お互い教えあえたらいいなー。 チーズケーキ半分あげるから、チョコレートケーキ半分ちょうだい?みたいな。 そんなことを思ったりしました。

一緒にお仕事している@ITのともチャンも参加していて、素敵な記事がでてたー!!!
http://www.atmarkit.co.jp/ait/articles/1303/04/news119.html
キラッキラ☆☆☆

file permissions of 0644 but 0600 is required.というエラーがでたときの話

0600 がいいのに 0644 だからだめ。と言っている。
このエラーメッセージを読んで「あーはいはい。」となる人と「あーはい?はい??」となる人がいると思うのですが わたしは「あーはい。うんうん。...はい?」という感じ。

ファイルパーミッションとは、ファイルに定義されてる読み出し・書き出しのアクセスに対する許可情報のことでした。
あ見たことある -rw-rw-r-- こういうやつ。
それを3桁8進数で表記すると 664 になるというやつ。
左から順番に、所有者 (わたし) のパーミッション、グループ ( 誰(∵ ) ) のパーミッション、その他のユーザのパーミッション

8進数表記のルールはこれ

  • 4 を加算するとリード可
  • 2 を加算するとライト可
  • 1 を加算すると実行可

そしてパーミッションの変更はchmodコマンドで。

chmod 600 [file name]

変更できた〜
これからは「あーはいはい。」です!