2009/12/23

C#のコードを高速化するための方法

以前のものの続き。
C#ならではのコーディングの際に注意するところまとめ。

○クラスと構造体の選択方法

オブジェクトのインスタンス生成はかなり重たい処理であるよう。

で、C#にはオブジェクトをヒープ内でなく、
スタックに積むための「構造体」という仕組みがあるのですが、
http://www.atmarkit.co.jp/fdotnet/special/java2cs/java2cs_01.html

構造体は値型であるためそのサイズが大きい場合にはかえってその受け渡し時の
コピーに負荷がかかってしまうよう。
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_04.html

構造体を使うかクラスを使うかの境界線はそのサイズで決まるようなの
ですが、その境界は意外と低くて16バイト以上のものはクラスを使ったほうがいいよう。

クラスと構造体の選択
http://msdn.microsoft.com/ja-jp/library/ms229017.aspx
実検証結果
http://mag.autumn.org/Content.modf?id=20061014194823

実際には構造体を使ったほうが得をする場合は
結構限られている感じをうけます。


○キャストはすごく重そうだ

型キャストはちょっと意外なぐらい重い。
http://www.atmarkit.co.jp/fdotnet/dotnettips/005castandas/castandas.html

上記のリンクにもあるように、参照型のキャストにはasを使ったほうが速い。
でも、asを使ってもそれなりに重い処理ではある。

Collectionはキャスト必須になってしまうので、
なるべく代わりにGenericを使ったほうが良い。

http://www.atmarkit.co.jp/fdotnet/csharp20/csharp20_02/csharp20_02_01.html
http://life-hack.jp/blog/charly/95

イベントハンドラでsenderを繰り返し使うと重くなるので、
senderは早めにas演算子でなんらかの型に変換しちゃったほうが良いみたい。


○多次元配列は比較的重い

多次元配列(x[i,j])よりジャグ配列(x[i][j])使ったほうが速いそうです。
http://d.hatena.ne.jp/EmK/20081130/1228025602
重い数値計算とかやる場合に影響するかも。

C++の多次元配列は実質的には単なるポインタ経由のアクセスなんで
べらぼうに速いですね。やっぱり。


○文字列の連結処理

頻繁な文字列の連結はメモリ中のコピーを繰り返すので遅い
http://www.atmarkit.co.jp/fdotnet/dotnettips/029strcat/strcat.html
ベンチマーク結果
http://sonic64.com/2005-11-30.html

stringbuilderを使うと高速化できる。
そこまで重い処理ではないので、ホントに大量の連結
を繰り返す場合にだけ対策が必要。


○画像処理

BitmapのGetPixel, SetPixelは画像処理に使うにはちょっと重すぎる。
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_021/csharp_abc05.html

本気で画像処理するときには、unsafeになるけど
ポインタを使うしかないと思う。


○.net Frameworkの起動が遅い

Windows XPだと初回のアプリ起動時に.net Framework自体を起動しに行く。
http://ameblo.jp/norixp/entry-10013581738.html

対策するとしたら、
上のリンクのように別アプリでスプラッシュウィンドウを出す、とか、
スタートアップに空の.netアプリを入れとくか。

Vista以降だと最初から起動してるから
これがなくて速いんでしょうか?

2009/12/22

C#って遅いのか?

C#って遅いのかどうか?といういろいろ荒れがちなセンシティブな話。
でも結構高速化するときに結局どうすりゃいいのかわからなくて困るので
他力本願で収集した内容を分かる範囲でまとめてみる。

1) C#ってVMで中間言語を解釈しながら動いてるわけじゃない

ときどき間違って説明されていることがありますが、
C#って昔のVBのインタプリタとかJAVAのVMとは違って
中間言語を逐次実行してるわけではない。

VB.netの話だけど以下がわかりやすい。C#も同じ。
http://www.atmarkit.co.jp/fdotnet/vbcheer/vbcheer08/vbcheer08.html

だから数値計算とかでベンチマークすると実はかなり速いそうだ。
http://densanshokunin.at.webry.info/200701/article_2.html

でも実際に使っているとなにかとストレスを感じることもあるのは周知の通り。

2) コンパイルの時期に関して
より正確にはここに。
http://msdn.microsoft.com/ja-jp/library/ht8ecch6(VS.80).aspx

> すべての MSIL をネイディブ コードに変換するために時間とメモリを費やすのではなく、
> 実行時に必要になった MSIL を変換し、その結果生成されたネイティブ コードを保存して、
> 以降の呼び出しで利用できるようにしておきます。
> 型が読み込まれると、ローダーはスタブを作成し、その型の各メソッドに結び付けます。
> それ以降は、この JIT コンパイル済みのメソッドを呼び出すと生成済みの
> ネイティブ コードが直接実行され、JIT コンパイルとコードの実行に必要な時間を節約できます。

つまり、フォームを開くのにしてもメソッドを実行するのにしても
「初回だけ」遅い可能性があることになります。
故意に前もって特定のコンパイル実行しておくのも難しいようなので
このへんは気をつけておく必要あり。
最終的にはngen.exeを使った一括先行コンパイルか。試したことないですが。

3)ガベージコレクタの動作に関するオーバーヘッドは読みづらいので注意する必要がある。

ガベージコレクタの動作については以下が詳しい。
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_01.html

でも、結局プロのプログラマでない自分としてはいろいろ調べるのは面倒で、
なるべくobjectのinstanceをpublic宣言して
いろんなところで使いまわす、という腰の引けたコーディングをやりがち。
ホントはもっといいやり方があるはず。

4) System.Windows.Formsって重くないでしょうか。

http://d.hatena.ne.jp/NyaRuRu/20060203#p2
> トップレベルウィンドウとメニューやツールチップなどの一部の特殊ウィンドウのみを
> Win32ウィンドウとし,後はクライアント領域に完全自前描画になったことで,
> やっとInternet ExplorerやFirefox と同じ土俵に上がることができました.
> 要はこれまで WinForms が重かったのはアルゴリズム的問題があったと
> いうことなわけですが,今まで単に「.NET だから重い」と思っていた人は
> もう一度評価し直すべきときがいよいよ来たかと思います.

ちゃんとした検証はできてないですが、
どうもやっぱりFormsの標準コントロールが.net以前と比べて妙に重い気がします。
コントロールをフォーム上に大量配置しただけで露骨に重くなる感じが。

困ったときはすぐダブルバッファリング+自前描画
http://www.atmarkit.co.jp/fdotnet/dotnettips/197doublebuf/doublebuf.html
をやって無理矢理解決してるので、根本的にはどうしたらいいのかさっぱりわからないです。


5) 意外と遅い処理がいろいろあるよう。

C#では意外と遅い特定の処理というのがいろいろあるようで、
そこを気にしないといけないようです。

これについてはまた別途。

2009/12/18

システムの復元でC#のソースファイルが消える!

C#のソースファイルをいくらか無くしてしまいました。

PCを起動してみると突然Windowsがブルースクリーンに。
しょうがないのでセーフモードで起動し、初めて使う
「システムの復元」をすると、なんとか正常に戻った。
なんかシステム関連のファイルだけ以前の状態に戻してくれるんだそうだ。

なるほど、こりゃ凄いや。頻繁に復元ポイント作る設定でよかった。
と思いつついろいろやってると、
どうも最近インストールした自作ソフトのexeファイルが消えてることに気づく。

そっかー。実行ファイルだからシステム復元で消されてもしょうがないわな。
まぁ、ソースファイルあるんだしまたコンパイルすりゃいいや。と思って
VC#を開いてみると、ところどころC#のソースコード(拡張子.cs)が消えている!
プロジェクトファイルとかリソースファイルは消えてないのに。
いや、なんでソースファイルの状態巻き戻すかな。

で、いろいと調べた結果、
>http://www.atmarkit.co.jp/fwin2k/operation/srestore/srestore_02.html
Filelist.xmlを調べると、システム復元が対象にしてるファイルの拡張子がわかるそうだ。

・・・うわ。.csが入ってるよ。C Scriptか何かの拡張子とカブってんのかな?
.cとか.cppとか.vbとかは入ってないのに。なんてこった。

急いで再度システム復元を使ってなんとかソースファイルを復元しようとすると、
「システム復元に必要なHDD領域が足りません」とか言われる。
じゃあいらないファイル消してもう一回やるか、と思ったら、
なんとシステム復元ポイントがぜーんぶ無くなってる!

いや、それはないだろーと思って調べてみると、

> http://support.microsoft.com/default.aspx?scid=kb;ja;JP301224
この動作は仕様です。

・・・。うわー。

Windows XP SP3で確認。

2009/12/13

C#でフォームをアクティブにせずに開く方法

.net frameworkで、ポップアップウィンドウを作ろうとすると、
いろいろ面倒な罠がありました。

まず、アクティブにせずにフォームを開く必要があり、
ShowWithoutActivationというプロパティを変更するとよさそうなのですが、
読み取り専用なので、値を変更できない。

すると、このプロパティをoverrideするしかないのですが、

MSDNによると、
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.showwithoutactivation(VS.80).aspx

> フォーム内で ShowWithoutActivation をオーバーライドし、
> true が返されるようにプログラミングしても、値を変更することはできません。


なんだよー。と思いつつ調べてると、
http://d.hatena.ne.jp/masa-k/20080609/1213015216
こいつはどうも誤訳で、
> このプロパティはread-onlyなので、変えたいときは
> ShowWindowActivationをoverrideしてtrueを返すようにしてください。
が、正しいよう。

で、なんだーできるんじゃないですかー。と思いつつ試していると、
何故かできない。

で、結局原因は、
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=401311
「TopMostプロパティをtrueにしているとShowWindowActivationが効かない」
というバグのせいのよう。

