2009年07月31日

【IT用語】返報性の原理

人は誰かに「借り」を作ると何らかの形でそれを「返そう」とする、という原理。

G○○gleが個人情報とか著作権的に割ときわどいサービスを出しても「まぁ、普段は検索でお世話になってるし」という気持ちで許せてしまったりしたら、それはこの原理が働いているかもしれない。

逆にMicros○ftがちょっとしくじったことをしてしまった時に「こっちは某OSやら某Officeソフトに○万円以上払ってるってのに、まったくあの会社は……」という気持ちになったりしたら、この原理が全く働いていないと思われるもの。

ところで、「人に親切にすると相手が何らかの行動によってそれを返してくれる」ということは頻繁に体験しているのだけど、同時に「人にお金を貸してもさっぱり返って来ない」ということにも頻繁に出会うのは何故だろう。

たった1つのタイプミス

こんな記事を見かけた。

「IE」に対する最新攻撃の原因、たった1つのタイプミス--MSが認める
http://japan.cnet.com/news/sec/story/0,2000056024,20397505,00.htm

こんなコードだったそうな。

__int64 cbSize;
hr = pStream->Read((void*) &cbSize, sizeof(cbSize), NULL);
BYTE *pbArray;
HRESULT hr = SafeArrayAccessData(psa, reinterpret_cast(&pbArray));
hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);

さて、問題があるのはどこでしょう?
回答は元記事参照。

個人的には、タイプミスというよりは、行ごとコピペして一部を直す感じで書いて、その時に頭が働いてなくて落とし忘れた、というプロセスを思いました。自分ならそんな感じで生み出しそう。

ていうか、これATLのバグですか。それっていろいろヤバい気が……


C++を書いてる時って、こういうバグが出る可能性に対しても(主にテストの時に)頭を働かせないといけなくて疲れます。まぁ、やりたい放題できる爽快感というのも同時にありますが。

今度、職場にC++を導入しようと画策しているので、その時は気をつけよう。気を付けても出るタイプのバグな気もするけど、気をつけよう。

2009年07月29日

【IT用語】www.ie7.com

見ての通り、とある有名なブラウザに関するサイトのドメイン。

と思って行ってみると、「やられた」という気持ちにさせてくれる素敵なサイトである。

ie8でもやってくれないかなぁと思って期待していたけど、残念ながら、そういうページは作られなかったもの。

こうなったら、ie9は自分でやるしかないと意気込んでドメイン検索をしてみたところ、ie9.comどころか10も11も既に他の会社が取得していることが判明して、ドメイン取得競争って厳しいなぁという気持ちにさせてくれたもの。




【参考URL】
http://www.ie7.com/
「やられた」と思いたい人はこちら。
当時は割と有名だったので既に知ってるかもしれませんが。

JavaのBooleanクラスの==比較

今日もまた、割とどうでも良いJavaのお話


JavaのBooleanクラスの==比較
http://www.mwsoft.jp/programming/java/boolean/java_lang_boolean_value_of.html


今回の記事は、
1:   Boolean b = new Boolean[10000];
2: for(int i = 0; i < 10000; i++) {
3: b[i] = new Boolean[true];
4; }

とした場合は2〜4行目の間で152KBほどメモリを使用する

1:    Boolean b = new Boolean[10000];
2: for(int i = 0; i < 10000; i++) {
3: b[i] = true;
4: }

とした場合は、2〜4行目の間で1バイトもメモリは消費しない。

みたいなお話です。

2009年07月28日

【IT用語】DRY

Don't repeat yourselfの略。

同じことを2度もするな、というような意味。

同じものを2つも置くな、というような意味。

同じようなコードを何箇所も書くなというような意味。

同じような資料を何枚も作るなというような意味。

ああ、今日も車輪の再発明をしたさ。でも、仕方ないんだ。既存かどうか調べる為の十分な時間がなかったんだ。

ああ、今日も同じコードをコピペで他のソースに貼り付けたさ。でも、仕方ないんだ。DRYにするにはファイル構成を変える必要があったし、それを許可してもらうのはとても面倒だったんだ。

ああ、今日も似たようなドキュメントを複数書いたさ。でも、仕方ないんだ。それが納品物一覧の中に入っているのだから。

プライドを低く保つ為の7つの方法

私はここ数年、自営業者としてプログラマをやっています。

自営業で長くやっていく為には、最低限の「プライド」と言いますか、独力で生きてるんだぞという「気概」を持つことがとても大切です。

しかし、どんな世界でもそうだと思いますが、行き過ぎたプライド、不要なほど大きくなり過ぎた自尊心は、利益的にも人間関係的にも邪魔ものにしかなりません。

無いと困るけど、大きくなり過ぎるとそれも困る。プライドというのは、そういう扱い辛いものだと認識しています。

私はプライドが無駄に高い方なので、なんとかそれを低く抑えようと手を焼いています。手を尽くして、ようやく今のような状況なわけです。ふぅー。

今回は私がプライドを低く保つ為に実践している(たまに忘れてるけど)ことを挙げてみたいと思います。試行錯誤してきた中で効果があったと感じている手法なので、無為なものではないと思われます。

尚、この記事は、「プライドが高い」の対義語を「謙虚」であると仮定して記述しています。


続きを読む

2009年07月25日

【Commons紹介】ArrayIntListの速度

久々にCommons紹介。

Jakarta CommonsのPrimitivesには、ArrayIntListというプリミティブ型のintをそのまま扱えるListがいる。

続きを読む

Integer.reverse( int )でビット演算を学ぶ

予告していたInteger.reverseです。DVD見ながら書いてたら、4時を過ぎてしまった。明日(というか今日)も用事があるのに。恐ろしい。。。


Integer.reverse( int ) の処理を追ってみる
http://www.mwsoft.jp/programming/java/java_lang_integer_reverse.html
若干、寝ぼけて書いてます。間違いがあった場合は、見つけ次第直していきます。


処理事態は、こんな感じの子です。
i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555;
i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333;
i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f;
i = (i << 24) | ((i & 0xff00) << 8) | ((i >>> 8) & 0xff00) | (i >>> 24);

面白いかなぁと思ったのですが、bitCountとかなり内容が被ってました。次回に期待。


ところで、検証コードを書いている時に間違って
for( int i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++ )
って書いて無限ループを発生させてみた。

intはInteger.MAX_VALUEを超える値になろうとすると、溢れてマイナスになるので永遠に条件を満たさないという、こっそり混入して他人を貶める目的で使えそうな記述だなぁと思いました。

2009年07月24日

【IT用語】会津若松市

福島県に住む人か、白虎隊のファンでもなければ、一見、何も関わることのないように思える日本の都市の1つ。

ところが、全国の自治体に先駆けて市の業務に「OpenOffice」を導入したり、使用した際に溜まったノウハウを冊子にして「クリエイティブ・コモンズ」で配布したり、おまけにその冊子の表紙が明らかにオライリー本のパクりだったりと、エンジニアの心をえぐるような攻撃を矢継ぎ早に繰り出す、侮れない都市である。


参考URL(表紙を見て吹いたら負け)
http://itpro.nikkeibp.co.jp/article/NEWS/20090713/333747/

プログラマのクラスチェンジ表(イメージ図1)

先日書いた、プログラマのクラスチェンジ表関連で、知り合いにバッタもんっぽいイメージで絵を描いてと頼んだら、とてもバッタもんっぽい絵が返ってきた。

「それはクラスチェンジじゃない」という苦情は受け付けません。

続きを読む

日記的なもの(2009/07/23)

今日、清純派でググったら、当ブログが1番目に表示されていた。先日までは4〜7位くらい、長澤まさみとエマ・ワトソンのニュース記事の間を行ったり来たりしていたのですが、苦節……えーと、たぶん3ヶ月くらい、ようやく長澤まさみに勝てました。めでたい。

仕事から帰宅後、Integerの中身を見つつ、とりあえず次はreverseかなぁと思って記事を書き始める。でも、今日中に上がりそうにない為、中断。

続きを読む

2009年07月23日

intを10進数の文字列に直すロジック

今日はInteger.toString( int )を追いかけてみた。

見ての通り、intを文字列にコンバートする機能。とてもよく使う機能だけど、これまで内部でどうやって文字列に変換しているのか、意識したことがなかった。


Integer.toString( i ) に見る数値から文字列への変換
http://www.mwsoft.jp/programming/java/java_lang_integer_to_string.html


ソース自体が長いので、説明がちょっと間延びした感じになってしまった。

面白いところは、
(i * 52429) >>> 19 == i / 10
なところとか。

2009年07月21日

Ruby VS Pythonのロゴを作ってみた

昨日、RubyとPythonの実行速度の比較をしてみた。今日はなんとなくそのイメージをロゴ画像にしてみた。



どこかで見たデザインとか思った人は気のせいです。たぶん。

2009年07月17日

-2147483648 * -1 == -2147483648 は true

本日は、Integerから僅かにそれて、java.lang.Math の abs について。

abs は名前の通り絶対値を取る子ですが、Integer.MIN_VALUE(-2147483648)を引数に取った際の動きはどうなるのだろう、というお話です。

Math.abs( Integer.MIN_VALUE )について
http://www.mwsoft.jp/programming/java/java_lang_math_abs_min_value.html

ビットの世界はいろいろとイレギュラーなことがあって楽しいです。浮動小数点数の誤差とかはあんまり楽しくないですが。

intの最も左側の1のビット以外を0にする

昨日は「lowest」、一番右側だったので、今日は左側、「highest」を扱ってみました。


intの最も左側の1のビット以外を0にする
http://www.mwsoft.jp/programming/java/java_lang_integer_highest_one_bit.html


今回のお題は、こんな感じです。
i |= (i >> 1);
i |= (i >> 2);
i |= (i >> 4);
i |= (i >> 8);
i |= (i >> 16);

毎日見てると、徐々にビットが頭の中で動くようになってきた気がします。でも、1週間遠ざかればまた固まってしまうのだろうなぁ。

記事中で無駄にピコーンとか言ってるのは、それっぽい動画を見ながら記事を書いていたせいです。

【1日1用語】OSは2つも要らない

GoogleがChrome OSを発表したことを受けて、2009/07/14、MicrosoftのCEOであるスティーブ・バルマー氏が発してくれた言葉。

Googleは既にAndroidというOSを提供しており、この発言は、そこにChromeという別アーキテクチャのOSを被せてくることに対して批判的な意見を述べたものである。

聞いている側としては、「確かにそうかもしれませんけどね」という気持ちを抱くと共に、「ところで御社は?」という問いかけを心の中に思わざるを得ない、たいへん破壊力のある言葉である。

2009年07月16日

10万PV計画、中間報告

先月、mwsoft.jpのPVを今年中に10万まで上げてみようと書きました。その中間報告を。

続きを読む

intの最も右側の1のビット以外を0にする

昨日の流れに合わせて、今日は「Integer.lowestOneBit」のロジックの説明。「i & -i」という割と有名なヤツです。

http://www.mwsoft.jp/programming/java/java_lang_integer_lowest_one_bit.html

内容的には基本的な話なのですが、それを文字にして説明しようとすると途端に言葉に詰まりました。言葉って難しい。

2009年07月15日

Javaのビット演算のお勉強

JavaのInteger.bitCountのロジックを追いかけていたら、いつの間にか2時を過ぎていました。

そして気が付いたら、(自分にしては)割とちゃんとした解説ページが出来上がっていました。


intの1のビットの数を数えるロジック
http://www.mwsoft.jp/programming/java/java_lang_integer_bit_count.html


お題になっているロジックは、こんな感じのものです。

  i = i - ((i >>> 1) & 0x55555555);
  i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
  i = (i + (i >>> 4)) & 0x0f0f0f0f;
  i = i + (i >>> 8);
  i = i + (i >>> 16);
  return i & 0x3f;

この処理の意味がなかなか理解できず、でも、分かってしまえばとても簡単だということに気づき、長時間悩んでしまった自分に対して「俺って阿呆だ……」と深い悲しみに包まれたような解説ページです。

2009年07月14日

【1日1Java】シフト演算子の説明

Integerクラスのビット関連の中身を徐々に漁ってみたいので、
下準備としてシフト演算子に関するお話

続きを読む

2009年07月13日

JavaScriptによるソースの色分け

「コードの色分けをしてくれるJavaScriptライブラリ」について。前から導入しようと思っていたのだけど、どっちにするか悩んだまま放置してました。


悩んでいたうちの1つは「highlight.js」。
手っ取り早く取り付けられて、ブログにも挿入可能。
BSDライセンス。

highlight.jsを使ったサンプル
http://www.mwsoft.jp/programming/javascript/highlight_js.html

スタイルもいろいろ用意されていて、使い易い。
製作者がどこの国の人か分からない。
文字からするとロシアかそっちの方だろうか。


もう1つは「google-code-prettify
名前の通り、Google codeの中の1プロジェクト。
Apache License 2.0。

google-code-prettifyを使ったサンプル
http://www.mwsoft.jp/programming/javascript/google_code_prettify.html


どちらも数行記述するだけで色分けができるので、非常に簡単に使える。

実行速度はブラウザや負荷によってバラつきが多いが、下記のサンプルでは、highlight.jsの方が早かった。

※注意事項
下記URLをクリックする場合、とりあえず1000件で試してみて、大丈夫そうだったら3000件をお試しください。
Firefox3.5だとやけに遅かったです。Chrome使うとハエーって言うことになります。スペックが微妙なIE6マシンを使っている方は、レスポンスが返ってくるか保証しません。

【重い】1000行のJavaを色づけする【低スペックマシンでの閲覧危険】
highlight.js
http://www.mwsoft.jp/programming/javascript/highlight_js_1000.html
google_code_prettify
http://www.mwsoft.jp/programming/javascript/google_code_prettify_1000.html

【重い】3000行のJavaを色づけする【低スペックマシンでの閲覧危険】
highlight.js
http://www.mwsoft.jp/programming/javascript/highlight_js_3000.html
google_code_prettify
http://www.mwsoft.jp/programming/javascript/google_code_prettify_3000.html


調べて見ると、これ以外にも「syntaxhighlighter」とか「Chili」とかいろいろある様子。
全部は試せないので、しばらくはブログでgoogle-code-prettifyを、HTMLを書くときはhighlight.jsを使ってみようかと思う。


【参考にしたサイト】
あなたのソースコードを彩る、Syntax Highlighterまとめ - Blog.37to.net
http://blog.37to.net/2007/06/syntax_highlighter/

ブログでコードを見やすく highlight.jsが手っ取り早い - Non-programmer's Ruby in Pocket
http://weed.cocolog-nifty.com/wzero3es/2009/06/highlightjs-6bc.html

プログラムのコードに色を付ける「google-code-prettify」 - JavaScript Library Archive
http://javascript.webcreativepark.net/library/google-code-prettify

【1日1用語】ソースコードの色分け

