header image

携帯対応

QRコード

RING

人気ブログランキング

新着記事

2007/06/30 07:32:20 日記 none Comments Tags:

知り合いがやっていたのでおいらもやってみた。


脳内メーカー

なんというか、結構あたっているような・・・。

とりあえず最新のphpMyFaqをいじくってみて見つけた不具合のメモ
いずれもxampp上での動作確認結果

■用語集の箇所で改行部分がrnに変換されて画面出力される。
Glossary.phpの不具合
2度文字列に対してEscape処理がかけられている(mysql_real_escape_string)ことが原因

219,220c219,220
<$this->db->escape_string($this->item),
<$this->db->escape_string($this->definition));
---
>             $this->item,
>             $this->definition);
251,252c251,252
<$this->db->escape_string($this->item),
<$this->db->escape_string($this->definition),
---
>             $this->item,
>             $this->definition,

■TinyMCEを利用してFaqを編集した際に文字化けする
TinyMCEで入力画面で改行を挿入すると、htmlのソースとしては

<p>&nbsp;</p>

に変換される。しかしこれを登録すると、 の箇所がごっそり
文字化けしてしまう問題がある。用語集の時のように2回Escape処理を
しているわけでもなく、Previewの段階で既に文字化け。
これはイマイチ意味がわからん。

最新のCVSかSVNでも見るかな~。

2007/06/26 23:26:57 日記 none Comments Tags:

他人が作っているJAVAのシステムでこんな例外が出ていた。

答えはここに書かれているとおり

/etc/rc.d/rc.local 起動スクリプトに次の 3 行を追加すれば、システム全体でファイル記述子の制限を設定することもできます。
# Increase system-wide file descriptor limit.
echo 4096> /proc/sys/fs/file-max
echo 16384> /proc/sys/fs/inode-max

とあるので、とりあえず開くことが出来るファイルの数を増やせばなんとかなるかもしれない。。。

それから普通にファイルを一杯オープンしてクローズしていないケースもありえる。
getInputStream()/getOutputStream()をちゃんとクローズしているかの確認も必要だ。

2007/06/22 23:58:15 Ajax/Web2.0, PHP, 書評 none Comments Tags: , ,

なんとなくAjaxを色々やってみよーということで、本買った。

PHPによるJavaScriptを書かないAjax

著者/訳者:佐久嶋 ひろみ

出版社:九天社( 2007-05 )

定価:¥ 3,150

単行本 ( 473 ページ )

ISBN-10 : 4861671752

ISBN-13 : 9784861671753


とりあえず読み応えありそうなので、土日にゆっくり読むことにする。

2007/06/18 01:18:23 Ajax/Web2.0, PHP none Comments Tags: , ,

それぞれのブラウザ毎に異なる仕様を吸収するソースを書くのも面倒だし、かといってprototype.jsとかも複雑そうだし、やっぱなれたPHPでAjaxだよな~ということでxajaxというライブラリを使ってみた。

以下はライブドアの天気予報Webサービスに接続して画面に表示する例だが、極めてシンプルであり、ソース中にはJAVAスクリプトのコードはほぼ出現しない。
動作させると、プルダウンの切り替えによって画面を切り替えるようになっている。

<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");

require_once("./xajax.inc.php");
require_once("XML/Unserializer.php");
require_once("HTTP/Request.php");

$xajax = new xajax();
$xajax->registerFunction("weather_search");

function weather_search($string)
{
    $string = htmlspecialchars($string);
    $url = "http://weather.livedoor.com/forecast/webservice/rest/v1?day=today&city=".$string;
    $option = array(
        "timeout" => "10",
        "allowRedirects" => true,
        "maxRedirects" => 3,
    );

    $http = &new HTTP_Request($url, $option);
    $http->addHeader('User-Agent', 'Ryuzee.com test scripts');
    $http->sendRequest();

    if ($http->getResponseCode() != 200 && $http->getResponseCode() != 304){
        return PEAR::raiseError('Error HTTP Status ' . $http->getResponseCode());
    }
    $result = $http->getResponseBody();

    $xml = &new XML_Unserializer();
    $xml->setOption(XML_UNSERIALIZER_OPTION_ATTRIBUTES_PARSE, true);
    $xml->unserialize($result, false);
    $xml_result = $xml->getUnserializedData();

    $objResponse = new xajaxResponse();
    $objResponse->addAssign("result","innerHTML", nl2br(print_r($xml_result, true)));

    return $objResponse;
}

$xajax->processRequests();

?>
<html>

<head>
<title>xajax sample</title>
<?php $xajax->printJavascript(); ?>
</head>
<body>
<select name="point" onChange="if(this.value != 0){ xajax_weather_search(this.value); }">
        <option value="0">---Please select---</option>
        <option value="4">Sapporo</option>
        <option value="15">Hakodate</option>
        <option value="31">Fukushima</option>
        <option value="50">Niigata</option>
        <option value="63">Tokyo</option>
        <option value="67">Chiba</option>
        <option value="79">Kyoto</option>
        <option value="81">Osaka</option>
</select>

<div id="result"></div>
</body>
</html>

2007/06/17 00:08:01 PHP none Comments Tags:
pear install XML_Serializer

というコマンドXML_Serializerをインストールしようとしたら、

No release with state equal to: 'stable' found for 'XML_Serializer'

と表示された。なんでかというと、XML_Serializerがベータ版のためで、pearコマンドはデフォルトではベータ版以下のモジュールはインストールしてくれないから。

こんなときはpearの設定を変更するか、モジュール名の後ろに-betaとつければよい。
今回でいうと

pear install XML_Serializer-beta

結局phpBB2を使って社内システムを構築しているわけだが、カスタマイズ要件が色々あるので、ソースを修正しまくっている。

