mysqlの設計をするときに改めてカラムタイプについて考えてみた。
いまさらという感じでもあるが。。。
例えばブログのタイトル。
大体、100文字あれば十分という感じがする。
でもUTF-8の場合、日本語はほぼ一文字あたり3バイト(ときに4バイト)になるため
文字数x3から4を見積もるため、100文字の場合は300から400バイトを割り当てることになる。
でもvarcharの最大データ長は255だから、日本語で100文字のタイトルを設定するとなると
カラムタイプをtextにしないといけなくなる。タイトルなのに。
そんなバカな!
逆に200byteで考えておけば50~60文字のタイトルが格納される。
もちろん半角英数字が入る場合はもっと長くなる。
そうするとinputタグにmaxlength仕掛けても、それってユーザビリティ悪い気もする。
ajaxで文字列のバイト数を計算して、キーを叩くたびに計算して
オーバーしたらエラーっていうのがスマートかも。
参考:
Code:
echo strlen(bin2hex($str))/2 |
http://www.cpa-lab.com/tech/0144
http://zombiebook.seesaa.net/article/33192046.html
Link: http://firemobilesimulator.org/
近年モバイルサイトを開発することが多くなってきた。
モバイルサイトはPCとは違って、横幅のサイズが端末によって違ったり
絵文字がキャリア毎にちがったりで、慣れないと大変である。
モバイルサイトのリリースをする時点で
閲覧できるブラウザをモバイルだけに限定することが多い。
そうすると、PCからの確認作業ができなくなってしまうので
自分の携帯端末から確認するしかない。
とはいっても、パケット代が馬鹿にならない。
各種キャリアからもエミュレータ(シミュレータ)が配布されているが
どれも使い勝手はいまいちである。
Auキャリアに対応しているOpenwave SDK6.2Kは未だに公開停止だし。。。
それでもSoftbankから出ているウェブコンテンツヴューアはかなり使い心地はいいのだが、
他のキャリアでのテストを同時にしたい場合は、別のシミュレータを起動しておかないといけない。
こういうことを考えてみると、
各キャリア会社は本当にモバイルサイトを増やしたいのか?と思うほどである。
このあたりのツールをきちんと整備しているかどうかで、
その会社がどれだけこの分野に力を注いでいるかがわかってしまうような気がした。
ネットファーム・コミュニケーションズ株式会社からリリースされている
P1エミュレータはそんな問題をいっぺんに解決してくれる。
3キャリア対応で、絵文字やユーザーエージェント、画面幅などを
かなり細かくわけることができるし、キャリア毎の機種も豊富にそろっている。
しかも、新しい機種がリリースされるとともに、これらをきちんと対応機種に含んでくれる。
ところがこれは有償ソフトなので、開発案件のほとんどがPCで時々しかモバイルの案件がないような場合には
ちょっと費用対効果が少ないかもしれない。
ということでなかなかお手頃なエミュレータがないのが現状である。
閲覧するだけならfirefoxのアドオンであるUser Agent Switcherでも十分かもしれないが
絵文字の表示や、横幅の指定となるとちょっと物足りないかもしれない。
そこで登場したのがモバイル端末のエミュレーションをしてくれるfirefoxのアドオン。
FireMobileSimulatorだ。
3キャリア対応で、絵文字も表示して、横幅サイズもシミュレートしてくれます。
P1エミュレータほど機種が多くもないし、作りこんでいる感じはないですが、確認用としては十分です。
そして、オプションで緯度経度を設定できるところがなんとも素晴らしい!!
今や多くのモバイルサイトがGPSのサービスを使ったものが多いなかで、
このあたりをきちんとサポートしているところは、
よくモバイルサイトの情勢をわかっているなと感じました。
そして、やはり無償で提供しているのに感動します。
*Firefoxでの公式ページはこちら。(開発中のアドオンのためユーザー登録が必要になります。)
以下に開発者の方のコメントを引用いたします。
FireMobileSimulatorは、主要3キャリア(DoCoMo/Au/SoftBank)の携帯端末ブラウザをシミュレートして、モバイルサイト開発を容易にするために作成されたFirefoxのアドオンです。携帯端末のHTTPリクエスト、絵文字表示、位置情報送信機能などの動作をシミュレートすることができます。
モバイルサイトをPCで閲覧するために、従来からある方法として、キャリア公式シミュレータの使用、Proxyの使用、Firefoxの useragentswitcher+modify headersの組み合わせ等、色々と手段はありましたが、これらの方法はそれぞれに不足している機能があったり、またITに詳しくない人にとっては導入が面倒かつ困難という面があります。
このアドオンは、「誰でも簡単に導入できる」かつ「高機能である」ことを目的に作成された新しい携帯シミュレーターです。
おススメです。
vmware serverの2.0がリリースされました。
新しく立てたサーバはこれを使ってやってみました。
起動するとブラウザが立ち上がって、認証を求められます。
windowsの管理ユーザのidとパスワードを入力してログインします。
すると、管理画面が表示されます。
感想としては前よりもわかりやすくなったなと感じました。
新しく仮想マシンを作る時も、直感的にサクサク進みます。
しかも、仮想マシンを作ってから、ビルドする時間が非常に短くなった気がします。
Firefoxの場合は専用のプラグインをダウンロードすると
コンソールが立ち上がるようになります。
仕組みとしてはtomcatが入っていてapacheから管理画面にアクセスできるようになっているようです。
なかなかいいなと思っていると、問題が・・・。
windowsのスタートメニューからvmware serverをクリックしても
ログインページが表示されなくなってしまった。。。
自分のマシンを参照するドメインが違うのか、ポートの指定が違うのか。
いろいろやってみて、ログイン画面に入れたものの、
実際にログインしても、エラーになってしまう。
The VMware Infrastructure Web Service at “http://localhost:8222/sdk” is not responding (Connection Refused).
え~。そんな。
いろいろ調べてみると、この類の問題にぶち当たっている人は多いみたい。
スタートメニューからのショートカットはnetBiosの関係でうまく動かないとか
hostsの設定が違うとか、ネットワークの設定が違うとかなんとか。。。
結局vmware server 1.xのほうが安定してるんじゃ。。。
いろいろ試してみたけど、結果から言うと
vmware server 2.0をアンインストールして、
再インストールしたら直りました。
なんのこっちゃ。
それまで試した試行錯誤を見たい方は以下をクリックして
続きを読んでください。
新しく開発用サーバを立てることになったのでメモを残します。
いわゆるLAMP環境の設置です。
apacheをportsからインストールします。
Code:
cd /usr/ports/www/apache22 | |
make install | |
apachectl start |
すると以下のようなエラーが。
httpd: apr_sockaddr_info_get() failed for sabani.localhost
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
[Wed Nov 26 16:12:35 2008] [warn] (2)No such file or directory: Failed to enable the ‘httpready’ Accept Filter
サーバのドメインネームが無い、ということなのでhostsファイルを編集。
Code:
vim /etc/hosts | |
127.0.0.1 yourdomain |
もう一度apacheを起動するとちゃんと動きました。
cd /usr/ports/lang/php5
Code:
make configure #apacheとmultibyteにチェック | |
make install |
インストールが終わったら
php.ini-distをコピーしてphp.iniを作る。
php.ini-recommendとはrecommendと言いつつ、phpの公式ページでは
php.ini-distを使いなさいとある。なんのこっちゃ。
ちなみにdiffると違いがよくわかる。
error_reportingとかmagic_quoteとかが微妙に違うので注意。
httpd.confに以下の一行があることを確認
Code:
LoadModule php5_module libexec/apache22/libphp5.so |
php5_moduleとlibexec/apache22/libphp5.soの間の変なタブが入っている場合は
そのタブを消してスペースで区切る。
じゃないときちんとphpと認識されないことがあるみたいです。
さらに以下の二行をhttpd.confに追加
Code:
AddType application/x-httpd-php .php | |
AddType application/x-httpd-php-source .phps |
これでapacheのリスタートをかける。
適当にphpファイルを作ってブラウザから閲覧できればOK。
さらに拡張する場合は
/usr/ports/lang/php5-extensions
に移動して
Code:
make configure | |
make install |
multibyteはともかく、必要そうなものを欲張りに入れていく。
特にMySQLとかXML-RPCとか。
参考URL
http://www.php.net/manual/ja/install.unix.apache2.php
phpの拡張でmysql-clientはすでにインストールされているので
ここではmysql-serverのみをインストールする。
Code:
cd /usr/ports/database/mysql50-server | |
make configure | |
make install |
mysqlの公式サイトによると
mysql_install_dbを実行する必要があるとのこと。
http://dev.mysql.com/doc/refman/5.1/ja/freebsd.html
これに従って以下を実行
Code:
cd /usr/local/mysql | |
bin/mysql_install_db --user=mysql | |
bin/mysqld_safe & |
topを見るとmysqldが動いているのが見えます。
mysql_install_dbを実行した際に以下のメッセージが出るので
これに従います。
/usr/local/bin/mysqladmin -u root password ‘new-password’
/usr/local/bin/mysqladmin -u root -h yourdomain password ‘new-password’
そしてこのメッセージでもマニュアルでも
起動コマンドはあくまでも mysqld_safe & にしてくれと書いてある。
なので、できるだけmysqld_safeを使うことにする。
mysqld_safe は Unix や NetWare などの環境で、mysqld サーバ ( デーモン) を起動するときに推奨しているコマンドです。mysqld_safe は、エラー発生時にサーバを再起動したり、ランタイム情報をログ ファイルに記録するなどのセキュリティ機能が加わります。
http://dev.mysql.com/doc/refman/5.1/ja/mysqld-safe.html
ただし、以下の文章がよくわからなかったので、保留事項としておく。
FreeBSD は非常に小さいデフォルトのファイル処理制限があることで知られています。項B.1.2.17. 「’File’ Not Found and Similar Errors」 参照。サーバを –open-files-limit オプションを使用して mysqld_safe に起動しするか、あるいは /etc/login.confg の mysql ユーザーの制限を上げそれを cap_mkdb /etc/login.conf で再度ビルドします。
ports管理やpackage管理でよく混乱するので覚書を残しておく。
以下のコマンドでports treeを最新のものにアップデートする。
この場合はcvsサーバを指定し、portsのsupfileを参照するように指定する。
Code:
cvsup -L 2 -h cvsup.jp.FreeBSD.org /usr/share/examples/cvsup/ports-supfile |
このコマンドでcvsのアップデートをする場合にはmake.confファイルを編集する必要はない。
make.confファイルの編集をするのが必要なのは、/usr/portsにて make update コマンドを実行したときである。
make.confは一般的に以下のように書かれるらしい。
Code:
SUP_FILE= yes | |
SUP= /usr/local/bin/cvsup | |
SUPFLAGS= -l -L 2 | |
SUPHOST= cvsup.jp.FreeBSD.org | |
PORTSSUPFILE=/usr/share/example/cvsup/ports-supfile |
(後藤大地 『FreeBSD ビギナーズバイブル』 p.87より)
make.confファイルは基本的にmakeコマンドの実行時に
デフォルトとは違うオプションとして指定したいものを
記述しておくものらしい。
よってmakeコマンドが叩かれたときには常にインクルードされるみたい。
cvsupは/usr/portsディレクトリでmake updateコマンドでも実行することができる。
ただ、その場合はどのsupfileを読み込むのかということや、どのサーバにアクセスするのかが
わからないので、make.confファイルに記述しておく必要があるみたいだ。
なおsupfileは/usr/share/examples/cvsup/にいくつかのサンプルファイルがある。
これらのファイルのなかでどのようなコレクションをアップデートするかという記述があるみたいだけど
正直よくわからなかった。
とにかくportsをアップデートしたいのでports-supfileで良いみたい。
以下ports-supfileの内容
Code:
*default host=CHANGE_THIS.FreeBSD.org#ここに指定したcvsサーバが入る | |
*default base=/var/db | |
*default prefix=/usr | |
*default release=cvs tag=. | |
*default delete use-rel-suffix | |
*default compress | |
ports-all#全てのportsがアップデートの対象になる |
ただゲーム関係のportsとかアラビア語のportsなどをインストールすることはまずないと思うので
本当ならば必要なものだけを指定したほうが効率的なのは間違いないだろうけど。
/usr/share/examples/cvsup/refuse にてcvsupする必要のないコレクションを指定することができる。
refuseファイルの内容
Code:
doc/bn_* | |
doc/da_* | |
doc/de_* | |
doc/el_* | |
doc/es_* | |
doc/fr_* | |
doc/hu_* | |
doc/id_* | |
doc/it_* | |
doc/mn_* | |
doc/nl_* | |
doc/no_* | |
doc/pl_* | |
doc/pt_* | |
doc/ro_* | |
doc/ru_* | |
doc/sr_* | |
doc/tr_* | |
doc/zh_* | |
ports/arabic | |
ports/chinese | |
ports/french | |
ports/german | |
ports/hebrew | |
ports/hungarian | |
ports/korean | |
ports/polish | |
ports/portuguese | |
ports/russian | |
ports/ukrainian | |
ports/vietnamese |
デフォルトでは日本語関係のものが入っていることもあるので適宜抜く。