Archive for the ‘IronRuby’ Category

  1. Hello, Connector/NET(IronRuby) World!

    Posted on 4月 8th, 2013 by cx20

    Connector/NET(IronRuby)

    Connector/NET は、.NET ベースの MySQL 接続用 API である。
    以下は IronRuby による Connector/NET ライブラリを使用した MySQL への接続例となっている。

    ソースコード(IronRuby + Connector/NET + MySQL)

    require 'mscorlib'
    require 'System'
    require 'MySql.Data'
    include System
    include MySql::Data::MySqlClient
     
    conStr = "server=localhost;user id=root;password=P@ssW0rd"
    sqlStr = "SELECT 'Hello, Connector/NET World!' AS Message"
     
    con = MySqlConnection.new(conStr)
    cmd = MySqlCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    実行方法

    C:¥> ir Hello.rb

    実行結果

    MESSAGE
    ---------------------
    Hello, Connector/NET World!
  2. Hello, ODP.NET(IronRuby) World!

    Posted on 2月 14th, 2013 by cx20

    ODP.NET(IronRuby)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(IronRuby + ODP.NET + Oracle)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    require 'Oracle.DataAccess'
     
    include System
    include System::Data
    include Oracle::DataAccess::Client
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection.new(conStr)
    cmd = OracleCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> ir Hello.rb

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  3. Hello, ADO.NET(IronRuby) World!

    Posted on 2月 13th, 2013 by cx20

    ADO.NET(IronRuby)

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(IronRuby + ADO.NET + OLE DB + Jet データベース)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::OleDb
     
    conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection.new(conStr)
    cmd = OleDbCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + OLE DB + ACE データベース)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::OleDb
     
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection.new(conStr)
    cmd = OleDbCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + SQL Server)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::SqlClient
     
    conStr = "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = SqlConnection.new(conStr)
    cmd = SqlCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + Oracle)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    require 'System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
     
    include System
    include System::Data
    include System::Data::OracleClient
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection.new(conStr)
    cmd = OracleCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + ODBC + MySQL)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data::Odbc
     
    conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OdbcConnection.new(conStr)
    cmd = OdbcCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    実行方法(64bit OLE DB 使用時)

    C:¥> ir64 Hello.rb

    実行方法(上記以外)

    C:¥> ir Hello.rb

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  4. Hello, COM(IronRuby) World!

    Posted on 2月 2nd, 2013 by cx20

    COM(IronRuby)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は IronRuby による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    require 'mscorlib'
    include System
    include System::Reflection
    include System::Runtime::InteropServices
     
    objType = System::Type.GetTypeFromProgID("Shell.Application")
    shell = System::Activator.CreateInstance(objType)
     
    hwnd = 0
    title = "Hello, COM(IronRuby) World!".to_clr_string
    option = 0
    rootFolder = 36
    params = System::Array[System::Object].new [hwnd, title, option, rootFolder]
     
    folder = shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, nil, shell, params )
    if folder != nil then
        System::Runtime::InteropServices::Marshal.ReleaseComObject(folder)
    end
    System::Runtime::InteropServices::Marshal.ReleaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> ir Hello.rb

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(IronRuby) Wolrd!            |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  5. Hello, Win32 API(IronRuby) World!

    Posted on 6月 19th, 2012 by cx20

    Win32 API(IronRuby)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    IronRuby には Win32 API を直接呼び出す機能は実装されていないが、C# を経由することで、Win32 API を呼び出すことが可能となっている。

    ソースコード(C#)

    using System;
    using System.Runtime.InteropServices;
     
    namespace Win32Lib
    {
        public class Win32
        {
             [DllImport("user32.dll", CharSet=CharSet.Auto)]
             public extern static uint MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);
        }
    }

    コンパイル方法(C#)

    C:¥> csc /target:library Win32Lib.cs

    ソースコード(IronRuby)

    require 'System'
    require 'Win32Lib'
    include System
    include Win32Lib
     
    Win32.MessageBox( IntPtr.Zero, "Hello, Win32 API(IronRuby) World!", "Hello, World!", 0 )

    実行方法

    C:¥> ir hello.rb

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(IronRuby) World!
    ---------------------------
    OK   
    ---------------------------
  6. Hello, Windows Forms(IronRuby) World!

    Posted on 6月 9th, 2012 by cx20

    Windows Forms(IronRuby)

    Windows フォーム(Windows Forms)は .NET Framework におけるユーザーインターフェイス基盤である。Windows アプリケーションにおけるウィンドウやダイアログに対応する。
    以下は IronRuby における Windows フォーム の例となっている。

    ソースコード

    require 'mscorlib'
    require 'System.Windows.Forms'
    require 'System.Drawing'
    include System::Windows::Forms
    include System::Drawing
     
    class HelloForm < Form
      def initialize
        self.Size = Size.new 640, 480
        self.Text = "Hello, World!"
        label1 = Label.new
        label1.Size = Size.new 320, 20
        label1.Text = "Hello, Windows Form(IronRuby) World!"
        self.Controls.Add( label1 )
      end
    end
     
    form = HelloForm.new
    Application.Run(form)

    実行方法

    C:¥> ir Hello.rb

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Windows Forms(IronRuby) World!     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. Hello, IronRuby World!

    Posted on 1月 21st, 2012 by cx20

    IronRuby

    IronRuby はオブジェクト指向スクリプト言語 Ruby の .NET 実装である。
    Ruby の構文が使える他、.NET Framework のライブラリが利用できる。
    C# 同様に、UNIX 環境向けの .NET Framework 互換プロジェクト「Mono」により他の OS でも動作させることができる。

    ソースコード

    #!/usr/bin/env ir
    print "Hello, IronRuby World!"

    ソースコード(.NET ライブラリを使用した場合)

    #!/usr/bin/env ir
    require 'mscorlib'
    require 'System'
    System::Console.WriteLine("Hello, IronRuby World!")

    実行方法(スクリプトファイルを指定して実行)

    $ ir hello.rb

    実行方法(実行権限を付与して実行)

    $ chmod +x hello.rb
    $ ./hello.rb

    実行結果

    Hello, IronRuby World!