1 May 2017

[MAMP]PHPのバージョンが2つしか表示されない

備忘録。タイトルが答です。
http://stackoverflow.com/questions/42281405/mamp-phpmyadmin-is-not-active#42287871
MAMP shows only two versions of PHP
PHP7系が2つ表示されていたので、/Applications/MAMP/bin/php/ 内のフォルダを整理して(どうも降順で選択されるぽい)、無事php5系が表示されました。
正解に辿りつくのにめちゃくちゃ時間がかかった…

3 Apr 2017

[Cakephp2] cakedc/users プラグインと ACL ビヘイビアを併用するために必要な事

CakePHP2なんて、本当に今更ですが、2017年4月現在、cakedc/users とACLビヘイビアを併用するには、それぞれのチュートリアルに沿って変更をする点の他に、
例えばAppController.php の中の $components の設定に以下の一行を書き加える必要があります。
     'userModel' => 'AppUser',
該当ブロックは以下の様になります。
 public $components = array(
  'Session',
  'Flash',
  'Acl',
  'Auth' => array(
   'loginAction' => array(
    'controller' => 'app_users',
    'action' => 'login',
    'plugin' => false
   ),
   'loginRedirect' => array(
    'controller' => 'posts',
    'action' => 'index'
   ),
   'logoutRedirect' => array(
    'controller' => 'pages',
    'action' => 'display',
    'home'
   ),
   'flash' => array(
    'element' => 'alert',
    'key' => 'auth',
    'params' => array(
     'plugin' => 'BoostCake',
     'class' => 'alert-error'
    )
   ),
   'authorize' => array(
    'Actions' => array(
     'actionPath' => 'controllers',
     'userModel' => 'AppUser',
    ),
   ),
   //'authError' => 'Did you really think you are allowed to see that?',
   'authenticate' => array(
    'Form' => array(
     'passwordHasher' => 'Blowfish',
     'userModel' => 'AppUser',
     'fields' => array(
      'username' => 'username', //Default is 'username' in the userModel
      'password' => 'password'  //Default is 'password' in the userModel
     ),
    ),
   ),
  ),
  'DebugKit.Toolbar'
 );
'userModel' => 'AppUser',
at your settings for Auth Component Section in AppContoroller.php.
whole block would be:
 public $components = array(
  'Session',
  'Flash',
  'Acl',
  'Auth' => array(
   'loginAction' => array(
    'controller' => 'app_users',
    'action' => 'login',
    'plugin' => false
   ),
   'loginRedirect' => array(
    'controller' => 'posts',
    'action' => 'index'
   ),
   'logoutRedirect' => array(
    'controller' => 'pages',
    'action' => 'display',
    'home'
   ),
   'flash' => array(
    'element' => 'alert',
    'key' => 'auth',
    'params' => array(
     'plugin' => 'BoostCake',
     'class' => 'alert-error'
    )
   ),
   'authorize' => array(
    'Actions' => array(
     'actionPath' => 'controllers',
     'userModel' => 'AppUser',
    ),
   ),
   //'authError' => 'Did you really think you are allowed to see that?',
   'authenticate' => array(
    'Form' => array(
     'passwordHasher' => 'Blowfish',
     'userModel' => 'AppUser',
     'fields' => array(
      'username' => 'username', //Default is 'username' in the userModel
      'password' => 'password'  //Default is 'password' in the userModel
     ),
    ),
   ),
  ),
  'DebugKit.Toolbar'
 );

[CakePHP2] Using ACL Behaviar with cakedc/users

As of April, 2017, with cake 2.9.7 and the newest plugins,
You will need 
     'userModel' => 'AppUser',
at your settings for Auth Component Section in AppController.php.
whole block would be:
 public $components = array(
  'Session',
  'Flash',
  'Acl',
  'Auth' => array(
   'loginAction' => array(
    'controller' => 'app_users',
    'action' => 'login',
    'plugin' => false
   ),
   'loginRedirect' => array(
    'controller' => 'posts',
    'action' => 'index'
   ),
   'logoutRedirect' => array(
    'controller' => 'pages',
    'action' => 'display',
    'home'
   ),
   'flash' => array(
    'element' => 'alert',
    'key' => 'auth',
    'params' => array(
     'plugin' => 'BoostCake',
     'class' => 'alert-error'
    )
   ),
   'authorize' => array(
    'Actions' => array(
     'actionPath' => 'controllers',
     'userModel' => 'AppUser',
    ),
   ),
   //'authError' => 'Did you really think you are allowed to see that?',
   'authenticate' => array(
    'Form' => array(
     'passwordHasher' => 'Blowfish',
     'userModel' => 'AppUser',
     'fields' => array(
      'username' => 'username', //Default is 'username' in the userModel
      'password' => 'password'  //Default is 'password' in the userModel
     ),
    ),
   ),
  ),
  'DebugKit.Toolbar'
 );

