EC-Cubeのバージョンアップ(2.0.x→2.11.x)

EC-Cubeのバージョンアップ(2.0.x→2.11.x)

EC-CubeのDB構成は古いバージョンと新しいバージョンでちょこっと変わっていて、DB移行で手こずったのでメモ。

今回のタスクはユーザテーブルのみの移行。商品データはそんなに多くなかったので手作業での移行でした。

ユーザのほうはパスワードがハッシュ化されていて手作業移行は当然できないので、ちゃんとやってあげる必要があります。

構造の違い

インストールしてみた新EC-Cubeと旧EC-Cubeのユーザテーブル(dtb_customer)の構造の違いを比べてみます。

新しいほうにはsaltという項目があって、cell01,cell02,cell03という項目が無くなっています。これらを調整します。

テーブル構成の調整方法

新EC-Cubeの認証ソースをみてみます。(class/util/SC_Utils.php)

    function sfIsMatchHashPassword($pass, $hashpass, $salt) {
        $res = false;
        if ($hashpass != '') {
            if (AUTH_TYPE == 'PLAIN') {
                if ($pass === $hashpass) {
                    $res = true;
                }
            } else {
                if (empty($salt)) {
                    // 旧バージョン(2.11未満)からの移行を考慮
                    $hash = sha1($pass . ':' . AUTH_MAGIC);
                } else {
                    $hash = SC_Utils_Ex::sfGetHashString($pass, $salt);
                }
                if ($hash === $hashpass) {
                    $res = true;
                }
            }
        }
        return $res;
    }

上記ソースがパスワード認証しているところですが、saltが無いときには旧バージョンの認証方式をつかってくれるそうなのでsaltはブランクでも良さそうです。cell01,cell02,cell03は使ってる形跡が見つからなかったので、そのまま削除します。方針はこうなります。

  • saltはブランクで挿入
  • cell01,cell02,cell03は単純削除

旧EC-Cubeでデータバックアップ

アドミン画面>システム管理>バックアップ管理(/admin/system/bkup.php)からバックアップを作成します。

(テスト用お客様アカウントを持っていない場合は、移行後のテストのためにこの前にテストアカウントをひとつ作っておくのをおすすめします。)

できたバックアップをDLして解凍後、bkup_data.csvというファイルをテキストエディタで開きます。

このファイルにはDBダンプが特定のルールで書き込んでありますが、dtb_customerの部分だけが必要なので、その部分だけを抜き出し、正規表現等で加工します。僕はPHPで簡単なPGMをかきました。

			

			$text='  //ここにバックアップファイルからコピペ
			';
			$array=explode("\n",$text);
			foreach($array as $key=>$val){
				$rowArray = explode(",",$val);
				if($key==0){
					$keyArray = $rowArray;
				}else{
					foreach($rowArray as $tempKey=>$tempVal){
						$keyName = $keyArray[$tempKey];
						if($keyName=="cell01" or $keyName=="cell02" or $keyName=="cell03" ){
							continue;
						}elseif($keyName=="secret_key" ){
							$returnArrayOne["salt"]="";
						}
						$returnArrayOne[$keyName]=$tempVal;

					}
					$returnArray[]=$returnArrayOne;
				}
			}
			foreach($returnArray as $key=>$val){
				$rowText = "";
				foreach($val as $tempKey=>$tempVal){
					$rowText .= "$tempVal,";
				}
				$rowText=preg_replace("/,$/","",$rowText);
				$returnText .= $rowText."\n";
			}
			print($returnText);
			die();

ソースの中にテキストをコピペしちゃうあんちょこ方式ですが、これでCSV整形します。

新EC-Cubeへのデータインポート

あとはこれをphpMyAdmin等で新EC-Cubeに流し込むだけです。

ログインしてみる

バックアップ前につくっておいたテスト用お客様でログインしてみます。

、、、できないです。

ソース再確認

