2008年11月アーカイブ

S2Daoを使ったプログラミングの核となる、Entity(JavaではBeanと表現する。データを入れる「箱」)とDao(Data Access Object。データベース等へのアクセスを透過する)を作っていきませう。

とりあえず、不本意ながらどこにでもあるような 社員と部署 のサンプル を考えてみます。データは以下の通り

EMPLOYEE テーブル

IDNAMEDEPT
1山田 太郎1
2田中 一郎2
3鈴木 源太郎1

DEPT テーブル

IDNAME
1開発
2営業

DateTime::TimeZone をupdate中に気付いたんだけど、 Win32::TieRegistry (v0.25) の SubKeyNames が失敗することがある。

ざっと見てみたところによると、 Win32::TieRegistry::_NoMoreItems() が正しく真値を返さないせいで、Win32::TieRegistry::_enumSubKeys() で subkeys が設定されていない様子。(なので、subclassesもsubtimesも設定されない)

Win32::TieRegistry::_NoMoreItems() は、Win32::WinError が入っていない状態だと、 Win32::FormatMessage(Win32::GetLastError()) =~ m/^No more data/ を返す。
なので、Win32::FormatMessage() がlocaleに合わせたメッセージを返してくると、マッチが成功せず、真値を返すべきところ間違って偽値を返してしまう。

修正については現在 RT で議論されているので、とりあえずのworkaroundを..

# Win32::TieRegistry
sub _NoMoreItems
{
    return 1 if _ErrNum== 259; # <-- これを追加。(259は No more items のエラーコード)
    return
      $_NoMoreItems =~ /^\d/
        ?  _ErrNum == $_NoMoreItems
        :  _ErrMsg =~ /$_NoMoreItems/io;
}

... Win32::WinError 入れろって? ごもっとも..

S2Dao.NET を使った諸々を書く前に、S2Dao.NETが使ってる log4net の設定をする。

まず、configファイルの変更をlog4netが検知できるようにするため、 properties/AssemblyInfo.cs に以下の行を加える。

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

そして、app.configを作成し、log4netの設定を書き込む。

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <appender name="ConsoleAppender"
      type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.SimpleLayout">
      </layout>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
</configuration>

上のは単なる例なので、一番手間のかからないConsoleAppenderとSuimpleLayoutの組み合わせを使っている。

これで、log4net を利用する準備ができたので、一応確認しておく。

using System;

namespace S2DaoTest
{
  class Program
  {
    private static readonly log4net.ILog logger =
      log4net.LogManager.GetLogger(typeof(Program));

    /// <summary>
    /// エントリポイント
    /// </summary>
    /// <param name="args">使わない</param>
    public static void Main(string[] args)
    {
      logger.Info("Hello, world");

      Console.Write("Press any key to continue . . . ");
      Console.ReadKey(true);
    }
  }
}

ビルド・実行して、コンソールウィンドウに "INFO - Hello, world" と出力されればOK

但し、注意点。
ユーザコードでlog4netを使うより先にS2Dao/S2Container がlog4net を使用するような場合は、S2Dao/S2Containerを使う前にlog4netの初期化コードを入れなければならない。らしい

using System;

namespace S2DaoTest
{
  class Program
  {
    /// <summary>
    /// エントリポイント
    /// </summary>
    /// <param name="args">使わない</param>
    public static void Main(string[] args)
    {
      // http://s2container.net.seasar.org/ja/setup.html#log4net
      System.IO.FileInfo info = new System.IO.FileInfo(
          log4net.Util.SystemInfo.AssemblyShortName(
            System.Reflection.Assembly.GetExecutingAssembly())
          + ".exe.config"); // アセンブリがdllの場合は".dll.config"

      log4net.Config.XmlConfigurator.Configure(log4net.LogManager.GetRepository(), info);

      /* S2Dao/S2Container を 使う */
      // ...

      Console.Write("Press any key to continue . . . ");
      Console.ReadKey(true);
    }
  }
}

Seasarプロジェクト にある S2Dao.NET を使ってみたので、諸々を備忘録代わりに。

Q. S2Dao.NET って何? --- A. O/Rマッパーの一。 S2Dao の .NET Framework 対応版

Q. 入手方法? --- A. 本記事執筆時点では、 S2Container.NET に取り込まれているので、 S2Container.NETの最新版をダウンロードしてくればよろしいでしょう。

Q. prereqs? --- A. 公式のドキュメントには log4net を使ってるからどーのこーの書いてあるけど、アセンブリはS2Containerの配布物に同梱されてる。

Q. 事前に仕入れておいたほうがよい知識 --- A. AOP, インタフェースプログラミング, DI (後、おまけで ADO.NET)

-----

準備は整った。おもむろに VisualStudio ででも SharpDevelop ででも、 適当なSolutionとProjectを作り、 Seasar.DLL, Seasar.Dao.DLL, log4net.DLL を参照設定に追加しよう。

また、利用するDBがMS SQL Server や Oracle でない場合は、別途 ADO.NET対応のデータプロバイダを用意しよう。(例:SQLite なら System.Data.SQLite が利用できる)

まだですよー

ハノイの塔 をたくさんの言語で。

唐突に書きたくなって、頑張って色々書いてみた。(残念ながらスタック型言語(Brainf*ckとかwhitespaceとかは無い)

ハノイの塔回答プログラムのポイントはおおよそ2点

  • 関数/サブルーチン等の再帰呼び出し処理
  • 経過を出力する際の文字列フォーマッティング

それでは、どうぞ

arigatou_sayounara.mid

井出隆夫作詞 福田和禾子作曲 「ありがとう・さようなら」

毎年卒業式のシーズンになるとみんなのうたで流れてきた曲です。(今はどうだろう..

校舎、校庭、リードオルガン、不自然に飛んでくるサッカーボール 等の映像に合わせてこの曲が流れていたのを記憶しています。きっと今でもちょっと泣きそうになる曲。えぇ歌やのぅ

サイドバー左下あたりに drawrのブログパーツをくっつけてみました。

想定されてる幅が170pxらしいんだけどうちのサイドバーは160pxなのよね...
そんなわけで、ちょっと端っこが切れて変な感じですが、まぁ、見れなくはないのでいいか。

drawrでは基本的に18禁相当のエロいのは描いちゃだめってことになってるので、そーゆーのを求めてやってきてるわけではない人にもきっと安心。 ...なはず (ここでは[ちょっとえちぃの]に分類されるような絵もないではないので、そういう向きには申し訳なく... drawrがレーティングを実装してくれたら何とかなるかもですけどねー (他人任せ

か っ こ い い !

にしても、サイレンサーつけてよくこんな音出せるなぁ。すげぇよ。

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic