メモの日々


2002年11月25日(月) 高津で病人の日

[dev] SOHO・家庭向けの情報セキュリティ対策マニュアル[ プレビュー版 ]

IPA提供の、家庭向けセキュリティマニュアル。セキュリティホールmemoより。ありがたい。読んでないが。

[java][web] Apache Axisに取り組む

  • 18:20 Apache Axisをインストールしようと頑張っているところ。以前書いたTomcatのエラーメッセージがちゃんと表示されない件は、/etc/mime.types の text/html の行にjspを加えることで対処した。エラーの元がjspじゃないときは効かないのだろうけど。
  • 18:50 Axis動かなくて泣いていたのだが、ドキュメントにあるようjaxrpc.jar とsaaj.jarをCATALINA_HOME/common/libへコピーしたら少し動き出した。
  • 19:00 Axisが「activation.jarがない」と言ってうまく動かない。JDKとTOMCATを新しくするとインストールされるかもしれないのでそれをやってみることにする。
  • 19:30 JDKはrpm -Uvhで問題なくアップデートできたようだ。が、TOMCATはエラーでまくり。「rpm -Fvh tomcat4-4.1.12-full.2jpp.noarch.rpm tomcat4-admin-webapps-4.1.12-full.2jpp.noarch.rpm tomcat4-webapps-4.1.12-full.2jpp.noarch.rpm」を実行したのだがディレクトリをコピーしようとしてエラーになることが繰り返された。そのたびに対象ディレクトリの名前を変更することで対処した。4.0.4から4.1.12にアップデートしたのだけど、色々なファイルの置き場所が変わっているからのようだ。
  • 21:30 やっとTomcatがまともに動くようになった。5月にはできなかったmod_jk.confの自動生成もJava World 11月号を見ながらできるようになった。まだ仕組みは分かってないんだけども。で、ずーっとForbiddenエラーに悩んでいたのだけど、それはwebappsディレクトリのパーミッションを750から755にすることで解決した。ふー。activation.jarというのもどういうわけか入ったようだ。
  • 22:20 やっとAxisが動くようになった。AdminServletだけが動かないのでずーっと調べていたのだ。結局web.xml中のの部分がコメントアウトされていたために動かなかったようだ。が、最初は動いたんだよなあ。わからーん。
  • 22:35 Axisの使い方がわからない。が、もう帰らねば。

Cプロジェクト

  • 13:30〜15:00 みんなで打ち合わせ。進捗の確認。どうということはない。

Kプロジェクト

  • 10:25 監視&テープ交換。いつもの作業だ。

その他

  • 朝早めに家を出れたが溝の口の手前で電車停止。高津で病人がでたとのアナウンス。ほんとかいな。電車20分くらい遅れぎゅーぎゅーになりうんざり。
  • 10:40 金曜日は休んでました、すみません。某BDMって意味が分かりません。VPNなんて難しいことしてるのね。割り込まないでよ、の辺りは面白くて笑う。ぼくは有名人をほとんど見かけたことがありません。
  • 11:25 JDK1.4.0にはセキュリティホールがあるとのことなのでJDK1.4.1_01をダウンロードした。インストールはまだ。
  • 15:55 JDK1.4.1_01をインストールした。念のため既存の1.4.0とJREとWeb Startをアンインストールしてからインストールした。あー、あとWindowsのパッチも当てなきゃなあ。
  • 17:10 IEのパッチとMDACの脆弱性のパッチをインストールした。MDACのやつはWindowsUpdateにはなかった。
  • 18:51 redhatはせっせとup2dateを実行してプログラムを最新に保っているが、JDKやTOMCATなどup2dateの範疇外のソフトを全然バージョンアップしていないから問題ありありだわ。うーむ、バージョンアップするべきかなあ。

2003年11月25日(火)

[book] 冷たい密室と博士たち (森博嗣)

冷たい密室と博士たち (講談社文庫)(森 博嗣) シリーズ2作目。大学での殺人事件の話。うーん、全然ドキドキせず面白くない。話が事件後から始まるが、こういう時を遡る小説は苦手だ(本作の場合は最初だけだけれど)。フツーのミステリかな。間取りを意識して読む方がよい。3点。

生活

  • 10:45 出社。雨は嫌。
  • Judeでステートチャート図を描いてみたけど、複雑になりすぎたので没。
  • Excelで状態遷移表を書いてみたけど、巨大すぎるので没。もっとシンプルにならないと。
  • Judeでアクティビティ図を描いてみた。フローチャートの方が描きやすいなあ。描き方よくわかってない。
  • 19:40 煮詰まってます。退社。

やること

  • Software Design購入

2004年11月25日(木)

  • 毎日テストとデバッグ。他に何もできないでいる。
  • バグに対する修正版をいかに早く提供できるかが重要だ。
  • お金儲けをしたいよう。
  • いや、金はいいからものづくりをしたいのだ。実力をつけないと。

[dev] 【オブジェクト倶楽部: 2004-43号】

週刊オブジェクト倶楽部に平鍋さんによる進捗管理の文章が載っていたのでメモ。

さて、本題のテストにもどる。筆者が提案する最もよい進捗管理の単位は、ア ジャイル開発で使われている、

 「受け入れテストを通った顧客要求の数」

だ。テストは、0か1かのどちらかに倒れる。また、受け入れテストをパスした、 ということは顧客価値に直結する。顧客が求める仕様に対して受け入れテスト を定義し、これを通過した数で進捗を測ろう。

やること

  • プリンタ処分
  • リンク元のスリム化
  • ナンバーアナウンス解約
  • スーツをクリーニングへ
  • tDiaryバージョンアップ
  • FSWikiバージョンアップ
  • AVGバージョンアップ
  • バックアップ
  • JREバージョンアップ

2008年11月25日(火)

  • 連休中ゴロゴロしていたら、なんだか腰が痛い。なぜだ。
  • frkwくんはペンギンに詳しい。

[java] Integer.valueOf(int i) を好め

Integer zero = new Integer(0);

のようなコードを書いていたらFindBugsに次のように注意されたのでメモ。

new Integer(int)の呼び出しは、常に新たなオブジェクトが生成されます。これに対してInteger.valueOf(int)は、コンパイラ、クラスライブラリ、JVMによってキャッシュすることが可能です。キャッシュを使用することによって、余計なオブジェクトの生成を防ぎ、コードの実行効率を改善できます。

Effective Javaの最初の項目に書いてある話だな。

Boolean.valueOf(boolean b) はバージョン1.4で追加され、Integer.valueOf(int i) は1.5で入ったみたい。なんで時間差があるんだろう。

Effective Javaの第2版発売日は明後日か。買わないと。

[java][db] Java DB の RUNTIMESTATISTICS を参照する

設定ファイルにderby.language.logQueryPlanを設定するとクエリープランをログファイルに出力できたが、SQLだけを使ってクエリープランを取得することもできたのでメモ。

Tuning Derbyというドキュメント内の How you use the RUNTIMESTATISTICS attribute にある通りだが、

CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1);
CALL SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING(1);
MaximumDisplayWidth 10000;

とした後で(MaximumDisplayWidthは5000だと入りきらなかったので10000にした)任意のSELECT文を実行し、続けて

VALUES SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS();

を実行すると logQueryPlan を設定した場合と同じような(完全に同じかどうかは未確認)結果が出力された。

[service] 新しいはてなブックマークがイマイチ

はてなブックマーク が新しくなったみたいなんだけど、以前よりJavaScriptを積極的に使っていて操作が分かりにくくなった。慣れれば大丈夫なのだろうけれど。

ただ、ブックマークを追加するための新しいブックマークレットが、ブックマーク対象サイトでJavaScriptをオフにしていると動かないようなのが困る。ああ、既に指摘されているのか。改善されるといいけど。

