浮動少数問題 Java版 CVE-2010-4476

どっかで見たことのある数字のような気がしますが(表記されている1個の値だけではなく範囲になります。DoS仕掛けてくれちゃってる人検出用シグナチャを作る方はこちらやそこから参照されているOpenJDKのBTSですがこちらを。少数をパースする場面って何気に多いですね)。さっそくfp87な機械のEclipseにコピペして自動的に文法チェックされた日にはそのままEclipseハングするので半べそです。2011/2/15に(日本では15日深夜にJava SE 6 Update 24登場しました)6u24が出るまではJava SE Floating Point Updater Toolでしのぎましょうということなので管理者権限でunzipしたjarを実行したら、一生懸命ランタイムライブラリをばらかしてからアーカイブし直してるようでした。インストール先の空き容量がぎりぎりな人はちょっと注意かも。

IPv4無くなりました

枯渇時計を表示させていた方はお気づきのことでしょうが、IANAから通常の分配が終了し、Two /8s allocated to APNIC from IANA【速報】IANAからAPNICへ、二つの/8ブロックが割り振られました によると近日中に最後の/8の5ブロックを5つのRIRに割り振って完全終了になるそうです。v4.fullbogons.cymru.com は今年から来年にかけて bogons.cymru.com との違いがほとんどなくなるはずです。(Bogons vs. Fullbogons – what’s that all about?) とはいえまだあるっちゃあるわけですが…

2011/4/16 追記:APNICにも通常割り振りの在庫が無くなったそうです。

2011/2/5 参考追加

DNSSEC始めました

ルートからJPへのチェイン。弊社が利用しているドメイン(co.jp jp ch me es be dk com net org…)もすべてDNSSECおよびDANE/TLSA対応完了。DNSSECが有効でTLSA RR,CAA RRにも対応したセカンダリDNSサーバ,DANE,TLSA,DMARC,DKIM,SPFに関するご相談は弊社へどうぞ。と宣伝をしたところで以下は設定を確認するためのリンク集と自分で確認する手順。

続きを読む

タイムゾーンのオフセット+09:18:59 はて、18:59はなんぞや?

いろいろ検索したつもりでしたが、実は :18:59 timezone と検索することで先人の方々のサイトがヒットし、Google先生がいれば誰でも天才ということで表題の件は簡単に速攻で解決できたことがわかりました。しかしせっかく書いたので恥ずかしながら公開しておきます…

続きを読む

グリッドへ行く準備

TRON Legacy(sun4m i386)を3Dで見たついでにトロンシティへ行く準備をしてみます。

あとはケビンのプログラムと、テーブル型の筐体にSPARCとi386をぶっこんだシステムを作れば、って普通に並列にするのと違って限りなく大変そうですね。上のも動くわけもなく。お後がよろしゅう。

P.S. config.guessに sparc86x なんてのを見つけました。これなんでしょうね。

TRON Legacy(sun4m i386)を3Dで見てまいりました。

良い評判でないながらもそれなりに面白かったので小さいころTRON見とけばよかったと思いました。みなさんどんなストーリーを期待されていたのでしょう。でそんな中、ディスプレイのホコリをなぜか素手で拭き、そしてなぜか既に開いているターミナルエミュレータからloginしようとしているシーン(確かリモートに向かってではなくてloginコマンドをぶち込んでいるように見えた、つまり既に開いているターミナルエミュレータの権限では足りず、なんらかの他の権限を持ってないといけないらしい)があります。ニヤッとするシーンですが、そのまま目の前を

と一瞬よぎります。学生時代から新入社員時代あたりの遠い記憶ながらも、んなアホなと突っ込むシーンでしょうか。BSD由来のSunOS時代である設定なはずのとおりにSolarisなんて野暮は無し、SunOSとだけあったと思いますが(実はSolarOSと書いてあったそうです)、ちゃんと小ネタも仕込んであってにくいですのぉ…はてさて…

Sun(Oracle)のドキュメント検索してみます。ありました。Platform Names and Groups今でも中古屋で転がっていたりする懐かしいものがたくさんという感じです。sun4mアーキテクチャはSPARCのマルチプロセッサ、というわけでi386と共存できないですね。i86pcではないところもミソで、やっぱり正しく突っ込みどころであったようです。くだらないことを調べてる間に実はtopが動いていて、uptimeが9日じゃおかしーだろ、とか突っ込んでるサイトもあったり、他にも小ネタがいろいろあるようですが、topはその時代に既にあったのか(なんと、あったんですねぇ…)とかも含めてブルーレイででも見る機会があったときのお楽しみにとっておくことにします。

最強は”Unix! I know this!”とか言いながらマウスでIRIXを使うジュラシックパークかなぁ…

「初めてのWindowsガジェット」ソースコード解説

【ランチタイムラーニング】 初めてのWindowsガジェット」という記事(冒頭の「注」もお読みください)で、お昼を食べながら踏み出す、ガジェット作成の第一歩について説明しました。

この記事では、その記事に掲載したソースコードについて、少し詳しく解説します。

JavaScriptでのタイマー機能の実装

最初はHTMLの開始と、CSSのスタイルの定義です。

7行目で、bodyの幅を130pxに設定しています。ガジェットがWindows Vistaのサイドバーに貼り付いている状態を「ドッキング」と言いますが、このドッキングの状態では、ガジェットの最大の幅は130pxです。

また、ガジェットをサイドバーに貼り付けず、単独でデスクトップに表示する状態にすることができ、この状態を「アンドック」と言います。

アンドックした状態では、ガジェットの幅は130px以上に設定することができます。多くのガジェットでこの設定を利用して、ドッキングの状態では簡易的なビュー、アンドックした状態ではリッチなインターフェイスを持ったビュー、というようなビューの切り替えを提供しています。ただし、アンドックした状態でも、ガジェットのサイズは縦横共400pxを超えないことをMicrosoftは勧めているそうです。

さて次にHTMLを見てみましょう。

4行目が経過時間を表示するエリア(nowTime)です。そして、5行目に設定時間を入力するフィールド(setTime)があり、6行目、7行目がタイマーを開始、停止するためのボタンです。開始するにはJavaScriptで記述したstartTimer()ファンクション、停止するにはfinish()ファンクションをそれぞれ呼ぶようになっています。

1行目で、このHTMLがロードされたときにJavaScriptで記述したinit()ファンクションを呼ぶようになっていますが、後で出てくるように、今回のガジェットではこのinit()ファンクションは何もしないので、このHTMLがロードされたときは特別な処理は行われません。しかし、今後タイマーの背景画像を変えたりするなどカスタマイズするときに、HTMLがロードされるタイミングでJavaScriptのファンクションを呼ぶ、ということを覚えておきましょう。

最後にJavaScriptを見てみましょう。

ここでは経過時間の常時を更新し(26行目)、毎秒JavaScriptのsetTimeout()でつぎのちょうどの秒にdoSecTimerを呼び出します(30行目)。念のため高負荷がかかっていて表示の次のちょうどの秒が過ぎてしまった場合には単に0.1秒後に再度更新するようにします(32行目)。これをsetTimeout()で設定時間までの時間を計る(39行目,44行目)ことでタイマーを実装しています。

表示の更新は、その時点での時間と開始時間の差分をとって、何秒経過したかを計算します。もちろん1秒ごとに1を足すのが一番簡単ですが、タイマーイベントがジャストの時間に発生しなかったり、そのほかの計算での時間も足されてしまうのでどんどんどんどん遅れることになり、やめたほうが良いでしょう。

また、前述の通りこのガジェットではHTMLがロードされたときに呼ばれるinit()ファンクションでは何もしませんが、7行目、8行目でコメントアウトしてある行のコメントをはずして、背景画像を表示することができるでしょう。

ガジェットでのalertの実装

さてタイマーはこれで実装できるのですが、そもそもタイマーは、指定時間が経過したことを「ぴぴっ」とか言いながら教えてくれてこそ、その本領を発揮できると言うものでしょう。なのにこのタイマーにはアラーム機能がありません。まるで人ごとのように書いてしまいましたが、このセクションでは簡単なアラーム機能を実装しましょう。

そもそも何故このタイマーガジェットはalert()ファンクションを使って、ひょいっとポップアップさせることさえしないのか。それは、alert()ファンクションやconfirm()ファンクションで出てくるポップアップがWindows Vista User Experience Guidelines for the Sidebarに則っていないということでサイドバーガジェットでは無効化されているからです。

それでもとりあえず簡単にポップアップを出したいときもあるではないですか。デバッグするときなんか特に。MSDN Magazineの記事に、そんな開発者の心の叫びに応えた、alert()やconfirm()と同等の機能を実装するやり方(ガジェットプラットフォームが脆弱である一因)が掲載されています。以下が今回のタイマーガジェットにそのやり方を適用する方法です。

ステップ1: ファンクションを準備する

作業フォルダに新しく「Timer.vbs」というファイルを作成して、次のように記述し保存します。

ステップ2: タイマーガジェットから呼び出す

Timer.htmlの中で、前述のCSSの直後、JavaScriptの直前に次の行を書きます。

同じくTimer.htmlの中の、finish()ファンクションの最初か最後に次の行を書きます。

これで簡単なアラーム機能ができました。

参照情報

【ランチタイムラーニング】 初めてのWindowsガジェット – お昼を食べながらガジェットを作ってみよう – Windows 7 デスクトップおよびVista サイドバー

「ガジェット」という言葉を聞くと、昔のアニメ、Inspector Gadgetの決め台詞、”Go-Go-Gadget!”と叫びたくなります。この台詞と共に、体のあちこちからわらわらとガジェットが出てくる様は、さながら洋風ドラえもんといったところです。

GUIを伴うアプリケーション作成は数年前まではちょっと敷居が高いものでしたが、現在ではエディターと初歩的なHTMLやJavaScriptの知識があれば、便利な「ガジェット」がいとも簡単に作れるようになりました。しかも作ったガジェットを世界中の人たちと共有できる環境があるので、その便利さや自分の作品を公開し使ってもらえる楽しさから、文字通り老若男女が挑戦しています。

最初の一歩はお昼を食べながら踏み出せるくらいの手軽さです。明日のお昼にでも、ちょっと作ってみませんか?


注: 脆弱なガジェットをインストールした場合に遠隔からコードを実行させることができてしまうプラットフォームである(KB2719662)との理由でWindows 8以降での機能実装の打ち切り、およびガジェットを無効にするように薦めています(理由は不明ですがガジェットを無効にするためのお手軽Fix it 50906の提供が中断か終了したようなので、無効にする場合は上記記事の中のSuggested Actionsの抜粋 Windows サイドバー ガジェットの悪用から Windows Vista および Windows 7 コンピューターを保護する方法 を参照してください)。ガジェットはお手軽ですが、動作させることはexeを動作させているのと同じ危険性を持つので、由来のわからないものや、由来がわかっていても脆弱かもしれないという意識が必要です。またローカルファイルにアクセスする権限やコードの実行権限があるので、脆弱なものを作ったりインストールしたりしたら大変なことに、しかも管理者権限でログインしていたらOSまるごと乗っ取られるかもしれませんよ、ということになります。以上、当たり前な話であるわけですが、テキストエディタだけでお気楽に作れる分余計に注意が必要、ということでしょうか。メールに添付されたzipの内のjsファイルを実行してしまってファイルを軒並み暗号化されて、復号のためにはbitcoin払えと表示されて涙、と似たようなものです(こちらはOSによる注意のダイアログが出る分少しましかも知れないですが、見慣れていて結局そのままOK押してしまうかも)。


何を作るか

Windows サイドバー ガジェット開発者ガイドには、”Hello, World!”と出てくるガジェットの作り方が掲載されています。”Hello, World!”はチュートリアルの王道ではありますが、もう少し実用性のあるガジェットを作ったほうがより楽しく作れるでしょう。

例えばタイマーなどは便利な上に簡単です。最近、仕事を効率よく進めるコツとして「ライフハック」という言葉が使われていますが、いくつかのライフハックの中で1日の時間を分割して効率良く作業を進める方法を取り上げています。ただ、時間を気にしながら作業をしても集中できないので、タイマーがあると便利です。それにタイマーはエンジニアの友であるカップ麺を作る時にも重宝します。

そこで今回は簡単なタイマーを自作します。この簡単なタイマーを改造していけば、自分好みのタイマーを作ることができます。

材料を準備しましょう

【材料】

  • お気に入りのエディタ (Windowsのメモ帳(notepad.exe)で十分)
  • ブラウザ

以上です。そうです、今この記事をご覧になっているのであれば標準的にコンピュータに入っているもので作れてしまうのです。それがガジェット作りの手軽さなのです。

もちろんJavaScriptやHTMLのリファレンスが手元にあると便利ではありますので、お好みでご利用ください。

さっそくガジェットを作りましょう

手順と成果物の概要

ではさっそくガジェットを作りましょう。その手順は以下の通りです。

  1. %LOCALAPPDATA%\Microsoft\Windows Sidebar\Gadgetsにフォルダーを作る→「○○.gadget」フォルダー
  2. JavaScriptを含んだHTMLを記述する→「○○.html」ファイル
  3. マニフェストを記述する→「gadget.xml」ファイル

以上、簡潔な3ステップです。

ステップ1: 作業フォルダの作成

%LOCALAPPDATA%\Microsoft\Windows Sidebar\Gadgets (C:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows Sidebar\Gadgets)に「Timer.gadget」フォルダー(以降、作業フォルダーと呼びます)を作成します。

ステップ2: JavaScriptを含んだHTMLを記述する

作業フォルダーに、新しく「Timer.html」というファイルを作成して、次のように記述し保存します。(このHTMLファイルの内容の詳しい解説は、『ソースコード解説』に記述しましたので、必要に応じて参照してください。)

ステップ3: マニフェストを記述する

作業フォルダーに新しく「gadget.xml」というファイルを作成します。

作成したファイルに次のように記述し保存します。Shift_JISの代わりにUTF-8で保存できるエディタの場合はencoding=”…”の部分は不要です。

ガジェットを動かしましょう

Windows Vistaの場合

サイドバーを右クリックで「ガジェットを追加」を選びます。

Windows 7の場合

Windows 7の場合はデスクトップの右クリックで「ガジェット」を選びます。

するとガジェットのリストに、「Simple Timer」が出てくるので、それを選びます。

パッケージを作る場合

作成した「Timer.html」「gadget.xml」の2つのファイルをzipにまとめます。zipにフォルダ名が保存されないように(zipファイルをダブルクリックした際に、フォルダではなくて2つのファイルが見える状態)、作成してください。そしてできあがったzipファイルを、「Timer.gadget」という名前に変更します。出来上がった「Timer.gadget」ファイルをダブルクリックしてインストールできるパッケージができます。

さあ、いかがですか?ちょっと見た目が悪いタイマーっぽいものが出てきましたね?

そして自分好みのタイマーに

今回作成したタイマーは、ガジェットの作り方の基本だけなので装飾していません。自分好みの背景画像や、色、フォント、さらにアニメーションを加えて、自分好みのタイマーに育ててみましょう。それがアプリケーション作りの醍醐味のひとつです。

また、このタイマーには指定時間が経過したことを通知するアラーム機能がありません。簡単なアラーム機能に関しては、上記のHTMLファイルを解説した「『初めてのWindowsサイドバーガジェット』ソースコード解説」という記事に記述しましたので、必要に応じて追記してみてください。

