2008年10月23日木曜日

CAKEPHP1.2 SEHLLを継承したAppShellでモデルが使えない。

CAKEPHP1.2 RC3です。

shellを継承したAppShellクラスを作って、そいつを継承したShellを実行したら

モデルオブジェクトがundefinedになってしまう。

Shellクラスのinitialize()メソッド(cake/console/libs/shell.php 163行目)

を呼ぶ必要があるんだけど、こいつが、

Shell.php の実行時にしか呼ばれない(cake/console/cake.php 305行目あたり)。

くわしくいうと、親クラスがShellClassの場合しか呼ばれない。

つまり、ShellClassを継承したAppShellClassを継承した孫クラスでは

親クラスがAppShellClassになるため、呼ばれないみたいです。

startupをオーバーライドしてたので、今回はそこに、

parent::initialize();

を書いたけど、Taskを使う場合は、loadTasks()などの処理も必要。

(__constructをオーバーライドしてそこで、書いてもいいけど。)

うーん、こんなもんですか?

2008年10月21日火曜日

MySQLインストール innodbはデフォルトじゃない?!

MySQL5.1.28-rcをソースからインストールして、

/etc/my.cnfのinnodbの記述を全てコメントアウトをはずして

起動すると

エラーになる。

で、結局は

configureオプションに

--with-innodb


をつけなきゃいけないというわなでした。

mysql5.1.28-rc インストール unknown option '--skip-federated' エラー

CentOs5.2(サクラインターネット 専用サーバ)

のMYSQLを消して、MySQL5.1系を入れようとしたときにはまった箇所

bin/mysql_install_db --user=mysqlをした後に

unknown option '--skip-federated'

が表示される。

うーん、なんだこれ?と思ったら

/etc/my.cnfとしてコピーした設定ファイルに

skip-federated記述をコメントアウトしたら、いけた。

federatedエンジンをコンパイルオプションにつけてなかったからかな。

support-files/my-huge.cnf /etc/my.cnf

をコピーしてきたんだけど、デフォルトでコメントアウトしててほしいですね。

2008年10月16日木曜日

LIMITに関数が使えないの?

MySQLってSQL文のLIMITに関数が使えないようです。

SELECT * FROM xx LIMIT FLOOR(50/20)

とかはNGになるみたい。

PROCEDUREのカーソルで、引数から渡したパラムを渡すのもNGみたい。

不便だ。

ちなみにPOSTGRESではいけるみたいよ。

2008年10月10日金曜日

MySQLで外部キー制約の時のエラー

MySQLで外部キーを張ろうとしたらエラーになった。

以下、エラーになった状況のメモとして。

・親テーブルの主キーの型にunsignedを付けるとエラーになる

・親テーブルの主キーの型と子の型があってないとエラーになる。

(親テーブルをbigintにしてたのに、子テーブルのxx_id をintegerにしてた)

2008年9月30日火曜日

php csvダウンロードで画面が真っ白

ユーザデータ(3000件くらい)をダウンロードしようと思ったら

Firefoxで画面が真っ白になった。

IE7では、「つながりません」エラー。

条件を絞って200件くらいにすると、問題なく出来る。

ローカルでは問題なかったので、サーバ環境のメモリーがおかしそう。

そこで、サーバに

<?php phpinfo() ?>

と書いたファイルを置いて、メモリーを見てみる。

サーバ:memory_limit = 16M

開発:memory_limit = 128M

これが原因ですね。

このサーバは、専用なので、直接php.iniを書き換え。

memory_limit = 128M

Aapcheを再起動して、ダウンロードできることを確認。

ふ~やれやれでした。

2008年9月27日土曜日

MySQL 複数の結果を1行にまとめる

各ショップに毎に設備が入った複数レコードがあるとする

shop_id, setsubi_id

1           ,1

1           ,2

1           ,3

みたいなデータがある場合

