旧gaaamiiのブログ

間違ったことを書いている時があります。コメントやTwitter、ブコメなどでご指摘ください

ライブラリのサンプルをCodePenやjsfiddleで検索すると捗る

転職して1ヶ月は内製のサポートツール周りなどを触らせてもらっていましたが、8月からはウェブフロントエンドの方にコミットさせてもらっています。Angularのデータバインディング周りに何度もハマっていて楽しいです。

フロントエンドの開発作業で、新たな機能をつくるときにはまずそれ相当のライブラリがあるかどうか調査することが多いと思います。しかしそれが見つかったとしても、僕のように頭が弱く英語力が低い人間にとって、ライブラリの扱い方をGithubのREADMEからすぐに把握するのはなかなか大変です。そのため、さっと動くサンプルを見つけることがとても重要。

そこで、http://jsfiddle.nethttp://codepen.io などといった、フロントエンドエンジニアのお絵かきサイトみたいなものがあることを知りました。ここで検索すれば、(そこそこ人気のあるライブラリなら)何かしら自分のニーズに合ったものが見つかりそうです。

f:id:shgam:20160806124829p:plain

jsfiddle.net

http://codepen.io/codepen.io

参考

qiita.com

転職3週間振り返り

転職して3週間が経ちました。少し振り返ります。 Twitterでは転職したいけど迷ってるという方も見かけるので、こういうことを(会社の迷惑にならない範囲で)こまめに振り返って伝えていきたい。

前職から変わったこと、感じてること

  • 自由が増えた(開発環境や勤務について)
  • 開発が速い(新機能の企画からリリースまでが1〜2週間とか)
  • 製品に対する反応がダイレクトに分かる
    • 一夜の障害がAppstoreのレビューに如実に現れたりする
    • 良い反応も見れる。(自分はさておき)サービスが社会のお役に立ってる感がある。
  • テスト自動化へのモチベーションが高い
  • 同僚のエンジニアのレベルが高い

個人的な課題

個人的な課題たくさんあるので技術的なこととそれ以外でまとめる。

技術的なこと

技術的なこと以外

  • アウトプット少ない
    • 自分の存在価値みたいなものを出せていなくて焦ってる
    • 明らかにこうした方がいいと思うということは共有したりプルリクで投げたりしていきたい
  • 立ち位置
    • 何エンジニアになろうとしているのかが自分でも不明瞭。
    • 正直何でもできるようになりたいけどそれでは中途半端なことになりそうでもある
  • 既存機能のデータをどこでどう持って、どのように出し入れしているのかを把握できていない
    • これがわかっていないとディレクターの方にマスタデータのcsv渡すときなんかに時間がかかる
  • 砂場を準備できていない
    • 業務で扱う技術領域で趣味プロダクトみたいなものを作って、壊せるオモチャとしてプライベートで運用していきたい( nekobito.github.io のリニューアル考えてる)
  • 時間の感覚が鈍い
    • いつまでに何ができるかという判断力が貧弱。
  • 仕様理解
    • ミーティングなどで、話についていけなくなる瞬間がある。おそらく自分でもっとアプリ使った方がいい。

関連

(他のエンジニアの方の転職その後エントリみたいなやつ大好物です)

SOAP全盛時代に何があったんだ???

http://r7kamura.hatenablog.com/entry/2014/06/10/023433r7kamura.hatenablog.com

これを見てすごい良いなあと思ったんですが、ブコメを見るとSOAP時代とやらになにがあったんだ?という疑問が浮かびました。何があったんだろう。

fish 使うぞ

fishshell.com

補完はあった方がいいよなあと思って。brew install fish して使い始めた。まだなにもいじってない。

zshでも良いんだろうけど補完使うのに.zshrcへの設定が必要っぽかったしfishの方が後発で人気も上昇してそうなので、fishを使うことにした。

転職しました

中規模のシステム開発会社から、学習支援アプリを運営するベンチャー企業へ転職しました。前職では新卒入社から1年と2か月お世話になりました。

感じていることなど

前職のWord, Excel, Outlook, ファイル名に日付でバージョン管理というような環境から、Qiita Team, Slack, Github という今時の環境になりました。勤務の仕方や開発環境の作り方など、前職では考えられなかったほどの自由が与えられています。夢見ていた環境なので、きちんと成果を出していきたいです。

転職の際にはいろんな方にお世話になりました。会社の話を聞きに行って人生相談させてもらったり、言語の勉強会なのに転職体験談を聞かせてもらったりしていました。WantedlyやForkwellのように転職支援の便利サイトやネットに転がる数々の転職エントリがあっても、実際に転職に踏み切るのはけっこう重い決断でした。そのため、生身の人から聞く助言がありがたかったです。本当にありがとうございました。

今後

今後勉強しなければいけないことは凄まじく多そうです。知っていることはQiitaに、知らないことは会社のSlackや自分のTwitterなどに投げて人様の力を借りたりして、効率よく学んでいきたいです。

まとめ

頑張ります!!!

キーボードを HHKB Lite2 for Mac にした

f:id:shgam:20160626164928p:plain

以下の様な理由から、HHKB Lite2 for Mac を選びました。

  • キーボードの配列を変える必要は今のところ感じてない
  • 高価なものは買いたくない
  • 小さめのキーボードがいい
  • Instagram にあげてオシャレ気取りたい

キーボード変えて何か変わりそう?

今のところ、「ちょっと気持ちよくなった」程度なので、これが思い込みなのか実際に指が喜んでいるかというのはよくわかりません。ただ、新しいものを手に入れてわくわくしている間はとても良い気分で過ごせそうです。

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熟練者が書いたコードをたくさん読んでいきたいです。

なにかいろいろ物足りないのでちょこちょこ書き直します。

参考リンク

参考書籍

メモ

ツールはいろいろあるけれど、それが解決している問題とかアイデアに注目すると立ち向かえそうな気がしてくる。一つ一つのコマンドを覚えるとつらいけど、もっと大きい枠組みで見ていくと楽しい。技術がわかると、普通に使っているものが、どうやって実現されているのか理解することができて楽しい。ただ頭が悪いので、時間止まればいいと思ってる。

もっとも楽しいのは、普段使っているものをバラバラに砕いて理解できたとき。なので、例えば以下の様なことについて、上から順に疑問を潰せていけると楽しい。

  • プログラムを書いてから実行されるまで
  • リンクをクリックしてからページが表示されるまで
  • git clone でプロジェクトが手元にコピーされるまで
  • cd hogeディレクトリを移動するときに起きていること

1年職場でソフトウェア開発に関わってみてわかったのは、余計なことを自ら知ろうとしないと、ツールを使う手順にばかり精通してしまって内側については何も習熟しないということ。普通に使ってるツールをいつでもバラバラに解体したり仕組みを説明できるようになりたい。

バージョン管理システムってなんだ

職場でSubversionを使ってるはずなんだけど、自分含めてみなさんかなり理解が怪しい。そもそもバージョン管理とは何か、というのをまとめたいのでこっそり書き足してまいります。

バージョン管理史ざっくり

RCS(Revision Control System)

  • 初版:1982 年

CVS(Concurrent Version System)

  • 初版:1990年

Subversion

  • 初版:2000年

Git

  • 初版:2005年

参考

http://psyto.s26.xrea.com/misc/svnbook/svnbook.ja.pdf

Emulsification ってなんだ

パスタをゆでて食おうと思ったときにレシピ検索をしたら Emulsification(乳化)って言葉を知った。英単語で呼ぶとかっこいいっす。

r.gnavi.co.jp

まず、乳化とは何かというところなんですが、本来混ざり合わない水と油が、均一に混ざり合った状態のことを言います。

とは言っても、水と油だけでは完全に混ざり合いません。ドレッシングをイメージすると分かりやすいでしょうか。

市販の瓶に入っているドレッシングって、普通に置いておくと下の部分に水分、上の部分に油分があって、食べる直前に振りますよね。振ると水と油が混ざり合ったようになるけど、またしばらくすると分離する。

しかし、マヨネーズは酢(水分)と油が混ざり合い、戻ることはありません。それは、たんぱく質(たまご)が入っているからです。たまごが乳化を安定させる役目をしています。

では、パスタソースの場合はどうなのかと言うと、茹で汁に溶け出したパスタのでんぷん質が、その役割を担います。

この乳化によって、オリーブオイルと水分が混ざり合い、とろみのあるソースとなり、麺によく絡んで美味しく食べられるというわけです。

わかりやすい。