10 Jul 2015

[CakePHP2]使用を避けるべきModel の名前、それは Folder

あまりにも長い間いろいろ試して判明したのがこれ。

タイトルで終了しますが、CakePHP の bake でコード生成をする際避けるべきデータベーステーブルの名前は、 folders です。

理由はUtility::Folderと名前空間がかぶるから。自動生成つかってなくても、普通にぶつかって一見原因不明のエラーが出ます。

ほかにもモジュール名でかぶりそうなものもありそうですが、ひとまず。


16 Apr 2015

[CakePHP2]モデル内で別のモデルを参照する(追記あり)

別のファイルを参照するのは3通りあるそうです。
参照元:
http://stackoverflow.com/questions/980556/can-i-use-one-model-inside-of-a-different-model-in-cakephp
から説明を抜粋。
App::import() ファイルを見つけてインポートします(それだけしかしません)。クラスを使用するにはインスタンスを作製する必要があります。 ClassRegistry::init() ファイルをロードして、インスタンスを作製します。何かをロードするにはimportよりもベターです。なぜならCakePHPが通常呼び出しの際に内部で行う手続きも実行されるからです。またクラスネームにエイリアスをつけることができます。便利です。 Controller::loadModel() 前述の ClassRegistry::init() を使用してモデルをロードします。$persistModel を使用したキャッシングにも対応します(する予定です?)。コントローラ内部でのみ動作します。
と上記では書いてありますが、Model内でも Controller::loadModelは作動する模様。

Controller::loadModel('AnotherModel');
$data = $this->AnotherModel->read(null, $id);
(追記7/7)やっぱりだめっぽい。以下のやりかたが良いようです。
$anotherModel = ClassRegistry::init('AnotherModel');
data = $anotherModel->read(null, $id);

6 Mar 2015

[Haskell] CSV Library cassava

確定申告の時期、銀行やらカードやらの明細を自分のソフトで読み込めるように変換してますが、Haskellでやるにはどうしたものかと思いいろいろ検索。

Cassavaというライブラリがあるようです。

Bitstringでなしに、各フィールドの型を決めて読みこめるみたいですが、ひとまず触ってみることにします。

14 Feb 2015

Buffalo無線ルータで 無線LANをブリッジ接続で中継する手順について

こんなことに半日費したので記録しておく。
中継機に使おうとしたのは Buffalo WHR-600Dでした
そもそもは元ルータのAterm WH862A から、DHCPの割り振りがチェックできないので、中継器にアクセスできないのがこんなに時間がかかった原因でした。マニュアルに書いてある 192.168.11.1 には、アクセスできないし…。
BUFFALOの無線LANルーター(WHR-G301N等)でブリッジ接続を設定するときの手順
http://wp2.trojanbear.net/1286.html
"今回の設定で一番厄介なのは、BUFFALOの無線LANルーターのディップスイッチをOFFにすると(筆者註:ブリッジモードにする時も)問答無用で無線LANルーターのIPアドレスが192.168.11.100 になってしまう事です。"
この記述が救いでした。 有線で中継器に192.168.11.100にアクセスして無事に設定ができました。

めでたし。

10 Feb 2015

[CakePHP2] date / datetime / year フィールドで和暦の年を併記する

CakePHPのフォーム自動生成、超便利です。
日付に和暦が表示されて欲しいとき、この自動生成の中で勝手に変換されたら、最高です。
要はこんな感じで。
相変わらずでっちあげですが、
/app/View/Helper フォルダにFormHelper.php をコピーします。
_generateOptions というのがオプションを生成してる箇所になるんで、


case 'year':
(中略)
    for ($i = $min; $i <= $max; $i++) {
        $data[$i] = $i;
    }
(中略)
    break;
の箇所を
for ($i = $min; $i <= $max; $i++) {
    $wareki = 0;
    if ($i > 1988) {
        $wareki = $i - 1988;
        $data[$i] = "${i}年(平成${wareki}年)";
    } elseif ($i > 1925) {
        $wareki = $i - 1925;
        $data[$i] = "${i}年(昭和${wareki}年)";
    } elseif ($i > 1911) {
        $wareki = $i - 1911;
        $data[$i] = "${i}年(大正${wareki}年)";
    } elseif ($i > 1867) {
        $wareki = $i - 1867;
        $data[$i] = "${i}年(明治${wareki}年)";
    } else {
        $data[$i] = "${i}年";
    }
}
に置き換えます。

表示はお好みで。

3 Jan 2015

[CakePHP2] データベースにログをとる

