CakePHP2でUnable to allocate memory for pool.エラー

CakePHP2をインストールしてdatabase.phpとcore.phpを設定、簡単なテーブルを作成してBakeしてみたところ、大量に「Warning (2): include() [http://php.net/function.include]: Unable to allocate memory for pool. [CORE/Cake/Core/App.php, line 562]」のエラーが!

ググってみたらAPCのエラーのよう。

PECL apcのエラー Unable to allocate memory for pool. | 永田順伸のブログ 

このページ内のアドバイスどおり、/etc/php.d/apc.iniを修正した。
apc.mmap_file_mask=/tmp/apc.XXXXX

apc.mmap_file_mask=/dev/zero
へ変更するとエラーは表示されなくなった。

心にひっかかりを覚えながら、上記のサイトを参考に修正しようと思ったら、既になってた。ひっかかりは前にやった事があったからみたい。さらにググってみたら、知恵袋でこんなものが。

PHP 5.3.6で、Warning: require(): Unable to allocate memory for pool.という警… – Yahoo!知恵袋

APCのエラーによるものです。(* APCとは、PHPの中間コードのキャッシュや最適化を行う拡張モジュールのことです。)

対処法は、APCを無効にすればOKです。以下の1行を.htaccessに追加してください。

php_flag apc.cache_by_default Off

恐るおそるwebroot/.htaccessに追加してみたところ、無事エラーが消えた!core.phpハッキリした原因が分からないのでとっても気持ち悪いけど、APCってPHPレベルで設定してなくても勝手に動いちゃってるものなのかな?それともPHPのバージョンによるもの??うーん…

CakePHP1.3のScaffold優先順位についてまとめ

CakePHP1.3のScaffold機能が便利なので、管理機能なんかはほとんど丸投げしちゃえて楽な感じです。ただ公式ドキュメントやGoogle先生で調べてみると、予想を遙かに超えて柔軟にカスタマイズできるようなので、個人的な備忘録を兼ねてまとめてみることにします。

ちなみに今知ってること、ネットで見つけたことがほとんどでソースはピンポイントでしか追っていないので、まだまだ隠されている機能があるかもしれません。恐ろしい子ッ…!

  1. コントローラーにvar $scaffoldが定義されていればscaffold機能を使用する。その際に自動で動作するアクションは「‘index’, ‘list’, ‘view’, ‘add’, ‘create’, ‘edit’, ‘update’, ‘delete’」の8つ。(でもindex=list、add=create、edit=updateみたいだから、実質5つ…のはずなのに、listだけviewがないって怒られる。バグ?)
  2. var $scaffold = ‘admin’のようにRouting.prefixesで設定されている値が使用されていれば、自動で動作するアクションは$scaffoldで設定されたprefix名が付加されたものになる。この例だと「’admin_index’, ‘admin_list’, ‘admin_view’ … ‘admin_update’, ‘admin_delete’」の8つが動作する。この場合、prefixがつかない方のアクション(index, viewなど)は動かないので注意。
  3. var $scaffold = array(‘index’, ‘view’)のようにscaffoldで任意で動作させたいアクション名を配列で指定可能。この例だと、indexとviewはscaffoldで動くが、add,edit,deleteの3つは(コントローラーで定義しないと)動作しない。
  4. var $scaffold = array(‘admin_index’, ‘admin_view’)もいけるかと思ったけど、prefix付きのアクションは動作せず。自分の設定ミス?それともバグ?仕様??
  5. 各コントローラーにアクションを記述した場合、scaffoldで自動生成されるアクションよりも優先される。基本scaffoldでいいけど、indexだけカスタマイズしたい場合はfunction index()を記述すればそちらが使用される。

コントローラーについてサクっとまとめると

  • var $scaffoldの記述なし(scaffold使用しない)
  • var $scaffold;
  • var $scaffold = ‘admin’;
  • var $scaffold = array(‘index’, ‘view’);

の4パターンの指定が可能で、scaffoldの利用に関わらず、各コントローラーにアクションが定義されていればそれが最優先ってことらしい。多分。

Scaffoldで使用されるビューの優先順位

  1. 例えばposts_controllerでvar $scaffoldが定義されていて、アクションを上書きしていない場合(function index()などの記述がない)は、app/view/posts/scaffold.index.ctp -> app/view/scaffolds/index.ctp -> cake/libs/view/scaffolds/indexctpの順に探しにいく。
  2. 各コントローラーでアクションを上書きした場合は、scaffoldsのビューは使用されない。例えばfunction index()を記述した場合は、app/view/posts/index.ctpを用意してあげる必要があります。ないと怒られます。

ビューに関してまとめると、コントローラーで自分で定義したアクションについては、必ず対応するビューを用意する必要があるって事でいいのかな。scaffoldで自動生成されたアクションに関しては、上の優先順位1のように探しにいきます。

CakePHP1.3のScaffold機能、コントローラー単位、アクション単位、ビュー単位で柔軟にカスタマイズできそうなので、上手く利用できれば作業がかなり楽になりそうです。使いこなすぞー!

それではまた。

蕎麦湯の正しい飲み方

突然ですが蕎麦が好きです。そばと言えばざる蕎麦な食べ方が一番好きなんですが、蕎麦湯…くれますよね。今まで何となく探り探り楽しんでいたけど、気になって調べてみました。そしたら教えてGooで正解っぽい答えを書いている方がいたので、まとめてみます。

蕎麦湯の飲み方 – その他(料理・グルメ) – 教えて!goo

  1. 食後、そばつゆに蕎麦湯を流し込む。量は適当、好みでOK
  2. 飲む
  3. まだ蕎麦湯が残っていれば流し込む
  4. 飲む
  5. 何ならそばつゆが無くなっても、蕎麦湯だけで飲んでもOK
  6. 好みで青ネギやしょうが、ゴマなどの薬味をプラスしてもOK

まとめると、そばつゆと足して飲んで良し、蕎麦湯だけで飲んで良し、好みで薬味を足して良し…つまり自由に楽しめばいいみたいです(笑)

さすがに蕎麦湯をお蕎麦がまだ残っているザルにぶっかけて食べるようなド外道、いや破廉恥な食べ方をする人はいないでしょう!いませんよね?自分も今まで何となく飲んでた方法で間違ってなかったみたいで安心しました。薬味をあえて足した事はなかったので、次からはあればやってみようと思います。健康にもいいみたいなので、ぜひ素晴らしい蕎麦湯ライフを!

それではまた。

CakePHP1.3で携帯電話(ガラケー)とiPhone,Androidを振り分ける方法

ミッション

CakePHPサイトをガラケー対応させること。とりあえずはガラケーとiPhone&Androidの振り分けまで。

手順

MASA-P/KtaiLibrary · GitHub

  1. 上記からファイルをZIPダウンロードして解凍
  2. 解凍したファイルのvendorsディレクトリの下にある「ecw」ディレクトリを「vendors」又は「app/vendors」ディレクトリ下に丸ごとコピー
  3. 解凍したファイルの「app/controllers/components/ktai.php」を、同じ「app/controllers/components」ディレクトリ下にコピー
  4. コントローラーで下記のコードにより振り分け可能

コントローラーの使用コンポーネントにKtaiを追加

[php]
var $components = array(‘Ktai’);
[/php]

振り分け処理を記述

[php]
if ($this->Ktai->is_ktai()) {
// ガラケー用の処理
} else if ($this->Ktai->is_iphone() || $this->Ktai->is_android()) {
// iPhone,Android用の処理
} else {
// それ以外、PCなどの処理
}
[/php]

これだけです!簡単でしょう?サイト全体に適用するならapp_controller.phpのbeforeFilterやbeforeRenderあたりでレイアウトやテーマの設定をごそっとしてあげると便利かと思われます。

それではまた!

※参考にしたサイト

phyMyAdminでrootログインできないようにする手順メモ

作業経緯

場所を問わずphpMyAdminからDBを操作したいので、IP制限はしたくない。でも個人使用で複数DBにまたがった作業をするので、root同等の権限は欲しい、でもrootでphpMyAdminにログインできるのはあまりに危険。

作業した手順

  1. phpMyAdminにrootでログインして、「特権 -> 新しいユーザを追加する」から全権限を付与したユーザーを作成。(ユーザ名とパスワードは複雑に、ホストはlocalhost、ユーザ専用データベースは不要、グローバル特権はすべてチェック)
  2. phpmyadmin/config.inc.phpに「$cfg[‘Servers’][$i][‘AllowRoot’] = false;」を追記(作業前に念のためconfig.inc.php.bakなどでバックアップを取っておく。自分の場合、config.inc.phpは/usr/share/にありました。)

これだけ。もはやphpMyAdminにrootでは入れません。限定的ではあるけど、ちょっとだけセキュリティがマシになるかな…ぐらい。もちろん全権限を付与したユーザーが割れたら元も子もないので、そちらのセキュリティはしっかりと。

wordpressにGoogle XML Sitemapsプラグインを設置した

Googleのウェブマスターツールにこのブログを登録したら、サイトマップちょーだいって言われたので、プラグインでさくさくっと設置しました。参考にしたのは下記のブログ。

[Wordpress]Google XML Sitemapsを使ってGoogleウェブマスターツールにサイトマップを登録する方法 | たかひろぐ。

ほとんどこのまんまの手順なので改めてブログで紹介する必要すら感じないのですが、プラグインのインストールはwordpress管理画面からでも出来るので、可能ならこっちの方が楽かも。一連の手順をざっとまとめます。

wordpress側でのGoogle XML Sitemapsプラグインのインストール手順

  1. wordpress管理画面の左メニュー「プラグイン」→「新規追加」
  2. キーワードに「google xml sitemaps」を入力してプラグインの検索
  3. 「いますぐインストール」をクリックしてインストール(※出来ない場合は手動で設置)
  4. wordpress管理画面の左メニュー「プラグイン」→「インストール済みプラグイン」
  5. Google XML Sitemapsの「有効化」をクリック
  6. wordpress管理画面の左メニュー「設定」→「XML-Sitemap」
  7. 「まだ構築されていません」とメッセージが出ているので「こちらをクリック」をクリックしてサイトマップを構築する

Googleウェブマスターツール側での操作

  1. ダッシュボードからサイトマップを登録したいサイトを選択
  2. 「サイトマップ」をクリック
  3. 「サイトマップの追加/テスト」ボタンをクリックして、サイトマップのURLを入力(※デフォルトではwordpress設置URLと同じ階層のsitemap.xmlになります。このサイトなら「http://kou10mo.com/sitemap.xml」ですね。変更したい場合は設定メニューから可能です。)
  4. 「サイトマップをテスト」ボタンを押してサイトマップが表示されることを確認
  5. 「サイトマップを送信」ボタンで登録完了!

以上です。ウェブマスターツールにサイトマップを送っても大きな変化はないと思いつつ(特にwordpressの場合)、気持ち的にやっておきたかったのでやりました(笑)

それではまた!

Toodledoにメールからタスクを登録する方法

以前にメールアドレス登録の設定はしていたんだけど、どこから設定したのか分からなくなってしまったのでメモ替わりに。

Toodledo連携用のメールアドレスを確認する

  1. Toodledoの上部メニュー「Tools」の中から「More…」をクリック
  2. Email Accessという項目があるので「Configure…」をクリック

Toodledoのスクリーンショット

以上で、Send Tasks To: hogehoge@toodledo.com のようにメールアドレスが記載されていると思います。もしも「Enable e-mail importing」にチェックが入っていなければチェックを入れて、「Save Changes」のボタンを押して下さい。あとは、そのアドレスに宛ててメールを送信するだけでタスクが登録されます。

メールによるタスクの登録方法

Toodledo : How to use access Toodledo via email

上記の公式ヘルプに記載されている通り、Due-DateやFolderなどもセットで登録できます。例えば「ゴミ捨て」という名前のタスクを「FolderA」に「期限:今日」で、メモに「寝室のゴミ箱も忘れないように」と記載して登録したい場合は下記のようにメールを送ります。

  • メールの宛先「hogehoge@toodledo.com」(※人によって違います)
  • メールの件名「ゴミ捨て #today *FolderA」
  • メールの本文「寝室のゴミ箱も忘れないように」

一気に覚えるのは大変なので、まずはDue-Dateの「#」とFolderの「*」ぐらいを覚えておけば十分だと思います。Webやアプリで修正すればいいし、慣れれば他も覚えていくと思います。

ちなみに件名がタスク名だけだとDue-DateがNo Dateとして登録されるので、自分は「いつかやりたい事リスト」として使っています。思い浮かんだこと全てに期限を付けていたら、時間がいくらあっても足りないですもんね…

メールによるタスクの取得方法

上記で紹介した公式ヘルプに書いてあるように、同じメールアドレスを使用してタスクを取得する事も出来ます。こちらは件名の先頭に「?」マークを付けて、その後に条件を書きます。例えば「期限:今日」「Folder:MyProject」のタスクをメール経由で取得したい場合は下記のようにメールを送ります。

  • メールの宛先「hogehoge@toodledo.com」(※人によって違います)
  • メールの件名「?#today *MyProject」

使い所は…スマホからToodledoのWeb版が見づらいのと、使いやすいアプリは基本有料なので、タスクを取り出したいだけなら便利かもしれません。あとはガラケーから取得するには良さそうです。

このメール連携、結構便利なのでもっと分かりやすい位置にあってもいいのに、なんでこんなに分かりづらい場所にあるのかとっても不思議です(笑)

それではまた!

ストレスフリーになるための片付けタスク管理

片付けが苦手です。Toodledoに「部屋を片付ける」というタスクを入れているのに、一向に進む気配がありません。進まないだけならいいけど、タスク管理でDue Date(期限)がTodayからYesterdayに、そして数日前に変わっていく様を眺めるのはなかなかのストレスです…

進まない理由の一つは、タスクが漠然としていること。作業は分解できる限り分解するのがタスク管理の定石。具体的に何をすればいいかが書いてあれば、ものぐさな自分でも少しは動けそう。ということで、片付けのタスクをまずは下の2つに分解してみました。

  • リビングにある物は「本BOX」「その他BOX」の2つに収めて、それ以外は全て捨てるか書斎に追いやる
  • 書斎に追いやった荷物を…

うん、これだと書斎が物置になります(笑)これは望ましい状態じゃないので改善が必要ですが、たったこれだけでも多少のメリットはあります。自分はリビングのMacbookであらゆる作業をするので、書斎という名の部屋があっても、実質の作業場はリビングなんですね。つまり、リビングに置いてある物は常に視界に入ります。

ここで、2013/2/6にTV「ホンマでっか」で亀井眞樹先生が話していた内容を少し引用します。

斜めの天井・梁の下で寝るとがんになる可能性が!? – 亀井眞樹 | HONMADEKKA!?TV 「ホンマでっか!?TV」

脳は体に迫っているもの(尖っているものや押しつぶそうとするもの)があると自然と圧迫感を感じ取ってしまう傾向がある。

脳が無意識に不快と感じしっかりと睡眠できない可能性がある。

この話が本当だとすると、寝ている無意識の状態ですら危険なもの・気持ち悪いものにストレスを感じるという事になります。いわんや、起きている状態なら視界に入る雑多なものでストレスがかかっているのは想像に難くありません。

よく「片付けで幸せになる」的な本が出ていますが、一つのストレスが消えた結果として、心が穏やかになる一面はあるんじゃないかと思っています。なので、まずは自分が長く過ごす場所がキレイになることに主眼を置いて、上記のように2つのタスクを登録しました。

次は書斎に追いやった荷物ですが、やはり部屋を物置きにしてはいけません。追いやって溢れた物をどう片付けるかは…最近大人気のこんまり先生に頼ろうじゃありませんか!タスク管理の本と並んで、今の自分の愛読書の一つです。

本当は、必要でないもの全てを捨てるところまで達してはじめて片付けと言えるんでしょうけど、そう簡単に出来たらみんな苦労しないはず。自分は「自分が長く過ごす場所をキレイにする」ことでストレスフリーになって、「溢れたものを整理する」気力になるようにタスク登録をしてみました。自分みたいな人の助けになれば幸いです。

それではまた!

Googleリーダー終了について思うこと

2013年7月1日でGoogleリーダーが終了するという発表がありました。未読が増えていくばかりだからあまり使っていないという声、TwitterのキュレーターやGunosyなどのキュレーションサービスがあるから不要という声もあるけれど、使い倒してる声もたくさん見るんですよね。自分も使いまくりなのでとっても残念です。

キュレーションされた情報で足りる人には不要かもしれませんが、RSSってそれだけのサービスじゃないと思うんですよね。「読者は多くないけど好きなブログ」の更新チェックにはこの上なく便利なのに…

というか、むしろRSSの本質ってそこにあって、キュレーションとは別次元にあると思うんですけど、どうも同じレベルで語ってる人が多いのが気になります。

もし採算が合わないからという理由なら有料にすれば済む話ですけど、そんな感じでもないんですよね。もし署名運動なども実らず終了してしまうなら、乗り換え先を探すしかありません。今Macで使っているReederも公式に「Reederは死なない」と宣言してくれているので、しばらくは期待して待つとします。

さて、ももクロメンバーとアイマスガールズの記事更新でもチェックしようかな!

それではまた!

Mac初心者のための、謎なキーボードショートカット記号一覧

Windowsを使ってきた人間がMacを使いはじめると色々な違いに戸惑いますが、その中の一つがキーボードの配列。Windowsのキーボードにしたって色んな種類があるのに、Macには見たことないキーがあるし、JISキーボードとかUSキーボードとか意味分かんないし…あぁ挫折。

みたいなことになっちゃうわけです。ちなみにJISキーボードとUSキーボードはキーの形や配列が違う他、JISには「ひらがな」が書いてあります。なんか長年にわたるJIS派とUS派の宗教戦争があるらしいですが、自分はよく分からずJISのMacbookを買いました。下のサイトでは「USキーボード」が良しとされてますが、個人的には「JISキーボード」の方がWindows時代に近くて使いやすいです。Windowsの「半角/全角」キーと比べて、Macの「かな」「英数」キーの方が使い勝手いいですしね。

MacユーザーがUSキーボードを使うべき3つの理由 : tidestar

話がそれました。さて本題。MacにもWindowsのようなキーボードのショートカットキーがあります。

ショートカットキーの例

上記はChromeのメニュー例ですが、他のアプリケーションでも似たような表示があるはずです。ここで気になるのが…このうにゃうにゃした記号とか、上向きの太い矢印の記号が何か分からないんですよ。目の前の箱でググろうにも、どう調べていいか分からない、出てこない、探しづらい。全く困ったものです。「⌘(※Windowsだとフォントによっては文字化けるかも)」がCommandキーなのは、Macのキーボードを見れば分かるからいいとしても、他のはキーボードには書いてない。全く、ユーザーフレンドリーなAppleが聞いて呆れる!(八つ当たり)

というわけで、各記号とキーボードの対応、キーの役割紹介です。

記号 該当キー 備考
Command command Windowsで言う「Windows」キーと「ctrl」キーを兼ね備えたような、Macの核となるキーです。Windowsに慣れてると、位置的に慣れるまで押しづらいかも。
Control control Windowsの「ctrl」キーよりは出番が少ないかな?「^」のショートカットを見かけた時に使います。
Delete delete 文字を削除する時に使うおなじみのキーです。Windowsだと「BS (Back Space)」キーですが、Macだと「delete」なんですよね。紛らわしいったら…
ForwardDelete forward delete Windowsでいう「Del」キーに該当します。iMacなどデスクトップ版のキーボードには単体のキーとして存在しますが、Macbookにはありません。Macbookでは「fn + delete」の組み合わせで動作します。「forward delete」キーなどと呼ばれたりもします。
Eject eject これはキーボードそのままの表記なので分かりやすいでしょう。押すとCDなどが出てきます。
Escape esc おなじみ?エスケープキーです。Windowsと一緒で、押すと何かと表示が消えてくれたりします(笑)
Option option Windowsの「Alt」みたいな位置づけ。記号になると、自分はShiftとよく勘違いします(^_^;)あと、どことなく「ぬーん」とした顔にも見える。
Shift shift 役割はWindowsのShiftとほとんど同じです。ショートカットでもよく使うから、記号も覚えちゃいましょう。
Tab tab これもWindowsと似たようなもの。確かにtabっぽい記号…かな?

どうでしょう?とっつきにくいのは覚えるまでだけで、覚えてしまえばWindowsもMacも大差ないので、バッチリ覚えてMacを使いこなしましょう!

ちなみに文字として入力したい場合は、「ことえり」や「Google日本語入力」の「文字パレット」を開いて、Unicodeの「その他の技術用記号」の欄を探せばほとんどあります。最後のリンクでも紹介しているコンバータなどを使用してコピペする手もあります。

それではまた!

参考にしたサイトなどへのリンク