goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Webで洋服を倉庫に預けたり、取り出したり。。本や書類のほうが便利?

2007-04-18 18:25:26 | Weblog

松丸アナのトレンドたまごで、

webクローゼット
http://www.tv-tokyo.co.jp/wbs/toretama/070416.html

というのをやってました。

内容は(以下斜体は上記サイトより引用)

預かった服を検品・クリーニングした上でアパレル専用倉庫で保管するサービス。服の写真や色・サイズなどのデータを会員それぞれの専用ページに掲載。客はweb上で服を管理できる。服の受け渡しには宅配便を利用、1着単位で預けたり取り寄せたりできる。


そうです。要するに、服を預かってくれるんだけど、その際、クリーニングして、写真を撮ってくれ、それをWebにアップしてくれているので、取り出したいときは、宅急便を利用すればOKって言う話。

 写真とってくれるんなら、オークションに。。。とおもったら

将来は会員同士のコミュニケーションや服のオークションなども検討している。

 そうです。ヤフオクと提携して、そのまま出展できて、お金と商品のやり取りを、この会社がやってくれるんなら、便利そうだけど。。




 でも、これ、どっちかっていうと、会社で、本とか、書類とかを預かるほうが便利かも。。

(1)本や書類を宅急便などで倉庫に送ります
(2)スキャンして、Webに載せます。
(3)普段は、その、Webに掲載してあるのだけ見ればいいけど。。
(4)実物が欲しいときは、宅急便で送り返してもらいます。。

とかすると、場所をとらなくていいし、さらに、機密的にも、(3)のWebで見るときは、ドキュメント自体を暗号化し、AJAXでその暗号を解凍した上でブラウザで見るようにすれば、ネットに流れるドキュメントを盗聴されても暗号化されるので見れないし。。

 さらに、そのブラウザから、保存できないようにして。。。

 きっとそーなってくると、機密保持のため、プリントアウトしても、何時間かたつとインクが見えなくなってしまったりするんだろうな(あとは、紙が自動的に消滅するとか、真っ黒になるとか ^^;)。

 なーんてなると、書類は機密保持もできて便利??

 おうちから仕事するときは、そのブラウザを使えばいいし。。。
 (たぶん、紙に保存できないバージョンだね)
 逆に仕事させたくなかったら、そのブラウザを使わせなければいい




 でも、このサービスをやったら、面白そうなのは、本だよね。
 同じ本を、何冊も保管する場合。。。無駄になる。。。

 ってことは、本の信用取引をやって、新しい本がでたら、その日からブラウザでは見えるようになるんだけど、実際には、本は手元にない(この場合、信用の費用ははらうけど、本を買ってないので、本の代金を払わなくてもいい)。もし、手元におきたい場合は、本を送れ!っていう指示を出すと、そこで、買取になって、本の値段を払うとか。。
。。複雑そうだな(^^;)ここまではやりすぎか。。




 でも、本とか書類だと、企業でも、要望がありそうな気がするな。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その31:外部設計(8)DB設計など。。

2007-04-18 15:45:41 | Weblog

シリーズ「開発の初めから順番に書いていってみる」の続きです。
 今、外部設計の段階で、要求仕様から、詳細設計までの間(ここを外部設計と、ここでは読んでいるわけですが)の手順は、以下の手順で行うと、流れに飛躍がなく説明がつくということを書きました。
(1)入出力の媒体をきめる。
(2)その媒体ごとにフレームワークを決定する。
   なければ、入出力方法を決定する。
(3)そのプロセスの起動方法を考える
   なければ、起動モジュールを考える。
(4)起動モジュールから、(2)の呼出し手順を考える
(5)その処理部分をどうするか、考える。
(6)そうすると、細分化された入出力、処理部分ができる。
   ここで、あわせたいものは、あわせる
(7)処理部分を、ワーカーさんに渡せるまで落とし込む。


だけど、実際にやられるのは、こんなかんじだと書きました。

(あ)フレームワークの確認から、全体的なプログラムの書き方を決める
(い)画面の設計をする
(う)DBの設計をする、(その他外部の設計をする)
(え)プログラムを適当に詳細化し、詳細設計に持っていく


 で、前回までで(い)をやりましたので、今回は「(う)DBの設計をする」です。




■ER図から、テーブル定義書をまとめる

 とはいえ、実際にER図ができていたとしたら、以下の手順で、テーブル定義書はできます。

(1)エンティティがテーブルとなりますので、
     エンティティ名をテーブル名にしてください
     エンティティ名が日本語なら適当な英語名を付けてください

(2)エンティティの属性が、テーブルの項目となりますので
     属性名を項目名にしてください
     属性名が日本語なら適当な英語名を付けてください
     主キーの場合、主キーのチェック欄にチェック(ないかもしれない)
     外部キー(FK,参照キー)の場合、そのチェック欄にチェック(ないかも)
     型をテキトー(いや、適切に)決めてください
     NotNullかどうかきめてください。

(3)ER図にはないけど、インデックスを適当に(適切に)はってください。

 エンティティが多対多の場合や、テンポラリのテーブル、作業用のテーブル(たとえば、最大件数テーブルなど)がある場合には、エンティティにないテーブルがあることがありますが、たいてい、エンティティはテーブルです。

 なお、正規化はおこなっているものとします。
 正規化の方法については、
    第一正規形
    第二正規形
    第三正規形
 について書いたので、ここでは省略します。




■テーブル定義書から、プログラム、テストデータの自動生成

 テーブル定義書は、プログラムやテストデータ、SQL文の自動生成の対象となることがあります。
 フレームワークの段階で、フレームワークを利用するかどうかにかかわらず、DBアクセスの方法は決めておくはずです。

 この理由は、
(1)方法を統一しておかないと、どこでトランザクションがスタートするかわからず、二重にトランザクションをスタートさせてしまったりする(トランザクションの入れ子は、入れ子どおりに処理されることは保障されていないケースもある)。

(2)もし、パフォーマンスが出なかったとき、DB入出力をいっぺんに直さないといけない。そのため、DBアクセスロジックを散在させたくない。

(3)DBアクセスのパフォーマンスは、SQL文の書き方に依存する部分もあり、このとき、その手法について全員に説明することは困難である。なので、一箇所にまとめて、一部の人たちだけでSQLを書くようにしたい

(4)書き方を決めて、自動生成させて、効率化したい

などなどです。。

 で、書き方が決まっているのなら、自動生成できます。
 で、ソースコードだけでなく、SQL文のCREATE TABLEなど、テーブル作成も自動生成できます。
 テストデータに関しては、テストデータを入れてもらわないとできないので、Excelなどから、テーブル定義に基づき、データを入力してもらい、テストデータのSQLを作成します。
 ちなみに、テスト項目も自動生成できるんですけど。。

 このように、テーブル定義から、ソース、テーブル作成、テストの各ソース・ドキュメントを自動生成します。
 どのようにやるかというのは、それだけで、シリーズができてしまうと思うので、今回は、やめときます。




■そのほかの入出力

 そのほかの入出力についても、入出力の種類ごとに、ドキュメントを作ります。
 ドキュメントは1種類について、順番があるモノは順番を書いたもの(画面遷移など、メッセージシーケンスもこれ)、それと、それぞれのメッセージなり、フォーマットなり、レイアウトといった入出力内容について書きます。

 そして、各入出力は、フレームワークの段階で、どのような形でプログラムするか決めておくべきであり、決まっていれば、多くのケースで、そのドキュメントから、ソースなどが自動生成できるはずです。




 ということで、外部入出力全般について説明したこととして、次回は、「(え)プログラムを適当に詳細化し、詳細設計に持っていく」について書きます。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Perlでセッションを使う その2:クッキーを使わず、POSTやGETでセッションIDを渡す

2007-04-18 13:40:28 | Weblog

 昨日、Perlでセッションを使う その1:クッキーを利用(セッションIDを入れる)。というのを書いたので 、今日は、Cookieを使わないで、POSTやGetの引数にセッションIDをセットしてやってみます。

 なお、「1:CGI::Sessionを入手する」と、「今回の課題」までは、昨日の話と同じです。




■追加仕様:セッションIDの追加

 課題に関しては、昨日とおなじ、

 1行目に、セッションIDを表示し、

 2行目に、アクセスするたびごとに1あがる
 しかし、10になるとセッション自体を削除する

 3行目は、とびとびに1が出たり出なかったりする

なのですが、セッションIDを渡すところを追加します。

