サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
shimooka.hateblo.jp
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。サンプルコードを手直ししたものをgithubに上げてありますのでそちらもどうぞ。 GoF本における分類 構造+オブジェクト はじめに ここではDecoratorパターンについて説明します。 Decoratorとは「装飾者」という意味があります。そもそも装飾するというのは、基本となる物がありそこに様々な効果をもたらす要素を加えていく行為です。クリスマスツリーに飾りをつけるのもそうですし、アイスクリームにトッピングをすることもそうです。 Decoratorパターンも同様なイメージとして捉えることができます。つまり、基本となるものに対して様々な機能をひとつひとつ加えていき、あたかも装飾するかのようなイメージです。 たとえば
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。サンプルコードを手直ししたものをgithubに上げてありますのでそちらもどうぞ。 GoF本における分類 生成+オブジェクト はじめに ここではBuilderパターンについて見ていきましょう。 「builder」とは、「建築者」や「建設業者」の意味を持つ単語ですが、たとえば、家を建てることを考えてみましょう。最終的に建てられる家は、「どの様な順序で、どこに何を配置していくか」という「手順」と、「柱や壁、屋根に何を使うか」という「材料」によって大きく違ってきます。 Builderパターンは、この「手順」と「材料」を分けておき、同じ手順で異なるオブジェクトを生成させるパターンです。 たとえば ある条件によって作成するオブジェ
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。サンプルコードを手直ししたものをgithubに上げてありますのでそちらもどうぞ。 GoF本における分類 振る舞い+オブジェクト はじめに ここではIteratorパターンについて説明します。 「iterate」は「繰り返す」「反復する」といった意味ですので、「iterator」は「反復するもの」となるでしょうか。 名前から想像できるように、Iteratorパターンはオブジェクトに対する反復操作をおこなうための統一APIを提供するパターンです。 たとえば PHPで複数の値を含むリストを表現する場合、どの様にコードを記述していますか?おそらく、配列を使うことが多いのではないかと思います。 複数の値を含むリスト <?php
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。サンプルコードを手直ししたものをgithubに上げてありますのでそちらもどうぞ。 GoF本における分類 構造+オブジェクト はじめに ここではBridgeパターンについて説明します。 「bridge」とは「橋」の意味ですね。橋は川の両岸や島と島など、ある点とある点を結ぶ役割を持っています。 では、Bridgeパターンは、何と何を結ぶ橋なのでしょうか?早速、見てみましょう。 たとえば 何らかの処理を実装する場面を考えてみましょう。当然ですが、「何をするのか」は決まっていますね?しかし、「どうやって実現するのか」が色々考えられる場合があります。 たとえば、データのソート処理はその代表例と言えるでしょう。「ソートをする」とい
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。サンプルコードを手直ししたものをgithubに上げてありますのでそちらもどうぞ。 GoF本における分類 振る舞い+オブジェクト はじめに ここではStateパターンについて見ていきましょう。 stateという単語は「状態」の意味がありますが、Stateパターンは物ではなく「状態」をクラスとして表現し、「状態」ごとに振る舞いを切り替えられるようにするパターンです。 たとえば たとえば、部屋の照明を考えてみましょう。照明には、点灯している状態(オン)と消灯している状態(オフ)の2つの状態があることになります。照明の状態がオンの場合、当然ですが照明が灯っている、つまり「明かりが灯る」という動作をしていると言えます。逆にオフの
何だか訳の分からないニッチな案件ですが。。。 Cache-Controlヘッダがno-cacheな画像ファイルにFirefoxで直接アクセスした場合、LiveHTTPHeadersで確認すると2回リクエストが送信されてるんですよね。。。1回目は通常のリクエスト、2回目はFirefoxのタブに縮小版を表示させるための画像を取得するため(?)のリクエストっぽいんですが、2回リクエストが送信されているのでApacheのアクセスログにも当然2行残ります。 ちなみに、Chromeだと1回しかリクエストが送信されません。 で、こういう状況でFirefoxに2回リクエストさせない、かつ、毎回HTTP 200を返すようにするにはどうしたらいいか、ちょっと試してみました。 環境 サーバー CentOS 6.4 Apache2.2.29(src) クライアント Windows 7 Professional(6
Firefox57にアップデートした際にタブをuserChrome.cssを使ってFaviconize Tabっぽくしたのですが、58.0.1にアップデートしたところxulのidや構造が変わってしまったのか、また元に戻ってしまいました。 ということで、 Firefoxのタブバーを非表示にするまで…
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。 2006/11/23に株式会社秀和システムさんから発売された「PHPによるデザインパターン入門」(ISBN4-7980-1516-4)を執筆しました。 また、2009/09/14付けの絶版に伴い、Do You PHP?にて校正前の原稿テキストを公開していました。が、この度、Do You PHP?の閉鎖に伴い、はてダに移行しました。今回の移行で、校正完了間際の原稿に差し替えましたが、まだ誤字/脱字、説明不足の箇所もあるかも知れません。ご了承ください。 1章 デザインパターンの世界へようこそ デザインパターンって何? デザインパターンとは? オブジェクト指向 GoFパターン デザインパターンのメリット・デメリット デザインパターンを使うメ
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。サンプルコードを手直ししたものをgithubに上げてありますのでそちらもどうぞ。 GoF本における分類 振る舞い+オブジェクト はじめに ここではMediatorパターンについて説明します。 「mediator」とは「仲介者」「調停者」という意味です。 Mediatorパターンは、クラスどうしの複雑なやりとりを一極集中するためのパターンです。 では、早速見ていきましょう。 たとえば 突然ですが、みなさんは無線LANをご存じでしょうか?職場や学校、ご自宅でも使っている方は多いと思います。最近のノートパソコンは、まず間違いなく無線LANが使えるようになっていますね。 それでは、無線LANの接続形態にはどの様なものがあるでし
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。 本書で取り扱うGoFのデザインパターンですが、修得し実践していくことでどの様なメリットがあるのでしょうか? 簡単ですが、ここで一度整理しておきます。 良い設計の再利用ができる デザインパターンは、優秀なプログラマたちの実践的なノウハウが凝縮されています。これを利用することで、開発者は、より良い設計により早く到達することができます。 再利用性が向上する よく言われることですが、デザインパターンを使って設計されたクラスは、クラスどうしの関係がゆるくなります(疎結合と言います)。これは、良い設計の重要なポイントの1つです。また、クラスどうしの関係がゆるければゆるいほど、独立性が高いということになります。この結果、再利用性が
このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。 1995年、Erich Gamma氏、Richard Helm,氏 Ralph Johnson氏、John Vlissides氏の4名(GoF:Gang of Four;4人のギャングたち)により、ある一冊の書籍が世に送り出されました。通称「GoF本」と呼ばれる「Design Patterns : Elements of Reusable Object Oriented Software」(邦題:「オブジェクト指向における再利用のためのデザインパターン」/ソフトバンクパブリッシング/1999年)です。聞いたことのある方も多いかと思います。本書もこれ以降「GoF本」と呼称します。 この本では、23個のパターンが紹介され
2005/05/30から独自ドメイン(doyouphp.jp)で公開していたDo You PHP?ですが、 コンテンツが古い(PHP4とかいつの話だよ)&全然更新していない(はてダも。。。) 公開当時よりPHPユーザーが大幅に増え、それに伴って良質なコンテンツが大量に公開されている サーバ代金だけはかかっている などイロイロとありまして、Webサイトについては2015年1月末をもって閉鎖することにしました。10年弱お世話になりましたm(__)m これに伴い、今後も有用と思われる一部コンテンツのみ(デザパタぐらいかな。。。?)はてダに移行する予定です。エントリのタグに[doyouphp]を付けてます。 Do You PHP?から移行したコンテンツ なお、ドメインは維持してメールアドレスはそのまま使える状態にする予定です。
環境 Firefox29.0.1 Firebug1.12.8 現象 よくある console.log(data); というJavaScriptを実行しても、Firebugのコンソールに出力されない。Firefox28(29?)までは問題なかった。また、Firefox29から復活したWeb開発ツールのコンソールには正しく出力される。 原因 Firefoxにインストール済みのアドオンを無効にして動作を確認したところ、Greasemonkey 1.15にインストールしていたAutoPagerizeスクリプト(0.0.44)が当たってた模様 最新版(0.0.66)に更新してみるも変わらず 対処 Greasemonkeyの「ユーザースクリプトの管理」メニューから、「ユーザースクリプトを実行しないページ」に当該サイトを追加したところ、Firebugのコンソールに正しく出力されるようになった。 おまけ
最近ビッグデータ()系のサーバに対してあれこれやってるんですが、ひょんなことから調べる必要が出てきたのでざっくりまとめてみました。 間違ってる所があれば、指摘をお願いします;-) 基本的な環境 CentOS 6.2(x86_64) PHP 5.5.11 CDH 4.6+Cloudera Impala 1.2.4(別途構築済み) CDHとは CDH(Cloudera's Distribution Including Apache Hadoop)は、Cloudera社から提供されているオープンソースなApache Hadoopディストリビューションの1つで、Apache HadoopやApache HBase、Apache Hive、Apache Pigなどのパッケージが含まれています。 とりあえず、CDHについては以下のページをざっと読むと良いかと。 CDH | Open Source |
レビューを見て気になってたJaybird BlueBuds Xを購入し、使用開始から約2週間経ったので、簡単にレビューを書きます。 キッカケ フィーチャーフォンの頃(913SHとか)からカナル型のBluetoothイヤホンを使ってたんですが、初めて買ったSONYのDR-BT20NXが断線し、DR-BT100CXPを購入。 SONY Bluetoothワイヤレスステレオヘッドセット マイク付き ホワイト DR-BT100CXP/W 出版社/メーカー: ソニー発売日: 2009/02/10メディア: エレクトロニクス クリック: 16回この商品を含むブログ (5件) を見る3年近く頑張ったんですが、それも断線して次にXBA-BT75。SONY カナル型ワイヤレスイヤホン Bluetooth対応 リモコン・マイク付 XBA-BT75 出版社/メーカー: ソニー(SONY)発売日: 2011/12
今更感漂いますが気にしない:-) ちょっとGoogleカレンダーにアクセスするバッチアプリを書いてたんですが、いろいろと苦労したのでまとめてみます。 前置き PHPからGoogleのAPI群にアクセスする記事はいろいろありますが、ユーザーがブラウザを介してアクセスするモノ(Web Server Applicationsと呼ばれる)がほとんどです。一方で、バッチアプリなどブラウザを介さずにGoogleのAPIにアクセス(Service Accountsと呼ばれる)するモノはあまり見つかりません。 Web Server Applications Service Accounts 上のリンクにある図を見比べてもらえれば分かりますが、これら2つの大きな違いは"User Login & Consent"の部分、つまり、ログインとアプリのアクセス許可があるかどうか?なんですが、バッチアプリの場合はこれ
使ってる人にとっては何周目かの今さら感漂いますが、ひょんなことから調べる必要が出てきたのでざっくりまとめてみました。 環境 CentOS6.3 PHP5.5.3 JDK1.6.0-45 HBase0.94.11 Thrift0.9.1 HBaseとは HBaseはKVS(Key-Value Store)の1つで、ASF(Apache Software Foundation)のHadoopプロジェクトの一環として作られたオープンソースソフトウェアです。本家はApache HBase – Apache HBase™ Homeです。 HBaseのアーキテクチャを理解しよう (1/3):CodeZine(コードジン) とりあえず、以下の記事をざっと読むと良いかと。 いまさら聞けないKVSの常識をHbaseで身につける (1/3):ビッグデータ処理の常識をJavaで身につける(3) - @IT HB
第67回PHP勉強会に参加して来ました。幹事の[twitter:@yando]さん、[twitter:@mugeso]さん、会場を提供していただいた株式会社EngineYardさん、ありがとうございました:-) PHP勉強会は2年ぶり。前回はAndroidでPHPを動かすネタだったか。。。 で、今回のネタは先日見つけたPHP Refactoring Browserです。プレゼン資料とデモで使用したコード一式はGitHubに上げてあります。 https://github.com/shimooka/phpstudy-67 PHP Refactoring Browserの紹介 PHP Refactoring Browserの内部構造 内部構造のLTの方で、Encapsulate Fieldのデモができなくてすみません。。。修正版はGitHubにpushしてありますので、ローカル環境で試してみてく
JsRender/JsViewsのチュートリアルを書いています。こちらもどうぞ→「jsviews チュートリアル」の検索結果一覧 - Do You PHP はてな いい加減書かないと、絶対に書かないような気がしたので。。。 先日(といっても2ヶ月前)のJsRender入門 - Do You PHP はてなの続きです。 JavaScript製のテンプレートエンジンであるJsRenderを使うとJavaScriptでHTMLコンテンツを出力する(特にメンテナンス)のがかなり楽になるんですが、データが変更された場合に自動的に再描画してくれるわけではありません。 たとえば、JsRender入門 - Do You PHP はてなの"使い方"にあるサンプルに追記し、配列fruitsに要素を追加するようにしたものが以下のサンプルです。 <html> <body> <div id="list"></div
先日PHP5.5.0α1がリリースされましたが、ようやくfinallyサポートが入ったようです。 php-src/NEWS at php-5.5.0alpha1 · php/php-src · GitHub Javaとか使ったことある人にはお馴染みですが、何でtry/catchをサポートした時に入れなかったのか不思議なぐらいです。 ということで、PHP WikiにあるRFCをざっと和訳してみました。また、githubにも上げてありますので、間違いがあればそっちを直して貰えればと。 translations/rfc_Supports_finally_keyword.ja.txt at master · shimooka/translations · GitHub PHP: rfc:finally(PHP Wikiのオリジナル) 導入 このRFCは、FR #32100, #36779でリクエス
この記事はUnoh Advent Calendarの参加記事であり、これ(もしくはこれ)の補足です;-) 以下、当時の思い出をグダグダ書きます。 入社まで 大学出てから11年ほどいたSI会社をこんなメール出して退職し、2007年9月に意気揚々と入社したのがウノウ。退職と入社の間に週末を挟んでて、PHPカンファレンス2007が開催されたのを覚えてます。ウノウ・GREEの両CTO対談とか、PHPの話が一切出てこないモテ系LTとかあったなぁ。あと[twitter:@rsky]さんと初対面だったな。ウノウでは入れ違いだったけど。 内部から見た「ウノウ」という会社 これ(もしくはこれ)に書いた通りの社内。今ではツールを使った情報共有や社内勉強会、コードレビューも珍しくなくなって来てると思いますが、2007年当時は結構刺激的でしたね。 そういえば、コタツもあったね。あまり使われてなかったけど。 個人的
jsViewsについて書こうと思ったんですが、ちょっと寄り道。。。 むー、つい最近まで知らなかった。。。PHP5.4.0から追加されたようですね。JsonSerializableインターフェースのドキュメントは以下のURLです。 PHP: JsonSerializable - Manual オブジェクトをそのままjson_encodeしてJSONデータにしたい場合、publicなメンバー変数のみJSONデータに現れます。たとえば、以下のようなコードの場合、 <?php namespace JsonSerializableTest; class Customer { public $id; protected $name; private $birthday; public function __construct($id, $name, \DateTime $birthday) { $th
JsRender/JsViewsのチュートリアルを書いています。こちらもどうぞ→「jsviews チュートリアル」の検索結果一覧 - Do You PHP はてな API叩いてJSONデータを取得し、その結果をJavaScriptで出力する。よくある場面だと思うんですが、これってどう実装してますか? 一番わかり易い方法は、コンテンツを文字列で生成してappendTo()なりhtml()する方法。 // JSONデータの取得 var contents = '<p>...' + ...; $('#target').appendTo(contents); 直感的なんだけど、何だか今更感が漂います。かと言って、DOM操作するのも面倒だし、コンテンツのサイズが大きい場合やデザイン変更などメンテナンスが大変そう。。。 こういう時にテンプレートエンジンを使うとヨサゲ、ということで探してみるとJsRend
実害はなかったんですが、何だか気持ち悪かったので調べてみました。 環境 Firefox 15.0 Firebug 1.10.3 jQuery 1.8.1 現象 jQuery1.8.1を読み込むと、Firebugのコンソールに chrome JS オブジェクトを __exposedProps__ を含めずに開示することは安全でないため推奨されません。 というエラーが出力される。 原因 #12418 (Firefox 15.0 __exposedProps__ is deprecated) – jQuery - Bug Trackerによると、 I was having the same issue, but this is not a JQuery problem. It is a problem of one of your add-ons. One of the add-ons shar
Doctrine2ではORMにPrimary Keyの値を自動生成する機能(Generator)が用意されています。今回2.3から"独自の値"を生成するGeneratorを定義・利用できるようになったので試してみました。 前置き 2.2まではBasic Mapping - Object Relational Mapper (ORM) - Doctrineにあるオプション AUTO SEQUENCE TABLE IDENTITY NONE が用意されており、これを変更することで「どのように値を生成するのか?」を変更することができます。 ただし、基本的にはsequenceなどを使った連番(数値)となりますので、 先頭ゼロ埋めのXX桁の文字列にしたい Entity内の何らかの値(特定のカラムの値とか)を使ってIDを生成したい といった場合は、別途値を生成してEntityにセットしてからpersi
UPGRADE-2.1.mdは不定期に更新されているようです。最新の和訳は以下を参照してください。 translations/UPGRADE-2.1.ja.md at master · shimooka/translations · GitHub https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.mdを見てみると結構面倒くさそうだったので、ざっと訳してみました。対象は2012/07/30 19:30現在のファイルです。 訳したMarkdownファイルはGithubに上げてありますので、誤訳・漏れを見つけたら煮るなり焼くなりどうぞ。 translations/UPGRADE-2.1.ja.md at master · shimooka/translations · GitHub 以下、はてダ記法にざっと直したものを貼り付けと
なんかタイトルの日本語がおかしい気もしますが。。。 忙しい人のための解決法超概要 デフォルトのフォームテーマ(form_div_layout.html.twig)では、choice_widgetブロック内でexpandedの場合に改めてform_widget関数を呼び出しているが属性情報を引き継いでいないため、ラジオボタンとチェックボックスに属性を直接付けることができない。なので、このようなカスタムフォームテーマを作ってテンプレートに適用する必要がある。 発端 Symfony2のFormTypeで、radioボタンの属性ってどうやって付ければ良いんだろう?twig側のform_widget関数にattr属性を指定してもradioボタンを囲むdivタグにその属性が付いてしまう。。。 #symfony2 ツイートのとおり、ラジオボタン(choice)を含むFormTypeがあり、そのラジオボタ
著者の[twitter:@kenjis]さんから献本いただきました。ありがとうございます:-) はじめてのフレームワークとしてのFuelPHP - 達人出版会 遅くなりましたが、ようやく一通り目を通しましたので感想を書いておきます。ちなみに、著者のid:Kenji_sさんの紹介エントリは以下のとおりです。 FuelPHP 入門書の決定版『はじめてのフレームワークとしての FuelPHP』が発売されます - A Day in Serenity @ kenjis 電子書籍であること まず本書の最大の特徴は電子書籍であること。ページ数として340ページ弱と結構な分量がありますが、全然分厚くないし重くない!w 当然、スマートフォンやタブレット端末に入れておけば簡単に持ち運びができるので、通勤電車の中で読むのも楽ちんです。 また、URLリンクをそのままクリックして使える(Viewerに依るかも)のは
ほとんど個人的備忘録。 "symfony2 controller service"あたりでググってみると色々と出てきますが、以下のサイトにうまくまとめられています。 Symfony2: Testing Your Controllers — Matthias Noback - Blog ポイントは以下の3つ。 コントローラはSymfony\Bundle\FrameworkBundle\Controller\Controllerクラスのサブクラスである必要はない コントローラを他のサービスクラスと同様、services.xmlに登録する コントローラのRouteアノテーションに上で登録したサービスIDを指定する これでうまく動作するんですが、最後のRouteアノテーションでの指定方法 <?php /** * @Route(service = "matthias_registration.reg
次のページ
このページを最初にブックマークしてみませんか?
『Do You PHP はてな』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く