zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2001年10月01日(Mon)

カナロック

なんか変だと思ったらカナロックが。ttssh経由のviだとかなり気づきにくい。

startx

Xが終了した後にコンソールに戻ったりコンソールにメッセージが残るのがセキュリティ上好ましくなさそうで嫌だったのでmkdir /tmp/$USER &&clear&&exec startx >|/tmp/$USER/Xstdout 2>|/tmp/$USER/Xstderrのように起動することにした。

State

case...whenで使えるかと思っていたら、Symbol#===String#===が呼ばれるのでだめだった。どうすればいいんだろう?

a2ps

-A fillを指定すると複数ファイルを同じ紙に印刷出来るらしい。

ruby

今実行しているrubyのパスはrequire 'rbconfig';puts File.join(Config::CONFIG['bindir'], Config::CONFIG['RUBY_INSTALL_NAME'])で取得できそう。


2001年10月02日(Tue)

ついにパチられました!

とりあえず動作確認リストがほしいのですが。手元でちゃんと確認できたのはWindows 95のNetscape 6.1のみ。IE5.5SP2はよくわからず。

もう一つ外にdivがあればanchor.parentElement.parentElementanchor.parentNode.parentNodeのようにして全体の背景色を変更できるんですが。

open3.rb

1.7では発生しない謎のIOError。以前にopen3.rbをいじったときも発生していた気がする。あの時に気が付いておくべきだったのかも…。open3.rbをいじっていろいろ試しているといつの間にか重くなってて気が付くとrubyがtopの上位に並んでいた。これもruby自体のバグだとしたら原因を突き止めておきたいけど再現条件がわからず。

本日のツッコミ(全21件) [ツッコミを入れる]

Before...

