スタッフブログ

  • 最新配信
  • RSS

龍司の注目しているCMS

Ryuji : CMS 2008/7/31 17:12

Blogger's Avatar

先週、第19回WebSig会議「特集!Open Source CMS オープンソースのWebシステムを、どうビジネスシーンに活用するか」に参加してきた龍司です。

最近、XOOPSについてお話させていただく機会が増えてきたので、「他のオープンソースCMSと比較したときにXOOPSの良さって何だろう?」ということを良く考えるようになりました。

だんだんとこういうときはXOOPSが良さそう。こういうときは、他のCMSの方がいいかもというのが少しずつ見えてきたような気がしてます。

さて、そんなことを思いながら参加してかたWebSig会議だったわけですが、「これいいんじゃない!」と思えるCMSがありましたので、それらのCMSとあわせて、私の注目してるCMSの紹介をしたいと思います。

NetCommons
国立情報学研究所が中心となって開発されているCMSです。
現行のNetCommons1.xは、XOOPSがベースとなっています。

学校、教育分野では多数の導入実績があり、今後もこの分野では普及していくことでしょう。

私はこの夏にリリースされるといわれているNetCommons2.0に注目しています。
XOOPSベースだった1.x系と違い、NetCommons2.0では、mapleをつかって一から開発しなおしています。

ユーザグループごとにNetCommons内にグループ専用サイトがつくれるような形のCMSです。

現在は、XOOPS専門でやっているRYUSですが、今後NetCommonsを利用したサイト構築やモジュール開発、NetCommonsのテーマデザインも手がけていく予定です。

MODx
DreamweaverライクなCMSです。
Dreamweaverで、テンプレート機能を利用してサイト構築された経験がある方なら非常になじみやすいと思います。

自由なサイト構築ができるのが特徴ですが、その反面、やや複雑すぎるところもあると思います。
XOOPSやBLOGでのサイト更新に慣れ親しんだ方には、MODxで構築されたサイトを更新するのは抵抗感じるんじゃないかなぁ。

コーポレートサイトなどには向いていると思います。

SOYCMS
MODxと同様にコーポレートサイトなどに向くCMSですが、MODx以上に私は注目してます。
MODxよりも自由度は下がりますが、その分、インターフェースがシンプルです。

SOYCMSが一番活躍するだろうなぁと思うのは、既存静的HTMLサイトのCMS化だろうと思います。
既存サイトのHTMLをガシガシコピー&ペーストで、SOYCMS側にページを作成していって、日常更新をかけるところだけ、動的に更新できるようにしてやる。
そんな風に、既存静的HTMLサイトをCMS化できるんじゃないかなぁと感じてます。

OpenPNE
mixiのようなSNSをつくれるCMSです。
XOOPSと同じく「コミュニティ」というのがひとつのキーワードになると思うのですが、切り口は異なります。

OpenPNEの場合、人と人とのつながりの表現やコミュニケーションの場をつくるツールだと思います。
一方XOOPSは、コミュニティ内での情報集約、情報の蓄積に向くCMSだと思います。

コミュニティの「人」に焦点をあてたOpenPNE
コミュニティの「情報」に焦点をあてたXOOPS

こういう違いがあるんじゃないかなぁと考えてます。


というわけで龍司の注目しているCMSをざっくりと紹介してみました。
今後RYUSでは、XOOPS以外のオープンソースCMSについても、サービス提供していくことを検討していますので、XOOPSにするか、他のCMSにするかお悩みでしたら是非ご相談ください。

ファイルの一覧をCSVに出力

mik : ツール 2008/7/30 17:14

Blogger's Avatar

ファイルの一覧を出力して管理などに使おうとしたとき、今まではdos窓からコマンドを打ってしてましたが面倒くさくてなかなかたくさんフォルダのあるものをやるのは大変でした。

