Pages

2010年2月24日水曜日

PHP 携帯サイトなんかで便利再帰的に日本語変換関数 mb_convert_variables

ソースやDBがUTF-8でSJISサイトを構築する場合、リクエストされたパラーメータ値がSJISとなる。
この時$_POSTの値の文字コードを変換するんだけど、再帰的に対応する必要がある。

そこで自分で再帰的にやってもいいんだけど、そんな事しなくても関数があたった。。。
知らなかった。。。w

ズバリその関数はこれ

mb_convert_variables

この関数返値に変換された配列等が返ってくるのかと思ったら違う。。。


ハマったので、下記にサンプルを。。。

×誤:
$_POST = mb_convert_variables('UTF-8', 'SJIS-win', $_POST);
var_dump($_POST);

○正:
mb_convert_variables('UTF-8', 'SJIS-win', $_POST);
var_dump($_POST);

2010年2月18日木曜日

SQL Server2005 では varchar(MAX)型にユニーク制約を付ける事はできない

CREATE UNIQUE INDEX admin_login_id_pkey ON t_admin (login_id);

とやったら

テーブル 'admin' の列 'login_id' の型は、インデックスのキー列として使用するには無効です。

と出た。。。

VARCHAR(100) とかだとOKなので、どうやらVARCHAR(MAX)だけがダメみたい。。。
そういえばMySQLか何かもTEXTにINDEX作成できないとかあったな。。。

IIS(WindowsXP)へ開発用にSSLを設定してみる

証明証作成には Makecert を利用したかったので、まずは Microsoft .NET Framework 2.0 SDK 日本語版 (x86) をダウンロードする。



http://www.microsoft.com/downloads/details.aspx?familyid=fe6f2099-b7b4-4f47-a244-c96d69c35dec&displaylang=ja

ダウンロードしたらインストールする。

インストールが完了したら Makecert が利用できるSDKコマンドプロンプトを立ち上げる。


スタート >> Microsoft .NET Framework SDK v2.0 >> SDK コマンド プロンプト

起動したら下記コマンドを入力してENTERで実行!!


makecert -sr LocalMachine -ss My -n CN=ServiceModelSamples-HTTPS-Server -sky exchange -sk ServiceModelSamples-HTTPS-Key
 これで証明書を作成して登録された状態となるので、次にIISの方のサイトプロパティから証明書を選択する。

スタート >>  マイコンピュータ右クリック >> 管理 >> サービスとアプリケーション >> インターネットインフォメーションサービス >> Webサイト >> 対象のサイトを右クリック >> プロパティ >> ディレクトリセキュリティ タブ >> サーバー証明書 >> 既存の証明書を使用 >> 追加されているはずの発行元「ServiceModelSamples-HTTPS-Server」を選択 >> 次へ >> 次へ >> 完了





これで証明書は設定されたはず。。。

試しに https:// でアクセスしてみる。


出ない。。。なぜ。。。
 ってそうだポートだ。。。


自分の環境ではAacheも共存させているのでIISを8080で使っています。
そこでSSLの場合もポートをずらしてやらないと。。。



という事でIISのサイトプロパティよりSSLを設定したので、SSLのポートを修正できるようになっていので、ポートを8443に変更して変更を読み込ませて完了♪

2010年2月17日水曜日

Zend_Loader_Autoloader、Zend_Loader_Autoloader_Resource を使って環境構築する

今回はちょっと無理かもって思ったけどいけてよかったw
今回の目的はZend_Actionを利用したくないけど、できるだけコンポーネントは利用したいというのが趣旨だった。。。

なぜそんな事をするのか?
それはフレームワークが理解できない人、もしくは理解する気が無い人にも気持ちよく理解してもらうためw

Zend_Actionを使うと途端にフレームワークのとっつきにくところが全面的に出てくる気がする。
もちろんそれが理解できないプログラマーってどうよ。。。ってなるのだが、そういう人もいるのが会社である♪できる人だけがどんどん先に進んでいてもそれはただの自己満足。。。

という事で最終目標はZend_Actionを利用したZend_Framework?別に普通じゃない?って思ってしまう事です♪

試した方法としては簡単で、 段階を踏んで導入ですw

その中で今回の目的はディレクトリ構造に馴染む事を目的としました。
フレームワーク毎に違うこのディレクトリ構造。
これは慣れしかありませんので、早い段階で馴染んでもらうために導入しました。

ちなみにブログには書いてませんが、Zend_Formは既に馴染んでもらっています。
※Zend_FormにはZend_ValidateとZend_Filterが含まれる事としてます。
/**
 * Autoloaderを設定
 */
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->unregisterNamespace(array('Zend_', 'ZendX_'))
           ->setFallbackAutoloader(true);

require_once 'Zend/Loader/Autoloader/Resource.php';
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath'  => WEBAPP_ROOT . '/common',
    'namespace' => 'Default',
));
$resourceLoader->addResourceTypes(array(
    'dbtable' => array(
        'namespace' => 'Model_DbTable',
        'path'      => 'models/DbTable',
    ),
    'mappers' => array(
        'namespace' => 'Model_Mapper',
        'path'      => 'models/mappers',
    ),
    'form'    => array(
        'namespace' => 'Form',
        'path'      => 'forms',
    ),
    'model'   => array(
        'namespace' => 'Model',
        'path'      => 'models',
    ),
    'plugin'  => array(
        'namespace' => 'Plugin',
        'path'      => 'plugins',
    ),
    'service' => array(
        'namespace' => 'Service',
        'path'      => 'services',
    ),
    'viewhelper' => array(
        'namespace' => 'View_Helper',
        'path'      => 'views/helpers',
    ),
    'viewfilter' => array(
        'namespace' => 'View_Filter',
        'path'      => 'views/filters',
    ),
));
上記の設定は2つの設定を行っています。
1つめは  Zend_Loader_Autoloader です。
$loader = new Zend_Loader();
と記載した時に別に Zend_Loader をincludeしなくても自動的に行ってくれるという設定です。
これはただ「_(アンダースコア)」を/に置換してるだけみたいな感じなので、簡単ですね。

続いて Zend_Loader_Autoloader_Resource です。
こいつは Zend_Loader_Autoloader で設定したけど例外的なパターンを宣言したいって感じの時に使います。

それぞれ目的は違いますが、今回のこの目的でOKなのでOKですw
Model_Mapper が予約されてたのは今日知りました。。。w
QuickStartはmodelの中にMapperいなかったっけ。。。w

2010年2月16日火曜日

魔の9時3分

人時計全てが横になった9時3分。。。
明らかに見にくいじゃないか。。。

2010年2月15日月曜日

SQL Serverのtext型は使っては今後使ってはならない

SQL Server にあるtext型は今後削除される予定であり、利用すべきではない。

ちなみに

text型に「あああ」と入れて カラム='あああ' で検索するとエラーとなる。。。
な~ぜ~

Xperiaはもっさりじゃない?

http://plusd.itmedia.co.jp/mobile/articles/1002/12/news093.html

上記記事によるとどうやらXperiaは動作の動作速度についても調整しているようですね。。。
よかった。。。

触ってはみたいけど、まだNexus Oneの方が魅力が高いな。。。

IISでPHPを使えるように

IISでPHPを使えるようにするのは工程は簡単だけど、以外にハマる。。。

まずPHPサイトからモジュールタイプでWindows用のものをダウンロードしてくる。



ここからダウンロードできる。
http://www.php.net/downloads.php

つづいてダウンロードしたものを解凍する。

