IEの「名前を付けて画像を保存」がうまく動かない
昨日作った数式画像生成サイト(http://exp.frozenlib.net/)に「画像かHTMLをコピーして使ってね」と書いたにもかかわらず、IEで「名前を付けて画像を保存」を行うと画像が壊れてしまっていた。
調べてみたところ、
- HTTPレスポンスヘッダにVary:*が含まれている
- 透過PNG画像を保存しようとした
の2つの条件が重なると起こるようだ。
原因はこうだ。
- ASP.NETのOutputCacheを使用
- すると、キャッシュを使用したページのHTTPレスポンスヘッダにVary:*が含まれるようになる
- すると、IE7やIE6では画像の種類とサイズが「利用不能」と表示される
- さらに、そのような画像に対して「名前を付けて画像を保存」を行うと、bitmap形式でしか保存できなくなっている
- ここで、もし、保存する画像が透過PNGだったとすると、透明度情報が失われてしまう。
とりあえず、不透明な画像を出力することで解決したが、できれば、OutputCacheを使いつつ、Vary:*が出力されないようにしたい。
が・・・なかなか上手くいかない。
ASP.NET MVC RC
ASP.NET MVC RCが出ましたね。
せっかくなのでmimetexを利用した数式画像生成サービスを作ってみました。
http://exp.frozenlib.net/
フツーのASP.NETと違って、HTMLがシンプルになるのがいいね。
新はてなブックマーク用O2Handlerコマンド
URLに対応するエントリの表示
http://b.hatena.ne.jp/entry/{1?<{Uri}>}
URLの登録
http://b.hatena.ne.jp/ユーザー名/add.confirm{1?<?url={UrlEncode(Uri,"utf-8")}>}
コマンド登録方法
- コマンドを入力していない状態で Ctrl + Insert を押す
- 登録画面が出たら "内容" を "Webサイト" に設定する
- "URL" に上記コマンドを入力
- "変数を使用する" にチェックを付ける
- "名前" に適当な名前を入力し、OKを押す。
使い方
直接入力したURLと合成して使用します。
例:URL登録コマンドのコマンド名が "HayateBookmark Add" で "http://frozenlib.net/" を登録する場合
http://frozenlib.net/>HayateBookmark Add
もちろんコマンド名は省略することも可能
http://frozenlib.net/>hba
よくわからない
最近プログラミング言語 scala にはまっているが、どうもよくわからない動作が多い。
val map = new scala.collection.mutable.HashMap[Class[_], AnyRef => String ] def f(value:Class[_]) = map.getOrElse(value,null) f(classOf[String]) // f の呼び出し中に map.getOrElse で例外発生
class TypeEx(self:Class[_]) { def getNameEx() = self.getName() } implicit def toTypeEx[_](t:Class[_]):TypeEx = new TypeEx(t) classOf[Int].getNameEx() // OK var r1:Class[_] = classOf[Int] r1.getNameEx() // OK val r2:Class[_] = classOf[Int] r2.getNameEx() // コンパイルエラー!!! (valだとimplicit convertion は使えないのか?) val r3 = classOf[Int] r3.getNameEx() // OK (valなのにOK。valで型を指定しているからダメだったのか?) val s:String = "ABC" s.r // OK (rはStringを暗黙の型変換で変換したRichStringのメンバ。valで型を指定しているのにOK)
環境
- scala version 2.7.1.final
- 64-Bit Server VM Java 1.6.0_06
- Windows Vista SP1
scalaのテストフレームワーク
SUnit(標準ライブラリ)
http://www.scala-lang.org/docu/files/api/scala/testing/SUnit$object.html:Title=例を見る限り、テストケースと別にテストスイートを作らないと、テスト一覧を列挙できないような感じがする。
だとすれば、DRY原則に反しているので嫌。
http://www.artima.com/scalatest/:Title=ScalaTest
JUnit形式、TestNG形式、独自の形式など、さまざまな形式でテストを作ることができる。
クラスを一つ作って、コマンドラインから指定するだけで、テストの経過と結果の出力をカスタマイズできるので、他のソフトとの連携も容易そうだ。
WindowsXP マスターブートレコードの復元
回復コンソールで fixmbr