SELECT shop_id, GROUP_CONCAT(setsubi_id) FROM テーブル

とすることで、コンマ区切りの文字列で

1 (1,2,3)

といった1行のレコードが取得できる。

GROUP_CONCATの引数で、コンマじゃなくて、セパレータは変えれるみたい。

http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html

さらに、こいつ(=strとする)を

LOCATE関数にかけて

IF(LOCATE((str),1) > 0, 1,0)とかすると、IDが存在するかチェックできる

のかな?

2008年9月12日金曜日

SELECTの集計結果を UPDATE

Mysql で二つのテーブルがあって、一方のテーブルで集計したものを

もう一方のデータにいれたい場合、

KeyがユーザーIDで結びついてるとすると

UPDATE user AS u
SET total = (
SELECT SUM(s.score) FROM score s
WHERE s.user_id = u.id
GROUP BY s.user_id
);

となる。

WHERE 書いてからGroup by 構文を書くんだね。

まーそうなんだろうけど、ややはまった。

2008年8月19日火曜日

ポートフォワード

ポートフォワードしてMySQLなどを使ってた場合、

最終サーバにアクセスするために接続が必要な

踏み台サーバ経由でポートフォーワードする場合、

最終サーバの22番ポートを例えば10022などにポートフォワードしてやればいい。

そして、その接続がいきた状態で、

localhostの10022番に最終サーバアカウントとしてログイン。

http://rat.cis.k.hosei.ac.jp/article/rat/serverliteracy/2005/ssh.html

2008年8月18日月曜日

家を決めることについて

お盆休みは家探しをずっとしてました。

一回目に行ったのが、8月3日、

ハウツーホームさん。

物件の条件を言うと、希望駅(急行停車駅)は

かなり古い物件か、駅から遠い物件しか空いていないとのこと。

ねらい目のハイツも、「僕のお客さんだけで5組待ちなんですわ」とのこと。

やれやれ、これはあきらめよう。

ってことで、近くの駅まで対象を広げて、探したところ、

よさそうなところがありました。

車に乗せてもらって、いざ、確認へ。

1階だけど、庭もあって、家みたいな感じでいい感じ。

そんな感じで、1日目は終了。

2回目。またもや、物件を何個か見せてもらう。

でもやはり、前回見たところ(別部屋だけど)を仮押させしてもらう。

お盆なので、空いてるかわからないとのこと。

FAXを管理会社に流して、お盆明けに、それが一番に

届いてた人がゲットできるそうです。

3日目。お盆明けだと思ってたら、1日間違ってたので

まだ結果がでず。でも、もう取れたつもりで

寸法を測りに行く。

4日目。どきどきしながらも、お店に行くと、

「取れてましたよ~」とのこと。

ありがたく、ゲットです。

なんとか、家なき子は免れました!!

やったね!

2008年8月1日金曜日

プッチョが旨すぎる件

UHA味覚糖が出している

ぷっちょ フルーツミラクル

が旨すぎる。

いつもひとつずつしか食べてないのだが、

旨すぎる。

1週間に5個しか食べさせてもらえないので

今日我慢して、明日二つ食べてしまうか

木曜まで我慢しまくって、金曜に至福のときを過ごすか

実に悩ましい。

実に悩ましいのだ。

2008年7月30日水曜日

apache 起動しない

1.php.ini の iisfunc.dllが有効になっているとエラーになる。

2. php5.2.6のwindowsインストーラー版はエラーになるので、zip解凍のを使う。

2008年7月24日木曜日

【php】php5でphpをのタグで認識させたい

php4で書かれたソースでは

phpの記述子を

<? ?>

で書いてました。

でも、php5のデフォルトでは

<?php ?>

じゃないとだめなので

php.iniの

short_open_tag = On

に変更します。

変更したら、Apache再起動しようね。

2008年7月23日水曜日

【cakePHP】ヘルパーで、表示させる文字コードを変換する

