エンジニアが発信する【2006年05月】の記事です

エンジニアが作る最新ITブログ トップ>【2006年05月】

2006年05月28日

フリーソフトウェアで収益を上げる事に対しての自分なりの考察 - 松のページブログ - 楽天ブログ(Blog)

 先日「株式会社オプトリンクス」というところから、自分の公開しているアドレスにアンケートが来た。どうも調べてみると、Vectorにソフトウエア作者登録していると(さらにアドレス公開してると?)送られてくるのかな?という感じだ。

 アンケートの内容は、フリーソフトまたはシェアウェアを作ってるかとか、どの程度ダウンロードされているかとかそんな感じ。

 この会社のシステムは、フリーソフトに広告表示を強制させることで、会社は収益を得る。フリーソフト作者にも一部還元する、ということのようだ。

 ちょっといやだね。自分が自由に利用してくださいって配布してるものに、わざわざ枷をはめるなんて。

 特に自分のフリーソフトは企業内で使われることを前提としているものもあるので、勝手に広告なんて表示させられない。インターネット上の反応もおおむね否定的で、GPLソフトウェアとのライセンスの互換性に問題を指摘するような内容もあった。

 とはいえ、うっすらと自分も思うところがあるわけで…。たとえば、フリーソフトを利用するのはタダだけど、開発費自体は結構かかったりする。時間もそうであるし、開発用のソフトウェアにも結構お金をつぎ込んだりもするわけで。まあ、根本的には趣味なのだけれど。

 なので、一般的にアドウェアと呼ばれる広告ソフトウェアも内容によっては否定するつもりはないです。まあ、自分がそうしようとも思わないし、大抵のフリーソフトウェアは「善意」のみによって提供されていると思う。まあ、シェアウェアにしたとたんに誰にも使ってもらえなくなるって言う現実もあるのだけどね。

 …書いてるうちに自分でもわからなくなってきたのだけれど、たぶん自分の言いたいことは「フリーソフトウェアを利用するときは、作者さんに少しだけ感謝してあげてね」ってとこかな。

2006年05月27日

水 - 松のページブログ - 楽天ブログ(Blog)

 asahi.com を見ていたら、東京の水についての記事があった。なんでも最近の東京の水は硬度浄水システムのおかげで相当おいしくなったとのこと。

 じつは4年前、富山県から千葉県松戸市に引っ越したとき、水のまずさに相当辟易した。富山では井戸水を引いていたらしく当然塩素臭などなかったのだが、松戸市では飲む以前に、水道の蛇口をひねっただけでクラクラするほどの塩素臭に襲われた。恐る恐る1口飲んでみるとなんだか胸焼けがした。さらにご飯を炊いてみると、何か間違った?と思うほど変な味がした。

 なるほど「東京」近辺の水は不味いんだなと認識し、蛇口に取り付けるタイプとポットでろ過する2種類の浄水器を買い、2重に浄水して飲むことにした。

 最近、東京都葛飾区に引っ越したのだけどasahi.comによると、この地区は「金町浄水場」の地区らしく、この「金町浄水場」の水は「水源がきれいな地方の水道水と比べて遜色ない」ほどおいしいとのこと。

 「え?ほんとう?」ということで実験してみました。

 実験に用いたのは以下の3種類
  • ペットボトルの水(岩清水・新潟県南青沼)
  • 2重にろ過した水道水(クリンスイ&ブリタ)
  • 水道水そのまま

     まずペットボトルの水。さすがにうまい。硬度は24ml/Lとかなりの軟水なためか、相当まろやかな味わい。癖がまったく感じられないが幾分頼りないか?。ただ、以前Volvicを飲んだときはやや硬くておいしくないと感じたので、できるだけ硬度の低いものを選択しました。

     次に2重にろ過した水道水。いつも常用してます。塩素臭は特に感じない。ペットボトルより味が強く感じるが、硬度の違いかな?。別の要因かな?。やや後味が残る。

     最後に、水道水。恐る恐る飲んでみる。なるほど、松戸のときに感じた強烈な違和感や胸焼けはない。塩素臭はするが味はまあ我慢できるレベル。あ、でも後味がちょっと強い。やっぱ塩素はどうしようもないね。

     実験してみて気がついたのだけれど、水道水を汲むときに勢いよく蛇口をひねると塩素臭が強く感じる。少しずつ水を汲むとそれほど塩素臭がない。水しぶきで大分変わるものなのかな?。

     で結論。法律もあって水道水の塩素はどうしようもないらしいが、塩素については浄水すれば問題ないと感じた。2重にろ過した水道水とペットボトルでは、どちらが良いとは明確には言えないと思う。ただ、ペットボトルのものはやや上品にも感じたが、2重にろ過した水道水が劣っているという程ではないと思う。

     ということで最後に。
     塩素さえ除けば十分飲めるほどの浄水システムを作った金町浄水場の人たちに感謝!!

    岩清水
    クリンスイ
    ブリタ
    金町浄水場(東京都水道局)

  • 2006年05月17日

    Oracle10g Express Edition その2 - 松のページブログ - 楽天ブログ(Blog)

     昨日に引き続きまたしてもOracle 10g Express Edition のお話。

     OREATE DATABASE が動かないのなんでかな〜と調べていたら、どうも

    default tablespace USERS

    としてデフォルト表領域を指定しているのに実体となるデータファイルを指定していなかったからでした。手本にした資料が、OMF(Oracle Managed Files)を利用していたから書いていなかったのですね。自分はあまりOMFは使わないので…。ファイル名指定したいしね。

     と言う事で無事サンプルデータベースを作成する事ができました。

     流したSQL文は以下の通り(アイドルインスタンスに接続して実行・途中で初期化パラメータファイルに追加書き込みしてます)。

    shutdown abort
    connect sys/password as SYSDBA
    host echo startup oracle (nomount)
    startup nomount pfile=C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iDatabase/\/iinitORCL.ora
    host echo spool start
    spool create_db.log
    host echo create database
    create database ORCL
    user sys identified by password
    user system identified by password
    logfile
    'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_log1.log' size 50M reuse
    , 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_log2.log' size 50M reuse
    , 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_log3.log' size 50M reuse
    maxinstances 1
    maxlogfiles 16
    maxlogmembers 5
    maxdatafiles 100
    datafile 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_SYS_1.dbf' size 250M reuse
    autoextend on next 10M maxsize 500M extent management local
    sysaux datafile 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_SYSAUX_1.dbf' size 100M reuse
    autoextend on next 10M maxsize unlimited
    default tablespace USERS
    datafile 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_USERS01.dbf' size 100M reuse
    autoextend on next 10M maxsize unlimited
    default temporary tablespace TEMP tempfile 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_TEMP_1.dbf' size 50M reuse
    undo tablespace UNDOTBS01 datafile 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_undotbs_1.dbf' size 200M reuse autoextend on maxsize unlimited
    archivelog
    character set JA16SJIS
    ;
    host echo ########################################### >> C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iDatabase/\/iinitORCL.ora
    host echo # MTS >> C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iDatabase/\/iinitORCL.ora
    host echo ########################################### >> C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iDatabase/\/iinitORCL.ora
    host echo dispatchers="(PROTOCOL=TCP)" >> C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iDatabase/\/iinitORCL.ora
    host echo shared_servers=4 >> C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iDatabase/\/iinitORCL.ora
    create tablespace USERIDX
    datafile 'C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_IDX01.dbf' size 20M reuse
    autoextend on next 10M maxsize unlimited;
    @%ORACLE_HOME%/\/irdbms/\/iadmin/\/icatalog.sql
    @%ORACLE_HOME%/\/irdbms/\/iadmin/\/icatproc.sql
    connect system/password
    @%ORACLE_HOME%/\/irdbms/\/iadmin/\/icatdbsyn.sql
    @%ORACLE_HOME%/\/isqlplus/\/iadmin/\/ipupbld.sql
    @%ORACLE_HOME%/\/irdbms/\/iadmin/\/iutlxplan.sql
    grant select on SYSTEM.PLAN_TABLE to public;
    grant insert on SYSTEM.PLAN_TABLE to public;
    grant update on SYSTEM.PLAN_TABLE to public;
    grant delete on SYSTEM.PLAN_TABLE to public;
    spool off
    quit


    初期化パラメータファイルは次のような感じ(まだちょっとテキトウ・どっかからパクって来たものをベースに切り張り)

    ###########################################
    # Oracle database initialize file
    ###########################################


    ###########################################
    # Database and Instance Identification
    ###########################################
    db_name=ORCL
    db_domain=localdomain
    instance_name=ORCL

    ###########################################
    # Redo Log and Recovery
    ###########################################
    fast_start_mttr_target=300

    ###########################################
    # Miscellaneous
    ###########################################
    compatible=10.2.0.1.0

    ###########################################
    # Optimizer
    ###########################################
    query_rewrite_enabled=FALSE
    query_rewrite_integrity=ENFORCED
    star_transformation_enabled=TRUE

    ###########################################
    # Cursors and Library Cache
    ###########################################
    open_cursors=300

    ###########################################
    # Cache and I/O
    ###########################################
    db_block_size=8192
    db_file_multiblock_read_count=4

    ###########################################
    # Memory Managed Undo and Rollback Segments
    ###########################################
    sga_target=200M
    sga_max_size=200M
    pga_aggregate_target=10M
    sort_area_size=524288

    ###########################################
    # Undo Managed
    ###########################################
    undo_management=AUTO
    undo_retention=3600
    undo_tablespace=UNDOTBS01

    ###########################################
    # Job Queues
    ###########################################
    job_queue_processes=10

    ###########################################
    # Security and Auditing
    ###########################################
    remote_login_passwordfile=EXCLUSIVE

    ###########################################
    # File Configuration
    ###########################################
    control_files=("C:/\/ioraclexe/\/ioradata/\/iORCL/\/iORCL_CONTROL01.CTL")

    ###########################################
    # Processes and Sessions
    ###########################################
    processes=150

    ###########################################
    # Diagnostics and Statistics
    ###########################################
    background_dump_dest=C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iadmin/\/iORCL/\/ibdump
    core_dump_dest=C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iadmin/\/iORCL/\/icdump
    timed_statistics=FALSE
    user_dump_dest=C:/\/ioraclexe/\/iapp/\/ioracle/\/iproduct/\/i10.2.0/\/iserver/\/iadmin/\/iORCL/\/iudump

    ###########################################
    # Archive log mode
    ###########################################
    log_archive_dest=C:/\/ioraclexe/\/ioradata/\/iORCL/\/iArchive
    log_archive_format="ORCL_T%tS%sR%r.arc"


    とりあえず覚え書きとして。

    2006年05月16日

    Oracle10g Express Edition - 松のページブログ - 楽天ブログ(Blog)

     ちょっと前だけどOracleも無償DB出したね。IBMも、Microsoftもらしい。Microsoft SQL Server はさわった事無いのでちょっと期待、IBM DB2 はデッドロックでひどい目にあったので当分いいや?

     そんなこんなでOracle10g Express Edition に挑戦中。いちおう Oracle Master だしねウィンク。(旧体系でプラチウム)

     しかし、OracleはバージョンアップするごとにCREATE DATABASEが通らなくなる…ほえー

     まあ、いろいろ変わってるみたいだし。SYSAUXとかいう表領域がいつの間にか増えてるし、Oracle9i R2のころに書いたCREATE DATABASEが通らないよ?。いろいろ、CREATE DATABASE文とか、初期化パラメータファイルとかいじってんだけどな。


     出てくるエラーはこんな感じ
    ...
    Errors in file c://\/i/ioraclexe//\/i/iapp//\/i/ioracle//\/i/iproduct//\/i/i10.2.0//\/i/iserver//\/i/iadmin//\/i/iorcl//\/i/ibdump//\/i/iorcl_mman_596.trc:
    ORA-01519: error while processing file '' near line

    Instance terminated by USER, pid = 4196
    ORA-1092 signalled during: create database ORCL
    user sys identified by ****user system identified by ****logfile
    group 1 ('C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_log1.log') size 50M reuse
    , group 2 ('C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_log2.log') size 50M reuse
    , group 3 ('C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_log3.log') size 50M reuse
    maxinstances 1
    maxlogfiles 16
    maxlogmembers 5
    maxdatafiles 100
    datafile 'C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_SYS_1.dbf' size 350M reuse
    extent management local
    sysaux datafile 'C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_SYSAUX_1.dbf' size 350M reuse
    default tablespace USERS
    default temporary tablespace TEMP tempfile 'C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_TEMP_1.dbf' size 50M reuse
    undo tablespace UNDOTBS01 datafile 'C://\/i/ioraclexe//\/i/ioradata//\/i/iORCL//\/i/iORCL_undotbs_1.dbf' size 200M reuse autoextend on next 10M maxsize unlimited
    archivelog
    character set AL32UTF8
    ...


     ほかにも、Express Editionは日本語文字セットはAL32UTF8しか使えない?とか、作ろうとするインスタンスとは別のインスタンスが立ち上がってると、「oradim -new ○○」とかでサービスは作成されるけど、なぜかタイムアウトになってプロセスの戻り値が0以外になっているっぽい?もしかして複数インスタンスはNGなのか?とか。

     ふと思ったけど、うちのOSはWindows XP Media Center Edition だな〜。これが原因?。でもデフォルトインスタンスの"XE"は動いたしな〜。

     まあ、いいさ。また明日お勉強OK

    2006年05月15日

    スカウトします!? - 松のページブログ - 楽天ブログ(Blog)

     ここでこんな事書いて良いものかどうか、よく分からないのだけど…

     うちの会社(自分の勤めてる会社)、社員さん大募集中なんですよね。ちょっと前までは、「へー、そうなんですか」って立場だったのですが、なんだかチョビットだけ役職手当なるものが付く立場になってしまった関係上、自分も探したりしなければなりません。

     中途採用系のありがちな(?)Webサイトとかで探すもののなかなか難しい。まさか自分が採用に関与する立場になるとはちょっと前まで思ってみませんでした。

     そんなこんなで、以下のような方歓迎!。

    1.済みません、新卒は無理っす。
    2.Javaとかデータベース(Oracle, DB2, etc...)得意だといいな!。(.netも良いかな)
    3.これも済みません。20代がいっぱいいっぱいです。
    4.勤務地は基本、東京都です。

    あえて言えば、仕事が楽だとか、給料良いよとは言いません(まあ普通?)。それでもちょっとでも興味もたれた方、匿名でよいのでご連絡いただけるとありがたいです。

    2006年05月15日

    tcpmon

    tcpmonは、HTTPのリクエスト・レスポンスを取得できます。TCPモニターなので、telnetやsmtpの送受信データも取得できる(はず)。

    1. axis.jarを入手するために、「jakarta axis」で検索する。
    2. 「java -cp lib/axis.jar org.apache.axis.utils.tcpmon」を実行する。
    3. 待ち受けるポートと、転送先のIPとポートを指定して、追加ボタンを押す。
    4. 「localhost:待ち受けるポート」にアクセスすればソケット接続ごとにリクエスト・レスポンスを表示します。

    使ってみると、意外と便利なツールだったりします。むかし同じものを自作しようとして、どうも安定しなかったが、tcpmonもずっと使っていると固まったりします・・。



    2006年05月14日

    Javaクイズ1

    たまたまthisの説明をするために、サンプルソースを作った。

    public class Sample1 {
      private int size;
      public void setSize(int size) {
        size = size;
      }
      public int getSize() {
        return size;
      }
      public static void main(String[] args) {
        Sample1 obj = new Sample1();
        obj.setSize(100);
        System.out.println("size="+obj.getSize());
    }
    

    質問)これを実行すると、どんな結果になりますか?

    ・・・

    答え)"size=0"と表示される。
    もし"size=100"と表示されたいのならば、setSize()メソッドを「this.size = size;」に直す。

    ・・・

    ちょっと興味深い結果だったのが、100が代入されないということは分かっていたのだが、初期化されていないsizeがどうなるかが分からなかったらしい。(たぶん誰もそこまで詳しく説明していない)。すると、「例外が出る」と答えた人がいたりする。



    2006年05月14日

    Javaクイズ2

    今度は継承した場合。

    public class Parent {
      protected int color;
      //省略
    }
    
    public class Sample2 extends Parent {
      public void setColor(int color) {
        this.color = color;
      }
      public int getColor() {
        return color;
      }
      public static void main(String[] args) {
        Sample2 obj = new Sample2();
        obj.setColor(100);
        System.out.println("color=" + obj.getColor());
      }
    }
    

    質問)これを実行すると、どんな結果になりますか?

    ・・・

    答え)"color=100"と表示される。
    setColor()メソッドのthis.colorについて、Sample2クラスにはcolor変数は存在しないが、Parentクラスのcolorがprotected属性なので継承された変数がthisでアクセスできる。

    ・・・

    Sample2クラスにcolorはないので、さすがにコンパイルエラーと思った人もいた。分かりにくいと言っていた。その通りです。this.colorよりもsuper.colorの方が迷うことがないです。



    2006年05月14日

    Javaクイズ3

    クイズじゃないかもしれないけど、こんな勘違いをするのか・・という例。

    public class Sample3 {
    public void static main(String[] args) {
    Command cmd = null;
    try {
    cmd = Util.get("sample3");
    } catch (Exception e) {
    System.out.println(e);
    }
    cmd.execute();
    }
    }

    質問)Util.get()で例外が投げられた場合、cmd=nullとなり、execute()メソッドを呼び出す際にNullPointer例外となります。どう直すべきでしょうか?

    ・・・

    答え)cmd.execute()をUtil.get()の直後に移動させる。すると、必ずcmd != nullの時だけexecute()が呼び出される。

    ・・・

    その1)cmd.execute()の前後をif (cmd != null) { ... }で囲む。
    ⇒確かにnullチェックすれば例外は出ないけど、なんのためにその前でtry-catchしているんでしょうか。後のC言語と同等のソースよりも面倒になっているだけ。

    その2)cmd.execute()の前後をtry { ... } catch (Exception e) {}で囲む。
    ⇒例外は出るけどcatchして握りつぶせば誰も分からねえだろ・・という感じか。

    ・・・

    つまり例外の使い方次第なのだが、その1やその2を書いてしまうくらいならば例外なんて無いほうがいい。つまり、次のように書いたほうがよっぽど分かりやすいと思うけど。

    public class Sample3 {
    public void static main(String[] args) {
    Command cmd = null;
    cmd = Util.get("sample3");
    if (cmd != null) {
    cmd.execute();
    }
    }
    }

    何のことはない。例外を持っていないC言語と変わらなかったりする。



    2006年05月12日

    ヴェーダ数学?…ついでに2桁の掛け算を暗算で計算する方法 - 松のページブログ - 楽天ブログ(Blog)

     世の中にはヴェーダ数学と言うものがあるらしい。ちょっとマンガで読んだら出てきたのだ。

     気になってインターネットで調べてみると、たとえば2つの数字の掛け算をするとき、
    ・1の位の和が10になる。
    ・10の位以上の値が同じ
    のとき、計算結果は
    =(10の位以上の値)×(10の位以上の値+1)×100+2値の1の位の値をかけたもの

    となるそうです。なんだかわかりにくいので例を書くと、

    23×27=2×(2+1)×100+3×7=621
    54×56=5×(5+1)×100+4×6=3024
    122×128=12×(12+1)×100+2×16=15616

    とかです。10の位の計算部分は100を掛けているので、下2桁は1の位の積ですね。2桁までなら何とか暗算できるかな??。これはつまり、

     AB×AC

    と言う式があり、Aには任意の正数、BとCは1桁の正数でB+C=10とすると

    ABは(A×10+B)、ACは(A×10+C)なので、

    =(A×10+B)×(A×10+C)

    となり、

    =(A×10+B)×A×10+(A×10+B)×C
    =(A×10×A×10+B×A×10)+(A×10+B)×C
    =(A×10×A×10+B×A×10)+(A×10×C+B×C
    =A×10×A×10+B×A×10+A×10×C+B×C
    =A×A×100+B×A×10+A×10×C+B×C
    =A×A×100+A×10×B+A×10×C+B×C
    =A×A×100+A×10×(B+C)+B×C

    となり、B+C=10なので、

    =A×A×100+A×10×10+B×C
    =A×A×100+A×100+B×C
    =(A×A+A)×100+B×C
    =(A×(A+1))×100+B×C
    =A×(A+1)×100+B×C

    と言うことになるのかな。うーん、難しい(ちょっと面白い)

    でもせっかくなのでちょっと発展させて、

    AB×CDを考えると

     (A×10+B)×(C×10+D)
    =(A×10+B)×C×10+(A×10+B)×D
    =(A×10×C×10+B×C×10)+(A×10+B)×D
    =(A×10×C×10+B×C×10)+(A×10×D+B×D)
    =A×10×C×10+B×C×10+A×10×D+B×D
    =A×C×100+B×C×10+A×10×D+B×D
    =A×C×100+B×C×10+A×D×10+B×D
    =A×C×100+(B×C+A×D)×10+B×D

    ですね。こう書くと自分でもよく分からないんですが、つまり、

    23×45が有った場合、

    2×4= 10の位同士をかける
    3×4+2×5=22 各々の 1の位と10の位をかけたものを足す(たすきがけ)
    3×5=15 1の位同士をかける

    として、

    002215=1035

    これなら、がんばれば何とか2桁の掛け算が暗算でできるかな?ウィンクと、今日はそんなことばかり考えてました。

    嗚呼、今日は式がいっぱい。

    エンジニアが作る最新ITブログ トップ>【2006年05月】

    メンバー紹介

    タグパネル

    ランキング

    エンジニアが作る最新ITブログ DODA