カテゴリー: 本

君に成功を贈るを再読

中古本屋で社会人になった時に会社からプレゼントされた本に再会。
2年目に後輩に譲ってからしばらく忘れていた。
当時も読んで色々思うところがあったけど30歳になって
改めて読むとこの本の凄さがよりわかった。

引き寄せの法則とか色々と出版されているけどそういった
内容はすでに本書の中によりわかりやすく書かれていて感動した。

もともと読書の習慣がなかった自分が本を読むようになったのも
この本がきっかけだったような気がする。

多分自分一人では手に取ることが無い本だったと
思うのでプレゼントして頂いたことを改めて感謝。

いまだに「腹を練る」が出来ていないので鍛錬していきたいw

中村天風

未来を発明するためにいまできること スタンフォード大学 集中講義II読んだ

ティナ・シーリングの
「未来を発明するためにいまできること スタンフォード大学 集中講義II」
読んだ。

■目次

はじめに アイデアは安いのではない……タダなのだ

第1章 革命を起こす
リフレーミングで視点を変えよ

第2章 蜂を招き入れる
多様なインプットが革新を生む

第3章 積み上げ、積み上げ、積み上げ、ジャンプ!
アイデアは永遠に止まらない波

第4章 忘れられた顧客カード
観察力を発揮していますか?

第5章 机の王国
クリエイティブな空間がクリエイティブな仕事を生む

第6章 ココナッツを思い出す
プレッシャーをアイデアの触媒にする

第7章 猫のエサを動かす
フィードバックはゲーミフィケーションで

第8章 てっぺんのマシュマロ
チームがはまる落とし穴

第9章 早く動く、突き破る
失敗は正しくやり直すチャンスだ

第10章 魔法の靴を履く人、履かない人
できると思ったらできる

第11章 内から外、外から内へ

感謝の言葉

■メモ
イノベーションエンジン
知識は想像力の燃料
想像力は知識をアイデアに変える触媒
姿勢はイノベーションエンジンを動かす起爆剤
資源・環境・文化
リフレーミング
パワーズ・オブ・テン

ブレインストーミングのやり方
観察力を高める
空間を作る
切羽詰まった時の創造性
創造性を評価するフィードバック
チームプレイヤーとしてのスキルを身につける
失敗はもっと賢くやり直せるチャンス

もともと前作が好きだったので読んでみたけど、
これは定期的に読み返す必要がある本。

■前作

メモ:SymfonyではじめるDIを読んだので実際に写経した。

vol.71は楽しい記事が多いなぁ~。
WEB+DB PRESSでSymfonyではじめるDIを読んだので実際に写経する。

■まずphpのバージョン確認(Composerの兼ね合いで。。)

$ php -v
PHP 5.3.3 (cli) (built: Jul  3 2012 16:40:30)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

■Composerのインストール

$ curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
Some settings on your machine may cause stability issues with Composer.
If you encounter issues, try to change the following:

Your PHP (5.3.3) is quite old, upgrading to PHP 5.3.4 or higher is recommended.
Composer works with 5.3.2+ for most people, but there might be edge case issues.

Downloading...

Composer successfully installed to: /path/symfony_DI/composer.phar
Use it: php composer.phar

バージョンで文句言われたけど無視。

■Composer用の設定ファイル作成
$ vim composer.json

{
        "require":{
                "symfony/dependency-injection": "2.1.*",
                "symfony/config": "2.1.*",
                "symfony/yaml": "2.1.*"
        }
}

 

$ ll
total 632
drwxrwxr-x 2 takeuchi takeuchi   4096 Oct 31 15:21 ./
drwxrwxrwx 8 takeuchi takeuchi   4096 Oct 31 15:18 ../
-rw-rw-r-- 1 takeuchi takeuchi    118 Oct 31 15:21 composer.json
-rwxr-xr-x 1 takeuchi takeuchi 631264 Oct 31 15:18 composer.phar*

■依存パッケージの取得

$ php composer.phar install
Loading composer repositories with package information
Installing dependencies
  - Installing symfony/dependency-injection (v2.1.3)
    Downloading: 100%

  - Installing symfony/config (v2.1.3)
    Downloading: 100%

  - Installing symfony/yaml (v2.1.3)
    Downloading: 100%