ソースコードが人間の目で読みやすくなるように、コメント行や予約語の色を変えてくれる機能。

IDEだけでなく、多くのエディタにもこの機能は付いているので、最近は色分けしていないコードを見る機会もすっかり減ってしまった気がするもの。

ただ、今でもごく稀に、例えばサーバマシンを直接触る時なんかに、色分けしてくれるようなエディタが入ってない状況に出くわすことがある。

そんな時、あまり色分けされたコードに親しみ過ぎていると、ソースを開いた時に単色の文字が目の前に広がっただけで、読む気が失せるような感覚に陥ってしまうことがあるけど、それって堕落だよなぁと思われるもの。

【1日1Java】Integer.signumでビットの勉強

JavaのInteger.signumで使用されているロジックを見ながらビット演算の勉強

続きを読む

2009年07月12日

【1日1Commons】CharEncodingクラスを使ってみる

CharEncodingは指定文字列が有効なエンコード文字列か判定する機能を持つ


続きを読む

日記的なもの(2009/07/11)

朝、コードの色替えをやってくれるJavaScriptのライブラリを調査。試しにGoogleのヤツを今日のJavaの記事で使ってみる。色がイマイチなので、CSSの調整が必要そう。

うちの環境では古いマシンでも軽快に動いているので大丈夫かなとは思うのですが、もし重いと感じることがあったらご連絡ください。

続きを読む

【1日1用語】黒魔術

高位のロジックを組み合わせたり、言語仕様の隙を突くような記述をすることで、パッと見では何が起こるか分からないコードを作ること。

じっくり見ても結果が予想できないような再帰やメタプロが複雑に絡み合ったコードや、一般的な感覚で予想するとものの見事に裏切られるような理解しがたい結果が返ってくるものもある。

開発現場では白魔術(高度ではあるけど知識があれば逆に読みやすいような記述:筆者命名)ですら忌み嫌われる傾向があるので、「いわんや黒魔術をや」という感じの扱いを受けている。

【1日1Commons】CharUtils.toIntValueでcharをintに

CharUtils.toIntValueという、あまり使う機会がなさそうなメソッドの実行例


続きを読む

【1日1Java】Integerのビット操作関連メソッド

Integerクラスにビット操作関連メソッドがいくつかいたので使ってみる


続きを読む

2009年07月11日

【1日1用語】DoS攻撃

相手のサーバが処理しきれないような大量のリクエストを同時発信して、対象サーバを動作不能状態に陥れること。

代表的なDoS攻撃の1つに、2009年のWBC決勝戦が挙げられる。延長戦にもつれたところで発信されたイチロー選手のタイムリーヒット攻撃(通称:劇場型DoS攻撃:筆者命名)により、2ch等の日本国内サービスがいくつも動作不能に陥った。

DoS攻撃は小規模のサイトが相手であれば、数十人の人間が示し合わせて「よーい、どんっ、F5! F5! F5! 」と言うだけで実現できてしまう、特にエンジニアとしてのスキルがなくても実行可能な攻撃である。(何の防御もなしにやったら、後日、警察の方とご対面することになりますが)

その為、DoS攻撃で陥落させるのは矜持に反するとして、使用を禁じているクラッカーも多い(んじゃないかと勝手に思っている)。

【1日1Rails】script/generate その2

コントローラの自動生成
script/generate controller [action]


続きを読む

2009年07月10日

【1日1Commons】文字をユニコードエスケープする

CharUilts.unicodeEscapedで文字をユニコードエスケープする

続きを読む

【1日1Java】2進数、8進数、16進数への変換

intから2進数、8進数、16進数の文字列に変換する
逆に文字列からintに戻す

続きを読む

プロフィールを少し書き換えました

最近、選挙カーがよく走ってるので、なんとなくプロフィールに政治信条も加えておきました。海外のSNSとかだと、けっこう入ってるの見かけた気がする。

加えた内容はこんな感じ。

「初等教育にPythonを取り入れる政党が現れたら支持します」

もう、間違いなく支持ですね。手弁当で応援行きますね。ライバル候補者のネガティブ情報を自動で掲示板に書き込むソフト……は作ったら怒られるからやらない(実際にありそうで嫌だ)。


選挙活動は「ついったー」と「にちゃんねる」でやれば良いのにとかたまに思います。街頭演説はうるさいだけで相手の中身とか良く分からないんで。

大量の質問をどうさばくかが見れて、さらにログが残って後からでも閲覧できて、あと動画だと見るの時間かかるからテキストで見れるものがあれば、少しは分かるようになるんじゃないかなぁと。


イメージ的にはこんな感じ。

【港区第1区】候補者の○○だけど何か質問ある?【○○党】

1 :1 ◆SKD398/GA:2009/07/09(木) 23:09:18 SJLFDS*=)
いちおう、本人
でも、タイピング苦手だから打ってるのは秘書

2 : 無党派さん:2009/07/09(木) 23:09:58 SDK+JDSLF
2ゲト ズサー
   ∧∧   (⌒
 ⊂(゚Д゚⊂⌒つ(≡
    ズサー (⌒
3 : 無党派さん:2009/07/09(木) 23:11:37 CD)#LKFJS
人生に疲れました

4 : 1 ◆SKD398/GA :2009/07/09(木) 23:13:37 CD)#LKFJS
>>3
私は選挙活動に疲れたよ

5 : 無党派さん:2009/07/09(木) 23:15:37 LKkdjsI
本当に本人だというソース出せ

6 : 1 ◆SKD398/GA :2009/07/09(木) 23:17:12 CD)#LKFJS
書いてるとこを録画してる
後でまとめてうpするから、それ見て

7 : 無党派さん:2009/07/09(木) 23:18:39 FSJufsl#
>>1
秘書って。議員なるならタイピングくらいできろよww

8 : 1 ◆SKD398/GA :2009/07/09(木) 23:19:52 CD)#LKFJS
いや、いちおう最低限見ないで打つとこまではできるんだけど、
秘書の方が数段速くて

こういう時は自分で打った方がいいんかな?

9 : 無党派さん:2009/07/09(木) 23:18:39 CD)#LKFJS
>>8
脚本家とか雇わずに自分の言葉使ってるならいいんでね?

10 : 無党派さん:2009/07/09(木) 23:18:42 kjfdsEJF
そんなことより、ちょいと聞いてくれよ、>>1よ。
スレッドとはあんまり関係ないんだけどさ。
昨日、近所に選挙に行ったんです。選挙。
そしたらなんか人がめちゃくちゃいっぱいで並んでるんです。
で、よく見たらなんか垂れ幕下がってて、「今の時間は2票分でカウント」とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、2票分如きで普段来てない選挙に来てんじゃねーよ、ボケが。
2票だよ、2票。
なんか親子連れとかもいるし。一家4人で選挙か。おめでてーな。
よーしパパ比例区も入れちゃうぞー、とか言ってるの。もう見てらんない。

【1日1用語】コミット(データベース)

DB上のデータをいじった後に、処理を確定すること。

ターミナルから実行している時は「commit;」と書いてリターンキーを押すことでそれまで行っていた処理が確定される。(全部のDBがそうというわけではないけど)

手動でデータ処理をしていたエンジニアが、コミットした後にミスったことに気づいて、「しまった」とか「うげっ」とか「あうあうあー」といった奇声を発する姿は、いとおかし。

「やばっ、ロールバックを……えっ、嘘、MySQLってオートコミットなの!?」という言葉を発するも、いとつきづきし。

隣のエンジニアが落ち着いた声で「あー、バックアップ取ってあるから大丈夫。すぐ戻すよ」と言ったりすると、傍観者的にはちょっとだけテンション下がって、わろし。

【1日1Rails】script/generate その1

script/generate
とりあえずコマンド自体の引数について


続きを読む

2009年07月09日

【1日1Commons】CharUiltsで文字の種別判定

org.apache.commons.lang.CharUtils
isAsciiAlpha, isAsciiAlphaUpper, isAsciiControl, etc


続きを読む

【1日1Java】クラス名を取得する

java.lang.Class
getName, getCanonicalName, getSimpleName

続きを読む

【1日1用語】VACUUM

ポスグレが入ったサーバの管理をしていた人にとっては、ちょっとしたトラウマになっているかもしれない言葉。FULLが付くと威力が増すらしい。

PostgreSQLはDELETEしても情報が物理的には削除されずにそのまま残っている。削除されたレコードを物理的に消去する為のコマンドが、この「VACUUM」である。

昔はVACUUMを自動実行する機能がなかったので(中途半端に自動実行を組み込むと、いらんタイミングで実行しやがってと怒られそうだったからかもしれない)、マニュアルに「少なくとも毎晩、定期的にVACUUMを実行することを推奨します」とアナウンスされていたりして、「このDBは手動でなんかしなきゃ運用できんのか」と一部のユーザから不評を買っていたりしたもの。

バージョン8.1から、めでたく自動実行機能が追加され、だいぶ運用的にも楽になったという噂もあったりなかったりなかったり。

【1日1Rails】小数点第何位で丸める

Ruby 1.8.7
Rails 2.3.2
小数点第何位かを指定して丸める


続きを読む

【1日1Commons】BooleanUtilsのxor

// JRE 1.6.0_07
// Commons Lang 2.4
// org.apache.commons.lang.BooleanUtils.xor
// boolean配列の排他的論理和
// tag boolean xor


続きを読む

【1日1Java】JVMを強制終了する

// JRE 1.6.0_07
// java.lang.System
// 処理を強制的に終了する
// tag exit halt


続きを読む

2009年07月08日

【ニュース系】日本はまだIE天国

ブラウザのシェアについて、こんな記事が出てました。

国内ブラウザシェアはIEが合計7割以上
http://internet.watch.impress.co.jp/docs/news/20090707_300476.html

IEが大半を占め、Firefoxで10%ちょい。Safariも3.5%くらいだそうです。Sleipnirが4%近くあるのが凄い。やりますね、フェンリル。


