旧gaaamiiのブログ

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

ドッグフード食いたい

仕事で作ったものが自分でも使えるようなものだったら楽しそうだな、と時々ふと思う。

自分はプログラミングそのものが好きっていうよりかは、作って動かして考えて直すっていう一連の活動が好きなのかもしれない。

追記

ドッグフード食べつづけてるうちに味覚が鈍ってこれが旨いんだと思い込む問題もある。たしかになあ…

関連

「勝ち続ける意志力」を読んだ感想

@sairoutine さんに教えていただきました。激アツでした。

感心したところ

  • プロゲーマーになるまでの葛藤が細かく書かれてて良い
  • 要領よく生きる周りの人たちへの違和感
  • つかんだ栄光を捨ててとにかく自分が納得行くように生きる姿勢

世界チャンピオンになった後に挫折、麻雀、そして介護の仕事を挟んでからの復帰というストーリーがアツかった(実話ですが)。

著者情報

すごい試合

www.youtube.com


おすすめ本お待ちしています。

http://yomomo.net/u/gaaamiiyomomo.net

2016年やりたいことなど

明日から仕事なので、新年ぽいことを書きます。

2015年

昨年の目標は「インターネット捨てない」みたいな感じでした。達成できたと思います。 インターネット捨てないおかげで、自分の興味範囲だけでは手を出せなかった面白いことを見聞きすることができました。ギークハウス・JSON Schema・PBL・はてなインターン・REPL駆動開発・Rasberry Pie・関数型プログラミングLISP...どれも自分では積極的に知ろうとすることがなかったと思います。

こう振り返ると、やっぱりPodcastを雑に始めてみたのはよかったです。ブログの影響力が1だとするとPodcastの影響力は3くらいあると思う。影響を与える側としてはいいことだけではない(間違ったことを伝えたり自分の無知を撒き散らしたりすることもある)のだけど、影響を受ける側としてはお得でした。

2016年

2016年はどうしようか。

やる

  • Github滞在時間を上げる
  • Githubでスター30以上のOSSをつくる
  • Yomomo を今年こそまともに使えるものにする
  • 100satsu(100冊読むやつ)最後までやり切る
  • 使っている技術について深掘りする

気をつける

  • いちいち小さいことを悔やまない/ビビらない
  • 技術力とか人間力とか賢さとかそういうものがガッと向上することはないので気長にやる
  • 休日に人と会う

昨年は平日8時間以上働きながらあれもやってこれもやってというのが想像以上に大変だということを実感したので、心身を壊さない程度に頑張りたいと思います。

応援してくれるという人は、http://yomomo.net/u/gaaamii にこれ読んどけ的なおすすめ本をそっと追加しておいてくれると嬉しいです。

このブログ未だに誰が読んでるのかよくわからず誰に向けて言っているのかよくわかりませんが、今年も宜しくお願い致します。

lib/ から app/controllers/concerns/ へ

yomomo.net にて、Amazon Product Advertising API を叩いて 良い感じの キーバリュー(Hash)オブジェクトを返してもらう処理を、これまでに2回引越しました。

yomomo.net は、Railsの素晴らしいコード生成とRailsで金を稼いだことがない素人同然の僕が設計らしい設計も考えずに作った雑追加実装でできています。そのため、ここにそれ書くの?というものがあちこちに散らばっていて、その一つが今回 ResponseGenerator という名前でmoduleにした部分でした。

ResponseGenerator は冒頭にも書いたように、「外部の書籍情報APIへのアクセスを行い, ハッシュオブジェクトを返す」処理です。以前はこれを app/controllers/items_controller.rb に書いていました(Yomomoの「おすすめ」はコード上では Item というモデルとして存在していて、items_controller.rb はこれに対応するコントローラです)。ただ、考えてみると「外部の書籍情報APIへのアクセスを行い, ハッシュオブジェクトを返す」処理はこのコントローラだけに必要なものというわけではなさそうです。コントローラ全体から利用出来るようにしたい。けれどもApplicationController に処理を生やすというよりはもう少し独立したものとして扱った方が良いような気がしてました。

何より、ApplicationController を見てみたら、404ページをrenderするためのメソッドやら現在のユーザーを返すメソッドやらが生えていて、なんだか秩序が無い雰囲気でした。これ以上散らかしたら、あっという間にぐちゃぐちゃなプログラムになってしまいそうでした。