で、ほしいモノはたいがいネットでフリーソフトになっていることを思い出し検索してみたらやはりたくさんあるのですね。他のものも試しましたがCSVに出力できるのが便利でこれを使ってみました。

ふなツリー
http://www.vector.co.jp/soft/cmt/win95/util/se193910.html

CSVの形で出力できるのでそのままファイルを管理することに使えます。
フォルダ部分も列に入ってくれるとよかったのですがそこまでするのはプログラムが大変ですね(><)。

ホダ塾ディストリビューションをツリーにしてみました。

 

今まで「たくさんあるなー」という感想だけだったのがこれですっきりです。
エクセルに読み込めるので管理系の仕事の時に便利に使えそうです。

if文の条件の書き方

 : PHP 2008/7/30 3:32

Blogger's Avatar

haltです。 皆さんはif文内部に条件を書く時どのように書いていますか? 私の場合、
<?php
$load_error = true;
if ($load_error) {
  exit('error!');
}
とか
if (!in_array($value, array('a','b','c'))) {
  exit("{$value} is not found.");
}
のように、if文の中に変数や関数を直接書いてその結果を判定条件にしています。 が、こういった書き方がすべてだと考えていると必ずハマります。具体的には以下の場合 です。
if (strpos('abc', 'a')) {
  exit('exist!');
}
strposは、第一引数の中に第二引数が存在するか調べ、その文字が見つかった位置を返し ます。見つからなければfalseを返します。 上のプログラムの場合、abcの中にaは含まれているのでifの条件が満たされ、exitでプロ グラムが停止するはずですが実際は停止しません。 い strposが返す文字列位置は0からはじまる為、if文が0をfalseと判い断してしまい、条件>を満たす事ができません。同様のケースとして以下の例があげられます。 http://d.hatena.ne.jp/pirokyun/20080729/1217329949
<?php
$fruit = array('apple', 'orange', 'banana');
if (array_search('apple', $fruit)) {
    return true;
} else {
    return false;
}
?>
array_searchは配列の中から特定の値を含む配列のキーを返す関数なのですが 1番目の配列のキーは0なので0を返し、if文がそれをfalseと判断。結果、配列は値を含ん でいるのに条件分岐の上では含んでいない事になってしまいます。 この問題を避けるには条件の中で変数や関数の結果を直接参照しないで、必ず比較するよ うにする事です。strposの問題やarray_searchの問題は
<?php
if (strpos('abc', 'a') !== false) {
  exit('found!');
}
のようにする事で回避できます。 strposやarray_searchなどphpが用意した関数は覚えてしまったりマニュアルを引いて使>うので慣れればハマる事はありませんが、他人が作った関数などを使う場合は注意したほ うが良いでしょう。

PHP5.3のクロージャについて

 : 技術全般 2008/7/25 10:18

Blogger's Avatar

satoです。
PHP4のサポート終了まであと2週間となりましたが、一方10月頃にリリースが予定されているPHP5.3で、クロージャ(Closure)が実装されることになりました。
今日はこのクロージャについて簡単に解説しようと思います。

まず、従来のPHPには、create_function()で無名関数(匿名関数)を定義できるという機能がありました。
ただし、使い方の制限が大きい上に、文字列内にコードを書く必要があるので、実行時まで文法がチェックできないという問題がありました。

PHP5.3からは、JavaScriptのような感じで無名関数を作成することができます。
$f = function($var) {
return $var * 2;
};

$f(3); // return 6
これだけでも非常に書きやすくなったと思います。

さて、例えば、
 // 動作しないコード
function hoge() {
$count = 4;
 return function($var) {
 // ここで$count*$varをreturnさせたい
 };
}

$f = hoge(); // $fにはreturnしたfunctionそのものが入る
$f(2);
という場合に、どうすればよいでしょうか。

単純に書いてみます。
// 動作しないコード
function hoge() {
$count = 4;
 return function($var) {
 return $count * $var;
 };
}

