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

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

怪しいサイトの素性確認サービス、とのことだが。。。

2007-02-07 18:29:14 | Weblog

ここの記事
あやしいサイトにご用心――3つの“素性確認”サービス
http://www.itmedia.co.jp/bizid/articles/0702/06/news085.html


によると、URLを入れると、そのサイトのようす(Who isの結果はもちろん、サイトの様子や評判など)を表示してくれるサイトがあるそうだ。。

以下の3つがあがっていた
1つめ
aguse.net
http://www.aguse.net/


2つめ
Whois Source
http://www.whois.sc/


3つめ
マカフィーsite advisor
http://www.siteadvisor.com/

(右下の「サイトレポートを検索」で検索)

もっとも、「このサイト自体があやしい(-_-)」といわれてしまったら、
おわりなんだけどね(^^;)



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

JavaからOpenOfficeを操作する部分、Calcを操作する部分に分けてみた

2007-02-07 16:19:23 | OpenOffice

昨日、Javaから、Javaのアプリケーションから、OpenOffice Calc(表計算)を操作する方法について書いたけど、そこにあがっているサンプルソース

Java から OpenOffice.org の操作(Hello World 編)
http://www.okapiproject.com/java/java_tools/openoffice/developer/openoffice_program1.htm


そのままでは、使いにくいので、そこのSample01を、
・OpenOffice立ち上げまでのクラス

・表計算(Calc)操作のクラス
にわけて見ました。

そうすると、こんな感じで、Javaから、OpenOfficeを立ち上げ、セルB2に、Hello Worldと書き出せます。

●Hello Worldと書き出すサンプル(Sample01)
/**
 * サンプルプログラム
 * 参考にしたサイト
 * http://www.okapiproject.com/java/java_tools/openoffice/
 *                          developer/openoffice_program1.htm
 * (本当は1行です。長いので、きりました)
 * 
 */
import com.sun.star.lang.*;
import com.sun.star.bridge.*;
import com.sun.star.uno.*;
import com.sun.star.frame.*;

import com.sun.star.sheet.*;
import com.sun.star.container.XIndexAccess;
import com.sun.star.table.*;
import com.sun.star.beans.PropertyValue;

/**
 * OpenOffice.org の表計算(Calc)に「Hello World」と出力する。
 */
public class Sample01 {

    /**
     * 起動パラメータなし。
     * @param args String
     */
    public static void main(final String[] args)
    {
      	OpenOffice of = null;
        Calc	cl = null;

		//======================================//
		//	OpenOfficeと接続
		//======================================//
        XMultiServiceFactory xMSF = null;
        try
        {
        	of = new OpenOffice();
        	xMSF	=	of.connect();

        }
        catch (java.lang.Exception e)
        {
            e.printStackTrace();
            System.out.println("OpenOfficeの起動に失敗");
        }

		//======================================//
		//Calc を起動
		//======================================//
        XSpreadsheetDocument myDoc = null;
        try
        {
	        cl = new Calc(xMSF);
   	    	myDoc	=	cl.open("private:factory/scalc","_blank");
        }
        catch (java.lang.Exception e)
        {
            e.printStackTrace();
            System.out.println("表計算の起動に失敗");
        }


		//======================================//
		//	シートを取得
		//======================================//
        XSpreadsheet oSheet = null;
        try
        {
			oSheet = cl.getSheetByPosition(myDoc,0);
        }
        catch (java.lang.Exception e)
        {
            e.printStackTrace();
            System.out.println("シートの取得に失敗");
        }
			
		//======================================//
		//	セルに書き出し
		//======================================//
        XCell oCell = null;
        try
        {
        	oCell = cl.getRange(oSheet,"B2");
            //B2セルに「Hello World」と設定
            oCell.setFormula("Hello World");
        }
        catch (java.lang.Exception e)
        {
            e.printStackTrace();
            System.out.println("セル書き出しで失敗");
        }

        //処理終了
        System.exit(0);
    }
}

で、以下、このように分けたときの、
・OpenOffice立ち上げまでのクラス
・表計算(Calc)操作のクラス
のクラスについてです。



■OpenOffice立ち上げまでのクラス
こんな感じになります。
/**
 * OpenOfficeクラス
 * OpenOffice全体の基本クラス
 * 起動をする
 */
import com.sun.star.lang.*;
import com.sun.star.bridge.*;
import com.sun.star.uno.*;
import com.sun.star.frame.*;

public class OpenOffice {

	//OpenOffice.org との接続
    String sConnectionString 	=	null;

    /*
     *	ポート番号 
     */
	public	int	port		=	8100;

    /*
     *	接続ホスト名 
     */
	public	String	hostname	=	"localhost";

    /**
     * OpenOffice.orgとの接続
     * @param connectStr String
     * @return XMultiServiceFactory
     * @throws Exception Exception
     */
    public XMultiServiceFactory connect() throws java.lang.Exception
    {

	String connectStr = "uno:socket,host="+ hostname + ",port="
 		 + Integer.toString(port)+";urp;StarOffice.NamingService";
        XMultiServiceFactory xMSF = null;

		//==============================//
		// コンポーネントを初期化する
		//==============================//
        XComponentContext cnt = null;
     	cnt = 
     	 com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);
		
		//==============================//
		//	サービスマネージャー取得
		//==============================//
        XMultiComponentFactory localMgr =cnt.getServiceManager();

		//==============================//
		//  接続		
		//==============================//
        Object xUrlResolver = localMgr.createInstanceWithContext(
                "com.sun.star.bridge.UnoUrlResolver",cnt);

		XUnoUrlResolver urlResolver	=	null;
        urlResolver =
    	        (XUnoUrlResolver) UnoRuntime.queryInterface(
                XUnoUrlResolver.class,xUrlResolver);

        Object rInitialObject = urlResolver.resolve(connectStr);

        XNamingService rName =
    	        (XNamingService) UnoRuntime.queryInterface(
                XNamingService.class,rInitialObject);

        if (rName != null)
        {
	
   	        Object rXsmgr =
       	        rName.getRegisteredObject("StarOffice.ServiceManager");

            xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(
                    XMultiServiceFactory.class,rXsmgr);
        }

		//==============================//
		//  かえる
		//==============================//
        return (xMSF);
    }
}


これで、
OpenOffice of = new OpenOffice();
XMultiServiceFactory  xMSF = of.connect();
とすれば、つながります。

ポートや接続先は、ofの属性になっているので、
変更する必要があれば、生成した後、connect()を呼ぶ前に設定します。



■表計算(Calc)操作のクラス
こんな感じになります。
/**
 * 表計算の操作
 */
import com.sun.star.lang.*;
import com.sun.star.bridge.*;
import com.sun.star.uno.*;
import com.sun.star.frame.*;

import com.sun.star.sheet.*;
import com.sun.star.container.XIndexAccess;
import com.sun.star.table.*;
import com.sun.star.beans.PropertyValue;

public class Calc {

	XMultiServiceFactory xMSF	=	null;
	
	public	Calc(XMultiServiceFactory xMSF)
	{
		this.xMSF	=	xMSF;
	}
	
    /**
     * Calc ドキュメントを起動します。
     * @param doc オープンするドキュメント
     * @param type _blankなど、開き方
     * @return XSpreadsheetDocument
     */
    public XSpreadsheetDocument open(String doc,String type)
    					 throws java.lang.Exception
    {

        //define variables
        XInterface oInterface;
        XDesktop oDesktop;
        XComponentLoader oCLoader;
        XSpreadsheetDocument oDoc = null;
        XComponent aDoc = null;

        oInterface =
          (XInterface) xMSF.createInstance("com.sun.star.frame.Desktop");
        oDesktop =
           (XDesktop)UnoRuntime.queryInterface(XDesktop.class,oInterface);
        oCLoader =
           (XComponentLoader) UnoRuntime.queryInterface(
           					XComponentLoader.class,oDesktop);
        PropertyValue[] szEmptyArgs = new PropertyValue[0];
        aDoc = oCLoader.loadComponentFromURL(doc,type, 0, szEmptyArgs);
        oDoc = (XSpreadsheetDocument) UnoRuntime.queryInterface(
                    XSpreadsheetDocument.class,aDoc);
        return oDoc;
    }
    
    /**
     * シートをとってきます。
     * @param myDoc とってくるドキュメント
     * @param pos 取ってくるシート(0先頭)
     * @return XSpreadsheet
     */
    public XSpreadsheet getSheetByPosition
    		(XSpreadsheetDocument myDoc,int pos)
    		throws java.lang.Exception
    {
        XSpreadsheet oSheet = null;

            //Calc のシートオブジェクトを取得
        XSpreadsheets oSheets = myDoc.getSheets();
        XIndexAccess oIndexSheets =
                (XIndexAccess) UnoRuntime.queryInterface(
                    XIndexAccess.class,oSheets);

            //一番目のシートオブジェクトを取得
        oSheet = (XSpreadsheet) UnoRuntime.queryInterface(
                   XSpreadsheet.class,oIndexSheets.getByIndex(pos));

 		return	oSheet;
    }

    /**
     * セルをとってきます。
     * @param oSheet とってくるシート
     * @param posstr 場所
     * @return XCell
     */
    public XCell getRange(XSpreadsheet oSheet,String posstr)
    		throws java.lang.Exception
	{
		//==========================//
		//指定されたレンジを取ってくる
		//==========================//
        XCellRange xCellRange = oSheet.getCellRangeByName(posstr);
		com.sun.star.sheet.XSheetCellRange xSheetCellRange =
       		(com.sun.star.sheet.XSheetCellRange) UnoRuntime.queryInterface(
            	com.sun.star.sheet.XSheetCellRange.class,xCellRange);

		com.sun.star.sheet.XSheetCellCursor xSheetCellCursor =
                oSheet.createCursorByRange(xSheetCellRange);

		//==========================//
		//そこにカーソルを持ってきて
		//==========================//
		com.sun.star.table.XCellCursor xCursor =
                (com.sun.star.table.XCellCursor) UnoRuntime.queryInterface(
                    com.sun.star.table.XCellCursor.class,
                    xSheetCellCursor);

		//==========================//
		//	カーソルの先頭を返す
		//==========================//
		return	xCursor.getCellByPosition(0, 0);
	}
}



上記でconnectを行った後、その返り値を引数として

Calc cl = new Calc(xMSF);

を行い、その後

XSpreadsheet myDoc = cl.open("private:factory/scalc","_blank");

とすれば、シートが取得できます。
あとは、いろいろ操作することになります。


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

機能要件と非機能要件は、別々に考えられる?

2007-02-07 13:52:52 | 開発ネタ

 で、昨日の非機能要件の話のつづき。

 業務内容をもとに作成する機能要件と、そのシステムを稼動させるに当たっての品質を規定する非機能要件は、従来、べつべつに考えるっていうことになっていました。
 むしろ、そのような制約を排除して、機能要件は定義づけたほうがいいという意見すらあります。




 でも、そーなんでしょうか?

 つまり、非機能要件が決定してしまうと、機能要件にまで影響することは、ありませんか?

 たとえば、商品をスキャンして、伝票を出して貼るという作業ですが、この場合、伝票が出るプリンターが、どこにあるか、どのくらいの時間で出るかという運用・稼動条件という非機能要件によって、機能要件である運用の流れがかわります。

 もし、プリンターが1箇所だったり、すぐに出てこないとしたら、
  ・事前にプリントアウトして、
  ・だれかが、いつか、それを現場に持っていって
  ・現場で、それを貼る
という流れになるだろうし、

 プリンターが小さく1人1台あって、すぐ出るとしたら、
  ・現場でスキャンしたら、
  ・プリント出力を待って、
  ・その出てきた伝票を貼る
 という形になると思います。




 ということで、現実的には、

・現状の業務分析をする

・現状の非機能要件の問題点を探る
  →開発するシステムの非機能要件の要望をだす

・開発するシステムの業務分析を、
 非機能要件の制約を考えながら
 作成する

ってことになると思います。
で、ここで、「非機能要件の制約」っていうのが、
問題になってくると思いますが、それはまたこんど。


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