Logging(CakePHP official)
http://book.cakephp.org/2.0/en/core-libraries/logging.html
Database logging in CakePHP
http://blog.jandorsman.com/blog/database-logging-in-cakephp
一つ目の記事に書いてあることはCake2.*でもそのままつかえます。ファイルの場所が 'app/libs/log/database_logger.php'(for CakePHP 1.*) から 'app/Lib/Log/Engine/DatabaseLog.php' (for CakePHP 2.*)になるぐらいです。素晴しい。

たとえばログにセッション情報(ユーザIDとかね)を記録したい、みたいな事になったら、ユーザがログインしてるのか確かめないと、ログインしてない時に上手くログに入りません。例えばログイン失敗しました、みたいなログがきちんと取られないことになります。
public function write($type, $message) {
 $log['type'] = ucfirst($type);
 $log['created'] = date('Y-m-d H:i:s');
 $log['content'] = $message;
 if ($login = CakeSession::read('Auth.User')) {
  $log['user_id'] = $login['id'];
 }


 return $this->Log->save($log);
}

[CakePHP2]Database logging (with some Cakesession Object)

Logging(CakePHP official)
http://book.cakephp.org/2.0/en/core-libraries/logging.html
Database logging in CakePHP
http://blog.jandorsman.com/blog/database-logging-in-cakephp
Well, Jan's article is totally usable even in CakePHP 2.4 except one location 'app/libs/log/database_logger.php'(for CakePHP 1.*) to 'app/Lib/Log/Engine/DatabaseLog.php' (for CakePHP 2.*).

When you want log some information via Cakesession Object (i.e. user ID), you should check the object first in case the user not logging in.

public function write($type, $message) {
 $log['type'] = ucfirst($type);
 $log['created'] = date('Y-m-d H:i:s');
 $log['content'] = $message;
 if ($login = CakeSession::read('Auth.User')) {
  $log['user_id'] = $login['id'];
 }


 return $this->Log->save($log);
}

19 Nov 2014

[PHP]時間を15分刻みに変換する

覚え書きの殴り書き。 時間を15分刻みに変換する。切り上げ、切り捨てありです。
/*
 * dateBy15Minutes
 * @assert ("2001-03-10 17:16:18") == "2001-03-10 17:15:00"
 * @assert ("2001-03-10 17:00:00") == "2001-03-10 17:00:00"
 * @assert ("2001-03-10 17:59:59") == "2001-03-10 17:45:00"
 * @assert ("2001-03-10 17:40:18") == "2001-03-10 17:30:00"
 */

 protected function _dateBy15Minutes($mode = 'ceil',$time = NULL) {
  if (\is_null($time)) {
   $time = time();
  } else {
   $time = \strtotime($time);
  }
  if ($mode == 'ceil') {
   $minute = \sprintf("%02s", \ceil(\date('i') / 15) * 15);
  } else {
   $minute = \sprintf("%02s", \floor(\date('i') / 15) * 15);
  }
  $time_string = \date("Y-m-d H:i:s", \mktime(\date('H'), $minute));
  return $time_string;
 }

12 Nov 2014

[CakePHP2][Composer] プラグインもComposer経由でインストールするときにapp/Plugin フォルダに入れたい。

参考資料
https://github.com/composer/installers
増減するプラグインのために一個一個設置場所を書いていたのですが、うまいことでっちあげたんで、ログとして。
composer.json:
{
    "name": "app",
    "config": {
        "vendor-dir": "Vendor/"
    },
    "extra": {
        "installer-paths": {
            "app/Plugin/{$name}/": ["type:cakephp-plugin"]
        }
    },
    "require": {
        "php": ">=5.3",
        "cakephp/cakephp": "~2",
        "composer/installers": "~1",
        "cakephp/debug_kit": "~2",
        "cakephp/localized": "~2"
   }
}

3 Oct 2014

[Skype] オフラインにしてもオンラインのまま

オフラインにしてもオンラインのまま

(2014/10/03 時点)
結果からいくと、複数でログインしている場合、その全てで、上記にある「ステータスを [ログイン状態を隠す]か[オフライン] に変更」すれば、オフラインとして表示されます。(自分の場合はpc二つと、iPhoneのもの)

8 Jul 2014

[CakePHP2]サブディレクトリにCakePHPを配置

CakePHPをサブディレクトリで動かすのは、一工夫いるみたいですが、
cakePHPでサブディレクトリで運用する設定あたりを参考にして、.htacess ファイルに変更を加えてみましたがうまくいかず。Composerを使えて構築してるからなのかとも思ったのですが、、

とりあえずMAMPでの話。CakePHPのバージョンは2.5.2です。