1回目のアクセスは、それでOK.
2回目にアクセスするときには、URLに、sid=1行目のセッションID
を付けます

たとえば、CGIが、http://127.0.0.1/cgi-bin/sessionTest2だったとし、
1行目に書かれているセッションIDが
1234567890ABCDEF
だったとすると(こんな簡単なIDになることは、絶対ないが。。)
URLは、

http://127.0.0.1/cgi-bin/sessionTest2?sid=1234567890ABCDEF

になる。
10回目で削除されるので、IDが変わったら、次から変わったIDにsidを振りなおして、同様のことをする。




■ソース

 このCGIは、以下のとおりです。
 セッション関係で、昨日と違うところを赤くしておきます。

#!C:/Perl/bin/perl
#################################################
#					  #
#	セッションのテスト			  #
#	Cookieを利用”しない”場合		  #
#	引数のsidに設定			  #
#					  #
#################################################
use CGI;
use CGI::Session;

				#################################
				#	必要な変数の取得	    #
				#################################
##引数を取得
if ( $ENV{'REQUEST_METHOD'} eq "POST" )
{
	read (STDIN, $qs, $ENV{'CONTENT_LENGTH'});
}
else
{
	$qs = $ENV{'QUERY_STRING'};
}
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$qs{$name} = $value;
}

				#################################
				#	セッション開始	    #
				#################################
$cgi = new CGI;
$session = new CGI::Session($qs{"sid"});


				#################################
				#	セッションの操作	    #
				#################################
#セッションIDを受け取ってみる
$sid =  $session->id();

#kaisuから値を取得、1足して
$kaisu_val = $session->param("kaisu");
$kaisu_val++;

#10まできたら、このセッションを消す。10未満なら追加
if ( $kaisu_val	==	10 )
{
	$session->delete();
}
else
{
	$session->param("kaisu",$kaisu_val);
}

#偶数ならtobitobiセット、奇数なら、この項目(のみ)削除
$tobitobi = $session->param("tobitobi");
if ( $kaisu_val %2	==	0 )
{
	$tobitobi = $session->param("tobitobi",1);
}
else
{
	$tobitobi = $session->clear("tobitobi");
}


#セッションをクローズ

				#################################
				#	出力		    #
				#################################

print "Content-Type: text/plain¥n¥n";

# あとは、内容を好き勝手に書く
print "$sid¥n";
print "$kaisu_val¥n";
print "$tobitobi¥n";


(上記 < > ¥ は、本当は半角です
 Windows上で、ActivePerlを使ってCGIをやってます)




■説明
 はじめに、セッションを生成するため、
$cgi = new CGI;
$session = new CGI::Session($qs{"sid"});
 とやって、セッションを作ってます。

 なお、Cookieのときは、生成するとき、
$session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'});
ってやって、生成してました。

 で、いろいろ、操作します。

 最後に書き出しですが、セッションをクッキーに入れない場合は、上記のように、普通に書いてくれればいいのですが、クッキーにいれるときは、ヘッダーにその内容を書かないといけません。その場合のヘッダーを、

$header = $session->header();

で作ってくれますので、そのヘッダー($header)を、クッキーを入れる場合は書き出すことになります。




■参考にしたサイト
CPAN

http://search.cpan.org/~markstos/CGI-Session-4.20/lib/CGI/Session.pm


CGI::Session - セッション管理
http://www.ksknet.net/cgi/cgisession.html

Perlメモ/CGI::Sessionモジュール
http://digit.que.ne.jp/work/index.cgi?Perl%E3%83%A1%E3%83%A2%2FCGI%3A%3ASession%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

YouTubeにまもなくフィルタリングサービスを導入

2007-04-18 07:40:04 | Weblog

ここのニュース
YouTubeにまもなくフィルタリングサービスを導入--グーグルのシュミットCEOが発言
http://headlines.yahoo.co.jp/hl?a=20070417-00000003-cnet-sci

によると(以下斜体は上記サイトより引用)


Googleの最高経営責任者(CEO)Eric Schmidt氏は米国時間4月16日、動画共有サイトYouTubeに著作権で保護されたコンテンツがアップロードされることを防ぐため、まもなくフィルタリングシステムを導入する計画だと発言した。


ほー、とうとうですな。。
ちゃんと、フィルタリングできたら、すごいよね。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする