2012/11/14


C++ で簡単にフォルダ監視出来るライブラリ無いかなーと思ってたら、手頃なのが見つかった。
simplefilewatcher - Simple, cross platform, object-oriented, file watcher and notifier library. - Google Project Hosting

SimpleFileWatcher is a C++ wrapper for OS file monitoring systems. Currently it uses Win32 ReadDirec...

https://code.google.com/p/simplefilewatcher/
しかもマルチプラットフォームでビルド出来て、さらに他のライブラリに依存しないのでとてもポータブル。
Windows でも inotify を意識せずにコーディング出来ます。
今日はこれと C++ で GNTP Growl する gntppp を使って、あるフォルダ配下のファイルが変更されたら Growl するアプリケーションを作ってみました。
コンパイルには、Crypto++ と、boost が必要です。
mattn/gntppp - GitHub

GNTP++: gntp client library writen in C++

https://github.com/mattn/gntppp
Crypto++ Library 5.6.1 - a Free C++ Class Library of Cryptographic Schemes

Crypto++ Library is a free C++ class library of cryptographic schemes. Currently the library contains the following algorithms

http://www.cryptopp.com/
コードはとてもシンプル!
#include <FileWatcher/FileWatcher.h>
#include <gntp.h>
#include <iostream>

using namespace CryptoPP;
using namespace CryptoPP::Weak1;

gntp* client;

class UpdateListener : public FW::FileWatchListener {
public:
  UpdateListener() {}
  void handleFileAction(
    FW::WatchID watchid,
    const FW::String& dir,
    const FW::String& filename,
    FW::Action action) {
      client->notify<DES, MD5>("changed""File Changed", filename.c_str());
    }
};


int
main(int argc, char **argv) {
  if (argc != 2) {
    std::cerr << "usage: " << argv[0] << " [directory]" << std::endl;
    return -1;
  }

  FW::FileWatcher fileWatcher;
  client = new gntp("file change notifier""");
  client->regist<DES, MD5>("changed");

  try {
    FW::WatchID watchID = fileWatcher.addWatch(
      argv[1], new UpdateListener(), true);

    while(1) {
      fileWatcher.update();
    }
  } catch(std::exception& e) {
    std::cerr << "Exception has occurred: " << e.what() << std::endl;
  }
  return 0;
}
簡単ですね!
mingw32 だと以下の様にコンパイルします。
g++ -g -fpermissive -Iinclude -I.
    source/FileWatcher.cpp source/FileWatcherWin32.cpp
    filechangenotifier.cpp
    -lcryptopp -lws2_32
    -lboost_thread-mgw47-mt-1_50 -lboost_system-mgw47-mt-1_50
※実際は1行
実行してファイルを置いてみる...
file change notifier
おぉ...

ちょっとしたツールを作るには便利ですね。MITなので業務でも使えそうです。
Posted at by



2012/11/07


livedoor Techブログ : 自家製 #isucon2 のつくりかた

先日ISUCON2は幸いにも大好評のうちに終了しましたが、このお題および関係する話題をぜひ多くの人にも知っていただきたい! というかこのまま捨てるとかちょっともったいない! ということもあり、作業対象のアプリケーションコード、およびベンチマークツール一式を公開しています。

http://blog.livedoor.jp/techblog/archives/67728751.html
Go言語が途端に書きたくなったので、Go言語で isucon2 書いてみた。
WAF として web.go を使ってますが、go get を実行すれば勝手にインストールされます。
mattn/go-isucon2 - GitHub

isucon2 written in go

https://github.com/mattn/go-isucon2
作ったばっかりなので、ベンチマーク取ったりはしてません。これからします。
興味のある方どうぞ。
Posted at by



2012/11/06


basyura さんが vimproc 使ったやつを書いてたのを、アプリっぽく仕上げただけ
vim で stream api - basyura!Cs blog
http://d.hatena.ne.jp/basyura/20121104/p1
githubに置いてます。vimprocが必要。
mattn/streamer-vim - GitHub
https://github.com/mattn/streamer-vim
:Streamer と起動すると、vimproc を使ってバックグラウンドでtwitter streamを取得し、タイトルバーに表示します。
ポーリングなのでもしかすると若干の負荷があるかも...という感じはしますが、updatetimeを使うハックよりは僕にとっては精神衛生的に好きです。
Posted at by