2014年8月22日金曜日

Magentoでインデックスが再構築できなくなる問題

Magentoでインデックスが「xxxxが実行中です」みたいのが表示されて、
実行できないことが発生しました。

ちょっと強引なやり方かもしれませんが、
データベースのindex_processテーブルの内容を全部削除してしまうことで回避しました。

mysql> delete from index_process where status="pending";

削除後Magentoの管理画面で
1、キャッシュ管理でキャッシュを削除する。
2、インデックス管理でインデックスを全て再構築する。

これでとりあえず動くようになります。

2014年8月21日木曜日

Magentoで顧客の名前の表示を日本に合わせる

Magentoについての説明は他のサイトにお任せして割愛します。

例として以下の名前の登録の場合(ミドルネームは省略します)、
姓:日本
名:太郎

顧客の名前表示は次のようになってしまうはずです。
デフォルトの状態:太郎 日本様など

ここで厄介なのが姓名が逆転して表示されてしまう。
グローバルなお店では問題ないかもしれませんが、
日本国内で商売する店なら「日本 太郎」と表示したいところ。

テンプレートごとにやってもいいと思います。
explode関数などでゴリゴリやるのもありです。

全部のテンプレートファイルをチェックするのも面倒ですし、
見落としが合ってもいやなので根本的な解決法を手探りで探しました。

とりあえず、対策した方法を紹介します。
もっとよい方法があったら教えてくださいm(_ _)m

【注意事項】
・ファイルパスなどは適宜に読み替えて下さいね。
・バックアップをとりましょう。
・自己責任でお願いします。
編集するファイル(code/core/Mage/Customer/Model/Customer.php)の236行目あたり。

【修正箇所】
・標準の国設定を取得するようにした(※日本とそれ以外の国で表示を変えたいため)
$countryCode = Mage::getStoreConfig('general/country/default');
・日本の場合とそれ以外の国で場合分け(※日本のコードはJPでした)
if ($countryCode === 'JP')
 特定の国の表示を変更したい場合はもっと分岐を増やせば対応できそう。
・名前の表示順序
できるだけもとのソースコードを流用したかったので汚いソースコードですが、
そのままif分にぶっこみました。

修正前と修正後の関数を下記に載せておきますので参考までに。

■修正前の元の関数
    public function getName()
    {
        $name = '';
        $config = Mage::getSingleton('eav/config');
        if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
            $name .= $this->getPrefix() . ' ';
        }
        $name .= $this->getFirstname();
        if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
            $name .= ' ' . $this->getMiddlename();
        }
        $name .=  ' ' . $this->getLastname();
        if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
            $name .= ' ' . $this->getSuffix();
        }
        return $name;
    }

■修正後の関数
    public function getName()
    {
        $name = '';
        $config = Mage::getSingleton('eav/config');
        // Get store country
        $countryCode = Mage::getStoreConfig('general/country/default');
        // Japan
        if ($countryCode === 'JP') {
            $name .=  $this->getLastname();
            if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
                $name .= ' ' . $this->getSuffix();
            }
            if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
                $name .= ' ' . $this->getMiddlename();
            }
            if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
                $name .= $this->getPrefix() . ' ';
            }
            $name .= ' ' .$this->getFirstname();
        }
        // Other
        else {
            if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
                $name .= $this->getPrefix() . ' ';
            }
            $name .= $this->getFirstname();
            if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
                $name .= ' ' . $this->getMiddlename();
            }
            $name .=  ' ' . $this->getLastname();
            if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
                $name .= ' ' . $this->getSuffix();
            }
        }
        return $name;
    }

2014年7月22日火曜日

iOS、Yosemiteがともにbeta4に

本日Beta4になったっていうメールが届きました。
CloudKitに関するアナウンスが含まれていた。メールのタイトルが「Updated Requirements for CloudKit」なので。

2014年6月11日水曜日

iOS8にアップデートしてみて

iOSのデベロッパーになってから3ヶ月。
iOS8にしてやろう!とOSファイルをダウンロード。

意気揚々とアップデートしたー!

再起動を繰り返すアイフォン。
対応してないアプリたちがクラッシュしていく。

LINEでさえクラッシュして使い物にならない。

まだまだ不安定なのでどうにかリカバリーモードでiOS7.1に復元。


快適!!!!

2014年4月20日日曜日

XPマシンの救いの手??Ubuntuの次のLTSがでた!

http://news.mynavi.jp/news/2014/04/20/017/

上記の記事によるとUbuntu14.04LTSがリリースされたもよう。
LTSはLong Term Supportの略。そのなのとおり長くメンテされる。

LiunxのデスクトップOSとして人気があるUbuntuのLTSリリースはとても待ち焦がれていました。通常のデスクトップOSとして使うにはサポートがあるかないかでだいぶ違ってくる。

XPのサポートが切れた今のタイミングで、古くなったマシンをUbuntuを載せてみる運用も有意義になってくる。

ユーザーインターフェイスに(操作感)になれれば無料はかなり魅力的だ。

ダウンロードは以下のサイトから日本語サイトからどうぞ。
http://www.ubuntulinux.jp/node/37

XPユーザーが流れさらなるユーザー獲得がありそうだ。
私もアップデートしてみようと思います。

2014年3月31日月曜日

野良サーバで攻撃を観測してみた①

@ozuma5119様の資料にインスパイアされ自分でもやってみたくなりましたので、
やってみた。一部についてブログにしてみます。

