メモの日々


2001年04月06日(金) さっぱり起きれなくなった

森田実なんて知りません。政治評論家のようですね。

NWSKSを納品した。サーバといってもサーバではないのよ。ほっと一息。

一息ついたら夜になっている。今日は他に何をしたのかな。

月曜日はTISNでPalmクライアントの試験だ。

社長がE707を使うんですって。これをきっかけに流行るといいのですが。


2003年04月06日(日) 加藤大治郎転倒し重傷

[soft] OpenOffice.org ユーザーのためのMicrosoft Office 互換性研究室

今のところExcelとCalcの互換性についてだけ公開されている。OpenOfficeユーザー会MLより。

[web] RSS関連

はてなに回答するためRSSについて調べたので忘れないようメモ。

[tdiary] カテゴリ別表示用のフォーム

カテゴリ別一覧表示ページの上下についているフォームをサイドバーに表示したくなって調べた。ドキュメント内にはやり方を見つけることができなかったが、きたさんの日記に「category_form」という文字列を見つけたので「<%=category_form %>」と書いてみたら表示された。最初からcategory.rbを読めばすぐ分かったのかも。

[tdiary] レイアウトが崩れる

その後日記用のcssを少しいじった。で、普段使っていないIE6で見てみたら日記本体とサイドバーの間がやけに開いていることを発見してしまった。cssの書き方が悪いのだと思い色々色々色々色々試したけれども改善しない。

で、下スクロールしてみたらある日付を境に日記のレイアウトが崩れているのが原因であることを発見した。なぜそこでレイアウトが崩れるのか調べたところ、本日のリンク元にあるmsnからの検索結果へのリンクをIEが不正に解釈してしまっているのが原因のようだった(Mozillaではレイアウトは崩れない)。

で、最近プラグイン集に追加されたreferer-utf8.rbを使えば直るかと思いトライ。Uconvモジュールが要るとのことなのでこれをコンパイルしxreaへアップロードしたが

Plugin Error
Errors in plugins? Retry to Update or Configure.
    TDiary::PluginError
    Plugin error in 'referer-utf8.rb'.
    (eval):18:in `require': libruby.so.1.6: cannot open shared object file:
         No such file or directory - /virtual/ogawa/public_html/tdiary/uconv.so

というエラーになってしまう。ファイルのパーミッションが怪しいと思ったけれどおかしなところは無いように思う。アップロードはバイナリモードで行っているしuconv.soはローカルでは使えるのにー。

解決できないのでreferer-utf8.rbは諦め、.tdrファイルから不正なリンク元を削除してmsnの検索結果をリンク元除外リストに登録することで対処した。むー。

[web] IEのレンダリングのバグ?

ほかにもIE6で表示がおかしいところないかと見てたら、またありましたよ。今度はblockquoteの後ろでレイアウトが左にずれてしまっていた。ずーっと調べ、結論、IEがおかしい。

IE6では次のHTMLを開くと3行目の「こんにちは」が左にずれてレンダリングされてしまうようだ。

<html>
<head>
<title>IE6だと左にずれる</title>
<style type="text/css">
	div.hoge {
		border-style: solid;
		border-width: 0 0 0 20px; 
		padding: 20px;
	}
</style>
</head>
<body>
<p>こんにちは</p>
<div class="hoge">
	<p>さようなら</p>
</div>
<p>こんにちは</p>
</body>
</html>

どうも、ブロックレベル要素がネストしているときに外側のブロックレベル要素の左側だけにborderを描くとレンダリングが狂うようだ。次のようにすると直る。

  • 「border-width: 0 0 0 20px;」の部分を「border-width: 0 0 1px 20px;」に変えると左にずれなくなる。これ
  • 「さようなら」を囲う<p>タグを書かないと左にずれなくなる。これ

Mozilla1.2.1だとどれも正常にレンダリングされる。つまらないことを調べるのに時間を使ってしまった。

やること

  • 退職後の手続きをまとめる
  • クリーニング屋へ行く
  • 風呂場の掃除
  • シャンプー・ボールペン・座椅子買う
本日のツッコミ(全4件) [ツッコミを入れる]

しみず [5日以前と6日では文字のサイズが違うみたいだけどわざとですか?]

小川 [わー、またレイアウト崩れてました。msn検索結果の除外がうまくいっていなかったので修正しました。ご指摘ありがとうござ..]

きた [カテゴリ関連のドキュメントが充実してないのは完全に私の怠慢です.スミマセン.]

小川 [いえいえ、カテゴリ機能ありがたく使わせていただいてます。]


2004年04月06日(火)

  • PCを2台追加。これで机の周りで8台のPCがネットワークで繋がる。何がなにやらわからん。
  • PC1台はハードディスクが壊れているので新しいディスクを取り付けた。こういうの苦手。
  • 更にCDROMも壊れているので久しぶりにフロッピーディスクを使ってFreeBSDのインストール。
  • カーネルのコンパイルたくさん。アプリケーションのコンパイルもたくさん。疲れた。
  • わーい、end to endで開通したー。でもまだインチキな開通だ。Nくんに聞かないと分からないので今日はこれで終わり。
  • 机の上がケーブルだらけで物を置けない。配線も苦手。

[soft] フリーエディタ17選! (クールなツール)

各エディタのスクリーンショットがあるのがよい。ぼくはJmEditorとサクラエディタを使っています。JmEditorの左パネルは便利。新・たけぞう瀕死の日記より。

[dev] フリーソフトウエアのライセンス

ライセンスについての修士論文の翻訳らしい。原文はNot Found。1999年の文章。航海日誌より。


2005年04月06日(水)

  • 復活した。

[web][security] 「URLに埋め込むIDに頼ったセッション管理方式の脆弱性(2)」 (SecurIT)

SecurITで3年振りに脆弱性勧告が公開されていたのでなんとなくメモ。内容は目新しくはなく、URLにセッション情報を含めてはダメという話。2001年にまとめた内容をやっと公開したという感じ。

III-5. cookie拒否時のセッション管理方法の自動切り替えの問題

JavaやPHPなどによるWebアプリケーションサーバ製品(セッション管理機能を提供する)の一部では、ユーザがセッションIDのcookieの受け入れを拒否した場合に、自動的に、URLにセッションIDを含める方式に切り替えるものがある。この場合、cookieを拒否しているユーザは、Referer:によってセッションIDが漏えいする危険にさらされることになる。Webサイト構築者は、こうした機能が働かないよう設定した方がよい。

この仕様に対する対策は忘れやすいかも。

[java] Java Updateが動いた

タスクトレイに見慣れぬアイコンがあったので見てみたらJava Updateだった。使ってみようと思いアップデートを実行してみた。

なんかJREとして 1.5.0_02-b09 がインストールされたみたい。でもJDKの方は新しくなっていないみたい。JDKの方はアップデートできないんだろうか。

やること

  • リンク元のスリム化
  • tDiaryバージョンアップ
  • FSWikiバージョンアップ
  • オーブンレンジ用べんり棚
  • ブラウンの安い電動歯ブラシ買う
  • 蛍光灯を捨てる

2016年04月06日(水)

[c++] C++で型名と変数名を同じにしてみる

C++で型名と変数名を同じにしたいときにどうするか。

サンプルコード

次のように、クラスouter内にinnerと言う名前のクラスとメンバ変数を両方定義してみる。

#include <iostream>

struct outer {
  struct inner {
    void f() { std::cout << "hello" << std::endl; }
  };

  inner inner;
};

int main() {
  outer::inner a;
  a.f();
}

このコードはコンパイルエラーになる(g++ 4.8.5を使用)。main()内の「outer::inner」はクラス名ではなくメンバ変数名と解釈される。

次のように struct を補うとコンパイルできるようになる。

int main() {
  struct outer::inner a;
  a.f();
}

別名を使う

struct outer::inner は長いので、エイリアス宣言を使って別名を定義してみる。

int main() {
  using in = struct outer::inner;
  in a;
  a.f();
}

このコードは動作するが、g++は

warning: declaration 'struct outer::inner' does not declare anything [enabled by default]

という警告を出力する。とはいえ、structを省いて「using in = outer::inner;」と書くとコンパイルできない。警告が出るのはg++のバグである気がする。clangを使うと警告は出力されない。

試しにstructの代わりに「using in = typename outer::inner;」とtypenameを書いてみたら、g++ではコンパイルできた。しかし、clangではコンパイルエラーになる。この書き方は不正なのだろうと思われる。

g++でもclangでも警告なしにコンパイルするには、エイリアス宣言ではなくtypedefを使えばよい。

int main() {
  typedef struct outer::inner in;
  in a;
  a.f();
}