[ubuntu]lsの色

めも。
lsの色の設定は環境変数LS_COLORSで確認できます。

$ echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:

コロンでつなげています。
rs=0など、ファイルの種類によって指定しているものと、
*.zip=01;31など、拡張子によって指定しているものがあります。
右辺の数字はエスケープシーケンスで、色やBOLDなどを指定します。
例えば、上記*.zip=01;31は明るい赤。確かに、zipファイルはそうなってます。
以下のリンク先にまとめられています。
rsなどのファイルの種類もあります。
http://www.ayu.ics.keio.ac.jp/~mukai/tips/ls.html

[scala]ツールチップで画像を表示

AsanFileBrowser で画像ファイルのときにはその画像をツールチップで表示できないか試してみました。
できました。

    override def getToolTipText(event:MouseEvent):String = {
        // マウス位置から、ファイルを特定
        val file = ...
        // もし画像ファイルなら
        if (...) {
            <html><img src={file.toURI.toString} /></html>.toString
        } else {
            file.getName    // そうでないならファイル名を表示
        }
    }

ツールチップにはHTMLが使えるのですが、それをXMLで作って、最後に文字列にしてます。
アイコンなど、小さい画像を想定しています。
大きい画像は縮小するなどの工夫が必要でしょう。

pp(PrettyPrinter;整形)

ScalaXMLを言語レベルでサポートしているが、出力する際には
以下のPrettyPrinterを使うと、いい感じに出力してくれる。

    import scala.xml.PrettyPrinter
    val xml:Node = ...
    // この場合、横80文字に収まるように、インデント=2で整形する。
    val text = new PrettyPrinter(80, 2).format(xml)
    println(text)

この、PrettyPrinterだけど、最初にその単語を聞いたのはVDMだった。


pp
この単語。
どちらかというと企業側のオブジェクト指向陣営ではなく、研究側の関数型陣営の文化ではないだろうか?

上記をちょっとスタイルを変えてみた

    import java.awt.image.BufferedImage
    import java.lang.reflect.Modifier._
    /** 画像のタイプを文字列で返す。ex.Some("TYPE_4BYTE_ABGR") */
    def getImageTypeName(image:BufferedImage):Option[String] =
        // BufferedImageの宣言フィールドを取得する。
        classOf[BufferedImage].getDeclaredFields.
            // 定数フィールドのみを通す
            filter  {_.getModifiers == (PUBLIC | STATIC | FINAL)}.
            // その値か?
            find    {_.get(image) == image.getType}.
            // あれば、それを名前で返す
            map     {_.getName}

波カッコが1行で済めばイイ感じになるけれど、複数行になると扱いに困ります。
どういうスタイルがいいんだろ?
まぁ、「もっと他人のソースを読め!」ということだろう。

上記をもう少し関数型っぽくしてみました。

    import java.awt.image.BufferedImage
    import java.lang.reflect.Modifier._
    /** 画像のタイプを文字列で返す。ex.Some("TYPE_4BYTE_ABGR") */
    def getImageTypeName(image:BufferedImage):Option[String] = {
        // BufferedImageの宣言フィールドを取得する。
        classOf[BufferedImage].getDeclaredFields.filter{
            // 定数フィールドのみを通す
            _.getModifiers == (PUBLIC | STATIC | FINAL)
        }.find{
            // その値か?
            _.get(image) == image.getType
        }.map{
            // あれば、それを名前で返す
            _.getName
        }
    }

あまりやりすぎると、デバッグしにくくなり、未来の自分も理解に苦しんだりするんです。
ある程度「息つぎ」がある方が私好みです。

[scala]画像のタイプを文字列で返す。

BufferedImageのgetType()だと、6などの数値で返しますが、
そうではなく、"TYPE_4BYTE_ABGR"などの文字列が欲しかったので作りました。
やっていることは簡単。
Javaのリフレクションを使ってます。
BufferedImageの定数フィールドのうち、該当する値のフィールドを探しています。
最後にその名前を取得して返します。

    import java.awt.image.BufferedImage
    import java.lang.reflect.Modifier
    /** 画像のタイプを文字列で返す。ex.Some("TYPE_4BYTE_ABGR") */
    def getImageTypeName(image:BufferedImage):Option[String] = {
        // BufferedImageの定数フィールドを取得する。
        val flds = classOf[BufferedImage].getDeclaredFields.filter{ f =>
            f.getModifiers == (Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL)
        }
        flds.find{f => f.get(image) == image.getType} match {
            case Some(f) => Some(f.getName)
            case None => None
        }
   }

吉原由香里vs内田修平 ヒカルの碁の梅沢由香里先生

http://www.youtube.com/watch?v=gcnBLej9xKk&feature=related

これはスゴイ!
最初は由香里先生なので観ていたけれど、
解説の人がわかりやすく、お互いの手の意味、心理がよくわかる。
そして、最後の鬼手。
しびれたー。