各都道府県の条例リンク集

必要になったので。都道府県コード順。
参考情報は例規集へのリンク元など。適宜更新。

Firefox だと沖縄県警サイトが悲惨になる件について

Firefox沖縄県警のサイトを見てみましょう。たぶん悲惨なことになっていると思います。縮小キャプチャを以下にあげておきます。


▲左:Firefox3 右:IE7 (沖縄県警のサイトTOPのキャプチャ(部分・縮小))
IE など他のブラウザだとキレイに見えるのに、なぜ Fx では悲惨なことになるのでしょうか?

原因の推測

スタイルシートの指定の仕方が原因かと思います。ソースを見てみます。

<link rel="stylesheet" href="css/import.css" type="text/css" media="print" />
<link rel="stylesheet" href="css/import.css" type="text/css" media="screen" />

このように同じファイル(import.css)を2度指定しています。指定されている import.css を見てみましょう。大変短いので全文引用します。

@charset "utf-8";

@import url(reset.css);
@import url(base.css);

import.css 本体ではスタイルの指定はせず、詳細が記述されている reset.css と base.css を呼び出しているだけとわかります。そしてこの @import が今回の惨事の原因です。
Firefox においては、同じ CSS ファイルを 2 回指定したとき、 1 回目は import されますが、 2 回目は import されないようです。

ですから実は

沖縄県警のサイト、崩れて見えていましたが、実は印刷すればきれいに見えます。1回目の import.css の呼び出しは、印刷用スタイルシートとしての指定だからです。CSS 指定部分のコードを再掲しておきます。

<link rel="stylesheet" href="css/import.css" type="text/css" media="print" />
<link rel="stylesheet" href="css/import.css" type="text/css" media="screen" />

一度目の media="print" での import.css の読み込みでは、実質のスタイル指定が記述されている reset.css も base.css も import されます。なので、印刷して閲覧するか、そこまでしなくても印刷プレビューで閲覧すれば整った状態で見えます。
しかし、import.css の2度目の読み込みとなる media="screen" では import されません。なので import.css は実質

@charset "utf-8";

となり、スタイルを何も指定していないことと同じになってしまいます。ですから、悲惨な見栄えになってしまうのです。

解決策1

CSS の指定を次のようにまとめる。

<link rel="stylesheet" href="css/import.css" type="text/css"
      media="print,screen" />

一度に指定してしまえばどうということはありません。

解決策2

import.css と全く同じ中身で import_print.css と import_screen.css を作成する。

<link rel="stylesheet" href="css/import_print.css" type="text/css"
      media="print" />
<link rel="stylesheet" href="css/import_screen.css" type="text/css"
      media="screen" />

中身は全く同じでも、指定するファイルさえ異なればどうということはありません。

それで・・・

専門家じゃないので、同じファイルを 2 度指定することが悪いのかどうかわかりません。サーバにやさしくなさそうなのはわかりますが。
なので、問題が起こる Firefox の実装が悪いのか、サイト作成者がアレなのかわかりません。
こういう時ってどうするのがいいのかわからないので、はてダで晒してみることにしました。

追記

「2度目だとスタイルシートの指定が無効」と書かずに、import されるとかされないとかいう書き方をした件について、多少補足。
今回のような 2 重指定の場合、本当に import だけが期待通りに動かない。たとえば、今回 2 回指定されている import.css の中身が

@charset "utf-8";

@import url(reset.css);
@import url(base.css);
body{
    text-align: center;
}

のような場合、

body{
    text-align: center;
}

の部分は 1 度目(今回の例で言えば print)、 2 度目 (screen) の指定どちらでも有効。@import 〜 の部分だけが、2度目だと無視されているようだ、ということです。
なので、「2度目のスタイルシート指定は無効」とは書けず、「import はされない」と書いた次第です。

日進市立図書館は努力家である件について

ちょっと前にホッテントリに入ってた、日進市立図書館Amazon アフィリエイトについて。

今さら反応してアレだけど、さっき過去のホッテントリチェックしたんだから仕方がない。
私が知っている日進市立図書館の努力について。
Amazon Web Services Developer Community : 紹介料について ...より一部引用:


紹介料について
Posted: Oct 11, 2008 11:40 PM PDT

アフィリエイトの紹介料に関する質問です。
現在、アフィリエイトのリンクを張っていますが、クリック数や、注文数がカウントされません。
リンクを張っている場所へのアクセス方法は以下のようになります。
1.http://lib.city.nisshin.lg.jp/ にアクセスする。
2.フレームの左側の蔵書検索欄に書名を入力し、検索する。
3.フレームの右側に表示される検索結果一覧からタイトルをクリックして、詳細画面を表示する。
4.詳細画面の左側にアマゾンへのリンクを用意しているので、そのリンクをクリックする。
5.カートに入れて購入する。
以上のような手順です。

これは Amazon Web Services (AWS) のディスカッションボードの一記事だ。AWS にはクラウド・サービス (Amazon EC2) なんてのも含まれるが、日本語フォーラムはほとんど A2S (Amazon Associates Web Service) がらみの質問ばかりだ。つまり、アフィリエイト関係。
そんなところで、地方公共団体を示す「lg.jp」のアドレスを見て興奮しなかったといえばウソになります。だけどすぐに「公立図書館も予算的に大変なんだろうなあ、そんななか、こうやって努力してるんだな」と肯定的にとらえ、興奮した自分を恥ずかしく思ったものです。公がアフィって何が悪い。全国の図書館は見習うべきだとさえ思いました。*1
図書館がより市民にサービスできるよう、アフィリエイト収益を利用するのはいいと思います。蔵書増やすのにもカネはかかるので。地元の本屋の反応が気になるけどね。
あ、注文つけるとしたら、「アフィリエイト収益が何に使われる予定か」をサイト内に記述してほしいかも。図書購入費に充てられます、とか書いてあったら応援する人も出てくるんじゃないかな。

とここまで書いて

続き記事に気づいた。
論議となりそうだ」ってのは、公がアフィとはけしからん!みたいな話かと思っていたら違ったのですね。何故 Amazon を利用するか、が問題か。
現状だと A2S が一番敷居が低いから利用したんじゃなかろうか。実験的に始めるなら、参加しやすく脱退しやすい方がいい。「とりあえず」始めてみるには Amazon アソシエイトは最適だと思う。個人サイト規模からニコニコ動画規模まで使用実績があるので、サイト規模によらず利用できる、とわかっているのもありがたい。
で、しばらくはこのまま続けていいと思う。おそらくは 10 月ぐらいから始めた Amazon でのアフィリエイトをしばらく続け、様子を見てから広告枠を売りつけを検討しても遅くはないと思う。

*1:個人で着服してるなら、話は別だ。マイレージ貯める、みたいなかわいさじゃないから

はてなの犬も楽じゃないね

申し訳ございません、サービス一時停止中です ただいまプログラム入れ換え作業中、もしくは不具合の発生により一時的にご利用いただけない状態となっております。ご迷惑をおかけし申し訳ございません。お手数ですがお時間をおいて再度接続をお願いいたします。 なお、メンテナンス、障害に関する情報は障害・メンテナンス情報にて公開しております。併せてご確認ください。

はてなキーワードにて。今度は一時利用不可ですか。
しなもんはかわいいので好き。だから謝ってるしなもんはあんまり見たくないんだよね。

はてなの犬が正直に「混雑中」と言ってくれた

メンテナンス中とかウソ言わなくなってた。

申し訳ございません、ただいま大変混み合っております ただいま一時的なアクセス増加により大変混雑しており、接続しづらい状態となっております。ご迷惑をおかけし申し訳ございません。お手数ですがお時間をおいて再度接続をお願いいたします。 なお、メンテナンス、障害に関する情報は障害・メンテナンス情報にて公開しております。併せてご確認ください。

Google Sites で本名バレしないためのメモ

無料で簡単にウェブページを作成、共有できるというGoogle SitesGoogle Maniaさんによれば、日本語対応したようです

さて、Google Sites で作ったページでは本名が公開される、というブログ記事をみつけました。

これは2008年9月の段階であり、英語版であったと思うので、改めて確認してみました。結果からいえば、今も変わっていませんでした。

ということで、もしかしたら常識なのかもしれませんが、本名晒し関連のメモをおいておきます。

アカウントの設定によっては本名が晒されます

作成したページはデフォルトでは公開に設定されます。そして、デフォルト設定で作成したページには、ページの更新履歴が表示されるようになっています。
この部分には、作成・編集した人の名前が公開されます*1。この名前部分、本名が公開されることがあるので注意が必要です。
https://www.google.com/accounts/ から「個人情報」という項目の「編集」をクリックすると、 https://www.google.com/accounts/EditUserInfo に飛びます。ここで設定した「姓」「名」が名前として使われるようです。これが本名であった場合、全世界に本名が公開される、ということです(公開ページの場合)。
なお、姓名を設定しなかった場合(gmailを利用していないなどで、姓名の設定が必須で無い場合がある)、登録したメールアカウント(@マーク以前)が使用されるようです。

更新履歴欄の晒され方

▼ページ作成例(アカウントは検証のため新に作成したもの。アカウントの設定:メールアドレスはninjya @ onsen.hot.jp。姓名設定せず。)

▼作られたページ

▼上の一部拡大。メールアドレスの前半が表示されている

コメントの晒され方

作成したページに編集者がコメントをつける機能があるのですが、コメントをつけた場合も名前が表示されます。ただし、メールアカウントは全て表示されるようです。
▼先ほど作ったページにコメントしてみた。メールアドレスフル表示。

ニックネーム

アカウントにはニックネームを設定することが出来ますが、 Google Sites では無視されるようです。

アカウント設定の変更はどう反映されるか

コメントに関しては、過去に遡って変更が反映されるようですが、ページの更新履歴に関しては過去に遡らないようです。以下実験結果。
▼さっきのアカウントの姓名を変更した(性別、になってるのはご愛嬌)

▼その後、コメントを追記した。過去のコメントの名前(フルのメールアドレス)も変更された。

▼そのときの更新履歴。最新コメントの名前は変更後のものだが、以前のものは変更されず。

▼なお、更新履歴をすべて表示するとこうなる

▼拡大

何件保存されるかわからないが、トップページに表示されるものより件数は多いようだ。

対策(アカウント設定)

アカウントの姓名欄にはバレてもよい名前を設定する。メールアドレスが公開されるのがイヤなら空欄不可。
偽名を使うのが嫌な人は、コメントを利用しない。このときの更新履歴対策については次項。

対策(更新履歴)

更新履歴を表示しないデザインにする。
▼編集画面から、サイトの設定 > デザインの変更 を選択

▼サイドバーから最近の更新履歴を削除

▼削除されたのを確認したら保存

▼確かに消えた

▼更新履歴を非表示とすれば、更新履歴全表示のURLにアクセスしても拒否される模様

Google さんへ

ニックネームを設定したら、ニックネームを優先して表示するようにしてください。

追記

なお、試しに作成したサイトはすぐに削除しています。

*1:ログイン状態によらず

ad4U と cookie と バグ

ad4U の隠しリンクを表示させるグリモン書いてから、サルのようにinfoseekニュースにアクセスしまくって気づいたんだけど、どうも cookie を許可しないと ad4U が動いていないっぽい。
そこで、http://news.www.infoseek.co.jp/ にアクセスするといろいろとダウンロードされるファイルのうち http://grp01.ias.rakuten.co.jp/content/ad/DCBT/delivery/ad/103.html?ほげ から呼び出される http://grp01.ias.rakuten.co.jp/content/ad/DCBT/delivery/script/103.js?ふが が怪しいんじゃないかなー、と思って読んでみた。わかったのは、ブラウザで cookie が使えなければ ad4U を無効にしてるんじゃないかな?ということだ。あくまで自主的にですが。

たぶんココがカギです

http://grp01.ias.rakuten.co.jp/content/ad/DCBT/delivery/script/103.js から一部抜粋。

// http://grp01.ias.rakuten.co.jp/content/ad/DCBT/delivery/script/103.js

/* AdFit's ad delivery script. */
(function(){
  function Cookie(){
    (略)
    this.check = function(){
      if(navigator.cookieEnabled != undefined){
        return navigator.cookieEnabled;
      }
      do{
        var name = "test"+Math.random();
      }while(document.cookie.indexOf(name) != -1);
      document.cookie = name+"=test;path=/;"
      if(this.get(name)){
        this.clear(name);
        return true;
      }
      else return false;
    }
    this.checkOptout = function(name){
      if (document.cookie.length>0) {
        offset = document.cookie.indexOf(name);
        if (offset != -1){
          return true;
        }
      }
      return false;
    }
  }

  var cookies = new Cookie;
  if(!cookies.check() || cookies.checkOptout("BTA002")){
    var imp_beacon_path = "http://log.ad4u.drecom.jp/img/ad_id_103/gen_24/ad4usess_/opt_1/access.gif?timestamp=" + (new Date()).getTime();
    var click_beacon_path = "http://log.ad4u.drecom.jp/img/bt_id_/ad_id_103/ad4usess_/gen_24/click.gif?timestamp=" + (new Date()).getTime();
    document.write("\n      <iframe width=\"300\" height=\"275\" frameborder=\"0\"\n       src=\"http:\/\/grp01.ias.rakuten.co.jp\/content\/ad\/DCBT\/banners\/iframe\/646.html?1228892081\" scrolling=\"no\" id=\"ad4u_frame\"\n      ><\/iframe>\n    ");

    (new Image()).src = imp_beacon_path

  }else{
    (略)
  }

})();
/* vim: set ft=javascript.eruby : */

これはlivedoorでは http://image.adv.livedoor.com/ad4u/delivery/script/107.js?ぴよ にあたるファイルだと思う。そっちも同様の処理だったので略。
注目したいのは、"BTA002"、つまり ad4U を拒否したときに発行された cookie が存在するときと、navigator.cookieEnabled が false の時の処理が同じであることだ。つまり、ブラウザで cookie が使えないなら、 cookie を受け入れた上で ad4U を拒否したのと同じことになる。cookie を拒否するのには有効期限がないから、いちいち拒否するのが面倒、という人は cookie を拒否する設定にしておくのもいいんじゃないかな。いつまで自主的に cookie 拒否 = ad4U 無効、としてくれるかわからんのでオススメはしませんが。

注意です

ただ、 cookie 拒否さえすればいい、というわけじゃないみたいなので注意。サイトごとに cookie の受入をコントロールできるブラウザがありますが、例外サイトとして cookie 拒否をしてもダメです(少なくとも Firefox と IE6 はダメ)。cookie を全て拒否しなくてはなりません。というのも、肝心な navigator.cookieEnabled の値の出力にバグがあるようなのです。
navigator.cookieEnabled ってなんじゃらほい、というレベルの私ですから、 https://developer.mozilla.org/ja/DOM/window.navigator.cookieEnabled を見てお勉強しながらこのエントリを書きました。そこにこんな記述がありました。

bug 230350 のために、cookieEnabled は、Gecko ベースのアプリケーションで誤った結果を返す可能性があります。

bug 230350とやらを読んでみるに、Gecko ベースのアプリではデフォルトの cookie 受け入れの値しか返さないよ、ということらしい。rv:1.9.0.4 Gecko/2008102920 Firefox/3.0.4 な自分のブラウザで確認しましたが、例外サイトに指定したドメインであろうとなかろうと、 navigator.cookieEnabled の値は変わりませんでした。
ちゃんと読んでませんが、 IE もダメっぽいです(フィードバック: navigator.cookieEnabled is always true)。これは IE8 のベータ版のフィードバックなんですが、 IE6 でも再現するとのことなので、手元の IE6 で確認してみました。「ツール > インターネットオプション > プライバシー」で「高」〜「低」とすれば、同ウィンドウの「サイト」ボタンからドメインごとに cookie 受入の可否を設定することが出来るのですが、cookie ブロックを指定したサイトでも navigator.cookieEnabled が true となることを確認しました。 IE7 は手元にないのでわかりませんが、 IE8 でダメなんだからおそらく同じでしょう。
普段 FirefoxIEcookie を許可していて、例外サイトとして rakuten.co.jp や livedoor.com だけを拒否、としても期待はずれにも ad4U は動いちゃいます。ですから ad4U がイヤな人は面倒がらずに毎年 or 毎月拒否しましょう(参考エントリ 1, 2)。
Firefox にしろ IE にしろ、バグ扱いにしているので仕様ではないはず。safari とか google Chrome はサイトごとに設定できなかった気がするので、このバグとは無縁なはず。他のブラウザはわかりません。

よろしくない情報

さて、この現象を逆に考えれば、 cookie を原則として拒否する設定にすれば、常に navigator.cookieEnabled = false ということになります。ブラウザのバグに頼るという極めておすすめできない行為になりますが、「 livedoor Reader 使いたいけど、ad4U を毎月拒否するのめんどくせぇ」という Firefox 使いの方は、 「ツール > オプション > プライバシー > Cookie > サイトから送られてきた Cookie を保存する」のチェックを外し、 livedoor.com を例外サイトとして許可すればよいのです*1livedoor.com の cookie は許可していますので、 livedoor のアカウントには問題なくログインできます。 しかし navigator.cookieEnabled は false のままです。ですから、livedoor Reader を使えて、かつ、毎月拒否申請することなく ad4U は無効状態、ということになります。
まぁ毎月拒否するのがいいと思いますけど、拒否の更新を忘れたときの保険としてはよいかもしれません。

そうそう、ad4U 拒否ページについて

ad4U の可否はひとまず、拒否ページはすぐに修正されるべき。navigator.cookieEnabled = false なら、拒否ページでの動作表示を「 ad4U は無効です」とするべきだ。実際無効にしてるんだから問題なかろう。 ad4U を拒否したいがために仕方なく cookie 許可する人だっているんだぞ。

*1:なお、IE6 では無理。 navigator.cookieEnabled = false とするためには、 cookie を全拒否する必要がありますが、このとき例外サイトを設定できないのでダメです。 IE7 は手元にないのでわかりません。