そしてファイルを設置するんだけどこれがややこしい。。。っていうかうっとうしい。。。

  1. 解凍したディレクトリを解凍してwindowsドライブの最上部にphpというディレクトリ名で設置する。
    例:c:\\php\php.exe
  2. php.ini-dist を名前 php.ini に変更してwindowsディレクトリに保存。
  3.  php*.dll以外のdllファイルをsystem32へコピーする。
  4. phpディレクトリとphp*.exe系のアクセス権限にEveryoneを追加。
    ※これがハマった。。。
  5. あとはIISの方の設定でPHP設定を追加する。

2010年2月10日水曜日

ApacheとIISを共存させる方法

WindowsXPで開発する中、複数のプロジェクトを担当しているとApacheとIISの両環境が必要となる場合があります。

そんな時にポートで分ければいいんですが、どうも見た目が。。。
でもhostsにポートまで指定できないし。。。

って事でローカルIPを2個設定して、両方とも80番ポートを利用するようにしました。
 

WindowsXP に SQL Server 2005 を開発環境として入れてみる

MSDE を入れた後にこいつの存在を知った。。。

って事で仕方ないので入れなおす。。。

入れたのは SQL Server 2005 Express Edition という無償版のSQL Server2005
http://www.microsoft.com/japan/sqlserver/2005/editions/express/default.mspx

ダウンロードはこちらから
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=11350B1F-8F44-4DB6-B542-4A4B869C2FF1

MDSEと違ってダウンロードしたファイルを実行すると普通にインストールできた。。。

WindowsXPに開発用のSQLServerを入れてみた

開発用 SQLServer には MSDE 2000 を利用する事にした。

・MSDE2000
http://www.microsoft.com/japan/sqlserver/2005/msde/default.mspx

▼ダウンロードはこちら
http://www.microsoft.com/downloads/details.aspx?FamilyID=413744D1-A0BC-479F-BAFA-E4B278EB9147&displaylang=ja#filelist

ダウンロードしたファイルは圧縮されているので、まずは解凍する。
ダウンロードファイルは「JPN_MSDE2000A.exe」だった。

ダブルクリックした解凍先を指定。

解凍されたフォルダに移動して、中にある setup.exe のショートカットを下の図のように作成する。

作成したショートカットを右クリックしてコンテキストメニューからプロパティを選択してリンク先の最後に  SAPWD="パスワード" を追加する。
※パスワードは好きな英数字?

あとは、ショートカットを実行してセットアップを開始する。
あとはいつも通りかな。

セットアップ後は再起動すると右下にアイコンが常駐するようになる。

2010年2月7日日曜日

OpenIDにチャレンジしてみた

3度目のチャンレンジになるOpenID(笑)

OpenIDは前回Zend_FrameworkがOpenID2に対応してなかったので、諦めたんですが、今回は他のライブラリを使ってもやりとげるという意思で再チャレンジ!!
ちなみに1回目はOpenID2の存在に気づいて心が折れた。。。

って事で、予定としてはmixiやってgoogleって感じかな?

とりあえずはその2つやってから釣りマップ.comにどう組み込むか考えるか。。。

てか、壁が。。。

http://www.openidenabled.com/php-openid/

のライブラリが相変わらず有名なようなので、今回もこれ使おうと思ったけどどうやらPHP5.3系に対応していない。。。 エラー出まくり処理が落ちる。。。

仕方ないので、PHP5.3にこだわっていたわけでもないので、サーバーのPHPのバージョンをPHP5.2系に下げる。

もうこの時点で挫けそうだ。。。
でも、今回はもうちょっと頑張ろうw

せっかくPHP入れなおしたんだからな。。。
てかZend_FrameworkがOpenID2に対応してくれていれば。。。

とりあえず、今回はPHP5.1.6環境でmixiにログインできるのは確認できているので、戻してから考えよう♪
なんで確認できてるかっていうのは下記サイトのソースをそのまま動かしてみたから。。。

http://winofsql.jp/sh/html/openid_mixi.htm

って事で今回は必ず途中でやめる事はないはず(笑)
これで呪いが解ける。。。

こんなものは一回理解してしまえば後は楽勝なはず。。。きっと。。。多分。。。