でも、当サイトは管理人が理性的でないレベルで1つのブラウザを推していたり、あるブラウザを目の敵にしているお陰もあってか(いや、こういう態度は良くないと思ってはいるのですが)、最近、FirefoxのアクセスがIEを抜きました。Firefox3.5のリクエストも既に15%くらいあります。

ちなみにこれが昨日のこのブログのブラウザ順位。

1, Firefox3 : 25%
2. Safari5.3 : 16%
3, MSIE6 : 15%
4, Firefox3.5 : 14%
5, MSIE7 : 10%
6, MSIE8 : 4%
7, Netscape5 : 3%
8, Safari5.25 : 2%
9, Opera9.64 : 2%
10, Safari0 : 2%

意外とSafariも多いです。アクセス解析の表記上はSafari5.3とありますが、Safari4のことです。たぶん。

うちのSafari4で見たユーザエージェントはこんな感じ
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17

表記内にVersion/4.0という記述があってそこを取るべきなんだろうけど、このブログのアクセス解析ではその後のSafari/530.17が取られてしまっている様子。

自分のUAをあっさり確認したい時はこちらが便利
http://www.mwsoft.jp/programming/webtools/request_info.html


==================================================
【2009/07/01追記】
アクセス解析にChromeからのリクエストが存在しないことに気づく。で、Chromeのユーザエージェントを確認してみると、こんな感じ。

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5

これもSafari5.3として認識されていそう。だから高いのか。
==================================================

しかしFirefoxの方が好きなのに、最近、GeckoよりもWebKitの方が好感度が上がりつつあります。ついでにShiretokoさんの動きが今ひとつもっさりしてる部分があって、次のChrome辺りで心変わりしないか心配です。

Firefox = 開発用
Chrome = 閲覧用
という使い方をし始めそうな気もします。最近、よく両方開いててニュース閲覧はChrome使ってたりするし。

【1日1用語】ディスクフル

ディスク容量がいっぱいになって、書き込みがエラーになったりすること。

運用中のサーバでこの現象が起こったりすると、管理者は上司から「監視甘いんじゃない?」とにらまれたり、誰もいない会議室に連れて行かれて「顔だけはやめてくださいっ」と言わなければいけなくなったりする。比較的イージーなミスに分類される障害である。

でも、ふとした油断から発生するせいか、どこの会社で働いてた時もけっこう頻繁に見かけた気がするのは気のせいだろうか。きっと気のせいだ。

たくさんの人が共有で使っている社内ファイルサーバなんかは、数百ギガバイトの容量があっても、またどれだけ頻繁に「いらないものはすぐ消すようにしましょう」とアナウンスしても、なんでかあっという間にディスクフルになったりするもの。

自宅のハードディスクなんかも、買ったときは「絶対使い切れないだろ」とか思っていた容量が、いつの間にか残り僅かになっていた驚くことがあるもの。

2009年07月07日

【1日1Rails】script/destroy

Ruby 1.8.7
Rails 2.3.2
script/destroyについて


続きを読む

【1日1Commons】booleanをintやStringに変換

// JRE 1.6.0_07
// Commons Lang 2.4
// Booleanを数字に変換する
// org.apache.commons.lang.BooleanUtils
// tag boolean toInteger toString


続きを読む

【1日1Java】ミリ秒やナノ秒を取得

// JRE 1.6.0_07
// java.lang.System
// currentTimeMillis, nanoTime
// System.out.printlnやSystem.err.println
// tag ミリ秒 マイクロ秒 ナノ秒


続きを読む

【1日1用語】ヴィルトの法則

「ソフトウェアは、ハードウェアが高速化するより急速に低速化する」という誠にもっともな格言。


「プログラマは、ハードウェアが高速化するより急速に堕落する」と言っても良いかもしれないもの。


同じ意味かもしれないが「プログラマは、十分な速さで動くなら、手間のかかる速いソースよりも簡略で遅いソースを選ぶ」と言った方が若干心象が良いかもしれないもの。


基本的に人の心は「動いているからいいじゃない」という方向に流れることを示唆する法則なのかもしれないもの。

【1日1Commons】intやStringをbooleanに変換

// JRE 1.6.0_07
// Commons Lang 2.4
// いろんなものをBooleanに変換する
// org.apache.commons.lang.BooleanUtils.toBoolean
// tag boolean


続きを読む

【1日1Java】プリミティブ型一覧

// JRE 1.6.0_07
// プリミティブ型一覧
// tag primitive data type


続きを読む

【1日1Rails】script/dbconsole

Ruby 1.8.7
Rails 2.3.2
script/dbconsoleについて

続きを読む

2009年07月06日

雨ニモマケズ

使ワレモセズ
廃止モサレズ
りにゅーあるモサレヌ
丈夫ナ汎用機ニ載リ

ばぐハナク
決シテ止マラズ
イツモシヅカニ動イテイル

一日ニ電気代2400円ト
年ニ2度ノメンテガアリ
アラユル処理ヲ
えらーヲ起コサズニ動カシ
ヨク負荷ニ耐エ
はーどでぃすくモ飛バズ
外注ノPGノ書イタFORTRANノ
多クノこーどガ詰マッテイテ

