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

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

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

CCNA1のお勉強をゆるーくやってみる。その9:無線LAN。

2007-11-12 18:43:26 | 一人勉強会

 シリーズ「CCNA1のお勉強をゆるーくやってみる」です。
 今、物理層の話です。
 物理層におけるメディアは、銅線、光ファイバ、無線(LAN)とあります(機器は、リピーター、ハブ、トランシーバーなどあり、機器とメディアを結ぶものとしてコネクタがあります)。

 で、銅線、光ファイバは今までの話でやったので、今度は無線LANです。




■無線LANの規格

 無線LANには、いくつかの規格があり、それにより、伝送速度が違います
   802.11   1~2Mbpsらしい
   802.11b   11Mbps
   802.11a   54Mbps(注意:aとbの順番。今bを先に書いてる)

 なお、802.11gは、aとbの両方に対応しています。802.11aが5GHz、802.11bは2.4GHzで動きます。




■無線LANに必要なもの

 クライアントには無線LAN用のNICが必要になり、このNICには、PCに内臓しているもの、PCMCIAカードのもの、USBのものなど、いろいろあります。

 そして、中継点として、アクセスポイントが必要です。このアクセスポイント(AP)の置く間隔ですが、アクセスポイントが届く範囲をセルとよばれますが、このセルの範囲が重なるようにします(ローミングという。20~30%のかさなりがいいらしい)。




■送受信手順

 クライアント側が起動されると、接続可能なAP(アソシエート)のスキャニングが開始されるのですが、このスキャニングに、アクティブとパッシブがあります。

 アクティブ・スキャニングは、
(1)クライアントからAPにむけて、プローブ要求(応答要求)を送信
(2)APが応答する。

パッシブスキャニングは
(1)はじめにAPが、ビーコンを出している
(2)それをクライアントが受信する

このアクティブにおいてもパッシブにおいてもSSID(サービスセット識別子)がサーバーとクライアントで一致した場合、認証・アソシエーションできます。
 ただし、このSSIDは暗号化されないため、無防備に出すと危険なので、最近は、「SSIDステルス」などという手法があり、一概に、「●●に含まれる」とはかけないので、どこに入るか詳しくは書いていません。
 興味のある方は、こちらを参照。

ってことで、送るフレームは、
  ・プローブ要求/応答フレーム
  ・ビーコンフレーム
があり、その他
  ・アソシエーション要求/応答フレーム
  ・認証フレーム
を管理フレームと呼ぶようです。

このほかに、制御用の制御フレームとして
  ・RTS(送信要求)
  ・CTS(送信クリア)
  ・ACK(確認応答)

さらに、データフレームがあるみたい。

 それと、信号が弱くなると、通信速度をおとします。この際ARS(適応型レート選択)を行い、11M→5.5M→2M→1Mと落としていきます。




■認証とセキュリティ

 認証は、SSIDによって行われますが、これだけでなく、WEP(無線等価プロトコル)による暗号化を行ったキーで行う場合もあります。

 さらにセキュリティを強化するため(このようなレイヤ2の認証だけでなく、レイヤ3の)VPNによるセキュリティをかける場合もあります。
 EAP-MD5チャレンジや、LEAP(シスコ社独自のプロトコル)などがそれです。




■ノイズ
 信号を妨害するものとして、ノイズがあります。とくに、Bluetoothが影響を及ぼすこともあります。ノイズは特定の周波数に出ている場合と、全体に出ている場合があります。雷なども原因になります。

 なお、霧や湿度が高くても無線ネットワークに影響がでる可能性があります




ってなかんじです。次回から、もういっかい、銅線にもどって、銅線の品質のおはなしです。




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

オブジェクト指向で開発の最初から最後までの手順例-その32-2:雛形(5)の続き

2007-11-12 17:13:33 | 開発ネタ
 
オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」(ちなみに、バックナンバーは、ここ)、さっき、ソースしか(字数制限のため)かけなかったので、続きを書きます。




 まず、現在、「いままでのまとめ」にある、「(4)フレームワークにもとづき、クラスなどの開発手順、雛形の確定」をやっていて、

今、DBアクセスのサンプルプログラムについてです。

 29回は共通部分、31回は、仕様とその使い方を書いたので、32回で、その共通部分を使ったサンプルソースを載せまました。
 なお、32回のソースは、30回に示した、消費税テーブルの内容に基づいて作っています。

 今回書く内容(=前回書ききれなかった内容)は、前回(32回)で示したソース、SHOHIZEI_TBLクラスの使い方についてです。




■使い方

●トランザクションを利用する場合は、
(1)共通処理のクラス、MyConnectionを生成し、

(2)SHOHIZEI_TBLクラスを生成します。

(3)
public Vector select(HashMap map,Vector where)
public int insert(HashMap taisho)
public int del(HashMap taisho)
public int update(HashMap taisho,Vector where)
  を適当に実行します。
  このとき、insert,del,updateでは
  (1)のMyconnectionを、taishoのハッシュマップにセット
  (キーMyConnection)

(4)エラーがなく、保存してOKなら、(1)で生成したMyConnectionの
   commitを実行。途中でエラーがあったり、保存したくなければ、
   rollbackを実行


●トランザクションを利用しない場合、

(1)SHOHIZEI_TBLクラスを生成します。

(2)
public Vector select(HashMap map,Vector where)
public int insert(HashMap taisho)
public int del(HashMap taisho)
public int update(HashMap taisho,Vector where)
  を適当に実行します。

taishoのハッシュマップに、キーMyConnectionがないので、
オートコミットします。




ってなかんじです。次回はこれらのソースを元に、雛形を作ります。


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

オブジェクト指向で開発の最初から最後までの手順例-その32:雛形(5)

2007-11-12 15:04:29 | 開発ネタ

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」です。
すみません。いろいろ書いていると規定字数を超えるので、すぐに本題。今回は、共通部分を使ったサンプルソースです。




■サンプルソース(SHOHIZEI_TBL.java)
import java.util.*;
import java.sql.*;
/*
 * クラス:消費税テーブル
 * 
 */
public class SHOHIZEI_TBL {

	/*
	 * 検索<BR>
	 * @param	HashMap	taisho	検索対象、NULLのとき、*(全部)
	 * @param	Vector	where	条件、NULLのとき、無条件、
	 * @return	Vector	結果(1レコード1ハッシュマップで入っている)
	 */
	public	Vector	select(HashMap map,Vector where)
	{
      		
		StringBuffer sqlbuf = new StringBuffer("SELECT ");
      	         if ( map	==	null )
      	         {
      		        sqlbuf.append("*");
      	         }
                  else
      	     {
      		String[] taisho	=(String[])map.keySet().toArray(new String[0]);
      		for(int i = 0 ; i < taisho.length ; i ++ )
      		{
      			if ( i	>	0 )
      			{
      				sqlbuf.append(",");
      			}
      			sqlbuf.append(taisho[i]);
      		}
      	         }	
      	         sqlbuf.append(" FROM SHOHIZEI_TBL ");

		String	wstr = makeWhere(where);
		if( ( wstr	!=	null ) && (wstr.trim().length() > 0 ) )
		{
	      	sqlbuf.append(" WHERE " + wstr);
		}
		
		return	selectExec(sqlbuf.toString());
	}

	/*
	 * 追加<BR>
	 * @param	HashMap	taisho	対象、NULLのときエラー
	 * @return	int		0:OK,1:Error
	 */
	public	int	insert(HashMap taisho)
	{

		String	SHOHI_ID	=(String)taisho.get("SHOHI_ID");
		String	ZEIRITU	=(String)taisho.get("ZEIRITU");
		String	ZEIKUBUN	=(String)taisho.get("ZEIKUBUN");

		int	out_flg;
			
		//	SQL文の書き出し
      	StringBuffer sqlbuf = new StringBuffer("INSERT INTO SHOHIZEI_TBL(");

		//==========================//
		//	項目名の書き出し
		//==========================//
		out_flg	=	0;

		if ( SHOHI_ID	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				sqlbuf.append(",");
			}
			sqlbuf.append("SHOHI_ID");
		}      		

