2011年08月04日

mono(4) sampleを入れまふ

大したことじゃないのだけれど、gtk#は情報が少ない。
まあ、英語に自信があるなら問題ないけど。
自分のようにそうじゃない人は、英語じゃなくてC#で会話しましょう。

パッケージマネージャで「monodoc-gtk2.0-manual」を入れましょ。
入れるのは問題ないのだけれど、どこに入ったかわからない(苦笑)

find / -name *gtk*
find / -name *gtk* | grep gtk

とかで探しましょう。
もしかすると、アスタリスクは不要かも。
うちの環境では「/usr/share/gtksharp2-examples/」に入っていた。
たぶん、普通はここに入っているでしょう。

続きを読む
posted by w033 at 21:42| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2011年08月03日

mono(3) gtk#のソースを見てみる

前回のテストプログラムで自動生成されたプログラムを見てみます。
MainWindow.csはpartialで2ファイルにわかれていますが、面倒なんでくっつけました。

Main.cs - Mainのstaticメソッドを記載
using System;
using Gtk;

namespace test01
{
class MainClass
{
public static void Main (string[] args)
{
Application.Init ();
MainWindow win = new MainWindow ();
win.Show ();
Application.Run ();
}
}
}

こちらはなんの変哲もないMainですね。
using以外は、Windowsと変わりません。。。よね。



MainWindow.cs - Windowの定義を記載
using System;
using Gtk;

public partial class MainWindow : Gtk.Window
{
private global::Gtk.Fixed fixed1;

private global::Gtk.Button button2;

public MainWindow () : base(Gtk.WindowType.Toplevel)
{
Build ();
}

protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}

// test button
protected virtual void OnButton2Clicked (object sender, System.EventArgs e)
{
using(MessageDialog md = new MessageDialog(this,DialogFlags.Modal,MessageType.Info,ButtonsType.Ok, false,"TEST"))
{
//md.Run();
//md.Destroy();
md.Show();
}
}

protected virtual void Build ()
{
global::Stetic.Gui.Initialize (this);
// Widget MainWindow
this.Name = "MainWindow";
this.Title = global::Mono.Unix.Catalog.GetString ("MainWindow");
this.WindowPosition = ((global::Gtk.WindowPosition)(4));
// Container child MainWindow.Gtk.Container+ContainerChild
this.fixed1 = new global::Gtk.Fixed ();
this.fixed1.Name = "fixed1";
this.fixed1.HasWindow = false;
// Container child fixed1.Gtk.Fixed+FixedChild
this.button2 = new global::Gtk.Button ();
this.button2.CanFocus = true;
this.button2.Name = "button2";
this.button2.UseUnderline = true;
this.button2.Label = global::Mono.Unix.Catalog.GetString ("Test");
this.fixed1.Add (this.button2);
global::Gtk.Fixed.FixedChild w1 = ((global::Gtk.Fixed.FixedChild)(this.fixed1[this.button2]));
w1.X = 290;
w1.Y = 222;
this.Add (this.fixed1);
if ((this.Child != null)) {
this.Child.ShowAll ();
}
this.DefaultWidth = 400;
this.DefaultHeight = 300;
this.Show ();
this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
this.button2.Clicked += new global::System.EventHandler (this.OnButton2Clicked);
}
}

Buildメソッドは自動生成されたコードです。
MonoがUTF-8だからなのか、GUIに渡す文字列は global::Mono.Unix.Catalog.GetString("MainWindow"); みたいにするようですね。
ちなみに、日本語(UTF-8)も通ります。
動的に追加したいときは、上記のコードの後半をコピーすれば大体いけそう。
イベントのバインドはWindowsと変わらない感じ。
「global::」が付いているから微妙ですが、本当にあんまり変わらないですね。


続きを読む
posted by w033 at 19:49| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2011年08月02日

mono(2) hello, world...じゃない。

とりあえず、GTK#でhello, worldなんだけれど、Testというメッセージにしちゃったのでhello, worldじゃなくなっちゃった orz.

04.jpg
とりあえず、起動したら、ソリューションを作りましょう。
メニューは日本語なので、VisualStudio気分で作れます。
[ファイル]-[新規]-[ソリューション] で作れます。
ファイルが集まったものがプロジェクト。
プロジェクトが集まったものがソリューションだと思えばOK。
ソリューションやプロジェクトにしておくと、コンパイルとかビルドを一気にかけることができます。
また、普通に使っていれば1つのフォルダにまとめてくれますので、管理しやすいってなやつです。

