!!!独り言日記 !!掲示板を更新しました(2005/11/30) ft-lab.ne.jpの掲示板を作り直しました。 過去の履歴はそのままデータベース移行して生かしてます。 http://ft-lab.ne.jp/fl_bbs/bbs デザインの一新と、UTF-8対応(日本語以外の他の言語体系でもフォームに入力・表示が可能です)、 [code]〜[/code]で囲む処理の実装、を行いました。 まだ「削除」ボタンは使えない(削除キーが使い道がない)ですが、 それ以外は完成しています。 Javaでリハビリ的に作ったのですが、今度こそサーバが落ちやすい原因が 回避できてますように・・・・ しかし、前は無駄な恥ずかしくなるようなコーディングが多かったなぁと。 時間があればこのサイトでもシステマチックなことを表に出していくことにします。 !!Apache2入れ替え(2005/11/29) このサイトのApacheが古かったため、新しいのに入れ替えました。 BBS復旧は、もうしばらく時間がかかりそうです。 ApacheとJava(tomcat)をつなぐモジュールとして「mod_jk2」があるのですが、 前はこのビルドが中途半端な状態のものを入れてしまってました(というか、ずっとえらい不安定運用してたなぁと(^_^;;)。 RedHat9のデフォルトのApache2(RPMインストール)だと いろいろ制約がありますね。Apache2をソースからビルドしてmod_jk2もリビルドを かけたらどうやら安定していそうでした。 またこの辺の奮闘記はTipsとして書いておきますね。 !!物理でとっても参考になるサイト(2005/11/25) すばらしいサイトを見つけました。 「物理のかぎしっぽ」 http://www12.plala.or.jp/ksp/index.html 高校物理・数学で止まってしまった人や復習のために 非常に参考になります。 勉強というよりも、楽しい書き方で図も多いですので「なるほど!」 と思いながら読ませていただいてます。 誰もが言うのですが、人生はいつまでも勉強の繰り返しで 終わりはないですねぇ。私もまだまだ中途半端なんで勉強していかないと。 以前量子コンピュータの本を買ってきたのですが、さっぱり理解できませんでした(T_T)。といっても、学生時代はレイトレーシングのプログラム、アフィン変換の 行列すらも理解できずに「きれいだなぁ」と眺めること専門でしたので(中学生くらいかな、「Oh!FM」というソフトバンク社の雑誌があり、そこに記事があった記憶があります)、 いずれは理解できるようになるかな、と楽観視してます。 !!またまた鯖ダウンしてました(2005/11/24) う〜む、なぜだろう・・・・ またまたft-lab.ne.jpのサーバが落ちてました。 しばらくBBSのほうを閉鎖して原因探ってみます。土日あたりでメンテすることにしますです。 ログを見ても特に目立ったアタックなどはなかったのですが・・・ !!鯖ダウンしてました(2005/11/23) 真夜中にダウンしてましたので、サーバを再起動かけてもらいました(すばやい対応に感謝です、さくらインターネットさん)。 原因はいつもどおり分からないですねぇ(^_^;;。 まれにハングするんだよなぁ、めぼしはついているのですが(Javaで使ってる mod_jk2かな?)。 セキュリティーログを見ると、sshへのアタックが結構ありました。 fromが日本の会社もありますねぇ、、、、表には出しませんが リストアップしております。 日本語名でよく使われるようなユーザ名でたたいてますが、 うちには表に出している情報以上のものはないので 入ったところで何もないですよ(苦笑)。 Nortonのアウトブレイク警告は直っているようです。現在の LiveUpdateの更新で改善されてました。 !!Nortonが・・・(2005/11/22) アウトブレイク警告(「W32.Sober.X@mm」が非保護)というのが いきなり出てきました。 LiveUpdateかけろとのことでしたが、かけたところで警告は 出っ放し、はて? 2ちゃんねるのセキュリティ板見ても同じ症状の方もいるようで(こういうときは 便利ですね)、ちょっとわからんです。 次のアップデータで解決してほしいもんですが・・・。 ウイルスに感染してしまったのかとびっくりしました。 !!パソコンの「パ」も知らない人達の世界(2005/11/21) 普段私たちが当たり前に使っているインターネットやメール。 これをパソコンや携帯電話を使ったこともない人に教える、というのは えらい苦労しますね。 いろいろな情報を仕入れるのにネットは有効だよ、ということで 布教活動に行っていたのですが、メールってどんなもん?というのを 教えるのにさてどうしようか、とちと悩みました。 住所に値するのがメールアドレスではないしなぁ、、、。 住所というとURLを指したほうがそれっぽいと感じましたので。 手紙みたいなものがメールで メールアドレスは電話番号みたいなもの、と言っておいたのですが 伝わったんだろうか? (そもそも、メールのことを 電話のようにすぐに受けて返事を返すものと思っていた模様。 「電話」という比喩説明だとたしかにそう感じるわなぁ) プロバイダ選びからネットワークの接続(配線含む)、って 素人さんにはたしかに壁になりますね。 電話回線も使えるようにしてネットも有効にするには(ADSLの場合は)「スプリッター」というのがいる、という説明をすると、モデムのような機器(というか、分からない人から見ると電気の通っている得体の知れない「機械」)と勘違いされて「そうきたか!」 と思ってしまいました(^_^;;。 とそんなこんなで、説明の際にはパソコンを使わない方々にも視点をあわせないとダメだなぁと再認識しました。 ITの常識は別の世界では通じないですね。 ただ、昨今はネットを利用しないとどんどん情報格差が開いていくため、 ちょっとでも理解できている人が教えていくことも必要だとは思ってます。 で、これは実は私の実家の話です(苦笑)。 もう昨今の小学生の子でもパソコンは使いこなせてるわけで(学校でやってるしね)、 縁がなかった人はどんどん差が開いていくなぁと。 (ただ、うちの親の友達のおばちゃん連中はメールを使ってたりしてるので、 それでやる気になったらしい。恐るべし、ネットの浸透度。) !!続・UTF-8(2005/11/17) JavaですべてUTF-8で扱ったとしても、 フォームでの入力文字列処理の取得・変換などで化けてしまいますね。 という部分、なんてことはなかったです。 str = request.getParameter("f_in_text"); str = new String(str.getBytes("8859_1"), "UTF-8"); みたいにフォーム(name="f_in_text"とします)から取得したテキストを UTF-8に変換してあげると万事OK。 HTMLソースをUTF-8で統一すると、後は何の苦労もせずに多言語対応できてます。 早トチリすみません(^_^;;。 これで、in(フォームからの入力)とout(HTMLとしての表示)両方ともOKかな。 しかし、今までシステム開発はいろいろしたのですが 改めて見返してみると、日本語のしかやってなかったなぁ(英語はShiftJISのシステムでも問題ないですしね)。 多言語を考えると、いろいろ新鮮に感じます。 !!UTF-8(2005/11/16) 多言語対応のWebアプリを作る場合は、UTF-8であるのが便利でいいのですが この文字コードについてちょっと掘っていました。 Webブラウザのフォーム入力エリアでのコピー&ペーストは普通に処理できますね。 なんと、FreeStyleWiki(EUCで文字コードを管理)に日本語でない文字列を貼り付けるときちんと反映されるじゃないですか、これは知りませんでした。 성공 上記はハングルでの日本語で言う「成功」の意味になるらしいですが(自動翻訳様のお答え)、 FreeStyleWikiのソース上では以下のようになってます。 {{ref_image img_str_20051116.png}} う〜む、FreeStyleWikiでも「&#xxxx;」のテキストを入れると自動的に変換処理が起きてしまいますね。あえて多言語を意識しないと完全にはいかないかなぁ・・・。 UTF-8で扱うと、全角1文字(?)が3バイトで済みますので やっぱり多言語化を考えると UTF-8で行くべきですねぇ。 XOOPSではハングル文字を貼り付けてもうまく表示できませんでした。 うちの掲示板でもダメです(^_^;;。 JavaですべてUTF-8で扱ったとしても、フォームでの入力文字列処理の取得・変換などで 化けてしまいますね。意外とやっかいかも。 英語圏の人が、よく「多言語対応しました」というシステムで  実は多言語対応できてない、というのを目にします。 表示だけじゃなくUTF-8を使ったとしても 何かしらの処理をしないといけない部分がある、というのも原因かもしれませんね。 今作っている(微妙に仕事ではないやつですが)システムのハングル表示バージョン。 {{ref_image img_20051116.png}} このためにJavaのテンプレートエンジン作りました(たぶんJavaのテンプレートエンジンは Struts(これだとフレームワークかな・・・もう使い方忘れてしまいました(^_^;;)とかが有用だと思うのですが、リハビリもかねて)。 有名どころですが、翻訳には欠かせないものとして以下のサイトを重宝してます。 http://www.excite.co.jp/world/english/ 英語・韓国語・中国語に対応してますので、大変役立ってます。 ここの変換後のテキストをコピー&ペーストしてテキストエディタに 持っていっても、問題なく使えますね。 !!MacOSXバージョン(versリソース)の文字化け(2005/11/14) OSX 10.4.0 〜 10.4.2のCarbonアプリにおいて リソースの"vers"に日本語を入れると化ける、というのがありました(これは、 ファイル情報の「バージョン」にて表示される文字列です)。 OSX 10.4.3ではこの問題は直っています。 なお、OSX 10.3.xでは問題なかったので、一時的に先祖がえりして 10.4.3で直したのかな? !! MacOSXでのウィンドウリージョンアニメーション(2005/11/14) ちょっと日が過ぎましたが、MacOSXでのリージョンアニメーションについてです。 これは、CreateCustomWindowで生成した非矩形のウィンドウに対して、 パラパラアニメのようにリージョンおよび画像を入れ替えてアニメーションさせる ことを目的とします。 たとえば、スクリーン上を飛び回る蝶を表現するとしましょう。 非矩形ウィンドウを実装するには、 *リージョン(kWindowMsgGetRegionイベントを受け取ったときにMapRgnで指定) *描画画像(画面再描画のイベントを受け取ったときにCopyBitsで描画) の2つの要素が必要です。リージョンはウィンドウ自身をマスクするもの、画像は その上にかぶせるものに相当します。 アニメーションさせる場合は、構造体配列を作って「リージョン(RgnHandle)」 「画像(GrafPtr)」をフレーム数分あらかじめ格納しておきます。 これをタイマーイベントのタイミングで入れ替えてあげればアニメーションできそうです。タイマーは「InstallEventLoopTimer」で与えます。 では、非矩形ウィンドウおよび画像の更新をOSに促してあげるのはどうするのでしょうか?リージョン・画像は分けて考えます。 第一のトリガーはタイマーイベントです。これは周期的に与えることができます。 !画像の置き換え 画面の「再描画」ですので、ウィンドウイベントとして再描画をキックすると 解決しそうです。 Rect rec; // WinRefはウィンドウ自身のWindowRef情報 // ウィンドウの矩形領域を取得する ==> recに格納される GetWindowBounds(WinRef, kWindowGlobalPortRgn, &rec); // 指定の矩形内の再描画を促す InvalWindowRect(WinRef, &rec); しかし、これでは駄目だったりします。 たとえば、スクリーン上のメニューを選択中やポップアップメニューを出した ときは、この間中の描画が反映されません。 この別処理中もタイマーは動いているわけですので、強制的に描画を行ってやります。 どうするのかというと、 GrafPtr oldPort, thePort; Rect rec; RGBColor col; // ポートを保持 GetPort(&oldPort); // ポートを描画先のWinRef(WindowRef)に変える SetPortWindowPort(WinRef); // 描画色を黒に初期化(CopyBitsで影響を受けないようにするため) col.red = 0; col.green = 0; col.blue = 0; RGBForeColor(&col); rec.left = 0; rec.top = 0; rec.right = rec.left + 画像の幅 ; rec.bottom = rec.top + 画像の高さ ; GetPort(&thePort); // カレントのポートを取得 // hImg(GrafPtr) に画像情報が入っている。 // CopyBitsで hImg ==> thePortに画像コピーを行う。 CopyBits(GetPortBitmapForCopyBits(hImg), GetPortBitmapForCopyBits(thePort), &rec, &rec, srcCopy, NULL); // ポートを元に戻す SetPort(oldPort); のようにダイレクトにCopyBitsを呼んであげてます。 再描画イベントがキックされたときに呼ばれる描画処理をそのまま 呼んでいるだけです。 注意点として(これはOS9以前からあった決まりごとなのですが)、 CopyBitsする前は RGBForeColorで描画色を黒に設定するようにしてください。 これは別のところで描画色が変わったままだと、CopyBitsが 変な色づけになることがあるためです。 これで、描画する画像に関してはアニメーションできてます。 次に外枠であるリージョンのアニメーションです。 !リージョンの置き換え たぶんですが、OSのバグがあって まともなやり方では解決できません(OSX10.4.3でも)。 OS9とOSXで挙動が違う、というやっかいな問題も絡んでます。 コールバック関数の「kWindowMsgGetRegion」イベントを発生させるときに、 引数にRgnHandleがありますのでこれを変えてあげるといい、というのが分かります。 では、「kWindowMsgGetRegion」を強制的に発生させるには? InvalWindowRect/InvalWindowRgnがトリガーっぽいのですが、これでも 呼ばれませんでした。 トリガーはなぜか「SizeWindow」です。 SizeWindow(WinRef, 画像の幅, 画像の高さ, false); OS9では、タイマーイベントでアニメーションのタイミングが来るたびに 上記のようにSizeWindowを呼んであげると、無事リージョンアニメーションが 行われます。リージョンを変えてから再描画を行うといいでしょう。 第四引数は再描画する場合はtrueですが、どうせすぐ強制的に再描画するわけですので falseにしてます。 ですが・・・・OSXではこれだけではリージョンアニメーションできません。 SizeWindowで「画像の幅」「画像の高さ」をピクセル単位で指定するのですが、 これが固定値のままだとリージョン君が落ち着いてしまって、 リージョンのアニメーション処理を怠けてしまうようです(よく分からないと思いますが、マジでそんな感じです^_^;;)。 頻繁にSizeWindowで うにょうにょ突っついてあげないとアニメーション してくれません。 回避策としては、「1ドットくらい拡大してSizeWindowを行い、すぐに元のサイズに戻す」、これです。 下記のソースではフレームが更新されるたびに幅が「画像の幅 + 1、画像の幅」 次の回では「画像の幅 + 2、画像の幅」「画像の幅 + 1、画像の幅」「画像の幅 + 2、画像の幅」のように繰り返されます。 // 画像をわざと揺らす(1、2、1、2ドットと順繰りに変化させて、幅を変える) static int rx = 1; SizeWindow(WinRef, 画像の幅 + rx, 画像の高さ, false); if(rx == 1) rx = 2; else rx = 1; // 画像を元のサイズに戻す SizeWindow(WinRef, 画像の幅, 画像の高さ, false); なんという無駄!! でも結局これしか回避策はありませんでした。1-2ドットの変化なら、見た目上は 気がつきませんのでスムーズに動いているようには見えます。 ちらつきも起こりません。 実際、ウィンドウアニメーションを使うアプリにどれだけ出会うかは 分かりませんが、少なくともMacでは見たことがないです(時計とかで円状に抜くのとかはありますが)。結局はこの手の問題が絡んでいるのかなぁと思ってます。 まだまだ他にも問題がある箇所があるのですが、OSがバージョンアップしたからといって改善されない部分も多いですね<Mac。 Macでの開発では、OSのバグ(もしくは作法が分からないこと)に 悩まされることが多いです。逆に、押さえるところを押さえると強みにはなるのですが・・・。 Mac対応ツール(Shadeとか)で落ちやすかったりOSバージョンアップで動かなくなったり、というのもこのへんの苦労を背負わされてるのかもしれません。 !! Wikiでのサイト管理(2005/11/13) ずっとこのサイトでは FreeStyleWikiで管理しているのですが、 なにげに総ページ数を数えたら130ページを超えてました。 ちょっと一部のコンテンツが重くなってきたなぁと感じてきてます。 Perlでファイルにてページ管理ですので限界が近いのかなぁ。 でも、非常に役立ってますし作者様には感謝です。 現状ではある意味、実験的にページを追加していて(しかし、一応は何かしらに 使えるかもしれない情報を記述しているつもり)、 もっと大量(たとえば何十万ページとか)に扱うにはデータベースに 蓄えていくようにしないといけないかも、と思ってます。 ほか、こうしたい、とか個人的な要望がWikiに対してあったりします。 今ちょっと時間に余裕があるのでシステム化してみようかなぁ・・・。 !! USBフラッシュメモリ(2005/11/03) USBフラッシュメモリを買ってきました、256MBで4000円切ってるんですね、 安くなりましたねぇ。 といいつつ、実は今までフラッシュメモリなるものを買ったことがなかったので 便利さを味わってるところだったりします。 Win/Mac間のデータの移動はローテクですが(手元にHUBがないので) CDに焼くか、一度仕事用サーバにネット経由でアップしてケーブルを 差し替えて再びダウンロード、とか 手間なことをしてました。が、さすがに面倒だったので・・・・。 しかし、OSXでUSBフラッシュメモリを抜くときって ゴミ箱にドロップするだけでOKなんだろうか? Macでは初めて使ってみたのですが・・・・。 ゴミ箱にドラッグで持っていってデスクトップからアイコンが消えた後、 何もメッセージが出ない状態で抜いたのですが、 これでデータが消えてしまってました(再フォーマットしてください、とか出てましたし)。 う〜ん、抜くときはWinでは問題なくいけたのですが、 Macでは(ゴミ箱に入れても)USBメモリのランプは点灯したまま。 今はMacの電源を落としてからUSBメモリを抜いてます。 でも、隠し属性のゴミが大量に。 ・・・な、何か間違ったことしてる予感・・・・。 !! OSX 10.4.3(2005/11/03) 最近出たOSX10.4.3アップデートですが、内部的にも改善しているみたいです。 まず、CreateCustomWindowのアップルのサンプルがまともに動くようになってます(以下のサイトのもの)。 http://developer.apple.com/samplecode/CustomWindow/listing3.html リージョンの勝手にトリミングは、まだOSX10.4.3でも改善はされてませんでした。 きちんと自前で事前にトリミングしないと以下のようになります。 {{ref_image region_20051103.png}} この問題は、OS9ではリージョンは正常なのですが座標がずれてしまいます。 !! Shade8プラグインSDKに関しての情報、その他いろいろ(2005/11/02) [[ココ|Shade]]にいろいろ追加しておきました。 どうもtexture_interfaceが全滅っぽく、まともに動かないですね。 その他は動いていたのですが、多少変更がいる箇所があります。 注意点は書いておいたのですが、また何かあったら追加しておきます。 ようやく、1つ大きな仕事が終わりました。日記でずっと書いているMac関連が そうなんですが、約1ヶ月で10本のミニアプリケーション開発でWin/Mac両方対応、 という壮絶なものです。Winは98からXPまで、MacはOS9.0からOSX10.4.3まで。 アプリの性質上、FlashとかDirectorで楽はできないんですよ。C++でカリカリ です(^_^;;。 1人でプログラムしました。おかげさまで遅れも無く納品完了したのですが、 お客さんサイドが気に入ってくれて次の仕事も用意してくれているようです。 OSネイティブのアプリケーション開発は、Javaなどの流行りと違い、 できる人はやはり少ないみたいです。特にMacとなると、元価格を上げたとしても なかなかプログラムできる人はいない、ということで、ある意味ニッチな 産業であるかもしれません。 しかし、次の仕事はすでに別のも動かしますのでちょっとキャパを増やして いかないといけないなぁと思う今日この頃です。 もうちょっとこちら側の基盤が整ってからまじめに人募集しないといけないのですが、 もし、ここにある内容(Macだけじゃないです、Java使ったシステムとかもありますし・・・基本的にプログラムと名の付くものならなんでもやってたり)に興味のある方・仕事としてしたい方が いらっしゃいましたらメール(「y_yutaka@fa2.so-net.ne.jp」宛て)でもいただければうれしいかもしれません。月最低30万はお支払いできると思いますが、そもそも 簡単な仕事を私自身が請けないのでハイレベルにはなります。ので条件が厳しくなりますが・・・。 また時が来たら話題に出しますね。 オフィシャルサイトが整い次第(はやくしてくれ〜) 誘導させていただきます(^_^;;。 日記の内容は、なにげに仕事に沿ったヒントを書いたりしますので 観察してますと、何かしらやっていることが見えてしまうかと思います(苦笑)。 関係ないですが、ずっとiTunesで曲をあさるのにはまってます。 平原綾香さんのアルバム「From To」がもう出てるやん、ということで 購入。10/2発売なのに、iTunesではほぼ同時に買えるんですね。 CD買おうと思ってたんですが、iTunesでのダウンロードが楽でいいっす。 しかし、いい時代になったもんだ・・・・。 !! Mac(Carbon)日本語リソースを扱う(2005/11/01) 以前振っておいて忘れていたTipsがありました。 CodeWarriorでCarbonアプリを作成するときの日本語リソースの 扱いについて、です。 ProjectBuilder/XCodeでは、「info.plist」というXML形式の ファイルでアプリケーション名、タイプ、アイコンなどの指定を行います。 これをビルド時にプロジェクトに加えることで情報が組み込まれます。 CodeWarriorでは、「xxxx.plc」ファイルというのがCarbonプロジェクトを 作ったときにデフォルトで用意されます。 これは、plistのCodeWarriorバージョンで以下のような内容が記載されてます。 // Change this to your bundle identifier string #define kBundleIdentifier "com.metrowerks.stationery" // Change this to your short version string #define kBundleShortVersion __OUTPUT_FILENAME__ " version 1.0" // Change this to the string to display in the Finder's Get Info window #define kBundleGetInfo kBundleShortVersion ", Copyright ?U00A9 2002 by Metrowerks Corporation. All rights reserved." plist { dictionary { key "CFBundleIdentifier" value string kBundleIdentifier key "CFBundleName" value string __OUTPUT_FILENAME__ key "CFBundleGetInfoString" value string kBundleGetInfo key "CFBundleShortVersionString" value string kBundleShortVersion key "CFBundlePackageType" value string __OUTPUT_TYPE__ key "CFBundleSignature" value string __OUTPUT_CREATOR__ key "CFBundleVersion" value string "1.0" key "CFBundleDevelopmentRegion" value string "English" key "CFBundleInfoDictionaryVersion" value string "6.0" key "LSPrefersCarbon" value boolean true } } ここで変えるべきところは key "CFBundleDevelopmentRegion" value string "English" を key "CFBundleDevelopmentRegion" value string "Japanese" と、Japaneseにします。 これで、リソース(xxxx.rsrc)内の日本語表記がOSX上で化けずに正常に表示されます。 「CFBundleName」はアプリケーション名でOSX上で実行したときにトップメニューに表示される名称です。もし、プロジェクトが吐き出す名称と異なる指定をする場合は これに直接文字列を指定します。 ビルド時のplcファイルを反映させるために、一度plcファイル自身を 再コンパイルする必要があります。 CodeWarriorでは、plist形式も(出力用に)吐き出すことができます。 Settingダイアログの「Target-Property List」にて、 「Property List Compiler Output」で「Output as file」を選択、 「File Name」に「info.plist」と指定します。 これで、リビルドすると「info.plist」ファイルが出力されてます。 ただ、アプリケーション名(CFBundleName)で日本語を使うと 化けてしまいますね。 また、生成したアプリケーションの情報での「バージョン」部分で日本語を使うと (リソースの「vers」情報)これまた化けますね。OSX10.3.9では化けないのですが...。