		if ( ZEIRITU	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				sqlbuf.append(",");
			}
			sqlbuf.append("ZEIRITU");
		}      		

		if ( ZEIKUBUN	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				sqlbuf.append(",");
			}
			sqlbuf.append("ZEIKUBUN");
		}      		


		//	VALUES句      		
		sqlbuf.append(") VALUES (");
		
		//==========================//
		//	データの書き出し
		//==========================//
		out_flg	=	0;

		if ( SHOHI_ID	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				sqlbuf.append(",");
			}

			sqlbuf.append("");
			sqlbuf.append(SHOHI_ID);
			sqlbuf.append("");
		}      		

		if ( ZEIRITU	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				sqlbuf.append(",");
			}

			sqlbuf.append("");
			sqlbuf.append(ZEIRITU);
			sqlbuf.append("");
		}      		

		if ( ZEIKUBUN	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				sqlbuf.append(",");
			}

			sqlbuf.append("'");
			sqlbuf.append(ZEIKUBUN);
			sqlbuf.append("'");
		}      		

		//	おしまい部分      		
		sqlbuf.append(")");

		//	実行
		MyConnection con = (MyConnection)taisho.get("MyConnection"); 
		return	exec(sqlbuf.toString(),con);
	}

	/*
	 * 削除<BR>
	 * @param	HashMap	taisho	対象、NULLのとき、全削除
	 * @return	int		0:OK,1:Error
	 */
	public	int	del(HashMap taisho)
	{
		//	SQL文の書き出し
      	StringBuffer sqlbuf = new StringBuffer("DELETE FROM SHOHIZEI_TBL");
		if ( taisho	!=	null )
		{
			String wrec = whereOneRec(taisho);
			if ( ( wrec != null ) && (wrec.trim().length() > 0 ) )
			{
				sqlbuf.append(" WHERE ");
				sqlbuf.append(wrec);
			}
		}
		MyConnection con = (MyConnection)taisho.get("MyConnection"); 
		return	exec(sqlbuf.toString(),con);
	}

	/*
	 * 更新<BR>
	 * @param	HashMap	taisho	対象、NULLのとき、全削除
	 * @return	int		0:OK,1:Error
	 */
	public	int	update(HashMap taisho,Vector where)
	{
		//	データチェック
		if ( taisho	==	null )
		{
			return	-1;
		}
		if ( taisho.size()	<=	0 )
		{
			return	-1;
		}

		//	SQL文の書き出し
      	StringBuffer sqlbuf = new StringBuffer("UPDATE SHOHIZEI_TBL SET ");
		String rec = setOneRec(taisho);
		if ( rec	==	null )
		{
			return	-1;
		}
		sqlbuf.append(rec);

		String	wstr = makeWhere(where);
		if( ( wstr	!=	null ) && (wstr.trim().length() > 0 ) )
		{
	      	sqlbuf.append(" WHERE " + wstr);
		}
		
		MyConnection con = (MyConnection)taisho.get("MyConnection"); 
		return	exec(sqlbuf.toString(),con);
	}

	/*
	 * SQL実行<BR>
	 * @param	HashMap	taisho	対象、NULLのとき、全削除
	 * @return	int		0:OK,1:Error
	 */
	public	int	exec(String cmd,MyConnection oldcon)
	{
		try
		{
				
			//	コネクションがない場合:トランザクション処理していない
			if ( oldcon	==	null )
			{
   	   			Class.forName(MyConnection.MyDriverName);
      			Connection con =
                             DriverManager.getConnection(MyConnection.MyURL,
                             MyConnection.MyUserName,MyConnection.MyPassword);
      			Statement stmt = con.createStatement();
	  			stmt.execute(cmd);
      			stmt.close();
      			con.close();
			}
			else
			{
				oldcon.stmt.addBatch(cmd);
			}
   		} 
   		catch (Exception e)
   		{
     			e.printStackTrace();
     			return	-1;
   		}
		return	0;
	}

	/*
	 * SQLの検索実行<BR>
	 * @param	HashMap	taisho	対象、NULLのとき、全削除
	 * @return	Vector	結果(1レコード1ハッシュマップで入っている)
	 */
	public	Vector	selectExec(String cmd)
	{
		Vector allData = new Vector();
		try
		{
      		Class.forName(MyConnection.MyDriverName);
      		Connection con =
                    DriverManager.getConnection(MyConnection.MyURL,
          MyConnection.MyUserName,MyConnection.MyPassword);
      		Statement stmt = con.createStatement();
      		ResultSet rs = stmt.executeQuery(cmd);
      		ResultSetMetaData meta = rs.getMetaData();
      		while(rs.next())
      		{
   				HashMap mp = new HashMap();
      			for(int i = 1 ; i <= meta.getColumnCount(); i ++ )
      			{
      				mp.put(meta.getColumnName(i),
                   rs.getString(meta.getColumnName(i)) );
      			}
   				allData.add(mp);		
      		}
      		stmt.close();
      		con.close();
    	}
    	catch (Exception e)
    	{
      		e.printStackTrace();
      		return	null;
    	}

		return	allData;
	}

	/*
	 * where句を作る
	 * @param	Vector	where
	 * @return	String	結果(1レコード1ハッシュマップで入っている)
	 */
	public	String	makeWhere(Vector where)
	{
		StringBuffer buf = new StringBuffer();
		
		if ( where	==	null )
		{
			return	null;
		}
		else if ( where.size()	==	0 )
		{
			return	null;
		}
		else
		{
			if ( where.size()	==	1 )
			{
				buf.append(whereOneRec((HashMap)where.elementAt(0)));
			}
			else
			{
				for(int i = 0 ; i < where.size() ; i ++ )
				{
					if ( i	==	0 )
					{
						buf.append("( ");
					}
					else
					{
						buf.append("OR ( ");
					}
					buf.append(whereOneRec((HashMap)where.elementAt(i)));
					buf.append(" ) ");
				}	
			}
		}
		return buf.toString();
	}

	/*
	 * where句の検索条件のAND1個分を作る
	 * @param	HashMap	taisho
	 * @return	String	結果(1レコード1ハッシュマップで入っている)
	 */
	public	String	whereOneRec(HashMap taisho)
	{
		return makeOneRec(taisho," AND ");	
	}

	/*
	 * set句の更新条件を作る
	 * @param	HashMap	taisho
	 * @return	String	結果(1レコード1ハッシュマップで入っている)
	 */
	public	String	setOneRec(HashMap taisho)
	{
		return makeOneRec(taisho," , ");	
	}
	
	/*
	 * where句の検索条件のAND1個分を作る
	 * @param	HashMap	taisho
	 * @return	String	結果(1レコード1ハッシュマップで入っている)
	 */
	public	String	makeOneRec(HashMap taisho,String kugiri)
	{
		StringBuffer buf = new StringBuffer();

		String	SHOHI_ID	=	(String)taisho.get("SHOHI_ID");
		String	ZEIRITU	=	(String)taisho.get("ZEIRITU");
		String	ZEIKUBUN	=	(String)taisho.get("ZEIKUBUN");

		int	out_flg	=	0;


		if ( SHOHI_ID	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				buf.append(kugiri);
			}

			buf.append("SHOHI_ID ");
			char	c = 0;
			if ( SHOHI_ID.length()	>	0 )
			{
				c	=	SHOHI_ID.charAt(0);
			}
			switch(c)
			{
			case	'<':
			case	'>':
			case	'=':
				buf.append(SHOHI_ID);
				break;
			case	'"':
				buf.append("=");
				buf.append(SHOHI_ID);
				break;
			default:
				buf.append("= ");
				buf.append("");
				buf.append(SHOHI_ID);
				buf.append("");
				break;
			}
		}

		if ( ZEIRITU	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				buf.append(kugiri);
			}

			buf.append("ZEIRITU ");
			char	c = 0;
			if ( ZEIRITU.length()	>	0 )
			{
				c	=	ZEIRITU.charAt(0);
			}
			switch(c)
			{
			case	'<':
			case	'>':
			case	'=':
				buf.append(ZEIRITU);
				break;
			case	'"':
				buf.append("=");
				buf.append(ZEIRITU);
				break;
			default:
				buf.append("= ");
				buf.append("");
				buf.append(ZEIRITU);
				buf.append("");
				break;
			}
		}

		if ( ZEIKUBUN	!=	null )
		{
			if ( out_flg	==	0 )
			{
				out_flg	=	1;
			}
			else
			{
				buf.append(kugiri);
			}

			buf.append("ZEIKUBUN ");
			char	c = 0;
			if ( ZEIKUBUN.length()	>	0 )
			{
				c	=	ZEIKUBUN.charAt(0);
			}
			switch(c)
			{
			case	'<':
			case	'>':
			case	'=':
				buf.append(ZEIKUBUN);
				break;
			case	'"':
				buf.append("=");
				buf.append(ZEIKUBUN);
				break;
			default:
				buf.append("= ");
				buf.append("'");
				buf.append(ZEIKUBUN);
				buf.append("'");
				break;
			}
		}
 		
		return	buf.toString();
	}
}

