Headline About TechLog Download Java VBA Link

April 1, 2008.

春は曙、...ってもはや相撲取りのイメージが払拭できないよね。


3月のアクセス数/閲覧数は12万/108万と一気に増加しました。これによりGoogleAdsenseによる収益も月額20万円を超えました。脱サラを考える今日この頃ですが、会社の上司の事を考えると僕がいまプロジェクトを抜けるのは痛手だと思うので....ってこれはもはや、エイプリルフールと言うより、妄想の領域だな。

 

3月のアクセス数/閲覧数は1,530/2702。若干2月よりは増えたものの、1ヶ月が2日多いからだと考えると計算が合うレベル。やはり、日記をどれだけ書いても、意味のあるコンテンツを増やさないとアクセス数は増えない。重要なコンテンツに対するリピータは思ったより多いと言う事か。あと、Adsenseの収益は実質0円なので、サラリーマンは継続予定だ(まだ最低送金額に達した事がない)。

相変わらずMexaに関するアクセスが圧倒的だが、VBに関するアクセスも随分増えた。コンテンツを増やさないと。また、Javaの格言など、豆知識的な記事も検索ヒットではなく、その後のPVに関しては重要である。読んで面白いのだろう。そのあたりのコンテンツは増やしていきたいところだ。

 

今日もC#でいろいろと。Threadやinvokeなどで遊んだ。と言うわけで、今日は日記の最後にThreadプログラミングの事について記述。次回はinvokeの話でも書こうかなと言うところ。GUI構築、イベント処理、Thead処理、ファイル入出力は出来るようになったので、後はsocketとDB関係さえ理解すればクライアントは何でも作れそうだ。webアプリもやらないと仕事の知識としては意味が無いのだが、そっちは個人で学ぶには面倒な上に利点が少ない。まぁ、軽くSNS的サービスぐらい組んでみた方が勉強になるのだろうけど、果たしてやるかなぁ。

 

通勤電車ではいつもどおり読書&英語。宮部みゆきの「誰か」は7割のところでストップ。英語はあと少しで2マス進むところだったが、届かず31/105まで。性的描写が存在するシーンだったため、電車で訳すのは若干恥ずかしかった。英語の官能小説を訳しながら読む変なフェチだと思われたらどうしよう(いません)。

帰りに最近近くに出来たCOCOSに寄った。初COCOSだったのだが、Denny's的なファミレスとの予想で注文。結果は.....裏切られた。良い方に。とても美味しかった。写真で見て「スパイシーだったり濃厚だったりするのだろう」と想像した料理が全部、素材を生かした味付けなのだ。煮込みハンバーグのトマトソースにパプリカなどの野菜が一杯で、酸味や触感が素晴らしかった。入り口にバリアフリーを目指したインターホンがついていたり、子供用に低アレルゲンメニューがあったりと、健康やそういったものをかなり意識したファミレスのようだ。ティーポットで紅茶が飲めたりと、とても素敵な店。贔屓にしようと思った。これでnetがつながったら、家に帰らなくなるな。

ファミレスで英訳を少し読んでもらい、早く続きを訳さなければと若干モチベーション・アップ。帰ってからも少し英訳をしてあと少しで3マスの32/105で停止。ちょっとの違いではあるが、1日1マスずつ進むのと2マスずつ進むのでは大きな違いがでる。2倍ぐらい違う。って、それは当たり前だろう。

 

 

【C#でスレッドプログラミング】

C#で別スレッドにプログラムを行なわせる場合、Threadを継承するのではなく、ThreadStartを引数にnewしたThreadインスタンスを用いる。と説明すると分かりにくいが、JavaでいうとThreadではなくRunnableインターフェイスを用いる例に近い。

 

//javaの例

public class Test {

  private void startThread() {

    Thread thread = new Thread(new Worker());

    thread.start();

  }

 

  class Worker implements Runnable {

    public void run() {

      for (int i = 0; i < 100; i++) {

        try {

          Thread.sleep(1000);

          System.out.println(i + "回目");

        } catch (InterruptedException e) {

        }

      }

    }

  }

}

//C#の例

public class Test

{

  private void startThread()

  {

    Thread thread = new Thread(new ThreadStart(this.run));

    thread.Start();

  }

 

  public void run()

  {

    for (int i = 0; i < 100; i++)

    {

       Thread.sleep(1000);

       System.Console.WriteLine(i + "回目");

    }

  }

}

 

実はC#のThreadは継承できないクラスなのだ。new ThreadStart(this.run)という表記で分かるとおり、C#のThreadで実行するメソッドはdelegateを用いて関数ポインタ的に指定する。したがってjavaの場合と異なり、メソッドはrunでなくても好きな名前の物でよい。また、今回はthis.runのようにインスタンスを指定したが、Worker.runのようにメソッド名をstaticに参照してもかまわない。ただし、後者の場合はThread処理からstaticな処理しか出来なくなるため、実際には前者を用いる事が多くなるだろう。難点はThreadやRunnableを継承したクラスとして設計できないため、初期化に用いる変数などを与えるのが面倒な点や、プール化の際に改めてインスタンス管理を考えなければいけない点だろう。逆に利点は、最初からマルチスレッド動作を考えずとも、普通にイベントドリブンで作っていた処理が、重いな、と感じた時に設計変更せずマルチスレッド化が可能な点だ。まぁ、実際のところはJava方式でもそういう対応は可能だし、どちらの場合もそういう場渡り的設計でマルチスレッドに手を出すと大やけどをするわけだが。

 

余談かつ予断だが、このようにインターフェイスを実装するのではなく、delegateをAddしていくC#のスタイルは、(遺伝子⇔表現型) = (Class ⇔ Object)という、多くのオブジェクト指向言語のスタイルとはかけ離れている。Is A関係よりPart Of関係が多用されており、うっかりするとただの構造化になりかねない。無論、GUIの部品程度に変な継承関係を作るより、Part Ofで構築した方が効率が良いと言う意見には、充分な説得力があるとは思う。使わないInterfaceメソッドを全部空で実装しなければならないような不便は無い。そのあたりはJavaも5か6あたりから改善されていた気もするが(確かめてない)。ともあれ、C#やVisual C#がツールとして強力なのは認めざるを得ない。

 

 

【今日の実績】

・英語 :90min (32/105)

・アプリ:C#版データコンバータのファイル読込み、データ整形処理まで完成。


名前: 意見: パス:

※パスにはこの日記のタイトルをコピペして下さい。


April, 2008
SUN MON TUS WED TUR FRI SAT
12345
6789101112
13141516171819
20212223242526
27282930