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

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

音楽権利者団体「ipod、HDD、携帯電話、カーナビ等も課金の対象にすべき」―DBのHDも?。。

2008-01-16 23:04:43 | Weblog

ここの痛いニュース
音楽権利者団体「ipod、HDD、携帯電話、カーナビ等も課金の対象にすべき」
http://blog.livedoor.jp/dqnplus/archives/1080245.html

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


87の権利者団体が「Culture First」の理念を発表した。
「文化が経済至上主義の犠牲になっている」とし、私的録音録画補償金の堅持に加え、対象をiPodやPC、携帯電話などに拡大すべきと訴えている。


だそうな。で、その87の団体とは

日本音楽著作権協会(JASRAC)や実演家著作隣接権センター(CPRA)など著作権者側
の87団体


だそうで、


権利者側はこれまでも、補償金の徴収対象になっていないデジタル録画・録音機器を
対象にするよう訴えてきたが、今後は「Culture First」の旗印の下に、改めて
「iPodなど携帯オーディオ、PC、携帯電話、カーナビ、Blu-ray Disc、HD DVD、HDD
などを補償金の対象にすべき」と訴えていく。


といってるそーなんだけど・・

HDDって、ハードディスクう??

あのー、データベースとかをおいておく、ハードディスクですか??
パソコンのワードやExcelデータを置いておくハードディスクですかあ??

家で使っているのはさておき、会社のHDDに音楽とか入れることは。。。ないと思いますけどお・・

お金返してくれるのかしら・・??
それとも音楽用パソコンと事務用パソコンとか、別れるのかしら(^^;)

うーん、これはUSBメモリやSDカードにデータを置くしかない?




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

クロスサイト”プリンティング”の応用その2-Webからローカルのプログラムを起動

2008-01-16 16:27:14 | Weblog

 先日のクロスサイト”プリンティング”のテクニック、本当ならWebアプリの世界が広がる気が。。と、昨日のクロスサイト”プリンティング”の応用-Webからローカルにファイルを書き出すの続き。

 あるサーバーのJavaScript(ローカル以外)から、ローカルのプログラムを起動する方法を示します。これって、便利でしょ(^^)v

 今回は具体的に、
・前回と同じく、
  http://www.geocities.jp/xmldtp/aj_localtest.htm
のサイトから、
・上の段に、自分のローカルにあるExcel.EXEのパスを指定して
・実行ボタンをクリックすると
・ローカルでExcelが起動するというのをやります。




■方法の概要

昨日と同じです。

・ローカルに、Socketサーバーで、ポート5050番で、以下の機能を持った
 サービスを立ち上げる
  ・POST形式で受け取った内容をもとに、引数
     fnameで指定されたパスのプログラムを実行

・フォームタグでmethod=POST action="http://127.0.0.1:5050" を指定、
 このフォームタグ内に、fnameを用意しておく。
 このファイルを保存し、ローカル以外の別のサーバーに置く

・上記ファイルにアクセスし、fnameをいれ、Submitボタンをクリックすると、
 ポート5050のサービスが実行され、fnameに指定したパスのプログラムが実行される。




■ソース

 エラー処理とか、日本語化とか、一切抜いて、簡単に書いてあります。

●別のサーバーに置いたHTMLファイル
 これ、前回と同じ。

<html>
<head><title>クロスサイトプリンティング応用テスト</title></head>
<body>
<form method="post" action="http://127.0.0.1:5050">
<input type=text name=fname><BR>
<textarea name=fdata>
</textarea><BR>
<input type=submit value="実行"><BR>
</form>
</body>

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

今回はfdataは使いませんが、前回と比較しやすくするため、そのままにしておきました。




●ローカルに置くソース
 ローカルにおくプログラムは、起動するプログラムと、1セッション分(1スレッド分)のプログラムの2つに分かれます。
 だいたいの書き方は、ここと同じです。

<<1.起動するプログラム>>

 前回とまったく同じ。以下のプログラムをtest.javaとします
import java.io.*;
import java.net.*;

public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) 
	{
		try
		{
			// サーバーを生成
			ServerSocket serverSocket = new ServerSocket(5050);
			while(true)
			{			
				// ソケットを生成
				Socket socket = serverSocket.accept();
				TestThread tr1 = new TestThread();
				tr1.setSocket(socket);
				tr1.start();
			}	

		}
		catch(Exception e)
		{
			e.printStackTrace();
		}	
	}

}

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

<<2.スレッドのプログラム>>

 前回とは「処理」のところがちがっていてて、プログラムを起動します。
 以下のプログラムをTestThread.javaとします
import java.io.*;
import java.net.*;

public class TestThread extends Thread {
	Socket socket = null;

 	
  	public void setSocket(Socket socket)
  	{
  		this.socket	=	socket;
  	}
  	
	/*
	 * 処理部分
	 */
	public void run()
	{
		if ( socket	==	null )
		{
			return;
		}

		try
		{
			//--------------------
			//受信する
			//--------------------
			InputStream	is1	
				=socket.getInputStream();
			InputStreamReader	ir1
				= new InputStreamReader(is1);
			BufferedReader		br1	= new BufferedReader(ir1);

			//	よみこめるまでまってる
			while(is1.available()	==	0);
		
			
			//	1行読み込む
			int	c;
			String  header = "";
			while((c = br1.read()) != -1 )
			{
				header = header + (char)c;
				if (( header.indexOf("¥n¥n") > 0 ) ||
					( header.indexOf("¥r¥n¥r¥n") > 0 ) )
				{
					break;
				}
			}
				
			//	データ部分の長さを取得
			String[] line = header.split("¥n");
			int datalen = -1;
			for(int i = 0 ; i < line.length; i ++ )
			{
				if ( line[i].indexOf("Content-Length:")	>=	0 )
				{
					String lenbuf
					  = line[i].substring("Content-Length:".length());
					try{
						datalen = Integer.parseInt(lenbuf.trim());
					}catch(Exception e){
					}
				}	
			}

			//	データがある場合、データ取得
			String data = "";
			if ( datalen	>	0 )
			{
				char[] datachar = new char[datalen];
				br1.read(datachar);
				StringBuffer databuf = new StringBuffer();
				databuf.append(datachar);
				data	=	databuf.toString();
			}

			//--------------------
			//	処理
			//--------------------
			//	データがある場合、ファイル名、データ取得
			String fname="";
			if ( data.length()	>	0 )
			{
				// 改行をカットする
				data = data.replaceAll("¥r","");
				data = data.replaceAll("¥n","");

				//	ファイル名とデータきりだし
				String[] dline = data.split("&");
				for(int i = 0 ; i < dline.length ; i ++ )
				{
					String[] cell = dline[i].split("=");
					if ( cell[0].compareTo("fname")	==	0 )
					{
						fname	=	cell[1];
					}
				}					
			}

			//	プログラム実行
			if (fname.length()	>	0 )
			{
				try
				{
					// 適当に、コード変換
					fname = URLDecoder.decode(fname,"UTF-8");
					
				     // プロセス実行
      				Process process = Runtime.getRuntime().exec(fname);
				}
				catch(Exception e)
				{
				}			
			}

			//--------------------
			//送信する
			//--------------------
			OutputStreamWriter	ow1
				= new OutputStreamWriter(socket.getOutputStream());
			BufferedWriter bw1 = new BufferedWriter(ow1);

			bw1.write("OK");
			bw1.flush();
			
			
			//	クローズ
			bw1.close();
			ow1.close();
			br1.close();
			ir1.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
	}

}

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




■うごかしかた

で、2つのjavaプログラムをコンパイルして、同じフォルダにおいて、
testのクラスを実行すれば
(Eclipseだったら、同じプロジェクトに入れて、testのクラスを指定して
 Runすれば)、
プログラムが開始します(しますけど、その時点では、何もおきません、見かけ上)

で、あらかじめ、どっかのサーバーにおいておいた、HTMLファイルをIEで開いて、
上にプログラムのパス名を適当に入れて、実行ボタンをクリックすると、
ローカルで、そのプログラムが実行します。
たとえば、

C:¥Program Files¥Microsoft Office¥ほにゃらら¥EXCEL.EXE
(¥は、実際には半角です。「ほにゃらら」には、Microsoft Officeフォルダの下の、
 Excelが入っているフォルダ名(Office10とか)が入ります)。

と、fnameのところ(つまり、上)に入れて実行ボタンをクリックすると、
ローカルでExcelが立ち上がります。

なお、返り値を、この結果として返したい場合は、以下のサイト
JavaでHello World 外部コマンド編
http://www.hellohiro.com/command.htm

を参考にして、Process以下を直してください。



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

Webから、(サーバだけでなく)ローカルDBに、更新がかけられるってことなら、グーグルを超えた?

2008-01-16 12:24:56 | Weblog

 おお、ウィリアムのいたずらは、グーグルを越えたかもしれん!

 昨日の、クロスサイト”プリンティング”の応用-Webからローカルにファイルを書き出すだけど、 TestThread.javaで、ファイルに書き出しているけど、これを、JDBCとかでやれば、ローカルのデータベースに書き出せることになる。
 ちなみに、今はJavaで書いているけど、ソケットプログラムはVC++でも書ける。
 そーして、ODBCを経由して、ローカルMS-Accessのmdbにデータを書き出したり、帳票をローカルから出したりすることも出来そうだ。

 一定時間ごとに動かせるプログラム(Linuxのクーロンとか、Windowsのタスクとか、ただし、排他制御まで考えた場合、そーいうフリーソフトもあるみたい)を使えば、ローカルDBとサーバーの同期を取ることもできる。

 もちろん、このスレッドから、さらに複数スレッドを生成して処理することも出来る・・

 おおおおー。。

 もちろん、このサーバープログラムが動いていれば、プログラムをAJAXで書いて、ダウンロードし、その後、ローカルファイル、DBを書き出す形でオフライン処理、適当なところで(同期を取りたいところで)ローカルDBからデータを取り出し、サーバーにアップすることも出来る。まさに、Google Gearsなみの機能。

 その上、GoogleGearsとちがって、好きなローカルDBに入れられるし、帳票も出せる。。。

 おお、ウィリアムのいたずらのこの機能は、GoogleGearsを越えたかもしれん!

P.S あくまでも、クライアントに、ソケット通信プログラムを入れないと出来ないよ(^^;)
  なにもしないで、帳票が出たりするわけではないからね。

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