aldara [aldara http://pomm.a]

miss [internet advertising]

temporabla [oxycontin http://oxy]


2001年10月03日(Wed)

止まっているアンテナ

tDiary Official Siteのアンテナが2001/09/24でとまっているみたい。

謎のJavaScript

タイトルがどれも色付きになるということはfragmentがないということだと思うので、if ( ! fragment ) return;を追加。それから見つかった後もループを続けるのは無駄なので、if ( elem )にもreturnを追加。

returnがエラーになっていたので関数に変更。名前が…。

サーバ側スクリプトとクライアント側スクリプト

UAの依存を避けるにはJavaScriptでなくてもできることはJavaScript以外でするのがいいと思っているのですが、fragment(URLの#以降の部分)の扱いというのは普通はサーバ側には送信されないのでJavaScriptで処理するのが最適だと思います。 JavaScript以外でもできることの例としてありがちなのはリダイレクトですが、振り分けとしてはhttpヘッダのLocationで2分割、JavaScript、noscript、meta http-equiv refresh、というのがあると思います。これだけの方法で知っている限りでは4種類に分けられます。JavaScript対応の場合などでがんばればもっと分けられそうですが。
  • Locationで分岐
    Location非対応
    何?imodeとか?多分他のものも非対応だと予想。
    Location対応
    <script language="JavaScript">...</script><noscript><meta http-equiv="refresh" content="1;URL=..."></noscript>で分岐。
    • JavaScript対応。
    • noscriptでmeta http-equiv refresh対応。
    • meta http-equiv refresh非対応。
本日のツッコミ(全3件) [ツッコミを入れる]

ただただし [実はLast-Modifiedが変わってないだけだったりする。スーパーリロードしないといけないのだ(^^;]

ただただし [IE5.5SP2だと「'return'ステートメントが関数の外側にあります」というエラーになってしまいました〜。]

ただただし [直った直った。パチらせてもらいまっす]


2001年10月04日(Thu)

謎JavaScript(仮)。

名前募集。つか広めたもん勝ちらしい。急速に広まったようですが、どのバージョンが広まったんだろう?

対応ブラウザが増えたりもっと改良されたりして戻ってきたら面白いのに、と思っているんですが…。


2001年10月05日(Fri)

Tipsに謎JavaScript(仮)。

IEの範囲選択の都合で「。」がついただけなんですが(^^;。「モーニング娘。」と今は亡き(違)「何か(仮)。」だったか「何か。(仮)」だったか忘れましたが、そういうのとかを思い出して残してしまったのは事実ですが。

鱠に懲りてじゃなくてnamazuでもつかってみようかと思って@text_output = trueにしてみたけど、当たり前のように過去のものはテキストに出力されないまま。最初の設定は結構重要…。最初の設定と後からCGIで設定変更したものが食い違ってたところがあったので、バックアップの意味も込めて念のため設定ファイルの方も新しい設定に直しておいた。

とりあえず1日分だけで試してみようと思って試してみたがxreaのmknmzの使い方の説明が見つけられず適当にやってみたが失敗。

LIRS

データには、「,」を含めてはならない。通常、「,」を使わなければならない、という事例はあまり無いと思われるが、「,」を含める場合は「\,」としてエスケープすること。また、それに伴って「\」も「\\」としてエスケープしなければならない。とあるが、「\」の直後の文字が「\」でも「,」でもなかった場合の事については何も書いていない。

Just another Ruby porter,

Netscape 6.1でみると文字化けしていた。ひらがなだけだと文字コードの自動判別が難しい?

本日のツッコミ(全1件) [ツッコミを入れる]

りゅう [http://www.open-news.com/~maki/di/lirs.rb の作者も、その辺の仕様の不備で悩..]


2001年10月06日(Sat)

whatrequire.rb

requireで読み込まれるファイルを追跡。 あるスクリプトを他の環境に持っていくときに一緒に必要なファイルを探すために作ってみた。 requireの引数や$LOAD_PATHが動的に設定される場合は追跡できないけど。

#!/usr/bin/env ruby
 
class WhatRequires
  require 'rbconfig'
 
  def initialize
    @requires = {}
    @dlext = [Config::CONFIG['DLEXT']]
    unless Config::CONFIG['DLEXT2'].empty?
      @dlext.push Config::CONFIG['DLEXT2']
    end
  end
 
  def what_requires(filename)
    if @requires.key? filename
      return @requires[filename]
    end
    requires = []
    File.foreach(filename) do |line|
      if /\brequire\s+(['"])(.+?)\1/ === line
        file = required_file = $2
        extensions = []
        if /\.(rb|so)$/ === required_file
          if $1 == 'so'
            file = required_file.sub(/so$/, '')
	    extensions.concat @dlext
          else
            extensions.push ''
          end
        else
          extensions.push '.rb'
          extensions.concat @dlext.collect{|ext| '.'+ext }
        end
	found_libpath, = catch(:libpath) do
          $LOAD_PATH.each do |dir|
            extensions.each do |ext|
              libpath = File.join(dir,file+ext)
              if File.exist? libpath
                throw :libpath, libpath
              end
            end
          end
	  nil
	end
	if found_libpath
          requires.push found_libpath
	else
	  STDERR.puts "'#{required_file}' not found"
	end
      end
    end
    @requires[filename] = requires
  end
 
  def tree(filename, out=$defout, indent='', printed=[])
    return if printed.include? filename
    out.puts indent+filename
    printed.push filename
    if indent.empty? or not @dlext.find{|ext| /\.#{ext}$/ === filename }
      requires = what_requires(filename)
      requires.each do |filename|
        tree(filename, out, indent+'  ', printed)
      end
    end
    printed.pop if $VERBOSE
  end
end
 
if __FILE__ == $0
  if ARGV.empty?
    STDERR.puts "usage: #$0 filename"
  end
  whatreq = WhatRequires.new
  ARGV.each do |filename|
    whatreq.tree(filename)
  end
end
実行例:
% whatrequire.rb `which rd2`
/usr/bin/rd2
  /usr/lib/ruby/1.6/kconv.rb
    /usr/lib/ruby/1.6/i386-linux/nkf.so
  /usr/lib/ruby/1.6/optparse.rb
  /usr/lib/ruby/1.6/rd/rdfmt.rb
    /usr/lib/ruby/1.6/rd/tree.rb
      /usr/lib/ruby/1.6/rd/rdblockparser.tab.rb
        /usr/lib/ruby/1.6/racc/parser.rb
          /usr/lib/ruby/1.6/i386-linux/racc/cparse.so
        /usr/lib/ruby/1.6/rd/rdinlineparser.tab.rb
          /usr/lib/ruby/1.6/rd/parser-util.rb
          /usr/lib/ruby/1.6/forwardable.rb
          /usr/lib/ruby/1.6/strscan.rb
            /usr/lib/ruby/1.6/rscan.rb
            /usr/lib/ruby/1.6/i386-linux/cscan.so
      /usr/lib/ruby/1.6/rd/filter.rb
      /usr/lib/ruby/1.6/rd/document-struct.rb
      /usr/lib/ruby/1.6/rd/version.rb
    /usr/lib/ruby/1.6/rd/rd-struct.rb
      /usr/lib/ruby/1.6/rd/element.rb
      /usr/lib/ruby/1.6/rd/block-element.rb
        /usr/lib/ruby/1.6/rd/labeled-element.rb
      /usr/lib/ruby/1.6/rd/list.rb
      /usr/lib/ruby/1.6/rd/desclist.rb
        /usr/lib/ruby/1.6/rd/complex-list-item.rb
      /usr/lib/ruby/1.6/rd/methodlist.rb
      /usr/lib/ruby/1.6/rd/inline-element.rb
  /usr/lib/ruby/1.6/rd/visitor.rb
  /usr/lib/ruby/1.6/rd/rd2rmi-lib.rb
    /usr/lib/ruby/1.6/rd/rdvisitor.rb
      /usr/lib/ruby/1.6/rd/output-format-visitor.rb
        /usr/lib/ruby/1.6/rd/search-file.rb
      /usr/lib/ruby/1.6/rd/reference-resolver.rb
        /usr/lib/ruby/1.6/rd/rbl-suite.rb
          /usr/lib/ruby/1.6/rd/rbl-file.rb

div title

divをつけるのならDiary - Ancient libraryのようにtitleもつけるようにするといいのかもしれない。

謎JavaScript(仮)。

りゅうさんに教えてもらったparentElementとかparentNodeってJavaScript 1.3 リファレンスに載ってないけど何だろう?と思って調べてみるとDHTMLだったらしい。そこが古いNetscapeとかで対応されてない原因でしたか。スタイルの変更自体もDHTMLなのでどうしても古いブラウザは切り捨てになってしまうみたい。 調べ終わったのでRuBBS用謎JavaScript。完成。元記事のリンクをクリックした後リロードをしないと色が変わらないのがちょっとだめっぽい。 試してないけどonclick="javascript:nazo(self.hash.slice(1))")みたいにすればいいのかも。
<script language="JavaScript"><!--
function nazo(num) {
  if ( ! msgnum )
    return;
  for (i=0; i<document.anchors.length; ++i) {
    var anchor = document.anchors[i];
    if ( anchor.name == msgnum ) {
      var elem;
      if ( anchor.parentElement ) {
        elem = anchor.parentElement.parentElement;
      } else if ( anchor.parentNode ) {
        elem = anchor.parentNode.parentNode;
      }
      if ( elem ) {
        elem.style.background = "red";
        return;
      }
    }
  }
}
var query_str = location.search;
var num_start_pos = query_str.search(/[1-9]/); // 一番上の桁は0にならない。
var msgnum = query_str.substring(num_start_pos, query_str.length);
nazo(msgnum);
msgnum = location.hash.substring(1,location.hash.length);
nazo(msgnum);
// --></script>

謎の JavaScript。

別の実装を作った私が普段JavaScriptオフなんですが(^^;

名前は実はつか広めたもん勝ち(ぉだったりするとおもしろいかも。

ローカル変数のスコープ

勘違いしやすいポイントは2つ。
  • ローカル変数のスコープは最初に代入の式があったところ以降。実際に代入が行われるかどうかは無関係。
  • unlessなどの制御構造は新しいスコープを作らない。
わかりやすい例はfoo=true if foo; p foo #=> nil

proxy.pac

JavaScript勉強中ってことでProxy Client Autoconfig File Formatというのもやってみようと思ってみた。 今まではDHCPでLAN内部のDNSサーバを指定して、そのDNSにproxy.localを登録していた。 Super Proxy Script - How to make distributed proxy servers by URL hashingによるとIE5だとhttp://wpad.ドメイン名/wpad.datがあれば自動設定できるらしい。 ホスト名のみ(isPlainHostName)をアクセスできないようにしているのは間違いの場合が多いから。.netscape.comをアクセスできないようにしているのはただの例。

var reject = "PROXY localhost:9"; // discard
var localproxy = "PROXY proxy.local:3128";
if (isInNet(myIpAddress(), "192.168.1.0", "255.255.255.0")) {
    localproxy = "PROXY 192.168.1.2:3128";
}
var local_or_direct = localproxy+"; DIRECT";
var direct = "DIRECT";
 
function FindProxyForURL(url, host)
{
    if (isPlainHostName(host) ||
        dnsDomainIs(host, ".netscape.com"))
        return reject;
    else
        return localproxy;
 
    return reject; // fail safe
}
本日のツッコミ(全18件) [ツッコミを入れる]

Before...

dolores [oxycontin http://lin]

aldara [aldara http://pomm.a]

miss [internet advertising]


2001年10月07日(Sun)

onclick

document.links[i].onclick = handleLinkClickで後からでも設定できましたか。ではそういうことでこの日記のも更新してみました。変更すると対応ブラウザが変わってきそうな気がしますが大丈夫なのでしょうか?とりあえずIE5.5SP2ではちゃんと動きましたが、Netscape 6.1では元の背景色に戻りませんでした。

本日のツッコミ(全1件) [ツッコミを入れる]

りゅう [空文字列を設定するとどうなるのかの違いっぽいので、backgroundでなくてbackgroundColorにすれば..]


2001年10月08日(Mon)

onclick

onclickでリロードなしで色の付いているところを変化させるのはCGIでは無理そう。

http range

rubyで書くのならNet::HTTPも対応していたはず。

neu(ノイ)

ONO99なら知ってたけどUNOに比べて足し算が面倒なのではやらない気がする。

package version

rpm系だと元にしたRawhideが1.9-1なら1.9-1vl0のようにしているので、1.9-1.1のように小数をつければよさそうな気が。

Vineの場合だとVinePlusのパッケージはどんどん新しくできるけど、Vine本体にあったものは同じ名前で新しいのに差し替えはまずそう。

URLの無駄な部分

/.Jがわかりやすいのですが、記事毎のURLが普通は&mode=thread&threshold=でリンクされていることが多いです。コメントのカスタマイズで他の表示モードにしていると残念な思いをします。というかしています。

// -> /* */

複数行まとめて"abc\n// def\nghi // jkl\n // mn\n opq // rst\n".gsub(%r{//(.*$)((?:\s*//.*)*)},'/*\1\2 */')というのを思いついたけどわかりにくい。


2001年10月09日(Tue)

謎JavaScript

backgroundでなくてbackgroundColorにしてみたらNetscape 6.1でもIE5.5SP2でもうまくいきいました。

stone

stoneを使ってみた。-zをつけなくてもsslでつながったけど、鍵があった方がいいんだろうか?

sshでport fowardingは圧縮があるのとつないでいないときはfowardingされないlocalhost以外は転送されないなどの特徴があるので、今のところはsshで十分だと思った。

ruby-ext

[ruby-ext:01940] VisualuRuby SEGV (Windows Message Loop?)VisualuRubyの話がでているけどみられてないような気がした。

本日のツッコミ(全17件) [ツッコミを入れる]

Before...

aldara [aldara http://pomm.a]

miss [internet advertising]

cukimbo [aldara http://aldara]


2001年10月10日(Wed)

謎JavaScript(仮)。

ブラウザ毎の違いって難しい。DHTMLを使うのなら使うと言うことで古いブラウザは切り捨てて(エラーはでないようにするなどして)もっといろいろやってもいいのかもしれない。

Ruby-mswin32

compiled binary for Win32/DOSはobsoleteらしいのでリンク変更してみた。DOSは違う気がしたのでリンク先のtitle要素の中身をそのまま使ってみた。

VisualuRuby計画(仮称)

sourceforgeへのリンクのあたりのマークアップが変?


2001年10月11日(Thu)

謎JavaScript(仮)。最終形態。

カスタマイズ部分が一番上にまとめられてカスタマイズしやすくなってます。

それからfor (var key in style)というrubyでいうとstyle.each_key{|var|...}、perlでいうとfor my $var (keys %style)相当のループでカスタマイズしたスタイルだけ自動で復帰するようになったようです。

ここはbackgroundColorしか変えてないからこのままにしておく予定なので、新しいのはりゅうさんの日記から直接どうぞ。


2001年10月12日(Fri)

RD

RDってインデントが意味を持つというのがPythonぽい気がする。

clipfilter.rb

Apolloでこんなのを作ってみた。one linerでフィルタを書くような感じでクリップボードの編集をするためのスクリプト。
#!ruby -Ks
# clipedit.rb - clipboard filter
require 'phi'
form = Phi::Form.new
form.caption = File.basename File.expand_path $0
form.font.name = 'MS ゴシック'
# 基本メニュー。
Phi::new_menu(form, :main_menu, [
  menu_file = Phi::new_item('ファイル(&F)', '', :menu_file1).add(
    Phi::new_item('&GC.start', '', :menu_gc_start, false),
    Phi::new_line,
    Phi::new_item("閉じる(&X)", '', :menu_close1)
  ),
  menu_edit = Phi::new_item('編集(&E)', '', :menu_edit).add(
    Phi::new_item('&Eval', '', :menu_edit_eval, false),
    Phi::new_line
  )
])
form.menu_gc_start.on_click = proc do |sender|
  GC.start
end
form.menu_close1.on_click = proc do |sender|
  form.close
  exit
end
# clipeditから見えるようにグローバル変数。
$memo_code = Phi::Memo.new(form)
$memo_code.align = Phi::AL_CLIENT
$memo_code.scroll_bars = Phi::SS_VERTICAL
# 実行したコードと実行結果を$memo_codeで表示。
def clipedit(code)
  $_ = Phi::CLIPBOARD.text
  eval code
  Phi::CLIPBOARD.text = $_
  $memo_code.text += %Q[\n__END__\n#{$_}].gsub(/\n/,"\r\n")
rescue NameError,StandardError
  $memo_code.text += (%Q[\n__END__\n#{$!}\n] +
    $!.backtrace.join("\n")).gsub(/\n/,"\r\n")
end
#
## 普通のeval
form.menu_edit_eval.on_click = proc do |sender|
  clipedit($memo_code.text)
end
#
## この配列に追加
[
  ['URLdecode', :me_urldecode,
   %q{require 'cgi';$_=CGI.unescape($_)}],
  ['URLencode', :me_urlencode,
   %q{require 'cgi';$_=CGI.escape($_)}],
  ['unescapeHTML', :me_urldecode,
   %q{require 'cgi';$_=CGI.unescapeHTML($_)}],
  ['escapeHTML', :me_urlencode,
   %q{require 'cgi';$_=CGI.escapeHTML($_)}],
  ['escapeHTML without &&"', :me_urlencode_without_quot,
   %q{gsub!(/&/,'&');gsub!(//,'>')}],
].each do |menu_str,key,code|
  menu_edit.add Phi::new_item(menu_str, '', key, false)
  eval %[
    form.#{key}.on_click = proc do |sender|
      $memo_code.text = #{code.dump}
      clipedit(#{code.dump})
    end
  ]
end
# メインループ
form.show
Phi.mainloop

screen

デタッチしてアタッチするのはscreen -rdではなくscreen -drの順番じゃないとだめだった。


2001年10月13日(Sat)

イントラネットゾーンのセキュリティ

まともな企業やセキュリティに気をかけるユーザは当然インターネットゾーンはガチガチに設定してあるだろうが、イントラネットゾーンはデフォルトのままという場合も多いだろう。

MUAのセキュリティホールを初めてみたときにイントラネットゾーンって普通は使ってなくて、セキュリティホールとしてしか使われそうになかったのでインターネットゾーンよりもきつくした覚えが。

\<!--...-->

\<!--...-->って誰が最初に始めたんだろう?

キャッシュ

トラフィックを減らすために使っているキャッシュ(プロキシ)がキャッシュすべきでないものまでキャッシュしてしまって、リロードしまくることによって逆にトラフィックが増えてしまうという罠。ちゃんとしたHTTPヘッダを出してくれればこういうことは起こらないはずなんですが、理想と現実の差が。


2001年10月14日(Sun)

CGI::Cookie

Cookie対応じゃなかったスクリプトを対応させるのに使ってみた。CGI#outを使っていないスクリプトだったので、自前でSet-Cookieを出力しておいた。

cookie = CGI::Cookie.new('name'=>'bbs','value'=>bbs,
  'expires'=>Time.now+60*60*24*30).to_s
puts "Set-Cookie: #{cookie}"

JBuilder5

入れてみたけどメモリが少ないので重すぎた。


2001年10月15日(Mon)

irbでautoload

いいなと思ったのでautoload listというのを作ってみた。


2001年10月16日(Tue)

truncate

sudo cp /dev/null /var/log/hoge (owner, permission を保存してファイルサイズを 0 にする)をみて、: > /var/log/hogeでもできそうと思った。

謎JavaScript最終形態の使い方

完全に元に戻すにはvisitedStylenullにしてsaveStyleが使われるようにすればいいと思うのですが。


2001年10月17日(Wed)

<<

<<の引数に文字列リテラルを使おうとしてスペースを入れずに書いたらhere documentになってはまった。


2001年10月18日(Thu)

PGPdisk

PGPdisk内にPGP秘密鍵を隠す

WindowsにはPGPdiskがあるけどLinuxとかではどうすれば?


2001年10月19日(Fri)

dW : Usability : 気難しいユーザー: URLをアクセスしやすくする

ほとんどの日記システムのつけるフラグメントは日付とその中で何番目かを表す数字がほとんどで内容を表していない。だからたとえばここの場合は#p01-URLのように内容を表すものをつけたいと思うんだけどそういう機能がついた日記システムは見覚えがない。

本日のツッコミ(全1件) [ツッコミを入れる]

ただただし [内容をつけるなら数字は冗長でイヤかな。でもそうするとIDを人が管理する必要が出てくるし……。]


2001年10月20日(Sat)

日記のURL

数字は冗長なら重複があったときだけ数字がつくとか。

NetscapeとかMozillaとか

Netscape 6.1ってHTMLを読み込めてもimgで指定された画像が応答無しで読み込めないと全く表示してくれないのが困る。HTML自体が読み込めないときはエラーになるのに。

Mozilla のカスタマイズってNetscape 6.1でも使えるのかどうかが気になるところ。


2001年10月21日(Sun)

セキュリティホール

詳細は公式サイトから発表があってからということで伏せておきますが、みつけた時は超びっくり。報告しつつ自分のところは仮対策してから、本格的な修正をIRCで話し合ってました。

記事: 「ワームのコードを公開するな」これって正論?という話もあるので公開の仕方は難しいところ。

rpmLabelCompare.py

2引数でも比較できるようにしてみた。

#!/usr/bin/python
# rpmLabelCompare.py - rpm label compare script.
#
# Copyright (C) 2001 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
#     All rights reserved.
#     This is free software with ABSOLUTELY NO WARRANTY.
#
import rpm, sys
if __name__ == '__main__':
  if len(sys.argv) == 7:
    h1 = sys.argv[1:4]
    h2 = sys.argv[4:7]
  elif len(sys.argv) == 3:
    h1 = ("dummy", sys.argv[1], "0")
    h2 = ("dummy", sys.argv[2], "0")
  else:
    sys.stderr.write("usage: " + sys.argv[0] + " name1 ver1 rel1  name2 ver2 rel2\n")
    sys.stderr.write("   or  " + sys.argv[0] + " ver1 ver2\n")
    sys.stderr.write("example: " + sys.argv[0] + " man 1.5i 10vl1.2 man 1.5i 10vl1\n")
    sys.stderr.write("         " + sys.argv[0] + " 40.1vl1 40vl2\n")
    sys.exit(-1)
  ret1 = rpm.labelCompare(h1, h2)
  ret2 = rpm.labelCompare(h2, h1)
  if 0 == ret1: # a and b are the same version
    sys.stdout.write(" == ")
  elif 0 < ret1 and ret2 < 0: # a is newer than b
    sys.stdout.write(" >> ")
  elif ret1 < 0 and 0 < ret2: # b is newer than a
    sys.stdout.write(" << ")
  elif 0 < ret1 and 0 < ret2: # a is less older than b
    sys.stdout.write(" >< ")
  elif ret1 < 0 and ret2 < 0: # b is less older than a
    sys.stdout.write(" <> ")
  else: # bug?
    sys.stdout.write(" !! ")
  sys.stdout.write("\n")

セキュアWebプログラミング ASP編 Part 1

クロスサイト・スクリプティングはtext/plainにすれば…と思ったけどIEってContent-typeを無視してしまうことがあるから関係ないかも。

タグ禁止問題

  1. 禁止を列挙する方法だと将来禁止しないと危険な要素が増えたときに変更が必要になるので、許可するのを列挙するのが基本だった。
  2. ところがstyle属性やJavaScriptでonで始まるいくつかの属性がでてきてタグによる禁止や許可だけでは対応できなくなって困ったことになった。
  3. ところがそれだけでは不十分でjavascriptスキーム(っていうの?)によるscriptもあってさらに困ったことに。

解決方法の例

  1. サーバ側に問題のないデータはすべて許可してしまう。クライアント側はクライアントでなんとかしろ、という方針。closedな掲示板とかならこれでもいいかもしれない。
  2. 必要に応じて許可しておく。新しい仕様が出来て今許可しているものが許可しすぎになっていないか常に気にする必要がある。
  3. 全面禁止。URLと見なせるものは勝手にリンクにするなどの機能を併用。目的によっては不便。

入力チェック

クライアントからの入力はすべてサーバ側でチェックしなければ危険。maxlengthも仮定できないし、選択肢にないものが選ばれたものとして送られてきているかもしれない。ここまでは常識と思ってほしいところ。

さらにcookieだってサーバから送ったものだけが送り返されるわけじゃないし、UAの文字列にだってタグが入っているかもしれない。

UAの文字列にタグが入っていると脆弱なアクセスログCGIでログをみたときにおもしろいことになる。


2001年10月22日(Mon)

RWiki

昨日の話の続き。[ruby-list:31979]参照。

インストール記録

たんなるメモ。

ハードディスクがSCSIのみのマシンにDebian系のディストリビューションを入れてみた。再起動するとルートが見えなくてkernel panic。SCSIがみえないらしい。CDから起動し直して、適当にカーネル再構築して再挑戦。パッケージ足りなくて止まったので追加してまた止まったので追加してとどんどん入れていって再構築完了。再起動。SCSI認識。SMPじゃないのにSMPになってしまってた。とりあえずaptと思ったらネットワークにつながらない。ネットワークカードのチェックが入ってなかったらしい。再度再構築。今度は/boot/config-2.2.19をコピーして残しておいたのを使ってみたら、またSCSIを認識しなくてkernel panic。rm .configしてから必要なところだけチェックしていって再構築。起動。ちゃんとSCSIもネットワークカードも認識。設定に入る。他のマシンからsshでログインできる環境を整える。nmapで確認すると必要のないポートがあいていたので、inetd.confの設定を変更して閉じたところでとりあえず終わり。インストール途中でもNimdaのアクセスがあった。インストールするときは直接インターネットにつながっている環境ではなくproxy経由でaptを使う方がよかったかもしれない。

「URLを見やすくする」

という題名になったらしい。

headingを付ける形式の日記ならそのheadingの中身をローマ字でもいいのでURLにしてしまえばいいと思うのですが。つけた方がいい理由はURLだけでも内容がわかりやすくなるから。メールだとURLだけになることもあるだろうし、リンク先が移転したり無くなったりした時でも残ったURLで少しは内容を想像できるし。


2001年10月23日(Tue)

環境変数

sudo /etc/init.d/apache restartだとコマンドラインの環境変数が残っていたのでsudo su -c '/etc/init.d/apache restart'で再起動し直したらまだ残っていたのでsudo /usr/bin/env - /bin/su -c '/etc/init.d/apache restart'で再起動。


2001年10月24日(Wed)

サーバダウン?

昼間につながらなくて驚いたけど復旧してるみたい。


2001年10月25日(Thu)

Maildir

Maildir形式なら/がついてないとだめのはず。/なしだとMailbox形式で書き込もうとしてディレクトリがあるから失敗しているのではないかと。


2001年10月26日(Fri)

「URLを見やすくする」

日記以外であれば検索のURLを示すというのも一つの手かも。」というのは「btnG=Google+%8C%9F%8D%F5」がついてたらGoogleツールバーを使った(だっけ?)という情報がついてるとかそういうことが気にならないかちゃんと削除してからURLを示せるのならよさそう。

環境変数展開

ruby-bugs-ja:PR#119を試そうと思ってDOS窓でruby -ve "t=Time.now;p t.strftime('%A');require 'gtk';p t.strftime('%A')"とやってみたら環境変数展開で%%が消えてしまって"A"と表示されて悩んでしまった。

2MBメール

削除された[ruby-dev:15005]が添付ファイルで2MBもあって、キューから削除されてruby-* MLに128KB制限がついた。

@nifty:セカンドメールは「メールの保存容量:通数に関係なく20MB」なので容量的には余裕だったみたいだけど配送されたのは[ruby-dev:15006]の15:47より後で16:15頃だったということでruby-lang.orgのメールサーバは大変だったみたい。

セカンドメールの「1通の最大容量:5MB」っていうのが送信だけか受信も含めてなのかは不明。


2001年10月27日(Sat)

Control+Alt+Escape

VNCの中でVMwareを起動していたらControl+Alt+Escapeを押してもスタートメニューが開いてVMwareからフォーカスをはずせなくて困った。仕方がないのでhaltした後killしたけど。

challenge認証

本当はどういう名前なのか知らないのですが、APOPのようにchallengeとユーザが入力したパスワードからJavaScriptなどを使って計算した文字列をネットワークに流すようにすればパスワードをそのままネットワーク上に流すよりも少しだけましな認証が出来そうな気がした。最初の認証だけということでTCPでずっとつながったままのAPOPに比べると2度目以降の接続でもまたJavaScriptなどで計算させるかCookieで別の確認手段を何とかするかしないといけないと言う問題があるけど。

alib

~/binってCVS管理してるけど。

なんか変だと思ったところ。変わり目とすべて<span class="update"> <span class="lastupdate">10/12</span></span>になっているところ。10/12より後にも更新されてるみたいなのに。

Message-ID

とりあえずホスト名をそのまま使うのなら.無しかどうか(localhostやFQDNでないものをはじく)とか、IPアドレスを使うのならプライベートアドレスかどうかぐらいはチェックしてほしいと思った。


2001年10月28日(Sun)

/win|mingw/ === RUBY_PLATFORM

mingw版にはwinって入ってないからWindowsかどうかを判定するのは/win/だけじゃダメ。たとえばext/tcltklib/extconf.rbでは/mswin32|mingw|cygwin/で判断している。


2001年10月29日(Mon)

Meadow

Meadow-1.14を入れてMakefile.pkgとcygwinのmakeなどを使ってmake updateした後make pkg-installしてもうまくいかなかったのでMakefileをみてみるとMEADOW_VERSION=1.15とあったので1.14になおしてEMACS=の行もMeadowNT.exeの方をコメントアウトしてMeadow95.exeの方を有効にしてもう一度make pkg-installしてみた。

X-Face

X-Faceを表示させようといろいろがんばってみるがWanderlustの起動時の画像とともに半角豆腐(謎)に化けてしまう。設定によっては「There's no room for a new private charset bitmap」とでてメッセージが開けなくなるし。というわけでX-Faceの表示はとりあえずあきらめた。

X-Face

bitmap-muleのbdfフォントが入っていなかったのが原因だったので、bitmap-muleを参考にしてmake bdfでbdfファイルを作成してintlfonts-1.2/Miscにコピーした。それからフォントの設定(c) 設定例を元にして赤字のディレクトリの設定のところを変えて、他にMisc/etl8x16-bitmap.bdfMisc/bitmap16.bdfに、European/etl16-latin1.bdfEuropean/lt1-16-etl.bdf(16bと16iと16biも同様)に、Japanese-XJapanese.Xに変更して使ったらwlのロゴやX-Faceがちゃんと表示された。


2001年10月30日(Tue)

how to use wl-folder-hierarchy-access-folders

うまくいかないなと思ったら/が必要だったらしい。

require 'mathn'

mathnやjcodeのようなよく使われるクラスを変更する標準ライブラリの影響はライブラリを作るときに是非チェックしておきたいところ。

trimmer

一番少ない先頭の空白を探すのがポイント?

とりあえずタブは無視するとclass String;def trim;size=scan(/^\s+/).collect{|x|x.size}.min;self.gsub(/^\s{#{size}}/,'');end;endという感じかな。


2001年10月31日(Wed)

qmail-inject

qmail-injectへの入力の改行はCRLFじゃなくてLFのみじゃないとまずかったらしい。


copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73