今回参考にしたサイトはここ

http://speit.blog78.fc2.com/blog-entry-39.html

できた♪
なんて簡単にできてしまったんだ。。。
今まで何を悩んでたのか思い出せない。。。

あとはこれをどうサイトに紐づけるか。。。

1.サイトアカウントに複数OpenIDを紐づけるも良し。。。
2.1対1にするも良し。。。
3.OpenIDのみ受け付けるようにするも良し。。。

 ん~~~ 新規サイトなら3番かな。。。
OpenIDって一般ユーザーには不信感があるのかな。。。
ん~~~~

PHP5.3.1からPHP5.2.6へ入れ替えた

・まずPHP5.3.1をアンインストール

su -
パスワード入力してrootユーザーへ

yum remove php
yum remove php*

・ダウンロードした古いパッケージファイルをお掃除

yum clean all

・PHP5.2.6をインストール
デフォルトのリポジトリではPHP5.1.6だったので、今回はCent5のtestingを利用して5.2系を入れた。
remi を最初利用したがためにPHP5.3系にされてしまったので。。。
できれば5.3のままにしたかったけど、OpenIDが使いたかったので。。。とりあえず今は5.2系で。。。

 
yum --enablerepo=c5-testing install php
yum --enablerepo=c5-testing install php-common
yum --enablerepo=c5-testing install php-devel
yum --enablerepo=c5-testing install php-mbstring
yum --enablerepo=c5-testing install php-mcrypt

yum --enablerepo=c5-testing install php-pdo
yum --enablerepo=c5-testing install php-pecl-imagick 
 
その他入れたいものがあるか確認する
 
yum list | grep php

あれば上記のような感じで入れる。

yumコマンドはの使い方は下記を参考までに。

コマンド
概要
check-update アップデート可能なパッケージの一覧を表示
clean ダウンロードしたパッケージと古いヘッダを削除する。clean allと同じ
clean oldheaders 古いヘッダを削除
clean packages ダウンロードしたパッケージを削除
info 利用可能なパッケージの情報を表示
info パッケージ名 指定したパッケージの情報を表示
install パッケージ名 指定したパッケージをインストール
list 利用可能なパッケージの一覧を表示
list installed インストール済みのパッケージ一覧を表示
list updates アップデート可能なパッケージの一覧を表示
provides パッケージ名 パッケージに含まれるファイルの一覧を表示
remove パッケージ名 指定したパッケージをアンインストールする。指定したパッケージと依存関係があるパッケージは、削除するかどうか 確認を求める
search キーワード キーワードでパッケージを検索する。検索の対象は、RPMファイルのName、Packager、 Dummary、Descriptionの各フィールド
update アップデート可能な全パッケージをアップデート
update パッケージ名 指定したパッケージをアップデート

PHP error_reporting を .htaccess で指定する。

記述方法としてはこうなるみたい。
php_value error_reporting 6133
6133 の計算方法。
6143 - 8 - 2 = 6133

つまり、

E_ALL - E_NOTICE - E_WARNING = 6133

という感じらしい。

