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

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

村の紹介コンテンツって、戦略が必要だと思う。。。

2006-10-13 17:08:09 | Weblog

 マイクロソフトが、離島応援計画をはじめて(ここ)ブログが、もうスタートしているらしい(ここ)。

 なんか、この手のもんで、インターネットを使い始めると、たいてい

・インターネットはすばらしいです、世界中どこでも発信できます!

とかいいだして、

・なので、村のすばらしい風景を、ブログで配信して
・インターネットラジオで町の様子を語り
・村のイベントをネットで世界中に配信し
・さらには、村のあちこちにカメラを配備し、
  それを興味ある(都会の)人が24時間見れるようにする

とかいいだしそうだよねー。でも、これって、たぶん、効果は一時的だよね。。




なぜか。。。

インターネットで世界中に配信した場合、大して関心がない人がいっぱい見る。
そういう人は、飽きてきて見なくなる。。から。。

もっと、その村や町に関心のある人をひきつける方策を、戦略的に出していかないと、
長期的な話にはなりませんよね。。




そのためにはまず戦略が必要ですよね。。

自分たちの町は、観光地なのか、漁村としてやっていくのか、農村としてやっていくのか。。

観光地なら、上記のように、インターネットラジオで配信して。。
その受信者たちの住所氏名を、プレゼントとかで聞きだして。。
チャットで誘い出し。。。
などなどの戦略になってくるだろうけど、

魅力的な観光資源がない場合、やっぱり、農村なり、漁村なりで永住する人を連れてくるという形になるよね。




 で、じゃあ、農村、漁村に来る需要がないのかというと、そうではない。

 団塊の世代で第二の人生を歩もうとしている人や、負け組みの人で、ワーキングプアな人が、さすがに正社員のように、家族を持つとまでは行かなくても、電気・水道・ガスを止められない(^^;)人並みの生活を送りたいなどという人が、いまや、田舎の生活というものに注目しているわけだ。

 でも、そういう人たちに答える部分がないんだよねー。

 つまり、じゃあ、いきなり農業!っていっても、農業にはノウハウがあって(いつ種をまくなどなど)、それを習得しないと出来ないし、かならず、収穫できるというものでもなく、生活は安定しない。これは、農業だけじゃなく、漁業、牧畜すべての産業にいえることだと思う。

 なので、都会から田舎へ行こうとしている人に対して、インターネット配信で、地元の農業、漁業、牧畜その他もろもろのことを配信しているっていうやつが、本当は必要なんだと思う。

 田舎はいいですよー、みたいなうわべの話ではなく、

「もし、そこに住むとすると、この程度の土地が必要で、いくらの経費がかかって、作った作物はどこにもっていくと、いくらのお金が回収できる」とか、その地元名産の作物の作り方とか、相当具体的な話をみんなは求めているんだと思う。




 で、さらに具体的に知りたい人は、地元の役所や組合までっていうことで、窓口を設けると。。

 そこまでしても、たしかに実際に移住する人は少ないかもしれない。

 でも、移住まで行かなくても、具体的な話を聞きたいという人はやってきて、その人たちは、村にとまったり、食事をしたりと、お金を落としていくことになる。

 こういう地道な努力で、町や村って、活性化していくんだと思う。




 もちろん、この手の話っていうのは、最近は、田舎で学校みたいのを作って教えてくれたり、都会で農業実習みたいな講座があってやっているわけだけど、実際には、講座がいっぱいになっている状態だったり、忙しくっていけないっていうのが、実情だと思う。

 だから、ネットでそういう内容を配信したり、あるいは、ビデオ販売するとか、そういうのが必要になってくると思う。そして、疑問があったら、すぐに役場に聞けるようにして、ネット以外でのリアルな世界での付き合いができるようにしておく必要があると思う。

 そうすれば、村にその人たちが移住することになっても、それ以前から知り合いでスムーズにいけると思う。

 最近、きれいごとばかり並べて、田舎はいいよ、農業はいいよみたいな話があるけど、実際は、すぐに市場に卸せるような作物が作れるわけじゃないでしょ。そーすると、絶望感から、結局は移住しても都会に戻ってくることになると思う。やはり、移住以前からの付き合いと、知識というものがないと難しいんじゃないか。。




 そうして、移住する人が増えたり、村にお金を落とす人が増えてきて、はじめて、村に根付くひとがでてきて、そこから、孫が、田舎にやってきて。。。とかなって若い人たちも集まるようになるんだと思う。

 なんか、最近の田舎の政策っていうのは、「老人過疎化をどうする」=>「若い人たちをよぼう」と一足飛びに考えるから、思考に無理がでて、結局身にならないんだと思う。

 むしろ、都会の人が田舎の人に求める、「地元産業のノウハウ」や、「移住のための知識」というのを提供して、信頼関係を作っていく中で、過疎化問題っていうのは、解決していくんだと思う(ってなると、コンピューターなんて、どーでもいい話なんだけどね)




 ま、でも、そんなことやるより、農業用ロボットを大学と一緒に研究するっていうほうが、大学生は呼べるか(^^;)




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

Javaの画面表示-その4:複数画面表示

2006-10-13 17:06:07 | JavaとWeb

 シリーズJavaの画面表示のつづきです。今回は、新しい画面、第二画面を作成します。

 そうすると、画面が2つになってしまうので、1つの画面を消す方法について書きます。



■仕様

 いままでの第一画面で、「打ち終わったよ」が、クリックされたら、第二画面(画面の様子はここ%sには、値が入ります)を表示し、「終了」がクリックされたらおしまい、「再挑戦する」がクリックされたら第一画面を再度表示します。

 今回は、いろいろ処理すると面倒なので、固定値を渡して、第二画面を表示します。




■概要

 第二画面の作成は、前回の第一画面同様に作成します。
 値の引渡しですが、

 1.共通領域のハッシュマップ(map)に値を設定し
 2.第二画面のオブジェクトを生成し
 3.第一画面の共通領域を第二画面の共通領域に設定し
 4.第二画面の初期画面表示(initAppData)をすればいいです。

のようにします。
 第二画面では、共通領域から値をとってきて、それを表示します。

 ただ、こうすると、第一画面と第二画面、両方表示されてしまいます。
 第一画面は、消したいので、ここで、

   f.dispose();

 すればいいのですが、他のクラスから、第一画面を消したい場合もあるかもしれません。
 そこで、これをメソッドにすることにします。
 この処理は画面の最後にすることになるので、関数をBREWに合わせて
 freeAppData()とします。本当は何でもいいんですけど。。

(きのうのブログでfreeAppData()はない、とかきましたが、メモリを解放する、本来の意味でのfreeAppData()は確かにありません。ただ、最後に呼ぶべき関数という風に考えると、まあ、こいつをfreeAppData()ってしちゃってもいいかな。。と。。)




■第一画面の修正ソース
 そんなことを考慮して、第一画面を修正すると、こんな感じになります。
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class gamen1 {

	//	共通領域
	public HashMap	map = null;
	
	//	画面項目項目
	Frame 		f;
	Button		b1;
	Button		b2;
	TextArea	t1;

	/*
	 * 	表示
	 */
	public void initAppData()
	{

		//	フレームを作成する		
		f = new Frame("test");
		f.setSize(240,320);
		f.setLayout(null);

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

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

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

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

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

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

		//	表示
		f.setVisible(true);

	}

	/*
	 * 	終了
	 */
	public void freeAppData()
	{
		f.dispose();
	}
		
	/*
	 * 	イベントリスナー
	 */
	private class gamen1_HandleEvent 
			implements ActionListener
	{

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

			Object o = e.getSource();

			if ( o.equals(b1)== true)
			{	//	挑戦する
				System.out.println("挑戦する");
				return;
			}

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

				//	共通領域への値設定
				map.put("username","ウィリアムのいたずら");
				map.put("sei_ritu","50");
				map.put("byo","20");
				
				//	第二画面表示
				gamen2 g2 = new gamen2();
				g2.map	=	map;
				g2.initAppData();

				//	消す
				freeAppData();
			}
		}
	}
}





■第二画面の新規ソース
 今回作る、第二画面は、こんな感じになります。
