2008年4月25日(金曜日)

11連休

カテゴリー: - mik @ 19時35分06秒

おかげさまでRYUSは明日より5月6日までゴールデンウィーク休暇となります。

年初の計画としてゴールデンウィークまでの祝日をすべて出勤日としてそのかわり、11連休にしようということになっておりました。

これを目指して今までがんばってきましたので、皆ゆっくりと骨休めをする予定です。

連休前の振り返りではこの連休の予定は

・個人が作っているモジュールの更新
・勉強会参加
・ゲームの開発?
・楽天市場出品の手伝い
・ホームページの改装計画

など、個人個人は楽しみのためにすることですが皆あまり仕事から離れていないかも、と思いました(^^;。

5月7日からはまたばりばり働きます。連休明けのblogで何か成果が発表できればいいなと思っています。


2008年4月23日(水曜日)

Webで遅延証明書をもらう方法

カテゴリー: - halt @ 20時58分09秒

haltです。

皆さんはインターネット上から遅延証明書を発行してもらえるサービスがある事をご存知ですか?

JR東日本:遅延証明書

7:00〜9:00の間に、下記の路線において遅れが発生した場合を対象に、インターネットでの遅延証明書の発行を行います。
遅延証明書の掲載は当日の9:00すぎから、翌々日24:00まで行います。

とあるように、直近3日間の遅延した路線が表示され、証明書へのリンクをクリックし、印刷する事で遅延証明書を手に入れる事ができます。

遅延証明をもらい忘れた事のある方はブックマークしておく事をオススメします。


2008年4月22日(火曜日)

piCal用Googleカレンダープラグインの実験(2)

カテゴリー: - gusagi @ 23時52分08秒

大型連休を目の前に、何をしようか悩み中のgusagiです :-D
今日は、前回の記事の続きです。

前回は、piCalのカレンダー形式に合わせて、何日から何日までのイベントを取得するか、というところまでのサンプルコードを書かせて頂きました。
次にやることは、どのカレンダーのイベントを取得するか、です。
これは、Zend_Gdata_CalendarクラスのgetCalendarListFeedメソッドを利用するのが簡単です。

前回も書いたように、あるアカウントに共有されているカレンダーのイベントを取得したいので、まずはそのアカウントで認証を行うことが必要です。
(続き…)


2008年4月21日(月曜日)

Passenger(mod_rails)で簡単Rails環境構築

カテゴリー: - sato @ 18時50分17秒

satoです。今回はRubyを代表するフレームワークRuby On Railsの話です。
通常Ruby On Railsを動かす場合、mod_rubyやwebrickとかは使わず、fastcgiやmongrel(cluster)といった環境を用意することが多いです。しかしどちらも設定が煩雑で、簡単に利用できるとは言い難いものでした。
しかし最近、Passengerなるものが出てきて話題になっています。これは「a.k.a. mod_rails」の名の通り、Rails専用のApacheモジュールとなっています。
インストールも非常に簡単で、RubyGemsがインストールされている環境なら、

% gem install passenger
% passenger-install-apache2-module

で完了します。
passenger-install-apache2-moduleを実行すると、足りない環境や、Apacheの設定方法まで詳しく表示されるので、インストールに失敗して困るということもないと思います。
passenger-install-apache2-moduleが無事終了すると、

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server RailsRuby /usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails applications on Apache, without any further Ruby on Rails-specific configuration!

のようなメッセージが出ます。(環境によってパスは変わります)
ここに書いてある3行をそのままhttpd.confに追記し、Apacheを再起動すればインストール完了です。
httpd.confでDeny from allが記述されている場合は消すといいようです。
あとは普通にRailsアプリケーションを作成し、実行するだけです。DocumentRootがRailsのpublicであれば他の設定は不要です。(そうでない場合は少し設定が必要のようです)
開発用サーバとしての機能は備わっていないので、開発中はruby script/serverでWebrickを起動することになります。
Passengerの再起動は、touch tmp/restart.txtしておくと勝手に再起動するようです。

環境面で敷居の高かったRailsですが、これで手軽に導入できるようになるのでしょうか。
パフォーマンスは良好のようなので、安定性に期待したいところです。


2008年4月18日(金曜日)

ゲストをuser.phpにリダイレクトさせるpreload “ryusGuestRedirect”

カテゴリー: - Ryuji @ 15時20分35秒

以前、ログインが成功したら特定のページにリダイレクトするpreloadを公開しましたが、今度はゲストのときに必ずuser.phpにリダイレクトするpreloadをつくってみました。

イントラサイトでは最初にかならずログインをすることになってるケースがよくあります。

これをXOOPSで実現するために、サイト閉鎖機能を利用して対応することが結構あるのですが、これはメンテのための機能のため
・パスワード再発行もできない
・新規登録もできない
・見せたいページがあっても見せられない
と何かと不便です。

というわけで、ゲストだったらとりあえず user.php へリダイレクトするという preload を開発してみました。

ryusGuestRedirect.class.php

解凍したら、preload ディレクトリに放り込んでください。
user.php, lostpass.php, register.php だけはリダイレクトしないようにしてあります。
リダイレクトしないページの指定は


if(preg_match('/(user|lostpass|register).php$/', $_SERVER['SCRIPT_NAME'])){
  return ;
}

こんな感じで正規表現でやってますので、他にも見せたいページがあればここを調整してください。

管理画面をつけてモジュールにするともっと使い勝手が増すかもしれませんね。


2008年4月17日(木曜日)

Cube Night に参加しました

カテゴリー: - mik @ 23時04分45秒

昨日開かれた Cube Night に参加してきました。

磯谷商店tadashiさんによるXOOPSの歩みと今の状況、これからのXOOPSについての展望のお話

弊社天野のプリロードを中心とした簡単なカスタマイズ方法について

有名モジュール作者さんによる、モジュール紹介

など。お話の部分は1時間半ほどでしたがその後の懇親会が盛り上がり、結局11時まで会場で多くの人が色々な話題に盛り上がりました。

XOOPSのイベントは久しぶりでしたが、20人程度と少人数ながら熱気あふれる会場でこれからのXOOPSへの期待を感じました。

また意外なことに「うさぎにもできるXOOPS Cube入門♪」を知っている方が多くいらっしゃって、うれしいやら(あまり更新してなくて)面はゆいやらという気持ちになりました。もっとこちらもがんばりたいです。長い目で応援下さい。


2008年4月16日(水曜日)

Linuxの消費電力を下げる3つのコマンド

カテゴリー: - halt @ 18時44分48秒

haltです。世の中のノートパソコンのほとんどはWindows向けに開発されていたり、Linux自体があまりノートパソコンに強くない為、ノートパソコンにLinuxをインストールするとWindowsよりもバッテリーの消費が早くなりがちです。
そこで、以下の3つのコマンドを実行して消費電力を節約しましょう。

一つ目は、

sudo hal-disable-polling --device /dev/scd0

です。CD-ROMの自動認識を切る事で待機電力を減らします。

次は、

sudo echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

です。通常遅延書き込みのタイミングは5秒ですが、これを15秒にし、書き込みの回数を減らします。

最後は、

sudo iwpriv eth1 set_power 5

です。無線LANの動作を省電力モードに変更します。

ノートパソコンの場合、液晶ディスプレイの消費電力が大きいため、残念ながらどのコマンドも劇的な節電にはなりません。
とはいえ一分一秒でも長く起動していたいという時の為に覚えておいて損はないはずです。


2008年4月15日(火曜日)

piCal用Googleカレンダープラグインの実験

カテゴリー: - gusagi @ 18時17分04秒

最近、構成管理の重要性を改めて痛感しているgusagiです。
先日、piCalにGoogleカレンダーの予定を表示させる必要があったので、
piCal用プラグインを作ってみました。
まだ公開出来るレベルではないため、今日のところは触りだけ書かせて頂きます。

【要件】

  • Googleカレンダーのデータを取得出来ること
  • 複数人のデータを取得し、piCalに出力出来ること
  • 取得対象は、あるアカウントに共有されているカレンダー
  • データの登録や更新は不要

(続き…)


2008年4月14日(月曜日)

Propelを単体で使う

カテゴリー: - sato @ 18時09分58秒

PHP5専用のO/RマッパーにPropelというものがあります。
PHPのフレームワーク「symfony」の標準のO/Rマッパーとして有名ですが、単体で使っている人はあまり見かけない気がします。
今回は単体で使う方法を軽く説明しようと思います。

1.インストール
PEARコマンドでインストールするのが簡単です。

# pear channel-discover pear.phpdb.org
# pear install phpdb/propel_generator
# pear install phpdb/propel_runtime

なお、phingが必要なので、入っていない場合は事前に

# pear install channel://pear.phing.info/phing

で入れておいてください。
ログを記録する場合はLogが必要なので、

# pear install Log

で入れておいてください。(今回は不要です)
執筆時点でのPropelの安定バージョンは1.2です。

2.テーブル定義
PropelではXMLでテーブル構造を定義します。これにより、リレーションを含めたPHPオブジェクトが全て自動で生成されます。
今回は仮にbookmarkという簡単なアプリケーションにします(実際にアプリケーションは作成しません)。bookmarkというフォルダを作り、以下のファイルを作成します。
schema.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<database name="bookmark" defaultIdMethod="native">

<table name="bookmark" description="bookmark"> <column name="id" type="integer" primaryKey="true" autoIncrement="true" required="true" description="bookmark id"/> <column name="title" type="varchar" size="255" required="true" description="bookmark title"/> <column name="url" type="varchar" size="255" required="true" description="bookmark url"/> </table>

</database>

3.基本設定
ビルドに関する設定は以下のファイルで設定します。
build.properties

propel.project = bookmark
propel.database = mysql
propel.database.url = mysql://root@localhost/bookmark

また、これとは別に、実際のアプリケーションからの接続時の設定は以下のファイルを使用します。
runtime-conf.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
 <propel>
  <datasources default="bookmark">
   <datasource id="bookmark">
    <adapter>mysql</adapter>
    <connection>
     <phptype>mysql</phptype>
     <database>bookmark</database>
     <hostspec>localhost</hostspec>
     <username>root</username>
     <password></password>
    </connection>
   </datasource>
  </datasources>
 </propel>
</config>

このような仕様になっているのは、Propel自体がgeneratorとruntimeで分離しているからだと思われます。

ファイルを作成したら、mysqlでbookmarkという名前のデータベースを作成しておいてください。

4.オブジェクト作成

bookmarkフォルダで以下のコマンドを実行します。

% propel-gen .

するとbookmarkフォルダ以下に多数のファイルが生成されます。
実際にデータベースに投入するSQLファイルは、build/sql/schema.sqlになります。そのままmysqlに投げてもいいですが、

% propel-gen . insert-sql

でもデータベースに投入できます。(実際に行っていることは手動での挿入と同じだと思います)

propel-genの際に、

Execution of target "convert-props" failed for the following reason: /usr/share/pear/data/propel_generator/build-propel.xml:534:12: Cannot write parsed template: Unable to parse template ./templates/conf/Control.tpl: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead
[phingcall] /usr/share/pear/data/propel_generator/build-propel.xml:534:12: Cannot write parsed template: Unable to parse template ./templates/conf/Control.tpl: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead

のようなエラーが出た場合は、

% export TZ=Asia/Tokyo

としてください。

5.実際に使う

index.php

<?php

require_once('propel/Propel.php');

// $dir = dirname(__FILE__); // ルートフォルダであればこれでも取得できます $dir = '/path/to/bookmark'; set_include_path($dir.'/build/classes' . PATH_SEPARATOR . get_include_path());

Propel::init($dir.'/build/conf/bookmark-conf.php');

これが初期化部分になります。$dirは適宜変更してください。

require_once('bookmark/Bookmark.php');

使用するテーブルに対応するファイルを読み込みます。

この後に実際のコードを記述していきます。

・データを追加/保存する

$bookmark = new Bookmark();
$bookmark->setUrl('http://ryus.co.jp/');
$bookmark->setTitle('XOOPS Webサイト/イントラサイト制作、XOOPS モジュール開発/カスタマイズを専門に行っています。 - XOOPS専門-株式会社RYUS');
$bookmark->save();

これでINSERTになります。DBから取得したデータであればUPDATEになります。両者を特に気にする必要はありません。

・データを読み込む

$bookmark = BookmarkPeer::retrieveByPk(1);
$url = $bookmark->getUrl();
$title = $bookmark->getTitle();
echo $url,$title,PHP_EOL;

読み込み系は"テーブル名Peer"クラスで行います。
retrieveByPkは、主キーからデータを取得します。
# 表示が化ける可能性があるので、適当な文字コードで表示してください。

・複数データ取得

$bookmarks = BookmarkPeer::doSelect(new Criteria());
foreach($bookmarks as $bookmark) {
  $url = $bookmark->getUrl();
  $title = $bookmark->getTitle();
  echo $url,$title,PHP_EOL;
}

doSelectは条件付きで複数レコード取得します。引数のCriteriaは条件を指定するクラスなのですが、今回は無指定なので単にnewしたものをそのまま渡しています。
条件を指定する例としては、

$c = new Criteria();
$c->add(BookmarkPeer::URL, 'http://ryus.co.jp/');
$bookmarks = BookmarkPeer::doSelect($c);

のような感じになります。Criteriaの条件設定は細かいところまで手が届くようになっています。

6.まとめ
詳しくは公式のドキュメントが充実しているので、そちらを参照してください。
次期バージョンであるPropel1.3(symfony1.1で載る予定)ではcreoleからPDOになり、更なる機能強化が期待できます。
PHPのO/Rマッパーは他にもS2Dao.PHP5Doctrineなど多数あるので、好みのものを利用するのがいいと思います。


2008年4月11日(金曜日)

がんばれ社長!今日のポイント

カテゴリー: - mik @ 10時06分01秒

メールマガジン がんばれ社長!今日のポイント
http://archive.mag2.com/0000041796/20080409131604000.html

このメールマガジンは今定期的に見ているものの中で一番古くから取っているものです。長い間見ているだけでなく、やはり一番参考になるなぁと思うメルマガだと思っているのでご紹介します。

上のリンクで見られる4月10日号に坂本龍馬の

「何でも思い切ってやってみることですよ。どっちに転んだって人間、野辺の石ころ同様骨となって一生を終えるのだから。」

という言葉がありました。うーん、いいこと言ったなぁ坂本龍馬、と感心しましたがさらに武沢さん(メルマガの著者)はその言葉を元に「結社」の重要性を説いています。その説の中でさらにうなったのがこの一節でした。


●「志半ばにして倒れる」などの言い方をするが、そもそも「志」と
は、自分が存命中に叶うような大きさのものであってはならないのだ
ろう。

だったら最初から、"志半ばにして倒れるものだ"と腹をくくっておこ
うではないか。
志半ばで倒れるからこそ、それを受け継いでくれる仲間が必要になる。
その仲間のことを同志という。

コペルニクス的展開、というか新しい発想というか!志半ばにして倒れるを良しとするとは、と感心しました。

このように名言を教えてくれたり、それを元にした新しい発想を開示してくれたりするこのメルマガはほんと面白いです。

オフ会もあり、何度も武沢さんにお会いしてますがメルマガから受ける厳しい印象とは違ったざっくばらんな方なのでお酒を飲んで話すことを楽しみにしてます。

まだ取っていられない方に是非お勧めします!


新しい道具は、それまでのやり方を一変させるパワーがある。

カテゴリー: - Ryuji @ 00時58分30秒

最近、便利な道具が新たに発売されたりはしていないかが気になるようになりました。

というのも、数年ぶりにデジカメを購入したら、斜め補正やモノクロ撮影モードなど、ホワイトボードに書いたことを記録するのに便利な機能がいくつかついていて驚いたり、ドキュメントスキャナで紙の電子化が拍子抜けするほど簡単になっていて驚くということが続いているからです。

ホワイトボードに書いたものを簡単に記録できる道具(この場合デジカメ)を知らなければホワイトボードにミーティングの結論を書くのも躊躇するでしょう。
紙にかいたことの電子化が簡単だと知らなければ、何かを書き始めるときに「紙にメモするか、それとも最初からPCを使って作業するか。。」と迷うことも増えるでしょう(実際よくありました)

ところが何らかの道具によって、それまでちょっと気になっていて問題がサックリ解決してしまうことがあるわけです。

まだ自分が知らないだけで便利な道具やサービスがないかアンテナを張っておきたいと思います。

#アンテナを張っておくにはRSSリーダは便利ですねぇ。うまくやり方を工夫してそうだなぁと思える人のBLOGを見てるとけっこうヒントを得られるものです。


2008年4月10日(木曜日)

メールを使ったネットサービスで毎日の生活をちょっと便利に

カテゴリー: - halt @ 02時25分51秒

haltです。皆さんは普段どんなWebサービスを使っていますか?
RSSリーダーやWebメーラーなどパソコンでの情報収集をサポートするサービスはたくさんありますが、今日はパソコンから離れた時に使える携帯メール向けサービスを紹介します。

アメール
アメールは雨の日になるとメールでお知らせしてくれるサービスです。毎日天気予報をメールで受信するのは面倒ですが、雨の日だけメールが来るので会社に行く前にメールチェックしておけば、傘を忘れずに済みます。

スケジュール管理ツール - rpad.jp
R*PADは、特定のメールアドレスに指定日と、やるべき事を書いてメールすると、指定日当日にメールでお知らせしてくれるリマインダーサービスです。
繰り返し設定もできるので、誰かの誕生日や、ドメインの失効日を登録しておくのも良いかもしれません。

ニワンゴ
ニワンゴは、コマンドをメールで送信する事でそのコマンドの実行結果を返してくれるサービスです。
例えば、

英和 global

と送るとglobalという英単語を日本語にしてくれます。辞書機能は、和英、英和、国語、事典などがあります。
他にも、地図を調べたり、食事できる場所を調べたり、とにかくたくさんの事ができます。コマンドについてはコマンド一覧を参照してください。

パソコンをどこにでも持ち歩くのは大変な上に、起動や終了には時間がかかります。携帯のメール機能を利用して毎日の生活をちょっとだけ便利にしてみませんか?


2008年4月8日(火曜日)

知らなかったTortoiseSVNの便利な機能

カテゴリー: - gusagi @ 14時27分19秒

暖かくなったかと思えば、昨日からの雨で気温が下がったりといった気候で、体調管理に不安を覚えているgusagiです。

ファイルのリリース作業を行う際に、ある時点から現在までに変更したファイルを取得したい、なんてことがあったりします。
今までは、"svn log"でログを確認しては、変更のあったファイルを個別に"svn export"していたんですが、これだとミスが発生する可能性が高いため、調べてみました。
そこで、初めて知ったのですが、実はTortoiseSVNにはリビジョン間の差分だけ取得するという、まさに欲しい機能が存在していました :oops:

詳細は、こちらを参照して頂けば判ると思うのですが、SVNのログを表示して、差分を取得したいリビジョン2つを選択した状態で右クリックすると、右クリックメニューの中に、リビジョン比較が存在するので、それを実行します。
リビジョン比較では、差分ファイルの一覧が表示されますので、後はそのファイルを選択してエクスポートすれば、差分ファイルだけの取得が完了です。
今まで、チマチマと時間を掛けてやっていた作業が、1分も掛からないで完了してしまいました :shock:

TortoiseSVNは、結構長い間使っているのですが、こんな便利な機能があることに本日初めて気付きました。
TortoiseSVN以外にも、実は知らないだけで便利な機能がありそうですし、普段使っているアプリケーションについて、改めて使い倒してみるというのも面白いかも知れませんね。


2008年4月7日(月曜日)

Smartyのテンプレートの文字列内変数を拡張する

カテゴリー: - sato @ 17時20分49秒

satoです。
XOOPSでは、テンプレートエンジンにSmartyを使うことになります。
このSmartyは便利なのですが、若干使いづらい部分もあったりまします。

まず前提として、Smartyの文字列定数中に変数を混ぜたい場合、バッククォート(`)で囲むとそれが変数として解釈されるようになっています。
例えば、

{"私は`$name`です。"}

として、$nameに"sato"という文字列がassignされていると、

私はsatoです。

と表示されます。

しかし、このバッククォート内にメンバ関数を指定すると、解釈がうまくいかないようです。

例えば、

私は{$my->show('name')}です。

みたいなものは可能なのですが、

{"私は`$my->show('name')`です"}

とすると、

私は`Object id #2->show('name')`です。

のように、$myの部分だけ変数として解釈され、それ以外は普通の文字列として出力されてしまいます。
通常、こういう場合は、

{assign var=name value=$my->show('name')}
{"私は`$name`です"}

のように1段階assignを追加することになり、若干手間がかかります。
今回はこれの簡易的な対応方法を試してみました。

Smartyのassignされた変数というのは、実際にそのスコープに存在するものではなく、Smartyクラスの_tpl_varsメンバ変数に格納されています。このため、テンプレート側で記述した変数は、Smartyの構文解析を通してSmartyクラスのメンバ変数になるように置換処理が入ります。具体的には生成されたテンプレートキャッシュを見ればわかると思います。
そのため、Smartyでは正規表現を利用して構文解析を行っているのですが、この正規表現に手を入れることで、上記の対応が可能になります。

バッククォート内を解釈しているのは、Smarty_Compiler#_expand_quoted_textで、変数の解析をしている正規表現は_obj_ext_regexpに格納されています。
このため、Smarty_Compilerに手を入れればいいのですが、Smarty_CompilerはSmarty#_compile_sourceで生成され、すぐ破棄されるので、途中からアクセスすることはできません。Smarty_Compiler.class.phpを直接書き換えればいいという話もありますが、それでは汚くなってしまいます。
幸い、Smartyクラスが生成するSmarty_Compilerクラスは別のものに変更ができるようになっています。Smartyクラスのcompiler_fileとcompiler_classにそれぞれ読み込むファイルとクラス名が格納されているので、それを自前のものに変更します。

具体的にやってみます。
以下のファイルを作成します。パス等は適宜変更してください。
MySmartyCompiler.class.php


	

require 'Smarty-2.6.19/libs/Smarty_Compiler.class.php';

class MySmartyCompiler extends Smarty_Compiler { function MySmartyCompiler() { parent::Smarty_Compiler();

$this->_obj_ext_regexp = str_replace(’(?:[$?[w.]+])*’, ‘(?:[($?[w.]+)])*(?:(($?[w"’.]+)))*’, $this->_obj_ext_regexp); } }

呼び出し側を作成します。
index.php


	

require 'Smarty-2.6.19/libs/Smarty.class.php';

class myClass {

function show($var) { return 'sato'; }

}

$smarty = new Smarty(); $smarty->compiler_file = ‘MySmartyCompiler.class.php’; $smarty->compiler_class = ‘MySmartyCompiler’;

$smarty->template_dir = ‘templates’; $smarty->compile_dir = ‘templates_c’; $smarty->config_dir = ‘config’; $smarty->cache_dir = ‘cache’; $smarty->plugins_dir = ‘plugins’;

$smarty->assign(’my’, new myClass()); $smarty->display(’index.tpl’);

テンプレートを作成します。
templates/index.tpl

<html>
<body>

{"私は`$my->show('name')`です。"}

</body> </html>

実行すると、

私はsatoです。

のように正常に表示されているのが確認できると思います。
全てのパターンでテストを行っているわけではないので、不具合があったらコメント欄等でよろしくお願いします。

XOOPSからこれを利用する場合は、各RenderSystem内に存在するSmartyオブジェクトを取得して書き換える必要があります。
モジュールの場合は通常はLegacy_RenderSystemなので、

    $root =& XCube_Root::getSingleton();
    $renderSystem = $root->mContext->mModule->getRenderSystem();
    $renderSystem->mXoopsTpl->compiler_file = 'MySmartyCompiler.class.php';
    $renderSystem->mXoopsTpl->compiler_class = 'MySmartyCompiler';

のような感じで対応が可能です。(表示処理の実行前に記述してください)
管理画面はLegacy_AdminRenderSystemなので、mXoopsTplではなくmSmartyを参照することになります。

しかしこの方法でも、

{"私は`$pattern[$foo->bar()]`です"}

のようなパターンには対応できません。このパターンに対応するには_expand_quoted_text自体を大幅に改変する必要がありそうです。興味のある方は挑戦してみてください。


2008年4月4日(金曜日)

ドキュメントスキャナ便利です!

カテゴリー: - Ryuji @ 16時25分41秒

開発をするときに、お客さんから開発に関係する資料をいただくことが多いのですが、ときどき紙の資料しかないということがあります。

紙資料しかないと、スタッフ間で資料を共有するにしてもコピーするか資料を回し読みするしかなく「面倒だなぁ」と困っていました。

そんな話をオフィスでしていたら当社haltよりドキュメントスキャナをすすめられたので、amazonで早速注文してみました。

FUJITSU ScanSnap(スキャンスナップ) S510  FI-S510 FUJITSU ScanSnap(スキャンスナップ) S510 FI-S510


Amazonで詳しく見る
by G-Tools

使ってみた感想ですが、これめっちゃ便利ですよ!
使い方が簡単&スキャン速度が速い!
セットアップはちょっと面倒ですが、セットアップさえ終わってしまえば、スキャナに原稿をセットしてスキャンボタンを押すだけ。
これだけで、あったという間にPDFとして保存されます。

今まで紙資料の保管や共有をどうしようかと悩んでいたのがアホらしくなるほどの簡単さ。。。
OCRで認識されたテキストもPDFファイルに埋め込まれるのでMac のspotlightやGoogleデスクトップで検索もできるのでファイルを探すのも楽そうです。

あまりにも楽にPDF化できるので、オフィスだけでなく自宅用にもひとつ購入しようかと思ってます。


2008年4月3日(木曜日)

4月になりましたね

カテゴリー: - mik @ 22時53分56秒

 4月になると新年度を迎えるところ多かったり、新人さんが入ってきたりで会社にとって4月はお正月みたいな気分になるところがありますね。

 まだ若かりし会社員だった頃、普段はジーンズで会社に来る同僚が何人もスーツでやってきたのを見て初めてそういうことを感じました。よく見ると街にはぴかぴかのスーツ姿で集団で道幅いっぱいに歩く若者が多く、あーまたこの季節が来たのだなと思いました。ちょうど今年の4月1日に大勢の人が集まる会議をしたときに、髪の毛をきっちりとカットしてきた人が何人もいたのでそのことを思い出しました。昔も今も4月に改まった気持ちになるのは変わらないようです。

 またこの時期、新体制というものを始めるところが多いようで、RYUS的に(というか天野的に)残念だったのは会社の1Fにあるレストランがランチ時間禁煙になったことのようです。良いこととしてはオフィスのトイレに置いてあるペーパータオル入れが新しくなり、大変使いやすくなったことです。

 RYUS的には先日新しくsatoさんも加わり、更にスケールアップしました。これからもどんどんパワーアップして更にみなさんのお役に立てるように精進していきます♪


NetCommonsを使ってみよう

カテゴリー: - halt @ 02時11分17秒

haltです。今日は話題のCMS、NetCommonsについて紹介します.
NetCommonsは、公式サイトにあるように、CMS(Contents Management System)とLMS(Learning Management System)とグループウェアを統合したコミュニティウェアです。
NetCommonsを利用する事でeラーニングサイトや、オフィス用グループウシェアを簡単に構築する事ができます。
個人的には最初から用意されているモジュールの数がXoopsよりも圧倒的に多い分、初心者に優しいように感じました。

NetCommonsのバージョン1系列はXOOPSから派生している為、Xoopsを利用した事がある人なら簡単にインストールする事ができます。今回はすでにXoopsを運用しているサーバの上にNetCommons-1.1.3をインストールしてみました。
以下はインストール直後の画面です。最初から様々な機能が利用できるようになっています。

NetCommons

インストールは、ダウンロードしたファイルを解凍し、htmlディレクトリにアクセスするだけです。Xoopsと同じように高度なインストールウィザードが搭載されている為、Web上の画面を見ながら設定していくだけで簡単にインストールできます。
皆さんも是非チャレンジしてみてください。


2008年4月1日(火曜日)

iモードIDについて調べてみました

カテゴリー: - gusagi @ 23時54分01秒

4/1で新卒っぽいスーツ姿を沢山見かけ、何となく懐かしさを覚えたgusagiです。
RYUSでも、haltさんやsatoさんという新しいメンバーが増え、ブログに技術ネタを相次いで投稿してくれましたし、私もちょっと書いてみようと思います。

3/31にiモードIDの仕様が公開されたので、少し調べてみました。
あちこちで書かれているように、SSL通信時に取得できないとか、guidって変数名を使ってるシステムはどうするんだとか、色々と問題があるのは知っていたのですが、個人的に一番「なんじゃこりゃ」と思ったのは、こちらにあるformでの送出パターン。
携帯対応とかやる際は、さらに注意すべき点(というか、バッドノウハウ)が増えた気がするのは私だけでしょうか・・・ :neutral:


16 queries. 0.058 sec.
Powered by WordPress Module based on WordPress ME & WordPress

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

Copyright(c) 2012 RYUS.All Rights Reserved.