SyntaxHighlighter

2014年3月29日土曜日

redmine の DMSFをいれるよー

勢い、ドキュメント管理をredmine使ってやるよ!って言ってしまった。

そして、いざ使ってみるとredmineでは階層構造で文書を管理できない…。正確には「カテゴリ-タイトル-文書」という程度にはできるが、もっと柔軟なディレクトリは作れない。

そこで検索して出てきたのが、redmine_dmsfでした。


  • ドラッグ&ドロップによるファイル登録
  • ディレクトリ構造

が使えます。ファイルは一度に複数登録可能。ただし、ディレクトリをドラッグ&ドロップしてもダメでした。だから階層構造を作るには、ディレクトリを作り、ファイル投入、ディレクトトリを作り、ファイル投入を繰り返さないとだめなのねん(´ー`)

インストールは ここ のところにある通り。migrationとかやるのでちょっと怖かったですが、やってみたらあっさりうまくいきました。#でも実施前はバックアップしときなよ!

試したredmineのバージョンなど。


今のところ日本語ファイル名のものを登録してもちゃんと動いてる…(^ω^) イイネ!


なにげに迷ったのがディレクトリの作り方。

答えは簡単。リスト右上の+ボタンでした。



これでなんとかなりそうだ .。゚+.(・∀・)゚+.゚

2014年3月26日水曜日

CakePHP2.4 で userごとのpasswordハッシュ値をつくるよ

結論からいうとできませんでした。ゴリゴリとCakePHPのソースを侵食すれば行けるのかもしれませんが…

CakePHP2.4からパスワードのハッシュのカスタマイズはPasswordHasherクラスを基底としたクラスを作り、登録することで出来ます。

でもこのPasswordHasherのhash()っていうメソッド、$passwordっていうパスワード文字列しか渡せない。ユーザーIDが渡せない。

hash($password, $additional)みたいな感じでハッシュ生成時に追加できる文字列指定できればいいのに…。


ストレッチングはパスワード文字列があればまぁ簡単にできるんだけどなあ。CakePHP作ってる方面ではユーザーIDを混ぜ込む文化がないのかな?

結局 AuthComponentの_findUser()に手を入れないとダメな感じであきらめモード。残念。

2014年3月19日水曜日

CakePHP で modified が更新されない

すっかりCakePHPにおまかせで、その機能を疑ってもいなかったんですが。

よくよく見てみると、パスワード変更してusersテーブル見てみたら、modifiedが更新されてないでやんの。('A`)

ググってみたりしたけどイマイチわからず。


で、行き着いたところが、「updateするmodelのmodifiedに値が入ってると、その値でアップデートする」ということだ。


  $this->loadModel('User');
  $userInfo = $this->User->findById($this->Session->read('Auth.User.id'));
なんてやっといて、
  $userInfo['User']['password'] = $newPassword1;
  if (!$this->User->save($userInfo, array(
        'validate' => true,
        'fieldList' => array('password')))) {
      $this->tx->rollback();
      return $this->passwordChangeError('パスワードの変更でエラーが起きました。');
  }
ってやると、findByした時の値が入ってるから、更新されない。だからsave前にnullを突っ込んでやる。
  $userInfo['User']['password'] = $newPassword1;
  $userInfo['User']['modified'] = null; // ######################### ここ #####################
  if (!$this->User->save($userInfo, array(
        'validate' => true,
        'fieldList' => array('password')))) {
      $this->tx->rollback();
      return $this->passwordChangeError('パスワードの変更でエラーが起きました。');
  }
これで更新されるようになったよ… なんかイマイチな気がする。 他に手があるんだろうか?

Twitter Bootstrap と CakePHP ライセンスはどうなっているか

Twitter Bootstrap は Apache License 2 のようです。

CakePHP は MITライセンス とのこと。

どちらも商用利用可能。緩めのライセンスです。ありがたいことです。

2014年3月17日月曜日

MySQLのevent scheduler(イベントスケジューラー)を使うよ

イベントスケジューラ自体の動作確認

まず、my.cnfで不活性にしてないか確認する。
あればコメントアウトしておく。

[mysqld]
# event_scheduler=DISABLED


端末でMySQLにログインする。
次のコマンドを叩く。

mysql> select @@global.event_scheduler;
+--------------------------+
| @@global.event_scheduler |
+--------------------------+
| OFF                      |
+--------------------------+
1 row in set (0.00 sec)


ONにする。
mysql> set global event_scheduler=ON;
Query OK, 0 rows affected (0.01 sec)

mysql> select @@global.event_scheduler;
+--------------------------+
| @@global.event_scheduler |
+--------------------------+
| ON                       |
+--------------------------+
1 row in set (0.00 sec)


my.cnfに書いておく。

[mysqld]
event_scheduler=ON


どんなイベントが登録されているか見る。(参考 - http://dev.mysql.com/doc/refman/5.1-olh/ja/show-events.html

mysql> SHOW EVENTS;


各イベントの中身はSHOW CREATEで見ることができる。

mysql> SHOW CREATE EVENT <your_event_name>;


追記: イベントのステータス(最後に実行されたのはいつ?とか)はmysql.eventの中身でわかる。

select * from mysql.event;