「Laravelエキスパート養成読本」を読んだ

Laravelエキスパート養成読本を @localdisk さんから頂いたので読んでみました。

はじめに

Laravel は一応気にはなっていたけど、まともに触ったことがなくて DB から SELECT する程度のやつで軽く触ってみたくらいしかないです。 あとは、魔法少女ネタとか、CakePHP を使ってた人達がこぞって Laravel 使いだしてたりしてるなーってのを眺めてた感じ。

なので、主に Chapter2 と Chapter5 に期待して読みました。

Chapter 1

Laravel の歴史とか、情報サイトの話とか、ネットでよくある Hello World 的なサンプルが載っていて、流石にここで知らないコードでてこないだろうとか思いつつ読んでたけど、途中から名前付きルートとかの説明があってもうこの時点でまったく知らないコードが……

私が読んでる時点では公開されてなかったので普通にコマンドを叩いて Laravel 入れたけど、発売後には簡単に Laravel を試せる環境が公開されてるはずなので、環境自分で作らなくても Laravel 試せるのは良さそう。

Chapter 2

基礎の Chapter 2 の時点でサンプルアプリのコードを凄く細かく説明していて、もうここを読んだだけでも結構お腹一杯。 DB の使い方とかも最初にちゃんとした書き方の説明をして、そこからもっと簡単な書き方になってたり、View もベタベタに1ファイルにずらーっと書くだけじゃなくしっかりパーツ毎に分割してたりで、とりあえず簡単なアプリケーションならもう Laravel っぽく書けるんじゃないかって気分になります。 特にバリデーションエラーとか、ページ毎に <title> とかそういうレイアウト部分を変える方法とかの地味に気になる部分も書かれてるのは良かった。

サンプルアプリのデモが公開されているので、自分でサンプルアプリを動かす環境を作らなくてもソースコードを読みつつ動きを見れるのですが、私が見た時は誰かのイタズラで動かなくなってたので残念……

Chapter 3

IoCコンテナとか、ファサードといった、Laravel と言えばー? な機能の解説がコアのコード込みで簡潔に説明されていて分かりやすかった。

Eloquent は普通のクエリ実行から、リレーションやクエリスコープとか多分一通り説明されているので、とりあえず DB の使い方知りたくなったらここを見てみると良さげ。 ただ、私はまだ Eloquent すらあまり使いこなしてないので、まずは Eloquent の使い方を覚えて、ある程度 Laravel に慣れてきたら残りを再度読み直して見ようかなーと思います。

Chapter 4

リリースされたばかりの Laravel 5 新機能紹介! コマンドバス&ジョブキュー、フォームリクエスト、タスクランナーとか色々気になる機能が Laravel 5 から増えているらしいけど、Laravel 初心者の私にはちょっと難しいのでこの章も後でもう1回読まないとなー。

Special

Symfony / CakePHP / Zend Framework / Yii フレームワークの最新事情と PSR がさっくり紹介されてるのでとりあえず読んでおいて損はない感じ。

Chapter 5

簡単な REST API アプリケーションの作り方が分かりやすく綺麗に書かれているので、Chapter 2 と合わせてこれを読めば Laravel 始めるスタートダッシュが決めれる感じ。 ここまで読むと、他の章と合わせてルーティングの機能が色々説明されているので、どのフレームワークでも意外と機能があるけど使いこなせる気がしないルーティングに詳しくなってる気がするのも良かった。

さいごに

Laravel 初心者でも楽しく読めるところからスタートしつつ、Laravel らしい機能もちゃんと紹介されてて良かった。 PHP 初心者がここからスタートするのは難しいだろうけど、他のフレームワーク使ったことある人とかある程度 PHP が書ける人はこの本から Laravel 入門するのも良いんじゃないかと思います。

これから Chapter5 のサンプルコード読んで、Chapter2 と合わせて参考にしつつ、とりあえず Laravel 使ってます状態のコードをちゃんと Laravel っぽい書き方で書き直していきたい。

momonga.vim #4 に参加してきた

やっぱり会場が家から歩いていける場所だったので、momonga.vim #4 に参加してきました。

本編

特にやる事を考えてなかったのですが、ふとターミナルで Vim を立ち上げたら tabline の色がまったくでてなくて、どのタブにいるのかこれっぽっちも分からないことになってたのでこれを直すことに。

何のプラギン入れたせいなのか調べてたら、どうやら lightline.vim を入れると変になるということを突きとめたので、あとはソースコード読みつつハイライトの設定とかをちまちまと……
ではなく、ただ単に tmux で TERM の設定をしてなかったのが原因で256色表示されてなかっただけでしたorz

