ファイルを捨てようとすると猛烈に逃げ出すごみ箱作ってみた

ごみ箱にファイルを捨てようとすると逃げ出すごみ箱を作ってみました。

D

ダウンロードは以下から可能です。

動作環境はWindowsXP以上となります。

そのうち気が向いたら、色々と調べたAPIとかについて書いていくかも。


追記(2011/06/05):
プログラムの実行中にごみ箱の名前を変えるとだめな問題を修正しました。あしぃさん不具合報告ありがとうございます。
また、起動時の初期化処理をちょいと修正しました。これで動かなかった方も(ひょっとすると)動くかもしれません。


追記(2011/05/25):
画面の色数が16Bitだと動かない問題を修正しました。tmcさん不具合報告ありがとうございます。
これでも動かないぞゴラという方がいましたら、ご連絡ください。直せないかもしれませんが・・・
あと、未だにコメントの返信が遅れています。申し訳ないです。


追記(2011/05/22):
<1>

ダウンロードできない方がいるようなので、調べて見たところどうもIEでは現状出来ないようですね。。。これはgoogleの罠なのか???
現在多忙の為修正する時間が取れないので、応急処置としてIE以外のブラウザ(FireFoxとか)を使用してみてください。
それでもダウンロードできない方はご一報ください。
その際、失敗したブラウザ名・バージョンを教えていただけると助かります。
時間が取れたら修正します。

さらに追記
環境によってダウンロード出来ない原因はまだ解明していませんが、どっちにしてもこのままではGoogle App Engineの転送容量を普通にオーバーしそうなので、ミラーを用意しました。これで少なくともダウンロードできないという問題は解決するはず。。。
さらにさらに追記
どうやら過負荷でダウンロードできないだけだったぽい

<2>
残念ながら逃げてくれない状況に陥っている方がおられるようですね・・・
こちらで、問題なく動くことを確認した環境は以下です。

この環境に当てはまるのに、動かない方はごめんなさい。
現在原因を究明中ですが、いかんせん動かない環境が自分の手元には存在しないため、デバッグすら出来ない状況です。。。
あまり期待しないでお待ちください。

<3>
コメントの返信が遅れていますが、後ほどきちんと回答させていただきます<(_ _)>

追記(2017/03/18):
ダウンロードのリンクが切れていたので、変更いたしました。
ご迷惑をおかけしました。

追記(2018/07/03):
またもやダウンロードのリンクを切らしてしまっていたので、復活させました。

Fizz Buzz問題を解いてみた

どこかでFizzBuzzが書けないやつはプログラマではないという記事を見たので、あわてて書いてみた。

#include <iostream>

template <int N, bool f15, bool f5, bool f3>
struct Message {
  static const int value = N;
};

template<int N, bool f5, bool f3>
struct Message<N, true, f5, f3> {
  static const char* value;
};
template <int N, bool f5, bool f3>
const char* Message<N, true, f5, f3>::value = "Fizz Buzz";

template<int N, bool f3>
struct Message<N, false, true, f3> {
  static const char* value;
};
template <int N, bool f3>
const char* Message<N, false, true, f3>::value = "Buzz";

template<int N>
struct Message<N, false, false, true> {
  static const char* value;
};
template <int N>
const char* Message<N, false, false, true>::value = "Fizz";


template<int N, int M>
struct is_mod {
  static const bool value = N%M==0;
};

template<int N>
struct FizzBuzz {
  static void print() {
    std::cout << 
      Message<N, 
             is_mod<N, 15>::value,
             is_mod<N,  5>::value, 
             is_mod<N,  3>::value>::value << std::endl;
  }
};


template<int N>
struct FizzBuzzList {
  static void print() {
    FizzBuzzList<N-1>::print();
    FizzBuzz<N>::print();
  }
};

template<>
struct FizzBuzzList<0> {
  static void print() {
  }
};

int main() {

  FizzBuzzList<35>::print();
  return 0;
}

もう少しきれいに書ける気がするけど、単純に書くとこんなもん?
結構こりだすと幾らでも突き詰めることが出来る気がするので、奥が深いなぁと感じた。
ところで今回のようにテンプレートを使用した場合、剰余記号(%)を使うのはズルなんですかね?
まあ、暇があったら使わないバージョンも書いてみよう。。。

Javaによる画像ファイルの扱い

Javaで画像ファイルを扱いたかったので、その時の調査メモ

画像の読み書き

「ImageIO.read」で読み込み、「ImageIO.writ」で書き込む。

// 画像の読み込み
BufferedImage img = ImageIO.read(new File("foo.png"));

// 画像の書き込み
ImageIO.write(img, "gif", new File("hoo.gif"));

なお、読み込み・書き込み時に指定できるフォーマットは以下の方法で取得可能。

// 読み込み可能な画像フォーマット
System.out.println("Reader:");
for(String s : ImageIO.getReaderFormatNames()) {
	System.out.println("  " + s);
}

// 書き込み可能な画像フォーマット
System.out.println("Writer:");
for(String s : ImageIO.getWriterFormatNames()) {
	System.out.println("  " + s);
}

画像の幅・高さの取得

高さや幅はBufferedImageのメソッドから取得可能。

// 幅、高さの取得
System.out.println("Width:"  + img.getWidth());
System.out.println("Height:" + img.getHeight());

画像の編集

BufferedImageに対し、「createGraphics」を適用する事で「Graphics2D」が取得できるため、それを使用して色々と弄ることができる。

// 画像の編集
Graphics2D g2 = img.createGraphics();
g2.setPaint(Color.BLUE);
g2.fillRect(10, 10, 30, 30);
g2.dispose();

上の例では、青い四角形の描画を行っている。むろん、色々な図形を描いたりすることが可能。

新しい描画領域の確保

BufferedImageを新たに作成すれば、新たな領域を使用して色々と弄れる。

// 新たなバッファの確保
BufferedImage img2 = new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = img2.createGraphics();
//色々と画像を編集して

ImageIO.write(img2, "png", new File("aa.png")); // 保存

画像のピクセル単位の直接編集

「getRGB」と「setRGB」を使用することで、画像データをピクセル単位で編集することができる。

// 読み込み
int argb = img.getRGB(53, 20);
int a = (argb>>>24) & 0xff;
int r = (argb>>>16) & 0xff;
int g = (argb>>> 8) & 0xff;
int b = argb        & 0xff;
System.out.println("a:"+a+" r:"+r+" g:"+g+" b:"+b);

// 編集
b = b * 50 % 256;

// 書き込み			
img.setRGB(50, 20, a<<24|r<<16|g<<8|b);

ASUS P8H67-M EVO再起動問題

リコール騒ぎで何かとホットなIntel 6シリーズをリコール前日に買ってしまった。。。
問題自体はたいしたことないので別にどうでもいいのが、それより勝手に再起動するという問題に見舞われた。
起動時に一回必ず再起動してから起動し、その後も使っていると突然再起動することがわりとある・・・末期には再起動の無限ループが発生した。

どうも調べてみると今回ASUS製のマザーボードでこの被害にあっている人は意外と多い模様。
一応BIOS更新したり、CMOSクリアしたりで落ち着いたが、しばらく経つとまた再発したりする・・・何なんだこれは。
むしろリコール騒動のおかげで交換できてラッキーなのではと思ったり。

ネットワークドライブのコマンドからの操作

Windowsにおいてネットワークドライブをコマンドから操作する方法について。

割り当て状況の一覧表示

net use

割り当て

net use t: \\192.168.0.3\Public 

ただ、これだと次回ログイン時にも割り当てられたままとなる。
自分はそれだと困るので、「/PERSISTENT:no」をつけて

net use t: \\192.168.0.3\Public /PERSISTENT:no

解除

net use t: /DELETE

コマンドヘルプ

net help use

ヘルプの内容(一部)

NET USE
[デバイス名 | *] [\\コンピューター名\共有名[\ボリューム] [パスワード | *]]
        [/USER:[ドメイン名\]ユーザー名]
        [/USER:[ドット付きのドメイン名\]ユーザー名]
        [/USER:[ユーザー名@ドット付きのドメイン名]
        [/SMARTCARD]
        [/SAVECRED]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {デバイス名 | *} [パスワード | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]

NET USE は、コンピューターを共有リソースに接続したり、共有リソースから切断
したりします。オプションなしで使用した場合は、コンピューターの接続が一覧表示
されます。

(以下略)

Windows環境における.emacs.elファイルの場所

Windows環境でcygwin等を使用せずに直接emacsを使用する場合の「.emacs.el」の場所がよくわからなかったので調べた。

結論としては環境変数「HOME」の場所の「.emacs.el」を読みにいくようだ。
というわけで、環境変数さえ指定してしまえばどこにおいてもよい。

SSD換装計画

5年くらい使用しているノートPC「dynabook ss mx/190dk」があまりにも遅くて嫌になってきたので、SSDにしてみた。
Firefox起動するのに20秒以上かかったり、Visual Studio2010使っていると、インテリセンスのためにエディタが10秒以上止まったりするのは流石に我慢できない・・・・

SSDPhotoFastのGMonster-2.5''IDE V3の64GBモデルにしてみた。最初なぜか認識されなくてヒヤッとしたが、再起動を何回かしてみたらうまくいって、その後は特に問題ない模様

折角なので、換装前と換装後の速度を計測してみた所、

となった。
無論、左が変える前のHDDの時で、右がSSDに変えた後の値である。逆だったら困る。。。
数字上はかなり早くなってる。体感的にもFirefoxが数秒で起動するようになったので、まあ満足。
ただ、CPU的な問題で複数の作業を同時にやろうとするとやっぱり重くなってしまうのが難点だ。こればかりはしょうがない・・・