サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
cakephper.hatenadiary.org
ApacheやNginxとopensslのバージョンを指定するとおすすめの暗号スイートなど、SSL設定ファイルを表示してくれるMozillaのサイトがあります。 https://mozilla.github.io/server-side-tls/ssl-config-generator/ これを使えば安全な暗号スイートのみを使ってる設定などが簡単に生成されますので、この通りに指定すれば良いです。 Apacheの場合はデフォルトでは暗号スイート設定の記述はなかったと思いますが、下記の3つは表示通りに指定しておくのが良いかと思います。 SSLProtocol SSLCipherSuite SSLHonorCipherOrder Oldを選択すると、古いブラウザにも対応してる暗号スイートを含めます。ただ暗号強度が弱いものが含まれるためサイトのアクセス傾向をみて古いブラウザのアクセスが無いのであれ
Laravel5で試していますがLaravel4でも問題なく動くと思います。 複雑なテーブル構成の場合、LaravelのEloquentなどで頑張ってリレーションの情報を定義して取得するのも良いのですが、書き間違えて違うidを参照してしまったり、メンテナンスする際に毎回確認するのも面倒なので、複雑なテーブルはView Tableにして参照することにしました。 これなら、View Table用のモデルファイルを作ってselect一発で情報が取得できます。その代わり、Lazy Loadingが使えずにjoin結果全てを取得してしまいますのでご注意を。 テストでも利用したいのでマイグレーションで管理することにしました。 下記のように、foo_barというView Tableを作成します。 ファイルは、 database/migrations/2015_07_31_000000_create_fo
CakePHP2で、CASEやCONCATなどを使ってテーブルに存在しないフィールド名でソートを行う場合、例えば下記のようにすると思います。 <?php $params = [ 'fields' => ['CASE WHEN User.age >= 20 then 1 else 0 END AS adult'], 'order' => ['adult DESC'] ]; find('all', $params); 通常のfindであれば問題ないですが、ページングのorderでこのフィールドを指定しても効いてくれません。 このような場合は、モデルのバーチャルフィールドを利用します。 <?php //コントローラの中でUserモデルを利用 $this->User->virtualFields['adult'] = 'CASE WHEN User.age >= 20 then 1 else 0
1995年に出版された村井 純教授の「インターネット」という書籍を読みました。 古い本ですが、色々な気付きが多く楽しめました。書籍「Unixという考え方」と同じような感覚。 継続的セキュリティテストサービスVAddyのプロジェクトリーダになってから私の考え方をメンバーに共有することが多くなってきました。今のこの考え方は、この15年ぐらいの時代の流れをずっと見てきて、それらの蓄積から来てるんだなと自分で感じ、それらをもっとうまく言語化してメンバーと共有したいと思っていました。 その中で一番強い影響を与えたインターネットというものの本質や哲学をうまく書いてある書籍が読みたくなり、この書籍を購入してみました。 この書籍の面白いところは、インターネットの歴史を作ってきた人からそれが学べる点です。グローバル視点が少なかったボードメンバー達に、日本だけでなく英語圏以外の地域のことも考えて活動してきた点
CloudFrontを導入する際にCNAMEを付けて、該当FQDN全てCloudFront経由の配信にする方法が一般的かと思いますが、今回は画像やjsなど特定ファイルのみCDN対象としたかったので、その設定方法をメモ。 Apacheのmod_rewriteを使い、下記のように設定 RewriteCond %{HTTP_HOST} ^example\.com$ RewriteCond %{HTTP_USER_AGENT} !^Amazon\ CloudFront$ RewriteRule ^(.*)\.(png|js|jpg|gif|ico)$ http://xxxx.cloudfront.net/$1.$2 [NE,R=302,L]これで、example.comにアクセスすると、画像やjsのみxxxx.cloudfront.netにリダイレクトされてCloudFrontから配信されます。
CakePHP3を触り始めています。Cake3からfind()の結果がオブジェクトになりました。 Cake2までは配列だったのでpr関数で見ても問題なかったのですが、オブジェクトになるとprは辛くなります。 CakePHP3からはdebug関数を使うと下記のようにリレーション先のデータも確認できるようになります。debug関数はcakephpが標準で用意しているグローバル関数です。CakePHP2にもあります。 debug( $this->Users->find()->contain(['Bookmarks'])->all() ); Users hasMany Bookmarksの状態でfindすると、下記のようなデータがdebug()を通して確認できます。 Usersオブジェクトの中にitemsフィールドがあり、その中身が下記になります。 リレーション先のエンティティオブジェクトがboo
CircleCIのブログに、「Developers Matter: New Relic IPOs」という記事がありました。 2011年当時、投資家から開発者向けのサービスで稼ぐのは難しいと言われたが、最近はNewRelicのIPOもあって、開発者向けのツールやサービスが注目されるようになった。これはまだ始まりであって、CircleCIのようなサービスがどんどん出てきてビジネスとして成功していくだろう、とのこと。 必要なものは自分たちで買って構築して運用してというスタイルから、良いツールをうまく運用してくれるサービスを使って組み合わせる時代になってきました。やはり、メインビジネス以外のところを自前主義でがんばったとしても効果は限定的ですし、運用コストもかかるし、時代の流れについて行くのが難しくなってきているからでしょう。 私が関わっている継続的セキュリティテストサービスVAddyも同じ開発者
CakePHPアドベントカレンダー2014の2日目の記事です。12/1に @K1LoWさんが突然アドベントを始めたので乗り遅れないように2日目を担当します。まだアドベントカレンダーは空いているので皆様も是非。 そうそう、12/10にCakePHP2実践入門が電子書籍として発売されます。紙の本を出してから2年ぐらい経ちますが、これからCakePHP2を始める方には良いかなと思います。 http://gihyo.jp/news/nr/2014/12/0101 CakePHPのAuthコンポーネントを使うと簡単に認証機能が追加できます。詳細は日本語チュートリアルをご覧ください。 一般的なIDとパスワードを使った認証ですと、emailなどの共通したIDのシステムでパスワード使い回しのユーザがいる場合に標的になる可能性があります。これを防ぐために最近では2要素認証を導入しているところが多くなりました
最近リリースした継続的セキュリティスキャンサービスVAddy(バディ)の話です。 http://vaddy.net VAddyのプロモーション動画はこちら。 1年前ぐらいにVAddyのざっくりしたコンセプトはあって、 どの方向で行くべきか、どのような世界を目指すべきかという議論を散々やってました。 まだその頃には名前がなくて、security, scan, test, Continuousなどの文字から何かサービス名を考えていました。 でも全然しっくりくる名前が出なくて2ヶ月ぐらいしたころには、とりあえず住んでる地名(Chihaya)でも良いんじゃない?とか冗談がでる始末。 2ヶ月ずっと考えていた末に出たのが、VAddyでした。 Vulnerability Assessment is your Buddy(脆弱性診断はあなたの相棒)の省略形です。 VAddyの言葉が浮かんだ時はすごく興奮し
PHPカンファレンス関西2014に参加し、LTで5分の発表を行いました。 現在、VAddy(http://vaddy.net)というSaaS型の継続的Webセキュリティ診断サービスを開発していて、そのコンセプトを発表しました。VAddyという名前を初めて外部に公開したことになります。 このサービスの目標は、開発初期からリリース後まで継続的にセキュリティテストを自動で行い、開発者が安心してリリースできる世界を作ることです。CIに組み込んで使うエンジニアのためのサービスです。 リリース直前にセキュリティ検査をして大量に脆弱性が見つかった場合、リリースできなかったり、根本の対応策ができずリリース後に不具合が発生してしまったり、教育するタイミングを失って何度も脆弱性を出してしまったり、という問題を解決できたら良いなと思っています。 共同開発者の金床さんが仕組みを少し解説しているページがあるので、興
Twilioで、受けた電話を他の電話に繋ぐとき、Call命令を使います。 https://jp.twilio.com/docs/api/twiml/dial このとき、通話者同士の動作によってステータスが変わり、Dialで指定しているactionのurlにステータスの状態が通知されます。電話を切った時とタイムアウトの時に通知のリクエストがサーバに飛んできます。 Dialのアクション指定はこのようにします。 どの動作の場合に、どのような通知になるか不明だったので実際に実験しました。これだけあれば、次の動作やログに何を記録した方が良いかなど判断できると思います。 これだけ見れば、電話が通じなかったのか、通話した時間、通話上限時間に達したのかが判断できると思います。 発信者が転送コール音中に電話を切った場合 DialCallStatus : no-answer CallStatus : comp
CakePHP2からはPDOを使ってDBアクセスするようになりました。PDO(mysql)では、デフォルト設定でデータをfetchするとint型のカラムでもstring型として結果が返ってきます。CakePHPもこの影響を受けており、jsonデータなどに変換する際や、型を厳密に扱いたい場合に影響がます。(CakePHP1では、PDOを使っていませんがintカラムはstringで返ってきます) この問題を解決するには、PHP5.3以上の環境でPDOのPDO::ATTR_EMULATE_PREPARESをオフにすれば良いです。PDOがmysqlndドライバを利用することが前提なのですが、PHP5.4からはデフォルトでmysqlndドライバが利用されるので大丈夫です。今回はPHP5.4の環境で検証しました。 PHP5.3ではPDOがmysqlndドライバを利用するためにコンパイルオプションを指定
FukuokaPHP第7回 1周年記念というめでたい日に、Twilioという電話APIサービスを使ってPHPから電話をかけたり、受けたりする話をしてきました。 fukuokaphp7 PHP x twilio from ichikaway 当日のUstreamの動画はこちら http://www.ustream.tv/recorded/33479457 懇親会は自分がよく行く舞鶴のビールバーでした。 クラフトビール 福岡 GASTRO PUB ALES 伊勢角屋ペールエールが美味しかったです。飲み干してもう無いけど。 Fukuoka.phpを1年前にAkase244さんと立ち上げてスタッフ5人ぐらいで楽しくやってきました。2年目もこんな感じで楽しくやっていきたいですね。 下記は、Fukuoka.phpの立ち上げのきっかけになったツイートです
UNIXという考え方―その設計思想と哲学という本を読み終えました。 原著のタイトルはThe Unix Philosophyです。 これは1996年に出版された古い本ですが、Unixの考え方を通して、良いソフトウェアとは何かが分かる良書です。150ページほどしかないのですぐに読み終わります。 3月に大阪に行った時に、なんだか無性にこの本が読みたくなって、梅田の本屋で買って読んでました。 言っていることは、大体こんな感じ 小さく、シンプルに保つ 小さな機能を集めて、大きなシステムを構成する(柔軟さを持ったまま) 出力はコンピュータが処理できるように 最適化や速度よりも移植性 特に移植性の箇所が面白かったです。 "多少遅く動作しても、いつでも他の環境に乗り移るように移植性を持って作っておく方が良いこと"が印象的でした。 いま、遅くても次に新しいマシンができたら解決してしまう可能性が高いから。だか
あるプロジェクトでCakePHP1.2を使っていたのですが、そろそろサポート期間も終わりそうな気がしたのでCakePHP2.3の最新版にアップデートしました。 サイトは月に数百万PVぐらいの規模で、DBテーブル数は80ぐらい、それに加えてViewテーブルやストアドプロシージャを使ってます。これを3年ぐらい前のさくらの専用サーバ1台でさばいてます。(Xeon 2コア、メモリ4G、Apache, mod_php(5.3), MySQL構成) CakePHP2からモデルのレイジーローディングなども入ってコア自体も効率化されたため、パフォーマンスは上がるだろうなとは思ってました。 実際に本番サーバにデプロイしたところ、CPUのロードアベレージが半分ほどになりました。 週単位のグラフを見ると、リリース前はピークが200ぐらい、平均100ぐらい(100はtopコマンドなどで見るロードアベレージ1と同じ
CakePHP1.2, 1.3, 2.xのPaginatorコンポーネントに脆弱性があり、最悪はSQLインジェクションが起こる可能性があるとのこと。 http://bakery.cakephp.org/articles/markstory/2013/04/28/security_release_-_cakephp_1_2_12_1_3_16_2_2_8_and_2_3_4 早急にアップデートすることをおすすめします。 各バージョンの最新版はgitのブランチから取得するか、下記から該当バージョンのzip/tarファイルをダウンロード可能です。 https://github.com/cakephp/cakephp/tags 探すのが面倒な人は、下記から直接ダウンロードを。 https://github.com/cakephp/cakephp/archive/2.3.4.zip https://
株式会社うるるで開催された、第1回CakePHP勉強会で発表してきました。 今回のお題は、「エンジニアとデザイナーの協業」でした。 デザイナー向けというのは、実は3回目ぐらいなので何を話そうかなと悩んでました。悩んだ末に、プログラマがどこまでデザイナに優しいCakePHPにカスタマイズできるかやってみようというストーリにしました。 CakePHPのレールの外し方 (CakePHP勉強会@uluru 20130419) from ichikaway 一番言いたかったことは、「ルールは最後に自分たちで決める、決める上で何が正しいかはプロジェクトごとに違うので、世の中で正しいとか、これがCake流だとか、ベストプラクティスとか言ってるのに流されすぎない方が良い」ということでした。 CakePHPでも積極的にヘルパー使わないとか、レイアウトファイル使わないとか、Apache側のmod_rewrit
4/20にWAVE新宿で下記の講座を開催しました。 「フロントエンド技術をたかめたい・Webクリエイターのためのgithubで始めるgit講座」 〜黒い画面を使わずに、バージョン管理の基本を学ぼう〜 今回は、コワーキングスペース茅場町 Co-Edo(コエド)、マルチメディアスクール WAVE、株式会社コンテンツワン 、L15の4社主催での開催となりました。 20人ほどの参加者で、3時間ほどやりました。最初の30分でgitとgithubに関して紹介して、残りの時間でハンズオン形式で全員がgithubにpush/pullするまで行いました。 今回は、極力詳細の説明を省略して、とにかく使えるようになるまでを資料にしました。細かい話は質問が出るたびにしていくという感じでした。質問が活発だったので楽しかったです。 GUIクライアントとして登録すれば無料で使えるSourceTreeを使い、github
CakePHP1.3からコアデベロッパーになったMarkStoryさんのインタビュー動画が公開されてます。 http://twit.tv/show/floss-weekly/244 動画はダウンロードできます。 また、音声のみでもダウンロードできるので、それをiPhoneに入れて聴いてました。 彼の人柄が良く分かる面白いものになってます。彼は芸術系のカレッジを出てイラストレータ -> Webデザイナー -> プログラマーになった人。そんなバックグラウンドにも触れられています。 英語のみの1時間のものですが、すごく面白かったので是非聴いてみてください。 今年のCakeFestはやはり日本が有力候補っぽいですね。この中でも語ってました。
CakePHP 1 to 2 Migration tips 100 from ichikaway まぁ、100個も紹介する時間は無く、31個まで。残りはどこかで。。。。 ちなみに表紙の写真は、自宅から徒歩10分ぐらいのところにある海。 福岡良いよ、福岡! 今回の会は茅場町のコワーキングスペースCo-Edoで行いました。 会が始まる前からビールが投入され、質疑応答が活発なよい会になったと思います。 Co-Edo良いよ、Co-Edo!
や、、、奴が帰ってきたぜ! CakePHP1の頃に一度は解決した問題、また別の場所で勃発しました。。。 「HABTMの中間テーブルがAppModelオブジェクトになってしまう問題の対応」 今回は、HTBTMを持ってるモデルでfind()を実行して(recursive=1)、その後に別の場所で中間テーブルのモデルをClassRegistry::initで取得してメソッドを実行したら、そんなメソッドありませんというエラーがでて、何故かそれがAppModelクラスのインスタンスだったという流れ。 デバッグにはかなり時間がかかりましたが、原因を特定しました。 まずは結論から。 今回もHABTMのwithで指定し忘れてたのが原因だったので、前回と同様に、withキーに中間テーブルのクラス名の文字列を入れて対応完了。 <?php class Division extends AppModel { va
infinitas-cms.org というCakePHP製CMSを開発している @dogmatic69 さんが、すごいものを開発してました。 なんと、SQL文をペーストすると、CakePHPのコードを生成するものです。 http://dogmatic69.com/sql-to-cakephp-find-converter コードは3パターン出力されます。オプションを選ぶと、ClassRegistry::init経由での呼び出しパターンとか切り替え可能です。 findのオプションで指定する方法 find('all', $params)みたいなパターン Modelのコードを出力。カスタムfindメソッドを生成するパターン Paginationコンポーネントで指定するパターン バーチャルフィールドなども考慮して出力するという素晴らしい仕様! たとえば、下記のようなSQLを貼り付けると selec
CakePHP2.3から、モデルのバリデーション定義で必須項目にしているフィールドには、Viewのinputタグにrequrired属性が追加されるようになりました。 つまり、下記のようなinputタグが出力されるということです(一番最後のrequired=の箇所) <input name="data[Contact][name]" maxlength="50" type="text" id="ContactName" required="required"/> これがあると、最近のブラウザではsubmit前に下記のような表示が出てPOSTできないようになります(firefoxの例) これがあれば、Javascriptを使ったPost前のバリデーションチェックが少し楽になると思います。 ソースコードはまだ読んでませんが、どうも動きを見ると、allowEmptyがfalseの場合にこの動作に
今回は、ComposerでインストールしたPHPUnitをCakePHP2から利用する方法です。 Composerのインストール方法は昨日書きました。 「Composerを使ってPHPUnitをインストール」 さて、方法はいろいろとあると思いますが、今回はCake2が元々持っているTestShellクラスを継承して対応します。 まずは、下記の場所にファイルを作成します。 app/Console/Command/MyTestShell.php <?php /** * ComposerインストールしたPHPUnitをロード **/ require_once APP . DS . 'Vendor' . DS . 'PHPUnit' . DS . 'autoload.php'; /** * オプション項目 * Apache側で設定していた環境変数をshellで利用できるようにセット **/ //
PHPUnitはpearなどで入れることも出来ますが、ほかのPearライブラリと同一フォルダにインストールされてしまうため管理しにくいし、チームの各自でPearインストールをしてもらうとバージョンも異なる可能性もあるので避けたい。 必要なファイルだけをGitで管理してチーム全体で共有するために、Composerを使ってインストールしてみました。 まずはインストールしたいディレクトリに移動 cd app/Vendor そこに、composer.jsonというファイル名で下記の内容を記述 { "name": "phpunit", "description": "PHPUnit", "require": { "phpunit/phpunit": "3.7.*" }, "config": { "vendor-dir": "PHPUnit" } }composerをダウンロード wget http:
find . -type f -name "*.php" -exec php -l {} \; ctpファイルの場合 cd View find . -type f -name "*.ctp" -exec php -l {} \;
Cake1.2からCake2に乗せ換えしていてはまった話。 エラーログに下記のようなメッセージが出てうまく表示できない場合、コントローラのresponseオブジェクトが存在しないのが原因。$this->response->body()をCakeのコアコードで呼び出すのでその時にresuponseオブジェクトが無いからメソッド呼び出しエラーとなる。 Fatal Error (1): Call to a member function body() on a non-object 理由は、Controllerのコンストラクタを下記のように記述しているからでした。。。。 function __construct() { parent::__construct(); } Cake2からはコンストラクタにrequest,responseオブジェクトが渡されるのでそれを考慮しないといけない funct
別記事「PHPMatsuriの裏側」はこちら http://d.hatena.ne.jp/cakephper/20121229/1356760604 2012年11月3日〜4日にかけてPHPMatsuri2012福岡が開催されました。 http://www.phpmatsuri.net/2012/ 楽しそうな人たち 最近やっと全ての残タスクが終わったのでブログ記事を書きます。実はイベント後の残タスクをこなすのが一番大変で、やる気の維持も大変でした。。。 PHPMatsuriは今年で3年目の有料イベントで、24時間スペースを開放して夜通しで何かを開発するハッカソン形式を取っています。 初日は招待講演などがあり、翌日はハッカソンの成果を発表するコンテストとなっています。 PHP Matsuri 2012 発表資料やブログのまとめ http://togetter.com/li/402628 去年
イベントの内容は参加者の参加報告が色々とあがっているので、私はイベントの裏側を紹介しようと思います。 去年まではGoogleグループベースのMLで議論をして、PHPMatsuriのサイトとPaypal決済連携機能も自前で用意してやっていました。 今までの問題点として、MLだとメールに気付きにくかったり読んでるのかどうかわからない点、自前のサイトを用意する負荷、Paypal連携での問題(主にアカウントロックがかかり本人確認のプロセスが不明で負荷が高い)、などがありました。 今年は、Facebookグループによる議論、Candycaneを用いたチケットベースのタスク管理、Githubを使ったサイト構築、イベントアテンド(ATND.org)でのチケット販売に切り替えました。それぞれの利点やTipsを紹介します。 1点今までと変わらない点として、予算管理や経費管理などドキュメントはGoogleスプ
次のページ
このページを最初にブックマークしてみませんか?
『cakephperの日記(CakePHP, Laravel, PHP)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く