import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class gamen2 {

	//	共通領域
	public HashMap	map = null;
	
	//	画面項目項目
	Frame 		f;
	Label 		l1;
	Label 		l2;
	Button		b1;
	Button		b2;

	/*
	 * 	表示
	 */
	public void initAppData()
	{

		//	画面間引数を受け取る		
		String usrename = "";
		String sei_ritu = "";
		String byo = "";
		if ( map	!=	null )
		{
			usrename	= (String)map.get("username");
			sei_ritu	= (String)map.get("sei_ritu");
			byo			= (String)map.get("byo");
		}

		//	フレームを作成する		
		f = new Frame("test");
		f.setSize(240,320);
		f.setLayout(null);

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

		//	ラベル
		l1 = new Label(usrename + "さんの結果");
		l1.setLocation(10,30);
		l1.setSize(220,30);
		f.add(l1);

		l2 = new Label("正解率"+ sei_ritu + "%" +"時間" + byo + "秒");
		l2.setLocation(10,120);
		l2.setSize(220,30);
		f.add(l2);

		//	ボタン作成		
		b1 = new Button("再挑戦する");
		b1.setLocation(10,250);
		b1.setSize(100,30);
		b1.addActionListener(al);
		f.add(b1);

		//	ボタン作成		
		b2 = new Button("終了");
		b2.setLocation(130,250);
		b2.setSize(100,30);
		b2.addActionListener(al);
		f.add(b2);

		//	表示
		f.setVisible(true);

	}

	/*
	 * 	終了
	 */
	public void freeAppData()
	{
		f.dispose();
	}
		

	
	/*
	 * 	イベントリスナー
	 */
	private class gamen2_HandleEvent 
			implements ActionListener
	{

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

			Object o = e.getSource();

			if ( o.equals(b1)== true)
			{	//	挑戦する
				System.out.println("再挑戦する");

				//	第一画面表示
				gamen1 g1 = new gamen1();
				g1.map	=	map;
				g1.initAppData();

				//	消す
				freeAppData();
				return;
			}

			if ( o.equals(b2)== true)	
			{	//	打ち終わった!
				System.exit(0);
			}
		}
	}
}






なお、スタートのtest.javaには、変更はありません。
これで、起動すれば、あとはうまくいくはずです。

ただ、これ、BREWのときは、いいんですけど、
Windowsの場合、別にマルチウインドウだから、2つ出してもかまわない。
っていうことで、このシリーズでの次回は、マルチウィンドウのケースを考えます。

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

農業用ロボットをケータイやニンテンドーDSで動かすってのは?

2006-10-13 15:26:42 | Weblog

 見えないところをまっすぐ歩くロボットというのを書いたら(ここ)、好評だったので、逆に、見えないで歩いているロボットを、見えるようにさせたら?という話を1つ。

 農業用ロボットってありますよね、って書いたら、「なにそれ!」といわれそうなので、
 まず、農業用ロボットの紹介ページを、紹介します。

 農業用ロボットの現状と未来
「田んぼにもハウスにもロボットがいるんだぞ」
http://www.nca.or.jp/shinbun/20050128/gakusyuu050128.html


岡山大愛媛大などで、開発してるみたいだけど、初めに紹介した、田んぼのロボットについて、今日は考えましょう。




 この田んぼロボット、目が見えないわけなのですが(つーか、目がないわけなのですが)、どーやって、制御しているかというと。。。


 これには、人工衛星の情報で位置を測るGPS(Global Positioning System、全地球衛星測位システム)がひと役買っています。自動車のカーナビで有名ですね。GPSで正確に測った走行ルートをたどりながら、コンピューターが電動モータで、ハンドルやアクセルなどを動かします。


 GPSを使ってるみたい。。でも、これじゃあ、細かいところまで、処理できませんよねえ。。
 田植えはいいけど、収穫だったら、実がなっている位置は違うし。。




 でも、そもそも、農作業やるときって、真っ暗なとき、あんまりしないですよね。
 つまり、明るいときにやります。
 だったら、ケータイで遠隔操作しても、ニンテンドーDSで遠隔操作しても、いいじゃん!
 ってことになりますよね。

 つまり、人型ロボットが、見ている画像をケータイとか、ニンテンドーDSに送って、そのケータイとかDSとかの端末から、ロボットを操作すると。。
 そーすると、その指示が、ネットを通じて、田植えしてるロボットに伝わると。。

 まあ、固定的な動きは、あらかじめ、簡単なコマンド(操作)で、できるようにしておいて。。
 手先の動き方の仕組みは、遠隔手術用ロボットの技術を使えば。。って、そこまで細かい技術はいらないか。。

 まー、ケータイやDSでは、画像的に無理ってなって、パソコンじゃないとダメかも知んないけど。。。




 そーすると、今の農業問題は、
 老人が農業をする=>からだがたいへん=>ロボット

 っていうしくみだけど、ゲーム感覚でできるとなれば、これからの団塊の世界の人や、フリーターのゲーム好きな人もやり始めるかもしれない。。

 で、土地は、老人で、もう田んぼを耕せないとか、休耕地になってしまったところを、売り出して。。。

 で、若い人が、ロボットを使ってゲーム感覚で農作業と。。。
 もちろん、老人がやってもOK

 別に全自動にしなくったって、重労働部分をロボットがやって、操作は、遠隔操作で人がやっても問題はない。そこまで自律させる必要はない。なんたって、DSを操作してゲームやるのが大好きな人は、いっぱい居るんだから。。。




 今後、中国やインドが力を付けてくると、食料が足りなくなって、日本も、農産物を輸入すると、恐ろしく高くなり、自給しなきゃいけない時代が、もーすぐ来る(いや、今来てるのかも。。)と思うんですよ。

 自給しないと、負け組みの人は食糧難になり、大正時代のように、米騒動が起きて、
 いまだと、スーパーに討ち入りが起こる(それはないか ^^;)

 そーいう意味で、農業用ロボットっていうのは、重要だと思います!!。
 国策として、取り上げるべきだと思います。
 情報大航海より。。。




 それと、村おこしにもいいかも。。。

 大学と共同開発して、ロボットができたら、その操作する人を、都会から募集すると。。。
 村に来る人が増えるかも。。