先ほども見た、認証ソースをみてみます。(class/util/SC_Utils.php)

                 if (empty($salt)) {
                    // 旧バージョン(2.11未満)からの移行を考慮
                    $hash = sha1($pass . ':' . AUTH_MAGIC);
                } else {
                    $hash = SC_Utils_Ex::sfGetHashString($pass, $salt);
                }
                if ($hash === $hashpass) {
                    $res = true;
                }

旧バージョンの認証ではAUTH_MAGICとパスワードからハッシュの生成をしています。なので、AUTH_MAGICを確認してみましょう。

config/config.php (新バージョン)
mtb_constants_init.php (旧バージョン)

上記ファイルにそれぞれAUTH_MAGICの定義があります。

違ってます。そりゃそうですね。旧バージョンのAUTH_MAGICの値を新バージョンのAUTH_MAGICで書き換えます。

再度テスト

ログインできました!

まとめ

EC-Cubeの古いバージョンから新しいバージョンへの移行は苦労することが多そうなので、できるかぎり手作業でやって、どうしてもできないときには中のソースを読み解く必要がありそうです。

確か2.4から2.12への移行ツールはあった気がします。(よく覚えてないけど)たしかEC-CubeのオフィシャルからDLできるはずなので、とりあえず見てみるといいかもしれません。

unixでファイルのリネームと文字列の一括置換

ファイルの文字列を変換して、拡張子も変えるスクリプト

サクラサーバーでSSI(サーバーサイドインクルード)が使えなかった為、シェルで対応。

SSIがなぜ効かなかったのかは不明。なんかもっと上手なシェルの書き方もありそうだけども。。。

for file in `find ./ -name "*.html" -print`
do
    res=`expr $file : "\(.*\).html"`
	cp $file $file.bk
done
find . -type f -name '*.html' -print0 | xargs -0 perl -i -pe 's/<\!--#include virtual=\"\/common\/ssi\/sample\.txt\"-->/<\?include(\"\/home\/sample\/www\/common\/ssi\/sample\.shtml\")\?>/g'
find . -type f -name '*.html' -print0 | xargs -0 perl -i -pe 's/<\!--#include virtual=\"\/common\/ssi\/sample2\.txt\"-->/<\?include(\"\/home\/sample\/www\/common\/ssi\/sample2\.shtml\")\?>/g'

for file in `find ./ -name "*.html" -print`
do
    res=`expr $file : "\(.*\).html"`
	mv $file $res.php
done

追記。
実は最初のfor文の中に全部いれちゃえばよかったのかも。

cake2.0系で携帯サイト対応する方法(文字化け対応)

携帯サイトを作成するとき、エンコードをSJISにする必要があるが、cakeのデフォルトエンコードはUTF-8なので、いくつか対応してあげないと文字化けする。
cake1.x系だと、下記の方法でいけそう。

[CakePHP] 携帯サイトの作り方まとめ by Sometime PHP様 

でもcake2.0になると、afterFilter() の中で、下記のように記述するという方法がそもそも使えない。

$this->output = mb_convert_kana($this->output, ‘rak’);
$this->output = mb_convert_encoding($this->output, ‘SJIS-win’, ‘UTF-8’);
…..

→$this->outputが使われなくなってしまっているため。
ちょっとソースをみてみたら、下記の方法でできそう。

$this->response->body(mb_convert_encoding($this->response->body(), ‘SJIS-win’, ‘UTF-8’));

$this->response (CakeResponseクラス)のbody関数は、引数が設定されていた場合は引数の値をbodyにセットし、引数が無い場合は今もっているbodyを返す。

と、これでテストしてみたらどうもまだ文字化けする。HTMLはSJISで渡っているものの、ブラウザがUTF8として処理をしてしまっている。
もちろん、HTML内でcharsetの設定はしている。
HTTP-HEADERをみてみると、ヘッダーでcharsetをUTF-8として送信しているよう。

今度はCakeResponse.phpをみてみたら、CakeResponseに対してcharsetの指定をしてあげないといけないらしい。
これをしないと、core.phpで指定した下記の値が引き継がれる。

Configure::write(‘App.encoding’, ‘UTF-8’);

ということで、下記にて一件落着。