そこで、よくわからないので lib/ 下に response_generator.rb というファイルを作り、そこにmodule で名前空間を切り、config.autoload_paths += %W(#{config.root}/lib) で lib ディレクトリを読み込むように設定して利用できるようにしました。

(参考) easyramble.com

ただ、app/controllers/ の下に concerns/ というのもあったな、あれはどうやって使うんだと調べていったらこちらの方が適切っぽかったので移動した、というのが今回の流れでした。


書き途中です。

Clojure Workshop in Tokyo 行ってきた

行ってきました。他の参加者の方々がすでにもっと有益な感想を書かれているかもしれませんが、自分なりにでも感想書いたほうがいいような気がしたので書きます。

https://i.gyazo.com/bbcea3b1fb56d072e54001f5ccda81b4.png

Clojure Workshop とは

japanclojurians.doorkeeper.jp

  • 主催:あやぴーさん(@_ayato_p)
  • 会場提供:サイボウズ株式会社
  • 食べ物の提供、会場準備など: サイボウズスタートアップス株式会社
  • 目的:Clojure 言語に興味ある人へ魅力を伝えたい, Clojure コミュニティの存在感を強くしたい

という感じのワークショップ。初心者向けだというのを半信半疑で参加したら本当に初心者に親切なワークショップになっていて驚きました。ありがたやありがたや。

学んだこと

  • fireplaceの使い方
  • REPLすごい
  • テストの書き方(deftestの使い方)
  • Clojuredocsのありがたみ

その他いろいろ

  • Clojure界ですごい人がたくさんいた(えいとすさんと話せた)
  • 参加者同士でわいわい交流ができた(@Makinoshi_K さんや @hitode7456 さん、@moutend さんと長い時間話せた)

雑感

ワークショップの内容とはズレますが、ワークショップ後の雑感も書いておきます。

  • あやぴーさんが激推ししているREPL駆動開発の凄さに感化されつつある
  • とはいえ自分はプログラミングスタイルの違いに感動できるほどプログラミングできていないのでは
  • 言語問わずあれこれ面白いものを作りたい
  • 現実はあれもしたいこれもしたいで結局何もできてなくて情けない

他の参加者の方々も散々書かれている通り、本当に良いワークショップでした。 あやぴーさん、TAの皆様、当日の準備や食べ物を提供して下さったサイボウズスタートアップス株式会社様、ありがとうございました。

※もっと有益情報あった気がする。何か気付いたことがあれば書き足していきます。

関連

「レキシカルな束縛を作り出すためのフォーム」ってなんだ

孔雀の本を読んでいます。

第2章がClojure一巡りということで、言語の基本的な文法について説明されている。といってもそのほとんどが自分には何がなんだかわからず、以下の様な説明に頭を抱えました。

let 特殊形式はまさにレキシカルな束縛を作り出すためのフォームだ。

let が何だかはわからないけど、JSのvarのような何か、変数を宣言するための何かだろうと思っていた。けれども、レキシカル・束縛・フォーム、すべて意味を知らなかったので説明を読んで苦しくなった。

ドキュメントにはこう書かれている。

clojure.core/let
([bindings & body])
  binding => binding-form init-expr

  Evaluates the exprs in a lexical context in which the symbols in
  the binding-forms are bound to their respective init-exprs or parts
  therein.

なるほど。とはならなかった。

レキシカル( lexical )

どうやら「その関数内でのみ有効な」というような意味合いらしい。スコープの文脈で使われる言葉で、対になるのがdynamicという言葉っぽい。static とか local に近い感じがする。

束縛( binding )

これまた馴染みのない表現だけど、宣言のようなものらしい。ただ、他の言語と考え方が違う。

a = 10

普通の手続き型的なプログラミング言語で、aという変数に10という値を設定する、というようなことをするけどClojureではそうではなく、

(let [a 10])

10にaというシンボルを束縛するという考え方らしい。

使い方

普通にローカル変数の感覚で使って良さそうです。

(defn real-price [price]
  (let [tax 0.08]
    (+ price (* tax price))))

(real-price 19800)
21384.0

感想

たったこれだけのことだけど、REPLで試しながらあーとかうーとか言いながら試せるようになりました。何か作るにはまだ遠いけど、頭の中でプログラムを動かすことができない頭の悪い自分にとって、書いたコードをそのまま評価するREPLは相当有難い機能なんじゃないかと思います。

あと、ドキュメントをすらすら読んで理解できない場合にあたる情報としてClojureDocsというのが使い勝手が良いというのをこの前のClojure座談会で教わったので、それを当たりながらチュートリアルやら何やらを楽しみたいです。

Clojure座談会#2行ってきました

サイボウズスタートアップス社で @_ayato_p さん主催のClojure勉強会が行われました。餃子とビールとご飯を頂きました。本当にごちそうさまでした。

座談会ではほとんど話についていけなかったのですが、自分なりに勉強になった部分のメモを残しておきます。感想も混じってます。 テキトーなこと書いていたらご指摘下さい。

REPL

  • Clojure書くなら本気で使いこなしたい

WAFについて

英語

LT資料

@bukurosaikou07 さん

qiita.com

感想

自分と今日来てた他の人達との知識のギャップが大きくて良い刺激になりました。ああいう話ができるようになるまでに何冊本を読んで、コードを書いて、どれだけ経験を積めばいいんだろう。

刺激が云々とか気持ちの話をいつまでも言っていてもしょうがないので、粛々と本読むのと酒飲んでわけも分からずコード書くのを繰り返してどうにか前に進みたいです。

有益情報

Leiningen ってなんだ

Clojure触りだして、とりあえずLeiningenっていうのを使って何かするらしいというのを知った。

leiningen.org

lein new myapp
(プロジェクトの雛形作る。)

やら

lein deps
(project.cljに記述したライブラリ群をインストールする)

やら

lein ring server 3000

というのを打ち込んだ。RubyでいうところのBundlerっぽい何かだというのがわかった。

補足

lein ring server 3000

だけど、REPLの他にプロセス立ち上げるのは無駄が多いとのこと。じゃあサーバーどうするのかというと、

https://gyazo.com/c26bb8cda3259c7e123b5a89b163c1c9

REPL の外じゃなくて中でサーバーを起動させれば JVM はひとつだけで済むのでマシンに負担かからないし良い

とのこと。REPL駆動開発という言葉もあるらしい。

つまり、プログラムを作りながら、横でREPLを起動しておき、その関数をロード(またはリロード)して実際に使ってみて、さらに修正して、使ってみて、ということができる、ということです。

サーバサイドアプリケーションだとどうなのでしょう。サーバを起動しないとだめなのでしょうか。

いいえ。

ClojureのサーバサイドプログラムはおおむねRingという環境上で動きますが、そこで使うClojure関数は、リクエストを受け取りレスポンスを返すただの関数であり、そのリクエストというのは、ただのAssociativeなので、マップを渡せば呼べるのです。関数は環境に依存してないのです。セッションすらも、Associativeの中の:sessionというキーにバインドされたAssociativeにすぎません。なので、REPL上で簡単に呼べるのです。Associativeって、つまりマップですからね。

楽しそうだ。

参考

もくもく会の個人目標

土曜日にこれ行く。

tamachi-clj.connpass.com

もくもく会ではClojureはてなブックマークシャッフルサイトを実装するのが個人目標です。

(前にRuby/Sinatra/jQueryで作って楽しかった思い出がある)

hatebutrip.herokuapp.com

大江戸Ruby会議行ってきた

寝坊して体調も悪かったので午後から行ってきた。 東京駅の八重洲口からまっすぐ歩いてったら、途中で「Perlが〜Pythonが〜」という話をする人たちの集団がいたので付いていったら着きました。

いろいろ

  • ライブコーディングのときとかに見えないので前に座った方がお得
  • ぼっちでも意外とちゃんと楽しめる
  • 知らないことが多くて笑いどころをいくつも逃した
  • telnetが台湾ですごいらしい
  • Rubyを広めること」を使命とする会社があることに驚いた
  • 登壇者全員話すの超うまい
  • 江渡浩一郎さんの特別講演がとにかくすっごい良かった。

まとめ

モチベ高まるのでたまにはこういう大きい勉強会行くのもいいなと思いました。

優しさ

素晴らしいコメントだと思いました。

Ruby on Railsはプログラミングではない! | それでも人は夢を見る

ほとんどの初心者は君が思ってるような疑問にぶち当たらないしそれだけでも才能あると思うよ。まずはRubyの基本的な文法とSQLを書けるようになってはどうか

2015/11/03 21:55

ほとんどの初心者は君が思ってるような疑問にぶち当たらないしそれだけでも才能あると思うよ。まずはRubyの基本的な文法とSQLを書けるようになってはどうか - talny のブックマーク / はてなブックマーク

ブログ記事を書いた人も、けっこう叩かれてるけどコメントでちゃんとツッコミ受け入れて反省してるし立派だと思う。見習いたい。 テックアカデミーのブートキャンプは高すぎだと思う。