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

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

ケータイのデータ専用カードでケータイ回線使い、セキュアな環境でイントラネットにつなぐ方法。。

2006-10-23 17:37:13 | ケータイ

 について、知ってる?って聞かれて、しらべてみた
 (注:ケータイでの話をしています。PHSのデータ通信ではなく)

 たぶん、話の前後の文脈から察するに

http://www.kddi.com/business/service/intranet/remote_access/cpa.html

のページに出ている、イントラ接続型「WIN DATA CARD定額サービス」のことを言っているのだろう、きっと(>_<!)

ちなみにそこには、こう書いてある(以下斜体は上記サイトより引用)

イントラ接続型「WIN DATA CARD定額サービス」

               (8月より提供開始予定)

 イントラ接続型「WIN DATA CARD定額サービス」は、パソコンからauデータ通信専用カード「W01K」を使用して、KDDIのリモートアクセスサービス「CPA (cdma Packet Access)」経由で、企業のイントラネットへ接続するパケット通信料を定額で提供するサービスです。
 法人のお客さまがCPAと同一名義で契約するauデータ通信専用カード「W01K」と、インターネットを経由せず、セキュアなリモートアクセスが可能な「CPA」を利用して、パソコンからあらかじめ指定した企業イントラネットの接続先へアクセスした際のパケット通信料を定額で提供するサービスです。

提供料金 月額8,800円 (税込: 9,240円)/回線


2ヶ月前に、こんなのがでていたのね。。。
なんか、すげーみんな情報はえーなー(>_<!)

これじゃあ、まいにち、ドコモとKDDIとソフトバンクのサイトみなくちゃなんないよお。。

やっぱ、ニュースリリースのRSS、登録しておこうかなあ。。。




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

Javaの画面表示-その10:Swingによる画面表示(AWTとの違い)

2006-10-23 15:26:07 | Weblog

 シリーズJavaの画面表示のつづきです。
 前回まで、AWTで表示させてきました。
 今回は、軽量コンポーネントであるSwingで 同じことをさせてみたいと思います。




■変更点の概要

 といっても、SwingとAWTの違いは、実は少ないです。
 そのちがいは
1.javax.swing.*をインポートします(あたりまえ ^^;)
2.画面部品に、Buttonだったのが、JButtonのように、Jがついたものを使います
3.AWTのときは、Frameに対して、画面部品をAddしていたのに、
  こんどは、Containerというのを取得し、それに対してAddします。
4.setSize、setVisible、disposeは、フレームに対して行いますが、
  setLayoutは、Containerに対して、行います。




■ソース

 ということで、前回のAWTを使って作ったgamen1.javaを、
 Swingをつかって、書き表すと、こんなかんじです。ほとんど、違わないのが分かると思います。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class gamen1 {
	
	//	共通領域
	public HashMap	map = null;

	//	モデル
	public Shori	shori = null;	
	//	画面項目項目
	JFrame		ff;
	Container 	f;
	JButton		b1;
	JButton		b2;
	JTextArea 	t1;
	
	int		seikai 	=	0;
	int		phaseNo	=	0;
	int		curno	=	0;

	/*
	 * 	生成
	 */
	public gamen1(HashMap map)
	{
		this.map = map;
		map.put("gamen1",this);

		this.shori = (Shori)map.get("shori");

		initAppData();
	}

	/*
	 * 	表示
	 */
	public void initAppData()
	{
		
		//	フレームを作成する
		ff	=new JFrame("test");
		f = ff.getContentPane();
		ff.setSize(240,320);
		f.setLayout(null);

		//	アクションを作成する
		gamen1_HandleEvent al = new gamen1_HandleEvent();

		//	ラベル
		JLabel l1 = new JLabel("早うちの練習");
		l1.setLocation(10,30);
		l1.setSize(100,30);
		f.add(l1);

		JLabel l2 = new JLabel("これは、練習文です。");
		l2.setLocation(10,120);
		l2.setSize(150,30);
		f.add(l2);

		JLabel l3 = new JLabel("以下の文を打とう!");
		l3.setLocation(10,70);
		l3.setSize(100,30);
		f.add(l3);

		//	テキスト
		t1 = new JTextArea();
		t1.setLocation(10,160);
		t1.setSize(150,80);
		f.add(t1);
		
		//	ボタン作成		
		b1 = new JButton("挑戦する");
		b1.setLocation(120,70);
		b1.setSize(100,30);
		b1.addActionListener(al);
		f.add(b1);

		//	ボタン作成		
		b2 = new JButton("打ち終わった!");
		b2.setLocation(10,250);
		b2.setSize(100,30);
		b2.addActionListener(al);
		f.add(b2);

		//	表示
		ff.setVisible(true);
		DispAppData();

	}

	/*
	 * 	再描画
	 */
	public void DispAppData()
	{
		//	画面間引数を受け取る		
		String rensyu = "";
		if ( map	!=	null )
		{
			rensyu	= (String)map.get("rensyu");
			if (rensyu	==	null )
				rensyu = "";
		}

		//	画面表示
		if ( t1 != null )
		{
			t1.setText(rensyu);
		}

	}
	
	/*
	 * 	終了
	 */
	public void freeAppData()
	{
		//	2度目にもとってきたときのため、初期化
		map.remove("rensyu");
		phaseNo	=	0;
		curno	=	0;

		String dis = (String)map.get("dispose");
		if ( dis == null )
			return;
		if ( dis.equals("yes")	==	true )
		{
			ff.dispose();
			map.remove("gamen1");	
		}
	}
	
		
	/*
	 * 	イベントリスナー
	 */
	private class gamen1_HandleEvent 
			implements ActionListener
	{

		/*
		 * 	ボタンが押されたときの処理
		 */
		public void actionPerformed(ActionEvent e)
		{

			Object o = e.getSource();

			if ( o.equals(b1)== true)
			{	//	挑戦する
				System.out.println("挑戦する");
				
				//======================//
				//	内容の取得     //
				//======================//
				map.put("rensyu",t1.getText());
				
				//======================//
				//	処理	      //
				//======================//
				if ( shori	==	null )
					return;
				shori.shori1();

				//======================//
				//	次の画面処理   //
				//======================//
				phaseNo	=	1;
				curno	=	1;
				DispAppData();
				return;
			}

			if ( o.equals(b2)== true)	
			{	//	打ち終わった!

				//======================//
				//	内容の取得     //
				//======================//
				map.put("rensyu",t1.getText());

				//======================//
				//	処理	      //
				//======================//
				if ( shori	==	null )
					return;
				shori.shori2();
				
				//======================//
				//	次の画面処理   //
				//======================//
				//	第二画面表示
				gamen2 g2 = (gamen2)map.get("gamen2");
				if ( g2 == null )
				{
					g2 = new gamen2(map);
				}
				else
				{
					//	再描画
					g2.DispAppData();
				}
				//	消す
				freeAppData();
			}
		}
	}
}

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

 上記の赤字の部分が変更箇所です。といっても、Jが前につくとか、
その程度の変更であって、ロジックはそんなに変更されていません
(というか、できるだけ変更しないようにして、書いています)。




でも、実際に開いてみると、第一画面の印象は、かなり違うと思います。
まあ、そんなもんです(どんなもんなんだ ^^;)

ということで、Swing編は、おしまいにしたいと思います。

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

仕様書からプログラムソースを生成する方法(一般論)

2006-10-23 12:43:00 | ケータイ

 シリーズBREWで複数画面を開発する場合の方法論を書いていたのですが、次のお話は、Excelの画面仕様書から、BREWプログラム画面の自動生成になります。

 ただ、この話を書く前に、先々、Excelの画面仕様書から、JavaのAWTのソースを自動生成するというのを書きますので、そのときのことも考えて、今回はまず、一般的な仕様書から、プログラムソースなどを生成する方法についてかきます。




■概要
 仕様書から、プログラムソースを自動生成するシステムは、以下の感じになります。


  雛型ソース  → 「変換プログラム」   → プログラムソース
              ↑
           仕様書(ファイル)

 

●雛型ソース
 入力となるソースです。この雛型ソースをもとに、プログラムソースを作成します。
 雛型ソースには、仕様書から値が入るところや、繰り返しの部分に、記号を入れておきます。

 たとえばこんなかんじ
void initFunc(IKHUser *pUser)
{
	$#$CELL B1$#$	*pMe;

	if ( pUser	==	NULL )
		return;

	pMe	= ($#$CELL B1$#$ *)pUser->pMe;

	switch(pUser->kind)
	{
$#$REP 5$#$
	case	USER_ITEM_$#$KETA A$#$:
		$#$KETA K$#$_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
$#$REPEND$#$
	}
}
 
(上記>は、本当は半角です)

$#$で始まっているところが、繰り返しとかを指定する制御記号です
$#$制御内容 引数$#$の形になっています。

上記は、ExcelやCSV用で
$#$REP 行数$#$ 繰り返し(指定行数から開始)
$#$REPEND$#$ 繰り返し終了
$#$CELL セル$#$ 指定したセルが入る
$#$KETA 桁$#$  繰り返し時、指定された桁が入る

となっています。ちなみに、これが、XMLだと
$#$REP タグ$#$ 繰り返し(引数のタグのあるだけ、繰り返す)
$#$REPEND$#$ 繰り返し終了
$#$タグ$#$   タグの値が入る

という形になります。本当はもっと複雑なのにすることもあるのですが、
今日の説明はここまでにします。




●仕様書
 ExcelやCSV,XMLなどで作成します。
 なお、Excelの場合は、仕様書そのものを使うのではなく、一回作業ファイルを作って(それはユーザーから見えなくしておく)それを書き出す場合もあります。

例:
上記の雛型ソースにいれるExcel仕様書の例

(ここで、K桁は、本当は非表示にしますけど、
 それだと、どういう風にしているかわからないので、
 あえて、表示させて、そこに書かれている関数が見えるようにしています)




●変換プログラム

 Excelの場合は、Excelマクロで作ってしまい事が多いです。
 もちろん、JavaでPOIを使って操作してもいいのですが、そこまでするなら、ExcelをCSVで書き出してしまって、そのCSVを操作したほうが早いです。

 なお、Excel以外のドキュメントの場合、とくにXMLの場合は、Javaなり、VC++なり、いろんな言語で操作することになります。

 やる内容は

1.雛形ファイルを読み込む
2.雛形ファイルの制御記号(例だと#$#)をさがし、その内容にしたがって、
  仕様書を読み込み、出力内容をつくっていく
3.出力する

 ということになります。




●プログラムソース

 変換結果にもとづき、出力するファイルです。
 雛型にもとづき、別にJavaでも、BREWのソースでも、なんでもかまいません。




こんな感じが一般論です。
なに言ってるか良くわかんないかもしれませんが
具体的に作っていくと分かります。

では、このシリーズの次回は、とくにExcel仕様書の場合について、説明します。

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