それから、ブックマーク編集画面を簡単に開く方法が分からない。一応、http://b.hatena.ne.jp/ でのJavaScriptをオフにすると「ブックマークを編集する」というリンクが現れてそこをクリックすれば開けた。JavaScriptオンだとリンクが見当たらないんだがおれだけなのか。

あと、「デザインの変更」機能も動かない。NoScriptのせいだろうなあ。デザインは変更しなくてもいいからあまり困ってないけれど。

タグ名を置換できるようになっていたのはありがたい。これは以前からできていたのかも。

(追記)

新しいブックマークレットにはセキュリティ上の問題があるとの指摘があった。

なるほど。はてな製ということで安直にパスワードを入力してしまった。「ブックマーク対象サイトでJavaScriptをオフにしていると動かない」という時点で何かおかしいと気付くべきだった。

この指摘を受けてか、はてブの ブックマークレットのセットアップページ の一番下に、古いブックマークレットへのリンクが追加されていた(ログインしないと見られない)。

やること

  • お香典
  • 洗顔
  • O2ケア

2009年11月25日(水)

[java] NetBeans 6.7.1でファイルの関連付けを変更する

UTF-8で書かれたpropertiesファイルをNetBeans 6.7.1で開くと文字化けしてしまう。propertiesファイル用のエディタはUTF-8を認識してくれないみたい。

なので、拡張子.propertiesに関連付けるエディタを変更しようとしたが、どうすれば変更できるのかがなかなか分からなかったのでメモ。

[ツール] --> [オプション] --> [その他] --> [ファイル]

と辿って表示される画面で設定できる。ひとまず.propertiesは「text/plane」に関連付けた。これでUTF-8のファイルが文字化けしなくなった。

[java] Unicodeエスケープはやめよう

未だにpropertiesファイルに日本語を書く際にUnicodeエスケープを使う人が多いみたいだけど、Java 6からはjava.util.Properties#load(Reader reader)を使えば文字エンコーディングを指定してpropertiesファイルを読み込めるので、みんなUTF-8とかで書けばいいと思う。


2013年11月25日(月)

[java] JInternalFrameの大きさ変更中はフレームのGlassPaneが可視になる

JInternalFrameを使っていて、

  • 内部フレームの縁をドラッグして大きさを変えようとするとフレームのGlassPaneが表示される

という現象に遭遇したのでメモ。Javaのバージョンは1.7.0_45。

javax.swing.plaf.basic.BasicInternalFrameUI.BorderListener のソースに、

                if (c instanceof RootPaneContainer) {
                    Component glassPane = ((RootPaneContainer)c).getGlassPane();
                    glassPane.setCursor(Cursor.getPredefinedCursor(
                        Cursor.DEFAULT_CURSOR));
                    glassPane.setVisible(false);
                }
                if (c instanceof RootPaneContainer) {
                    Component glassPane = ((RootPaneContainer)c).getGlassPane();
                    glassPane.setVisible(true);
                    glassPane.setCursor(s);
                }

というコードがあって、このせいみたい。マウスカーソルの形状を変更しようとしているのかな。

動作確認用のコードを示しておく。

import java.awt.BorderLayout;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class IFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                showFrame();
            }
        });
    }

    public static void showFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        // GlassPaneに不透明なコンポーネントを設定
        JLabel glass = new JLabel("GlassPane");
        glass.setOpaque(true);
        frame.setGlassPane(glass);

        final JDesktopPane desktop = buildDesktop();
        frame.add(desktop, BorderLayout.CENTER);

        frame.setSize(400, 300);
        frame.setVisible(true);
    }

    public static JDesktopPane buildDesktop() {
        JDesktopPane desktop = new JDesktopPane();

        JInternalFrame iframe = new JInternalFrame("hello", true);
        iframe.setSize(100, 100);
        iframe.setVisible(true);

        desktop.add(iframe);

        return desktop;
    }
}
  • 通常の画面

通常の画面

  • 内部フレームリサイズ中の画面

内部フレームのリサイズ中