ポップアップに使うにはTopMostが効いてないといろいろ不便なので、
結局、ここの下のほうにあるように
http://www.r-nakai.com/archives/99
SetWindowPos APIを使うしかないよう。
(つうかC#でWIN32 APIって使っていいんだ・・・。)

ただ、これをやるとLoadとかのイベントが発生しないようなので、
そこらへんは手で実装してやる必要があるようです。


.net Framework3.5で確認。

2009/12/05

Inkscape 0.47 使ってみました

Inkscape 0.47をしばらく使ってみました。

まだ矢印関連の実装がまだなのが痛いです。
矢印に色をつけたりすると矢印の先だけ色がつかなくて変な感じになったり、
矢印の先端がグリッドに乗らなくて微妙にずれたままだったり、
いろいろ未実装の部分があり。
パス→オブジェクトをパスへ
でなんとか解決できるんだけど、やっぱりまだちょっと仕事に使うのは
時期尚早な感じですね・・・。

Illustatorもどきの第一候補なのでぜひ頑張ってほしいですね。
・・・誰かこの辺直さない?>各位

2009/12/02

Inkscape 0.47

高機能なフリーのドローソフト Inkscapeが
ver 0.47になりました。
http://ja.wikipedia.org/wiki/Inkscape

普通に仕事に使う上では最も致命的だった、
「コピペでofficeにwmp貼り付けできない」
というのが、今回のver upでできるようになってるようです。

・・・が、私の環境ではなぜか左クリックでオブジェクトが選択できなくなってる。
何故だ・・・。

2009/11/23

ソフトウェア開発コスト


IBMのRationalの紹介の前振りに利用されていた資料
「ソフトウェアの開発にはコストがかかるものですよー」というのを素晴らしくうまく現わしている。

2009/11/20

Rubyの面白いところ Part 8 「定数への代入」

定数の代入には特別なルールがある。

  • 既に存在する定数に代入すると、Rubyは警告を発する。しかし、Rubyは代入自体は実行する

  • 定数への代入はメソッド本体の中では認められない。なぜならメソッドは1度以上呼ばれるものだと想定しているから


変数とは異なり、定数は、Rubyインタプリタが実際に代入式を実行するまで作成されない。次のような評価されない式では定数は作成されない。

N = 100 if false

そのため、定数は未初期化状態にならない。

Rubyの面白いところ Part 7 「NameErrorが起こらないとき」

値が代入されていないクラス変数が参照されると、RubyはNameErrorを起こす。それはローカル変数についても同様。しかし、クラス変数の先頭には@@というprefixがついているのに対して、ローカル変数には何もprefixがついていない。そのため、ローカル変数参照は、メソッド呼び出しのように見えるのである(何故ならRubyは括弧を省略できる)。Rubyインタプリタは、ローカル変数に対する代入を検出すると、それが変数であってメソッドではないことを知ることができるので、変数名が現れた時には値を返せる。そして、代入を検出していない場合には、Rubyはその式をメソッド呼び出しとして扱う。その名前のメソッドが存在しない場合には、RubyはNameErrorを起こす。
しかし、ここで注意することがある。Rubyインタプリタが変数に対する代入式を検出すると、その変数は存在するようになる。


a = 0.0 if false #この代入は絶対実行されない
print a # nil
print b # NameError

プログラミング言語 Ruby 第2刷 91ページ より

追記:2011/05/05
次のsnippetsはNameErrorを起こす。

for i in 1..2
  if i == 2
    print a
  else
    a = 1
  end
end
しかしながら、次のsnippetsはNameErrorを起こさない。
for i in 1..2
  if i != 2
    a = 1
  else
    print a
  end
end
参考: 2.3 ローカル変数はいつ参照可能になるのでしょうか

2009/11/19

Rubyの面白いところ Part 6 「==演算子の意味はJavaと異なる」

==演算子は、Objectクラスではequal?メソッドと同じ意味に過ぎず、2個のオブジェクト参照が等しいかどうかをテストする。これは次と等しい。

a.object_id == b.object_id

しかし、ほとんどのクラスでは、インスタンスは別でも値が等しいかどうかをテストできるように定義しなおされている。

a = "Ruby"
b = "Ruby" # 内容は同じだが別のStringオブジェクト
a.equal?(b) # false: aとbは同一のオブジェクトではない
a == b # true: しかし、2つの異なるオブジェクトは同じ値を持っている

Javaは2つのオブジェクトが同一オブジェクトかどうかをテストするときには==演算子、2つの別々のオブジェクトが同じ値かどうかをテストする時にはequalsメソッドを使う習慣になっているため、ちょうど逆である。
プログラミング言語 Ruby 第2刷 80ページ より

2011/04/27 追記
参考: Rubyリファレンス日記

Rubyの面白いところ Part 5 「実はオブジェクト参照に対して操作している」

変数に値を代入するときは、代入先の変数の「中に」オブジェクトをコピーするのではなく、変数にオブジェクトの参照を格納しているだけである。

s = "Ruby" # Stringオブジェクトを作り、参照をsに格納する
t = s # 参照のコピーを作ってtに格納する。sとtは同じオブジェクトを参照する
t[-1] = ""
t = "Java" # tは別のオブジェクトを参照する
print s, t # "RubJava"と表示

プログラミング言語 Ruby 第2刷 76ページ より

2009/11/16

Rubyの面白いところ Part 4 「Arrayの和集合と積集合は交換則が成り立たない」

Arrayクラスに論理演算子|と&を用いると、それぞれ和集合と積集合になる。

a = [1, 1, 2, 2, 3, 3, 4]
b = [5, 5, 4, 4, 3, 3, 2]
a & b # [2, 3, 4]
b & a # [4, 3, 2] 要素は同じだが順序は逆

プログラミング言語 Ruby 第2刷 69ページ より

-a/bとa/(-b)といい、対象性についてはRubyはあまりこだわりを持ってないのかなぁー…。

2009/11/15

Rubyの面白いところ Part 3 「Rubyの算術演算」

除算の演算子は、両辺のクラスによって動作を変える。

[5/2, 5.0/2] # => [2, 2.5]

分子分母の片方だけが負数のとき、Rubyが行う整数の除算、剰余計算は、C、C++、Javaとは異なる。-7/3をしたとき、それらの言語が-2に丸めるのに対して、Rubyは-3を返す。
Rubyは-a/bはa/-bに等しいが-(a/b)とは等しくならない場合がある。
プログラミング言語 Ruby 46ページ より

Rubyの面白いところ Part 2 「文の終端としての改行」

CやJavaと違ってセミコロンを使って改行を示さない文化だ。そして、セミコロンで文末が明示されていない場合、Rubyインタプリタは、行の中のRubyコードが構文的に完全な文になっていれば改行を文終端として扱う。文が完全でなければ、次の行までの文の解析を続ける。
次のコードはxとyが間して合計をtotalに代入する。

total = x + #式が不完全なので、解析は次の行に続く
y

しかし、次のコードはtotalにxを代入し、次にyを評価して、これに対しては何もしない。

total = x # これは完全な式
+ y # 何の約にも立たないが、完全な式

プログラミング言語 Ruby 35ページより

Rubyの面白いところ Part 1 「何がfalseと評価されるか」

Rubyの勉強を始めたので面白いところ、他の言語と違うところをぺたぺたメモ書き。

他の言語では0はfalseとして取り扱われることが多いが、rubyはnilとfalse以外の全てがtrueとして取り扱われる。つまり、0と""がtrueとなる。
if 0
puts "true"
else
puts "false"
end

この結果はtrueとなる。

補足:
論理和・論理積演算子

2013/08/29 追記:
ふと気づいたけど、lispと似てますね。

2009/10/23

YouTubeの5つ星システムは機能していない

Five Stars Dominate Ratings
YouTubeの星評価システムは、ほとんどが星5つにしてしまうというお話。
で、解決方法としてThumb up/downを取り入れるか、お気に入り数を動画の評価にするかを考えているみたい。
でも、この二つを同列に並べる発想が既に間違っていると思う。
グラフを見ると確かに星5つが際立って見えるが、このグラフには動画を評価しなかった人達の割合が抜けている。そして恐らくそれは大量にあると思う。つまり、動画を見に来るという1アクションの後に、更に動画を評価するというアクションを求めているのがダメだと思う。

2009/10/20

VMWareのBIOS起動画面の時間を長くする

VMWareのBIOS画面から設定メニューに入るときにはF2を押す。
だが、これが反射神経上間に合わない…。
そこで、vmxファイルに以下の記述を加えた。

bios.bootDelay="5000"

日めくり美人

このサイトにはGoogle-adsより二桁もヒット数の多い「美女暦」をはっているのだが,
mixiアプリに同じようなのがあることを発見した。

その名も
「日めくり美人」


「美女暦」とはあまり関係ないみたいだし・・・パk(ry




ここまで書いて技術情報が何もないことに気がついたが,
せっかくなのでこの赤い・・・もとい,投稿しておこう。

2009/10/18

【ニコニコ動画】【プログラミング】テトリスを1時間強で作ってみた【実況解説】


なんというできる人。

2009/09/17

ダイエットへの意識と商品購入までの経路に関する調査--情報収集はインターネット、購入は店頭がメイン

ダイエットへの意識と商品購入までの経路に関する調査--情報収集はインターネット、購入は店頭がメイン @ Webマーケティングガイド

Q2-①では、1年以内に購入したダイエット商品の情報収集場所と購入場所について尋ねた。
すると、情報収集する場所では「インターネットの美容関連サイト」が41.6%で最も多く、次いで「その他のテレビ(番組・CM)」が39.0%、「ドラッグストア等の店舗」が38.6%になった。

調査方法   :インターネットリサーチ

何のネタだろう…。
でも、

また「ダイエットをしている」と回答した女性の内訳を見ると、ダイエットが必要でない女性(やせ型の人、普通の人)が75%を占め、ダイエットが必要な肥満の人は25%に過ぎず、日本のダイエット市場はダイエットをすべき肥満の女性よりもダイエットの必要のない女性が中心の市場となってきており、様々なタイプの女性に対する訴求やアプローチ方法が必要なのではないかと考えられる。

とかは面白いな。

2009/09/15

2008年中堅・中小企業向けERP市場実態調査報告


2008年中堅・中小企業向けERP市場実態調査報告 @ ノークリサーチ
この図を見ると、近年言われている「ERPは大手に売りつくした。もう価格を下げて中小企業を相手にするしかない」という意見に疑問を感じた。

2009/09/11

2009年 上半期 分析

このブログを開いて一年が経過した。
ありがたい事に更新も、読んでくれる人も細々と続いている。

区切りの意味で、ちょっと2009年上半期(2009/01/01~2009/06/30)の状況を解析して振り返ってみた。

2009年上半期、総セッション数3,346だった。ドマイナーもいいところだが、2008年下半期が1,260セッションだったので順調な伸びだと思える。ユニークユーザは2,219人にアクセスして頂いており、そのうちの65%が新規ユーザにあたった。つまり、ほとんどのユーザは一度このブログを見た後、二度とここへは来ないということだ。な、泣ける…。

人気のあるコンテンツは以下の順位であった。
1. Fedora 10
2. VMWare guest OS(CentOS 5)の解像度変更
3. VMWareゲストOS(Windows2000)の解像度をワイド対応にする
4. 学生は無料でWindows Server 2008をもらえる
5. 新玄箱 KURO-NAS/X4
6. PHP 5.2.6(Win32)におけるphp_pgsql.dllのバグ
7. USBメモリでTrueCrypt
8. ファイル操作の排他制御
9. EnterキーでTabキーのようにフォーカスを移動させるJavaScript(prototype.js使用)
10. VMWare ゲストOS上のlinuxの時刻が狂う
玄箱とか、全く内容のない日記がベスト10入りしてるのが泣ける。時事ネタはアクセス数が伸びるようだ。また、ほとんど書いていないjihnaの投稿が3本もランクインしている。もっと書いてもらうことにしよう。

さて。このブログを始めるにあたって、目的は二つあった。
一つ目は情報の共有化だった。これは細々とだが成功しているように思える。
二つ目はアフェリエイトで1回の飲み代ぐらいは稼げないか試してみようというものだった。結果は、半年間でGoogle Adsのクリック数は7。収益総額は当然のように0$である。
ちなみに、このサイトから美女時計のクリック数は936クリックである…。

2009/09/10

Visual Studioのマクロ操作

cppファイルを開いているときに、対応しているhファイルをマクロで開けるようにする方法

私はワイド画面でウィンドウを縦に区切って、左にヘッダファイル。右にcppファイルを開いている。なのでこういうマクロは便利。

2010/01/17 修正
Microsoft Visual Studio .NET2003用マクロ詰め合わせ
最近はcppとhファイルの切り替えに、VC++2005でこちらのマクロを使っています。

VC++ 2005でコンパイルしたexeが配布できなくなった

ある日突然起きた出来事。
VC++2005でコンパイルしたプログラムが、開発環境以外で動かなくなってしまった。つまり、配布できなくなってしまった。エラーメッセージも

このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。

という、とってもわかりやすいものだった。配布テストを長い間していなかったため、ソース変更が影響しているのかと必死こいてチェックしなおしたが、どうやらWindows Update(KB971090のVisual Studio SP1アップデート)が原因みたい。

で、肝心の解決方法だが、
配布先で解決してもらう方法は、最新のRedistributable Packageをインストールしてもらう(googleで検索すると現時点では古いRedistributable Packageがひっかかりやすいので注意)。
開発者側で対応するには、これ(こっちの方法は確認してません)。

2009/09/09

ターボリナックスのターンアラウンド

ターボリナックスは終わってしまったのか?

日本のソフトウェア産業は本当に終わりを迎えていると思う。
読んでいて、ターボリナックスは苦労されたんだなぁと目頭が熱くなる。
でも、残念だけどこれは失敗する予感がギュンギュンする…

2009/09/05

ソースコードをblogに貼り付ける

・ソースコードを見やすくするためのスタイルシート
http://blog.coevolver.net/entries/22

このblogにも適用してはどうだろうか?>参加者

※追記:

試しに「Blogger Syntax Highlighter」を使ってみる。

/**
* radioボタンのチェックを外すことができるように
* 要prototype.js
*
* Example:
* window.onload = setRadioCheckReset();
*
*
* 参考URL:http://www.kttnet.co.jp/~harashi/samplepg/radio-sample2.htm
*/
function setRadioCheckReset() {
var RadioState = new Object(); // どのradioボタンがチェックされているか
// 保持するオブジェクト

var RadioEventWatcher = Class.create();

RadioEventWatcher.prototype = {
initialize: function(elm, _index) {
this._index = _index;
// イベントハンドラ
Event.observe(elm,
'click',
this.evFunc.bindAsEventListener(this),
false);

// イベントハンドラ追加前にチェックされている場合を考慮
if ( elm.checked ) {
RadioState[elm.name] = this._index;
}
},
evFunc: function(evt) {
target = Event.element(evt);
if ( RadioState[target.name] == this._index ) {
target.checked = false;
RadioState[target.name] = 0; // 何も選択されていない
} else {
RadioState[target.name] = this._index; // 選択された
}
}
}

// 全てradioボタン要素にEventを登録
for (var i = 0; i < document.forms.length; i++) {
for (var f = 0; f < document.forms[i].length; f++) {
var elm = document.forms[i][f];
if ( elm.type == 'radio' ) {
new RadioEventWatcher(elm, f);
}
}
}
}


貼り付け方は
・コードをハイライトする「Blogger Syntax Highlighter」ウィジェット
http://www.kuribo.info/2008/06/blogger-syntax-highlighter.html

を参考のこと。

SQLインジェクション対策の罠

※この日記は嘘が含まれている可能性があります。参考にしないことを勧めます。

あるときPostgreSQLのpg_restoreに失敗していることに気がついた。
ここら当たりがあるとすれば、PostgreSQL7.4.X から PostgreSQL8.3.X にアップデートしたぐらい。

pg_restoreでリストア失敗していると思われるテーブルをまずplain形式で出力。
そのままSQLで流すと下記のエラーが発生した。

invalid byte sequence for encoding "EUC_JP":


このキーワードでググると下記のWebページにたどり着いた。

http://ml.postgresql.jp/pipermail/pgsql-jp/2007-June/021718.html

> おそらく、ver8.1.4以降で厳格化されたエスケープ文字の取り扱いに
> ひっかかったのかな?と推測しております。

これか!
・PostgreSQL 8.1.3から8.1.4の変更点:
http://www.sraoss.co.jp/PostgreSQL/8.1.4/changes.html

#おそらく半角カナのところで失敗していると思われる。
#PHPでpg_escape_string()関数を使っているので気がつかなかった。

で、文字をエスケープしてpg_dumpするオプションでもあるのかなあ?と思って探したが無い。

社内からのみのアクセスのシステムとはいえ、backslash_quoteの設定をいじるのは、あまりにも気持ち悪いので避けたい。

まあ結論は「Shift_JISは使うな」なんだが、既に動いてしまっているシステムをいじるわけにもいかない。

結局スマートな解決方法が見いだせず。

2009/09/02

SFTPクライアント

そろそろFTPをあきらめたいから,別のファイル転送手段を考えていたのだが,
SCPもWebDAVも大容量ファイルの転送を考えると,中断&再開のレジューム機能はほしいし。
そういう意味ではアップロードCGIもなぁ・・・。
#バイナリエディッタで分割転送して結合って玄人さんはお断りなのです。

となると,なんとなくSFTPかな~って思って
FTPとシームレスなSFTPクライアントを探してみた。

見つけたのは以下の4つ。

WinSCP http://winscp.net/
Filezilla http://filezilla-project.org/
ALFTP http://www.altools.jp/
EmFTP http://www.emftp.com/

EmFTPはシェアウェアだけどな・・・

次点としてFFFTPに要望メール書いておくか

Apache攻撃受ける - その手口と影響

Apache攻撃受ける - その手口と影響 @ マイコミジャーナル

apache.orgがssh keyの流出によりハッカーの攻撃を受けたらしい。
まぁ、このへんまではよくある話。続きに興味を惹かれた。

8月27日(協定世界時) 18時0ごろ、攻撃者はpeople.apache.org (minotaur.apache.org)へそのSSHアカウントを使ってファイルのアップロードを実施。
28日(協定世界時) 7時ごろ、攻撃者はHTTP経由でCGIスクリプトへアクセス。7時45分ごろeos.apache.org (Solaris 10)における工作の作業にApache Infrastructure Teamが気がつき、10分以内に影響を受けていると考えられるサーバのオフライン化を決定。

攻撃を受けてから24時間以内に検知して、しかもサーバのオフライン権限を持ってる人が対処できている事が素晴らしい。
しかも、

ZFSスナップショットを使って問題がなかった状態まで差し戻しを実施し、再びサービスを開始したと説明されている。

ZFS SUGEEEEEEEEEEEEEEEEEEEE!!!!
FreeBSDにもZFSってあったのか!
いいなぁ、この仕組み。趣味サーバにも導入検討するかなぁ…。

initialレポートらしいんで、続編も期待。

2009/09/01

UMLに比べてのBPMNのメリットは?

システム屋さんの仕事をしていると、業務フローやシステムフローの見える化をどうするかはいつも悩まされる。
どうもBPMN(Business Process Modeling Notation)というのが、最近UMLのアクティビティ図に代わって評価されてきているらしい。
UMLに比べての利点としては

  1. UMLが下流工程を意識して設計されているのに対して、上流工程向きに作られている

  2. シーケンス図のような「メッセージによるアクティビティの駆動」を記述できるので、各プロセスを独立して記述しやすい


という点を感じた。
下流より上流向きの資料を充実させる必要があるときに導入してみるかな。



2009/08/30

Turbo Explorer is finished

http://www.forest.impress.co.jp/docs/news/20090826_310816.html

> また26日、無償で利用できる開発環境「Turbo Explorer」の公開が終了され、すでに同社のWebサイトではダウンロードできなくなっている。


うわーん,BCB6のプログラム Turbo Explorerでコンパイルできるようにしてたのにー!

2009/08/29

ExpressでFFFTP

たいした話ではないが

#include "afxres.h"

#include <windows.h>
#define IDC_STATIC -1
に変更

プロジェクトのプロパティ→構成プロパティ→マニフェストツール→入力と出力→埋め込みマニフェストを”いいえ”に設定

でFFFTP-1.96dのソースコードがコンパイルできました。

続きはまた今度



http://ameblo.jp/oregano-blog/day-20090720.html
http://forum.minidx.com/thread-8-1-1.html

2009/08/28

Windows Installer Clean Up

Live Messenger のインストールやアンインストールを繰り返してたら,インストーラーがおかしくなったので使ってみた。

http://support.microsoft.com/kb/290301/ja

とりあえずの役には立ったのでメモ

2009/08/26

Live Messenger @ XP64

今日メッセンジャーを立ち上げたらウィンドウが開きました。




ほほー 新しいばーじょんが出たのか。
それはためさねば・・・・

「はい」





( ゚д゚)

「閉じる」





( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

「いいえ」





( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

(つд⊂)ゴシゴシ
  _, ._
(;゚ Д゚)


「強制終了」



ちなみに 回避方法は ここのコメント見て2009いれました。

http://o-life.jp/b/2008/06/windows-xp-x64-edition.html

この人も今日 はまった口か

2009/08/19

意外に多いC#ユーザ?Javaユーザは減少?

プログラミング、平日にはC#とJava、週末にはPythonとRubyを使う? @ /.J

上記タイトルより、このグラフにあるC#ユーザの多さ・Javaユーザの減少に驚かされる。
日本もいずれそうなって行くんだろうか…。

2009/08/17

CentOS 4.7のネットワーク設定をDHCPクライアントにする方法

/etc/sysconfig/network-scripts/ifcfg-eth0を編集。

DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
TYPE=Ethernet

ネットワークデバイスを再起動。

# /etc/init.d/network restart


何回やっても忘れてしまうのでメモ。

2009/07/28

[ARToolKit] ステレオ計測を駆使してミクにおさわり



変態に技術力を持たせるとこうなるwww

2009/07/24

shutdownコマンドをsudoに登録

システムを停止するたびに特権ユーザになるのが面倒なのでsudoで実行できるように変更した。

# visudo
# Allows members of the users group to shutdown this system
%users ALL=/sbin/shutdown -h now

これで一般ユーザでも停止できる。
セキュリティ的にはあれだが、家のサーバなんでいいだろう。

2009/07/08

ネットで個人献金を――楽天が新サイト、1000円から受け付け

ネットで個人献金を――楽天が新サイト、1000円から受け付け

戦時中、図書館に保管されている本の貸し出しリストを使って、戦争に反対しそうな人達を取り締まったことがあるそうです。その反省から、図書館では書籍と個人情報の関連付けをできるだけ結びつけない文化があるそうです。

楽天のこの仕組みはそれ以上の個人の思想のデータを保存すると思います。
文明の進歩なのか、同じ過ちを繰り返しているのか疑問があります。

2009/07/05

情報セキュリティスペシャリスト

ラッキーなことに受かりました。

勉強自体は楽しかったのですが、試験の問題はかなり資格の価値に疑問を感じるものでした。
もうちょっと技術よりなものが良かったなぁ…。

勉強に使った本の紹介をば。


読んでいて一番面白かった本。ただし、資格を取るという点においてはこの本は的外れすぎます。初年度だから著者もどういう問題を作ればいいかわからなかったんでしょうが…。


受かったのはこの本のおかげかな。ただ、本がいいというより、この本に載っていた過去問と似たような問題が出たってだけだと思います。

結論。
過去問やれば何で勉強してもよしw

2009/06/27

Oracle 10g ExpressをDebian 5.0.1 lennyにインストール

Oracleのレポジトリを/etc/apt/souces.listに追加する。

deb http://oss.oracle.com/debian unstable main non-free

公開アーカイブの鍵を追加する

$ wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O - | apt-key add -
$ apt-get update
$ apt-get install oracle-xe

オラクルの設定をする。

$ /etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition. The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts. Press to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts. Note that the same
password will be used for SYS and SYSTEM. Oracle recommends the use of
different passwords for each database account. This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"

Oracleを操作するユーザの.bashrcに以下の行を追加して、必要な環境変数を設定する。

# environmental variables for oracle database
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh

.bashrcを再読み込みさせる。

$ source .bashrc

これでSQL*Plusが使えるようになっている。SYSDBA権限でログインしてみる。

$ sqlplus sys as sysdba

以上。

2009/06/22

2009/06/19

拡張現実採用事例

ニコニコで紹介されている拡張現実(Augmented Reality)を見るたびに、「これ商売にならないかなぁ?」と思っていた。
で、採用事例を見つけたのでメモ。


Augmented Reality Technology Brings Useful Service to USPS @ Marketing VOX

郵便物が箱にはいるかどうかを調べられるサービスらしい。透明化などがARでないとできない事なので、面白い。

だけど…。
やっぱ、サイズを示してメジャーで測ってもらうのにくらべて敷居が高すぎるなぁ…。



2009/06/16

JavaScriptを使わずにWebブラウザの閲覧履歴を盗む

JavaScriptを使わずにWebブラウザの閲覧履歴を盗む @ /.J

ネットは怖いことを再認識。これを防ぐ対策してる人は本当にごくわずかだと思う。
行動ターゲティング広告のシステムを作る場合、防ぐ方法が難しいので切り札的になると思う。だけど、「不正指令電磁的記録作成等の罪」にがっつり当たるような気がするなぁ…。

それを考えると、ドリコムのad4Uはうまくグレーゾーンをついてるなぁと再認識。

参考:行動ターゲティング広告はどこまで許されるのか

2009/06/15

2009/06/10

KAKASI - 漢字→かな(ローマ字)変換プログラム


大量の漢字を含む情報をカナに変換する必要が出てきたのでメモ。
公開されている辞書でもそこそこの精度があった。

Linux版だけでなくWin32版もあるのがありがたい。

exec関数を使えばWin32+PHPという環境からでも簡単に利用できる。
一例、

function kakasi($str) {
$res = exec("echo ".escapeshellcmd($str)." | c:\\kakasi\\bin\\kakasi.exe -JK");
return $res;
}

今回はコマンドラインのみの使用だけだったが、ブラウザから利用するにはもう一工夫必要。
apacheのサービスをローカルシステムアカウントで動作させればよい。
(ただしそれによるセキュリティが低下しても、私は責任もてないし、知ったことではない。)

2009/05/26

Google as a password cracker

Google as a password cracker

MD5やSHA1のデータベースとしてGoogleを使おうというお話。
話自体よりも、コメントで寄せられている数々のリンクが役に立つ。

2009/05/24

GENOウイルス

最近はやってるので まとめサイトをぺたぺた

http://www31.atwiki.jp/doujin_vinfo/
http://www29.atwiki.jp/geno/

ほほー Adobe ReaderやFLASHのJavascriptつかってるのか~




あれ、最近そんな記事書いたような(汗

2009/05/23

EnterキーでTabキーのようにフォーカスを移動させるJavaScript(prototype.js使用)

どうしてもTabキーを押すのがめんどくさいらしい。

<script type="text/javascript" src="prototype.js"></script>
<script language="JavaScript">
<!--
window.onload = Event.observe(window.document, "keydown", eventKeyControl, false);


// ----- キー制御関数 ----
// Enter Key押したときに次のフォーカスへ移動する関数
function eventKeyControl(evt) {
var toFocused = false;
if ( evt.keyCode == Event.KEY_RETURN ) {
var srcElem = Event.element(evt);
if ( srcElem ) {
// textareaでEnterキーを押した場合は改行する。
if ( srcElem.type == "textarea" ) {
return;
}
for (var i = 0; i < document.forms.length; i++) {
for (var f = 0; f < document.forms[i].length; f++) {
var elm = document.forms[i][f];
if ( toFocused ) {
elm.focus();
return;
}
if ( elm == srcElem ) {
toFocused = true;
}
}
}
}
}
}
-->
</script>


要prototype.js。
これでフォームの入力の際に入力後Enterキーを押すと次のフォームにフォーカスが移動する。
#でもdocument.formsの順番って別に規格として定義されている訳じゃないから、きちんと動く保証はないよなあ・・・。
#あんまりこういうコードは書かない方が幸せだよなあ・・・。

2009/04/26

ソースの行数チェック

ソースの行数を調べた。
以下はカレントフォルダ以下のcppとhファイルの行数を調べる方法。

$ find . -name \*.cpp -print -o -name \*.h -print | xargs wc

2011/03/18 追記:
railsの.rbファイルの行数を数えようとして上記コマンドでは検索できないことに気付いた。
どうもシンボリックリンクの参照先を検索してくれないらしい。検索したい場合は次のようになる。

$ find . -name \*.rb -print -follow | xargs wc

2009/04/21

4KBデモ

これ たったの4KBのexeファイルなんだぜ・・・・



ダウンロードはこっちから


キチガイ過ぎるw

2009/04/20

pdfライター( セキュリティPDF(続))

なんとなくpdfライターも調べてみた。

・XP64で動くこと。
・セキュリティがかけれること
・プリンターもどきにみえること
・フリーであること

もう(条件が)マニアックすぎて多分ないだろうなぁ~と
思ってちまちま見ていたのだがひとつ見つけた。

PrimoPDF ( http://www.primopdf.com/ )
日本語版はエクセルソフト( http://www.xlsoft.com/jp/products/primopdf/index.html )

ただし、このままだとファイル名が日本語だと素敵ファイル名になる
のでPrimoreを追加で入れる。( http://blog.goo.ne.jp/komikoni/e/361ece1070b0e8ed054e6c5946dd0448  -> http://page.freett.com/t2255/PriMore.html )

http://blog.goo.ne.jp/komikoni/e/8d7a57bd5235d2dd6404c4293e05861a


#しかし、Primoreのブログをみてるとおもしろい。
#PDFでJavascript使ってる・・・・・・なんてマニアックな
#先日のJ#使いといい,世の中変態が多すぎる!(ほめ言葉)

2009/04/18

エクセルでインベーダー



Excelはこういうことができる開発環境じゃありませんwwwww

JavsScriptでOfficeを作るgoogleもそうだけど、世の中変態が多すぎるwwwww

2009/04/17

セキュリティのかかったPDFファイルからテキストを抽出する方法

文献検索をNAMAZUで作ってるのだが,最近pdfにセキュリティ掛けてるところが多いのでメモ

xpdf
動きません。ここがスタート。

xdoc2txt
一緒においているcryptlib.dllを一緒に落として使う。
コマンドラインの引数は「-n PDF文書のアクセス権限の設定を無視(cryptlib.dllが必要)」
ただし 時々エラーで落ちるpdfがいる
あと,NAMAZUのフィルターがわからない。@convopts に-n追加しただけじゃだめなのか?



ConcaPDF
iTextFrontがメンテナンスしなくなったようなので。
pdfの暗号化解除で可能。必要なものが「.NET Framework 1.1 再頒布可能パッケージ 」+「Visual J# .NET Version 1.1 再頒布可能パッケージ 」ってのがマニアックすぎ。J#アプリなんてはじめてみた。
まぁ使えたのだが。


ちなみにConcaPDFが使っているライブラリが iText.NET らしい。
ググッたら,.NET Framework 2.0 用の iText.NET 2005 があるじゃないか。
書き直してほしいな


余談だがiTextってJAVAのpdfライブラリをJ#に移植したのがiText.NETなのか。
J#使いってはじめてみたわ!世の中広いね!

2009/04/12

【ニコニコ動画】ARToolKitでARDeskTopもどき(その8)



某先輩に教えてもらったんだが、半端なくSUGEEEEEEEEEEEEEEE。
ジョブスさん。ここにあなたが好きそうなインタフェースが眠ってますYO!

2009/04/06

LIFETYPE

LIFETYPE

海外の日本語変換できないパソコンで日本語を打ちたいときに使える。
これ、JustSystemあたりが漢字に変換できるやつ作ってくれないかなぁ(´・ω・`)

2009/03/30

NTR support

インターワークのNTRシリーズって結構良さそうなんだよなぁ。
会社のTV会議システムを潰してこっちの導入を提案してみようかなぁ。



(メリットを考えた)



(手間暇を考えた)



(現在の負荷を考えた)



今はやめとこ…。

2009/03/29

3D-based Captchas become reality

3D-based Captchas become reality

3DのオブジェクトでCAPTCHAをしようという話。
いいな、これ。
ネタ的には猫認証・ゲイツ認証などいろいろあったが、画像を集めるのが困難というのがどれもネックに思えていた。そのへんは解決しそう。

2009/03/17

三菱東京UFJ銀行のシステム部門

三菱東京UFJ銀行のシステム部門は、システム統合時にPMBOK Guideに沿う形で組織を作ったらしい。

2009/03/08

Qtの暗黙の共有


暗黙の共有により、Qtのクラスは、コピーに対して変更を加えない限り実際のコピーが行われないことが保障されます。暗黙の共有を最大限に生かすためには、少しばかり従来とは異なるプログラミング作法が必要となります。constでないベクタやリストに対して読み込みのみのアクセスを行う場合、[]演算子ではなくat()関数を使います。[]演算子によってアクセスすると、Qtのコンテナは、その値が左辺値か右辺値かを判別できないため、どちらで使われてもよいようにコピーを行います。しかしat()の帰り値は左辺値となれないので、深いコピーを行わないのです。
STLスタイルのイテレータでも同じ問題が生じます。constでないコンテナのbegin()やend()を呼び出すと、Qtはコンテナが共有されていた場合強制的に深いコピーを実行します。こうした非効率を避けるには、可能な限りconst_iteratorとconstBegin()、constEnd()を使います。



めもめも。

PostgreSQL7.X以前で、columnのdata typeを変更する方法

・PostgreSQLでデータ型の変更
http://phprefa.seesaa.net/article/5297298.html



PostgreSQL 7系以下の場合上記のようにいったんデータを待避させて、ALTER TABLE文で、column削除→columnのrenameが必要となる。

PostgreSQL8以降はALTER TABLE ALTER COLUMN TYPEを使えばいいので簡単。

例)

ALTER TABLE distributors ALTER COLUMN address TYPE varchar(80);

もう一つ参考URL

http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.html#item4.3

2009/02/26

ATOKなどがIMEに勝手に切り替わらない方法

ATOKなどがIMEに勝手に切り替わらない方法

Visual StudioについてたIME2007が勝手にインストールされて以来、IMEに切り替わる病になってしまったのでメモ。

2009/02/08

Context Free

Context Free - デザイン文法で遊ぶ @ Radium Software

文法に法って画像を作成できるソフト。
今作っているアプリでは、データの"見える化"の部分をどうやって表現力豊かに、しかも切り離して管理するかがかなり難点だった。結局SVGを採用したんだが、正解だったのかなぁ…(´・ω・`)

Intelの爆速で長寿命な超ハイエンドSSDが短期間で半額以下に

Intelの爆速で長寿命な超ハイエンドSSDが短期間で半額以下に @ GIGAZINE

イイネー、イイネー。
手が出せそうなお値段になってきた。

まだ買えないけど\(^o^)/

2009/02/07

Command-line Fu

Command-line Fu

1行で実行できる便利なコマンドラインを紹介してくれている。

ssh user@host cat /path/to/remotefile | diff /path/to/localfile -

こんなのでリモートに存在するファイルのdiffを取れるのか。
当たり前だけどびっくりするものがちらほらあって見ていてたのすぃ。

UNIX系コンソールでディレクトリ以下のファイル数をカウント

UNIX系コンソールでディレクトリ以下のファイル数をカウント

より。
確かにそういうコマンドが無いのが不思議だ。

ls *.* | wc -l
などいろいろ応用がききそうである。

2009/02/05

ブラウザーのシェア、IEの過半数割れは時間の問題か

ブラウザーのシェア、IEの過半数割れは時間の問題か

私は違う見方をしていて、IEのシェア下落は下げ止まるんじゃないかと思っている。
MicrosoftがIEをOSに含めるのを止めない限りは。

あと案外Firefoxが伸び悩むような気も。
確かにAdd-On入れると凄く便利になるが、そういう使い方はコアユーザしかやらないんじゃないかと。

2009/02/01

Direct3D on VMWARE

「先輩が記事書いてくれないので 僕さびしいっす」と,某後輩が泣きついてきたわけではないが久しぶりに更新

まぁ,何をしていたのかというと某ネットゲームをVMでうごかしていたり,ニコニコ動画の再生数で勝負してたり。

まぁVMの方は情報整理もかねて ここにメモ



  VMWARE Server だと動かないけど Workstation なら動く。

なんとなく不具合
・解像度が 1024x768 以外にすると ブルースクリーン

・ウインドウモードとフルスクリーンを切り替える(ALT+Return)と ブルスクリーン

・Windows7Betaだと 起動途中で固まる

とか。まぁ 今使えてるからいいんだけど,やっつけにも(ry





2009/01/30

DemoHelper

DemoHelper

画面に直接いろいろ描ける。

インターネットのしくみ

  ∧_∧
  (  ・ω・)
_(__つ/ ̄ ̄ ̄/
   \/     /
     ̄ ̄ ̄\  (エロ画像)  ( ZIP )  ( exe )    (個人情報)
          \┗(^o^ )┛┗(^o^ )┛┗(^o^ )┛  ┗( ^o^)┛
            \┏┗     ┏┗     ┏┗       ┛┓
              ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

2009/01/28

Sparklines for Excel

Sparklines for Excel

Excelのセルの中にグラフを書くことができる。
こういうちょっとしたグラフをspark lineと言うらしい。キーワードを知ってるのと知らないので検索効率が全然違う(´・ω・`)

2009/01/27

dig . NS @yournameserver

dig . NS @yournameserver

dig . NS @yournameserverが、レスポンスを返すかどうかチェックしてくれる。
このタイプのCAPTCHA初めて見たな。

Storage Headed for Trouble

Storage Headed for Trouble by Henry Newman

ハードディスクの進化が他のデバイスについていっていない事を見える化した素晴らしすぎる資料。
ただ、鵜呑みにするには怖すぎる気もしたり。Relative bandwidth per GBとか特に…。実際に受けた有識者の反論も載せて欲しかった(´・ω・`)

新しい技術を導入しようとするときって、こういった「周囲を説得するためのデータの裏付け」を探すのが結構大変。仮想化技術を社内で初めて導入しようとしたことがあったけど、電気代から物理デバイスのタイムオーダから削減コストまで調べてかなり大変だった。自分の頭の中ではわかっていても、資料がないと人には伝わらないですから…。だからこういう資料は常日頃からストックするように心がけてる。

拡張子ごとにファイルのアイコンを変更できるフリーソフト

Windows Vista/XP/2000などで拡張子ごとにファイルのアイコンを変更できるフリーソフト「ファイルの種類に関連づけられたアイコンを変更」 @ Gigazine

2009/01/25

Achilles : Man in The Middle(2)

Achilles

Parosと同じく、Webの内容を改竄…じゃなくて、編集できるソフト。こちらはWindowsでも使えるっぽい。

参考:Paros

Niktro

Niktro

フリーなWeb用セキュリティ診断ツール。

2009/01/24

TRACE

WWWサーバのTRACEがONになっていると、セキュリティ上良くないらしい。
ONになっているか確認。

$ telnet localhost 80
Trying ::1...
Connected to localhost.localdomain (::1).
Escape character is '^]'.
OPTIONS * HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Date: Sun, 04 Jan 2009 22:20:08 GMT
Server: Apache/2.2.3 (CentOS)
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8

apacheを設定しなおした(/etc/httpd/conf/httpd.conf)。

TraceEnable Off


参考:CROSS-SITE TRACING

「 2 」か「 9 」で割ってみる

「 2 」か「 9 」で割ってみる

なるほどねぇ…。

2009/01/22

Paros : Man in The Middle(1)

Paros

proxyとして動作して、Webの内容をhookして改ざんする事…、もとい、編集する事ができるらしい。

参考:Achilles

2009/01/21

Windows Messanger 4.7のログイン履歴を消す方法

コンパネから「ユーザーアカウント」→「ユーザーアカウント」→対象アカウントを選択→「ネットワークパスワードを管理する」→Passport関連を削除

2009/01/19

ワンタイムパスワードは何のためにあるのか

ワンタイムパスワードは何のためにあるのか @ 高木浩光@自宅の日記

ネットサーフしていてふと読んだコラム。
素晴らしい分析だ。
確かに有効性についてはかなり疑問があるなぁ…。

2009/01/15

LGPL License Option Added to Qt

LGPL License Option Added to Qt

Qtのライセンス形態にLGPLが追加されたようです。
ktkr!!
これでソースを公開せずにただで開発ができます。

CSS SpriteでWeb高速化

CSS Spriteを活用しよう

複数の画像を一つにまとめて高速化を図る方法らしい。当たり前と言えば当たり前なんだが、Webでこの発想はなかったなぁ…。

2009/01/14

Quividi

Quividiという会社がVidiReportsという顔認識ソフトウェアを開発している。こいつの凄いところは、動画から、カメラの方向を見た人間の数見ていた時間を取得してくれることだ。何とも面白そうだ。評価版を用意してくれているようなので、ちょっと見てみる事にした。
評価版を手に入れる手順は、Webからメールアドレスを入力した後、送られて来るメールに書かれた専用URLにアクセスすればいいらしい。よくあるやつだ。
入力してみた。数分待つとメールが届いた。

Sir,
I thank you for your interest in Quividi’s audience measurement solution

Our evaluation kit is aimed at professionals in the field of digital signage, new media and advertising. Although I enjoyed your website, I am afraid that there doesn't appear to be a significant overlap between your activities and our target business areas. If you believe our assessment is inaccurate, please state your business case in more detail and we will gladly reconsider your request.


この野郎…。
まぁ、正しい推察だけどw

スケジュール管理ソフト「Sunbird」からGoogleカレンダーを更新する方法

スケジュール管理ソフト「Sunbird」からGoogleカレンダーを更新する方法

使える色数が増えるのが地味に嬉しい。

2009/01/13

dynamic_cast, throw, typeid don't work with shared libraries

dynamic_cast, throw, typeid don't work with shared libraries

Qtにはこのへんを解決するMeta Object Systemが用意されている。

テキストリンク

とある先輩のブログはやたらとttp://を多用する。URLをコピペするのが面倒でしょうがないので、Firefoxにテキストリンクをインストールした。

2009/01/11

医療健康電子記録ソフトvxVistA

医療健康電子記録ソフトのvxVistAがオープンソース化

MRTGでYAMAHA RT57i/RT58iの転送量を監視

仲間内でVPNを作るため、コツコツ準備をし始めた。
転送量が爆発する可能性があるが、プロバイダの規制が厳しいので転送量を監視するためMRTGをインストールした。

# yum install mrtg


CentOS 5に用意してるMRTGパッケージはcronの追加とかも自動でしてくれるみたいだ。便利じゃのう。

続いて、転送量を見張る設定をMRTGに追加。
ルータはYAMAHAのRT57iを使っている。

問題はRT57iはエントランスモデルなので、SNMPが動いてない。そこで、ルータにtelnetして転送量を取得するpythonスクリプトを作った。(HOSTとPASSWORDはルータのものに書き換えてください)
#!/usr/bin/python

import sys
import telnetlib
import re

HOST = "10.10.11.1"
PASSWORD = ""

tn = telnetlib.Telnet(HOST)
tn.read_until("Password: ")
tn.write(PASSWORD + "\n")
tn.write("console character ascii\n")
tn.write("show status lan2\n")
tn.write("show environment\n")
tn.write("exit\n")

buf = tn.read_all()

print re.search(r"Received:.*\((\d*) octets\)", buf).group(1)
print re.search(r"Transmitted:.*\((\d*) octets\)", buf).group(1)
print re.search(r"Elapsed time from boot: (.+)", buf).group(1)
print HOST

これを、MRTGから呼び出す。

# vim /etc/mrtg/mrtg.cfg



### RT57i ####
Target[rt57i]: `/usr/local/bin/rt57i.py`
MaxBytes[rt57i]: 1250000
Options[rt57i]: growright, integer
kilo[rt57i]: 1024
YLegend[rt57i]: Byte/sec
ShortLegend[rt57i]: byte/sec
LegendI[rt57i]: received
LegendO[rt57i]: transmitted
Title[rt57i]: Traffic Analysis for RT57i
PageTop[rt57i]: <h1>YAMAHA RT57i</h1>

pythonって、telnetプロトコルを使うようなライブラリすら標準で用意されているのは素晴らしすぎる。

参考:RT57i/外部の監視スクリプト/Python telnetlib/おまかせブログ

追記:RT58iでも上記のスクリプトは使えるようだ。

パッケージに含まれるファイルのリスト

インストール済みパッケージに含まれるファイルリストを表示する方法。

# rpm -ql パッケージ名

インストール後に改変されたファイルをリストアップする方法

インストール後に改変されたファイルをリストアップする方法。

tarballからじゃなくてパッケージを使えばこの辺が便利だよな。

2009/01/07

Windows デスクトップ サーチ

Windows デスクトップ サーチのダウンロード先を見つけるのにえらい苦労したのでメモ。
MicrosoftはLAN内検索システムでgoogleに勝つつもりはないんでしょうか…

経済産業省 下請け適正取引のためのガイドライン

http://www.meti.go.jp/policy/it_policy/softseibi/index.html

どういう契約を結べばいいか、開発形態ごとに紹介してくれてるっぽい。
時間ができたら読むか。