cakePHPでサブディレクトリで運用する設定
http://localhost/test/
のようにtestディレクトリ下でcakeを展開したい場合
各フォルダの3つの.htacessに下記を追加
RewriteBase    /test
1./test/直下にある.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
   RewriteBase /test
</IfModule>
2.appディレクトリ直下の.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
    RewriteBase /test/app
</IfModule>
3.webrootディレクトリ直下の.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
 RewriteBase /test/app/webroot
</IfModule>
に加えて、
app/Config/route.phpに下の2文を加える。
        Router::connect('/test/:controller', array('action' => 'index'));
        Router::connect('/test/:controller/:action/*');
    Router::connect('/test/', array('controller' => 'pages', 'action' => 'display', 'home'));

28 May 2014

[phpunit][NetBeans] Command "Calculator" is not defined.



NetBeansの設定を終えて、チュートリアルへ。

https://netbeans.org/kb/docs/php/phpunit.html
テストを作成しようとすると、うまくいかない。
エラーメッセージが。
"/usr/bin/php" "/Users/xxxx/local/bin/phpunit-skelgen" "--test" "--" "Calculator" "/Users/xxxx/NetBeansProjects/Calculator-PHPUnit/src/Calculator.php" "CalculatorTest" "/Users/xxxx/NetBeansProjects/Calculator-PHPUnit/test/CalculatorTest.php"
phpunit-skelgen 2.0.1 by Sebastian Bergmann.
          
  [InvalidArgumentException]            
  Command "Calculator" is not defined.  

Done.

どうやらバージョンが変わってコマンド体系が変わっている模様。 しばらく手動で作成かな…

27 May 2014

[NetBeans][CSS][PHP]NetBeans 設定録 2

環境設定のそれぞれの箇所に適切なソフトをあてはめていきます。

PHP

PHPUnit

phpunit

http://phpunit.de/

phpunit-skelgen

curl -O https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit
osxにはwgetがないので curl -O で代用

 WordPress

wp-cli

http://wp-cli.org/

Code Analysis

PHP_CodeSniffer

pear install PHP_CodeSniffer
CodeSnifferを導入しCakePHPコーディング規約をチェックする
 http://mawatari.jp/archives/introduction-of-cakephp-codesniffer
を参考にCakePHPコーディング規約をインストール

Pear

pear が 入ってなかったのでこれもインストールした。
$ curl -O http://pear.php.net/go-pear.phar
$ php -d detect_unicode=0 go-pear.phar

Mess Detector 

http://phpmd.org/

[Netbeans]設定録 1

CakePHPで、PHPUnitを使って、ユニットテストをしたい、というのがひとまずの最終目標ですが、

  • キーバインドはviで
  • Composerを使用して構成
  • Gitレポジトリで管理
  • PHPUnitでユニットテスト
あたりを実現すべく、作業していきます。
(現時点でのNetBeansIDEのバージョンは8.0)

NetBeansIDE Download
https://netbeans.org/downloads/index.html

jVi - vi editor clone
Tool > plugin からインストールできるのか。

NetBeans に vi プラグインをインストール
http://www.applelife100.com/2012/06/19/netbeans-vi-plugin-install/
以下のプラグインもインストール

CakePHP, Wordpress, EditorWhitespace, gitignore.io, Git Toolbar, JS CSS Minify Compress


Emmetに興味があるけど、端境どきなのか、プラグインセンターからインストールできないので、あとまわし。

[追記]
とりあえずjViがうまく動いてないみたいなので、ひとまず7.4にして設定します。

[追記2]
Emmentもインストールできました。

21 May 2014

[OpenDNS]設定おぼえがき

自宅のネット回線の契約を新しいものに変更したら、繋り具合が悪くなったり、facetimeがwi-fiごしにうまく繋らなくなったりしたので、ルータのDNSをOpenDNSのアドレスにしたら、不具合がなくなった。という覚え書き。
http://www.opendns.com/
細かい設定は抜きにして、DNSの参照だけに使うなら、
  • 208.67.222.222
  • 208.67.220.220
に設定すると変更できます。
ルータの方で設定すれば細かいセッティングを機器ごとに行わなくて良くて幸せ。
[追記]
結構早くなるのかな?
http://sourceforge.jp/magazine/07/02/02/0130245/2

15 May 2014

[Wordpress]現在のページURLを取得する

the_permalinkだけでは、indexページでうまくいきません。
参考サイト:http://wordpress.org/support/topic/get-the-current-url
<a href="><?php
if(is_home()){
    bloginfo('url');
} else {
    the_permalink();
}
?>"></a>

7 May 2014

[FreeBSD] VM作成記 X - installed ports

随時変更、する予定です。
shells/zsh
editors/vim
x11/xorg
dev/llvm
lang/clang