« 2007年07月 | メイン | 2007年09月 »

2007年08月28日

二次検診の結果

結論から言いますと、二次検診の結果にも「医者に逝け。治療しろ。」と書いてありました。でも、E判定だったのが、D判定になっていました。1週間禁酒した事で、わずかながら効果はあったようです。とりあえず、大人しく検査結果の指示に従って主治医の所へ逝って参ります。orz

投稿者 abiru : 21:27 | コメント (1) | トラックバック

2007年08月13日

肝機能障害の疑い。

健康診断の結果にそう記載されていました。初の二次検診です!
というわけで、関係者の皆様、あびるに酒を与えないでください。

投稿者 abiru : 23:06 | コメント (1) | トラックバック

あびる姓に関するサイトリニューアル

大学生の時に作って、そのまま放置プレイだったサイトをWikiで再構成してみた。
http://abiru.jp/wwa/wiki.cgi?page=FrontPage

ケータイの方、見られません。ごめんなさい。

投稿者 abiru : 02:28 | コメント (0) | トラックバック

2007年08月12日

Ruby on Rails入門を受講し終えて

最近のRuby on Rails入門の講座に関する投稿を読んだITとは全く無関係の知人から、講習を受けた事が私にとって、どのような意味があったかを専門家でない人にもわかる言葉で3行以内で語ってみよ。という発題を受けました。以下は、その回答です。

-----------------------------------------------------------------------
講習はネットで書籍検索をするようなシステムを簡単に作る方法を学ぶものです。
無論、書籍検索以外にも応用可能な知識です。既存の知識の比較対象を得る
事で新しい理解を促進するものでした。
-----------------------------------------------------------------------

話を簡単にするために大胆な割愛をしていますので、IT関連の方には。「ハァ。?」な内容ですが、非IT系の方には、このへんが限界かと。。。。

個人的には、Railsというフレームワークを勉強した事よりもRubyという言語に触れられた事に価値があったと感じています。RubyもRailsも今後の更なる発展に期待したいです。

投稿者 abiru : 23:08 | コメント (0) | トラックバック

2007年08月10日

Ruby on Rails入門3日目

■今日の妄言

(関連性のある複数テーブルをJOINする場合のModelクラスの設計に
ついて説明されて)

なんでムリしてO/Rマッピングせにゃあ、いかんの?
ResultSetでぐるぐる繰り返し処理をする事がそんなに罪なんかい!?

なんか、この妄言は一昨年も稚内で口走った気がするなあ。。。

2007年8月10日(金) wakhokサマースクール2007


■Railsの動作環境

以下の2つの組み合わせによる動作環境が一般的

Lightty + FastCGI + Apache
Mongrel + Pound + Apache

現在は、後者のものが急速に普及している。
なぜ、Apacheを直接使わないのか疑問
複数のRailsプロジェクトのアプリを同時に使用したい時には
ポート番号を分けてmongrelを複数起動して対応する。
ポート番号の違いを吸収するためにPoundを使う。


■Validator

Modelのクラスに記述する。

============================================================
class Book < ActiveRecord::Base
validates_presence_of :title, :author
validates_uniqueness_of :isbn
validates_format_of :isbn, :with => /[0-9xX\-]+/
end
============================================================


■JRuby

JavaによるRubyの実装

Sunの専任担当者が開発しており、JVMのHotSpotなどを活用している
ので、動作速度は非常に速い。今後、有力になっていく可能性がある。
JRubyであればOC4JなどのJ2EEコンテナで利用する事ができ、BEA等の
大手ベンダが自社のJava実行環境でJRubyをサポートする可能性がある
既存のJavaオブジェクトとの連携も可能であるという利点がある。
※Ruby開発環境としてはSunのNetBeansが最有力である。


■アプリケーションの国際化

Ruby Gettext Package を使うことでRubyのアプリケーションを
国際化する事ができる。Gettextは、アプリケーションを国際化
するためのUnix由来のフレームワーク


■国際化の実習の注意点

テキストの手順通りにやるとSubversionとGTKが無くてエラーに
なるらしい。Unix系の環境でこれらのものが入っていれば問題
ないが、Windows環境だと、これらを用意しないと動かないらしい。
この実習については、私は未実施です。

http://subversion.tigris.org/files/documents/15/38369/svn-1.4.4-setup.exe
http://prdownloads.sourceforge.net/ruby-gnome2/ruby-gnome2-0.16.0-1-i386-mswin32.exe?download


■Restfulなサービス

RESTとは

・すべてのリソースをURIで表現できる
・すべてのリソースにHTTPなど特定のプロトコルでアクセスできる
・ステートレスである
・XMLでリソースを扱うことが多い

自分の理解

・全てのレコードにURIでアクセスできる
・CRUDの全てをURIから実行できる。処理対象のレコードもURIで
指定できる。


資料:
http://www.wakhok.ac.jp/~tomoharu/rails-summer2007/08/rails-REST.pdf

XMLの送受信はできたけれど。。。だんだんこの辺から落ちこぼれ始める。

C:\work\summer2007\restful>irb
irb(main):001:0> require 'net/http'
irb(main):002:0> http = Net::HTTP.start('localhost',3000)
irb(main):006:0> p http.get('/books.xml').body
irb(main):008:0> p http.post('/books.xml', 'book[title]=Ruby').body

RESTサービスの動作検証のためにRubyの対話的インターフェース
であるirbを利用


■AJAXの利用

Railsの開発者の一人がAJAXのライブラリの開発者であるため、Rails
とAJAXの親和性は高い。rhtmlに記述を少し追加するだけでAJAXの機能
を活用したユーザインターフェースが作成可能になる。自分でAJAXの
記述をする事もできるが、あえてしなくてもAJAXを利用する事ができる

投稿者 abiru : 19:00 | コメント (0) | トラックバック

2007年08月09日

Ruby on Rails入門2日目

Railsよ、オマエもか・・・・。
アプリを開発するのは新規プロジェクトばかりぢゃないんだよおぉぉ。。。(泣

2007年8月9日(木) wakhokサマースクール2007

■ViewとControllerの実習

テキストボックスに入力した値をオウム返しする、いわゆる挨拶
アプリをRailsを使って作成する実習
この実習ではデータベースへのアクセス(Modelの利用)はない。

■プロジェクトの作成

挨拶アプリ用のRailsのプロジェクトを作成するコマンドは以下の
通り。

C:\work\summer2007>rails hello

■Controllerの作成

C:\work\summer2007>cd hello
C:\work\summer2007\hello>ruby script/generate controller hello input greeting

上記コマンドでは、helloというControllerを作成するとともに
inputとgreetingというアクションを作成している。


■作成されたControllerを確認

作成された以下のファイルを確認する。

C:\work\summer2007\hello\app\controllers\hello_controller.rb

============================================================
class HelloController < ApplicationController

def input
end

def greeting
end
end
============================================================
コントローラ名は + "Controller"


■URLとコントローラの対応付け

http://localhost:3000/hello/input
http://localhost:3000/hello/greeting
hello がコントローラ名であり、inputとgreetingはアクション名
である。
※これはあくまでもデフォルトであってRoutingを変更すれば
変更可能である。


■Railsアプリケーションの動作

・DispatcherがRequestを受け取る (HTTP)
・コントローラとアクションを決定
・コントローラ中のアクションが処理
・ビューを処理

※仮想パス以下がどのような値でリクエストされても全てのリクエスト
をDispatcherが受け取って処理するようにHTTPサーバに設定してある。


■サーバ(Webrick)の起動

C:\work\summer2007\hello>ruby script/server

http://localhost:3000/hello/greeting
http://localhost:3000/hello/input


■View(input)のカスタマイズ

input.rhtmlを以下のように変更
============================================================

お名前を入力


<% form_tag :action => :greeting do %>
<%= text_field :input, :name %>
<%= submit_tag 'OK' %>
<% end %>
============================================================


■Controllerのカスタマイズ

hello_controller.rbのgreetingメソッドへ以下の記述を追加

============================================================
@str = @params.inspect
============================================================

inspectメソッドはJavaでいうtoString()メソッドである


■View(greeting)のカスタマイズ

greeting.rhtmlの中で以下のような処理を実施する

============================================================
<%= @str %>
============================================================

アクション(greetingメソッド)で作成(定義)されたインスタンス
変数はビューの中から参照(利用)する事が可能できる


■実行結果

============================================================
{"action"=>"greeting", "controller"=>"hello", "input"=>{"name"=>"あびる"}}
============================================================

この場合は上記のようにハッシュの内容がそのまま表示される


■課題1

greetingで入力された名前を表示する


■controllerのカスタマイズ

hello_controller.rbのgreetingメソッドを以下の通り変更

============================================================
def greeting
@name = @params[:input][:name]
end
============================================================


■View(greeting)のカスタマイズ

greeting.rhtmlの中を以下のように変更する

============================================================

ごあいさつ


<%= "こんにちは、#{@name}さん" %>
<% form_tag :action => :input do %>
<%= submit_tag '戻る' %>
<% end %>
============================================================


■クロスサイトスクリプティング(XSS)対策

<%= "こんにちは、#{@name}さん" %>

上記の記述だとXSS対策は一切なしの無防備状態になる。

<%=h "こんにちは、#{@name}さん" %>

上記のようにhを一文字加えるだけで最低限にXSS対策がされる。
このhもメソッドである。このメソッドのコードを確認することで
XSS対策の詳細を確認出来るのではないか、また、必要があれば
このメソッドをオーバライドすることでXSS対策に処理を追加
できるのではないかと思われる。(具体的なオーバライドの方法は
まだ、わからないけど。)


■課題2

時刻を表示するアクションとビューを追加する。

input.rhtmlに以下の記述を追加

============================================================
<% form_tag :action => :time do %>
<%= submit_tag '時刻表示' %>
<% end %>
============================================================


以下の内容でtime.rhtmlを作成

============================================================

現在時刻表示


<%= @timestamp %>
<% form_tag :action => :input do %>
<%= submit_tag '戻る' %>
<% end %>
============================================================


hello_controller.rbに以下のようなメソッドを追加

============================================================
def time
@timestamp = Time.new
end
============================================================


■Routing

アプリケーションにアクセスするためのURLパターンをデフォルトの
形式ではなく、変更したい時には、config/routes.rbを編集する。


■Modelの利用

============================================================
Class HelloModel
attr_accessor :name
end
============================================================

Rubyでは上記のように記載することでJavaのプロパティに相当する
インスタンス変数を確保出来る。setterやgetterメソッドを用意
する必要はない。(以前バージョンのRubyには、この省略表記が
なかった。)

HelloModelを記述するファイル名はhello_model.rb


■実習:書籍管理アプリの作成

書籍を管理するウェブアプリケーションをRailsで作成する。
基本的には昨日デモされたものと同じ


■database.ymlの修正

開発、テスト、本番の各DBに以下の2行を追加する。

password: password
encoding: utf8


■MySQLへrootスキーマで接続

C:\work\summer2007>C:\work\summer2007\mysql-5.0.45-win32\bin\mysql.exe
--user=root --password=password --socket=C:/work/summer2007/
mysql-5.0.45-win32/data/mysql.sock


■データベースの作成
以下のコマンドでMySQLの中にデータベースを作成する

============================================================
mysql> create database books_development;
mysql> create database books_test;
mysql> create database books_production;
============================================================

MySQLにおける「Database」という単位はOracleの表領域に近い
ようだが、それとも少し違う。少なくともOracleでいうデータベース
インスタンスとは意味が異なるので注意!


■Modelの作成

以下のコマンドでModelを作成

============================================================
C:\work\summer2007\books>ruby script/generate model book
title:string author:string publisher:string isbn:string
published_on:date
============================================================


■Modelの構成をDBに反映(移行:Migrate)する

以下の処理を実行することでDBオブジェクトが作成される

============================================================
C:\work\summer2007\books>rake db:migrate
============================================================


■データベースの情報を元にControllerやViewを作成する

これが、一大ブームを巻き起こしたという噂のアイツ(scaffold)だ!

============================================================
C:\work\summer2007\books>ruby script/generate scaffold Book
============================================================

scaffoldとは「(建築用の)足場を組む」というような意味がある
らしい。ようするにWebアプリのたたき台になる雛形を自動生成
してくれる処理である。


■サーバの起動

WEBrickを起動します。

============================================================
C:\work\summer2007> cd books
C:\work\summer2007\books> ruby script/server
============================================================


■Active Record

Railsでは、データベースへアクセスし、処理する際の手法として
Active Recordと呼ばれる設計パターンが用いられている。

Active Recordでは、データを保持する機能と、そのデータに対する
処理(振る舞い)の機能の両方を持っているオブジェクトを使って実現
する設計パターンのこと。データに対するアクセスはCreate、Read、
Update、Delete(CRUD)の4つに集約される。

※余談:
Railsでは、SQL文を直接ゴリゴリ書いて対処する方法も用意されて
いるらしい。SQLを自分で書かなきゃ安心できない人もこれで安心だ。


■books_controller.rbのもっともイヤラシイ記述

============================================================
def list
@book_pages, @books = paginate :books, :per_page => 10
end
============================================================

paginateメソッドは、:booksというシンボルの引数と:per_page
というハッシュの引数の計2つを取る。戻り値は配列型であり、
0番目の要素を@book_pagesへ代入し、1番目の要素を@booksに
代入している。


■rhtmlにおけるコードとデザインの分離問題

デザイナーとプログラマの共同作業と棲み分けをどうやって実現
するのか?

「デザイナとの共存なんて簡単だぞー。全部、キーワードに
しちゃえば、しちゃえばいいんだ!」

参考文献:キーワード型 rhtml
http://wota.jp/ac/?date=20070801


■既存のテーブルからModelを作成できるか?

結論:できないらしい。

そのほかにも主キーのカラムがIDという列名でなかったり、自動採番
のカラムでなかったりすると色々と面倒くさい事になるようだ。
う~ん、既存のテーブルをちょこっといじくるだけの簡単なアプリを
Railsで作ろうとする事は、おもったよりも困難な様子だ。

社員番号なんかの入力項目を主キーにしている場合って結構多そう
だから、この辺りの問題を簡単に解決してくれる手法がRailsの中に
組み込まれれば、もっと使いやすくなるんじゃなかろうか。


■フレームワークの有効性について

mixiの方のコメントでRailsの使い方を覚えた方が早いか、それとも
最初から自作した方が早いか、微妙なところではないかという意見
を頂きましたが、自作の場合、作成者の力量によって出来映えや
保守性、堅牢性などにバラツキが出る可能性があります。しかし、
フレームワークを有効活用すれば、そのフレームワークが到達して
いるレベルでの品質は最低限、確保する事ができます。こういった
意味では、ある程度時間を掛けてフレームワークを学習する価値は
あるのではないと考えます。

要するに腕の悪い料理人でも半調理品の食材を組み合わせて料理を
すれば、よっぽどの事をやらかさない限りそこそこの味のもんが
作れるというわけです。無論この場合、一流シェフの味には、負け
ますが、世間のお客様全てが一流シェフの味を求めているわけでは
ないので、こういったアプローチもアリだと思うわけですよ。(笑

投稿者 abiru : 19:05 | コメント (0) | トラックバック

2007年08月08日

Ruby on Rails入門1日目

1日目終了!
だめだ、脳ミソ、オーバーフロー。。。。

2007年8月8日(水) wakhokサマースクール2007
稚内北星学園東京サテライト校 4F
講師:安藤友晴先生

------------------------------------------------------------------------------

■Railsは難しいか。

フレームワークの構造・設計としては複雑な部類に入る。
その分、ユーザがコーディングする分量は非常に少なくて済む
しかし、少し複雑な処理を実装しようとするとフレームワーク
自体の持つ複雑さが全面に出てくる場合がある。


■教材・サイト

http://www.wakhok.ac.jp/~tomoharu/rails-summer2007/


■Ruby on Railsとは何か

Rubyを利用して作られているMVCアーキテクチャによる
フルスタックWebアプリケーションフレームワーク

■フルスタックとは

Java/J2EEのフレームワークはフルスタックではない。
Web(UI)側とDB側で別々のフレームワークが必要になり、
各フレームワークごとの相性や組み合わせに起因する
問題が発生する。これがJava/J2EEのフレームワークの
難しさに繋がっているともいえる。

Railsであればフルスタックフレームワークなのでこの
問題を会費する事はできる。

DB周りだけや、Web周りだけというような部分的なRailsの
使い方も不可能ではないが、フルスタックで使う事で真価
を発揮する。


■Rails諸元

David Heinemeier Hansson(略してDHH)が作成した。
現在の最新バージョンは、1.2.3
今年の3月にリリースされた1.2になった時の変更が
非常に大きい。現在、市販の書籍は1.2に対応していない
場合が多くサンプルが記述されている通りでは動作しない
ので注意が必要である。かつてJava1.1~1.2の時代に起こった
ような変革期がRailsに起こっているとも言える。日本語化
されている1.2対応済の書籍は、まだ少ない。時期バージョンは
2.0になる予定で変更内容も大きい予定だが、ほぼ1.2で変更点は
出尽くした感がある。
1.2からJavaのDeprecatedと同様の概念が導入されたが、将来の
バージョンで切り落とされる可能性があるので注意する必要がある
Javaと比較するとドキュメンテーションの整備状況が充分ではない
と言える


■Railsのデモ

安藤先生によるRailsのデモが行われる。NetBeans等を使用するのでは
なく、コマンド操作でのRailsのデモのようです。ちなみにRailsの
プロジェクトを新規作成するためのコマンドはrailsだった。

J2EEではXMLの設定ファイルを記述する機会が多いが、Railsではほとんど
設定ファイを記述する機会がない。唯一例外が.ymlファイル(YAML形式)の
記述である。database.yml

database.ymlは接続先DBの定義を記述するファイルであるが、開発用、
テスト用、本番用の設定を分けて記述することができるように予め設計
されている。

RailsはUTF-8が必須である。一応、UTF-8以外もサポートされる事に
なっているが、実際問題、UTF-8以外では正常に動作しないと思った方が
いい。PC用のブラウザであれば問題にならないがケータイ向けのコンテンツ
をRailsで開発しようとする時には問題になる可能性が高い。
基本的には、UIからDBまで全てをUTF-8で統一した方がよいであろう。

モデル名をbookで宣言すると、テーブル名はbooksという風に複数形になる
childとchildrenのような変則形にも対応できる。

bookは1レコードに対応し、booksはDBのテーブルに対応する。
rakeコマンドでDB側にテーブルを作成する。

Railsのアプリケーションは変更後もサーバを再起動する必要はない。
開発用、テスト用のフェーズであればHotデプロイ可能


■Railsの考え方

・Convention over Configuration(CoC)「設定よりも規約」
設定ファイルを記述するのではなく、徹底的に規約で拘束するという考え方
J2EEなどでは、どのファイルがどこにあって、オブジェクト名などがどのような
名前であっても、それらの対応付けを設定ファイルに記載すれば対応できる
という考え方だが、Railsは逆で規約で様々なものを拘束する。
例えば、オブジェクト名の複数形がテーブル名になり、主キーのカラム名は
常にIDという列名になる。

・Don't Repeat Yourself(DRY)「同じ事を二度書かせない。」


DOA(Data Oriented Approach)が基本なので、最初にテーブルの設計が
ないとアプリケーション開発が始まらないとも言える。この点はOOPの
視点から見たときにRailsが批判される点である。現在主流のオブジェクト
指向設計とは逆行している。しかし、DBが既に存在するという状況は
実際の開発の現場では良くある状況であり、現実に即した設計と言うことも
できる。


■DSL(Domain Specific Language)特定用途言語

RailsはRubyでWebアプリケーションを開発するためのDSLであるとも言える。
Rubyを理解していてもRailsの文法を理解できない場合もある。
Rails特有の文法もある。
Rubyは動的言語である。


■環境構築

Windowsなら One-Click Ruby Installer を利用すると楽
http://rubyforge.org/projects/rubyinstaller/

RubyGemsはRubyのパッケージ管理システム
One-Click Ruby Installer を使っていれば既にインストールされている
そうでない人は下記サイトからダウンロード
Railsを入れる場合もRubyGemsから入れる事が一般的
http://rubyforge.org/projects/rubygems/


■Ruby

Rubyでは、すべてがオブジェクト


■クラス定義とメソッド定義

============================================================
class A

def plus(a, b)
@result = a + b
end
============================================================

@からはじまる変数はインスタンス変数になる。
メソッドの戻り値は最後に評価した値が返り値になる
この場合は @resultの値を返す


■return文を使った戻り値の戻し方
============================================================
def times(a)
return @result * a
end
============================================================

明示的にreturn文を使ってもよい
ifの途中でreturnする場合など、メソッドの最後以外の箇所で
戻り値を戻す場合などに利用する。


■インスタンスの作成

============================================================
a = A.new
b = B.new
c = C.new
d = D.new
============================================================
クラス名.new でインスタンスを生成できる
コンストラクタはinitializeメソッドに記述する

■+記号(演算子)もメソッドである
============================================================
3+2
3.+(2)
============================================================
上記の2つの式は等価である。3もオブジェクトであり、+はメソッド
2は引数である。RubyはこのようなSyntax Sugerが多い言語である。

Rubyは括弧記号の使用が省略出来るなど、非常に文法に幅があり
ゆるやかである。「一つの事をやるのにも複数の方法があっていい。」
という考えがあるようで、Javaとは対局を成す考え方である。


■動的言語

============================================================
a = A.new
puts a.plus(2, 3)
a = C.new
puts a.getName
============================================================
変数には型はない。ポインタとしての役割のみもつ
従って上記例のように同じaという名前でその名前が参照する
オブジェクトを切り替えることができる。


■インターフェースの代用

============================================================
class A
def getName
"class A"
end
#クラスA,B,CともにgetNameメソッドの定義は同一
a = A.new
puts d.doSomething(a)
puts d.doSomething(b)
puts d.doSomething(c)
============================================================
Rubyにはインタフェースはないが、こんなことができる

============================================================
methodName = "getName"
puts c.send(methodName)
============================================================
sendメソッドはObjectクラスのメソッドである。
Reflectionのようなもの??

※if文のブロックでメソッドの定義を括ってしまいある条件が成立した
場合にのみ存在するメソッドを定義することができる。
(初心者はさわるな危険!)


■StringとSymbol

============================================================
s1 = 'wakhok'
s2 = 'wakhok'
s3 = :wakhok
s4 = :wakhok

puts s1.object_id
puts s2.object_id
puts s3.object_id
puts s4.object_id
============================================================
s3とs4はオブジェクトIDが同じになる
Symbolは「単なる名前」を表すときに使われる
SymbolはオブジェクトIDの同一性を確保するために使用される事が
多く、ハッシュの添え字として多用される


■配列

============================================================
a = ['りんご', 'みかん', [1, 2, 3], 'なし']
============================================================
数値オブジェクトと文字列オブジェクトを混在させる事が可能
a[0][0]とすれば'り'が返される


■ハッシュ

============================================================
h = {:name => 'tomoharu', :address => '北海道稚内市'}
puts h[:name]
============================================================
配列は添え字が数値だったが、ハッシュ要素に対応する添え字が
オブジェクトである。


■ブロック

============================================================
a = [1, 2, 3, 4, 5]
a.each do |n|
puts(n)
end
============================================================
eachはメソッドである。doからendまでがブロックであり、ブロック
自体がeachの引数であるともいえる。Rubyのコードでは上記のような
ブロックが多用される。
eachメソッドを利用することで配列の各要素を対象にして、ある一定
の処理(ブロック)を実行できる。

投稿者 abiru : 18:25 | コメント (2) | トラックバック

2007年08月07日

Oracle10g XE

Oracle Database 10g Express Edition を自宅のTurbolinux環境にインストールしてみた。無論、Turbolinuxは
正式にサポートが表明されているディストリビューションでは無いので、動作しなくても文句は言えないし、何かトラブルがあっても誰かに助けを求められない。しかし、元々フリーな製品だし、サポートも元々ないし、DBとして実用する予定も無いので、とりあえず入れてみたら、入ったし、とりあえずは動いているようだ。

しかし、このExpress Editionという製品、評価・検証用にしておくにはもったいないコンセプトの製品である。

私がExpress Editionをイイ!と思った。ポイントは以下の通り。

・rpmで一発インストール!
・事前に要件チェックが実行され、メモリやスワップ不足が指摘される
・基本的な管理作業は全てAPEXのインターフェース経由で行う。
・KDEメニューにDBの起動/停止など基本的なアイコンが用意される

特にrpmで一発インストールには感動すら覚えた。インストール作業に苦戦してサポートに問い合わせて来るお客様が多い中で、なぜ正式な製品版もこのようにしないのだろうかと疑問さえ感じた。無論、rpmで一発インストールにしてしまうことで、また別の問題が発生する事は理解しているけれど、そのサーバで他のOracle製品は動作させるつもりはないというような環境の場合に限って、実運用環境でのrpm採用も検討してみる価値はあると思う。

いっそ、Express Editionという製品をStandard Edition Oneに継ぐ低価格化製品として販売してしまってもいいのではないだろうか。ただし、サポートはWebのみ、10:00〜17:00の平日限定とかにして・・・。少なくともMS-AccessやSQL Serverのライトなユーザにはイイかもしれない。

逆にExpress Editionを実運用という側面で考えると以下のような問題点が考えられる。

・ORACLE_HOMEのパスが固定で変更できない。
・Oracleユーザ名がoracleのみで変更できない。(複数の製品が同居できない)
・SID名も固定
・キャラクタセットは日本語を使う場合、UTF-8に固定
・データ量の上限が4GB

でもお客様の求めるレベルと予算と使い方がマッチするなら充分に製品として選択する事も可能なのではないだろうか。上記に挙げた問題点だって技術的にクリアしようと思えば可能なハズだし。

後は、PSRや個別パッチを自動的にダウンロードして適用までやってくれるOracle updatesとでも言うべき機能が実装されれば、最高なんだけどな。


以下は自分のturbolinux環境でテストした際の作業メモ
[root@ibmtpr51 ~]# rpm -ivh /home/abiru/work/oracle-xe-univ-10.2.0.1-1.0.i386.rpm
準備中... ########################################### [100%]
This system does not meet the minimum requirements for swap space. Based on
the amount of physical memory available on the system, Oracle Database 10g
Express Edition requires 990 MB of swap space. This system has 466 MB
of swap space. Configure more swap space on the system and retry the installati
on.
エラー: %pre(oracle-xe-univ-10.2.0.1-1.0.i386) スクリプトの実行に失敗しました。
終了ステータス 1
エラー: install: スクリプト %pre の実行に失敗しました (2)。oracle-xe-univ-10.2
.0.1-1.0 をスキップします。


[root@ibmtpr51 ~]# dd if=/dev/zero of=/swapfile2 bs=1024 count=1048576
読み込んだブロック数は 1048576+0
書き込んだブロック数は 1048576+0
[root@ibmtpr51 ~]# mkswap /swapfile2
Setting up swapspace version 1, size = 1073737 kB
[root@ibmtpr51 ~]# swapon /swapfile2
[root@ibmtpr51 ~]# cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 1048568 565232 -1
/swapfile2 file 1048568 0 -2
[root@ibmtpr51 ~]# vi /etc/fstab
[root@ibmtpr51 ~]# rpm -ivh /home/abiru/work/oracle-xe-univ-10.2.0.1-1.0.i386.rpm
準備中... ########################################### [100%]
1:oracle-xe-univ ########################################### [100%]
Executing Post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to
configure the database.

You have new mail in /var/spool/mail/root
[root@ibmtpr51 ~]# /etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition. The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts. Press to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts. Note that the same
password will be used for SYS and SYSTEM. Oracle recommends the use of
different passwords for each database account. This can be done after
initial configuration:
Confirm the password:

Passwords do not match. Enter the password:
Confirm the password:

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: n

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"

投稿者 abiru : 11:19 | コメント (0) | トラックバック

2007年08月05日

60歳のLinuxユーザ(2)

私が愛用していたThinkpad s30につづいて、母が愛用しているThinkpadが2週間ほど前、壊れました。動作中にブルースクリーンを表示してダウンします。元々中古7万円で購入したものが7〜8年頑張ってくれたので、充分でしょう。

後継機は、オリックスレンテックさんに中古・良品のThinkpadを発注済み。でも到着までは、だいぶ掛かりそう。その間、母は、ゲームもできずメールも読めないので、手持ちぶさたの様子です・・・・。

そこで、今日、私が使っているTurbolinuxのマシンに母親用のアカウントを作成して使わせてみた。

ハッキリ言って母は、パソコンやOSに関する知識は皆無なので、Yahoo!ゲームが出来て、メールが読み書きできれば問題ない。おそらくきっとWindowsというものについても理解していないだろう。なので、Turbolinuxの環境でも問題なく使えるらしい。多分本人は「デザインが違うなあ。」ぐらいにしか思っていないはず。

母は、Winbiffを愛用していたので、Thunderbirdの画面を見たときに「ゆーびん屋さんがいないぢゃないっ!」と文句は言っていたが、「パソコンが違うのだから、デザインはちょっとぐらい変わるものだ。基本的な使い方は一緒だよ。」という私の超アバウトな説明に2秒で納得の様子。

今日、ここに60歳のLinuxユーザが誕生す。

多少、OSに関する知識があると「Linux=難解」というようなステレオタイプがあり、拒否反応を示すが、ウチの母のように「Yahoo!ゲームとメールをする機械=ぱそこん」という理解レベルだと、全く問題にならない事が今日、証明された。

これは、よく言われる事だが、ユーザはOSが使いたいのではなく、パソコンを使うことで得られるサービスを受けたいだけなのだ。今日の出来事で、それを改めて実感した。今回の母のような成功事例を実現させるには、OSの違いやOSの機能を意識させることなく、ユーザが安心してサービスを享受する事に専念できる環境を整備し、使用や運用をバックアップしてあげられる体制が必要なのだと思う。

末端のパソコン・ユーザの満足度を向上させるには、街の電気屋さん的な「ITコンシェルジュ」の存在が不可欠なんだなあと、改めて痛感した。

新しく来るマシンはWindowsXPの予定であるが、こっそりLinuxに入れ替えてしまおうかな。。。。

投稿者 abiru : 22:11 | コメント (0) | トラックバック