05.jpg
ソリューションを作ると、プロジェクトを作れと言ってくるので、GTK#を選びましょう。
VisualStudioでいえば、Windowsフォームのプロジェクトに当たります。
位置と名前を決めて、進むボタンを選びます。

06.jpg
編集画面が出てきたら、ユーザインターフェイスというフォルダを開き、MainWindowをダブルクリックで開きます。
ソースコードかフォームのデザインが出てきます。
そのパネルの一番下にある「ソース」「デザイン」というボタンで切り替えができます。
ちなみに、図はソースのほう。
はじめの状態だと、一番下のメソッド(「//test button」書いているところから下)は無い状態から始まります。

07.jpg
こちらがデザインの状態。
デザインのパネルの右側にToolbox、アウトライン、プロパティーなどがあります。
設定で変えられるので、図ではちょっと違いますけど。
そこのToolboxを開き、ボタンを配置してみましょう。
でも、いきなり置くと、コンテナを先に置けと怒られます。
Linuxはだいたいそういうもんです。
Glade(スペルあってるかな?)とかいじってみるとわかりますが、気にしない。
とりあえず、コンテナよりFixedを選び、フォームの上に置きます。
これだと、ボタン配置などが好きなところに置けるので、VisualStudioっぽくできます。
そのあと、ボタンを好きなところにおきましょう。

08.jpg
配置したボタンをクリックした後、デザインパネル右より、プロパティーを選びます。
Button Propertyより、Labelを選び、好きな文字に買えると、ボタンの文字が変わります。

09.jpg
同じプロパティーにタブを切り替えられるところがあります。
プロパティーから、シグナルに切り替えましょう。
シグナルはソフトウェア割り込み、Windows風にいうとイベントです。
Buttonのシグナルを開き、Clickedをダブルクリックします。
勝手に名前が埋められ、さらにダブルクリックすると、自動でメソッドが作れます。
ただし、中身は空っぽ。
この辺はVisualStudioと同じですね。


// test button
protected virtual void OnButton2Clicked (object sender, System.EventArgs e)
{
using(MessageDialog md = new MessageDialog(this,DialogFlags.Modal,MessageType.Info,ButtonsType.Ok, false,"TEST"))
{
md.Run();
md.Destroy();
}
}

メソッドに中身を作りましょう。
一番簡単なメッセージボックスを使ったやつです。
gtk#ではMessageDialogのインスタンスを作ります。
オプションはenumなので、適当に列挙されるデータをみれば、WindowsのMessageBoxとさほど変わりません。
第一引数は親Windowのオブジェクトを指定できますが、面倒だったのでnull。
「md.Show();」のように書いても、メッセージボックスを表示できるのですが、それだと「OK」を押してもダイアログが閉じてくれません。
パラメータにコールバックを埋め込めば別なのですが、面倒なので簡単に書きました。

F5を押して動かすと、こんな感じに。
12.jpg

build.jpg
こちらのアイコンは左から、コンパイル、すべてコンパイル、実行、デバック実行となります。
コンパイルしても、実行のアイコンが有効っぽくかわらないので、押せなさそうなんだけれど、ちゃんと押せます。

とりあえず、目的のところまでは終わったかな。
Linuxでこんなに簡単にGUIプログラムが書けるのは驚きです。
しかも、日本語も通るし、IDEまで日本語だし。
Monoは素晴らしいな。
また、Systemとかの空間クラスは結構使えるみたいです。
便利。

続きを読む
posted by w033 at 22:33| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

mono(1) インストール

monoで遊ぼう!
とか思って、ちょいと調べた。

とりあえず、monoはやっぱりLinuxが良いらしい。
Macにも、Windowsにもあるけど、Windowsはバイナリがない。
つうか、Visual Studioでいいでしょ。
というわけでLinux、うちにあるのはDebian系のUbuntuなので、それを使ってみます。
OpenSUSEも考えましたが、日本語の情報はUbuntuが多いので。
うちのは、VMWareに入れたばっかりの、どノーマル。

まずは、開発環境のインストール。
その前に、現状、入っているアプリを見るには、実はコマンドラインが一番便利。
メニューから[アプリケーション]-[アクセサリ]-[端末]を起動。
dpkg -l | grep mono
というコマンドをうつと、mono関連がだーっと出てきます。
実行に必要なライブラリ関連ははじめから入っているようです。

ちなみに、私はこの辺を入れました。
mono-2.0-devel
mono-2.0-gac
mono-apache-server2
mono-csharp-shell
mono-debugger
mono-devel
mono-gac
mono-gmcs
mono-runtime
mono-xsp2-base
monodevelop
monodevelop-database
monodevelop-debugger-gdb
monodevelop-debugger-mdb
monodevelop-java
monodevelop-python
monodoc-avahi-manual
monodoc-base
monodoc-browser
monodoc-gtk2.0-manual
monodoc-manual

メニューからパッケージマネージャを起動します。
01.jpg
検索フィールドを使って、必要なパッケージを探します。

私は次の順番で入れました。
意味がわからない人は、monodevelopだけで大体良いと思います。
WEBだの、DBだの使いたい人用ですから。

apache2.2(http server)

postgresql(database)

python,perl,php(phppgadmin)

mono ライブラリ(db)

monodevelop

monoでIDE開発環境(Visual Studioみたいの)といえば、monodevelopらしい。
というわけで、サンプル的に入れてみます。
02.jpg
上がパッケージマネージャの画面。
必要なものに、チェックを入れて適用を押せばインストールが開始されます。
動作に必要なライブラリとかがあれば、自動で選択してくれますので、
素直にCheckedだったか、Selectedだったかにして適用しましょう。

apacheの設定を変更するときにインストーラが止まってしまうことがあるので、
apacheは一気に入れないほうがよいかと。
あと、apacheを先に入れておくと、ある程度自動で設定してくれます。
(もしかすると、後からでも大丈夫かもしれないけれど)
ASP.Netを使おうと思っているなら、先にapacheを入れておいたほうがよいかも。

インストールの注意点として、ドキュメント関連は入れましょう。
monodocから始まるパッケージです。
こいつらを入れないと、IDEからヘルプが起動できない。
gtk#とか全く違うので、無いと非常に困ります。

あと、monoからpostgresqlにアクセスするなら、npgsqlを入れておく必要があります。
libmono-npgsql だったかな?

DB接続は、こちらをお勧め。
http://codezine.jp/article/detail/2913

で、大体正常に入ると、メニューがこんな感じになります。
03.jpg
posted by w033 at 20:26| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2011年07月24日

C#で、文字列の計算式の計算結果を取得する

忘れたときにも、覚えられないことでもとっても便利なDOBON.NET。
ちょいと面白い記事を見つけた。

文字列の計算式の計算結果を取得する
http://dobon.net/vb/dotnet/programing/eval.html

ときどき、これをしたいときはあります。
が、大体はSQLでごまかしますw
記事ではJScriptを呼び出していますが、モジュール的に大きそうなものを
読み込むのは、メモリ的にも精神的にもよろしくない。
CodeProviderは、本番プログラムで何度も呼び出すのは怖すぎる。
昔、DBにScriptを格納して、PythonとかRubyとか実行したことがあったけど、
四則演算くらいで呼び出すのもどうかなと。

というわけで、参照記事にも書いているDataTableを使った実装を書いてみた。
実装はかなり簡単。
Calcメソッドのほうは、テーブルを再構築しているから、同じ計算するにはちょっと非効率ですね。
でも、速いのかね、これ? メモリ消費もどうなんだろう?
試すまでの元気はなかった。。。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace test01
{
/// <summary>
/// 文字列の計算式の計算、真偽の判断
/// </summary>
class Formula
{
/// <summary>
/// 計算に使用するDataset。
/// DUAL:OracleのDualテーブルみたいなもん。
/// CALC:式の計算に使うテーブル。
/// </summary>
private DataSet _formulaBase = null;

/// <summary>
/// 内部変数の初期化
/// </summary>
public Formula()
{
_formulaBase = new DataSet("FORMULA");
// DUALテーブルを構築
_formulaBase.Tables.Add("DUAL");
_formulaBase.Tables["DUAL"].Columns.Add("KDUMMY", typeof(string));
_formulaBase.Tables["DUAL"].Rows.Add(new object[] { "X" });
// CALCテーブルを構築
_formulaBase.Tables.Add("CALC");
}

/// <summary>
/// 式を判定し、真偽を返す
/// </summary>
/// <param name="formula">
/// 計算式
/// 例)「1 = 2 - 1」「3 < 4」「"test" like "t%"」など
/// </param>
/// <returns></returns>
public bool comp(string formula)
{
DataRow[] rows = _formulaBase.Tables["DUAL"].Select(formula);
if (0 < rows.Length)
return true;
else
return false;
}

/// <summary>
/// 計試算した結果を取得
/// </summary>
/// <typeparam name="T">数字であること!</typeparam>
/// <param name="formula">
/// 計算式
/// 例)「(1 + 2) * (4 - 3)」など
/// </param>
/// <returns></returns>
public T calc<T>(string formula)
{
_formulaBase.Tables["CALC"].Reset();
_formulaBase.Tables["CALC"].Columns.Add("RESULT", typeof(T), formula);
_formulaBase.Tables["CALC"].Rows.Add(new object[] { DBNull.Value });
return (T)_formulaBase.Tables["CALC"].Rows[0]["RESULT"];
}
}
}

呼び出すほうはこんな感じ。
サンプルコードというか、テストコードというか。
calcのgenericタイプには、返してほしい型を指定してください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test01
{
class Program
{
static void Main(string[] args)
{
Formula fm = new Formula();
string formula = "";

formula = "1 = 1";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "1 = 0";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "4 + 4 = 1 + 7";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "1 > 0";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "1 < 0";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "'test'='test'";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "'test1'='test2'";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "'test1' like 't%'";
Console.WriteLine("comp(" + formula + "):" + fm.comp(formula));

formula = "1 + 2";
Console.WriteLine("calc(" + formula + "):" + fm.calc<int>(formula));

formula = "5 - 1";
Console.WriteLine("calc(" + formula + "):" + fm.calc<int>(formula));

formula = "3 * 6";
Console.WriteLine("calc(" + formula + "):" + fm.calc<int>(formula));

formula = "3 / 6";
Console.WriteLine("calc(" + formula + "):" + fm.calc<int>(formula));

formula = "3 / 6";
Console.WriteLine("calc(" + formula + "):" + fm.calc<decimal>(formula));

Console.WriteLine("終了するにはなにかキーを押してください。");
Console.ReadKey();
}
}
}

使う人はいないと思うけど、HTMLだと読みにくい人用にファイルをアップしておきます。

Formula.zip

続きを読む
posted by w033 at 23:01| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2011年04月16日

1SQLにTransactionは必要か?

1SQLを実行中にエラーになっても、結果として中途半端なデータが残っていることは、ありえない。

先日そんなこと言っていたOracle人間がいたのだけれど、本当なのか?
調べてみても、明確な結果は見つけられなかった。
これが本当であれば、1SQLを実行する場合、Transactionは不要だということである。
insert hoge select * from hage;
これで、データが100万件だったとすると、データ挿入中にエラーが発生してもROLLBACKがかかるか、エラーがないとわかる状態でないと、データ挿入が走らないということだ、と思う。
硬くて、枯れている技術で有名なOracleでも、そんなことをしているのだろうか?
裏で複数プロセス、データの大量コピーとかしている場合とか、Insert途中でディスクエラーになってもそんなことをしているのだろうか?
ネットワークの不調でも同じ、何が要因になるかわからないと思う。
また、どんなエディションでも同じ?
汎用機に乗っけるものとはだいぶ違うような。

そんなことも知らないのか的に、鼻で笑われたけれど、これって本当なのかな?
続きを読む
posted by w033 at 08:27| 東京 🌁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年09月17日

.NET 4.0でメモリマップドファイル

メモリマップドファイルはC言語のポインタでメモリーにアクセスするように
ファイルにアクセスできるというもの。
実態のあるファイルだし、メモリー空間と違って、プロセス空間の制限がないから、
プロセス間通信にも使ったりできる。
.NetFrameworkだと、MemoryMappedFile というクラスがいるらしい(4.0から)

だけど、.NetFrameworkにポインタ概念が希薄なため、いまいち使い勝手が。。。
バイト位置を指定して、指定サイズを読み込むらしいのだけれど、文字列ですら
バイト処理が面倒なのに、どうしろと。
C言語だと、巨大ファイルの解析に便利だったのだけれど、今回はプロセス間通信だけかなぁ。

.NET 4.0でメモリマップドファイル
http://japan.internet.com/developer/20090922/26.html
posted by w033 at 23:26| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年09月16日

C#/VB.Netのコンソールアプリで、CTRL+Cをつぶす

知らなかった。
DotNetFrameworkだと、簡単にコンソールアプリでCtrl+Cがつぶせたり、
イベントをうけて終了処理をしたりできるんだ・・・

Console.TreatControlCAsInput = true;

とか

Console.CancelKeyPress += delegate(object o, ConsoleCancelEventArgs e);

といった感じらしい。
簡単だ・・・
Windowsはコンソールを操作するのが面倒だから、素晴らしいと思う。

@see also http://d.hatena.ne.jp/akiramei/20040725/p1
posted by w033 at 21:06| 東京 ☔| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年09月15日

C#でコンソールアプリ

なんつうか、懐かしい。
コンソールコントロールの情報がある。

http://mop.fya.jp/te2/index.html

昔みたいにビデオバッファの領域にSJISコードを書き込んだり、
Hugeポインタつかってちょくせつ書き込んでみたりして、
エディタ作ったりはしないんだよねぇ。

ここまで頑張らなくても、power shellで制御するって手もあるかも。

posted by w033 at 22:35| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年09月14日

Silverlightとブラウザ(Javascript)間でのデータやりとり

両方向というよりも、Silverlightからブラウザの操作に近いかなぁ。
その逆はJsのイベントコールバックか、Silverlightオブジェクトを
使って操作になるのかなぁ。
ブラウザで動いていないときに、どうなるのかわからないけど。。。


[Silverlight 2]HTML要素のDOMプロパティを取得/設定するには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/924slhtmldomproperty/slhtmldomproperty.html

ウェブブラウザからSilverlightへのセッション(クッキー)の引き継ぎ方法について
http://hunter-j.sblo.jp/article/32524418.html

C#の匿名メソッドをJavaScriptにコールバックさせる
http://d.hatena.ne.jp/coma2n/20080322/1206188858

SilverlightからJavaScriptのAPIを呼ぶ方法
http://wiki.tmgn.jp/moin.cgi/%E3%81%AA%E3%82%93%E3%81%A8%E3%81%AA%E3%81%8FTips/Silverlight%E3%81%A7mixi%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%AB%E3%81%AF

おー、セッションの引き継ぎもできるみたい。
ま、できないと使えないから。。。
posted by w033 at 19:07| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年09月13日

Silverlight 4 で 脱サンドボックス


Silverlightってなによ?!
とかいう人は、Wikipediaでもひいいてみてください。
簡単に言うと、JavaAppletだったり、Flash、ActiveXあたりと同じです。
ブラウザは便利だけど、機能が少ないから何でも動くようにしちゃえ! 的なもの。

ブラウザで何でもできると、セキュリティー的にやばいから、ローカル資源に
アクセスできないようにしちゃうぞ。
というのがサンドボックスです。

Silverlight 4になって、COM経由でなら、そういうことができるようになりました。
素晴らしいね。きっとUACあたりが邪魔してくるでしょうけれど。

以下のようにしてやるらしい。

(1)Silverlight 4のOOBで他の実行ファイルを実行するテスト
http://d.hatena.ne.jp/kiyokura/20100116/p1

(2)ブラウザ内のSilverlightからローカル メッセージングを経由してCOMを操作する
http://dev.worksap.co.jp/Members/t_tanaka/2010/08/29/1-4/

(3)Silverlight 4 Excel連携
http://www.riaxdnp.jp/?p=683

(1)はある程度知っている人には特にお勧めのサイト。
具体的で、最低限のことをうまくやってます。
でも、実際に使うのは(3)だろうね。
Share Point とうまく連携して動いてくれると素敵なんだけど。
続きを読む
posted by w033 at 22:34| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年06月28日

ASP Classic Compiler

codeplexを見ていて気になったプロジェクト。
いわゆるレガシーASP用のコンパイラ。
というか、VBSのコンパイラ。
Descriptionには、こう書いている。

This project hosts examples, tests and discussions of ASP Classic Compiler. ASP Classic Compiler is based on a VBScript compiler that compiles ASP pages into a .NET executable so that they can run inside the ASP.NET environment.

つまり、ASP.NET上で旧ASPのソースがうまく動くといいなぁ的な話ですかね。
将来的にはレガシーASPはサポートを切りたいし、Officeのマクロもこれにしたいということなのかな?

ASP Classic Compiler
http://aspclassiccompiler.codeplex.com/
続きを読む
posted by w033 at 21:37| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

アイロンにあらず

.Net Framework上で動くスクリプト言語として知られているIron系言語、その中にLispもあったんだね。

IronLisp、IronScheme
http://ironlisp.codeplex.com/

ほかにも、最近のCodePlexはいろいろある。

Dynamic Language Runtime
http://dlr.codeplex.com/

(Obsolete) IronRuby and IronPython in Silverlight
http://sdlsdk.codeplex.com/

いろいろあるんだけど・・・英語読みたくない(笑

続きを読む
posted by w033 at 21:07| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年05月02日

ついHTMLを見てしまうことってあるよね?

今年の今頃、久々にPGやっていたころのサイトがあがっていたのを発見。
ネットのサイトだったので、ついついソースを見てみたり(といってもHTMLだけど)
うわー、あの頃のソースだーとか懐かしく思ってたり。
自分はコアの部分をの形だけつくって、途中で抜けたため、あとのことは全く知らないのだけれど、なんとも懐かしい。
ちゃんとリリースできたのかー、頑張ったなぁとか思ってみたり。
コンテンツが動いていると、感慨深いです。
ただまあ、あのあとバグがいくつ出たのかなぁとか。
結構大きなサイトでうごいているので大丈夫なのかなぁとか。
当時の問題はなくなったのかなぁとか。
いろいろ不安なので、当時のメンバーには連絡はとりませんが(苦笑
posted by w033 at 23:25| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2010年04月18日

IronRuby 1.0 リリース

ぜーんぜん盛り上がらないねえ(笑)
4/12には出ていたのに、ほぼ1週間遅れでどこだかのサイトで報道されて、そこからぱらぱら。
IronPythonの1.0とはえらい違い。
ま、まあ、存在意義が微妙なのかもしれないけれど。
Pythonと違って、最新が動かないし。
スクリプトエンジンとしては、すでに、Pythonあるし。
Pythonは、メソッド呼ぶときにthisをつけ忘れるから嫌いだけど。
IISでRubyを使うなら、ISAPIなりCGIなりで使えるから無理に.netを使わなくてもいいような。
利点は新しい言語をいじってみたい、というくらい?


IIS ISAPI Extension for Ruby
http://sourceforge.jp/projects/isapi4ruby/

IronRuby 1.0
http://ironruby.net/
続きを読む
posted by w033 at 07:55| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2009年05月22日

VBSで地味テク StringBuilder / ArrayList

WSHでも(レガシー)ASPでもVB6だのExcelとかのVBAでもいいのだけれど、
.NetだのJavaだのに慣れてしまうと、どうしてもVBに足りないと思ってしまうもの。
StringBuilderとArrayList(JavaならVectorとStringBufferかな?)の機能。
前者は不定数の大きな文字列をたくさんくっつけながら保持したいとき、
後者は不定数の要素を配列にたくさんいれて処理したいときに、
VBだとやたら遅いですよね?
機能自体はちゃんとあるのですが、Redim Preserveで配列の要素数を伸ばしながら
動かすには、1万ほどから不安になってきます(最近はだいぶましだけれど)。

で、どうするかというと、Scripting.Dictionaryを使います。
もともと連想配列をするためのActiveXオブジェクトなのですが、

Dim dic, idx
idx = 0
Set dic = CreateObject("Scripting.Dictionary")

idx = idx + 1
dict.Add CStr(idx), "item" & idx

idx = idx + 1
dict.Add CStr(idx), "item" & idx

idx = idx + 1
dict.Add CStr(idx), "item" & idx

・・・・

' 配列を取りたいなら
ary = dic.Items()

' 文字列を取りたいなら
buf = Join(dic.Items(), "")

メモリを多く食っているだけに見えて、実は量が多くなるほど
速さに差が出てきます。
昔使っていたIIS(レガシーASPのプログラム)だと、4MBくらいから
段違いの性能差がでていました。
ちなみに、この手のオブジェクトのマジックは、Replace、Splitみたいな
標準の関数をうまく使うと、結構違いが出てきます。
前は、classで簡単なカプセル化をして使っていたなあ。


続きを読む
posted by w033 at 00:17| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2009年05月21日

地味ぃぃぃぃぃぃ〜〜〜なphpテクニック

以下の2構文で、差がわかるでしょうか?
※phpとしているけれど、perlでもいっしょなはず。

$buf = $buf . $i;
$buf .= $i;

結果はどちらも一緒なのだけれど、内部での動作が変わってきます。
$bufに大きな文字列が入っている場合、前者よりも後者のほうが処理効率が上がります。
まあ、別領域にデータがコピーされるかどうかの違いなはずです。

以下にサンプルプログラムを示します。
40MBの文字列に、20回1〜2バイトの文字を連結させています。
「### 切り替え部分 ###」となっているところのコメントを上と下で付け替えると、違いがわかります。
我が家の環境で動かすと、一番初めのタイムスタンプと最後の表示とで比べるとこうなりました。

■$buf = $buf . $i;版
2009/05/21 23:20:15.546
2009/05/21 23:20:17.456

■$buf .= $i;版
2009/05/21 23:24:51.500
2009/05/21 23:24:51.656

前者が2秒違いのにたいし、後者は0.15秒です。
40MBのところを、小さい文字列にすればさほど差は出ません。
逆に全く差が出ない場合は、もっと大きな文字してみると顕著になってきます。
地味だけれど、高速な文字列連結は結構な違いが出てきます。

$buf = "あいうえお$kakikukekoさしすせそ";
$buf = 'あいうえお' . $kakikukeko . 'さしすせそ';

とかでも、ちりも積もるとな感じです。
VBのころはVariantを使うなとかよくいったものですが、この頃は聞きませんね。



【サンプルプログラム】
posted by w033 at 23:47| 東京 ☀| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2008年11月19日

chmが見られない・・・

しらんかった。
chmにブロック解除ってのがあるんだね。
MS-OfficeにはいっていたCHMをコピペしたら、アドレスが有効ではありませんとでたし。
phpのヘルプも開けなかったし。
調べてみたね、こんなんでましたけど。

------------------------------------------------------------------
直接ダウンロードしたCHMファイルを開こうとすると「アドレスが有効ではありません」のようなエラーが出て全ページが表示できない状態になることがあります。
ダウンロードしたCHMファイルを右クリックして「プロパティ」で、「ブロックの解除」をすると、見れるようになります。
------------------------------------------------------------------

参考)
http://ryus.co.jp/modules/d3blog/details.php?bid=8
http://d.hatena.ne.jp/koseki2/20080312/jsref
※FirefoxでDLしても現象が発生します。続きを読む
posted by w033 at 23:22| 東京 ☀| Comment(1) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2008年10月19日

isapi_redirect.dll

IIS と TOMCAT(JAVAのServlet&JSP)を連帯させたいと思うと、どうしても必要になるDLL。
どこをみても見つからず、ずいぶん古いのを使っていたのだけれど、やっと発見。
あれ? 普通にarchive.apache.orgにあるのはなぜ???
前に何度か見たときはなかったような・・・間違えたのかな?
確かに手元にある古いバージョンはarchive.apache.orgからもらってきたような気もするけど。
ネットを見ると、TOMCATをダウンロードすれば一緒に付いてくるとか書いていたりしたんだけれどなぁ。
もう一度みつからない時にさみしいので、自分メモ。

archive.apache.orgのisapi_redirect.dll
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/

IIS と Tomcat 5.0.* 系 ( 及び 5.5.* 系 ) の連携
http://www.whitemark.co.jp/tec/iistomcat/iis-tomcat.html
posted by w033 at 02:21| 東京 ☁| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2007年11月10日

テーブルのER図を書く(フリーのツール)

つい先日まで、テーブルのER図を書くとしたら、フリーでは「DBDesigner 4」くらいしかツールはないと思っていた。
だって、検索にひっかかからないし。
昨日のブログにもかいたけれど、実はまだあったようで、「A5:SQL Mk-2」というソフトがあったらしい。
後者はまだER図の部分は使っていないけれど、読めば印刷もできるし、リバースエンジニアリングもできるとのこと。
おおぅ、これはDBDesignerにも匹敵するじゃないですか。
悪口を書く訳じゃないですが、DBDesignerはMySQL用で、MSSQLはODBCで接続できるから、おまけでできる程度。
それ用の設定もおいていないし、自分で設定しようにもよくわからない。
せめてメニューが日本語だったら、読む気もしかかもしれないけれど。
というか、日本語のメニューだったら、ヘルプを読まなくてもできたかもってところですか(ヘルプ読みたくない)。
背景の枠囲いや、タイトル付け、紙にあわせた縮小なんてできれば非常にうれしいところですが、さてどうでしょうか。

A5:SQL Mk-2 - フリーのSQL開発ツール/ER図ツール
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/

DBDesigner 4
http://www.fabforce.net/dbdesigner4/

続きを読む
posted by w033 at 12:52| 千葉 ☔| Comment(1) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする