月別アーカイブ: 2012年7月

[C#] HTMLをLINQで扱えるようにする(前哨戦)

諸事情で作る必要はなくなったのだけど、ExDoc の延長戦上にあるし、ということでぼちぼちと。 主旨としては、 Html Agility Pack http://htmlagilitypack.codeplex.com/ と似たようなものです。Html Agility Pack を使ったことがないので(あとで観察するけど)正しい違いはどうか分からないのですが、今作っているものは、 ・内部的には XML の整形式を使う。 ・子ノードも含めて、LINQ(where)を簡単に実行できる。 ・ノードの更新(Update/Remove/Insert)が簡単にできる。 を目標に作成しています。使い方の想定としては、既存のホームページを HTML 形式で抜き取った後に、HTML の整形、id や class などの無駄な属性の削除、javascript や comment などの削除、がさくっとできるツ … 続きを読む

カテゴリー: C# | コメントする

[C++] C++ で LINQ を実装してみるテスト(前哨戦)

ん~、前哨戦で終了するかもしれませんが、自分の勉強がてら。と、今使っているシステムにできれば組み入れたいので。 将来的に LINQ for C++ ができたとしても、VC++2010 に組み入れられるとは限らないので、やむなく自作ってところでしょうか。実験的なものでなので、拡張性/可読性を考えて導入するかどうかは決めましょう、ということで。 ラムダ式と std::function が使えるようになったから、じゃあ、LINQ らしいメソッドチェーンの方法を試してみたらと思ってざっと書いてみると。 GoingNative 9: LINQ for C/C++, Native Rx, Meet Aaron Lahman | C9::GoingNative | Channel 9 http://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-9- … 続きを読む

カテゴリー: C++ | コメントする

[c++] ラムダ式は std::function で保存せよ

関数ポインタを無理矢理取得して、別の関数ポインタに入れる方法 | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/3580 なところで、関数ポインタを無理矢理 void * に入れて保存すれば ok ? と妄想していたのですが、いやいや、std::function を使えば lambda 式を保存できるよ、という話です。 要は、for_each や remove_if のような algorithm 系の関数に設定する関数をどうしたら class に押し込めるか?という問題だったので。 ■実験用のソース 実験したコードはこんな感じです。 Alice::disp3 のように、Alice::func を表示用の関数として for_each から呼び出したいわけです。 普通に lambda 式を使うのが良いのですが、それを … 続きを読む

カテゴリー: C++ | 2件のコメント

[c++] for_each と mem_fun の関係をメモ書き

c++ で lambda 式を使うと for_each を使うのが楽になる…のですが、一応、以前の書き方をメモ。 ノーマルに for 文を使って書くと一時変数が必要になる。auto が無かった時代には「vector::iterator it = lines.begin()」と書かないと駄目だったのですが、このあたりは auto を使えば十分。この長い書き方が嫌で typedef したりするのですが、今は不要です。 for_each と lambda 式を使うとこんな感じ。iterator がそのままラムダ式の引数に入るのでそれを使えばOKです。 このあたりが LINQ っぽく書けるってことなのですが、このままではほど遠いかなと。まあ、慣れかもしれませんが、イテレーターを lambda 式の引数として受けないといけないのがいまいちです。 lambda 式を auto で受けて関数 … 続きを読む

カテゴリー: C++ | 2件のコメント

C++ で ObservableCollection を実装する

ObservableCollection(T) クラス (System.Collections.ObjectModel) http://msdn.microsoft.com/ja-jp/library/ms668604.aspx Skeleton of GOF’s Design Pattern http://www002.upp.so-net.ne.jp/ys_oota/mdp/Observer/index.htm 2つのViewの変更が、同時に行われるときのModelの挙動を考察 | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/3575 で、__event/__hook で実装しようと思っていたのですが、基本に帰って Observer パターンを調べてみると、ああ、これでいいじゃんということにしま … 続きを読む

カテゴリー: C++ | コメントする

関数ポインタを無理矢理取得して、別の関数ポインタに入れる方法

__event/__hook 関数を使う理由のひとつとして、クラスの関数ポインタを別のクラスの関数ポインタには容易に入れられない、というのがあって。 というようにポインタを定義しておいて、これを設定したいわけですが、これに設定できるのは Alice::func(string) という関数だけなんですね。これが比較関数だったりすると、他のクラスから設定できないし(内部のメソッドでないと駄目だし)という具合で困るわけです。 STLの比較関数(for_each とか remove_if など)の algorithm 系はグローバルの関数なので大丈夫なんですが… まぁ、そんな訳で __event と __hook の組み合わせにするのが普通(?)なのですが、やっぱり関数ポインタまま使いたい、というのを実装したのが以下です。 hook 関数がそれですね。試しに使った funcp 関数を観 … 続きを読む

カテゴリー: C++ | 2件のコメント

2つのViewの変更を以前はどう書いていたかを解説

いきなり、MVVM もどきの __event/__hook に持って行くと移行の方法がわからなくなるので、それ以前の話を残しておきます。 ■現状は同じ GridView と GraihpcsView の 2つの View がある。 GridView の項目をチェックすると、GraphicsView のある点が反転する。 逆に GraphicsView のある点を反転させると、GridView の項目のチェックが反転する。 という、2つのViewの相互伝播の機能を実現するとして、__event/__hook なしでどのように書いてある/書いたのかというと… ■実装の仕方は2つある 実装の仕方は2つあります。オブジェクト指向的に GridView, GraphicsView に適当なインターフェース(OnClick, OnCheck, OnChanged)を View に配置させて … 続きを読む

カテゴリー: C++ | コメントする

2つのViewの変更が、同時に行われるときのModelの挙動を考察

具体的に言えば、以下の状況を実現させます。 ■目的 GridView と GraihpcsView の 2つの View がある。 GridView の項目をチェックすると、GraphicsView のある点が反転する。 逆に GraphicsView のある点を反転させると、GridView の項目のチェックが反転する。 という、2つのViewの相互伝播を実装します。 ■制限 C# でやるのが良いのでしょうが、手元の課題が C++ なので、C++ で実装します。 いや、C# で書いてから C++ に書き直したほうが早いかな?これは、検討を進めながら。 ■まずは Model を作る。 2 つの View は同じ Model を共有しているという前提を作ります。直接 View 同士が繋がっているというスタート地点でもよいのですが、それは昔の話。そのあたりは端折って、Model -> View … 続きを読む

カテゴリー: C++ | コメントする

Visual C++ の resource.h を考え直す

何故今頃になって、*.rc やら resource.h やらの話になるかというと(誰も分からない/困らないというのはさておき)、 .NET におけるアプリケーション アーキテクチャ ガイダンス http://www.microsoft.com/ja-jp/dev/2010/solutions/architecture/default.aspx をざっと読み返していて、かつてのVB2.0やらVC++5(あたり?)から基本的な「レイヤー」という概念は変わっていない、というところを考えていたわけです。当時(主に15年前)は、メモリーの制約が大きかったり、回線が細すぎたり(それでもパソコン通信の9600bpsに比べれば、社内LANの10Baseは天国だった訳で)する「制約」があり、このためにもメモリ効率やCPUのリソースを効率的かつ直接的に扱う C/C++ が好まれたわけです。VM という意味では … 続きを読む

カテゴリー: C++ | コメントする

C#のぴよぴよコードをなんとか使える形にするための2つの方法

ク●コード改め「ぴよぴよコード」なのですが、目の前にあるク●コード改め「ぴよぴよコード」をなんとか使いこなすための思考実験。 ええ、思考実験なので業務コードの場合は業務コードにあわせたカスタマイズが必要になる訳ですが。 基本は「リファクタリング」するあるいは「リライト」するのが良いのですが事情が許さないことが多々あります。 できあがったアセンブリに手を付けてはいけないという縛りがある。 コードが「ぴよぴよ」すぎて、ロジックが訳わからん。 リライトしてテストしてという時間がコードが複雑すぎてできない。 「手を付けてはいけない」のほうは、政治的な問題が絡むので、できることならば手を付ける方向に動くようマネジメントすればよいのですが、後の二つはちょっと単純にリファクタリングなりリライト(書き直し、作り直し)などをしている時間が、納期的や能力的(既存のコードを理解するという意味で)がちょっとない時 … 続きを読む

カテゴリー: C# | 2件のコメント