スタッフブログ

  • 最新配信
  • RSS

オープンソースカンファレンス

 : イベント 2008/12/8 20:48

Blogger's Avatar

今回はOSCについて書いて見ようと思います。

OSC オープンソースカンファレンス
http://www.ospn.jp/
オープンソースカンファレンスは「オープンソースに関する最新情報の提供」という事をうたったイベントで、オープンソースコミュニティ、企業・団体による展示が無料で観られます。セミナーなどもあります。そして全国各地で開催されています。

自分は東京で行われたOSCに何度かと、今年は8月に行われた名古屋のOSCに参加しました。自分はデザイナーなのですが技術よりのイベントではあるのですが、雰囲気や内容的にも面白くできる限り参加したいと思っています。
東京で開催される場合は地理的に全然問題はないのですが、地方で開催されるOSCは中々行けなかったりします。
9月に行われた島根のOSCも参加したかったのですが、諸処の問題で行けませんでした。

来年のOSCの予定には今年と同じく島根や沖縄など各地でのOSCの予定があるようなので、プチ旅行もかねて何回か参加できればと思っています。特に沖縄に行ったことがないので、気になります。

あと、OSC関係の活動ですと自分はOSC応援バナーなどというモノを作ったりしています。
OSC2008島根応援バナー登場! | XOOPS Cube - XOOPS Cube
(こんなのです↓)


(続く、Tokyo/Fall、Okinawaと作り続けていたのですが、福岡は気がつくともう開催前の前夜祭!という時間になってしまって、断念しました・・・)

Gearsを使ってフォームデータを保存する

 : 技術全般 2008/12/5 20:35

Blogger's Avatar

haltです.

唐突ですが,Webアプリケーションが抱えている致命的な問題点として,「オフラインになると,アプリケーションとして全く機能しなくなる」という点があると思います.
例えば,ログインが必要な掲示板やグループウェアに書き込みをしている途中に一度オフラインになってしまうと,投稿しようとしたデータが反映されずログイン画面に戻されてしまう事がよくあります.

Googleが提供するGearsというブラウザの拡張機能を利用すると,JavaScriptからユーザのハードディスクにデータを保存できるようになるので,たとえ途中で接続が途切れても,データを一時的に保存しておいて,後で送信する.というような事が可能になります.

以下はデータを保存する最低限のサンプルです.引数に指定したデータを保存します.

<script type="text/javascript" src="gears_init.js"></script>
<script type="text/javascript">
function save(text) {
  var db = google.gears.factory.create('beta.database');
  db.open('database-test');
  db.execute('create table if not exists Test' +
      ' (Phrase text, Timestamp int)');
  db.execute('insert into Test values (?, ?)', [text, new Date().getTime()]);
}
</script>

Gearsが公開されていから随分たつのにインストールする手間が必要なせいか,積極的に使われている事例を見たことがありませんが,今後はこういったオフラインでも使えるような仕組みが少しずつ増えていくのかもしれません.

プログラマ同士の会話

naoto : 技術全般 2008/12/4 19:16

Blogger's Avatar

なおとです。

今日社内で、興味深い「井戸端談義」がありました。 タブ談義とコーディング規約についてという、プログラマには定番の話題です。 内容に詳しく触れることは致しませんが、私としても有意義でした。

私は与太話として、XOOPS Cube Legacyやホダ塾ディストリビューションでは、パッケージに収録されたファイルの改行コードが、「CR+LF」になってる(ことが多い)と話しました。 すると、誰ということもないのですが社内の熟練プログラマでも、そのことに気づいていなかった(意識していなかった)というのです。

内容はどうあれ、こういったコミュニケーションはとても大切だなと再認識しました

MySQLのストアドプロシージャの使い方

 : 技術全般 2008/12/3 15:52

Blogger's Avatar

satoです。
今回は普段あまり使われないと思うMySQLのストアドプロシージャについて解説したいと思います。

MySQL5.0以降ではストアドプロシージャが使えるようになっています。
通常MySQLでストアドを使うことはないとは思いますが、一連の、CREATE TABLE等とセットでDB処理を書く時などは便利です。

ストアドプロシージャは各RDBMSで独自に実装していることが多いのですが、MySQLは標準SQL準拠で実装されており、それなりに汎用性があるものになっています。とは言っても、PL/SQLとは違うので、どこで汎用的かと言われると難しいです。
PL/SQLとは違いがありますが、大枠としては似ている部分は多いと思います。

■ストアドプロシージャの作成
ストアドプロシージャの作成にはCREATE PROCEDURE命令を使います。
DELIMITER //
CREATE PROCEDURE test_proc(in f int)
BEGIN
  INSERT INTO test_table(val) VALUES(f);
