クリップボードを監視し、コピーされた語句で検索・バルーン表示するClipDic v1.1.0を公開しました。
.NET Framework 3.5以上が必要です。
今回のアップデートでクリップボードの行数、文字数、単語数をカウントする機能を追加しました。文字数制限を確認しながら就活のES書く際などに便利です。

はやくMODx 2.0でないかなあ
クリップボードを監視し、コピーされた語句で検索・バルーン表示するClipDic v1.1.0を公開しました。
.NET Framework 3.5以上が必要です。
今回のアップデートでクリップボードの行数、文字数、単語数をカウントする機能を追加しました。文字数制限を確認しながら就活のES書く際などに便利です。

以前書いたC++がPythonより重い…でソースコードを載せると言いつつ載せて無かったので、引っ張り出してきました。
昔のことで記憶が曖昧ですが、たしかC++, Python, 生grep (追記: C#も)で
| データセット | 実験1 | 実験2 | 実験3 |
|---|---|---|---|
| ソースコード | int.*\( |
^.*$ |
^.*int.*$ |
| (英文?)和文 | は.*。 |
^.*$ |
^.*は.*$ |
をそれぞれ試しています。多分。
用いたデータセットや結果は過去のエントリを参照してください。
勿論「C++よりPythonが全面的に速い」「C++とPythonで同じアルゴリズムを実装すると後者が速い」ということが言いたいのではありません。(そしてそれは多分言えないと思う)
適当に使えそうな/気軽に使ってしまうライブラリ(C++ではboost, ICU、Pythonでは標準のエンコーディング変換関数とre)を自然に使ってみるだけだとPythonの方が早いこともあるらしい、という驚きと悲しみをちょっと記録しただけです。
「自然に」が自分の中では結構大事で、無理して良いなら当然自由度の高い低レベルな言語が一番チューニング出来る可能性がある、でもパラメタが多すぎて難しい。
まあPythonは標準ライブラリを使っているため、ちょっとチューニングしたいと思ったときに改変がやや面倒なのに対し、C++は標準ライブラリ以外を使っている(勿論stlも使ってますが)のでその辺は楽、という点はやや不公平ではあるかもしれませんが。
C++を自然に使ってより早い結果が得られる方法があれば、教えてもらえると嬉しいです。xpressiveとか使ったこと無いけどどうなんんでしょう。
追記
忘れていましたがPython vs C++ vs C# @ 7bitでC#版も書いていたらしい。記憶にない… でもソースもあったので追加しておきました。

LoliCa v1.0.0 を公開しました。
LoliCaは、FeliCaポートを監視し、登録されたカードが認識されている間だけデスクトップを操作可能にするソフトウェアです。ポートからFeliCaga見えなくなるとデスクトップを覆い隠して擬似的にロックし、再びFeliCaを認識するとロックを解除します。

ロック中も完全に安全とはいえないため、あくまで離席中の簡易的なプライバシー保護にとどめてください。
なお、動作には.NET Framework 3.5が必要です。
複数の予鈴を設定可能なタイマ、pTimer v1.0.0をリリースしました。

動作には.NET Framework 3.5以降が必要です。
前回のエントリでは多数のファイルに対して正規表現をかける処理をC++とPythonで書いき、Pythonのほうが圧倒的に速いという結果になりました。
Pythonは書き方が収斂するので大してチューニングなどはしませんが、
C++では自由度が高いため書き殴ったコードを数万回繰り返すのでは、パフォーマンスを大きく落としそうです。
今回はC++の方の実装を少し修正し、またC#版も書いてみました。
結果は以下のようになりました。(単位は秒)
| 実験設定 | 生grep | Python + re | C++ + boost.regex + ICU | C# + Regex |
|---|---|---|---|---|
| A-1 | 8.972 | 9.468 | 13.250 | 28.6875 |
| A-2 | 16.866 | 16.407 | 18.828 | 63.796875 |
| A-3 | 21.857 | 15.078 | 27.765 | 75.0625 |
| B-1 | 1.151 | 1.562 | 4.500 | 1.796875 |
| B-2 | 3.292 | 3.328 | 5.812 | 2.671875 |
| B-3 | 3.307 | 4.078 | 12.765 | 9.875 |
実験A、Bというのはデータセットの違いです。
また、1から3は検索するパターンの違い。ちょっと面倒なのでまたまとめ直すときにでも載せますが、
としています。
前回よりC++も改善し、Pythonとそう変わらないまでに向上しました。
C#はファイル数が少ない場合は性能が良いですが、増えると極端に遅くなるようです。
よく見たら生のgrepよりもPythonの方が速い…
しかしPythonはろくなGUI デザイナがないので困ります。wxPython用のXRCedやGladeは重いし落ちるしバグまみれだし、PyQtは4.5未満はQPLかGPLだし。
クリップボードを監視し、コピーされた語句で検索・バルーン表示するClipDic v1.00をBSD Licenseのもと公開しました。
標準でGoogle検索、Wikipedia検索が含まれていますが、簡単な.NETアセンブリを書くことでユーザが検索モジュールを追加することが出来ます。(辞書を引くモジュールなどを作ると便利)
.NET Framework 3.5以上が必要です。
一年と数ヶ月ぶりにフィードリーダSynapse 0.0.17αをリリースしました。
これだけ時間を空けると自分の書いたソースでも訳が分からない。一度リファクタリングしないとこのまま開発するのは難しそう。
フィードリーダSynapse 0.0.16αをリリースしました。
DB構造が変更になったため、以前のデータベースを移行する場合は*.local.dbをDBMigration.exeにD&Dしてください。
今回追加された拡張セットエディタは設定»拡張»拡張セットGUIエディタから。
![]()
Synapse.Extensions.dllとTickerNotifier.dllのソース同梱。コロコロ変わる拡張の仕様を自然言語に直すのが面倒なので、ソース見てください。一応コメントはついています。
Synapse内では各所でC#のクラスをIronPythonで継承していますが、コンストラクタはほとんど定義していませんでした。
今回たまたま引数つきのC#コンストラクタをIronPythonのコンストラクタから呼ぼうとし、
class Foo(CSClass): def __init__(self, arg): super(Foo, self).__init__(arg)
とか、
class Foo(CSClass): def __new__(cls, arg): return CSClass.__new__(arg)
と書いてみても引数の数の不一致エラーを吐きまくって成功しません。
書き方としては後者が正しいらしいのですが。オーバーロードでも問題が発生するようで、このへんはIronPythonもまだ成熟してないなあと思ってしまいます。
結局あれこれ試してもだめだったのでコンストラクタはあきらめてしまいました。書き方がわかってないとIDEの自動補完のありがたみが増します。Visual Studio 2005 Express EditionではIronPythonは組み込めないようなので、Standard Editionでも買ってくるかもしれません。
因みにSynapseは拡張をつなげるエディタを作っています。土曜の夜くらいに0.0.16αか0.1.0βを公開するつもりです。Plaggerよりはユーザフレンドリーに。