$f = hoge(); // $fにはreturnしたfunctionそのものが入る
$f(2);

クロージャをサポートしている言語なら、これは思った通りに動作します。
クロージャをサポートしていない言語なら、これは思った通りには動作しません。

「なんでこれで動くの?」と思った方はなかなか鋭いです。

コードだけを見ると、$countがその直前で定義されているのでそのまま使えると思うのですが、returnされる無名関数は、hoge()の外で実行されるため、hoge()内にある$countとは無縁になります。
しかしhoge()内の$countを参照したいということは多いと思います。これをそのまま実現するのがクロージャです。

もう少し突っ込むと、無名関数内の$countは、ここでは未定義変数です。
この未定義変数を解決する際に、この無名関数を定義した場所(ここではhoge())で定義されている変数を利用できるようにするのがクロージャです。

さて、そういう理由で、クロージャをサポートしているPHP5.3ならこれは動作するように思えるのですが、実際は動作しません。JavaScriptであれば動作するのですが…。

PHP5.3のクロージャは、定義した場所で定義されている変数を利用する際、無名関数の宣言時にどの変数を利用するか明示的に宣言してあげる必要があります。
具体的には以下のようになります。
function hoge() {
 $count = 4;
  return function($var) use($count) {
 return $count * $var;
 };
}

$f = hoge(); // $fにはreturnしたfunctionそのものが入る
$f(2);
このように、useで使用したい変数を宣言することにより、無名関数内で使用することができます。少々面倒な感じになっています。

無名関数とクロージャがサポートされることにより、PHP5.3以降では面白いコードがいろいろ書けそうで楽しみです。
今月末にはα1がリリースされる予定なので、興味のある方は是非チェックしてみてください。

はじめまして。いしだです。

naoto : ツール 2008/7/22 19:34

Blogger's Avatar

はじめまして。新入社員のいしだなおとと申します。
先週の木曜日より株式会社RYUSでお仕事させていただくことになりました。

今回初めてブログの執筆を任されて、少々緊張と戸惑いを覚えて居マス。
新しい職場と業務になれるまで、まだもう少し時間がかかりそうです。

今日は、新しい環境にあわせてどんな開発環境を揃えたかということについて、書いてみたいと思います。

支給されたPCはワイド液晶の小さめのノートで、それとこちらもワイド液晶のいわゆるデュアルディスプレイです。OSなしモデルだったのですが、バンドルされていたWindows XPをインストールしました。
そしてこれもバンドルのMS Office 2007と、ダウンロードしたPower Point Viewer 2007もインストール。そのあとも自動更新の適用などいろいろあったのですが、ここでは割愛します。

次にブラウザにFirefox3、そしてメーラーはThunderbiredを選びました。
何のことはなく、いつも使っているものをチョイスしただけです。
ほかには、
  • TortoiseSVN
  • Poderosa
  • WinSCP
  • WinCVSごった煮版
といった、開発に必要なものをひとまず入れました。

ここからはさらに趣味が出てくるかもしれませんが、
  • LHAユーティリティ32
  • マルチフォーマット画像ビューアGV
  • 窓の手2004
  • LimeChat2
  • OpenOffice.org 2.4
などといったところもインストールしました。

以外にたくさん入ります。でも肝心の開発言語の環境はまだです。

じつは開発にはUbuntu Linuxを使いたかったので、VMware Playerで動かすことにしました。
8.04LTS 日本語ローカライズドdesktopのVMwareイメージを使いました。

というわけで、Ubuntuの中でもまたインストール、インストールです。
それでも、はじめから比較的そろているのと、パッケージマネージャのSynapticで選ぶだけなので手間はそれほどでもありませんでした。

このあと、ローカルで動かすApacheを整えたり、社内で使うWebアプリなんやらのアカウントを設定したりでまだまだ落ち着かないような状況です。

