kgrss's blog

プログラムを中心にいろいろなことを記事にしていきます!

APCの小さなバグ。

こんばんは、こがらしです。

先日、APC周りの挙動で怪しいものに出くわしたのでそのときのお話です。

自作のCakePHP-Cache-Behaviorを利用している時の出来事でした!笑
以前にCacheEngine部分をコード内で選択可能にした後は、
キャッシュ機能を切ったまま作業してたので、ふと機能を有効にしてみると・・・

あれ?エラー。
なんだろう・・・と見てみたら

> $retval = $this->find('first');
> $retval = current( $retval );

こんな感じで利用しているところのcurrentでおかしいようだ。
currentの返り血は・・・false

おかしい・・・。
キャッシュOFFとAPCではなくMemcacheを利用した際には起きない。

あれれー。
ちゃんとAPCにはキャッシュされているみたい。
そしてvar_dumpするとちゃんと表示される・・・なぜ?
そして気づいたのが、、、これ

https://gist.github.com/4086692

内部ポインタが先頭要素じゃなくて末尾を指してる!
なんてこったい笑

ということでバグ報告をしなければ!

・・・どこへ?
そしてPECLへ行けと助言を頂きました!
そうしてバグ報告ページを探すのに手間取りながらも、無事バグ報告をしました!

本当に英語が苦手でございます・・・。
後はPHPのバージョンを選択する欄には5.3系、5.4系ともに最新しかなくてよく見たら下の方に最新にしてまた来いだなんて笑
なので自宅のサーバーのPHPを現状で最新の5.3.18に更新してバグチェックをしました!

総じてやはり英語力が至らんな・・・・と思い知ったこがらしでした。
ではでは。。

自分メモ的なMountain LionにMacPortsでAMP環境構築

こんばんは、こがらしです。

最近、社内でMacを常用するようになりました。
その上で、AMP環境を構築しなければということでそのメモを。

今回は、MacPortsを利用しての作業になります。

1. Apacheインストール

sudo port install apache2
でインストールできる。

自分の環境では、なぜか標準搭載のApache様が邪魔だったのでそれを止める必要もあった。
あと、最初からApacheが起動設定になっていた(?)←気のせいかもしれない。

自動起動設定
sudo port load apache2
再起動
sudo /opt/local/apache2/bin/apachectl restart

2. PHPインストール
今回は仕事の都合5.3系
本当は5.4入れたいけど・・・・。

sudo port install php5 +pear +apache2 +fastcgi
標準で有効になっているはずのapache2オプション。
うまく動かなかったので一応入れてあります。←これもやっぱり勘違いなのかもしれない。

あとは、apachephpの連携をする(忘れた)
httpd.confへの拡張子設定・php.iniの設定・mod_phpモジュール設定が必要。
(mod_phpって言ってるけどlibphp5.soだった・・・・

3.phpモジュール関連
なんでか標準でautoconfが入っていない!
pear系のモジュールが入れられない・・・。


sudo port install autoconf
ということで入れました。

apc/memcacheをインストール。
今回はなぜかpearからインストールした。←macports上にあります。

sudo port install apc
sudo port install memcache

あとは、MySQL系のモジュールが微妙に入っていなかったのでこれも入れます。
sudo port install php5-mysql
このコマンドを打ったあたりで↑の話を思い出す。

最後にphpunitを入れて終わり。
とはいえ一番苦戦した。

pear config-set auto_discover 1
pear channel-discover pear.phpunit.de
pear install pear.phpunit.de/PHPUnit
とするもインストールできず。

pear channel-discover symfony.com
pear channel-discover componentsなんちゃら。
ココらへんメモるのを忘れました・・・。

インストールコマンドも少し変える。
pear install --alldeps pear.phpunit.de/PHPUnit

確かこんな感じで入ったはず。

メモ終わり。

久々に書きますよ

こんばんは、こがらしですー。

最近めっきり仕事が大変でヤバイです!笑
コーディングスキルがゆとってて大変ですー><

ということで、今日も宣伝笑

仕事の上で作ってたCakePHPのBehaviorを公開しました!

https://github.com/Kogarasi/CakePHP-Sharding-Behaivor


内容を聞けばなんのお仕事を今してるのかよくわかると思います・・・・。

内容としては、DBの負荷分散に用いるテーブルシャーディングもしくはサーバーシャーディング時の負荷を減らすためのBehaviorですー。

使い方は自分ながらシンプルにまとまってて良いかなと思ってます!笑

各モデル内での記述はそれなりにスマートになっているのかなーとか勝手に思ってます。
もっとここはこうした方がいいとかいろんな意見が欲しいですね!

手短ですがこんな感じで紹介までー笑
ではでは

すーぱーざっくり、githubのAPIを使ってみたよ!

こんばんは、こがらしですー。

最近はなんだか後先を考えずに色々やっていて、何がしたいのかまったくわかってないです笑
しばらくは自分の仕事がわんさかあるはずなのに、うまく進められていなかったりしてます。。


そんなことはまあどうでもよろしいのですが、今回は皆さんよく知って居るであろうgithubのAPIを使ってみようっていう回です。
とは言っても、今回試したのは自分のWEBページからgithub上のリポジトリ情報を取得して表示するまでです。

まずは始めに利用するためにアプリ利用登録が必要です。
設定画面のところにAppicatonsってのがあってそこからできます。

登録するとclient_keyとclient_secretが発行されます。
githubのAPIはOAuth2.0による認証を利用するので、Twitterなどに比べたら楽に利用することができます。
また、github develoerのサイト上で手順が丁寧に書いてあるので、(英語ですが)そちらを読み進めながらできると思います。

まずは、認証に必要なcodeを取得します。
https://github.com/login/oauth/authorize?client_id=xxxxxx

上記の感じで登録時のclient_idを指定してアクセスすればリダイレクトされて、
URLの部分に?code=yyyyyyyとなっているので取得できると思います。
また、今回はリポジトリ情報へのアクセスのパーミッションも要求するので、
さらにscope=public_repoを設定します。

次はaccess_tokenの取得ですね。
先ほどのコールバック先のページにでcodeを取得し、下記のURLにPOSTでリクエストを投げます。
https://github.com/login/oauth/access_token

またパラメータにはclient_id, client_secret, codeが必要になります。

先ほどのリクエストに対してのレスポンスが以下の形になるみたいです。
access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
ここのaccess_token=zzzzzzzを利用しましょうー。

後は、リポジトリの情報を取得するだけです!
https://api.github.com/user/repos?access_token=zzzzzz
とアクセスすれば大丈夫なはずです。
細かいパラメータ類ははしょります。。。

まぁざっくりとこんな感じでしたー。
ではでは

CakePHPでRedisを使う。

こんばんは、こがらしです。

いやーほんと最近は朝から晩までサーバー漬けって感じです。。
その中でも、少し悩み続けてたことがあったんですよ。
それは、CakePHPでどうやってRedis使うの?ってやつです。

右も左もわからない僕は、とりあえずぐーぐる先生に聞くことに。
そうすると、どうやらCache EngineでRedisが利用できるようです。
おお、これでセッション管理とかをMemcache使わないですむのでいいですね!

しかしこれだけではだめです。
何って、せっかくのRedisのポテンシャルが発揮できないじゃないですか!
ということで、これはこれとして別のを探します。

次に見つかったのは、githubにて公開されていたこちら。
https://github.com/nnset/Cake-PHP-2.xx-Redis-datasource

どうやらDatasourceとして利用できるようにするもののようです。
しっかりとした実装になっています!と喜んでいたんですが、、、
CakePHPの経験は少ないのですぐ気づかなかったのですが、結構キワモノな実装でした。
とはいえしっかりCRUDの実装とかしてるので結構驚きでしたねー。
そんなこんなで残念ながらこれも却下です。

仕方ない!なら、作るしかないよね!
というわけで、はいこちら。
https://github.com/Kogarasi/CakePHP-Redis-DataSource

利用にはphpredisのモジュールが必要になります。
正直DatasourceとかModelとかわからないところが多かったので、
できるだけ自分で実装を避けるようにしました笑

かなりなんちゃって実装で、Modelから扱えればいいよね程度の実装なのでご了承ください。
CRUDなにそれ!

__callを利用してハンドリングしているのでredisモジュールの命令はすべて
$this->Redis->getDatasource()->xxxx();
とかしてくれればそのまま実行できます!

なにこれ怖い!CakePHPすごいね!
ということで、CakePHP用になんちゃってRedis-Datasource作ってみたでした。

ではではー。