正直なところ、このソフトウェアをインターネットにさらすサイトで使うのは危険すぎる気がするし、他の選択肢があればそちらを使うべき。今回オイラが利用したのはSQL Serverでも使えるという1点の理由のみ。

オイラが考える問題は以下の通り。

  • PHPなので簡単に色々修正できるのは良いのだが、phpBB2自体はモノが比較的古いせいか、まったくMVCモデルにすらなっておらず、極めて汚いソースになっている。
  • 一応テンプレートは分離されているが、すくなくともphpBB2には、データモデルが無く、全てはphpのソースコードで生のSQLを呼び出して、テンプレートに割り付ける処理になっている。各画面で同じテーブルを読むのも、似たようなSQL文がベタベタと書かれており、自前で拡張しようとすると、あちこち直す羽目になる。
  • 上記と同じだが、データ取得を行う箇所が生のSQLで実装されており、DBMS製品間のSQLの差異をアプリ自身が吸収する形になっている。これは本来Pear::DBやDB_DataObjectを利用すべきだ。
  • テンプレートエンジンが分かりにくい。普通にSmartyでも使えばプレゼンテーションレベルの分岐の表現力が上がる。ちなみに標準で付いているテンプレートのhtmlが、いまだにテーブルだらけだ。。。
  • 認証がPlugableでない。LDAPに対応させるにもあちこちいじらないといけない。
  • MODによりアプリを拡張できるが、こいつはソースを直接直していくパッチ適用作業みたいなものである。少なくともwordpressみたいにプラグインによる機能拡張を出来るようでないといけない。

ちなみに、phpBB3のリリース候補が出ているが、あまり構造的な書き直しはされていない。
もうちょい綺麗な奴自分で作るかな~。(しかし使い道はないか。)

早速自宅鯖にOpenVZを導入してみた。
VMWareよりも圧倒的に楽だし、会社での開発環境構築にも使えそう。
手順などは下記の通りだ。なお、自宅サーバのホストOSはCentOS4.5である。

1.まずネットワークの設定変更を下記の通り行う
# vi /etc/sysctl.conf

[変更前]
net.ipv4.ip_forward = 0
kernel.sysrq = 0
[変更後]
net.ipv4.ip_forward = 1
kernel.sysrq = 1
[追加]
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

2.yum用に設定追加
# cd /etc/yum.repos.d/
# wget http://download.openvz.org/openvz.repo
# yum isntall ovzkernel
サーバ再起動:起動時カーネルの選択で2.6.9-023stab032.1を指定

3.OpenVZのコマンドをインストール
# yum install vzctrl vzquota vzpkg
# service vz start

4.OpenVZのゲストOS用テンプレートをインストール
# yum install vztmpl-centos-4.i386
# vzpkgcache

5.ゲストOSイメージの作成
# vzctl create 1001 --ostemplate centos-4-i386-default --config vps.basic
# vzctl set 1001 --onboot yes --save
# vzctl set 1001 --hostname ve1 --save
# vzctl set 1001 --ipadd 192.168.1.61 --save
# vzctl set 1001 --nameserver 192.168.1.1 --save
# vzctl exec 1001 service sshd start
# vzctl exec 1001 service sshd status
# vzctl set 1001 --userpasswd root:hogehoge

6.ゲストOSの開始
vzctl start 1001

7.ゲストOSへのログイン
vzctl enter 1001

8.ゲストOSの終了
vzctl stop 1001

※ゲストからの通信がこのままだとホストOSのeth0を経由しての通信になる。
従ってホスト側のiptablesの設定については要注意。

その他
■他のOSイメージを探す
yum search vztmpl*

■キャッシュを配置する
/vz/template/cacheに配置

■仮想OSの削除
vzctl destroy 1001

とりあえずVMWareとVirtualServerはよくしってるが・・・。(Xenとかはあんまりしらない)

最近調べ物をしてたらVirtuozzoというのを発見。レンタルサーバ業者等で事例が多く、1つの箱で100以上の仮想OSが動作することもあるそうな。

Virtuozzoの特徴は以下の通り。

  • インテリジェント・パーティショニング
  • 完全な隔離
  • 動的なリソース配分
  • ライブマイグレーション
  • 大規模管理

んで、こいつをベースにして、オープンソース化したのがOpenVZというオープンソースの仮想化ソフトだそうな。OpenVZのインストールはこのサイトが参考になりそう。この週末試してみることにしよう。

Firefoxを2.0.0.4に、Thunderbirdを2.0.0.0バージョンアップしてみた。

心なしか、動きが軽くなった気がする。といってもまだまだ遅いんだけど・・・。

ThunderbirdにはQuicktextというプラグインを入れてみた。色々なマクロを使って、メール本文を楽に作れるようになる。予めテンプレートを何種類も登録しておくのがベター。下記から入手可能
https://addons.mozilla.org/ja/thunderbird/addon/640

参考はこのあたり

 

日記 PHP オープンソース インストールマニアックス IIS Trac MySQL Perl Linux Agile・生産性向上 wordpress フリーソフト 自宅サーバ 書評 ブックマーク phpMyFaq TraM Plugin 早起き Delphi apache CakePHP Firefox Ruby eclipse セキュリティ プラグイン アジャイル mojavi Subversion Ajax/Web2.0 SQLServer Zope サーバ フレームワーク phpBB 仮想化 PostgreSQL OpenVZ scuttle CMS 文字化け 自宅 翻訳・日本語化 ApacheDS LDAP Excel 生産性向上 CodeIgniter XAMPP hacks taskfreak 修正 言語ファイル Ajax SBM ダウンロード HTML::FillInForm mod_security 情報共有


ads

読まなきゃモグリ