ある特定のコントローラーのビューで、他と文字コードを変えたい場合があった。

具体的にいうと、管理画面では、UTF-8、ユーザ閲覧画面ではEUC-JP。

携帯用のviewなども、こんな感じじゃないかな。

で、そんなときは、

ヘルパーを使ってえいや!って変換。

<?php
class MobileHelper extends Helper {

function afterRender() {
mb_http_output('EUC-JP');
$out = ob_get_clean();
$out = mb_convert_kana($out, "rak", "UTF-8");
$out = mb_convert_encoding($out, "EUC-JP", "UTF-8");
ob_start("mb_output_handler");
echo $out;
}

}
?>




こんな感じでした。

2008年7月20日日曜日

崖の上のポニョ

二条シネマで見てきました。

ここ、気持ちですが、席が広い気がします。

で、表題の「崖の上のぽにょ」

宮崎駿さんの最新作を、公開日に見てきました。

CMの曲が頭から離れずで、見たい見たいと思ってた作品。

感想は

設定がめちゃくちゃだなーと思いました。

魚→半魚人→人間の子供に変身。

っていう強引な設定。

ただ、頭を切り替えて、

これは夢の中のセカイの冒険ストーリーなのかな。

と思えば、すごく楽しめました。

久しぶりのストレートなハッピーエンドが印象的です。

「トトロ」が見たくなった人が多いと思うけど、

俺は「耳をすませば」が見たくなりました。

2008年7月15日火曜日

windows updateに失敗する xp SP3適応後

なんどやっても失敗するんで、調べたら

http://support.microsoft.com/kb/953541

の方法1で解決しました。

バグですか?

2008年7月12日土曜日

wordpress Pageの内容をタグで取得したい

こんな感じでいけますよと。

<?php
$news = get_pages('include=記事ID');
foreach($news as $new) {
echo ($new->post_content);
}
?>

2008年7月7日月曜日

2008年7月5日土曜日

2008年7月1日火曜日

TortoiseSVNで接続できない

TortoiseSVNダウンロードしてきて


pageantでかぎの登録もしてるのにつながらない。


なんでだろうと思ったら


puttyで一度はSVNサーバに接続しなきゃだめみたいです。


windows にapache phpで

mysqlを動かすのにはまった。

むっさむかつくほどはまった。

結局は
DLLのコピー
C:WINDOWSsystem32libmysql.dll

をしてなかっただけ。

やれやれ。

php_mysql.dllと一緒になってた。

2008年6月13日金曜日

MySQL EUC-JPのSQL文を入れて、EUC-JPのDBを作りたい

winSCPでデータをあげて

mysql> use db名

mysql> source ファイルパス

で流し込めばOK.

MySQL4.0系のインストール

MySQL4.0系の公開はとっくに終わってるので

ダウンロードする場合は

http://download.softagency.net/MySQL/Downloads/

から落としてくるといいよ。

apache2.2 .htaccess httpd.confの設定について

localで開発環境作る場合なら

httpd.confを

<Directory />
Options FollowSymLinks
#    AllowOverride None
AllowOverride All
#    Order deny,allow
#    Deny from all
</Directory>
にしておくと、extra/httpd-vhosts.conf

にあんまりかかんでいいし、便利かな

2008年6月12日木曜日

旅行について

旅行の行き先を考えてます。

でもほぼ
・ニューカレドニア
・タヒチ
のどっちかにしようと思います。

JTBにするか、HISにするか、あやしげなとこにするか。

値段や条件を含めて

お悩み中。

2008年5月27日火曜日

CakePHP 日付の表示

<?php echo h(date("Y年m月d日 G時i分",strtotime($event['Event']['start_datetime']))); ?>

たとえばこんな感じです。

cakePHP 指定していないのにモデルがないと怒られる

cakePHP1.1で

EntryControllerでEntryモデルを使わないとしよう。

