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

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

眞鍋さんが、情報大航海プロジェクトをアピールしてるそうな

2006-10-05 23:41:51 | Weblog

 あの、国で税金使って、検索エンジン作るって言う、
 情報大航海プロジェクト、
 真鍋かをりさんが、宣伝してるんだって。。。

 ここのニュース
「Google八分、知ってますか?」眞鍋かをりが“国策検索”アピール
http://www.itmedia.co.jp/news/articles/0610/05/news092.html


うーん、国はやっぱ、こういうときは、眞鍋さんを頼るのね(^^;)。。。


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

Google、ソースコード検索サービス立ち上げ。。いまいちイメージわかない???

2006-10-05 22:05:06 | Weblog

ここのニュース
Google、ソースコード検索サービス立ち上げ
http://www.itmedia.co.jp/news/articles/0610/05/news073.html

で(以下斜体は上記ニュースより引用)、

 Googleは、プログラマーに人気の複数のコードリポジトリ――CollabNetのSubversionやCVSと呼ばれる別のリポジトリ――からコードを探すとストッキー氏は説明する。

だそうな。

なにかやりたいのことを入れると、ソースを検索してくれるなら、意味あるけどお。。

または
ソースコードのバグをググる「Bugleプロジェクト」
http://www.itmedia.co.jp/news/articles/0607/27/news052.html

みたいに、バグを探してくれるなら便利だけどお。。

単純にキーワード(関数名とかいれて)ソースコードを検索する?

よくわからん??



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

JAVAのフォーマット変換:DOM編(その5:バリデーション)

2006-10-05 17:25:48 | JavaとWeb

 シリーズJAVAのフォーマット変換は、その4で終わりにしようと思ったんだけど、ちょっとこのまえ、ぼーっとしてたら、「XMLのバリデーションが」・・「DOMで。。。」とかいうのが聞こえたんで、ま、これも、天の声?ということで、バリデーションについてかきましょうかね。。

 ってことで、今回はバリデーション。



■バリデーションには、2種類ある
 JAVAのDOMで、バリデーションというと、
(1)DocumentBuilderFactoryのsetValidatingメソッドをtrueにするもの
(2)Java1.からはいった、Validatorクラスのvalidateメソッドでやるもの
 と2種類ある。

 このうち、(1)は、開始タグがあって、終了タグがないというのもはないか?とか、ちゃんと入れ子になっているかとか、そーいう、スキーマがなくてもできるチェックを行っている。

 一方、(2)は、XMLスキーマを読み込んで、スキーマに基づき、このタグのあとに、このタグが着ているかどうか?をチェックするものなのら。

 なので、(1)は、スキーマがなくてもできるし、Java1.4でも、できる。




■Java1.4以前の場合、ノートパッドでUTF-8のXMLを修正した場合の注意
 ただし、Java1.4でXMLを扱う場合、注意が必要になる
 以下の操作をすると、エラーになる

・機械的に、UTF8で出力したXMLファイルをノートパッドで開き、
・修正するかどうかにかかわらず、保存し
・Javaで読み込むとエラーになる。

理由は、ノートパッドを使って、UTF-8で保存した場合、ファイルの先頭に、UTF8を示すマークをつける。一般にWindows2000以上では、このマークは見えない(たしか98のノートパッドでは見えたと思った)。多くのアプリケーションでは、このコードは読み飛ばすが、Java1.4のパーサーは読み飛ばさない。その結果、このコードに引っかかり、エラーとなる。

 対策は。。。素直にJava1.5を使うことだ。XMLの場合、1.5のほうが、バリデーションとかもはいってて、いいぞお(^^)v。。。。かあ(^^;)
 ただし、1.4ではバリデーションでエラーが出なかったのに、1.5になったとたんにエラーになるものがある・・よくわかんないんだ、これ??




■まず、XMLスキーマを作ることだが。。。

 では、XMLスキーマとXMLファイルを作ることだが、これは、Access2003を使って、
 エクスポートするとつくれる。

 ファイルの種類をXMLにして、保存すると、
 スキーマつきかどうかをチェックできるので、
 スキーマもつける。

 すると、拡張子xsdのファイルもできる。




■方法の概要

「(1)DocumentBuilderFactoryのsetValidatingメソッドをtrueにするもの」は、
そのとおりにやってくれ。それ以上の説明は要らないと思う。
(わからなかったらしたのソースを参照。dbfactory.setValidating(true);がそれにあたる)。

「(2)Java1.からはいった、Validatorクラスのvalidateメソッドでやるもの」は、
 以下の手順で行う
・SchemaFactoryを生成する(SchemaFactory.newInstanceで)
・スキーマファイルを読み込み、StreamSourceを生成させる
・スキーマをnewSchemaする
・Validatorをつくる
・validator.validateする(引数が、読みこんだXMLのDomのDOMSourceとなる)

詳しくは、以下を参照(っていうか、以下のサイトに書いてあることをやってるだけだ)
JAXPのすべて 第1回
http://www-06.ibm.com/jp/developerworks/xml/050610/j_x-jaxp2.html





■ソース

 仕様は、
・Access2003を使って、test.xmlとtest.xsdを作成し
・それを読み込んで、バリデーションチェックする
というもの。Java1.5を使ってます。

import java.io.*;

import javax.xml.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.xml.validation.*;

import org.w3c.dom.*;

public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) 
	{
		try
		{

			//==============================//
			//	読み込む		     //
			//==============================//
			FileInputStream fi = new FileInputStream("test.xml");
		      // ドキュメントビルダーファクトリを生成
			DocumentBuilderFactory dbfactory
                            = DocumentBuilderFactory.newInstance();
		  	dbfactory.setValidating(true);
		  	
		      // ドキュメントビルダーを生成
			DocumentBuilder builder = dbfactory.newDocumentBuilder();
     		      // パースを実行してDocumentオブジェクトを取得
      		         Document xtree = builder.parse(fi);


			//==============================//
			//	正しいかチェック	     //
			//==============================//
			//	XMLスキーマセット=> validatorとってくる
      		SchemaFactory constraintFactory = 
      		    SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
      		Source constraints = new StreamSource(new File("test.xsd"));
      		Schema schema = constraintFactory.newSchema(constraints);
      		Validator validator = schema.newValidator();

      		//	チェック開始
      		validator.validate(new DOMSource(xtree));

			fi.close();
			System.out.println("Job End");
						
        }
		catch (Exception e)
		{
      		e.printStackTrace();
    	}

	}

}

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

なんか、はじめの(1)に相当するところで変なメッセージがでる。意味不明。
ありえないタグをいれて(ただし構文的には解した具と終了タグを入れてちゃんとしておく)と、ちゃんと、エラーではじいてくれた。

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

BREWで複数画面を(分割して開発可能な)開発する場合の方法論(その8:仕様追加-4)

2006-10-05 14:42:03 | ケータイ

 シリーズ「BREWで複数画面を(分割して開発可能な)開発する場合の方法論」のつづきで、今回は、前に単体で作ったメニュー画面(gamen10)を、本体に組み込みます。

手順は
・バージョンファイルの修正
・全体アプリ部分(fukusu1.c)の修正
・gamen10.hの修正
・gamen10.cの修正
です。

 今回は、この画面だけ、表示させて確認します。




■バージョンファイル(version.h)の修正

#define _DEBUG_GAMEN10
と宣言します
(前回の_DEBUG_GAMEN2の2を10に変える)




■全体アプリ部分(fukusu1.c)の修正

 アプリ全体としては、以下のところを修正します
・メニュー画面のヘッダーファイル(gamen10.h)をインクルード
・fukusu1_HandleEventで、以下のようにgamen10_HandleEventをよぶ

そして、今回は、この画面だけ、表示させて確認するということなので、

・EVT_APP_STARTで_DEBUG_GAMEN10のとき、gamen10_InitAppDataをよびだします

ここまでの修正をしたのが、こんなかんじです
(赤字は修正箇所で、fukusu1_HandleEventの途中まで)
static boolean fukusu1_HandleEvent(fukusu1* pMe, AEEEvent eCode,
                 uint16 wParam, uint32 dwParam)
{  
	boolean	ret;

	ret	=	FALSE;	//	処理していない

		//	スタート時に、はじめの画面を呼ぶ
	if ( eCode	==	EVT_APP_START)
	{
#ifdef _DEBUG_GAMEN2
		return gamen2_InitAppData(pMe);
#else
#ifdef _DEBUG_GAMEN10
		return gamen10_InitAppData(pMe);
#else
		return gamen1_InitAppData(pMe);
#endif	
#endif
	}
	else if ( pMe	==	NULL )
	{
		return	FALSE;
	}
		//	それ以外は、画面に応じたHandleEventをよぶ
	else
	{
		switch(pMe->gno)
		{
		case	1:
			ret = gamen1_HandleEvent(pMe,eCode,wParam,dwParam);
			break;
		case	2:
			ret = gamen2_HandleEvent(pMe,eCode,wParam,dwParam);
			break;
		case	10:
			ret = gamen10_HandleEvent(pMe,eCode,wParam,dwParam);
			break;
		}
	}

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

全体ソースはこちらfukusu1.c




■メニュー画面のヘッダ(gamen10.h)の修正
以下の点が変わります

・インクルードファイルの追加
・構造体gamen10の修正
・関数の宣言にgamen10_DispAppData、gamen10_NextCurItemを追加

結果としてこんなかんじになります
gamen10.h





■メニュー画面のソース(gamen10.c)の修正
 これは、単体で作ったgamen10.cをはり込みます。

●gamen10_DispAppData、gamen10_NextCurItemは、そのままはりこみます。

●gamen10_FreeAppDataに関しては
  ・はじめに、gamen10を取得する部分
       pMe = (gamen10 *)poya->garea;
   を入れます
  ・最後に
    FREEIF(pMe);
    poya->garea = NULL;
    poya->gno = -1;
   として、領域を返して、アプリの画面領域をクリアします。

●gamen10_InitAppDataに関しては
  ・はじめに、gamen10の領域を確保し、アプリの画面領域に設定します
	poya->gno	=	10;
	poya->garea	=	NULL;
	pMe	=	(gamen10 *)MALLOC(sizeof(gamen10));
	if ( pMe	==	NULL )
	{
		return	FALSE;
	}
	poya->garea	=	(void *)pMe;
	pMe->pIDisplay	=	poya->pIDisplay;
	pMe->pIShell	=	poya->pIShell;

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

   ・終わりに再描画を足します。
     gamen10_DispAppData(pMe);
    これをわすれると、画面が表示されません。

●gamen10_HandleEventに関しては
   ・はじめに、gamen10を取得する部分をいれます。
   ・今回の処理である、ユーザー名の取得、次の画面を呼ぶ処理を
    EVT_COMMANDに書きます

この結果のソースが、以下のものです。
   gamen10.c




これで、ひと揃えできましたので、次回は、全体のまとめと、このやりかたでの
問題点について書きます。

 そこで、いよいよBREW版カオル姫方式がでてきます。



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

YAHOOもグーグル同様フィルタリングされていて、はずせるようだ。さらに便利な点は。。

2006-10-05 10:05:48 | Weblog

以前、グーグルは、デフォルトでアダルトコンテンツのフィルタが入ってて、それをはずすと。。。という話を書いたが(ここ http://blog.goo.ne.jp/xmldtp/e/7944f3c5a407c7c8ddb6c48ba684d19e)、

ここのニュース
「Yahoo!検索」に成人向け情報のフィルタリング機能
http://internet.watch.impress.co.jp/cda/news/2006/10/04/13515.html

によると、YAHOOもdフォルトでは、アダルトフィルタリング(中)が入ってて、それを解除することができるそうな。。




 具体的には、YAHOOの検索ボタンのよこに、
 検索オプション http://search.yahoo.co.jp/web/advanced
 があり、そこの一番下に、「アダルトフィルタ」というのがあって、
そこの文中に 「検索基本設定ページ」へのリンクがはってあるので、
そこをクリックするといい。

(画像検索の場合、すぐに検索基本設定ページがある)

 けど、このままでは、アダルトフィルタが低にできない。
 ユーザー名を入れてログインしないといけない。

 実際に「女子高生」で「画像」検索すると、はじめの4枚はおなじなんだけど、その後が。。。

 おおお、確かに違うぞ(^^)
 (勤務中の人も多いと思うので、あえて写真は載せない) 




 で、YAHOOのほうが便利なのとして、チャイルドロックというのがあって、
・Yahoo! JAPAN IDでログインしていない
・また18歳未満の方がログイン
すると、アダルトフィルタが必ず利いてしまうというものだ。

 これだと、グーグルの場合、生徒がアダルトオプションを入れられてしまうと、
 あちゃーってなるけど、
 YAHOOだと、このチャイルドロックをかけておけば、意地でも見せないですむ。。

 学校とかの先生にとっては便利な機能!
 (生徒にとっては、余計な機能!?)



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