Writing lock file
Generating autoload files
$ ll
total 644
drwxrwxr-x 3 takeuchi takeuchi   4096 Oct 31 15:23 ./
drwxrwxrwx 8 takeuchi takeuchi   4096 Oct 31 15:18 ../
-rw-rw-r-- 1 takeuchi takeuchi    118 Oct 31 15:21 composer.json
-rw-rw-r-- 1 takeuchi takeuchi   4939 Oct 31 15:23 composer.lock
-rwxr-xr-x 1 takeuchi takeuchi 631264 Oct 31 15:18 composer.phar*
drwxrwxr-x 4 takeuchi takeuchi   4096 Oct 31 15:23 vendor/

■依存のないクラスの実装とかそれ以降のコード
$ vim initial.php

namespace App{
         class Controller{
                private $memberRegistration;
                private $router;
                private $templating;
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function registerAction(){
                        echo __METHOD__.PHP_EOL;
                        $memberData=$this->getRequestData();
                        $this->memberRegistration->register($memberData);
                        $html=$this->templating->render('register');
                        return $html;
                }
                public function setMemberRegistration(\Domain\MemberRegistration $memberRegistration){
                        echo __METHOD__.PHP_EOL;
                        $this->memberRegistration=$memberRegistration;
                }
                public function setRouter(\App\Router $router){
                        echo __METHOD__.PHP_EOL;
                        $this->router=$router;
                }
                public function setTemplating(\App\Templating $templating){
                        echo __METHOD__.PHP_EOL;
                        $this->templating=$templating;
                }
                private function getRequestData(){
                        return array();
                }

        }

        class Templating{
                private $router;
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function render($templateName){
                        echo __METHOD__.PHP_EOL;
                        $url=$this->router->generateUrl('test');
                }
                //セッターインジェクション
                public function setRouter(\App\Router $router){
                        $this->router=$router;
                }
        }

        class Router{
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function generateUrl(){
                        echo __METHOD__.PHP_EOL;
                }
        }
}

namespace Domain{
        class MemberRegistration{
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function register($memberData){
                        echo __METHOD__.PHP_EOL;
                }
        }
}

namespace{
        require_once 'vendor/autoload.php';
        use Symfony\Component\DependencyInjection\ContainerBuilder;
        use Symfony\Component\DependencyInjection\Reference;

        $container=new ContainerBuilder();

        $container->register('app.controller', '\App\Controller')
                ->addMethodCall('setTemplating', array(new Reference('app.templating'),))
                ->addMethodCall('setRouter', array(new Reference('app.router'),))
                ->addMethodCall('setMemberRegistration', array(new Reference('domain.member_registration'),));

        $container->register('app.templating', '\App\Templating')
                ->addMethodCall('setRouter', array(new Reference('app.router'),));

        $container->register('app.router', '\App\Router');

        $container->register('domain.member_registration', '\Domain\MemberRegistration');

        $controller=$container->get('app.controller');
        $controller->registerAction();
}

■実行結果

$ php initial.php
App\Controller::__construct
App\Templating::__construct
App\Router::__construct
App\Controller::setTemplating
App\Controller::setRouter
Domain\MemberRegistration::__construct
App\Controller::setMemberRegistration
App\Controller::registerAction
Domain\MemberRegistration::register
App\Templating::render
App\Router::generateUrl

このあとはYAMLにしたりダンプで再利用とか。

■参考URL
PHPの外部ライブラリの管理にComposerを使う

効率的なWebアプリケーションの作り方のメモ


最近「効率的なWebアプリケーションの作り方」読んで写経してます。
目次

■Part1 MVC開発の基礎知識

  • 1章 MVC開発の概要
  • 2章 オブジェクト指向

■Part2 フレームワークを利用する利点

  • 3章 レガシーコードの欠点
  • 4章 リファクタリング・デザインパターン実践
  • 5章 フレームワークを活用する

■Part3 モダンPHP Webアプリケーション開発

  • 6章 アプリケーション開発を始めるための準備
  • 7章 データベースとエンティティ
  • 8章 コントローラとビュー
  • 9章 フォームとデータベース

