以前書いた記事の続編です。
http://momiage3dau.com/?p=97
上記で記載した方法の場合、ドメインが「*.jp」のみとYahooBBしか対応出来ていないです。
なので、結局は日本国内で使用されているIPを列挙するしかないのかな、と。
と、言う事で、下記URLを参考に、日本国内のIPを列挙し、対応。
http://www.cgis.biz/tools/access/
では。
以前書いた記事の続編です。
http://momiage3dau.com/?p=97
上記で記載した方法の場合、ドメインが「*.jp」のみとYahooBBしか対応出来ていないです。
なので、結局は日本国内で使用されているIPを列挙するしかないのかな、と。
と、言う事で、下記URLを参考に、日本国内のIPを列挙し、対応。
http://www.cgis.biz/tools/access/
では。
久々のエントリ。
さて、本日は以下セミナーに行ってきた。
「スマートフォン向けサイト&アプリケーション ~ディレクション+企画のための基礎知識~」
http://swapskills.info/2011/02.html
現状、以前作成したPCサイトのスマートフォン対応の依頼のが増えていて、
どんなディレクションをしたら良いか、指標がブレているので、そのあたりを主題に聞きに。
iPhoneは良いにしても、Andoroidはどの程度まで対応するか。
各キャリアで販売されているAndoroid端末って、OSバージョンが 1.5, 1.6, 2.1, 2.2 と、複数あって、その中でも端末メーカーによって解像度も違う。
では、Andoroid用にサイトを最適化する場合、どのOSのバージョンで、どの端末メーカーのどの解像度まで正常表示出来るように担保するか。
そのあたりって、判断がなかなか難しい。
数をこなせばだんだんと見えてくると思うけど。
10年前は各キャリア毎にサイトを分けるのは当たり前だった。
しかし、今はキャリアに関係無く、モバイルサイトって一括りでサイトを作っているのが殆どだと思う。
この数年間は過渡期になるから、iPhone/Andoroid/ガラケー/PCと、サイトを分ける事もあるかもしれないが、いずれは、1本化されると思われる。
ガラケーは別として、iPhone/Andoroid/PCサイトは全て同じHTMLファイル。
CSSを切り替えて表示するという形。
セミナーの中でもあったけど、今後はiPhone/Andoroidアプリではなく、両方で普通に見れるWebアプリが増えていきそうだ、と。
発注側もiPhone/Andoroidアプリの2本立てで金をかけるよりは、
Webアプリ1本で両方見る事が出来た方が工数も期間もかからないし、その流れになっていくでしょう、と。
で、今日の自分の中の結論としては、
・iPhone は iOS4(iOS3も対応出来るならやる)
・Andoroid は 2.1 以降
・アプリ開発は避け、要件をなるべくWebアプリへ寄せていく
・Andoroidだからと言って、Flashがちゃんと見れると思うなよ!!
・WindowsPhoneとBlackBerryは無視
・タブレットの場合はPCサイトを見せた方が良い
と、他にも色々あるけど、大きくはこんな感じで。
でわ。
現在運用中のEC-CUBEのサイトがある。
さくらインターネットの共用サーバで動作している。
で、今まではPCサイトのみで動作していたのだが、モバイル版もカスタマイズして使えるようにして欲しいと。
専用サーバの場合、ゴリゴリとサーバ自体の設定をいじれるから問題無いのだが、さくらの共用サーバはそうもいかない。
インストールされた状態のままでもうまく動かない。
色々やって、うまく動くようになったので、備忘録。
1) SC_DbConn.phpの修正(data/class/SC_DbConn.php)
DB接続部分でなにやらエラーが出てうまく動かなかったので、コンストラクタのDB接続部分をこんな感じで修正。
// 既に接続されていないか、新規接続要望の場合は接続する。 if(!isset($objDbConn->connection) || $new) { if($dsn != "") { $objDbConn = DB::connect($dsn, $options); $this->dsn = $dsn; // ここから下3行を追加 $buf = $objDbConn->prepare('SET NAMES utf8'); $objDbConn->execute($buf); mysql_set_charset("utf8"); } else { if(defined('DEFAULT_DSN')) { $objDbConn = DB::connect(DEFAULT_DSN, $options); $this->dsn = DEFAULT_DSN; } else { return; } } }
2) php.iniをばらまく
さくらサーバの場合、html/mobile配下に設置されている.htaccessが効かないので、php.iniにして、その配下のディレクトリ全てにばらまく。
$ cd html/mobile $ mv .htaccess .htaccess.bk $ vi php.ini mbstring.language=Japanese output_handler=null mbstring.encoding_translation=Off magic_quotes_gpc=Off mbstring.internal_encoding=UTF-8 variables_order=EGPS session.auto_start=Off session.use_trans_sid=On $ cp ./php.ini ./cart/ $ cp ./php.ini ./contact/ $ cp ./php.ini ./entry/ $ cp ./php.ini ./forgot/ $ cp ./php.ini ./frontparts/bloc/ $ cp ./php.ini ./guide/ $ cp ./php.ini ./mypage/ $ cp ./php.ini ./products/ $ cp ./php.ini ./regist/ $ cp ./php.ini ./shopping/ $ cp ./php.ini ./unsupported/ $ cp ./php.ini ./user_data/
とりあえず、こんな感じでうまく動くようになりました。
でわ。
ハマったので。
PHP 5.1.6
Oracle 10.2.3
にて。
PDO_OCIでPHPとOracleとを繋いでる環境でエラーじゃないけど、Warningが出た。
Warning: PDOStatement::fetch(): column X data was too large for buffer and was truncated to fit it in test.php on line XXX
VARCHAR2のカラムからデータを取得すると出た。
正常にデータが取得出来てるっぽかったけど、おしりの何バイトかが切れてた。
おぉ、trancateされてる。
色々調べてみたところ、全角文字が入ってるとダメだった。
さらに調べてみると、原因が分かった。
Oracle:SJIS
PHP:UTF-8
これが原因だった。
OracleはSJISなので、全角文字は2バイト。
PHPはUTF-8なので、全角文字は3バイト。
PDO_OCIの場合、テーブルのカラムの型と長さを参照してバッファを決めるようで。
全角文字が入っていた場合、そのバッファが溢れる事があるのです。
なんせ、2バイトだと思っていた全角文字が3バイトだったので。
VARCHAR2(20)のカラムに、全角文字が10文字入っていた場合、SJISならば20バイトなので、OK。
しかし、UTF-8だと30バイトになってしまうので、受け取る側のバッファが溢れてしまう、という事。
対応どうしようか・・・
と考え、
/etc/sysconfig/httpd
をちょっと編集してみた。
# cd /etc/sysconfig/
# vi httpd
export NLS_LANG=Japanese_Japan.UTF8
↓に変更
export NLS_LANG=Japanese_Japan.JA16SJIS
# /etc/rc.d/init.d/httpd restart
Warnningは出なくなったけど、文字化けした。
DBから取得してる根っこの部分でSJIS→UTF-8の変換をかけようかと考えたのですが、symfony+doctorineという事もあり、断念。
だって、調べるの面倒だから・・・
テーブルのカラム長の定義を1.5倍すれば回避出来るけど、運用案件では無理なので断念。
結果、PDO_OCIのソースをちょっと直して対応する事に。
# cd /usr/local/src
# cd PDO_OCI-1.0
# vi oci_statement.c
510行目付近に有る記述
col->maxlen = data_size;
↓
col->maxlen = data_size*1.5;
# ./configure
# make
# make install
PDOがOracleのテーブルのカラムの長さを取得してる部分で、その長さを1.5倍してあげれば大丈夫。
この対応方法が良いかどうかは疑問が残るが、とりあえずはこれで回避しよう。
でわ。
Skypeで過去のチャットログを見たい場合、
「今回の会話」
「今日」
「今週」
「30日以内」
「初めから」
をクリックすれば、見る事が出来ます。
しかし、しばらくチャットをやっていないユーザの場合、上記表示が出てきません。
そのユーザとの過去のチャットログを見たい場合、
/htmlhistory
とメッセージを送信すると、そのユーザとの全てのチャットログがデフォルトブラウザにて表示されます。
他にも便利な隠しコマンドが色々あるようなので、気になった人は探してみてくださいな。
でわ。
SNSとの連携テストの記事です。
VMWare EXi 上で動作させている、CentOS4.9について、どうもサーバの時刻がズレる。
色々と調査したところ、どうやら時刻のカウントの仕方が悪いらしい。
※「VMWare」「Linux」「サーバ時刻」あたりでググると出てきます
って事で、やった事は以下。
・カーネルの起動オプションに「clock=pit」を追加 → 時間が進む場合の対策らしい
・カーネルの起動オプションに「nosmp noapic nolapic」を追加 → 時間が遅れる場合の対策らしい
# cd /boot/grub/ # vi grub.conf カーネルの起動オプションの末尾にコレ追加 clock=pit nosmp noapic nolapic # shutdown -r now
※設定は自己責任でお願いします
設定後、とりあえずズレる事は無くなった。
vmware-toolsインストールして「tools.syncTime = “TRUE”」の設定もやった方がいいみたい。
それはまだやってないけど。
そんな感じで。
でわ。
ちょっとハマった。
PowerEdge R200 の筐体で、RAIDのドライバをインストールしようとしたのだが、
そもそもFDDがついていなかったので、外付けFDDを接続した。
で、普通にマウント出来ると思ったのだが・・・
以下手順にてフォーマットしてマウントしました。
# view /var/log/messages (snip) May 7 17:54:44 HOST_NAME kernel: ohci_hcd 0000:00:0f.2: wakeup May 7 17:54:44 HOST_NAME kernel: usb 1-3: new full speed USB device using ohci_hcd and address 3 May 7 17:54:44 HOST_NAME kernel: usb 1-3: configuration #1 chosen from 1 choice May 7 17:54:44 HOST_NAME kernel: scsi2 : SCSI emulation for USB Mass Storage devices May 7 17:54:49 HOST_NAME kernel: Vendor: NEC Model: USB UF000x Rev: 2.00 May 7 17:54:49 HOST_NAME kernel: Type: Direct-Access ANSI SCSI revision: 00 May 7 17:54:50 HOST_NAME kernel: SCSI device sdb: 2880 512-byte hdwr sectors (1 MB) May 7 17:54:50 HOST_NAME kernel: sdb: Write Protect is off May 7 17:54:50 HOST_NAME kernel: sdb: assuming drive cache: write through May 7 17:54:51 HOST_NAME kernel: SCSI device sdb: 2880 512-byte hdwr sectors (1 MB) May 7 17:54:51 HOST_NAME kernel: sdb: Write Protect is off May 7 17:54:51 HOST_NAME kernel: sdb: assuming drive cache: write through May 7 17:54:51 HOST_NAME kernel: sdb: unknown partition table May 7 17:54:51 HOST_NAME kernel: sd 2:0:0:0: Attached scsi removable disk sdb May 7 17:54:51 HOST_NAME kernel: sd 2:0:0:0: Attached scsi generic sg3 type 0 May 7 18:11:51 HOST_NAME kernel: usb 1-3: USB disconnect, address 3 ※上記により、USB接続FDDは/dev/sdbのデバイスと言う事が判明 # mkdir /mnt/fdd ※マウントポイントを作成 # mkfs.ext2 /dev/sdb ※フォーマット # mount /dev/sdb /mnt/fdd ※マウント
フォーマットせずにマウントしようとしたら、ファイルシステムが不明とか言われたので、
フォーマットしてからマウント。
でわ。
MySQLでは、各テーブル毎にストレージエンジンを設定する事が出来ます。
大体は、この2つのどちらかになるかと思います。
MyISAM:検索に強いらしい
InnoDB:トランザクションが使えるらしい
と言う事で、各テーブル毎に設定されているストレージエンジンを確認する方法です。
# mysql -u root mysql> use information_schema; mysql> select table_name, engine from tables where table_schema = DB_NAME; +--------------------+--------+ | table_name | engine | +--------------------+--------+ | hogehoge | InnoDB | | hagehage | MyISAM | | higehige | InnoDB | +--------------------+--------+ mysql> exit;
「show table status」でも確認出来ますが、複数DBが動いている状態だと、全てのDBのテーブルが表示されてしまうので。
でわ。