そうしているうちにガジェットのJavaScriptは原型を留めないほど変わるでしょう。その頃にはタイマーに限らず、自分の好きなガジェットが作れるようになっているはずです。楽しいガジェットを作って、世界に向けて発信しましょう!

参照資料

devel/libltdl22 (port directory error)

portupgrade中

毎度おなじみ/usr/ports/UPDATING を見ると、バージョン付きでなくなったものがいろいろあるようです。

で置き換えるように指示されていますが、多くの人がビルド専用でしょうから

で十分かも。

PDF -> e-mail添付 -> FAX送信でペーパレス 続爆速インストールHylaFAX

FAX受信 -> e-mailに引き続き今度は送信側。不適切な設定で勝手に使われるなどして莫大な電話代請求されても責任は取れませんので、細心のご注意を。HylaFAXクライアントを使用すればキューの制御もできて便利ですが、いろいろなOSで使えるような良いものを探すのも面倒です。今回はHylaFAX付属のfaxmailをPostfix経由で使用します。メールを読んでlatin1テキストならばそのまま、MIMEならば引っぺがして変換可能であれば変換してsendfaxに送り込んでくれます。

あて先の電話番号は [email protected] (Postfix master.cfで${user}使用) でも [email protected] (${extension}使用) でも良いですが、今回は簡単のために後者にします。まかり間違っても認証もなしに普通にインターネットから到達できる構成にしてはいけないです。

適切に設定されて動作している内部向け専用Postfixの etc/postrix/master.cf に

を追加。ここで指定したfaxという名のサービスに [email protected] で到達させるために、etc/postfix/transports(etc/postfix/main.cfでtransport_maps=regexp: で指定されている場合)に、

を、引っかかるような位置に追加。local_recipient_mapsが/etc/aliases.dbと指定されている場合はreject_unlisted_recipientが使えるように/etc/aliasesに hoge: root とでも追加してnewaliasesしておきます。etc/postfix/main.cfのmydestinationに@のドメイン部分であるfax.testを追加すればPostfixの設定終了でPostfix再起動。

HylaFAXのサーバはデフォルトでIPv6の*:4559をlistenしていて、クライアントはデフォルトでlocalhostのサーバにアクセスします。/etc/hostsで::1がlocalhostではなくてlocalhost-v6である場合には/usr/local/lib/fax/hyla.confに

を追加。パスワード無しでサーバにアクセスするために/var/spool/hylafax/etc/hosts.hfaxdに

を追加。この時点で

faxstatコマンドが認証無しで実行できてしまうようになります。続いて/usr/local/lib/fax/faxmail.confに

などをお好みで追加。/var/spool/hylafax/bin/notifyの内容を見ながら、お好みで/var/spool/hylafax/etc/FaxNotify作成。

hfaxd(hylafax)再起動。ここまでで [email protected] 宛e-mailにPDFやPostScriptを添付しするとFAXとして送信されるようになりました。残念なことにfaxmailはMIMEではないメールの扱いがlatin1のみでtyperulesも効かないので修正が必要です。時間が取れたらパッチ作成。万が一電話番号を間違えたら自力でfaxstatしてfaxrmするのが手間ですが、PDF添付でFAXが送れるだけでも十分実用的。

桂花

「桂花」民事再生法適用申請

あう。高校時代から桂花えぞ菊などととともによく行き、今でもたまに寄るので衝撃でしたが、当面そのまま営業できるそうでよかったです。ありがとうございます、味千ラーメン(香港市場に上場してるのですね)。いやぁ、「九十九電機」民事再生法適用申請以来の衝撃でした。

p5-Compress-Zlib, p5-IO-Compress-Base, p5-IO-Compress-Zlib, p5-IO-Compress-Bzip2 -> p5-Compress

Perl5.8のFreeBSDマシンにて

/usr/ports/UPDATING を見ると、p5-Compress-Zlibとp5-IO-Compress-* が p5-IO-Compressにまとめて置き換わったそうな。perl5.10以降の人はデフォルトのライブラリなので関係ないと。いつものように

で依存しているものたちをメモ。

で置き換え完了したら

あたりで処理。

HTTPS Everywhere – 自分で任意に指定したサイトで自動的にhttpsになるようにする – Force-TLSをやめたときの覚え書き

自動的にhttpsにするといえば、HSTSをFirefoxも4にて実装、とかのサーバ側で何かしないといけない仕組みの話題ばかりで、ブラウザ側に能動的に設定するための情報が探しにくくなったようです(Firesheepのおかげでまたそうでもなくなったようですが…)。かくて、自分で登録したサイトでhttpsを強制するFirefoxプラグイン Force-TLS

と、PC引っ越し用に覚え書きしましたが、あろうことか引っ越し先PCではサイトが追加できなかった(すごいところに設定ファイルがあったりするのだろうか)ので、問題の検証もせずにさくっと方針転換でhttps://addons.mozilla.org/firefox/tag/httpsを眺めてHTTPS Everyehereを試しました。https://www.eff.org/https-everywhere/rulesetsに従って簡単な正規表現を含むシンプルなXMLを作成。(2010/11/25追記: 自動更新版だと0.9.0よりtargetで1次フィルタするようになりました。targetが無いと気づかないうちにルール全体が無視されているので注意です。要エラーコンソールでの確認)

書かれている場所に保管してFirefox再起動。さくっと動作。設定ダイアログにも指定したものたちがちゃんと登場。ファイル作る手間があるけどルールが汎用的に作れるのでこっちの方が便利かも。

2010/11/25追記: 一部であらかじめ登録されたサイトにしか使えないと受け取れる説明がされているようですが、HTTPS Everywhereは説明や上記のとおり、自分の好きなサイトを指定できます。

2010/11/25追記: 同じく一部で家庭用の無線LANでは不要と受け取れる記述もありますが、家庭用無線LANでも暗号化無しであったり弱い暗号でtap可能であれば同じこと(パスワード漏れ & セッションハイジャックされる可能性のある状態)です。モニタポートのある有線LANのスイッチングハブや、買うのが難しいでしょうがリピータハブにアクセス可能である状況もまた同じことです。Firesheepを相手に対策するのではなく、平文パスワードと、そしてセッションハイジャック対策としてクッキーを秘匿するためにHTTPSを使用すると考えなければいけないです。URLがhttps://で始まっていても、secure無しcookieで内容にHTTPが混在していたりJavaScriptでHTTPでアクセスしにいってしまっては元も子もないじゃん、というサイトもあり、今に始まった問題では全然ないですが、script kiddieでもFiresheepで簡単にセッションハイジャックできるようになったという状況のおかげでそのようなサイトが改善されるチャンスでもあります。

HSTSはSSL/TLSが有効なコンテキストにて、Apache HTTPDならば一番簡単な使い方で

とするだけです。

Windows で sockstat (lsof)

fport(XP以前)とかの3rdパーティーのコマンドを使わずに素のWindowsだけでsockstat -46(lsof -i)したい時。

とか

netstatに-oなるオプションがあったり、find(fgrep)で””が必ず必要(command.comゆずりでcmd.exeも処理していないのか、はたまた処理してさらに”を渡しているのか…)だったり。

LibClamAV Error: cli_dbgets: Line too long for provided buffer – bytecode.cvd: version: 71

bytecode.cvd: version: 71, sigs: 10, f-level: 53, builder: edwin で LibClamAV Error: cli_dbgets: Line too long for provided buffer が出るようになったようです(–bytecode=noでは起きません)。手元ではFreeBSD 8.1と7.1のClamAV 0.96.2で確認されていますが、0.96.3でも他のOSでも起きているようです。bytecode.cvdが修正されるまでエラー通知をどうにかしないと…といってるうちに修正されました。bytecode.cld: version: 72, sigs: 10, f-level: 53, builder: edwin で修正済みです。ありがたやありがたや。