そんなわけで無駄に色々やったけど結局の所 Vim での成果はこれくらいで、後は一部の人が「進捗どうですか?」とかいいつつプレッシャーを色んな人にかけてたので、進捗ダメです的な画像を探したりしてた。

2次会

2次会は比較的最近できた気がするサイゼリヤで夕食を食べつつ、カラオケの時間までうだうだと。
ちなみにラブライブの話をしてたのは私です。話をしてたというかスクフェスをプレイしてました。

3次会

3次会は 19:00~05:00 までカラオケでした。10時間もカラオケ店にいるとか良く分からないし、初めての経験でした。
3次会ではアイドルマスターミリオンライブのラウメンとTwitterでなんやらしてたり、ラブライブ! スクールアイドルフェスティバルをプレイしたり、Vim 以外の進捗出してたりしました。

あ、あと vimrc 読書会に久し振りに参加したりしてました。

終わり

結局 Vim っぽいこと殆んどやらなかった気がするので、次回はもうちょっと Vim のなにかをやりたいなぁ。

Alfred Workflow for App Store をちょっとだけ使いやすくする

とある事情で Alfred の Workflow がまともに使えない状態だったのですが、最近それが解消できたので色々と Workflow を入れて使ってます。
その中に Alfred Workflow for App Store っていう App Store の検索ができる便利な Workflow があるのですが、これ良く見ると検索結果が中国なんですよね。

で、このままだと「テレbing」とか検索したくて入力しても結果がでてきません。

なので、ちょこっとだけ Workflow を弄って日本の App Store を検索するようにしちゃいます。
といっても下の画像のように、Workflows の Script Filter 両方ともcountry=cnになっているのをcountry=jpに変えるだけ。

これで、こんな感じに「テレbing」とか日本向けのアプリとかが検索にでるようになって便利。

Qiita に1年振りくらいに投稿してみた

前回 Octopress でブログ書く環境を用意するのが面倒だったのと、最近 Qiita がどうたら的なブログいくつか見かけたのを思いだしたので、1年振りくらいに Qiita に投稿してみた。

投稿したのはこれ。
zsh + tmux で端末に表示されてる文字列を補完する – Qiita [キータ]

久し振りに Kobito 使ってみたけど、リアルタイムプレビューは投稿前の確認に便利。
最近のだと Vim で編集したのを Kobito に渡せるとかもできるようになってるしブログ書くより楽かもしれない。

Octopress を最新にした

新しく買った Macbook Pro Retina (1個前のモデル…) で環境作ってみたら、iconvのあたりでエラーがでてrake generateとかなにもできなくなってしまったので、Octopress を1年以上振りに最新にしてみたら gem のバージョン上がって動くようになった。

この1年ちょっとの間に Octopress 以外にも色々ブログ書けそうなやつ沢山でてきてるし、Octopress なんとなく面倒なのでもっとシンプルなのに乗り換えても良いんじゃないかと思ってる。

momonga.vim #2 に参加してきた

なんか、会場が家から歩いていける場所だったので、先週の日曜日に開催された、momonga.vim #2 に参加してきました。

昼食

他の人みたいに特に書くことはないです。

本編

自分のやりたい事をテキトーにやる感じのイベントだったので、Vim でぷよぷよやったりする人がいるのを横目に私は NeoBundle の Lazy とかの設定をちまちまやってました。

2次会

武蔵境駅北口にある温野菜ってお店で野菜しゃぶしゃぶ&ソフトドリンクメインの健康的な2次会でした。 ただ、この店食べ放題なのに3回催促しても注文通ってませんでしたってことでなかったことになるので、Vim の話より店の話で盛り上ったようなw

全ては無に

しかし、家に帰って次の日に Macbook を開いたら SSD が逝ってしまったので momonga.vim でやったことは全てなかったことに。 明日コミットして github に上げればいいやとか思ってた自分がバカでした…… 自分の使ってるやつが Macbook Air 2012 + 東芝SSD と言う最近有名なやつだったので、バックアップとか気をつけとかないとなーと思っていたところでこれだよ。 一応保証期間内か調べてみたところ、噂通りの1年ちょっとで壊れたのでダメっぽい……