でも、Eventモデルは使う場合・・。
class EntriesController extends AppController {

var $uses = array('Event');

となるだろう。

この場合、Entryモデルは別になくても問題ないはずなのに、

appContorollerでおんなじように


class AppController extends Controller {

var $uses = array('Event');

としていると、

このお互いの$usesが同じものだったら、なぜか、TestControllerに

Testモデルがないと怒られる。

違うモデルを入れとくと、うまくいくんだが。

なんか理由があるのかな?

2008年5月23日金曜日

【MySQL】left join, right joinを同時にしたい full joinみたいなん。

oracleやpostgreSQLでは、full outer joinというものがあるが
MySQLにはない。
そんなときは、joinとunion distinctの併せ技。

table a
id  price
-------------
1  100
2  200

tableb
id  price
-------------
1  150
3  300

の場合、id 1のprice は足し合わせて、2, 3 の値はそのまま表示したいとき


SELECT a.id as id, (a.price + ifnull(b.price,0))as price FROM a left outer join b using(id) union distinct
(SELECT b.id as id, (ifnull(a.price,0) + b.price)as price FROM a right outer join b using(id));

id  price
-------------
1  250
2  200
3  300

が取得できますよ。

でも処理が重たそうですね。

2008年5月22日木曜日

【CentOS5】locateコマンドがない

CentOS5ではデフォルトでlocateコマンドが入ってない。

なので

> yum install mlocate

>updatedb

これでOKです。

2008年5月21日水曜日

mysql 誕生日から年代

mysql 誕生日から年代を求める式。

kawama.jpさんの記事に素敵な答えがありました。


テーブル:USERTABLE
誕生日カラム:user_birthday

◆年齢を求める
select truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, 0) as age from USERTABLE;

年代を求める
select truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, -1) as age from USERTABLE;

年代別合計を求める
select
truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, -1) as age,
count(*)
from
USERTABLE
group by truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, -1);

2008年5月20日火曜日

神戸シェラトン

記念日にシェラトンホテルに行ってきました。

いつもながら楽天トラベルで予約したんだけど

着いたら普通のフロントから19階にある特別フロントに通され

「一人プラス3000円でジュニアスイートに泊まれますよ!」

ってことだったので、おもいっきって泊まっちゃいました。

部屋は広くて、無駄に書斎みたいな机もあり、

景色も綺麗で、ベットもむちゃくちゃ広かったので大満足でした。

その代わり記念日なのに、夕食はファミレスでした・・・。

グラタンとオムライスを食べてファミマでゼリーを買って

昼間に買った高級りんごジュースを飲んで寝ました。

素敵な一日でした!

MySQL 大規模系の覚書

MySQLで大規模なサイトを作ろうとしたときの注意点などをつらつら書く

  1. マスター・スレーブ構成にする。(水平分散)

  2. クラスタリング化する。(垂直分散)

  3. データの集計など構文が決まってる処理はprocedureを使う。

  4. トリガを使って、無駄な集計をしないようにする。

  5. MySQL5.1からならFEDERATEDテーブルを使うと別DBのテーブルもJOINできる。

  6. MySQL5.0以上で、パーティショニングを使って一つのテーブルも物理的に分ける。

  7. データが多い場合、同じ構造のテーブルを作ることがある。そんなときはリネームして、テーブルをコピーすればよい。


とりあえず、あとでくわしくかけるとこは書こう。

⑦テーブルのリネームとコピー。

■create table テーブル名 as select * from コピーするテーブル名

・データのコピーもOKデータも一度にコピーされていい感じ。

・構造コピーNG

■create table テーブル名 LIKE コピーするテーブル名

・データコピーNG

・構造コピーOK

だから、データも構造もコピーしたい場合は

□create table テーブル名 LIKE コピーするテーブル名

□insert into テーブル名 select * from コピー元テーブル

の併せ技。

データのコピーは50万件でも1分もかからないくらい。だったと思う・・。