END;
//
DELIMITER ;

DELIMITER命令は、文の区切り文字(デリミタ)を変更します。
わかりづらいのですが、CREATE PROCEDURE命令は、「CREATE PROCEDURE」から「END;//」までが1つの文になり、その中で実行する命令を書くので、例えば、
CREATE PROCEDURE test_proc(in f int)
BEGIN
  INSERT INTO test_table(val) VALUES(f);
END;
;

と、DELIMITER無しにすると、「CREATE PROCEDURE」が「VALUES(f);」で終了してしまい、エラーになってしまいます。これを回避するために一時的にデリミタを//にしています。

これで定義した後に、
CALL test_proc(1);

とすると、INSERT INTOが実行されるのがわかると思います。

■ストアドプロシージャの削除
削除にはDROP PROCEDURE文を使います。DROP TABLE等と同様に、IF EXISTSを付けることができるので、CREATEの前に書いておくと便利かと思われます。

■ストアドファンクション
戻り値が無いものをプロシージャと呼ぶのに対し、戻り値があるものはファンクションと呼びます。
DELIMITER //
CREATE FUNCTION test_func(f int) RETURNS int DETERMINISTIC
BEGIN
  RETURN (f + 2);
END;
//
DELIMITER ;

基本的にはプロシージャと同様ですが、いくつか違う点があります。

・引数にinが不要
プロシージャの引数の先頭のinは、「この値は入力値です」というのを指示するためのもので、プロシージャの場合はoutという指定もできます。これはPHPで言うところのリファレンス渡しに近いものになります。
ファンクションの場合はRETURNで戻り値を指定するので不要です。

・戻り値の型の指定
CREATE FUNCTIONの引数リストの後に、「RETURNS int」というのがあります。ここで戻り値の型を指定します。(この場合はint)

・DETERMINISTIC
これを付けないで定義しようとすると、
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
のようなエラーが発生する場合があります。
入力値が同じ場合に出力値が同じ場合はDETERMINISTIC、そうでない場合はNOT DETERMINISTICを指定します。バイナリログの記録に関わるようです。
SET GLOBAL log_bin_trust_function_creators = 1;
で回避することもできます。

ファンクションはSELECTで呼び出します。
test@localhost[testdb]> select test_func(1);
+--------------+
| test_func(1) |
+--------------+
|            3 |
+--------------+


■変数の定義
DROP FUNCTION IF EXISTS test_func2;
DELIMITER //
CREATE FUNCTION test_func2(f int) RETURNS int DETERMINISTIC
BEGIN
  DECLARE ret int;
  SET ret = f + 2;
  RETURN ret;
END;
//
DELIMITER ;

内部で使う変数の定義にはDECLARE文を使います。
DECLARE文は全てBEGINの直後に書く必要があります。ルーチンの途中に書くことはできません。
...
BEGIN
  DECLARE ret int;
  SET ret = f + 2;
  DECLARE ret2 int;
...

のようなのはエラーになります。
変数に値を代入するにはSET文を使います。

■カーソル
ストアドでよく使う処理として、「SELECTの結果を1行毎に何か処理したい」ということだと思います。PHPのforeach的なものです。
これを実現するにはカーソルというものを使います。
DROP TABLE IF EXISTS test_table;
CREATE TABLE test_table ( a int, b int, c int);
INSERT INTO test_table(a, b, c) VALUES(1, 2, 0);
INSERT INTO test_table(a, b, c) VALUES(2, 3, 0);
INSERT INTO test_table(a, b, c) VALUES(3, 4, 0);

DROP PROCEDURE IF EXISTS test_proc2;

DELIMITER //
CREATE PROCEDURE test_proc2()
BEGIN
    DECLARE eod tinyint;
    DECLARE in_a, in_b int;
    DECLARE out_c int;
    DECLARE cr1 cursor FOR SELECT a, b FROM test_table;
    DECLARE continue handler FOR not found SET eod = 1;
    SET eod = 0;

    OPEN cr1;
    FETCH cr1 INTO in_a, in_b;
    WHILE eod = 0 DO
        SET out_c = in_a * in_b;
        UPDATE test_table SET c = out_c WHERE a = in_a AND b = in_b;

        FETCH cr1 INTO in_a, in_b;
    END WHILE;
    CLOSE cr1;
END
//
DELIMITER ;

カーソルは、SELECTの戻り値のポインタ的なもので、cursor型として定義します。
「DECLARE cr1 cursor FOR」の後に、そのカーソルで呼び出したいSQLを記述します。
「DECLARE continue handler FOR not found SET eod = 1;」は、カーソル呼び出しの際に、データが存在しなくなったら変数eodに1をセットするというhandlerを定義します。これでSELECTが終了したかどうかを判定します。
カーソルのDECLAREは通常変数のDECLAREの後に定義する必要があります。
    DECLARE cr1 cursor FOR SELECT a, b FROM test_table;
    DECLARE out_c int;