保証きれた頃に壊れるとか、とりあえず Apple は SONY に金を払え(違

そんなわけで今は何かやる度に CPU使用率が 100% になる Macbook Air 2011 で作業をしてるのですが、今だとどの Macbook を買うのがお勧めなんですかね? 調べていたら、Apple でカスタマイズしてメモリ8GBにした Air と、Retina Pro の最安値が同じというのを知って、Pro を使ってみるのも面白いんじゃないかとか思ったりしたけど、Retina Pro あんまり評判良くないので何となく不安だったり。 ただ、丁度来週に新しい OS がでるとか、Macbook Pro が発表されるとかされないとかで、今買うとなんとなく負けな気がするのが悲しい……

Mr.Reader の Theme を変更した

久し振りに Mr. Reader の テーマ一覧ページを見に行ったら、今使ってる Mr. Reminder Dark をベースにした Chad’s Perfect RSS というテーマがあったのでテーマを変更してみた。

ちなみに見た目はこんな感じに変わった。

既読・未読の区別が背景色でなく文字色で区別つけるようになったのが一番の違いかな?

Chef Casual Talks Vol.1 に参加してきた

Chef の Casual なイベントがあったので参加してきました。

久し振りのLT

普段勉強会であんまり発表しないのですが、今回のイベントは発表必須だったので、最近ちょこちょこやり始めた Mac の開発環境を chef で管理している話を話してきました。

スライドとかまともなの作ってなくて公開できないので、発表の時に使った cookbook を公開。

hamaco/chef-hamacbook · GitHub

多分 Ruby が入ってて rake コマンドが使えれば動くと思いますが、ある程度環境構築済みの状態からしか使った事がないのでもしかしたら何か足りなかったりするかも……

あと、完全に自分の使い易い環境構築するだけなので実行して後悔してもしりません。

感想

  • Casual っていうから軽い感じなのかと思いきや内容だいぶ濃かった
  • ピザでてくると思ってたのに弁当でてきてビックリ
    • 勉強会とかってピザ多いからピザ以外のがでてくるとなんとなく嬉しいよね
  • 発表したおかげで嵌ってた箇所が1箇所解決した
    • ついでに会話中に1個 TODO 気付いた

最近のiPad

  • キーボードの右下にある切り替えキーが地味に便利
  • Mr. Reader からはてブできるように設定した
  • メインのカレンダーアプリを Calendars に変えた

CakePHP のヘルパー設定で嵌った件

CakePHP 1.3で作られたウェブサービスをメンテナンスしてるのですが、先日ヘルパー部分でハマってしまったのでメモかねてエントリ。

まず前提として、cake/libs/controller/controller.php__mergeVars() を見ると分かるのですが、CakePHP はヘルパーとかを AppController と現在のコントローラーのプロパティをマージして使ってます。

なので例えば以下のように書けば Hoge と Fuga の2つのヘルパーが読み込まれます。

1
2
3
4
5
6
7
8
9
<?php

class PostsController extends AppController {
    var $helpers = array('Hoge');
}

class AppController extends Controller {
    var $helpers = array('Fuga');
}

で、ここで私が1つ勘違いしていたことがあって、私は AppController に書いたやつと現在のコントローラーに書いたやつ「だけ」が読み込まれると思っていました。
以下のように AppController に helpers プロパティがなかったら Hoge の1つだけが読み込まれると思っていたわけです。

1
2
3
4
5
6
7
8
<?php

class PostsController extends AppController {
    var $helpers = array('Hoge');
}

class AppController extends Controller {
}

しかし、実際は AppController の親クラスである Controller の helpers プロパティでいくつか設定されてるので、 Hoge, Session, Html, Form の4つのヘルパーが読み込まれるんですね。
これを知らなくて、 AppController に Fuga とだけ書いて暫く嵌ってしまいましたとさ。ちゃんちゃん。

CandyCaneのチケットの担当者を関係者のみに絞り込むプラグイン作った

Redmineのチケットの担当者を関係者のみに絞り込むプラグインと言う素敵なプラグインがあるらしいのですが、これがCandyCane に対応してなかったので CandyCane 版のチケットの担当者を関係者のみに絞り込むプラグインを作りました。

インストール方法

近いうちに普通に CandyCane の管理画面からプラグインインストールでいけるようになると思います。

(追記:2013-02-14 17:25) pull request がマージされたのでインストールできるようになりました。

デモ

これが

こうなる

Sequel Pro でも C-h がしたい!

Mac ユーザで Sequel Pro を使っている人なら分かってくれると思いますが、Sequel Pro でクエリ入力してる時に C-h 押すとヘルプがでてくるの勘弁ならないですよね。 そんな訳で KeyRemap4MacBook を使って C-h がバックスペースになるように設定してみました。

設定開始

まず KeyRemap4MacBook の Misc & Uninstall から private.xml を開きます。
なかったら $HOME/Library/Application\ Support/KeyRemap4MacBook/private.xml を作って下さい。

KeyRemap4MacBook-01

private.xml が開いたら中身を以下のような感じにします。

private.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0"?>
<root>
  <appdef>
      <appname>SEQUELPRO</appname>
      <equal>com.sequelpro.SequelPro</equal>
  </appdef>

  <item>
      <name>My keymappings</name>
      <item>
          <name>C-h to Backspace (SequelPro)</name>
          <identifier>private.app_sequelpro_control_h_to_backspace</identifier>
          <only>SEQUELPRO</only>
          <autogen>--KeyToKey-- KeyCode::H, ModifierFlag::CONTROL_L, KeyCode::DELETE</autogen>
      </item>
  </item>
</root>

private.xml の編集ができたら、後は XML を再読み込みして、今作った設定にチェックを入れるだけ!

KeyRemap4MacBook-02

これで Sequel Pro でも C-h で バックスペースが使えるようになりました。

Xperia GX買ってからしばらく経った

Portable Wi-Fi の2年縛りが切れて買い替えようと思ってた時に、スマホでも料金とか変わらないっすよってドコモショップの人が言ってたので Wi-Fi 端末の代わりに購入した。

良い所

  • Portable Wi-fi と比べてバッテリーの持ちが良い
  • 懇親会中とかのちょっとした時とかテザリング不要な時はそのまま使える
  • 充電がMicro USB

微妙な所

  • 回線切れてる時に通信しようとすると通信エラーでテザリングが切れる
  • iPhone と比べてバッテリーの持ちが悪い
  • アンテナ立ってるのに繋がらなかったりとか回線が結構不安定

まあおおむね満足かな?

iPadのRSSリーダーをMr.Readerに乗り換えた

今まで iPad では iPhone でも使っている Reeder を使っていたのですが、Nexus 7 とか他の端末をしばらく使っている間に Mr.Reader オススメ的なブログをちょこちょこ見ていたので乗り換えてみたらこれがすげー良い感じで、今年のベストアプリに入るんじゃないかってくらい使いやすい。

個人的な Mr.Reader の良いところはこんな感じ。

スクロールするだけで既読にできる

Mr. Reader 01

自分が Google Reader に登録しているのはニュース系のサイトとか Twitter みたいに件数が多くて流し読みするタイプのがメインなので気が付くと数千単位で未読が溜まってしまい、消化するのも面倒になって全件既読ばっかりしていました。

Mr.Reader はスクロールするだけで自動的に既読化することができるので、iPad の大きな画面でだいぶ快適にサクサクとフィードが消化できています。

記事のサムネイルが表示できる

これは、Android の NewsRob Pro でもあったのですが、記事中の画像が一枚サムネイルとして一覧に表示されるので、いちいち英語を真剣に読まなくても、興味ありそうな画像だったらスターをつけて後で見る運用がちょっと楽になってます。

ただ、目の移動が少なくなるように左側に表示してるんだけど、必ずサムネイルがでるとは限らないので記事によってタイトルの開始位置がズレてしまうのがちょっと難点。

表示モードを固定したまま記事の移動ができる

Mr. Reader 02

流し読みタイプのもの以外で意外と多いのが RSS に全文入ってなかったりして、実際のサイトに飛ばないといけないのがあるのですが、これも Mr.Reader なら WebView や Readability 等の表示モードが選べる上、鍵アイコンをタップするとフィード毎に表示モードを記憶してくれるので、一々記事タイトルクリックしてブラウザで見たり、スターを付けて Pocket に送ってからあとで見たりとかしなくて良くなりました。

そんなわけで

Mr.Reader がほぼ完全に自分の Google Reader の使い方にマッチしているのであまりにもライフハックで生きるのが辛い。

今まで消化するのが面倒で未読が万単位で溜まったりしてたのが、500 – 2000 程度をうろちょろするようになりましたとさ。

Fedora17 で SSH Server を自動起動させる

久し振りにFedoraを使ってみたらサービスの起動方法が変わっていてびっくりしたのでメモ。

普通に今まで通り /etc/init.d/sshd startとかやろうとしたのにファイルがなくて sshd の起動ができなかった。 ちょっと調べてみたら最近の Fedora は systemctl コマンドでその辺管理するようになったらしい。

起動

sudo systemctl start sshd.service

停止

sudo systemctl stop sshd.service

再起動

sudo systemctl restart sshd.service

自動起動

これは /etc/systemd/system から /etc/systemd/system/multi-user.target.wants とかにシンボリックリンク作ってるだけっぽい

sudo systemctl enable sshd.service

状態確認

sudo systemctl status sshd.service

こんな感じに表示されて自動起動が有効になってるか(enabled)とか色々分かるようになっててちょっと便利。

sshd.service - OpenSSH server daemon
          Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
          Active: active (running) since Sun, 13 Jan 2013 19:35:04 +0900; 2h 59min ago
        Main PID: 2242 (sshd)
          CGroup: name=systemd:/system/sshd.service
                  └ 2242 /usr/sbin/sshd -D

終わり

これ start とかが最後にこないので C-p とかで過去の出した後に編集するのが面倒で微妙に辛い。