東ニ業務ノ変更ガアッテモ
技術者ガイナクテ対応サレズ

西ニ予算縮小ガアッテモ
忘レラレタカノヨウニ触レラレズ

南ニオープン化ノ波アッテモ
移行スル予算モナク

北ニFORTAN技術者ガ来テモ
敬遠シテ寄ッテ来ナイ

停電ノ時ハナミダヲナガシ
猛暑ノ夏ハ冷房ニツカリ
ミンナニデカクテ邪魔ト言ワレ
ホメラレモセズ
クニモサレズ

ソウイウしすてむニ
ワタシハナリタイ

【1日1Commons】Booleanからプリミティブなbooleanへ

// JRE 1.6.0_07
// Commons Lang 2.4
// Boolean型を元にtrue/falseを判定する(nullチェック付き)
// org.apache.commons.lang.BooleanUtils
// tag boolean


続きを読む

【1日1Java】標準出力とエラー出力

// JRE 1.6.0_07
// java.lang.System
// System.out.printlnやSystem.err.println
// tag 標準出力 エラー出力


続きを読む

【1日1Rails】script/console

Ruby 1.8.7
Rails 2.3.2
script/consoleについて


続きを読む

2009年07月05日

日記的なもの(2009/07/04)

1日の大半をFirefox3.5の新機能と共に過ごす。ちょっとコンテンツ増えました。

http://www.mwsoft.jp/programming/firefox3_5/

どうでも良い話なんですが、FirefoxってIMEオンにして書くと「ふぃれふぉX」と出てくるんですね。「フィレフォX」。なんかケンタッキーのメニューにありそうな名前だなぁ。

2時過ぎ、さて寝ようかと思った後に、ふと今日のJavaとかCommonsとかをやってなかったことを思い出し、若干ボリュームの少ないソースをさらっと書いて投稿する。

とりあえず、何でも3ヶ月間続ければ、多少はモノになったりするものなんじゃないかと、思うような、思わないような。


以下、普通の日記

【1日1Rails】script/about

Ruby 1.8.7
Rails 2.3.2
script/aboutの実行結果例


続きを読む

【1日1Java】java.lang.Voidがいることを初めて知った

// JRE 1.6.0_07
// java.lang.Void
// Void型なんてあったんだという気持ちになる
// tag void


続きを読む

【1日1Commons】イニシャルを取得

// JRE 1.6.0_07
// Commons Lang 2.4
// イニシャルを抽出する
// org.apache.commons.lang.WordUtils
// tag initial


続きを読む

2009年07月04日

Firefox3.5のaudioタグの使い方

先日のFirefox3.5のaudioタグの記事を拡張してみた
http://www.mwsoft.jp/programming/firefox3_5/audio_test.html


使える属性はだいたい試してみたつもり。先日はできなかった、別音楽の読み直しもできた。

メモリがどう解放されているのか分かってないけど、まぁ、とりあえず動いてるから良しとしよう。


Event系は洗ってないけど、そんなにハマらなそうに見えるので、とりあえず割愛しようかと。


今後に備えてロイヤリティフリーの効果音とか音楽とかが欲しひ。その辺の店に売ってるかな。

Firefox3.5でDrag and Dropイベント

Firefox3.5のドラッグアンドドロップイベントを使ってみた。とりあえず書いたソースとその解説的なもの。

Firefox3.5でDrag&Drop
http://www.mwsoft.jp/programming/firefox3_5/drag_and_drop_test.html

Dropイベントで少しハマりました。dragenterとdragoverを無効にしないと受け取れないとは……


しばらくの間、Firefoxの新機能と戯れようかと思って、こんなページを作ってみた。10個くらい特集しておけば、なんかそれっぽいコンテンツに見えるだろうか。
http://www.mwsoft.jp/programming/firefox3_5/

Ruby on Railsを使ってメリットを感じた瞬間

最近、Railsをガシガシ使ってみて、心根的には「あまり好きになれないな」と感じたわけですが(※素直になれないのではなく、普通にそう思う)、それでもメリットをいくつか感じたので列挙してみました。

※あまりサーバサイドの処理は担当していません。どちらかというと、裏側の処理を書いてました。そういう仕事をしていた人間の所感なので、ちと王道とはズレがあるかも。



requireって書かなくていい
へいへい、無精者ですよ。
デフォルトでいろんなものがインクルードされていて、自前で標準モジュールを呼ぶことが少ないというのは、楽で良いと思います。

日付・時刻の扱いが簡易
元々RubyはDate.parseって書けば、割と空気を読んでくれたりするように、日付処理はかなり簡易ですが、ActiveSupportはそれに輪をかけて便利です。
tomorrowと言えば翌日が出てきたり、next_weekと言えば次週が出てきたりします。

開発途中にDBを変えても損害が少ない
試しにWindows+MySQLで開発したソースをLinux+SQLite3に移しても、特に問題なく。PostgreSQLに移した際も、ActiveRecordを推奨された使い方で(SQLベタ書きとかせずに)使っていれば、差異をほとんど吸収してくれました。
まぁ、途中でDB変えるってことはあまり無いと思いますが、本番環境の選定が決まってない状態で開発スタートしても平気かもしれないってのは、なかなかに興味深いです。

