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

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

一般的な編集ソフトの作り方 その17:イベント発生時の動き(印刷)。

2007-06-20 19:01:16 | Weblog

ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
 ここでは、主に、

  ・メモリ上に、要素をもつ
  ・イベント発生時の動き
  ・画面の構成

ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
  ・印刷
  ・保存
  ・読み込み
  ・カット(切り取り)
  ・ペースト(貼り込み)
  ・プロパティ(属性設定・変更)
  ・表示
  ・要素の選択
  ・(要素の)移動
で、今日は印刷についてやります




■印刷-画面表示同様か、ファイル書き出しか?

 印刷に関しては、ここの印刷で書いたように、

・画面表示のときと同じようにグラフィックコンテキストがあって、それに書き出す
 というのと、
・PSなどで、各要素のファイル出力
 という場合があります。

 ただ、どちらの場合でも大丈夫なようなグラフィック出力メソッドを用意し、それを呼び出すことでも可能です。




■表示順が問題
 ここで問題なのは表示順だったりします。親子関係があるとき、子を配列で持っている場合、その子を表示順にするなどの手があります(親と子、どちらを先に表示するかは場合による)表示順の配列をもったり、リンクを持つのも手かもしれませんけどね・・・




■処理手順

1.印刷が選択されると、たいてい印刷ダイアログが呼ばれる

2.ダイアログが閉じられると、印刷メソッドが呼ばれる。

3.グラフィックコンテキストや出力先を用意して、

4.親から子へ、print(印刷用グラフィックコンテキスト)を呼び出す。

こんなこんなかんじでしょうかね。。




ってことで、簡単だけど、印刷終わり。



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

年金問題”社保庁誤入力の主犯は「カナ変換ソフト」か”っていうけど??

2007-06-20 14:00:37 | Weblog

ここのニュース
社保庁誤入力の主犯は「カナ変換ソフト」か
http://www.itmedia.co.jp/news/articles/0706/18/news060.html

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


社会保険庁が昭和54年に年金記録の氏名のカタカナ管理を導入した際に、漢字の一般的な読み方をカタカナに変換する「漢字カナ変換辞書」と呼ばれるソフトを開発、使用し、勝手な読み仮名をコンピューターに入力していたことが16日、同庁の資料から分かった。氏名の正しい読み仮名を本人に確認することもせず、読み間違いを前提としたシステムを導入していたわけで、新たな批判を招きそうだ。


うん?新たに照合可能性を広げそうだ・・という朗報
ではなくて
批判なの?なんでなんで(@_@)?

そこの記事をまとめると、こんなかんじ

32年~53年まで 漢字をコード化していた
54年~      読み仮名がわからないので、「漢字カナ変換辞書」を開発
          本人に確認せずに、コンピューターに入力

で、

この結果、例えば「島崎藤村」(シマザキトウソン)は「シマサキフジムラ」、「裕子」(ヒロコ)が「ユウコ」、「秀一」(シュウイチ)が「ヒデカズ」に変換されるなど、誤った読み仮名が多数入力された可能性がある。


で、これが問題というんだけど・・




たしかに、読み仮名が違うということは問題。
ただし、名寄せをする場合、

1.現在登録されている名前を、32年当時の漢字コードに変換して
2.そのコードを、「漢字カナ変換辞書」に変換した読み仮名を求め、
3.2の読みがなで一致するデータも、名寄せ対象とすればいい

から、本当に、全部「漢字カナ変換辞書」でやっているのなら、その部分も、今度新しく作る、5000万人の名寄せ検索プログラムに入れれば(上記の作業をするプログラムを作る)、もっと検索精度があがって、いいことなんじゃあ・・

 むしろ、

 年金記録が5000万件以上も不明になったのは、平成9年の基礎年金番号導入以前の年金記録が、入力ミスにより不完全だったことが主な原因とされ、その入力ミスの多くは手書き台帳からの写し間違いといった単純なミスとみられてきた。


っていうけど、写し間違いのほうが、人がやるミスなので、どーいうミスかわからず、たいへんだと思う(^^;)

そーじゃないかなあ。。
ともかく、基礎年金番号の問題だけで片付けられないことは確かで、
まずは、問題を全部洗い出さないとねー


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

開発の初めから順番に書いていってみる その65:プログラミング(27)入出力の自動生成15

2007-06-20 12:29:15 | 開発ネタ

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 今、画面の自動生成で、特にBREWの自動生成版とJavaの画面自動生成を共存させる形でのアプローチをしています。

 前回は、ソースと仕様書の関係で
  ・アプリ起動
  ・各画面
  ・各画面のイベントリスナーのクラス
の仕様書とソースがあることを示しました。

今回は、各画面の仕様書と雛形ソースです。




■各画面に関するソース
ここのgamen1.javaのうち、Shoriのところはいらないかなと。。
 また、画面の中にある再描画や終了処理は、BREWとの対応でここにかきましたが、実際にはイベントリスナー内のメソッドでやってもらったほうがいいかなと・・そー考えると、こんなかんじ・・

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

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

	//	画面項目項目
	Display		ff;
	Button		b1;
	Button		b2;
	Text		t1;

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

	/*
	 * 	表示
	 */
	public void draw()
	{
		
		//	フレームを作成する		
		ff	=(Display)map.get("display");

		f.setText("test");
		f.setSize(240,320);
		f.setLayout(null);

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

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

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

		Label l3 = new Label(f,SWT.NULL);
		l3.setLocation(10,70);
		l3.setSize(100,30);
		l3.setText("以下の文を打とう!");
	
		//	テキスト
		t1 = new Text(f,SWT.NULL);
		t1.setLocation(10,160);
		t1.setSize(150,80);
		
		//	ボタン作成		
		b1 = new Button(f,SWT.NULL);
		b1.setLocation(120,70);
		b1.setSize(100,30);
		b1.addSelectionListener(al);
		b1.setText("挑戦する");

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

		//	表示
		f.open();
		DispAppData();

	   	// ウィンドウが破棄されるまでループ
    	         while (f.isDisposed() == false)
    	         {
      		    if (ff.readAndDispatch() == false)
      		    {
        		       ff.sleep();
      		    }
	         }
	}
}

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




■仕様書

 BREWの場合と違うのは、当時のBREWは、大体縦横幅が決まってました。
 しかし、今回のウィンドウは、縦横幅自由で、実際、
     f.setSize(240,320);
 で大きさを決めています。なので、この指定が必要です。
 それと、コントロール種別はTEXTCTLは、テキストボックスとしても、
他のものはありません。そこで、LABELとBUTTONを導入します。
 そうすると、こんなかんじ。

 セルF3,H3が縦横指定です。




■雛形ソース

そうすると、雛形ソースはこんな感じ
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

public class $#$CELL D2$#$ {
	
	//	共通領域
	public HashMap	map = null;

	//	画面項目項目
	Display		ff;
$#$REP 5$#$
$#$IFKETA C,BUTTON$#$
	Button		$#$KETA B$#$;
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	Text		$#$KETA B$#$;
$#$IFEND$#$
$#$REPEND A$#$

	/*
	 * 	生成
	 */
	public $#$CELL D2$#$(HashMap map)
	{
		this.map = map;
		map.put("$#$CELL D2$#$",this);
		draw();
	}

	/*
	 * 	表示
	 */
	public void draw()
	{
		
		//	フレームを作成する		
		ff	=(Display)map.get("display");

		f.setText("test");
		f.setSize($#$CELL F3$#$,$#$CELL H3$#$);
		f.setLayout(null);

		//	アクションを作成する
		$#$CELL D2$#$_HandleEvent al = new $#$CELL D2$#$_HandleEvent();

$#$REP 5$#$
$#$IFKETA C,LABEL$#$
		Label $#$KETA B$#$ = new Label(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
		$#$KETA B$#$.setText("$#$KETA H$#$");
$#$IFEND$#$
$#$IFKETA C,BUTTON$#$
		//	ボタン作成		
		$#$KETA B$#$ = new Button(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
		$#$KETA B$#$.addSelectionListener(al);
		$#$KETA B$#$.setText("$#$KETA H$#$");
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
		//	テキスト
		$#$KETA B$#$ = new Text(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
$#$IFEND$#$
$#$REPEND A$#$

		//	表示
		f.open();
//		al.disp(map);

	   	// ウィンドウが破棄されるまでループ
    	         while (f.isDisposed() == false)
    	         {
      		    if (ff.readAndDispatch() == false)
      		    {
        		       ff.sleep();
      		    }
	         }
	}
}

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




■BREWとの共存
 縦横についてはBREWのときは見ないだけだから問題ないと思います。
 BREWのときにあったHTMLCTLがなくなり、BUTTON,LABELが追加された件ですが、BREWの場合、$#$IFKETA C,BUTTON$#$に、BUTTONやLABELがないので、その行は無視されます。
 同様に、JAVAのほうにHTMLCTLを書いても、無視されます。
 そのため、仕様書に、両方の場合のケースを書いておけば、雛形指定に応じて、それぞれにあった部品だけを選んで、ソースにするため、共存できます。




 ということで、各画面はおしまい。



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

YouTube日本語版と携帯版

2007-06-20 01:57:35 | Weblog

YouTube日本語版ができたそうな。
ここのニュース
YouTube日本語版が公開に
http://www.itmedia.co.jp/news/articles/0706/19/news064.html

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

YouTubeは6月19日、日本語版サイトを公開した。「動画」「カテゴリ」「メンバー登録」など、各種のメニューが日本語化されている(関連記事参照)。

 従来も日本語による動画の検索などは可能だったが、メニュー部分やアカウント作成・ログイン後ページなどが日本語化され、日本人には使いやすくなった。

そうな。ちなみに、そのYouTube日本語版は、
ここ http://jp.youtube.com/




また、YouTube携帯版に関しても
携帯版YouTubeが本格スタート
http://www.itmedia.co.jp/news/articles/0706/16/news012.html

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

Verizon独占だったモバイル版YouTubeが、ほかの携帯からも利用できるようになった。

そうな。(ただし、英語版)、そのYouTube携帯版は
ここ http://m.youtube.com/warning
らしい
はじめに、ケータイ定額性にしたほうがいいよみたいな英語のメッセージ
がでて、continueをクリックするとみれる
(パソコンでも見れる。ウィリアムのいたずらの場合、Realがアップグレードされて3GPPに対応して、見れるようになった)


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