(すくなくとも、大学と提携して研究すれば、その大学の人は来るわけだし。。)


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

BREWで画面間メモリ一括管理(その4-IKHMap(共通領域)本体)

2006-10-13 12:59:50 | ケータイ

  シリーズ「BREWで画面間メモリ一括管理」(いわゆるBREW版カオル姫方式)の第4回目、今日は、いよいよ、その共通領域、連想配列を実現しているIKHMap本体です。




■ヘッダー(IKHMap.h)
こんな構造になっています。
typedef struct _IKHMap
{
	IShell			*pIShell;
	IDisplay		*pIDisplay;
	PFNNOTIFY		pUserFree;
	PFNNOTIFY		pUserInit;
	int			itemsu;
	char			**key;
	int			*kind;
	void			**val;
} IKHMap;

連想配列を実現しているのが、**keyと**valです。
 keyは、キーワードとなる言葉(文字列、char *)を保持している配列、
 valは、値となる領域(なんでもOKなようにvoid *)を保持している配列、
です。

おなじ、添え字番号のものが、対応することになります。
 たとえば、キー"name"に、"ウィリアムのいたずら"という値ガ対応しているとして、
 キーkey[1]="name"だったら、その値はval[1]="ウィリアムのいたずら"となってます。
 配列の要素数は、itemsuに入っています。
 kindは、valの型なのですが、今回は、文字列だけなので、IKHMAP_KIND_STRが入っています。
 他の項目は、今回は使いません(今後拡張するカオル姫方式2ndで利用)




■生成(IKHMAP_Create)

 この領域の生成を行う関数、IKHMAP_Createは、IKHMap.cに記述されています。ここでは、領域をとって、初期化するだけです。




■値の設定(IKHMAP_StrPut、IKHMAP_Make、IKHMAP_SetPtr)
 この領域に、キーと値の組を設定する関数、IKHMAP_StrPut、IKHMAP_Make、IKHMAP_SetPtrは、IKHMap.cに記述されています。

それぞれの関数の内容は以下のとおり
IKHMAP_StrPut 値が文字列用:文字列の指定でIKHMAP_Makeを呼び、共通領域に設定する
IKHMAP_Make  値の領域をとった後、IKHMAP_SetPtrを呼び出し、共通領域に設定する 
IKHMAP_SetPtr 値の領域がとられているものに対して、共通領域に設定する


これを、IKHMAP_StrPutから、一連の動作を書くと、以下のとおり

(1)文字列の指定、大きさは文字の長さにして、IKHMAP_Makeを呼び出す

   ----------以降 IKHMAP_Make-----------

(2)IKHMAP_MakeAreaを呼び出し、値の領域を確保する
   →IKHMAP_MakeAreaでは、種類に応じて、メモリをとる
    カオル姫2ndでは、ユーザーが指定した種類の場合、pUserInit関数を呼び出し、確保

(3)IKHMAP_SetPtrを呼び出し、共通領域に、(2)の値の領域とキーを設定する

   ----------以降 IKHMAP_SetPtr-----------

(4)すでに、キーと同じ項目が登録されていたら、IKHMAP_Removeで削除する

(5)新しい共通領域の配列分を確保する(keyとkind,val分)

(6)すでに、データが入っている場合、そのポインタを(5)で取得した領域に
   コピーして、今まで使ってた領域を開放する

(7)新しいキーワードを領域をとって設定し、
   新しい値のポインタを引数から設定し
   新しい種類の値を引数から設定し
   要素数を上げる

   ----------以降 IKHMAP_Make戻り-----------

   ----------以降 IKHMAP_StrPut戻り-----------
(8)引数の文字列を、新しく取った値の領域にコピーする




■取得(IKHMAP_Get)
 この領域から、キーワードを渡したら、値を返す関数、IKHMAP_Getは、IKHMap.cに記述されています。ここでは、IKHMAP_GetPosでキーワードが、引数と同じ物の、添え字番号を取得し、それがあれば、その添え字番号の値を返すだけです。




■取得(IKHMAP_Release)

 この領域を解放する、IKHMAP_Releaseは、IKHMap.cに記述されています。ここでは、領域の要素のキー、値、種類を解放し、それらの配列領域を開放しています。
 その際、値を解放するときに、IKHMAP_FreeAreaを使っています。
  →IKHMAP_FreeAreaでは、種類に応じて、メモリを解放します
  カオル姫2ndでは、ユーザーが指定した種類の場合、pUserFree関数を呼び出し、解放





■要素の組の削除(IKHMAP_Remove)
 この領域の要素の1つの組(のみ)を解放する、IKHMAP_Removeは、IKHMap.cに記述されています。
 ここでは、まず、削除指定されたキーが、存在するかどうか、IKHMAP_GetPosで確認し、存在しない(-1)のときは、何もしないで返します。
 その後、指定された値のキーと値の領域を開放し(値は上記IKHMAP_FreeAreaで解放し)、配列を、その削除をしたところから、一番最後まで、1つ分上げ、その後、要素数を1つ減らします。

 要素が0になったら、配列はいらないので、解放してNULLをセットします
(0以外のときは、元の配列領域は、そのまま利用し、要素を、削除した要素から最後までを1つ分、前にずらしています)




と、こんなかんじでやっています。
これで、カオル姫方式BREW版の説明は完了です
(まだ、2ndのほうは、のこっていますが、文字列のみのものについての説明はおしまい)



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

ケータイも、キラーコンテンツ(アプリ)の時代に入る?

2006-10-13 11:47:05 | Weblog

 前に、ケータイのGPSを使ってプラネタリウムというか星空ナビはありかもね!なんてことを、書きましたけど、もう既にあるんですね。「星座をさがそ」というアプリが。。

 今日、ソフトバンクショップ(池袋)の前を通ったら、

手のひらに星座ナビゲーション
vordafone 904SHで「星座をさがそ」

っていうパンフレットがでてました。

こんなかんじ





そのパンフレットによると(以下斜体はパンフレットより引用)

月刊星ナビVアプリ「星座をさがそ」は、
星座早見盤とCGシミュレーションの長所を併せ持った
新しい星座さがしアイテムです。

904SHに搭載された
6軸モーションコントロールセンサーが
方位と仰角、GPSが位置情報を検知し、
手をかざした方向の星座を
いつでもどこでもリアルタイムに表示します。


だって。

そっかあ。。。望遠鏡の赤道儀を合わせるのに、GPSとこの方法を
つかえばいいんだ!とか、
ケータイと並行にできれはいいんだからあ。。とか、
そー言う話をすると、とてつもなく横道にそれそうな気がするので、
話をこのアプリに戻すけど、

このアプリ、天文ニュースなんかもついているそうな。

パンフレットのうしろにペルセウス座流星群がのっているけど、流星群とかの
とき、どこをみればいいかがわかるので、便利だよね。
 あとは、星座なり、星なりを指定すると、見える位置に近づくと、音が大きくなり、
遠ざかると小さくなるとか、なってくれれば、もっと調べやすくなりそう(^^)




 でも、こー言うアプリなんかがでてきて、他のキャリアでも、やってるのかどうかわかんないけど、仮に他のキャリアがやってなかったとしたら、差別化になるかも。。

 というか、もう、ケータイは、機能的には、3社似たようになってきてしまったわけだから、
ここからさきのMNP戦争は、キラーコンテンツ、キラーアプリの開発かも。。。
このゲームは、このケータイでしか動きません!みたいな。。。。

それって、開発会社にとっても、1機種に対応すればいいだけだし、
(起動時に型番をみて、決まった型番でなかったら起動しない)
キャリアにとってもキラーコンテンツってことで、固定客囲い込みになるので、
いいのかも。。。

 ゲーム機同様、これからは、ハードでなく、キラーコンテンツがいくつ載るか?
 の時代になるんでしょうか。。ケータイも。。。まだ、それはない??

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