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

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

JASRACとテレビ局等が、YouTubeにユーザーの氏名・住所の登録制を要望

2006-12-05 23:16:12 | Weblog

ここのスラッシュドットニュース
日本の著作権関連事業者23社がYouTubeにユーザーの氏名・住所の登録制を要望
http://slashdot.jp/articles/06/12/05/083206.shtml

(本ねたはここ)によると(以下斜体はスラッシュドットニュースより引用)
JASRACとテレビ局を含む日本の著作権関連事業者・団体23社が YouTube に対して、
(1)YouTubeのトップページに権利者の許諾を得ない映像を投稿する行為が違法で、
   法的責任を問われる場合があることを日本語で掲示すること

(2)投稿するユーザーの氏名・住所を登録させること
(3)6月以降にYouTubeに依頼して削除した映像を投稿したユーザーのアカウント
   を無効とすること

の3点を文書で要望したらしい。


そうだけど、そもそも、You Tubeは、日本に向けて
サービスしているわけではない。

ってことは、そのサイトに日本語で掲示しろっていっても。。
それって、いきなりウィリアムのいたずらのここのブログに、
イスラム教の人が、「あなたのページは問題があるので、
このアラビア語をいれなさい」と言われているのと同じ。。

つまり、そんなことを言われても、対象としている人
(このページの対象者は原則日本語がわかる人であり、アラビア語は
わからないと思ってます)には、かんけいないわけでえ。。

(YouTubeも対象としているアメリカ人には、
 日本語のそんなのはわかんないわけで。。
 イメージでいれても不気味だし、イメージじゃなきゃ
 文字化けしちゃうし。。)




さらに、あらたに登録制にするって言う場合、日本語で入力される可能性もあるわけでえ。。
そーいう対応など、システムを修正する必要がある。

 もともと、だから日本にはサービスしてないで、それを無理やり対応する。。

 。。その費用は??って言う話になってくると思う。




 こうやって、いろいろうるさいこといってると、

 そのうち、IP見て、日本からのアクセス禁止にされないかなあ。。。

 そーしたら。。。JASRACとかは、大喜びだろうけど、
 結局、日本のデジタル文化はおくれて、
 結果として、音楽も売れず、
 JASRACの収入も減るっていうのが、オチなんだろうなあ。。


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

「中国のGoogle」“百度”が日本進出を表明、検索ロジックは、広告料を多く払った順?

2006-12-05 18:27:30 | Weblog

中国の検索サイト、百度が、日本進出!!という話

中国の検索エンジンBaidu、日本進出へ
http://www.itmedia.co.jp/news/articles/0612/04/news065.html


は、本家のほうにも、かいたけど。。

とりあえず上記ニュースによると(以下斜体は上記ニュースより引用)、

中国の大手検索エンジンBaidu.com(百度)は12月4日、2007年に日本の検索市場に参入する意向を発表した。

(中略)

「日本の検索エンジンユーザーは、既存のものに代わるユーザーフレンドリーな検索エンジンを提供するBaiduの強力な日本語検索技術を高く評価するだろう」


で、その日本語検索だが、スラッシュドットのコメントで知ったのだが。。。
ここ
検索サイト「百度」がえらいことになっている
http://plusd.itmedia.co.jp/pcuser/articles/0609/25/news023.html

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


百度では、広告主があるキーワードに対して1クリックあたりの広告費を支払うと、その広告費の順位が百度でWEB検索を行ったときの検索結果順位となる。百度のWEB検索結果は、まず広告費を多く支払った企業サイトのリンクが表示され、その続きに本来の意味の検索結果が表示される。


カネを払えば、検索上位にいける。。。

すげー、Googleのページランクとかとは、
まったくちがった、検索方法ですよね。
情報大航海プロジェクトもまっ青な、
あらたな検索方法だあ!???(^^;)

なんちゅーか、ほんちゅうーか、
たしかに、この方法、一部の人には高く評価されそうです(^^;)
ただーし、みんながこの検索エンジンを使うかどうかは??(^^;)
 


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

BREWでiアプリ統合作成ツールのための、1イベント1関数化(その3:呼ぶ側のソース)

2006-12-05 16:49:39 | ケータイ

 シリーズBREWでiアプリ統合作成ツールのための、1イベント1関数化のつづきです。
 前のブログの話で、iモードやJavaでは、1イベント1関数(メソッド)にするのがよくて、その場合、クラスは、複数の関数(メソッド)の場合もあるし、1クラス1メソッド(関数)の場合もあるというのをやりました。

 1イベント1関数には、その2の段階でしています。

 で、そこからさきのクラスとの関係ですが、BREWには、クラスがないのですが、まあクラスのまとまりをファイルに書くと考えれば、BREWの側でも、画面のファイルとイベントのファイルをわけて、1つのファイル(クラス)に複数イベントの関数がかけたり、1つのイベントの関数が書けたりすればいいわけです。

 今回は、1イベント1関数で、1つのクラス(ファイル)に、複数イベント関数(実際は2個ですが)を書けるケースをやります。




■仕様

 といっても、複雑なことをやってしまうと、わけわかんなくなるので、今回は
 ・開始時(EVT_APP_START)に、event1_STARTEventという関数を呼び出し、画面クリアする
 ・クリアキー(AVK_CLR)が押されたら(EVT_KEY)、終了する
 というものにしたいと思います。



■ソース1:画面ヘッダファイル
ヘッダファイルevent1.hはこんな感じです
/*==========================================================

FILE: event1.h
============================================================*/
#ifndef _EVENT1_H
#define	_EVENT1_H


/*============================================================
INCLUDES AND VARIABLE DEFINITIONS
============================================================== */
#include "AEEModGen.h"          // Module interface definitions
#include "AEEAppGen.h"          // Applet interface definitions
#include "AEEShell.h"           // Shell interface definitions

#include "IEventList.h"		//	追加:イベントリスト

#include "event1.bid"

/*---------------------------------------------------------------
Applet structure. All variables in here are reference via "pMe->"
----------------------------------------------------------------*/
// create an applet structure that's passed around. All variables in
// here will be able to be referenced as static.


typedef struct _event1 {
	AEEApplet      a ;
    AEEDeviceInfo  DeviceInfo; 
    IDisplay      *pIDisplay; 
    IShell        *pIShell;  

    // add your own variables here...
	IEventList		*pElist;


} event1;

/*--------------------------------------------
Function Prototypes
---------------------------------------------*/
#ifdef _EVENT1_C
static  boolean event1_HandleEvent(event1* pMe, 
     AEEEvent eCode, uint16 wParam, 
     uint32 dwParam);
boolean event1_InitAppData(event1* pMe);
void    event1_FreeAppData(event1* pMe);
#else
boolean event1_InitAppData(event1* pMe);
void    event1_FreeAppData(event1* pMe);
#endif
#endif

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



■ソース2:画面部分
 本当はアプリと画面は分けるべきですが、今回の例では
わかりやすくするために一緒に書いてます
(次回以降の話で、アプリと画面に分ける話をします)
なので、アプリ部分からかかれてます。

ソースは、こんなかんじです。
/*===================================================
FILE: event1.c
====================================================*/
#define	_EVENT1_C

/*===================================================
INCLUDES AND VARIABLE DEFINITIONS
================================================== */
#include "event1.h"
#include "event1Ctl.h"	//	追加:イベント処理

/*===============================================
FUNCTION DEFINITIONS
================================================== */

/*=================================================
FUNCTION: AEEClsCreateInstance
====================================================*/
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, 
                   IModule *po, void **ppObj)
{
	*ppObj = NULL;

	if( ClsId == AEECLSID_EVENT1 )
	{
		// Create the applet and make room for the applet structure
		if( AEEApplet_New(sizeof(event1),
                          ClsId,
                          pIShell,
                          po,
                          (IApplet**)ppObj,
                          (AEEHANDLER)event1_HandleEvent,
                          (PFNFREEAPPDATA)event1_FreeAppData) )
                          
		{
            // to the HandleEvent function
			if(event1_InitAppData((event1*)*ppObj))
			{
				//Data initialized successfully
				return(AEE_SUCCESS);
			}
			else
			{
				// AEEApplet_New was called.
				IAPPLET_Release((IApplet*)*ppObj);
				return EFAILED;
			}

        } // end AEEApplet_New

    }

	return(EFAILED);
}


/*===========================================
FUNCTION SampleAppWizard_HandleEvent
=================================================*/
static boolean event1_HandleEvent(event1* pMe, AEEEvent eCode, 
           uint16 wParam, uint32 dwParam)
{
	if ( pMe	==	NULL )
		return	FALSE;

	if ( pMe->pElist	==	NULL )
		return	FALSE;

	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);
}


// this function is called when your application is starting up
boolean event1_InitAppData(event1* pMe)
{
    pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
    ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);

    pMe->pIDisplay = pMe->a.m_pIDisplay;
    pMe->pIShell   = pMe->a.m_pIShell;

    // Insert your code here for initializing or allocating resources...

	//	イベント領域確保
	if ( (pMe->pElist = IEVENTLIST_Create() ) ==	NULL )
	{
		return FALSE;
	}

	//	イベント設定
	IEVENTLIST_Add(pMe->pElist,pMe,IEVENTLIST_KIND_ECODE,EVT_APP_START,
              0,0,event1_STARTEvent);
	IEVENTLIST_Add(pMe->pElist,pMe,IEVENTLIST_KIND_WPARAM,EVT_KEY,AVK_CLR,
               0,event1_CLREvent);

    return TRUE;
}

// this function is called when your application is exiting
void event1_FreeAppData(event1* pMe)
{
	IEVENTLIST_Release(pMe->pElist);

}

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

このイベント処理に関係するところの修正については、
その1の概要の2以降を参照してください。



■ソース3:イベントヘッダ部分

ソース(event1Ctl.h)は、こんなかんじです。
/*==============================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================== */
#ifndef _EVENT1CTL_H
#define	_EVENT1CTL_H
#include "AEE.h"        // Standard AEE definitions
#include "AEEShell.h"   // AEE Shell Services
#include "AEEStdLib.h"  // AEE stdlib stuff

#ifdef _EVENT1CTL_C
boolean event1_CLREvent(void* pMe, AEEEvent eCode,
              uint16 wParam, uint32 dwParam);
boolean event1_STARTEvent(void* pArg, AEEEvent eCode,
              uint16 wParam, uint32 dwParam);
#else
extern boolean event1_CLREvent(void* pMe, AEEEvent eCode, 
              uint16 wParam, uint32 dwParam);
extern boolean event1_STARTEvent(void* pArg, AEEEvent eCode,
              uint16 wParam, uint32 dwParam);
#endif
#endif

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



■ソース4:イベントヘッダ部分

ソース(event1Ctl.c)は、こんなかんじです。
/*================================================
FILE: event1Ctl.c
=================================================*/
#define	_EVENT1CTL_C

/*===============================================
INCLUDES AND VARIABLE DEFINITIONS
================================================ */
#include "AEEModGen.h"  // Module interface definitions
#include "AEEAppGen.h"  // Applet interface definitions
#include "AEEShell.h"   // Shell interface definitions
#include "event1.h"
#include "event1Ctl.h"

boolean event1_CLREvent(void* pMe, AEEEvent eCode, 
            uint16 wParam, uint32 dwParam)
{
	return	FALSE;
}

boolean event1_STARTEvent(void* pArg, AEEEvent eCode,
            uint16 wParam, uint32 dwParam)
{
	event1 *pMe;
	if ( (pMe = (event1 *)pArg)	== NULL )
		return	FALSE;

	IDISPLAY_ClearScreen(pMe->pIDisplay);
	IDISPLAY_Update(pMe->pIDisplay);
	return	TRUE;
}

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




■そのほかのソース
 そのほかに、呼ばれる側のIEventList.c,IEventList.h
が必要となりますが、これは、その2にすでに示しています。
それを使えばいいです。




ということで、階層化しない部分についてまでは書きました。
このシリーズの次回は階層化についてです。



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

iアプリやJavaの画面において、イベント処理を画面内に置くかどうかでデスマーチを考える(その2)。

2006-12-05 13:38:28 | Weblog

 以前、その1を書いたので、つづきです。
 その1では、

 iアプリやJavaの画面において、イベントに対する処理部分を書く方法が、大きく分けて2つあります。


 その2つとは、

1.画面のクラスの中に、イベント処理を書いてしまう方法
2.画面とイベントのクラスをわける方法
  ただし、2にはいくつかのイベントをまとめる方法と
  1イベント1クラスにしてしまう方法に、細分化されます

ということで、この2つのやり方について書きました。



の方法だと、開発時に、修正が入ると困り、
デスマーチになるというのを
具体的な話にすると、問題があるので、
それを抽象的にぼやかした形で、紹介します。


と書いて終わりました。それについて書きます。




■画面のクラスの中に、イベント処理を書くと困るケース

 これは、イベント数がある程度あって、あとあと、処理が追加される場合に
こまります。

たとえば、1画面10個のイベントがあって(イベントは、ボタンが押されたらもちろんだけど、
それ以外でもフォーカス移動や選択時のリスト変更、入力不可にするなどもあるので、10個
のイベントというのは、Javaで画面を書く場合、それほど不思議ではない量になる)、

1イベント200行程度だった場合、全体で200行、まあ、画面を出すのに1000行としても3000行なので、これは、1画面1クラス、1ファイルにしても、問題ありません。

 しかし、この後仕様が増えて、この場合はプロテクトしろだの、この場合はこの値をみろとか、こういうチェックも入れろとかとかで、プログラムがどんどん増えていったとします。

 アジャイルだと、そういうふうになります。

 はじめはきまってなくて、スパイラルに開発していき、どんどん追加されるからです。

 そーなって、平均5倍追加されると、1イベント1000行になります。
 1画面10イベントあるので1万行です。

 で、こうなってくると、だんだん増えてきちゃいます。
 そうすると、バグなどがあっても、すぐに修正できなくなってきます。他の部分に影響する可能性があるので。。
 そうすると、だんだんバグ修正が遅くなり、開発が遅れてきます。

 じゃあ、人を投入しようとしても、1クラス1ファイルになっているので、分割できない(同じファイルのものを分割すると、衝突や修正矛盾がおこり、より作業が遅れる)ので、投入しても作業が割り振れず、無駄になってしまいます。
 じゃあ、1クラスになっているイベントをこの時点で、いくつかのクラスに分割し、それぞれファイルにすればいいじゃない!と思うかもしれませんが、もう、この時点では、複雑に絡み合ってしまっていることが多く、ファイルを分割するのはたいへんだし、バグが混入する危険が高いです。

 つまり、画面のクラスの中に全イベントを書く方法は、イベント数がすくないか、メソッドに修正がはいる可能性が低い場合はOKなのですが、ある程度イベントがあって、アジャイルみたいに頻繁に仕様が変わると、ソースが膨れ上がり、修正がたいへんになるけど、作業が分けられないので、担当者に死んでもらうしかない(=デスマーチ)ということになりかねません。




■ということからかんがえると、
 小さい開発の場合は、画面のクラスの中に、イベント処理を書いてもOKですけど
 (そのほうが画面修正のときや、構成管理のとき、確認すべき項目が少ないので楽)

 大きくなりそうな場合は、はじめから、画面とイベントのクラスをわけておいたほうが
 よさそうです。

 まあ、1イベント1クラスにするか、ある程度まとめるかの問題はありますが。。




 ということで、画面とイベントのクラスをわけておくという考えも、突飛ではない
ということを、無理やり納得してもらった今回のお話で、このシリーズはおしまいです(^^;)

 で、この話は、ここでやった、1イベント1関数っていうのが、仕様書でどうあらわし、それが、どう自動化にかかわってくるかっていうのに続きます。

 

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

海外のデジタルラジオは、パソコンで聞けるみたい、日本は??

2006-12-05 10:28:18 | Weblog

 といっても、ソフトウエアラジオで聞くので、電波を受信するところは、
 別にいるのですが。。

 まえ、CQ Ham Radioを買ったという話は書いたけど、
 そこで、コンピューターに関係ないと思っていたら、いやいや、大アリだったので、
 その「デジタルラジオ」の話を書きます。

デジタルラジオは、日本でも、本格放送が開始されたそうな。
でも、そのデジタルラジオ、上記CQ誌(132ページ~)によると4種類あるそうです

・DAB
・ISDB-TSB(SBは小さく書く)
・IBOC
・DRM

で、このDRM方式をソフトウエアラジオで、電波を受信する部分を作って、パソコンのサウンドカードのサンプル周波数におとして、出力し、あとは、パソコンで、そいつを入力して、パソコンのソフトを使って出力するという記事がのってました。

 その筆者が書いたDRMページについては、ここ
DRM (Digital Radio Mondiale) 放送受信のためのリソース
http://homepage3.nifty.com/RadioGaGa/DRM/drm_top.html


 DRM放送は海外でやってますが、短波でも放送しているようなので、日本で聞けるみたい。
 そこにはDW(ドイチェベレ、ドイツの国営放送)が載ってますね。

 また、DRMにしても、他のデジタルラジオにしても、OFDMという変調方式をつかってるみたいなんだけど、それを復調するソフト(ようするにパソコン側のソフト)は、
Dreamというのがあって、これを、その記事では使っている(ただし、DRM以外のほかの方式でも使えるのかは??)
 Dreamのページはこちら http://drm.sourceforge.net/

 また、WinDRMというのも紹介されていました
 WinDRMはこちら http://n1su.com/windrm/

 日本の場合は、ISDB-TSBという方式なので、これとは違いみたい。
 日本のデジタルラジオでも、サウンドカードに落とすラジオ部分を販売して、あと、復調ソフトをパソコンにインストールすれば、デジタルラジオをパソコンで聞けるってなったら、おもしろいかも。。。。とおもうが、高専とか、大学とか、メーカーでないと作れないのかなあ??
 すくなくとも、ウィリアムのいたずらには、難しすぎるぞ(>_<!)


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