エラーとロギング
定数 説明 注記
1 E_ERROR 重大な実行時エラー。これは、メモリ確保に関する問題のように復帰で きないエラーを示します。スクリプトの実行は中断されます。
2 E_WARNING 実行時の警告 (致命的なエラーではない)。スクリプトの実行は中断さ れません。
4 E_PARSE コンパイル時のパースエラー。パースエラーはパーサでのみ生成されま す。
8 E_NOTICE 実行時の警告。エラーを発しうる状況に遭遇したことを示す。 ただし通常のスクリプト実行の場合にもこの警告を発することがありうる。
16 E_CORE_ERROR PHPの初期始動時点での致命的なエラー。E_ERRORに 似ているがPHPのコアによって発行される点が違う。 PHP 4 より
32 E_CORE_WARNING (致命的ではない)警告。PHPの初期始動時に発生する。 E_WARNINGに似ているがPHPのコアによって発行される 点が違う。 PHP 4 より
64 E_COMPILE_ERROR コンパイル時の致命的なエラー。E_ERRORに 似ているがZendスクリプティングエンジンによって発行される点が違う。 PHP 4 より
128 E_COMPILE_WARNING コンパイル時の警告(致命的ではない)。E_WARNINGに 似ているがZendスクリプティングエンジンによって発行される点が違う。 PHP 4 より
256 E_USER_ERROR ユーザーによって発行されるエラーメッセージ。E_ERROR に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。 PHP 4 より
512 E_USER_WARNING ユーザーによって発行される警告メッセージ。E_WARNING に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。 PHP 4 より
1024 E_USER_NOTICE ユーザーによって発行される注意メッセージ。E_NOTICEに に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。 PHP 4 より
2048 E_STRICT コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。 PHP 5 より
4096 E_RECOVERABLE_ERROR キャッチできる致命的なエラー。危険なエラーが発生したが、 エンジンが不安定な状態になるほどではないことを表す。 ユーザ定義のハンドラでエラーがキャッチされなかった場合 (set_error_handler() も参照ください) は、 E_ERROR として異常終了する。 PHP 5.2.0 より
8192 E_DEPRECATED 実行時の注意。これを有効にすると、 将来のバージョンで動作しなくなるコードについての警告を受け取ることができる。 PHP 5.3.0 より
16384 E_USER_DEPRECATED ユーザ定義の警告メッセージ。これは E_DEPRECATED と同等だが、 PHP のコード上で関数 trigger_error() によって作成されるという点が異なる。 PHP 5.3.0 より
30719 E_ALL サポートされる全てのエラーと警告。PHP < 6 では E_STRICT レベルのエラーは除く。 PHP 6 では 32767、 PHP 5.3.x では 30719、 PHP 5.2.x では 6143、 それより前のバージョンでは 2047 でした。


バージョンによって番号は違うので詳しくはここで。
http://jp2.php.net/manual/ja/errorfunc.constants.php


バージョン 説明
5.0.0 E_STRICT が追加されました (これは E_ALL には含まれません)。
5.2.0 E_RECOVERABLE_ERROR が追加されました。
5.3.0 E_DEPRECATEDE_USER_DEPRECATED が追加されました。
6.0.0 E_STRICTE_ALL に含まれるようになりました。

仕方ないのでAndroidのOSを2.1 エクレアにしてみた



何を思ったのかXperiaが出るしNexus One が出るしで愛着が無くなってしまったHT-03AのOSを1.5に戻してroot権限と取ってから色々いじってみた。

Goldcardとか最初理解ができなかったけどなんか適当にやってたらいけたw

今のところOSの流れはこんな感じです。

Docomo Ver1.5



Docomo Ver1.6



Touch Me Ver1.5 (?)



Dwang Ver1.17



Super D Ver1.8



Eclair2.1 Ver1.5

今回気付いたのはどうやら最初から入っているAndroid1.5、1.6というのはDocomo用のものなんですね。。。 違うのかな。。。

1.5にもメーカー毎に最初から入ってるアプリが違うし、若干のチューニングがされてるとか、されてないとか。。。w

体感ではDwang Ver1.17が一番早く感じたんですが、何故かGoogleの認証が通らなかったんで、Super Dにしました。

Super Dだと最初から日本語対応なんで楽だったし、機能が多い(?)
Dwangが早いってのも日本語に切り替えてなかったからかもしれませんけどね。。。

で、Super Dが早いのは解ってるんですけど、機能エクレア食べちゃいましたw
やっぱり自分には早いとか安定とかより新しい物が良いです♪

思った以上にサクサク動く感じなので、しばらくこのままで行きます♪

てかNexus OneやXperiaに変える気が無くなってしまいました。。。w

