これを少しずつ更新してる。今後は自作コマンドからいろいろやりたい。
SOAP全盛時代に何があったんだ???
http://r7kamura.hatenablog.com/entry/2014/06/10/023433r7kamura.hatenablog.com
これを見てすごい良いなあと思ったんですが、ブコメを見るとSOAP時代とやらになにがあったんだ?という疑問が浮かびました。何があったんだろう。
転職しました
中規模のシステム開発会社から、学習支援アプリを運営するベンチャー企業へ転職しました。前職では新卒入社から1年と2か月お世話になりました。
感じていることなど
前職のWord, Excel, Outlook, ファイル名に日付でバージョン管理というような環境から、Qiita Team, Slack, Github という今時の環境になりました。勤務の仕方や開発環境の作り方など、前職では考えられなかったほどの自由が与えられています。夢見ていた環境なので、きちんと成果を出していきたいです。
転職の際にはいろんな方にお世話になりました。会社の話を聞きに行って人生相談させてもらったり、言語の勉強会なのに転職体験談を聞かせてもらったりしていました。WantedlyやForkwellのように転職支援の便利サイトやネットに転がる数々の転職エントリがあっても、実際に転職に踏み切るのはけっこう重い決断でした。そのため、生身の人から聞く助言がありがたかったです。本当にありがとうございました。
今後
今後勉強しなければいけないことは凄まじく多そうです。知っていることはQiitaに、知らないことは会社のSlackや自分のTwitterなどに投げて人様の力を借りたりして、効率よく学んでいきたいです。
まとめ
頑張ります!!!
RubyのブロックとProcとlambdaとMethodについて
RubyのブロックとProcとlambdaとMethodについて書きたいけど自信がないです。容赦のないマサカリやツッコミをお願い致します。
ブロック
ブロックははじめてRubyを触ったときから慣れ親しんでいるものです。
%w(:Yoshida, :Tanaka, :Suzuki).each do |name| puts "Hello, #{name}" end # または %w(:Yoshida, :Tanaka, :Suzuki).each { |name| puts "Hello, #{name}" }
do と end というキーワード、あるいは波括弧{}
で行いたい手続きを囲みます。
yield
yieldは渡されたブロックを実行します。 例として、「誰かに何かする」というメソッドを定義してみます。
def do_for(name) yield(name) end do_for(:Tanaka) { |name| puts "Hello, #{name}" } do_for(:Suzuki) { |name| puts name.upcase }
Proc
1回きりならdoとendで囲んどきゃいいけど、その手続きを変数に入れたりして保持したいこともあります。 Procクラスのコンストラクタに同じブロックを渡せば、その処理をいつでも呼び出せるようになります。
hello_proc = Proc.new { |name| puts "Hello, #{name}" } hello_proc.call :Nishikori %w(:Yoshida, :Tanaka, :Suzuki).each { |name| hello_proc.call name }
lambda
「ラムダ」と発音します。Procとほぼおなじですが、違いもあるようです。ただlambda式を実行して返ってくるものはProcクラスではあります。
hello_lambda = ->(name) { puts "Hello #{name}"} hello_lambda.call :hoge hello_lambda.class #=> Proc
Procとの違い
「Procとほぼおなじ」というからには、何か違いがあるわけですね。コメントを頂きましたのでそれをここでも共有させていただきます。
引数チェック
# Proc は引数チェックしない hello = Proc.new { |name| "Hello, #{name}" } hello.call :Tanaka, :Suzuki #=> "Hello, Tanaka" # lambda は引数チェックする hello_lambda = ->(name) { "Hello, #{name}" } hello_lambda.call :Tanaka, :Suzuki #=> ArgumentError
returnの処理
[TODO: サンプルコード]
Method
自信が無いのでドキュメントそのまま引用します。
Methodとは、
Object#method によりオブジェクト化され たメソッドオブジェクトのクラスです。
メソッドの実体(名前でなく)とレシーバの組を封入します。 Proc オブジェクトと違ってコンテキストを保持しません。
とのこと。
まとめ
利用の場面を経験しないとなんとも言えない感じがするので、Ruby熟練者が書いたコードをたくさん読んでいきたいです。
なにかいろいろ物足りないのでちょこちょこ書き直します。
参考リンク
- Ruby の Proc オブジェクトと Method オブジェクトの違い (proc, lambda, ブロック, メソッドについて) - vivid memo
- Ruby block/proc/lambdaの使いどころ - Qiita
- Procを制する者がRubyを制す(嘘)
- Ruby のキーワード一覧 - Secret Garden(Instrumental)
- Ruby の Proc オブジェクトと Method オブジェクトの違い (proc, lambda, ブロック, メソッドについて) - vivid memo
参考書籍
速さを測りたい
とりあえず http://yomomo.net をたたき台にしてやってみたい。何から始めたらいいんだろう
参考
メモ
ツールはいろいろあるけれど、それが解決している問題とかアイデアに注目すると立ち向かえそうな気がしてくる。一つ一つのコマンドを覚えるとつらいけど、もっと大きい枠組みで見ていくと楽しい。技術がわかると、普通に使っているものが、どうやって実現されているのか理解することができて楽しい。ただ頭が悪いので、時間止まればいいと思ってる。
もっとも楽しいのは、普段使っているものをバラバラに砕いて理解できたとき。なので、例えば以下の様なことについて、上から順に疑問を潰せていけると楽しい。
- プログラムを書いてから実行されるまで
- リンクをクリックしてからページが表示されるまで
- git clone でプロジェクトが手元にコピーされるまで
- cd hoge でディレクトリを移動するときに起きていること
1年職場でソフトウェア開発に関わってみてわかったのは、余計なことを自ら知ろうとしないと、ツールを使う手順にばかり精通してしまって内側については何も習熟しないということ。普通に使ってるツールをいつでもバラバラに解体したり仕組みを説明できるようになりたい。
wdim 遅い
バージョン管理システムってなんだ
職場でSubversionを使ってるはずなんだけど、自分含めてみなさんかなり理解が怪しい。そもそもバージョン管理とは何か、というのをまとめたいのでこっそり書き足してまいります。
バージョン管理史ざっくり
RCS(Revision Control System)
- 初版:1982 年
CVS(Concurrent Version System)
- 初版:1990年
Subversion
- 初版:2000年
Git
- 初版:2005年
参考
Emulsification ってなんだ
パスタをゆでて食おうと思ったときにレシピ検索をしたら Emulsification(乳化)って言葉を知った。英単語で呼ぶとかっこいいっす。
まず、乳化とは何かというところなんですが、本来混ざり合わない水と油が、均一に混ざり合った状態のことを言います。
とは言っても、水と油だけでは完全に混ざり合いません。ドレッシングをイメージすると分かりやすいでしょうか。
市販の瓶に入っているドレッシングって、普通に置いておくと下の部分に水分、上の部分に油分があって、食べる直前に振りますよね。振ると水と油が混ざり合ったようになるけど、またしばらくすると分離する。
しかし、マヨネーズは酢(水分)と油が混ざり合い、戻ることはありません。それは、たんぱく質(たまご)が入っているからです。たまごが乳化を安定させる役目をしています。
では、パスタソースの場合はどうなのかと言うと、茹で汁に溶け出したパスタのでんぷん質が、その役割を担います。
この乳化によって、オリーブオイルと水分が混ざり合い、とろみのあるソースとなり、麺によく絡んで美味しく食べられるというわけです。
わかりやすい。
自作gemのバージョニングについて
ここ見れば良さげ。
Ruby技術者認定試験(Gold)落ちた
前からRuby触ってるし大丈夫だろうと思ってて、前日にちょろっとやって受かる予定だった。結果は56点だった。馬鹿だった。
ポイント
- 「Ruby技術者認定試験改訂のお知らせ」にある1.8->2.1の変更点
- クラスの継承関係
- メタプログラミング
リンク
試験前に読んだものや、試験終わった後にもやもやを解消するのに役立ったリンクなど。
本
本はこの三冊がいいと思う。3冊ちゃんと読み倒せばGoldなんて簡単すぎるくらいかもしれない(自分はというと、Effective Rubyは読みかけ、メタプロRubyは読んでない。あと頭が悪い)。
公式問題集はいろいろひどかったから載せない。
もう1回くらい今月末に受けて受かりたい。1万5000円もかかるのが苦しい。とはいえ勉強やはり楽しい。しかし1万5000円...(以下無限ループ)
何で難しいのか・難しいものとどう向き合うか
難しさについて。
前提を知らない
前提を知らないと、難しいと感じる。=> 遠くにある高級そうなものではなくて、自分が理解できる近場の疑問を一つずつ解消していく。
訓練を必要とする
訓練を必要とするものは、素でいきなりやると難しく感じる。 => 訓練に時間を費やす決断をする。
必要がない
自分に必要がないものを理解するのはとても難しい => 必要が無いならやらない。必要だと感じたときにやる。