ちなみにApacheの設定がきちんと出来ていないと、以下のようにエラーになります。ConflictログをWindowsのTortoiseSVNから見てみました。問題なくコミット出来ていました。ここのコメントはどうやって編集するのでしょう・・。あと、やっぱりコメントをput時に指定できると嬉しかったりしますが、はてさて・・。23:26開発テストデータの生成はだるいもんです・・。昔は手作業で白い巨塔の登場人物のデータを生成したりもしてましたが、件数が増えてくるとそういうわけにもいきません。Browserにはそれなりの適当なデータを生成する機能がついてます)このサイトで生成することもできます。http://www.generatedata.com/#generator日本人の名前などはもちろんありませんが、基本的なデータを作成するだけなら十分だと思います。テストデータは「ああああ0001」とかのが見やすいし、実施しやすい件について。EclipseJDK6u4がリリースされちょります。NOTEに書いてあったような気がします。Javaでクラスを作成していると、決まったコードを記述するのが面倒になります。hashCodeやEqualsが良い例なのですが、これはEclipse3.3には標準で生成機能が付いているので問題ないのですが、toString()を良い感じに生成してくれる機能がありません。そこで、探したらあっさりと見つかりました。一つはCommonsLANGに依存するコードを生成するらしいので除外。CodeSugarというやつがそうです。http://sourceforge.net/projects/codesugar/Eclipse3.3で動作確認しました。大文字のみで補完するのは勘弁してください。14:06日記2007後期開発GIGAZINE見てたらこんな記事をみつけました。Proのシリアルナンバーが期間限定で無料配布(通常2499円)されているそうです。半額キャンペーン中だ。無料配布はどこにも書いてないよー・・。GIGAZINEに書いてあったURLを踏んでみる。おぉ・・あった!いつまで配布中なのか分からないので、とりあえずインストールしてシリアルを頂戴しておきました。話は変わってCommons-DBCP使ってたらなにやらエラーが発生・・。open")が発生する模様。DBCPがバグってるのかなーと思いきや・・自作のThreadPoolがバグってました。TaskListが空になったらMainを抜けるのですが、Mainを抜けたあとにDBCPの後処理をしており、Taskが終了していないのに後処理が走っているからでした・・。Mainを抜ける条件は「Taskが全て終了したら」じゃないとダメですね。書き直すのも面倒なのでJava5以上からサポートされている標準のThreadPoolを使うように変更します。使い方は後ほど記述します。・・・BLOGのデザインを変更したいなぁ。JavaWikiにも書きましたが、PreparedStatementをキャッシュするとスループットの向上が望めます。prepare処理が内部でどういった手順で行われているかは以下のサイトが参考になると思います。http://www.atmarkit.co.jp/fjava/rensai2/webopt11/webopt11.htmlhttp://www.atmarkit.co.jp/fdb/rensai/orasql06/orasql06_1.html実際にプログラムを書いて動作を確認したところ、確かにOracleでは30%ほど速くなりました。MySQL(MyISAM)では200%ほど速くなりました。INSERTしか確認していないので、実験の信頼性は低いと思いますが、気になる方は自分で試してみると良いかもしれません。ちなみにWikiはこちらです。実験の結果も載せてます。13:59開発タイトルどおり、会員サイトで画像ファイルにもアクセス制限をかける方法です。ちなみにBlogWriteを購入したので、BlogWriteで書いてます。USBメモリでログを持ち歩いてます。いうわけで会社からカキコ。本題にもどり、知人に聞きまわったのですが、いくつか方法があるようです。image/****で返すSetEnvIfでリファラーを見るJavaの場合はTomcatで画像ファイルにServletFilterをかますリバースプロクシを使って4みたいなことをする順番に説明していきます。その前に、Mixiは制限かけてないのでログインしていなくても画像ファイル見れます。プロフィール画像とかMixiのアカウントが無くても見れるはずです。1のBASIC認証を利用する方法です。ブラウザ依存のダイアログが出てしまうのと毎回HTTPヘッダに認証の情報が載ります。会員サイトはCGIやPHP、Servletで会員の登録をし、またそのアプリで認証を行うため、Apache側に認証をしたとしても二重認証になってしまいます。HTMLフォームにIDとパスワードを入力して、画像を見ようと思ったらBASIC認証のダイアログが出てしまう。この回避策としては、全てBASIC認証に統一するしかないと思います。昔の会員系サイトではBASIC認証のサイトを結構見かけましたが、現状では現実的ではないと思います。URL指定ではアクセスできない場所に画像ファイルを配置し、CGIでバイナリデータを読み込みそのまま返す。src="hogehoge.cgi?name=abc.jpg"/>みたいな感じ。CGIで認証チェックを行うため、利用者から見ると違和感はない。サーバの負荷が尋常ではないような気がします。次に3のリファラーではじく方法。これはきるごあ先生に教えてもらったサイトで実装されてたようです。アプリサーバがapp.example.comというドメインで、画像サーバがimg.example.comというドメインだとします。.htaccessファイルでは様々な方法でアクセス制限をかける事ができるのですが、その方法の一つにSetEnvIfがあります。これでリファラーをチェックしてapp.example.comではなければForbiddenを返すというもの。ブラウザのアドレス欄にURLを直接打ち込まれた場合はリファラーが空になるので、この場合もはじけます。他サイトからリンクされた場合もはじけます。リファラーは簡単に偽装が可能なため完全なる制限とは言えません。次はServletFilterを使う方法です。完全にアクセス制限をかけたい場合、かつServletで構築しているサイトであればこの方法がお勧めです。ApacheとTomcatを連携させている場合、静的ファイルはApache側で処理させていると思いますが、画像ファイルをTomcat側に転送させます。するとTomcat側のHTTPエンジン(Coytoteでしたっけ?)で処理されます。このTomcatのweb.xmlにServletFilterをかまします。すると画像ファイルにアクセスする前にプログラムを実行することができるので、このプログラム内で認証チェックを行います。TomcatはApacheと比較して画像ファイルを返すスループットがちょっとだけ低いです。最後にReverseProxyを使う方法です。これはServletFilterを使うのと同じ要領です。フロントのApacheで画像ファイルにアクセスしたらReverseProxyで特定のプログラムに飛ばします。飛ばしたプログラムで判定する。実際は、そこまで制限したいか?ということになると思いますが・・・。個人的にですが、基本的にサイトはServletで構築しているので4番目のServletFilterを使う方法が楽チンだと思ってます。ところどころ脳内補完で説明がぶっとんでますが、行間読んでください・・。11:59日記2007後期開発jEditを入れてみました。このソフトはプログラマ向けテキストエディタらしいです。Javaで作られているのでマルチプラットフォームで動作するっぽい。日本語化もプロパティファイルを追加するだけで可能です。コード補完にも対応しており、プラグインでいろいろ機能を追加する事が可能です。クラス構造を表示したりとかコンソールを表示したりとか、エラーリストを表示したりとか、TODOリストを抽出したりなど。プラグインを追加していけばEclipseに匹敵する機能を備えることが可能です。Eclipseでもいいわけですが、Eclipseは起動が重いですからね。編集するならjEditのが良いと思ったわけです。SVNプラグインなんかもあるし。http://jedit.sourceforge.net/Java以外にも対応してます。インストールはしてみたので、これから使ってみようと思います。SSHSolaris10にOracle10gR2を入れるべく、イロイロ設定してたのですが、その前にMySQLやPHPのビルドのために色々なパッケージを入れてしまったせいでfont-cacheが壊れました・・・。gdmと打ち込んでも、立ち上がりません・・・。正確には、起動して・・・落ちて・・起動して・・落ちてを5,6回繰り返して終了します。仕方がないので、ローカルマシンのCygwinにXサーバをたてて、SSHで転送しました。土日は完美を廃人のごとくプレイしますた(`・ω・)BLOGを更新する余裕もなくプレイしてました。完美は1鯖(カペラ鯖)で「kirsche」という名前でやってます。レベルは16くらいだったはずです。クエスト1個目はクリアしたけど、やっぱり倉庫キャラは必要ですね。倉庫キャラというよりは、露店キャラが!!まったりプレイ中ですので、まったりPTに誘ってくださいまし~。話はちょっと代わってGoogleMapみたいなNPC検索のシステムを作ろうとしてます。NPCの場所がわからなくて・・・。完美の拡大したマップをつなぎ合わせてAJAXで処理。NPCだけではつまらないので、草の座標も表示と・・・。草や砂利の場所をメモっているので、それも表示できたら分布みたいなのができて面白いかなーと。ボロノイ図か凸囲図形を作成すればデータが少なくてもそれっぽく見えるし(`・ω・)というわけで、JavaScriptのライブラリをフルスクラッチ中でございます。06:54日記2007前期開発サーバ機の標準スペックをメモリ8GBにするって言ってたから、あまり気にせずにプログラミングしてみたんです。64BitLinux/メモリ2GBで動かしたらメモリを使い切りました・・・。5000=5GBむお・・・。判定処理を書くのが面倒だったからダミーノードを入れたのが、こんなところでネックになるとは・・・。それと64BitOSで動作させるとポインタが8Byte取られるらしく、それも影響しているくさい。́・ω・)Cは面倒な言語ですね。構造体(Struct)に関数ポインタを持たせてDeepCopyとDestructorがし易いようにしてるんですが、これは要らないのかな・・・。入れるデータが決まってるならわざわざ汎用データコンテナにしてメモリを使いすぎるのも問題と・・・。100万人=100MB。検索は毎秒100万件でスレッドセーフ。ここがネックになる事はなさそうですね。複数の言語を同時に使うと、頭が混乱するですよ。会社のパソコンのスペックってどんなもんなんでしょーか。PCのスペックがどんどんあがっていってるけど、そんなに必要なの?と思うこともしばしば。一般的なビジネス用途って、メールがかけてOfficeがそこそこ動けば問題ないのでは。そもそも高機能なマルチメディア機能を利用すると、それなりにスペックを要求されるわけですが、逆を言えばマルチメディア機能を利用しないなら、スペックいらないんですよね。なんでVistaとかいらない機能をつけるんでしょーか。バージョンアップするに連れて重くなるソフトウェア。本当にバージョンアップ?ちなみに開発マシンはそこそこ良い物を使ってるんじゃないでしょうか・・。メモリが無いと統合環境立ち上がらないし。・Excel・その他これでだいたいメモリ1GB~1.2GB使います。Oracleはパラメータいじってメモリ使用量を100M以下にしてます。(デフォルトだと500Mを確保しやがるので)ここから開発作業をすると1.8GBとかに膨れあがります。(プロファイラや負荷ツールを使うと特にね・・・)結構メモリ使うもんなんですね・・・。必要な物だけ起動しろと言われそうですが・・・。23:59開発JSONの公式ライブラリというか、公式ライブラリを拡張したライブラリJSON-LIBという物があるんです。Javaによる実装です。自前でBeanとマッピングするEncoderとDecoderを作っていたのですが、最新版が出ていたので試してみました。タイトル通り、バギーなライブラリなんですがね。JUnitのテストケースが1/3くらいしか通りません・・・。致命的な不具合を発見・・・。Listの配列はJsonArrayのJsonArrayとみなしており、上手く処理できてません。ArrayList()}Encodeで[[],[]]となり、これをDecodeするとエラーが発生しました。ctor}こんな感じでPojoAをEncode→Decodeできません。PojoAからそのフィールド名を使ってSetterを取得しようとしていたり・・。あとは、JSONではnullもデータ型として定義されているのに、nullの扱いが中途半端。配列の要素や、BeanからDecodeするときにStringのnullは""にしたり、Integerなどは0にしたり・・・。primitiveとラッパーを分離して考えて欲しい。Stringのnullを""に置き換えるのは如何な物かと・・。Characterクラスの扱いも中途半端。charのnullを{}と変換したり・・・。公式のJSONの実装も、Mapの要素をそのままtoStringしてたりと、再帰的に処理してないわけですが。いい加減すぎる・・・。明日もこの作業か・・・つらい・・。́・ω・`)あと、ノートのMSNが接続不能になりました。他のPCからは接続できる・・・。バージョンが問題なのかな。2chを見たら同じ症状の人がいたので、レジストリを削除したら起動できるようになりました。前の記事でPS3の公式サイトは見た目に拘って中身がないという事を書きました。ユーザーに優しいデザイン、インターフェースとは何でしょう。私は、「考えさせないこと」だと思います。どんなにすばらしいデザインでも、閲覧しづらかったらイライラしますよね。行きたい情報に辿り着けなかったらイライラしますよね。どこをクリックして良いか分からなかったり、ボタン名がアラビア語だったり、サイトの構成やアイコンが一般のメタファと異なっていたり・・・。デザインも大切だけど、第一はユーザーに考えさせないことが尽きると思います。現実世界ではそうでない方が良い場合があります。働きマン3の中からの引用になりますが。踏み石を不並びにし、利便性を下げることで人はその場所をゆっくり歩く。その景色が素晴らしいから、たくさん見せたくてそのようなトリックを仕込む。10:41開発ここでいうデザインとは、色遣い、サイトの構成、デッサンなどなど。素材は自分で一から作る。デザイナーさんはこんな事をやっているわけですが、コツを聞いてみました。もってその通りでございます。́・ω・`)ごめんなさい。ちなみに、PSUのデザインに関して聞いてみました。あのクオリティであの重さはあり得ない。)ちなみに、プログラムのコツはあります。他人のプログラムを改造するのが上達のコツです。アーキテクトのコツもあります。上辺だけでなく概念そのものを熟慮し理解すること。プログラミングは手段であり目的ではありません。立派な理由があってそれを成し遂げたとしても、様々な箇所に矛盾が出て結局は振り出しに戻る。結局の所、最初のコンセプトは無かったこと、もしくはやむなしとして、使いにくい物が出来上がる。一部にだけそのコンセプトを適用し、他の部分はどうでもいい理由によって仕様の差違が発生する。たくさんの入力項目があり、エラーチェックが厳しい。使いにくいので、入力項目を減らし、デフォルト値を設定することでエラー少なくする。項目によってはプログラムで計算をして、エラーが発生する項目(組み合わせ)は表示されないようにする。こんな事をやったとします。結論から言うとね、日付入力エラーを出させるなって事です。「存在しない日付です」というエラーに何の意味があるのだろう。カレンダーをポップアップさせるインターフェースにすれば解決するかもしれないけど、とりあえずその前に・・・。存在しない日付とは何か(書式エラーとは違います)(というか書式エラーなんてのもナンセンスなエラーですよね。明らかにローテクです。)2月30日とかそーいう事らしいです。選択させるらしいですが、そもそも2月30日を入力する時ってどんな時でしょうか。これを3月1日、もしくは3月2日の意味で入力しているユーザーは居ないと思います。それなら3月と1日、2日を選択しますからね。ほとんどのユーザーは月末を期待して入力してるわけで、なぜそれをプログラム側で補助してあげないのだろう。エラーチェックをしてバシバシ弾いて入力エラーにするのではなく、有る程度はプログラム側で対応してあげるべきだと思うのです。※2月15日から15日後っていう意味で2月30日という意味があるかもしれませんが。親切な設計は度が過ぎるとおせっかいになりますが、少なくともカレンダーに予定を入れるのに、カレンダーの日付をクリックするような仕様なのに、次の画面に進むと日付入力はカレンダーではないという仕様には疑問を覚えますが。13:33開発PSUのキャラリセットが確定したようですね。キャラリセットはこれで最後になって欲しいものです・・。タイトル通り・・・ネトゲのプレイヤーには毎日プレイできない人もいます。週末だけプレイする人。土曜日にシステムの不具合が発生して丸一日サービスが提供できなかった場合、1日分課金を延長する措置がとられますが、土日のシステム不具合の場合は1週間伸ばして欲しい。会社にとっては痛手かもしれないけど、土日しかプレイできない人も多いはず。土日プレイヤーにとっては、1日延長されたところで関係ないはず。難しい問題ですが、PSUは結局1ヶ月の試験期間となりましたが、最初のトラブルで1日延長ではなく、1週間延長と発表していれば、「あ、週末プレイヤーのことも考えていてくれているのかー」と思ったのに。MySQL忘れないように備忘録。JamesのストレージにMySQLを利用すると、起動しません。MySQLでは途中のバージョンからVARHCARのサイズ拡張が変更されており、VARCHAR(200)の場合は最大200バイトのはずですが(少なくともOracleではそうだったはず・・・)MySQLでは文字コード依存になります。200バイトではなく、200文字。SJISの場合は1文字が2バイト扱いになり、UFT8では1文字が3バイト扱いになります。MySQLの制限の一つに、主キーのセットは1000バイト以下というものがあります。JAMESのDDLによると、VARCHAR(200)とVARCHAR(255)を複合主キーとしているので、(200+255)*3=1365バイト。正確には1367バイトになるの?よくわかりません・・・。latin1」を追加して回避しました。新しいノートパソコンが届いてワクワクテカテカなタムタムです。予想外に大きいノートでびっくりしてます。OSがHomeエディションなので、これをProにしようと思います。手元にあるWinXPProのCDはSPが当たっていない状態なので、HomeSP2のPCに入れても、警告が出て薦めることができません。そこでProにSP2をあてたCDを作成します。窓の杜でも取り上げられたソフトです。)これでHomeSP2→ProSP2のアップグレードができるようになります。́・ω・`)http://www.microsoft.com/japan/msdn/howtobuy/vs2005/subscriptions/今のノートパソコンからOffice2003を移行することに。片方のノートPCからOfficeを削除をして、新しいノートへOffice2003をインストール。メールやEclipseの移行など、面倒でやってられません・・・。́・ω・`)それより、新しいパソコンが届いても今までのノートでBLOG書いてるっていったい・・・。Databaseこの前書いたSQLチューニングの結果を。DBはOracle9iR2。いうのはWikiの方に書くべきかな。テーブルは以下のように定義。こいつにINDEX張ってあるデータ量は10万件。ObjectBrowserのデータ生成機能を使って生成。比較したSQLは以下の通り。50;それぞれの実行計画と統計情報は以下の通り。99807まぁ統計情報使ってるので、実行時間は当てになりませんが・・・。実行計画を見ると、1は全スキャンしてるのに対して、2は範囲スキャンをかけていますね。18:32開発シェルだとどうしても動かないので・・・。́・ω・`)これはきちんと動作する事を確認済みです。HSQLDBを起動する。OutOfMemory。無理だよね・・・件数的に。絶対にHSQLDBでは無理です。MySQLに変えました。株価解析ツールを作ってみました。いうか、作ってる最中です。解析するためには、過去のデータが無ければ話になりません。いうわけで、まずは、Livedoorファイナンスのランキングデータからコードを取得し、そのコードの過去1年分のデータを抜き出すツールを作りました。話はそれますが、ここまでをJavaで作りました。HttpURLConnectionクラスの挙動がおかしかったです。disposeしても内部でCloseをしていないのか、同一サーバに対して連続通信する事ができませんでした。́・ω・`)もう一つ。ストレージにHSQLDBを使っているのですが、さすがにデータ量が多いのか起動に10秒以上かかります・・・・。́∀`)さて、解析と言ってもどうやって解析するべきか・・・。データマイニングみたいなものだし。単純にUPしたかDOWNしたかを木構造で統計して、確率を求めてみよう。あとは、似たようなグラフを検索するのも面白そうですね。23:52日記2006前期開発DBスペシャリストの試験を申し込んでいたのですが、寝坊しました。