※Ver1.5に戻した時に悲劇が起きましたw
Ver1.5の場合初回のGoogleアカウント認証では必ず3G経由じゃないとダメみたいでした。。。
こないだPocketWifiに変えてmopera解約してたんでどうしようかと悩みましたけど、知り合いでBizホーダイ入ってる人がいたので、SIMカード借りて助かりました。。。
ちなみに、Ver1.6以降は最初の認証をスキップできるので、無線LANだけ大丈夫です♪

2010年2月6日土曜日

WindowsXP でシンボリックリンクを作成する

Microsofから配布されているモジュールをイントールすれば使えるようになるコマンド「linkd」で作成可能だ。

http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en&displaylang=en

ダウンロードは上記URLより行う。
WindowsServer2003とか書いてるけど気にせずにダウンロードしてインストール。

コマンドプロンプトより作成したいディレクトリに移動し、下記のようなコマンドで作成可能。

・作成
linkd [link_name] [target_path]

・削除
rmdir [link_name]

※link_name = ショートカット名的なもの、もちろん拡張子は無くても良い
※target_path = リンク先です。ディレクトリでもファイルでもOKなはず。

2010年2月3日水曜日

FireFox3.6 拡大率を変えた時にCSSが狂ってしまう不具合

確認できた現象だとfloatを使って、2カラムのレイアウトの場合。
左を固定で右を可変としました。

ここでCtrl+マウスホイールで縮尺を変えると左カラムが下にずれてしまいまいした。。。

FF3.6だけの現象かは不明ですが。。。

ZendFramework 1.10 がリリース

マニュアルページを上げてみた。
http://doc.unlax.com/ZendFramework-1.10.0/manual.html

早速「釣りマップ.com」に1.10を入れてみた。
http://www.tsurimap.com

2010年2月2日火曜日

PotgreSQL NULLで文字列連結すると結果NULLだけになる

psql> SELECT 'hogehoge' || '-' || null_col FROM hoge;

これだと結果は hogehoge ではなく null になってしまう。

これは COALESCE という関数で対処する。

psql> SELECT 'hogehoge' || '-' || COALESCE(null_col, '') FROM hoge;

これで結果は hogehoge となるはず。

Docomo ソニーエリクソン Xperiaの動画発見



いつまで見れるのか不明ですが。。。

2010年2月1日月曜日

Poket Wifiの充電器が思いがけない利用方法が。。。

以前購入した、SONYのBT30PというBlutoothのヘッドセット(?)の充電が手持ちのコンセントからのUSB充電器で利用できなかったのがとても残念だったのですが、PocketWifiも同様の事が色々書いていたので、試しにDRC-BT30Pに指してみたらラッキーな事に充電できた♪

どうやらUSBで充電できるタイプには複数の種類があるようですね。。。
モトローラーの充電用ケーブルだといけるとかもPocketWifiの事検索してたら見たしな。。。

ん~ 謎ですね。。。

poファイルからmoファイルを作成する。

moファイルを作成するにはWindowsであれば、PoEditを利用するかPython入れてコマンドでmsgfmtを利用できるようにするかになるようです。

PoEditは利用した事ありますが、Python入れてってのはやった事ないです。。。

今回はLinuxでやりたかったのでGettextを入れて使えるようになるmsgfmtコマンドを利用しました。

下記が利用したコマンドです。
which gettext

でgettextが入っている事を確認して、入っていたので下記で作成しました。
msgfmt -o hoge.mo hoge.po
見事作成されました♪

Pocket Wifi 使用開始♪


エリアは全然大丈夫でした♪
バッテリーの減りはやはり早いですね。。。(想定通りなので仕方ないです)

速度良い感じです!!全然早くなった気がしますw 気のせいかな。。。

初期設定ではWi-fiは自動的にOFFに切り替わるのですが、こいつやっかいですね。。。
HT-03Aからのメールチェックができないじゃないか。。。

とりあえず買ったらWifiは常時ONにする事をお勧めします。。。

とりあえず今日の夜設定しよう。。。

Followers