function afterFilter() {
parent::afterFilter();
if($this->request->params[“prefix”]==”m”){
$this->response->body(mb_convert_encoding($this->response->body(), ‘SJIS-win’, ‘UTF-8’));
$this->response->charset(‘SHIFT-JIS’);
}
}

携帯サイト対応っていろいろ面倒ですね。

ハーブティー

お役所関連で、実家に戻らないといけい用事があったので、茨城へ。
我が家はほぼ自給自足にちかいくらい、畑で作物つくってます。

毎回帰るとお土産もらってかえるんだけども、今回は、これ。

庭で摘んだハーブ一式。
そのままティーポットにいれて、熱湯をジャバーとかけます。

あっというまに、ハーブティー。
すっごい香りがつよくて、おいし。

いっさいお茶っぱとか無くても、おいしい。

田舎、いいな。

Posted from するぷろ for iPhone.

豚の丸焼きは激しくおいしい!

昨年11月13日土曜日に豚の丸焼き会を行ないました。
感激的においしかったので、
次、豚の丸焼きする人のために、作り方から詳細レポートしておきます!

(半年以上たって、今更感は否めませんが。。)

【宴会開始】17時:00〜
【準備開始】8:30
【豚重量】32kgくらい
【参加者】65名

今回は35kgの豚を用意してもらったのですが、内蔵その他を取り除く下処理をしてもらうと大体32kgくらいになるそうです。
納入してくれた畜産業者の方が豚の丸焼きにとーっても詳しい方で、いろいろ教えてくれました。

・このサイズをやくには8時間はかかるよ
・お腹に野菜やハーブ等を入れてやくとおいしいよ!
・片面だけやけないように、くるくる回す仕組みが必要だよ。

勉強になります。メモメモ。

ちなみに、今回の豚は埼玉の新井畜産という業者から購入しました。

知り合いの歯医者さんに「豚の丸焼きするんだけど、通販だと現場までもってくの大変なんだよねーー」という話をしたら、「あ、知り合いの畜産業者紹介すてあげるよ!!」ってあっさり。 歯医者さんは豚の歯ぐきとか使って練習したりするんだとか。ええええええええ。豚の生首をぎこぎこする歯医者さん、コワイ。(生首かどうか知らないですが)。

豚ゲット

朝8:30にキャンプ場到着。
この寒いのに、すでにいくつかテントが張ってあってびっくり!

9時に豚さん到着

業者の方がトラックで届けてくれました。
1.5tトラックに、豚一頭横たわっている姿はちょっとシュール。
100匹くらいは入りそうな大きいトラックなのに。。。
ポツーン。

設置台作成

設置台作成のために準備した道具はコチラ。

実家近くのホームセンターで買い集めた品々。田舎のホームセンターの品揃えに驚愕です。
チェーンブロック×2個 単価400円
2cm角180cmの木の棒 単価300円くらい?
補強の鉄レーン 180cm 800円
盆栽針金 200円くらい?
釘  100円
ボルトとナット×4 200円

軸には、2cm角の木の棒を使用。
でも、それだけだと重さに耐えかねるので、鉄のフレームで補強してパワーアップ!!

現場で工作すると時間がかかってしまうので、ホームセンターで予め棒に穴をあけてもらっておいて、キャンプ場ではボルトとナットを回すだけで組み立てられるようにしておきます。
なにしろ丸焼きは時間との勝負!細かく時間節約しないと、生焼けの豚になっちゃいますもんね。

ここまでやったところで、参加者女性が二人到着。
生涯初のリアル豚にキャーキャー言ってます。
「きゃーーーーーー。(豚の)顔、直視できなーーーい><;;」
、、、10分後には普通に慣れてましたけどね。

貫通式

豚に串を刺します。

内蔵処理は業者さんがやってくれているので、喉の部分とお腹の部分に穴が空いています。
のどの穴は小さいので、お腹のほうから棒を突き通していきます。
このとき、体の構造上(?)まっすぐは入らないので、あたまをググっと持ち上げてあげる必要あります。
ちょっと血管がやぶれて、軸に血がついて赤い筋がツーーっとなるのがリアルです。

軸と豚の固定

こっち見てる気がします。おいしく焼いてあげるからね!

このままだと、くるくる回し焼きしようと思っても、軸だけ回って、豚さんはそのままになってしまいます。
豚さん、結構重いですから空回りしちゃうんですよね。
軸に釘を打ち込んで、そこを支点に針金でぐるぐると固定します。

軸とブロックの固定

僕もホームセンターにいくまでこんなブロックがあるって知りませんでした><;
蜂の巣状に穴が開いているブロック。庭作りコーナーにあったんですが、本来何に使うんだろ。。。
もしや豚丸焼き専用ブロック!?
真ん中の穴に軸を通したら、軸と垂直に金具を固定。
金具とブロックを針金で固定したら、もう、準備完了です。
これでブロックを回して固定したら、豚さんの確度を自由自在に変更できるようになりますね!

焼き始め

ここまでの準備にかかったのが、大体一時間。
あとは台の上に豚をのっけてじっくり焼くだけです。
800円で売っていた40cm四方くらいの机にブロックごとのっけます。
下には炭をたっぷり。

日が強くなりすぎないように注意しながら、8時間かけてじっくり焼き上げます。

時間がたつにつれて、皮が黄金色にいろづいてきて、なかからはシューーという小さい音が聞こえてきます。
皮がばりっと裂けてなかからはブクブクいいながら油が飛び出してきて、みるからに香ばしい雰囲気。
1時間もたつと、「もう食べれるんじゃね!?」って思うくらいにおいしそうな外観になってくるんですが、ここはぐっと我慢。


本当は暴れだす胃袋をビールで抑えつけたいところなんですが、そこは幹事のつらいところ。
なにかで車を使わないといけないかもしれませんので、禁酒です。

どこかで犬のしつけで一番難しいのは「お預け」だよと聞いたことあるなあ。

その後

続々と参加者が集まってくる中、お昼ごはんを作ったり、チャイを作ったり、豚の火加減を見たりであっというまに宴会開始の17時になっちゃいました。

ちなみに、チャイレシピ。

  • 牛乳2L
  • 角砂糖たくさん
  • カルダモン
  • クローブ
  • ナツメグ
  • シナモン
  • 生姜ちょっと
  • アッサムティーの一番安いやつ。

牛乳をあっためている間に、香辛料をつぶす。(ホールじゃなくて粉で買ってきたなら潰す作業は不要。ホールからつぶすと雰囲気でます。でも、粉のほうが正直便利)

牛乳があったまったら紅茶入れて、香辛料と生姜投入。角砂糖もどかーんと入れる。あとは、味見しながら好みの味を目指します。ポイントはカルダモン。これがあれば本格的な雰囲気満載。他の香辛料をケチっても、カルダモンだけは充分仕入れたほうがおいしい。

もう、豚はこんがり焼き色がついて、食べて食べてと言わんばかり。
最後の仕上げにはちみつを水でといたものを表面に塗りこんで、テリを出します。

乾杯

おいしい豚に敬意を表して乾杯したあとは、ざくざく切ってばくばく食べるのみ!
味付けはほとんどしていないのに、圧倒的なうまみ、香ばしさ、肉々感。

ばっくばっくと食べて、たらふくだけど、焚き火みながらウイスキーのんでたらまた食べたくなって。

ウマイ!!!うまい。うまい。

長時間焼いたかいあって、焼肉とかとはまったく違うおいしさ。しかもジューシーあんどホット。

もう、なんというか、もう、最高。
皮がパリッパリになって、はちみつの甘さと肉のうまみで絶妙。(場所によって、噛み切れないくらいの強靭さになっちゃってるところもありましたが。。)

ただ、中心部はまだ完全に火が通りきっていなかったので、ここは別途解体してホイル焼きに。

頭蓋部は包丁で解体して、脳みそまでおいしく頂きました。(写真とるの忘れた><)
まだぷるっぷるとろーり系脳みそ。僕が食べたときにはまだ生だったようですが、うまかった。
食感やヨシ。
いまのところ、お腹は壊しておりません。

ほかの料理

以上が豚焼きです。
同時に、
魚の塩釜焼き(ほっくほっくの豪快的料理)

  • 塩を魚一尾あたり1キロ~2キロくらい用意して、卵白で練る。そして、粘土よろしく魚の周りをがっつりくるむ。そのとき、魚の下側には昆布を、上側にはハーブをがっつりのっけておくと、あとではがしやすいし、おいしい。あとはアルミホイルでくるんで、おき火でくるめば万事OK.

鶏肉とチーズとサーモンの燻製 (燻製につかったダンボール箱を倒してしまって、失敗。生き残った食材だけ、焼いて食べました。)
豚汁(やっぱキャンプはこれよね。)
ご飯(暗闇の中で、適当計量して適当炊飯したらだいぶかたかった(>_<)んでも、やきおにぎりにしたら結構おいしい!)
キノコ炒め(やっぱりきのこは万能!)

終わり

たらふく飲んで食って、幸せな気持ちになって、星見て、ゆっくり眠って、翌朝焚き火でパン焼いて、近くの温泉入って帰りました。

ぐっだぐだに疲れて焚き火の匂いぷんぷんさせて電車で爆睡。

周りの人ごめんなさい。

でも、最高の休日でした。

みんなありがとう。豚さんありがとう。

結構準備大変なので年一回開催ですが、今年(2011年)もやりますよ!

今年はエゾシカでやります!

http://gotton.net/blog/?p=987

今年は鹿を丸焼こうか。

イッテキマシタ。
エゾシカフェ@三茶。

皆様ご存知、エゾしカフェは蝦夷鹿肉専門カフェであります。


↑↑↑
こんな蝦夷鹿が生息。

お肉は脂身がすくなくて、さっぱり。
イチオシはやわらかーい鹿肉のカルパッチョ。

いや、これはおいしいよ。
僕が「舌の上ではじける旨みが云々カンヌン、、、味の宝石箱ウンヌンカンヌン。」と説明しても伝わらないと思うので、みなさまエゾしカフェに食べに行ってください。

店長曰く、鹿が増えすぎて問題になっている地域はいっぱいあって、でも、鹿肉が流通に乗らないと猟をするにも割に合わないから、なかなか数をおさえられないのだそう。
そこで、鹿肉の卸をやる会社をたちあげたのが、店長なのです。社会派起業というやつです。なお、卸のほうがメインで、エゾしカフェは鹿肉のおいしさを広めるためにやっているそう。
金曜夜のみ開催してるので、鹿肉たべてみたいひとはぜひ!

そんな素敵なお話聞いてしまいましたので、毎年恒例(にしたいと思っている)の「丸焼き会」は鹿、でいきたいと思います。

今年は10月中旬~10月下旬の土日開催。

30キロ相当の鹿さんを、塩釜焼きにしたり、焚火でやいたり、一頭丸ごとおいしく頂きましょう。

エゾシカフェオーナー、株式会社クイージの石崎氏にもご参加頂いて、プロの手による、おいしいエゾシカ会開催します!

10月が今から楽しみであります。

Posted from するぷろ for iPhone.

放射線量取得APIを公開しました。

使い方は、http://dokusyodebokin.rulez.jp/earthquake/readme を御覧ください。

文部科学省原子力安全課原子力環境防災ネットワーク で定期的に発表されている、放射線量を貯めこんでおいてAPIで取得できるようにしました。

これを使って、誰かが危険度とかがわかりやすい地図サービスとか、なんだか便利なサービスを創り上げてくれること期待。

観測点の数は200くらいしかないので、風向きと風速を考慮して、観測点以外でも、どれくらいの放射線があるのかを予想してくれるサービスなんかも、いいなぁ。。

それと、単位時間あたりの放射線量([nGy/h])を取得できるので、一定期間内の累積放射線量をさくっと計算とかできるサービスとか。。

うまくマッシュアップできると、うれしいです。

・現在、このAPIを使って公開されているサービス(作者が確認できているもの)

[Androidアプリ NO放射能]

[Androidアプリ 全国放射線モニター]

[WEBサービス 放射線量のグラフ化]

もし万が一、ソースが見たいとかいう方がいましたら、いつでも公開します。

「読書で募金」 いつもの買い物でちょこっと募金

お見舞い

東北地方太平洋沖地震で罹災されました方々に心からお見舞い申し上げます。
僕は仙台にある大学に通っていたんですが、友人の何人かはいまでも仙台に住んでいて、連絡を入れてみたら、「マイカーが流されたけど、家族は皆無事」とのこと。
よかった。

買い物するだけで募金できるサイト

なにかできることを、、とおもったんですが、できる事といえば、お金を送ることくらい。
でもイチ個人で送金できる額もしれているので、募金サイトを作ってみました。
単純にお金を送るのは、いろんな団体が受け付けてますので、今回のはチョット違った募金サイト。
名前は「読書で募金.com」です。
募金は継続が難しい気がしています。
今はテレビの連日の報道があるから意識が向くけれど、半年後はどうかな?とおもうと、だいぶ意識が減ってしまう気がします。
いい悪いでなくて、人間のサガ。
本を買ったり、CD買ったり、DVD買ったり、何かとamazonで買い物をしているよ!という方は多いはず。
そんな皆様にお願いです。
読書で募金.com」のリンクをつたってamazonのサイトに行って買い物をすると、買物額の3~5パーセントが募金できます。
もちろん、買い物金額が増える、ということはありません。
amazonが、サイトを広告してくれた御礼として、売上の3~5パーセントを報酬として読書で募金.comに支払ってくれるので、それをそのまま募金にあてる仕組みになっています。
【ステップ】
1 「読書で募金.com」にアクセス
2 トップページの鳥さんをクリックすると、amazonに移動
3 いつもどおり、普通に買い物
以上です。簡単簡単。
さらにこれ、みんなお得なのです。
amazonさん : 宣伝してくれてラッキー
消費者 : 負担無しで募金できてラッキー
支援NPO等 : 募金による活動ができてラッキー
と三方両得なしくみなのです。
読書で募金.com」なら、amazonで買い物をするたびに募金ができるので、継続が優しいはず。
ぜひぜひ、いまのこの大変な時期二週間してもらえれば、と思います。
現金を送る募金だと難しい「継続」も、読書で募金なら、継続的なサポートができるかと。
買い物は、いつでも発生しますから。
普段はamazonで買い物をしない方も、これを機にamazonで買い物をぜひ!

mysqlから重複データの削除

mysqlから重複データの削除をしたい場合。

例えば、itemテーブルのcodeというカラムに同じデータが入っているものをひとつに統合する場合。

insert into item_temp SELECT * from item  where id in ( select MAX(ID) FROM item GROUP BY code )

とする。

そのあと、item_tempを、リネームして、もとのテーブルを削除すればOK。

ただし、この場合は重複レコードのうち、IDが最大のものが残される。ほかに条件が必要な場合は、適宜、最後のSELECT文を書き換えればOK。

一手間かかってめんどくさいのだけど、この方法しか思いつかない。。。

もっと便利な方法あったら教えて!

フォームに予めテキスト入れておいて、クリックしたら削除して、さらに色を変える方法

フォームに、「お名前を入力して下さい」のように、テキストを入れておいて、

実際にユーザが入力するとき(フォーカスがあたったとき)には、テキストをすべて削除する場合、下記jqueryプラグインを使うと簡単。

http://ajaxcssblog.com/jquery/fieldtag-watermark-inputfields/

今回はさらに、最初のテキストはグレーで表示したいけど、ユーザ入力時はクロにしたいというニーズがあったので、ちょっと書き換えてみた。

if(!this.changed){
$(this)
.val(“”)
.removeClass(opt.markedClass)
.css(“color”,”black”);
}

if(!this.changed){ $(this) .val(“”) .removeClass(opt.markedClass) .css(“color”,”black”); }

赤色部分を追加。

さらに、addTab部分も同様に、

.css(“color”,”grey”);

を追加。