データベースの管理が楽
create文を書くよりgenerateしたmigrationファイルに手を入れる方が数段楽ですし、管理もしやすいです。
あと、DBに関する設定が、必ず決められた場所(config/database.ymlとか)にいるというのもありがたいです。

作業量が減る
script/generateやら、rake db:migrateやら、何かと作業工数を削ってくれる代物が用意されています。
1つ1つの短縮時間は大したものでもないですが、全部足せばけっこうな時間が短縮できます。

RESTで云々する際のコストが限りなく低い
ちょっとしたXMLやJSONを吐き出したい時に、非常に少ないコストで実行できます。
XMLはscaffoldで作った叩き台上で、デフォルトで出力出来るようになっているし、JSONも1行か2行書き変えれば出力されます。

引き継ぎ易い
個人的に、これが一番良いメリットなんじゃないかと思ってます。
Railsで書いたソースは、どの設定ファイルにどんな記述がされているか決まっているし、環境構築もrakeである程度自動生成できます。
オリジナリティ溢れるRubyソースを渡すよりも、Railsで書いたものの方がお互いに共通認識があるので意思疎通がしやすいです。Rails知ってる人の絶対数が少ないということについては、ノーコメント。


もちろん、感じてるデメリットもいくつかあります。

ActiveRecordで大量データ取り扱わせたらやたら重いですし、そもそもRubyの実行速度も芳しくない。C++やJavaなら数秒で終わる処理が数十秒かかったりします。

ちょっと昔のマージソート実行時間比較
http://techtrim.net/2008/01/18_19196.html

それでも、さすがキラーアプリと呼ばれるだけの便利さはあるなぁと、そう思いました。

【1日1Rails】scriptディレクトリのコマンド説明

Ruby 1.8.7
Rails 2.3.2
スクリプトディレクトリのコマンドの機能、用途等


続きを読む

【1日1Commons】ちょっとだけ高機能なキャピタライズ

// JRE 1.6.0_07
// Commons Lang 2.4
// キャピタライズ
// org.apache.commons.lang.WordUtils
// tag capitalize 大文字 小文字


続きを読む

【1日1Java】ZipOutputStreamで圧縮

// JRE 1.6.0_07
// java.util.zip.ZipOutputStream
// ZipOutputStreamクラスを使用してZipファイルの圧縮
// tag zip 


続きを読む

2009年07月03日

Firefox3.5のaudioタグで遊ぶ

人が二日酔いでハァハァしてる間に、気が付けばFirefox3.5が来てました。

この子の新機能で有名なのが、audioとvideoタグの対応かと。うちのサイトでは動画配信なんかをすることはないとして、audioの方はゲーム的なアプリを作る時に使ってみたいところです。

IEはMediaPlayerで音楽再生できるので、ユーザエージェントによってタグを使い分ければ大部分の人が見れる効果音付きサイトが作れそうです。


とりあえず、audioタグを使った簡易なサンプルソースなど。
http://www.mwsoft.jp/programming/firefox3_5/audio_test.html

2009年07月02日

【1日1Rails】YAML形式への変換、デコード

Ruby 1.8.7
Rails 2.3.2
YAMLへの変換、デコード
to_yaml
YAML.load


続きを読む

【1日1Java】ZipInputStreamで解凍

// JRE 1.6.0_07
// java.util.zip.ZipInputStream
// ZipInputStreamクラスを使用してZipファイルの解凍
// tag zip


続きを読む

【1日1Commons】ランダムな文字列を生成する

// JRE 1.6.0_07
// Commons Lang 2.4
// ランダムな文字列を生成する
// org.apache.commons.lang.RandomStringUtils
// tag random string


続きを読む

2009年07月01日

日記的なもの(2009/06/30)

最近、はてなブックマークをよく見ているのですが、その中で「なぜブログでタダで文章を書いているのか」というような話をちらほら見かけました。

リー○スだったら「それがぼくには楽しかったから」と言うかもしれませんし、ストール○ンだったら「無料なだけでなく、コピーレフトであるべきだ」と言うかもしれません。


以下、普通の日記

Python3.1、きました

最近、るびるび言っててろくにPythonに触ってなかったりしますが、心が離れているわけではないぞという気持ちをこめて。


「Python 3.1」正式版リリース
http://sourceforge.jp/magazine/09/06/30/0623238


3.0で大幅な変更があった後の新バージョンなので、スタンダードな機能強化がちらほらという感じだそうです。

あー、早くPythonに戻りたい。Rubyに十分に慣れて、音速で動くコードが書けるようになったら、ヘビのおうちに帰ろうと思います。Python案件は少ないので、どうにも優先順位が下がってしまいます。

【1日1Rails】JSONへの変換、デコード

Ruby 1.8.7
Rails 2.3.2
JSONへの変換、デコード
to_json
ActiveSupport::JSON.decode


続きを読む