さて、もっとも肝心かなめ、エディターは、、、
社内ではVIMを使う流れのようなものがあるような気がしますが、あっさりとGNU Emacs 22 GTKを使っています。先月あたりから、8年ぶりにEmacsに帰ってきました。
すっかりキーバンドも忘れていますが、ぼちぼちなれていきたいと思っています。

iPhoneとWindows Mobile

Ryuji : ツール 2008/7/19 12:42

Blogger's Avatar

PDA好きの龍司です。

冷静に考えれば、まだ見送りかなぁとも思ったのですが、衝動をおさえきれずにiPhone 3G購入してしまいました(^^;

せっかくなので、これまで使っていたWindows Mobile機EMonsterとiPhoneとの使い勝手を比較してみようかなぁと思います。

■安定性
今のところWindowsMobileの方が良さそうに感じます。
iPhoneを使ってると、急にアプリが終了して、ホーム画面に戻るってことがよくあるんですよね。
これだと、何かメモをとろうとしたときに不安です。

■サイズ
断然iPhone(^^;
久しぶりにワイシャツの胸ポケットにつっこめるPDAだなぁと思ってます。
# 胸ポケットに入れない方がいいですけどね。よく落とすし、シルエットくずれるし。

■閲覧のしやすさ
iPhoneの閲覧性は非常に良いと思います。
WindowsMobileも6になってからかなり閲覧しやすくなったと思います。

でもフルブラウザの閲覧性は、圧倒的にiPhoneのSafariの方がいいですね。WindowsMobileではあまりPCサイトを見る気になれませんでしたが、iPhoneならストレス感じずに閲覧できました。

■入力のしやすさ
片手入力なら、iPhoneの勝ち。でも携帯電話には負けてます(^^;
でも両手入力なら、ちゃんとハードウェアキーボードのあるEmonsterの方が入力しやすいです。
でも、片手両手とも入力しやすかったという点ではウィルコムのW-ZERO3[es]の方が上ですね。

■同期
iPhoneとMacの同期では、MobileMeの存在が大きいですね。
これまでのPDAとPCの同期といえば、USBケーブルで接続というのが主流だったわけですが、MobileMeだと、ネットワーク経由で予定やアドレス帳が自動的に同期されるので、「あれ?最後に同期したのっていつだっけ?」とならず助かります。

ただし、予定、アドレス帳以外となるとWindows Mobileの方が同期できる範囲が広いです。
WindowsMobileで同期できて、iPhoneで同期されなくて、がっかりしたのは下記2点。
・TODO
・ファイル(音楽、動画、写真以外のファイルです)
この2点は、できて当然と思っていただけに、同期できないとわかってかなりガッカリしました。

■総評
実用性重視なら、正直WindowsMobile機の方がまだまだ上だと思います。デフォルトで物足りない部分も、そこをカバーするソフトが多数存在しますしね。
iPhoneは、まだまだこれからって感じですね。MobileMe経由でのネットワーク経由の同期をもっと充実させてくれればと思います。

do-whileでエラー遷移を制御する

 : PHP 2008/7/16 2:04

Blogger's Avatar

PHP4の最終リリースもせまり、もうPHP4を触る事はないだろうと思っていたのになぜかPHP4のコードを書いているhaltです。 今日はPHP4でのエラー遷移制御のバッドノウハウ…いやテクニックを紹介します。 通常、エラー発生時にメッセージを貯めていくコードを書くと、以下のような感じになり がちです。
class example1_controller
{
    function post()
    {  
        $comma_count = 3;
        $filename = __FILE__;
        if (file_exists($filename)) {
            if ($filedata = file_get_contents($filename)) {
                $csv_data = array();
                $rows = explode("\n", $filedata);
                array_shift($rows); //先頭行はタイトルなのでイラネ
                if (count($rows) < 1) {
                    $this->error->addError('parse error.');
                } else {
                    foreach ($rows as $row) {
                        $cols = explode(',', $row);
                        if (count($cols) != 4) {
                            $this->error->addError('invalid column count.');
                            break;
                        }
                        $csv_data[] = $cols;
                    }
                }
            } else {
                $this->error->addError('file read failed.');
            }
        } else {
            $this->error->addError('target file not found.');
        }

        // 途中でエラーがあってもここを通したい
        $this->render->setAttribute('error', $this->error);
        $this->render->setTemplate('test.tpl');
    }
}
「エラーがなければ次へ」というifを繰り返して先へ進むこのコードですがネストが深く なってしまいたいへん見辛いコードになっています。 PHP5なら、tryブロックで囲んでエラーが発生したらthrowする事で、ネストする事なしに 処理をとばせるのですが、PHP4にはtry-catch構文がないので仕方なくif文で…となると>>立ちまち汚いコードがうまれてしまいます。 そこで他の人はどうやっているのだろうと検索してみたところ、一回で抜けるようにした do-while文を使ってtryブロックのように囲み、問題が発生した時点でbreakする事によっ て擬似的にtry-catchのような遷移を実現するという方法を知りました。 あきらかにクセがあるので使うタイミングを良く考える必要がありそうですが、具体的に は以下のような感じです。
class example2_controller
{
    function post()
    {
        $comma_count = 3;
        $filename = __FILE__;

        do {
            if (!file_exists($filename)) {
                $this->error->addError('target file not found.');
                break;
            }

            $filedata = file_get_contents($filename);
            if ($filedata === false) {
                $this->error->addError('file read failed.');
                break;
            }

            $csv_data = array();
            $rows = explode("\n", $filedata);

            array_shift($rows); //先頭行はタイトルなのでイラネ
            if (count($rows) < 1) {
                $this->error->addError('parse error.');
                break;
            }

            foreach ($rows as $row) {
                $cols = explode(',', $row);
                if (count($cols) != 4) {
                    $this->error->addError('invalid column count.');
                    break;
                }
                $csv_data[] = $cols;
            }
        } while(0);

        // 途中でエラーがあってもここを通したい
        $this->render->setAttribute('error', $this->error);
        $this->render->setTemplate('test.tpl');
    }
}
do-whileブロック内では、エラー発生時点でbreakを使って処理を抜けている為、if文連>打のようにネストが深くなる事はありません。do-whileテクニックを知っている人が見れ ば非常に見易いでしょう。ただし、ネスト回数の少ないコードでこれを使うと意図が見え づらく、混乱の元になりそうです。 クラスなどを利用して擬似的にExceptionを扱う方法もあるようなのですがこのあたりで>調査を終わりにしたいと思います。こういった方法を使うよりもPHP5を使った方がずっと 幸せになれるからです。

Trayzerでタスクトレイ化

 : ツール 2008/7/10 17:56

Blogger's Avatar

satoです。
私は日常使っているOSはWindows Vistaなのですが、Web開発の環境としては不便なのでVMware PlayerでCentOSを入れて作業しています。

通常、CentOS側へはVMwareの画面を使わず、PuTTYでSSH接続しているのですが、そうするとVMwareのウィンドウを操作することはほとんどありません。
しかし、VMwareのウィンドウは最小化してもタスクバーに残るので邪魔になってしまいます。

そこで、Trayzerの出番です。
Trayzerは、Soft Mania様で配布されています。
簡単に言うと、何でもタスクトレイに格納できるようになるアプリケーションです。

使い方も簡単で、Trayzerの画面で、VMwareをタスクトレイに入れるように設定するだけで、



のようになります。

ほとんどの起動中アプリケーションに対して適用できるので、タスクバーをすっきりさせたい方は是非利用してみてください。

7月21日、PHPカンファレンス2008でXOOPSの話をします

Ryuji : イベント 2008/7/9 22:16

Blogger's Avatar

7月21日に大田区産業プラザ(PiO)にて、PHPカンファレンス2008が開催されます。

PHPカンファレンス2008

その中のセッションで45分ほど「PHPerのためのXOOPS活用法」というテーマで話をさせていただく機会をいただきました。

最近、XOOPSの導入を考えられている方向けにお話させてもらう機会は多かったのですが、PHPプログラマの皆さんにXOOPSの事を話す機会はありませんでした。
なので、どんな話をしようかまだ悩んでる最中なのですが、これからPHPプログラミングを始める方たちに、少しでも役立つようなお話ができればと思っています。

セッションが終わった後は、他のセッションも聞いてみようかなぁと思っていますので、会場で見かけたら気軽に声かけてくださいね。

Windows Mobileを便利にする11のフリーソフト

 : 技術全般 2008/7/8 3:07

Blogger's Avatar

haltです。
willcomから発売されているW-ZERO3などのPHSは、WindowsMobile搭載によって普通の電話
としての機能だけでなく、様々な機能を持たせる事ができます。
例えば、エクセルやワード、IEなどを使えるのはWindows Mobileならではでしょう。
また、マイクロソフトのソフトウェアだけでなく、サードパーティーが開発したソフトウ
ェアも自由にインストールすることができます。今回はW-ZERO3を便利にするフリーウェ>アについて紹介します。

* EasyDial
http://d.hatena.ne.jp/KOTETU/20051005/p1

アイコンをクリックするだけでダイヤルアップの接続、切断を行う事ができます。デフォ
ルトでは手動ダイヤルアップの手順が面倒なのでこのアプリケーションをインストールし
ておくと便利です。

* wifictrl
http://w03holic.seesaa.net/article/51166074.html

EasyDialと同じように無線LANのon/offをきりかえる事ができるアプリケーションです。

* PocketPutty
http://www2h.biglobe.ne.jp/~m-saeki/junk/PocketPuTTY.html

いざという時のSSH接続のために。自分はサーバにirssiをいれてPocketPuttyからsshして
IRCをみたりしてました。

* HttpAdjustClock
http://caviar.air-nifty.com/note/software/adjclock.html

HTTPを利用して時刻あわせをおこないます。W-ZERO3は自動時刻あわせがないようなので>これを使って定期的に時刻をあわせておくと良いでしょう。

* Criw0
http://www.fastwave.gr.jp/diarysrv/misuzilla/200612c.html

IRCクライアント。最新はcodereposに。

* OffisnailDate6
http://www.offisnail.info/archives/2007/07/18/offisnail_date_offisnail_note/

カレンダー、予定管理のアプリケーションです。デフォルトのものが貧弱なので。

* QDz
http://www.nicque.com/PQz/

軽量の連絡帳。起動が早く軽いのでデフォルトのものとおきかえて。

* PlaceEngine
http://www.placeengine.com/

無線LANの電波強度を元に現在位置をわりだすアプリケーション。ログをとるようにして>おくと自分があるいた位置がわかります。おもしろいです。

* POSync
http://www.geocities.jp/bjsoftab4/zero3.html

googleカレンダーと内蔵の予定表をsyncできるアプリケーションです。都度syncしなけれ
ばならないのが面倒ですが、googleカレンダーをつかっているなら是非。

* ctrlswapmini
http://hp.vector.co.jp/authors/VA004474/wince/wince.html

インストールする事で「ベル打ち」による入力が可能になります。最近の携帯電話はなぜ
かベル打ちできなくなってしまったのでベル打ち信者にはたまりません。

* YTaskMgr
http://www31.ocn.ne.jp/~yoshio2/ytaskmgr-1.html

画面回転ボタンにランチャー機能をわりあてるアプリケーション。これにEasyDialやwifictrlを登録するだけでかなり使いやすくなります。

Windows Mobile系の端末はカスタムしてようやく便利になるのでいろんなアプリケーションをインストールして試してみましょう。

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.