Methodパターンについて。去年読んだときは理解できなくて、いろいろなサイトを見て回った。今日改めて読んでみてもメリットがよくわからなかった。この本で強調されているポイントがちょっと違うのではないかという疑問を持った。分かりやすいサイトを見つけたのでそこを読んで理解度を補強した。Methodパターンが使われている使用者クラスから生成するクラスの依存性を排除する疑問点メリットが「CreatorクラスがConcreteProductに依存しないこと」と書かれているけど、「ConcreteProductの使用者クラスがConcreteProductに依存しないこと」の方がうれしい部分だと思うけど。Methodを使うことの違いがよく分からなかった。参考サイトを見て解決した。Methodパターンでインスタンス生成して欲しいことを明示するために、コンストラクタをpublicにしないというテクニックはおもしろいと思った。Methodパターンへと導くという説明が素晴らしかった。Methodパターンについて。フレームワークと関連の深いパターン。まとめ大まかな処理の流れをテンプレート可する。処理の大きな流れをスーパークラス側で定義し、各処理の詳細な処理はサブクラス側で定義する。疑問点メリットの説明が分かりづらかった。自分なりに考えてみたがメリットは大きく2つあると思う。処理の大まかな流れをテンプレート可することで、ソースコード量が減り、機能変更(各詳細処理を呼び出す順番や呼び出す処理の追加)にも強くなるというのが一つ。一つは決まった処理を決まった場所に書かせることで保守性が上がるということ。その他これは完全にフレームワーク内部で使われているパターンだなと思った。処理の流れはフレームワーク側で定義するから、利用者は○○にこういう処理を、△△にはああいう処理を書いてくれ。principle」といった関連キーワードを学習した。いう横文字のテクニカルタームをさらっと言えると、何となく出来るヤツに見えるので積極的に覚えていきたい。Adaptorまえおき今日はAdaptorパターンについて。Wrapperパターンとも呼ばれるらしい。このパターンはごくごくあたり前のことを言っているだけのような気がするんだけど。保守のプログラミングをやる場合は無意識のうちに使っていることが多いと思う。まとめ既存機能と必要機能の「ずれ」を埋める。実績のあるクラスを効率的に利用することでテスト工数を減らすことができる。継承を利用した方法と、移譲を利用した方法の使い分けがよく分からない。この本ではAdapteeが一つのクラスの場合しか説明されていないが、Adapteeが複数個あった場合は移譲を利用した方法しか使えない。「無意識のうちに使っている」と冒頭で書いたけど、よく考えるとAdapteeをAdapterでラッピングしてClientが使うという実装しかしたことがない。これでもテスト工数を減らすという目的は果たせるけれど、設計上よろしくない。Clientが知るべきは使いたい機能だけなのでそれをTargetとして明示的に示してあげる必要がある。することで開発者の意図が伝わりやすいソースコードができる。いうか、ここまでやって初めてAdaptorパターンと呼べるのかな・・。インターフェースの差異を吸収することで、ソースの改修を少なくすることができるということをうまく説明しています。クラスの生成をメソッド化するとさらに改修量が減るという説明もとても分かりやすいです。Iteratorまえおき社内のプログラミング講師になったから、デザインパターンくらいは知っとかないとまずい。いうことでもう一度復習することにした。去年の夏読んでいた『Java言語で学ぶデザインパターン入門』という本を最初から読み直していこうと思う。Iteratorパターンから。まとめ集合体の要素を一つ一つ指し示し、全体をスキャンするときに使う。集合体のスキャン機能を集合体の実装から独立させることができる。インターフェースにIteratorインターフェースで定義されている抽象メソッドを定義すれば同じような保守性(使用者側で変更が発生しない)は担保できるのでは?と思ったが、一つの集合体を異なる方法で数え上げたいときは別にIteratorとしてスキャン役を持っておいた方が便利か。Mapのスキャンとかだと、keyをスキャンしたい場合も、valueをスキャンしたい場合があるしね。コンポーネントの独立性という意味でAggregateとIteratorを別々に用意することには大きな利便性があると思う。と中盤くらいで考えていたら、最後の方の節の「複数のイテレータ」で似たような話が言及されていた。その他この本で強調されている「具体的なクラスを定義する前に、インターフェースを定義する。」というのはすごく大切だと思う。機能と実装を切り離すことで、クラスの使用者がクラスの実装を意識せずに済むというのは非常に大事。NULL制約をつけたカラムに値を指定せずに、insert文を発行してもerrorが出なかった。NULL制約を課したカラムにはそのカラムの型のデフォルト値が入る)。error出して欲しかったので、設定を変えた。やったこと/etc/mysql/my.cnfに以下を追記。Settings#sql-mode="STRICT_ALL_TABLES"my.cnfを編集した後、MySQLを再起動。NULL制約が機能するようになった。BOOK5,6」1Q84の5巻と6巻を読んだ。友人曰く、終盤は難しくなるということだったが、まったく難しいとは感じなかった。自分の読み方が浅いのだろう。「リトル・ピープル」とは結局何だったのか?我々が暮らす現実の世界において何を指しているものなのか?そして作者が伝えたかったことは何なのか?そこまで考えて読むと読書の楽しみが増すのかもしれない。自分は単なるファンタジー小説として読んだだけなので、そこまで深い考察はしなかったが、それでも充分楽しめた。読書phpでOAuthしてみた作ったものtwitterで"ぽいぽい"しましょう。リンクをクリックすると、"ぽいぽい"できます。HTTP_OAuth-0.1.6php.iniの編集CLI版はインクルードパスの設定していたけど、CGI版の方はやってなかったので追記。".:PEARライブラリのパス"そのあとサーバー再起動。/>";}?>ソースコード解説2行目でOAuthを使うためのPEARのライブラリをインポート。secretを指定してHTTP_OAuth_Consumer型のインスタンスを生成。secretはセキュリティを考慮して設定ファイルで指定。13-24行目はverifierが空のとき、つまりユーザー認証がまだ行われていないときの処理。getRequestToken()でproviderにHTTPリクエストを投げてこれらの値を取得している。22行目でユーザーに踏ませるURLを生成する。25-36行目は、providerから戻ってきたときの処理。secretを取得している($consumerのtoken、tokenSecretフィールドに格納される)。secret、verifierが必要。OAuthの概念図と照らし合わせてみると、なるほどーという感じ。仕組みはだいたい分かったけど、それぞれのトークンがprovider内部でどのように生成されるのかが分かっていないので時間があるとき調べてみよう。分かりやすかったです。HTTP_Requestこのパッケージ使うと、httpリクエストが簡単に投げられるらしい。やったことを書き残しておきます。設定PEARがなかったのでパッケージマネージャを再インストール。php.iniの該当部分を以下のように変更。".:/xxxxxx"xxxxxxは、PEARのphpソースが格納されているディレクトリ。以下のコマンドで表示される場所を設定。HTTP_Request遊んでみるManualページにあるサンプルで一通り遊んでみようと思います。Basic認証の設定やったことApacheの.htaccessを使ってBasic認証をやってみた。やったことをメモしておく。サンプルで作ったページはここ。ユーザー名=usr、パスワード=passで入れます。以下に設定すべき2つのポイントを纏めています。htpasswdでユーザリストを作成まず、htpasswdというコマンドを使って、認証するユーザ&パスワードを格納したファイルを作ります。usrパスワードの入力が求められるので、usrに付与するパスワードを入力します。ユーザを追加する場合は-cオプションなしでコマンドを実行します。次に、Basic認証を行いたいディレクトリに.htaccessファイルを作成します。valid-userこれだけで、Basic認証ができます。Postsmemset()とmemcpy()恥ずかしながら、Cのmemset()とmemcpy()を今まで使ったことがなかった。みたいな話を聞いたことがあったので、「あーじゃ要らない機能なんだー。editorialに投稿された解答がmems...便利なPythonライブラリ(5)retryデコレータつけるだけで、リトライしてくれるという便利ライブラリ。失敗するかもしれない不安定な関数に@retryをつけると成功するまで実行してくれる。ret...S3のファイルを一般公開するAWSのS3のファイルを一般公開する方法について説明します。2つの場合に分けて説明します。本番中ゴリ押し解を思いつくには思いついたのだが、C++でマルチスレッドの処理を書いたことが無くて、ごにょごにょやってるうちにタイムアップとなってしまった。C++...C#入門(9)Action、Func、Predicateの違いAction、Func、Predicateについて簡単に整理しておく。メソッドへのDelegate。メソッドへのDelegate。スライド区間に対するクエリ処理の種類とそれに対するアルゴリズムをいくつか紹介します。「スライド区間」の定義ですが、窓関数のようなものを想像してください。まではコンピュータの力を使って正多面体をt色以下で塗るパターン数を数えていました。今回は手計算で計算してみようと思います。そのためにはまず回転を表す対称群をうまく列挙するために回転軸について考える必要があります。見聞きする木の用語を整理しておく。節点vから最も離れた節点をwとする。w)の長さをvの離心数と呼ぶ。記号で表すときは、ε(v)と書く。使って遊んでみました。いった便利な機能を提供してくれるテストフレームワークです。repor...キャッシュヒット率の測定perfというツールを使ってキャッシュヒット率を測定してみた。キャッシュの影響なんてたかが知れていると甘くみていたら、痛い目るので要注意。知らない用語がちらほらあったので、簡単にまとめておく。