毎週金曜日配信 What's New 2003/12/5
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
┏┏┏┏ 初心者のためのホームページ作り/Web for beginner
┏┏┏ http://www.scollabo.com/banban/
┏┏
┏ <第77号>
banban@scollabo.com
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
当講座は、初心者や中級者が正しい文法と作法を身につけて、プロ級の本格的
な Webページ作成に役立つことを目的に配信されております。
当講座では HTML4.01、XHTML1.1、XML1.0 を中心とした文法が主体となってい
ます。なお、このマガジンは等幅フォントでお読みいただくと快適に読めるよう
になります。
今週のコンテンツ
■ JavaScript講座 第15回 --- JavaScriptの基本
■ インターネット用語解説 第4回 --- bps
■ ActiveX(プラグイン)技術特許問題回避の方法
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
◆JavaScript講座(第15回)
久しぶりにJavaScriptについて解説します。今回は、今までお伝えしてきた中
でもう一度原点に戻って、JavaScriptの基本について詳しく説明します。
■JavaScriptとは
JavaScriptのプログラムは、基本的にユーザのブラウザ上で行われ、サーバ側
で何かをするといったことはありません。ただし、ユーザ側のブラウザがスク
リプトをサポートしていない、あるいは「オフ」にしていた場合には、プログ
ラムの実行は無視されます。
JavaScriptはあらかじめ定義されている「オブジェクト」を利用することで
プログラミングします。また、制御命令文などもあり、オブジェクトと共に活
用することが期待されます。
■オブジェクト
JavaScriptでは、実に多彩なオブジェクトがあらかじめ実装されています。制
作者は、そうしたオブジェクトを巧みに利用することで、自由で独自のプログ
ラムを書くことができます。
オブジェクトは、表示する、計算する、検索する、動かすなどといった動作
をユーザ側の操作に応じたインタラクティブな表現を可能にします。
JavaScriptを学ぶ上で、オブジェクトを知ることは必須です。オブジェクト
を自在に操ることが、「JavaScriptの達人」になれることといって過言ではな
いでしょう。
■制御文
JavaScriptで実装されている制御文は、条件によって分岐する、繰り返し処理
をする、プログラム終了後の値を返すなど、プログラム自体をコントロールす
るために利用されます。
また、制御文の中には単独で使用してプログラムをコントロールするものも
含まれています。
■関数
関数とは、小さなプログラムをまとめて「関数」という名前に置き換えます。
まとめられたプログラムは、いつでも自由に呼び出すことができます。呼び出
す際には、いちいちプログラムを組むのではなく、関数名だけで済みます。
そのため、HTML構文中で関数を呼び出すことも可能です。HTMLでは関数を呼
び出すために、イベントという属性が定義されていますので、ページを読み込
んだときや、ユーザがマウス操作をしたときなど、様々なイベントによって、
あらかじめ作成した関数を呼び出します。
関数は、あらかじめJavaScriptに組み込まれている「ビルトイン関数」と、
制作者が定義する「ユーザ関数」に分けられており、ユーザ関数は制作者側で
プログラムを書かなければなりません。
実際に利用する関数は、ユーザ関数が一般的です。関数はプログラムである
ため、ユーザ側で自由な発想の元に書いたほうが便利だからです。
■演算
JavaScriptは他のプログラム言語と同様に、あらかじめ定義されている「演算
子」とオブジェクトを使うことにより、簡単な数値計算や複雑な三角関数、あ
るいは日時の計算をすることができます。
数値の計算や時間の計算といったことは、JavaScriptでは頻繁に使われてい
ます。つまり、計算することができなければ、今ほどJavaScriptが普及するこ
とはなかったでしょう。それほど、プログラム上で計算は欠かせない存在なの
です。その意味でも、演算子を学ぶことは大切なポイントです。計算はHTMLで
は絶対にできないのですから。
■JavaScriptの決まり事
JavaScriptをHTML文中に記述するためには、それなりの約束事があります。こ
の約束事を守らなければ、スクリプトが実行できない場合や、エラーを発生す
ることもあります。
スクリプトを書く場合には、必ず、script要素内で記述しなければなりませ
ん。この要素では、type属性によってスクリプトの種類を特定します。
例: <script type="text/javascript"> 〜 </script>
また、JavaScriptに対応していない Webブラウザのために、プログラム本体
はコメントの中で配置します。これによってスクリプト未対応のブラウザは無
視してくれますので、安全です。コメントがない場合、ブラウザによっては、
そのプログラムのソースがそのまま出力される危険があります。
また、スクリプトを記述した後のコメントの終わりには //--> という具合
に必ずスラッシュを2つ続けて書きます。
<script type="text/javascript">
<!--
プログラムの記述
//-->
</script>
script要素の属性には language がありますが、現在は非推奨属性となって
いますので、上記のような記述法をお勧めします。ただし、古いブラウザでは
language属性しかサポートしていないものもあるようです。
■JavaScriptのアクセシビリティ
スクリプトに対応していないブラウザの場合、そのスクリプトが何を表わして
いるのか理解することができません。もし、それがコンテンツを形成する上で
非常に重要な役割を占めている場合、何らかの別の方法で伝えてやらねばなら
ない場合が生じます。
HTMLでは、そうしたスクリプトに替わる情報提供として、noscript要素が用
意されています。
トップページで実行するJavaScriptの場合、もし訪れるユーザ側でスクリプ
トが実行できない環境にあった場合、制作者もユーザも悲しい結果に終わって
しまうことがしばしばあります。
例えば、他のページにリンクを示すナビゲーションを、JavaScriptで表現さ
れていたら、そのユーザはどこにも行けなくなります。あるいは、何らかのボ
タンをクリックしなければ情報を得ることができない場合、そのユーザは何も
得ることができなくなります。
JavaScriptは、ある意味では「両刀の刃」です。インタラクティブなページ
を作れる代わりに、その表現を享受できないユーザを犠牲にします。表現した
い内容は、JavaScript以外に方法がないのかを吟味してください。
ナビゲーションはスクリプトがなくても実現できます。ボタンをクリックし
なくても情報を提供することができます。安易にスクリプトに頼るのはお勧め
できません。(私も反省)
■セキュリティ
JavaScriptは、基本的にはユーザ側の環境で実行されますので、サーバ側にダ
メージを与えることはありませんし、そのことで情報が漏れてしまうことはあ
りません。
むしろユーザ側にとっては脅威と思える場合が幾つかあります。1つは、プ
ログラムミスによる無限ループに陥り、ユーザ側のリソースを激しく消費させ
コンピュータが反応しなくなる場合があります。
もう1つは、悪意を持ったプログラムによって、サーバ側の別のプログラム
を起動させ、ワームやスパイウェアを忍び込ませることです。私は、初めて訪
れるサイトでは、必ずスクリプトを「オフ」にしたブラウザを利用しています。
得体の知れないサイトでは、時としてこのような攻撃を仕掛けて待っているこ
としばしば見受けられるからです。
■JavaScriptのマナー
JavaScriptは様々な動作を Webブラウザ上で実行することができます。プログ
ラムによっては、ブラウザそのものを制御することさえできます。
得てして嫌われる傾向にあるプログラムとは、ユーザに断りもなくブラウザ
画面のサイズを変更したり、ポップアップウィンドウを表示させてしまうこと
です。また、ブラウザのステータスバーにメッセージを流して、通信状態を見
ることができなくしたりするのも困り者です。
サイトによっては、トップページから「お名前を入力してください」などと
アラートウィンドウが表示することがあります。アラート(警告)ウィンドウ
は、何らかの操作をしない限り、次に進むことができません。会員制のサイト
と勘違いされてしまいます。
一番多い困り者は、単純なプログラムミスが挙げられます。ブラウザによっ
てはエラーのたびに警告メッセージが出現します。警告メッセージは、そのボ
タンをクリックしない限り次に進むことができません。そうしたエラーが続出
すると、ユーザは2度と訪問することはなくなります。
また、ベンダー独自のスクリプト、主にマイクロソフト社が独自に提供して
いる JScript(簡易プログラミング言語)は、MSIEでしか動作することができ
ません。それを他のブラウザで閲覧した場合、実にわびしいというか悲しいと
いうか、見るに耐えない結果となる場合があります。
いわゆるダイナミックHTML(D-HTML)の場合、制作者側ではユーザのブラウ
ザの銘柄を判断して、それ専用のページに誘導することが当たり前でした。
D-HTMLが廃れてしまった今、JScriptだけが単独で生き残っています。
あなたが作成したプログラムは、他のブラウザではどのように表現しているの
かを確認することは、制作者側の義務でもあります。
■JavaScriptのバージョン
ブラウザの違いによる動作の違いは歴然として存在しています。JavaScriptに
もバージョンがあり、ブラウザが実装しているバージョンによって動作が異な
るのは仕方がないところです。
最新の視覚系ブラウザでは最新のバージョンが搭載されていますが、残念な
がら一番多く普及しているマイクロソフト社の MSIE ではやや古いバージョン
しか実装されていません。
丹精こめて作ったプログラムがブラウザによって動作しないのは辛いところ
です。複数のブラウザで動作するのかを検証する必要が出てきます。
最新の Webブラウザでは、ヨーロッパの標準化機関(ECMA)で作成された仕
様(ECMA-262)が実装されており、この仕様に従ったプログラムは、ほとんど
のブラウザで動作可能だといわれております。
当JavaScript講座では、次回より各オブジェクトについて詳しく解説し、皆様
の学習に役立てたいという編集スタンスでいます。オブジェクト、制御文、演算
をマスターし、自由な発想でプログラムを書けるようお手伝いいたします。
なお、JavaScript講座は不定期で掲載しています。ご了承ください。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
◆インターネット用語解説 --- bps
通信速度の単位に bpsという単位が使われています。その単位で示される数値
が大きいほど通信速度が速いということで知られていますが、では bpsとは一体
どのような単位を表わすのでしょうか?
■bps単位
bps とは、Bits Per Second の略で、1秒間に通信できるバイナリデータのビ
ット量を計る単位を指します。ビットとは、コンピュータの基本的な量を示す
単位となり、8ビットが1バイトとなります。
アナログ通信の最大速度は 56Kbps です。これは1秒間に 56000ビットを送
受信することを表わし1秒間に7000バイトの単位になります。決して速い速度
ではありません。
ちなみに、デジタル通信の ISDNでは、64Kbps なので、1秒間に8000バイト
つまり、8キロバイトの通信ができます。
これを元に計算すると、ADSLなどで使われるメガバイト単位では、次のよう
になります。
1Mbpsでは 100万ビットすなわち 125キロバイトという非常に高速な通信が
可能になります。12Mbpsでは、1250万ビット(1562キロバイト)、24Mbpsでは
その倍速となります。
■コンピュータの単位と通信の単位
コンピュータの基本的な単位はビットと述べました、コンピュータでは2の倍
数(つまり0と1のまとめた基本単位)2ビットで計算します。すると1バイ
トは8ビットとなり、1キロバイトは1024ビットとなります。この計算方法で
通信速度を量ると、少しおかしなことに気がつくでしょう。
通信の速度では1キロを1000ビットとして測る「SI単位」という万国共通の
単位として定められています。ですので、1キロバイトの通信量は1024バイト
とはならないのです。(ちょっとややこしい)
■ボーレート(baud rate)とビーピーエス(bps)
1Mbps のことを1メガボーレートと呼ぶ人がありますが、これは間違いです。
ボーレートとは、通信における変調の単位を表わすものです。慣用的にボーレ
ートと読んでしまうことは責められませんが、実際には誤りであることを覚え
てください。
■ベストエフォート
「オレの通信環境は 1Mbpsなのに何故遅いのか!?」といった疑問を持つ人が
います。1Mbps=125KB は確かに速い速度です。しかしどうしてでしょう?
あなたが契約している通信会社のパンフレットには「ベストエフォート」と
いう文字があるハズです。このベストエフォートという意味は早い話、運がよ
ければその速度を体験できますが、決してその速度を保証しているわけではな
い、という意味です。同じ回線に複数の人がアクセスすれば、速度はその数に
比例して落ちてきます。ネットワークとは、1つの回線の共有を意味している
関係で仕方がありません。専用回線なら別ですが・・
ちなみに、光ケーブル(FITH)の場合、本来なら 100Mbpsですが、実際には
15〜65Mbpsといったところでしょう。それでも十分に速いのですが。
ADSLの場合には、非常に高い変調周波数を利用しているので、距離による減
衰が著しく、通信基地から2キロメートル以上では、本来の速度を体験するこ
とができません。決してパンフレットにある速度を期待してはいけません。
CATV や FITHでは距離による減衰がない替わりに、ネットワークを利用する
人数によって速度が出ないことを覚えてください。決してパンフレットがウソ
をついているわけではありません。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
◆ActiveX(プラグイン)技術特許問題回避の方法
今年9月、米国Eolas社がマイクロソフト社の MSIEを訴え勝訴とは周知のとお
りです。そのため、MSIEは来春早々に変更を予定していますが、その内容という
のは、ActiveXを動作させるときに、必ず警告ウィンドウを出すということです。
つまり、ページが表示されたときに「自動的」に ActiveXを動作させるのでは
なく、ユーザの操作によって行うということで、特許に関する問題をクリアする
という「姑息」な手段となったのです。
特に、マクロメディア社の Flashを多用したサイトでは決定的なダメージを受
けかねない処置になります。つまり Flashがロードされる度に警告ウィンドウが
出されるので、ユーザにとっても「うっざったい」現象となります。
こうしたことを解決するために、JavaScriptによってオブジェクトを表現させ
る方法が有効であることが分かっています。
ここでは、実際のJavaScriptを利用して Flashムービーなどを表示させるスク
リプトを紹介します。
■外部JavaScript
作成するJavaScriptは、外部に置くJavaScript文書とします。つまり、HTMLと
は切り離した格好でオブジェクトを読み込み実行させるものです。外部スクリ
プトにすることで、多にページにも再利用することができるので Flashを多用
しているサイトでは有効です。
JavaScriptのプログラムは以下のとおりです。コピーしてお使いください。
function AC_RunFlContent() {
AC_AddExtension(arguments, "movie", ".swf");
AC_AddExtension(arguments, "src", ".swf");
var codebase = AC_GetCodebase
("http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=","7,0,0,0",arguments); //改行せずに1行で記述
AC_GenerateObj
("AC_RunFlContent()",false "clsid:d27cdb6e-ae6d-11cf-96b8
-444553540000", codebase,"http://www.macromedia.com/shockwave/
download/index.cgi?P1_Prod_Version=ShockwaveFlash","application/
x-shockwave-flash", arguments); //改行せずに1行で記述
}
このをスクリプトのファイル名と拡張子を「sample_01.js」としてください。
次に、もう1つ外部スクリプトを必要とします。
function AC_AddExtension(args, paramName, extension) {
var currArg, paramVal, queryStr, endStr;
for (var i=0; i < args.length; i=i+2){
currArg = args[i].toLowerCase();
if (currArg == paramName.toLowerCase() && args.length > i+1) {
paramVal = args[i+1];
queryStr = "";
var indQueryStr = args[i+1].indexOf('?');
if (indQueryStr != -1){
paramVal = args[i+1].substring(0, indQueryStr);
queryStr = args[i+1].substr(indQueryStr);
}
endStr = "";
if (paramVal.length > extension.length)
endStr = paramVal.substr(paramVal.length - extension.length);
if (endStr.toLowerCase() != extension.toLowerCase()) {
// Extension doesn't exist, add it
args[i+1] = paramVal + extension + queryStr;
}
}
}
}
function AC_GetCodebase(baseURL, defaultVersion, args) {
var codebase = baseURL + defaultVersion;
for (var i=0; i < args.length; i=i+2) {
currArg = args[i].toLowerCase();
if (currArg == "codebase" && args.length > i+1) {
if (args[i+1].indexOf("http://") == 0) {
codebase = args[i+1];
}
else {
codebase = baseURL + args[i+1];
}
}
}
return codebase;
}
function AC_sprintf(str){
for (var i=1; i < arguments.length; i++){
str = str.replace(/%s/,arguments[i]);
}
return str;
}
function AC_checkArgs(args,callingFn) {
var retVal = true;
if (parseFloat(args.length/2) != parseInt(args.length/2)) {
alert(sprintf(MSG_EvenArgs,callingFn));
retVal = false;
}
return retVal;
}
function AC_GenerateObj
(callingFn, useXHTML, classid, codebase, pluginsPage, mimeType, args){
if (!AC_checkArgs(args,callingFn)){
return;
}
var tagStr = '';
var currArg = '';
var closer = (useXHTML) ? '/>' : '>'; //XHTMLの場合に必要
var srcFound = false;
var embedStr = '<embed';
var paramStr = '';
var embedNameAttr = '';
var objStr = '<object classid="' + classid + '" codebase="' +
codebase + '"';
for (var i=0; i < args.length; i=i+2){
currArg = args[i].toLowerCase();
if (currArg == "src"){
if (callingFn.indexOf("RunSW") != -1){
paramStr += '<param name="' + args[i] + '" value="' +
args[i+1] + '"' + closer + '\n';
embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
srcFound = true;
}
else if (!srcFound){
paramStr += '<param name="movie" value="' + args[i+1] + '"' +
closer + '\n';
embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
srcFound = true;
}
}
else if (currArg == "movie"){
if (!srcFound){
paramStr += '<param name="' + args[i] + '" value="' +
args[i+1] + '"' + closer + '\n';
embedStr += ' src="' + args[i+1] + '"';
srcFound = true;
}
}
else if ( currArg == "width"
|| currArg == "height"
|| currArg == "align"
|| currArg == "vspace"
|| currArg == "hspace"
|| currArg == "class"
|| currArg == "title"
|| currArg == "accesskey"
|| currArg == "tabindex"){
objStr += ' ' + args[i] + '="' + args[i+1] + '"';
embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
}
else if (currArg == "id"){
objStr += ' ' + args[i] + '="' + args[i+1] + '"';
if (embedNameAttr == "")
embedNameAttr = ' name="' + args[i+1] + '"';
}
else if (currArg == "name"){
objStr += ' ' + args[i] + '="' + args[i+1] + '"';
embedNameAttr = ' ' + args[i] + '="' + args[i+1] + '"';
}
else if (currArg == "codebase"){
}
else{
paramStr += '<param name="' + args[i] + '" value="' + args[i+1] +
'"' + closer + '\n';
embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
}
}
if (!srcFound){
alert(AC_sprintf(MSG_SrcRequired,callingFn));
return;
}
if (embedNameAttr)
embedStr += embedNameAttr;
if (pluginsPage)
embedStr += ' pluginspage="' + pluginsPage + '"';
if (mimeType)
embedStr += ' type="' + mimeType + '"';
objStr += '>\n';
embedStr += '></embed>\n';
tagStr = objStr + paramStr + embedStr + "</object>\n";
document.write(tagStr);
}
ここまでをコピーして、「sample_02.js」として保存します。
次に、HTMLを以下のように記述します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>Flashムービーを再生するスクリプト</title>
<script src="sample_01.js" type="text/javascript"></script>
<script src="sample_02.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript" >
<!--
AC_RunFlContent ("allowScriptAccess", "sameDomain", "movie", "foo",
"quality", "high", "bgcolor", "#ffffff", "src", "foo", "width", "550",
"height", "400", "name", "foo", "align", "middle", "id", "foo" );
//-->
</script>
</body>
</html>
body要素内でのスクリプトの中で、各パラメータは自由に変更することができ
ます。例えば、 "bgcolor", "#ffffff" の場合 Flashムービーの背景色を変更
することができます。同じように "width" "height" なども任意に変更するこ
とができます。
また "foo" としているのは、Flashムービーのファイル名に当たりますので
あなたが作成した Flashのファイル名に変更してください。
この記述は、外部JavaScriptが、HTMLと同じディレクトリにあることを示し
ていますが、他のディレクトリにスクリプトファイルを置いた場合には、必ず
そのパス名を記述するようにしてください。
<script src="パス名/sample_01.js" type="text/javascript"></script>
JavaScriptによる Flashムービーの埋め込みサンプル
http://www.scollabo.com/banban/magazine/mm/sample_77-1.html
(たった3キロバイトのつまらないムービーサンプルです。)
■JavaScript をオフにしているユーザにはどう対応する?
今回説明した問題回避策は、JavaScriptに完全に依存するものです。しかし、
訪れるユーザのうち、JavaScript機能を「オフ」にしている可能性があります。
一般的にそのようなユーザは、これらの回避策を施したサイトであっても、
新しいMSIEでは埋め込みコンテンツを再生することができません。
JavaScriptを「オフ」にしているユーザの多くは、ActiveX サポート機能も
オフにしている傾向があります。そのような場合は、仕様変更が行われる前か
らブラウザ内での埋め込みコンテンツ再生を行っていないため、JavaScriptに
依存した解決法が無効であっても、インターネット体験に変化はありません。
むしろ、そうしたユーザのための代替コンテンツを用意するほうが賢明かも
しれません。
■ダウンロード
JavaScriptを作成すのが面倒くさいという方のために、「今週のおさらい」の
ページでダウンロードできるようにしましたので、興味のある方はダウンロー
ドしてください。
基本的な利用法を示した説明書もありますので、ご利用の際に参照してくだ
さい。なお、ダウンロードファイルは、再配布して頂いてもかまいません。ご
自由にお使いください。
ダウンロードファイルは ZIP形式のみで提供しています。この圧縮ファイル
は専用のソフトが必要になる場合があります。インターネット上には多数の解
凍ソフトがフリーで入手できますので探してください。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
今回はここまで、ではでは・・
今週のおさらいは Webページにも掲載しましたので、是非見ておいてください。
Webページでは HTML文の実行結果のサンプルもあり、より分かりやすく説明して
います。あわせて過去の記事のおさらいも掲載しています。
(今週のおさらい)
http://www.scollabo.com/banban/magazine/review_077.html
次回は、12月12日に配信を予定しています。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
質問・ご意見ははこちらまで→ banban@scollabo.com
なお、ご質問の際には、あなたがお使いのOSや Webブラウザ、テキストエデ
ィタなど、なるべく分かりやすく制作環境を明記していただけると回答しやすく
なると思います。
ただし、個人的な事由により返事が遅れることがあります。ご了承ください。
お急ぎの場合には、当サイト内の掲示板をご利用ください。きっと誰かが答えて
くれると思います。
発行者 ばんばん
協 力 スズキ・コラボレーション http://www.scollabo.com/
配信エンジン まぐまぐ http://www.mag2.com/ (ID 0000090196)
誤字・脱字・変換ミス・表現欠乏などには、平にご容赦願います。
バックナンバー こちらで公開しています。
プレーンテキスト http://www.scollabo.com/banban/magazine.html
各号のおさらい http://www.scollabo.com/banban/magazine/
アーカイブ http://www.scollabo.com/banban/daf/archive.html
まぐまぐの過去記事 http://backno.mag2.com/reader/Back?id=0000090196
配信の変更・中止はこちらです。
個別の手続きは受け付けていませんので、ご面倒でも各自でお願いできれば助か
ります。
当サイトにて http://www.scollabo.com/banban/magazine/top.html
まぐまぐにて http://www.mag2.com/m/0000090196.htm
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
<えでぃた〜ず・る〜む>
12月ともなると冬も本格的になって、このところ寒い日が続きます。何だかん
だと言って今年も1ヶ月を切りました。本当に早いものです。
わけあって今年いっぱいで会社を辞めることになります。来年春には独立する
予定です。会社形式でやるのか、個人事業でやるのか細部は煮詰めていませんが
とりあえず自分1人で自由で独創的な仕事に打ち込みたいと思っています。
幸いにも応援してくれるクライアントがいるので、当分は食べるのに困ること
はないと思います。
そんなわけで、来週から来年4月までの間、滅茶苦茶忙しくなりそうです。そ
れでもメールマガジンだけは続けていきたいと考えています。今後もよりいっそ
うのご愛読をお願いします。こいつだけは商売抜きです。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
◆著作権について
個人がご自分のPCに保存して利用する以外の記事の転載、引用は基本的に応じ
ておりません。記事中の内容について、無断で使用することを固く禁じます。
なお、記事中のスタイルシート、HTML、スクリプトなどをご自分のページ作成
に自由に使っていただいても差し支えありません。
Copyright(C) 2002-2003 www.scollabo.com/banban/
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
最新更新日 2003/12/9
Copyright(C) 2002-2003 banban@scollabo.com