(上記 < > ¥は、本当は半角)

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

米ディズニー、来春にも日本のケータイ電話市場に参入

2007-11-12 07:39:12 | Weblog

ここのスラッシュドットニュース
米ディズニー、来春にも日本のケータイ電話市場に参入
http://slashdot.jp/mobile/07/11/11/1357253.shtml

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


NIKKEI NETの記事によれば、ウォルト・ディズニーの日本法人とソフトバンクは、日本の携帯電話事業での包括提携で大筋合意に達し、来春をめどにソフトバンクモバイルの通信網を借り、MVNO(仮想移動体通信事業者)として一般向けの携帯電話事業に参入する。


そうな。ほー。。
ちなみに、ディズニー、アメリカでは

昨年MVNOとして米国の携帯電話市場にDisney Mobileとして参入したが、動画配信サービスに不可欠な第三世代携帯の普及が遅れていたり、端末の販売拠点確保にも失敗するなどしたため、2007年12月31日にサービスを中止するという。


で、日本参入にあたり、

今回日本に進出するにあたっては、キャラクターをデザインした端末やディズニーアニメの優先配信などで競合他社と差別化を図る


そうで、で、実際の販売は

ディズニー端末の販売拠点が全国のソフトバンクモバイル販売店となるようだ。



そーいえば、最近、ソフトバンクの看板宣伝に、スヌーピーやハローキティーが
でてませんでしたっけ?

ソフトバンク、キャラクターものでいく??



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