最近の更新

関連


その他いろいろ

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

はやくMODx 2.0でないかなあ

クリップボードを監視し、コピーされた語句で検索・バルーン表示するClipDic v1.1.0を公開しました。
.NET Framework 3.5以上が必要です。

今回のアップデートでクリップボードの行数、文字数、単語数をカウントする機能を追加しました。文字数制限を確認しながら就活のES書く際などに便利です。

screen shot

以前書いたC++がPythonより重い…でソースコードを載せると言いつつ載せて無かったので、引っ張り出してきました。

ptest_regex.zip をダウンロード

昔のことで記憶が曖昧ですが、たしか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#版も書いていたらしい。記憶にない… でもソースもあったので追加しておきました。

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

ss

ロック中も完全に安全とはいえないため、あくまで離席中の簡易的なプライバシー保護にとどめてください。

なお、動作には.NET Framework 3.5が必要です。

複数の予鈴を設定可能なタイマ、pTimer v1.0.0をリリースしました。

pTimer screen shot

  • 本鈴と、複数の予鈴を設定 (タイマセット)
  • そのタイマセットに名前をつけて保存し、複数管理可能
  • 予鈴は「本鈴n分前」「開始n分後」のどちらでもOK
  • 1秒刻み、最大24時間
  • ベル(アラーム音)は任意のwavを設定
  • 計時中にCtrl+Tを押すことで、アクティブなアプリケーション(テキストエディタなど)に現在時刻を文字列として送る機能(暫定)

動作には.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は検索するパターンの違い。ちょっと面倒なのでまたまとめ直すときにでも載せますが、

  1. 軽い
  2. ^.*$
  3. 軽い物を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以上が必要です。

2008 10 13

Synapse 0.0.17α

一年と数ヶ月ぶりにフィードリーダSynapse 0.0.17αをリリースしました。

  • フィード巡回時の重さを軽減
  • idがintだったためしばらく使うとオーバーフローする問題を解消(ulongに変更)
  • 「ブラウザで開く」(O)と対にして使うグローバルホットキー「Synapseをアクティブ化する」(Ctrl+Alt+O)
  • 未読件数が時々狂うのは未だ直ってない

これだけ時間を空けると自分の書いたソースでも訳が分からない。一度リファクタリングしないとこのまま開発するのは難しそう。

ニコニコ動画の各種ランキングページを取得し、フィード-エントリを構築するSynapse用の拡張、NicoRankingSensorをソース付属(BSD)で公開しました。dlnicoと同様、ブラウザからクッキーを抜き出して共通に使用すると便利です。
NicoRankingSensor

2007 06 30

Synapse 0.0.16α

フィードリーダSynapse 0.0.16αをリリースしました。

  • GeneralSmartFeedで記事リストと記事が同じページにあるサイトに対応
  • グループの開閉を保存
  • 記事ビュー全面表示(F12)
  • デッドロック解消
  • 「次の未読」デバッグ
  • 拡張の仕様変更(下位互換)
  • マークされたエントリ一覧, 一括ON/OFF
  • 拡張セットの仕様変更
  • 拡張セットGUIエディタ
  • 未読+指定件数表示モード

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よりはユーザフレンドリーに。

次のページ »