@ozuma511様はさくらVPSをレンタルしていて観察していました。
私はVPSを借りれるほどの余裕がないので流行のRaspberryPiをDMZに設定して観察してみました。

しばらく放置してみると、アクセスログにいろいろ面白そうなログがありました。
数回に分けて紹介したいと思います。巡回してスキャンされているようなログでした。

今回は下記のようなログにフィーチャーして考察していきたいと思います。
-----ログ-----
107.155.65.34 - - [18/Mar/2014:00:48:24 +0000] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 489 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:24 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 479 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:24 +0000] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 479 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:25 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 474 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:25 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 477 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:25 +0000] "GET /MyAdmin/scripts/setup.php HTTP/1.1" 404 478 "-" "ZmEu"
---------------

とにかくsetup.phpというファイルが存在するかどうかを数パターンのパスでスキャンしているようです。

アクセスしようとしているパスがどこかで見た事あるパスだなー?って思って記憶を辿るとXAMPP使ってたときによく見てたような。。。
それはさておき、実際このログがどういう意味なのかを知りたくなるのでググってみると
意外と多くの方がこういった観察をしていることが分かります。

ググってみるとやはりozuma様のブログ「phpMyAdminを狙った攻撃観察」がヒットして、
しかも分かりやすいので同じログを検出した方は一読する価値はあります。
詳細については是非ozuma様のブログを読んで頂ければと思います。
対策にも触れていてたいへん参考になりました。

折角なので(ozuma様のブログを多々引用してしまうような形になりますが)自分なりに考察していきます。

【w00tw00t】
この意味についてozuma様が説明していました。とても面白かったです。
何だろうと気になっていたのでスッキリしました。悪い人たちもちゃんと名乗っているのだなとw

【107.155.65.34】
アクセス元のIPアドレスについて検索してみると以下のような結果が返ってきました。
IPアドレス問合せ先(取得時間は 0.877秒)
「 whois.arin.net (北アメリカおよびサブサハラ・アフリカ)」
ARINはAmerican Registry for Internet Numbersの頭文字なる組織のようです。
ARINのwhois検索で調べるとこのIPアドレスは「Incero LLC」なる会社のサーバのようです。テキサスのオースティンという場所にある会社のようです。
でも、踏み台にされているだけかもしれませんしこれ以上は追いません。
(というか私みたいな素人では追いきれません。)

【setup.phpまでのパス】
私のところに来たログのパスをまとめると以下のような感じになります。
phpMyAdmin3より古いバージョンにある脆弱性に対する攻撃のようです。
/phpMyAdmin/scripts/(デフォルトのパス)
/phpmyadmin/scripts/(小文字にして)
/pma/scripts/(省略系)
/myadmin/scripts/(省略系2)
/MyAdmin/scripts/(省略系3)
数パターンでスキャンしている。自動的に生成しているパスではなく定型パターンでスキャンしている感じ。おおよそこんな感じにしているだろうという考えのもとなのか、適当なのか。共通しているのはscriptsというところでした。


とまぁほとんどozuma様のブログと被ってしまったような考察になってしまいたいへん恐縮ですが勉強になりました。
phpMyAdminはMySQLをGUIでいじれるのは楽なので欠かせないツールだと思います。
インストールしっぱなしではなく最新のセキュリティ情報に気をつけて運用することが重要です。

次回は私もファイルがあるように見せかけて、次の一手は何をしてくるのかというのを見てみたいので実践する予定です。

2014年3月16日日曜日

ラズベリーパイでAndroid Debug Bridge(adb)を動かす

ラズベリーパイにWheezyをインストールしています。
インストールしているというかSDカードに入れています。

【やりたい事】
1.ラズパイのUSBにAndroid端末を接続
2.Adbサーバを起動して端末に接続
3.Adbkitで面白そうなアプリを作って動かす

1.は簡単にできます。
気をつける事は、ラズパイの電源を入れた状態でUSBを接続すると再起動しちゃう。
面倒という方は電源オフの状態でUSB接続してから起動するといいと思います。

2.Android公式サイトのLinux向けバンドルをダウンロードしてもそのままでは実行できませんでした。なるほど、そりゃそーか。と納得して。
誰かしら動かしてるだろうと調べる。案の定いました!
この人の記事にヒットしてリンク先のソースをダウンロードしました。
adb起動もうまく行った。

3.Node.js環境をapt-getコマンドで整える。nodejs、npmコマンドが使えればおけかと思っていました。
3.1.自分で書いたAdbkitアプリをダウンロードしてnpm installを実行すればpackage.jsonに従ってモジュールをインストールしてくれるかと思いきや!
apt-getでインストールしたnodejsのバージョンが低すぎたようだ。
仕方ないので自分でインストールする。
バージョンが頻繁に変わるのでnvmを導入するのがいいということで、
このサイト(http://d.hatena.ne.jp/hosikiti/20130925/1380093487)を参考にインストールします。

コンパイルにかなり時間を要するのでお気をつけを。

package.jsonがいけないのかnpm installだけではインストールできない。
モジュールのnode用モジュールを別々にインストールする。

$npm install ejs
$npm install express
$npm install adbkit
$npm install coffee-script

coffee-scriptは開発に使うのでインストールします。
$node app.jsを実行すれば上記のような画面が表示されて実行されました。

めでたし。