普通にinsertするよりも10倍以上早かったです。

2008年5月1日木曜日

mod_proxy_balancer と CakePHP

mod_proxy_balancer(Apache2.2系)を使ってみた

httpd.confで
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

として
<VirtualHost *:80>
ServerName proxy.test

ProxyRequests Off
ProxyPass           /  balancer://cluster/ stickysession=CAKEPHP
ProxyPassReverse   /  http://appli.test/

<Proxy balancer://cluster/>
BalancerMember http://appli.test/ route=ap1
</Proxy>
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "C:/xxx/appli"
ServerName appli.test
</VirtualHost>

これで、proxy.testにアクセスがあった場合、appli.testを見てくれて、セッションも発行できるので、ログインのあるアプリでも動作できた。
ProxyPassReverse  /  http://appli.test/

を書かないとURLが書き換わってしまう。

2008年4月29日火曜日

Web Creators6月号

本日発売の「Web Creators」6月号に

京都滋賀の情報誌WEB Leafのページリニューアル案件で

弊社と俺の名前がむっちゃちっさくですが、載ってます。

http://www.mdn.co.jp/webcre/Works/

こういうのって、テンションあがるよね。

興味がありましたら書店で是非、チラ見してください。

2008年4月21日月曜日

The Garden Oriental Kyoto に行ってきました。

ちょっとした記念日に、京都東山にある

「The Garden Oriental Kyoto」に行ってきました。

http://thegardenorientalkyoto.com/

昼間に、滋賀県にある池田牧場に、

http://www.ikeboku.com/

ジェラートを食べに行って、牛やら山羊を見てきたので

完全に服装を間違えてました。

ここ、結婚式場でもあって、

以前に会社の先輩が、この会場でもされて

すごい素敵だったので、夜ご飯に来たいと思ってました。

入り口で、名前を告げると、席まで案内されて

「乾杯は何にされますか?シャンパン、ワイン?それとも・・・」

「いや、オレンジジュースで・・・」と。

料理はおしゃれサイズで、満腹とはいかない感じ。

味は、魚がおいしかった。野菜は苦かった。

雰囲気は、やはりおしゃれ&高級感があって、薄暗い感じ。

記念日に来てる方が多くて、写真とってもらってる人が多かった。

ちなみに隣は、外国人と日本人のカップル。

もう一方の隣は、金持ち風の中年カップル。

どちらも、会話が小難しそうでした。

しかし、金持ち・セレブな人は、みんな関東弁ですね。

ステレオタイプなお客さんばかりでした。

でも、やはり雰囲気いいので、満足でしたよ!

2008年4月17日木曜日

2008年4月14日月曜日

赤ちゃんと音楽

赤ちゃんと一緒に車に乗ることがあった。

社内の音楽は、「Xjapan」である。

僕自身もXjapanは嫌いじゃないし、

バンドでコピーもしてたけど

でも、生まれて2ヶ月ほどの赤ちゃんにとって

「Xjapan」は激しすぎないか?と思うのですが。

胎教とか、子育てでも

クラシックがいいとか、ヒーリング曲がいいと言われていますが

実際のところはどうなんでしょうか?

科学的根拠があるのでしょうか?

ただ、Xjapanはまだ早いでしょう。

2008年4月4日金曜日

開発環境はやっぱり秀丸ですね。

railsのお勉強を再開しています。

ruby1.8.6 rails2.0.2

なんですね。

gemで、rmagick, gettext, mysql_retry_lost_connection,memcache-client

などを入れて、社内アプリを動かす。

なんとか動いた。

さて、解析でもしていきますか。

やはり人のソースを読むのがてっとりばやくていいですね。

2008年4月1日火曜日

Railsのお勉強再開!

今日は、

InstantRails と Aptanaをインストール。

InstantRailsは、rails~Apache~MySqlなどのAll In One開発環境。

Aptanaは、RadRailsベースのRails用IDE。