@font で変わったもの

rural_sy00e
10/23 に TAMA Networks に @font を導入してからサーバ上で変わったことが一つあった。それはサーバの転送量。一日辺り 300MB くらい増えた(汗)。@font はそのウェブページで必要になった文字分のフォント・データしか送ってはいないようなのだが、実は仕組みそのものはボクも理解していない。
そもそもレンダリングはどっちが行うのか? サーバ側でレンダリングしている場合は、フォントのビットマップ・データがおそらくブラウザに渡されるんだとは思うけど、そうなるとブラウザ側でのフォント表示アルゴリズムが従来のものと大きく変わるような気もしつつ……。
あとあとになって解ったんだけど、同じフォントがクライアント側にあってもどうやらサーバからのフォントを使ってるっぽい? 同じフォントがあったらクライアントのデータを使って欲しいなぁ、と思いつつ……。

まぁ、転送量そのものはうちの場合そんなに問題にはならないのだが、サーバそのものに負荷が増えたことに変わりはないので……うーむ。まぁ、アクセスが頻繁なので、サーバ側は全部メモリ上で処理されているとは思うんだけどね。

 

@font を使ってみる

bs_ryok01a
以前から、PC にインストールされていないフォントが表示できるサイトがあって、これどうやってるんだろうなぁって思っていた。ウェブサイトを表示した場合、そこに表示される文字は画像でない限り、PC にインストールされているフォントに左右されてしまう。
つまり見た目がどうしても人によって変わってしまう。
フォントを固定できれば、だいぶ環境による差を吸収できる。

話は少しずれるが、実はウェブってやっぱ読みにくいなぁと思っていて、それは当然で、同じようなレイアウトを取る雑誌では、挿絵・写真の位置や文字の大きさ改行位置が読みやすいように編集されているが、ウェブサイトは表示する幅や高さ(つまり紙の大きさ)が違うし、文字の大きさも違うし、書体も違う。当然挿絵の位置も変わってきてしまう。
なので、やっぱり読みにくいと思っている。これについてあまり言及したサイトを見たことはないが、本ってやっぱりよく出来てるなぁってボクは思っている。

閑話休題。
で、それに近づけるというわけではないのだけれど、ボク自身がサイトを編集するにあたって使っているフォントを、この TAMA Networks でも表示されるようにしてみた。CSS3 ではサーバ上のフォントをウェブサイトの表示に使うことが出来るのだ。定義は以下の通り。

@font-face {
font-family:”Migu 1C”;
src:url(‘https://amatsukami.jp/fonts/migu-1c-regular.eot’);
}
@font-face {
font-family: “Migu 1C”;
src:url(‘https://amatsukami.jp/fonts/migu-1c-regular.ttf’) format(‘truetype’);
}

ただ、このフォントをこう言う使い方していいのかは、ちょっと自信がない。一応ライセンスの所は読んだのだが……使用についてはクライアントで使用することばかりが書かれていて、ちと不安ではある。問題がある場合はこの定義を消すことになると思われる。下のは左が新しいフォント、右が Windows Vista から採用されている「メイリオ」。Windows Vista 以降で TAMA Networks を表示するとこの「メイリオ」というフォントで表示されていたんだけど、Mac やスマフォでみるとまた違っていた。
ただスマフォでは @font に対応してないらしく(CSS3 には対応してるはず)、こちらで設定したフォントは表示されなかった。

migu meiryo

人気投票の悩ましい問題

ボクが関わっているブランドで人気投票をやったのだが、今回は不正投票があった。ただ、これを「不正投票」と呼んでいいかは疑問ではある。とりあえず今日の日記では「不正投票」と表現するが、ボク自身はこの行為自体を 100% 悪しきものとは考えていないことを最初に記しておきたい。

投票自体は終わっているので、その投票画面にリンクを張ることは出来ないのだが、 4 人のキャラクタのうちから好きなキャラクタを投票するというものだ。仕組みは非常に簡単で、いわゆる「カウンタ」を利用している。よくサイトのトップでみかける「何人来ました」っていうヤツだ。各キャラクタごとにカウンタが設置されており、「好きなキャラクタを選ぶ」=「そのキャラクタ専用のサイトに訪問した」と解釈するわけである。これによってカウンタが一つ上がり、そのキャラクタの票が一つあがることになる。
そして 4 人分のカウンタをグラフ表示するための CGI が別途あり、そこでどのキャラが何位なのかが解るようになっている。下の絵がグラフ表示されたものである。
result
で、カウンターは cookie を使って同じ人かどうかをチェックしている。また cookie の寿命は 24 時間に設定されている。つまり 24 時間経過するまでは何度投票してもカウンタは増えない(無効票となる)。同じ人かどうかは IP アドレスではチェックしていない。というのも現在は NAT がかなり広範に普及しており、同じ IP でも違う人がアクセスすることは珍しいことではないからだ。

さて、サーバの HTTP ログを見たところ、「桜織」と「十和子」というキャラに不正投票があった。不正投票する方法は実に簡単で、この Cookie を削除してもう一度投票すればよいのだ。Cookie が削除されると寿命が切れたことになり、もう一度投票出来る。これをくり返せば、何度でも有効票が投票出来てしまうのだ。
従ってこの Cookie を使った仕組みそのものが「何度でも投票出来る」という状況を作り出している。そしてこれは誰にでも簡単にできてしまうので「不正投票」と言い切れないのだ。つまり仕組み自体がよくない。

投票した方もその仕組みを自覚しているらしく(?)、大量に票を入れていない。一度には 8 ~ 12 くらい。それをある程度時間をおいて行い、ちょっとずつ投票しているのだが、しかしほぼ 24 時間でビリだったキャラクタが一位になってしまった。まぁだから「不正投票があった」とこっちも勘づいてしまったのだけど。
この辺の増加量は難しいもので、ウチが弱小ブランドだっていうのもあるかもしれない。一度に 8 ~ 12 入れても全然影響しないような人気ブランドだったら、たぶん本当にちょっとずつ上がっていき、知らず知らずのうちに一位になっているということもあったのだろうが、ウチはそこまで人が来ていないのか、8 ~ 12 増えただけでかなり形勢が変わってしまうのだ(汗)。

結局集計はこの一度に 8 ~ 12 投票したヤツを 1 票としてカウントした。それでも不備はあるものの、まぁ、細かい所を突き詰めてもしようがないし、このような不正投票が出来てしまう仕組み自体が問題なので、今回はこれで良しとしよう。レベルファイブさんなんかはこの不正投票も含めてネタにしてしまっているみたいだけど、ウチとしては正直、誰が一番なのかを知りたいし……。
他に方法としては順位をリアルタイムで見せないという方法もあるかもしれない。でもそうなると逆に 8 ~ 12 なんてカウント数では済まず、スクリプトとかで大量投票してくるかもしれない……。
あとはどうせ不正投票されるのなら、「同じ人は 24 時間経たないと投票できない」という制限そのものを取っ払う。とにかく投票すればそれがどんな状態だろうと、1 票とするというのも有りかもしれない。

さて、次回はどうしようかなぁ……どういう仕組みにすればいいのだろう。cookie 以外で同じ人かどうかを判別する方法はあるだろうか? 実はある。あるのだが、けっこう仕組みが面倒くさいというか、組むのが面倒くさい……。このへん、他社さんとかどうしているかいろいろ見てみる必要がありそうだ。

amatsukami.jp サーバ HDD 交換

rural_ay00g
先週ぐらいから amatsukami.jp サーバから恐ろしい音が聞こえていた。それは「カラン……カラン……」という金属同士がぶつかるような音。HDD が壊れたときの音である。このくっそ忙しいのに……。やっぱり猛暑が堪えたんだろうなぁと思った。壊れた HDD は 2009 年の 2 月に導入された 1.5TB x 4 台構成のいずれかである。
amatsukami.jp サーバは 3 年ごとに HDD を交換していたのだが、だいたい 3 年以内に容量が足りなくなって交換というサイクルが続いていた。が、今回 3 年を越えても容量は満杯にならなかったため、そのまま使い続けていたのである。

というわけで、この 1.5TB x 4 を 4TB x 2 の構成に構築し直した。
いちおう異音がし始めてから HDD そのものは耐えてくれ、データ欠損などはなく、無事に移行出来た。
4 台から 2 台に減ったことで消費電力も下がるし、音も若干静かになるしで、少しホッとしている。

そういえば、4TB より容量の大きな HDD が出ないなぁ。
130911DSCF5414 130911DSCF5416
130911DSCF5418 130911DSCF5421

暗号化の意義

bs_tuba01i
朝日新聞に、こんな記事が載った。

実は技術系の掲示板『スラッシュドット』でもこの手の話題がチラホラ出るようになった。

これらの記事を鵜呑みにするならば、SSL 通信を米国当局が復号出来るということになるわけだが、本当かなぁ~~~。本当だとするとこれは非常に心理的にイヤだ。
しかし量子コンピュータがすでに実用化されていて、ばんばん SSL 通信をリアルタイムで解読しているというのも考えにくい。
問題点はいくつかある。

  1. ともかくデータが膨大。これらをすべて復号するには、量子コンピュータがいくつも必要
  2. 米国を経由しないデータはどうするのか

で、1 に関してはひょっとして Verisign などの認証局を陥落させたってことなんじゃないかなぁ、と何となく想像している。つまり認証局から直接秘密鍵を取得する何らかのルートなりなんなりを手に入れたのではないかと。そうすれば、認証局に登録された SSL 通信ならば解読出来ることになる。
もしそうだとするなら、正規の証明書はアメリカに解読されてしまう脆弱な証明書で有り、オレオレ証明書と言われる、個人が勝手に発行した証明書こそがアメリカに解読されない安全な証明書と言うことになってしまう(汗)。

2 に関してはわりと簡単にクリア出来そうだ。まぁそもそも米国の IP 通信網を流れないデータについては無視しても良いだろうし、DNS もしくは各国の IX に働きかけて、どんなデータでも米国を経由するようにすることは出来る。もっともそんなことをすれば、アメリカの回線がそうとう圧迫されそうだが(汗)。

んー、取り越し苦労なのか、もはや対抗する手段がないのかは解らないが、将来的に Linux 系にサーバを移行した方がいいのではないかと漠然と思い始めている。というのも Microsoft はアメリカ当局に手の内を漏らしそうだし、アメリカ当局が復号出来ないような暗号形式を実装するとも思えない。そういうのは Linux 陣営の方が実装が早いだろうし、アメリカ当局の干渉を比較的受けないのかなぁと思っている。

ML なのにメンバーにもメールを投げるな

ボクはネットワーク管理者なわけだけど、最近困ったことがある。それはメーリング・リストにメールを投稿する際に、送信したい相手も To に入れて出す人が多いと言うことだ。どういうことかもう少し詳しく解説する。まずメーリング・リストというのは、メーリング・リスト用のアドレスを造り、そこにメール・アドレスを登録しておく。するとそのメーリング・リスト宛てに出したメールは、登録したメール・アドレスに配信されるという仕組みである。
例えば、プロジェクト・メンバーとか、飲み会のメンバーとか、ある集まりに対して、その集まりのメンバー全員のメール・アドレスを登録しておき、そのメンバー全員に一度にメールが送れるシステムである。
ボクらの業界ではプロジェクトが立ち上がると、だいたいそのプロジェクト・メンバー全員に配信されるためのメーリング・リストを造り、そこでプロジェクトに関する連絡のやりとりをする。例え自分に関係のないことであっても、そのメーリング・リストでやりとりすることによって、他の状況も解るからだ。

つまりメーリング・リストにはあらかじめそのプロジェクトに関係している人たちが登録されているわけである。で、そのメーリング・リストのアドレスと、そしてそのメーリング・リストのメンバーにもメールを出す人がいるのである。するとどういうことが起きるかというと、相手には同じメールが二通届くことになる。
ボクは様々なプロジェクト・リーダであるため、社内の様々なメーリング・リストの管理者でもある。で、ボクに用事があるたびに、メーリング・リストとボク宛にメールを出されるものだから同じ内容のメールがいくつも来るのだ。
いや、わかってるっちゅーねん! 一個出せばええ。つーか、メーリング・リストがあるんだから、そこだけに出せ!!

他にもメーリング・リストに流れているメールがボクに行ってないと勘違いして、ボクに転送してくる人もいる。いや、いいから To を落ち着いて確認しろ! 転送だと何か別のメールと勘違いするじゃないか。

そんなわけで、こう言うのも IT リテラシって言うのかねぇ?
あんまりそういう言葉で責めたくはないけど……IT あんまり関係ない気がする。とにかくちゃんと From と To を確認しようぜ! っていうか、してください、イヤマジで(ぁ

XMail で任意のドメインを、無条件に他の SMTP サーバに転送する方法

bs_hina03r
ボクの勤め先のメール・サーバはボクが立てた glace.me ドメインのモノがある。ただこのメアドは当然うちのブランド用にしか使えない(汗)。親会社は別のメール・サーバを持っているわけだが、メーリング・リストやその他、メールの様々な機能は提供されておらず、現状 glace.me サーバに依存している。
とはいえ、親会社の仕事に glace.me というドメインは使えない。
で、今まではどうしていたかというと、親会社のメール・サーバに転送専用のアドレスを作り、その転送先を glace.me にしておいたのだ。こうすることによってメーリング・リストや新入社員の新しいメアドなどは実体を glace.me 上に作っておき、クライアントや名刺などには親会社のドメインを入れておくわけだ。
ところが困ったことが生じている。それは親会社の分のメールの管理もボクがしなければならないと言うことだ。特にメーリング・リストではプロジェクト・メンバーの出入りがあるとその都度ボクが追加・削除しなければならなかったし、今誰がメンバーに入っているかをプロジェクト・リーダに伝えなければならなかった。
ちなみにメーリング・リストにはリスト・プロセッサという機能があり、そのメーリング・リストにコマンドを書いて送ると、メーリング・リストへの加入や脱退、そして加盟者の一覧を取り寄せることが出来るのだが、これはセキュリティ上殺している。万一、メーリング・リストのアドレスが洩れた場合に第三者から情報を引き出されるのを防ぐためだ。

で、思いついたのが本社用のメール・サーバを別に立てて、本社の人に管理してもらうこと。この時、メール・サーバは LAN 内専用のサーバとなってしまう(つまりインターネットからはアクセス出来ない)。というのもプロバイダは一つしか契約していないし、外向きのメール・サーバはすでに glace.me が稼働しているからだ。ただ、どうせメーリング・リストにしか使わないサーバだから、社外から見えなくても良いのだ。これがメール・ボックスも設置するとなると、外向きのことを考えないといけないが(その場合はルータに仕掛けが必要になる)。

メールの流れはこうだ。

  1. LAN 内メール・サーバ用のドメインを作る -> ml.glace.me
  2. ml.glace.me 宛てのメールが来たら、それを LAN 内のメール・サーバに転送する

うちでは XMail というメール・サーバを使っているのだが、どこをどう探しても任意のドメインだけ他の SMTP サーバに飛ばすという設定が見つからない。単純にドメイン転送ってのはあるんだけど、この方法だと転送元にも同じユーザがなければ機能しない。つまり ml.glace.me に hoge という名前のメーリング・リストを作った場合、glace.me にも hoge というメーリング・リストを作らなければならないのだ。なんだそれ!? それじゃぁ、ml.glace.me でメーリング・リストを作るたびに、glace.me でも同じものを作らないといけないではないか。

というわけで色々と英語と格闘したり、いろんな掲示板を徘徊したりして、どうやらカスタム・ドメインという設定があるというのにようやくたどり着く。XMail の MailRoot ディレクトリにある custdomains というディレクトリの中に転送したいドメイン名のファイル名を作り(この場合、ml.glace.me.tab)、そのファイルの中に転送したい SMTP サーバを指定すると、転送したいメールが来たときにすべてその SMTP サーバに転送してくれることが解った。

ml.glace.me.tab の中身
“smtprelay” “listserver.glace.local”

こうすることによって、めでたく ml.glace.me 宛てのメールはすべて listserver.glace.local というサーバに転送されるようになった。ちなみにこの  listserver.glace.local は仮想サーバである。いやー、ホント、仮想マシンは便利だ。ちょっと何か新しいサービスを立てたいとき、実験したいとき、仮想サーバを立ててそこに入れればすぐに動かせる。昔は何か実験するんでも余っているマシンとかパーツとかを見つけてきて組み立てて、OS インストールしてとかやっていたんだけど、今や、ほぼボタン一発でもう一つサーバが出来てしまう。うーむ、恐ろしい。

最後に、ここであげているドメイン名はあくまでも説明のためにテキトーにつけたモノなので、実際はこれらの名前で運用されているワケではない。