のようにしてしまうと、
ERROR 1337 (42000): Variable or condition declaration after cursor or handler declaration

というエラーになります。

後はカーソルをOPENし、FETCHで値を取得するとINTOで指定した変数に代入され、それを処理します。
これを実行すると、

test@localhost[testdb]> SELECT * FROM test_table;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 |    2 |    0 |
|    2 |    3 |    0 |
|    3 |    4 |    0 |
+------+------+------+
3 rows in set (0.01 sec)

test@localhost[testdb]> CALL test_proc2();
Query OK, 1 row affected (0.01 sec)

test@localhost[testdb]> SELECT * FROM test_table;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 |    2 |    2 |
|    2 |    3 |    6 |
|    3 |    4 |   12 |
+------+------+------+
3 rows in set (0.00 sec)

cが反映されているのがわかると思います。


その他、詳しくはMySQLのリファレンスマニュアルを参照してください。

絵文字のユニコード符号化

 : 技術全般 2008/12/2 18:04

Blogger's Avatar

初めまして、またはお久し振りです。
gusagiです。
今月から、縁あってRYUSに戻ってきました。
以前からご存じの方、初めましての方、以後よろしくお願いします。

さて、以前から携帯関連であれこれやっている私ですが、最近気になっている話題があります。
それは、「絵文字のユニコード符号化」の話題です。


すでにご存じの方もいると思いますが、日本の携帯絵文字についてはある程度まではユニコードで一元化することができます。
外字領域にあたる部分を、それぞれの携帯キャリアが利用しており、大部分は重複しない状態のようです。

上記をご存じの方は、「何で今更ユニコード符号化に気になってるの?」と思われるかも知れませんが、先日Google Japanのブログにある記事が掲載されました。
こちらの記事ですが、今の絵文字は(私の知る限りでは)キャリアごとに使用するコードも表示方法も異なっていたりします。
それを、ゲートウェイで変換したり、サーバのプログラムで使い分けたりとしている訳です。
ただ、プログラムで使い分ける方法については、多くの開発者が積み重ねていったノウハウを元にした結果ではあるものの、ルールとして定められている訳ではないので、キャリアが仕様変更を行った場合に動作が保証されているとはいえません。

今回の記事で一番興味深い点は、このノウハウの部分をオープンソースプロジェクトとして公開したというものです。
プロジェクトのサイトはこちらになります。
先日公開されたばかりで、どのような展開になるかわかりませんが、情報は随時チェックして、携帯対応モジュールにも反映していきたいと思います。

ということで(?)、今後ともよろしくお願いします

WARPを使った、動く提案書の作り方

Ryuji : XOOPS » 総合的な情報 2008/12/2 2:27

Blogger's Avatar

先日、当社haltがこのBLOGに書いた WARP ですが、誰でも簡単にWebアプリケーションを試せるだけでなく、Web屋さん、システム屋さんにとっては、実際に動いてクライアントさんにどんな感じで使えるのかを体験してもらえる、「動く提案書」としての使い方もあります。

動く提案書の作り方ですが、例えば XOOPS Cube でのサイト構築を提案するとしたら、

Step1.WARPをダウンロード
WARPのダウンロードページに、XOOPS Cube Legacy 2.1.6インストール済みのパッケージ(WARP_XC216_20081124.zip)がありますので、これをダウンロードするとよいでしょう。

WARPダウンロード

Step2.モジュールのインストールと設定
提案予定のモジュールを別途ダウンロードしてきて、WARP上の XOOPS Cube にインストールしましょう。
モジュールを選ぶときは、先日このBLOGに書いた「XOOPSモジュールを選ぶときの3つのポイント+1」も参考にしてください。

モジュールをインストールしたら、実験的にサイトをつくる気持ちで、設定を行ったり、ダミーの記事も登録しちゃいます。

Step3.WARPを圧縮しなおす
ある程度クライアントさんに見てもらえる程度までできあがったら、WARPのフォルダを圧縮しましょう。
インストールするモジュールにもよりますが、圧縮しても数十Mバイトのファイルになると思います。

Step4.クライアントに渡す
圧縮してもファイルサイズが非常に大きいので、メールに添付はやめましょうね。
宅ファイル便で送るなど、どこからかダウンロードしてもらうか、USBメモリやCD-Rにコピーして渡しましょう。

クライアントさんに渡したファイルをクライアントさんのところで、解凍してもらい、あなたがWARPを起動したときと同様にServer_start.batをダブルクリックしてもらえば、Step3で圧縮する直前と同じサイトをクライアントさんも見ることが出来ます。