■Part4 機能の作成と実装のパターン化

  • 10章 ユーザ登録
  • 11章 イテレーション
  • 12章 管理画面
  • 13章 コマンドラインスクリプト
  • 14章 ユニットテスト
  • 15章 機能テスト

Part1、Part2はオブジェクト指向、フレームワークに関することがすごく
コンパクトにまとめられててとってもいいと思った。

ここにまとめられていることはオブジェクト指向の分厚い本で出てくる内容なので
先にこの本で概要を見てから分厚い本に取り組めばより理解しやすいんじゃないかなと思う。
普通のPHPの本では触れられていないところが記載されている感じ。

Part3からはSymfony2を使っての開発を一通り行う構成。
この本が出た当初のSymfonyのバージョンは2.0.11だけど9月に2.1.2が
出てるので公式サイトからそのまま落とすと設定ファイルの内容が違ったりして
テンパる。
本に沿って写経するなら公式サイトから2.0.17のstandardをダウンロードする。

Download

そのほかにPart3を現在写経するにあたって問題がありそうなのは、
7章のデータフィクスチャのところ。
本に記述してあるやり方では入らなかったので公式サイトに書いてある
やり方で設定する必要がある。
DoctrineFixturesBundle
このページでも2.0バージョンを選択しないとやり方が違うので注意。

あとは8章のViewを作っていくところで、サンプルのソースコードを
そのまま入力するとまだ読み込んでいないパラメータとかを使っていて
エラーがでるので、画面のエラーメッセージを見つつ修正していく必要があった。

あとは技術評論社のサポートページからサンプルソースを落として
見比べながらやっていけばOK。

ほかの書評記事でも書いている通り初心者がSymfony2を覚えるための本では
ないなーという感じ。
PHPでDDDで組むための参考にはちょうどいいと感じた。

まだ習得できてないけどね。

携帯電話向けWebサイトに対する・・・

これから携帯がらみのシステムをやりそうなので徳丸 浩さんの

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

をちょっと読んだ。

以下すっごい簡単なメモ

携帯電話向けWebサイトに対する脅威と対策のまとめ

○簡単ログインに対する不正アクセス

携帯IDによる認証をやめ、IDとパスワードによる認証にする。オプションでクッキーによる自動ログインを実装する

○RefererによるセッションID漏洩

以下のいずれかを実施する
・クッキーによるセッション管理に移行する
・外部サイトにリンクしない
・外部サイトにリンクする際にはクッションページをはさむ

○その他セッションID漏洩

利用者がメールでURLを教えることには根本的な対策はない

○ログイン前のセッションIDの固定化

ログイン前にはセッションを有効化しない

○ログイン後のセッションIDの固定化

ログイン直後にセッションIDを変更する

今のところ完璧な対策は無さそうだけどできる限りの対策はしようと言う事で。

詳細は本で・・・。すごくよくまとまっていて分かりやすいので全部読むぞ!

 

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩
ソフトバンククリエイティブ
売り上げランキング: 1746

会話から始めるコーチング―最強のチームをつくるコミュニケーション力

24歳とかで初めて部下を持ったときにすっごい悩んで読んだ本が出てきたので紹介。

Read More 会話から始めるコーチング―最強のチームをつくるコミュニケーション力

30分で英語が話せる 読了。

30分で英語が話せる

30分で英語が話せる

posted with amazlet at 11.05.23
クリス 岡崎
ダイヤモンド社
売り上げランキング: 13

ここのサイトで見たのと、タイトルに釣られて購入。

1時間以内で読み終わる。

目次

【第1章】あなたの知っている「700語」で英語が話せる
【第2章】「6つの発音」を直すだけで英語が通じる
【第3章】文法で大切なのは「1つ」だけ
【第4章】楽しみながら英語を学ぶ方法
【第5章】最新の「700語」をチェックしよう

この本のコンセプトは↓これ

正しさも大事だけれど、正しい英語にこだわって、結局、話せないよりは、
ちょっとくらい正しくなくても、30分で英語が話せるようになっちゃったほうがいい!

文法的な正しさを求めない勇気を!!!!

勇気がもらえる1冊。

Hello! Can you help me?
Just few minutes.
I need to speak to English native speaker today,
as my homework from my English school.

「たった6つの発音で英語が話せる」音声