これで、実際にあれこれ試せる、触れる、動く提案書をお客さんに見せることが可能です。

ちなみに、RYUSで作成した WARP with XOOPS Cube for Corporateも、この手順で作成しています。

XOOPSセミナー

mik : イベント 2008/11/29 14:07

Blogger's Avatar

RYUSでは来年1月にXOOPSに関するセミナーをしようと思っています。

その勉強もかねて、名古屋で行われた「WEB制作者のためのXOOPSセミナー」に参加してきました。

主催は名古屋でXOOPS開発で有名な株式会社Xacroさん。

XOOPSと他のCMSとの比較、XOOPSの機能などについての詳細な説明が1時間。その後の質疑応答が30分以上続く熱気あふれるセミナーでした。

会場は30人がぎりぎりという感じでしたが、補助椅子も出してという状況になるほど沢山の人が参加していました。

参加してみて思ったのは準備に大変時間をかけたのだろうな、ということです。パワーポイント1枚の説明をするのに、そこに書かれていないことも相当説明してわかりやすいものとなっていました。

さて、RYUSでのセミナー、まだ詳細が決まっていません。これからアンケートなどを実施してよりニーズの高いものをと考えているのでその際は皆様是非ご協力をお願いします♪

XOOPSのTips その1「ユーザーメニューブロックにアバター表示!」

 : XOOPS » TIPS小ネタ 2008/11/27 9:58

Blogger's Avatar

argonです。

今回はXOOPSの簡単にできるTipsについて書いてみようと思います。

[内容]
ユーザーメニューブロックにユーザのアバターを表示させる。

[効用]
SNS風な感じにログインしていることが一目でわかりよりパーソナライズ
されたCMSを雰囲気を演出できる。
管理者や開発社は複数のアカウントを使用している人もどのアカウントで
ログインしているか一目でわかって便利。

[やり方]
テンプレートファイルを編集します。
編集するテンプレートは互換モジュールのlegacy_block_usermenu.html
になります。このにファイルにアバターを表示するために1行追加します。
以下の例ですと4行目になります。

<table cellspacing="0">
  <tr>
    <td id="usermenu">
      <img src="<{$block.uid|xoops_user_avatarize}>" />
      <a class="menuTop" href="<{$xoops_url}>/user.php">

(必要な部分だけ抜粋。実際のテンプレートファイルはもうちょっと長いです)

以上のように1行追加するだけで作業は簡単です。
ですが、わりと実用的なTipsではないかなと思います。

ブログのタイトルで「その1」としましたが、持ちネタが少ないので、次に何か良いネタが
できたら「その2」を書こうと思いますので、よろしくお願いします。

[謝辞]
suinさん貴重なアドバイスありがとうございました。

誰でも簡単にWebアプリが試せるWARPの紹介

 : ツール 2008/11/26 22:14

Blogger's Avatar

haltです.

Webアプリケーションは,ブラウザさえあれば,専用のソフトをインストールしなくても,パソコンや様々な種類のOSで利用できます.

一方で,ブラウザとは別にWebサーバが必要になり,これを用意するのは初心者には困難です.興味のあるWebアプリケーションをみつけても,使えるようになるには,自分でサーバを用意してセットアップしてインストールする必要があるので,普通の人にはコストが大きすぎます.

そういった問題を解決するプロジェクトがWARPです.

http://warp.ws/

Windowsを利用している人なら,上記サイトからファイルをダウンロードして,解凍.Server_start.batをダブルクリックするだけで,自分のパソコンの中でWebアプリケーションを動かす事ができます.

こういった「気軽に試せる」という内容のソフトは昔からあったのですが,これまでのものは,インストール作業が発生するので面倒でした.また「10分くらい使ってみて,ダメだったら使わない.」ような人の場合,そもそもインストールとアンインストールで10分以上かかるので,手を出す気になれませんでした.

WARPは,インストール作業なしでダブルクリックだけで即座に試す事ができます.アンインストールもフォルダを削除するだけです.

これまで「XOOPSやその他のWebアプリを試してみたいが,わざわざインストールするのは面倒」と思っていた人は是非試してみてください.

jQueryのはじめの一歩

naoto : ツール 2008/11/26 9:00

Blogger's Avatar

なおとです。

今日はJavascriptを楽に記述できる頼もしいライブラリ「jQuery」を使って、よくある showHide() アクションを実装してみます。 showHideとはつまり、ボタンを押すことによって、画面の中の一部分が開いたり閉じたりする動きのことです。

ちょっと長いですが、全体を以下に示します。

...続きを読む

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

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階

Copyright(c) 2012 RYUS.All Rights Reserved.