2011-11-29

ウェブサイトに書いてあるコードポイントの指す文字をさっと調べたい

何日か前に
ラテン語のアルファベット U+00D8,U+00F8 と空集合 U+2205 と直径記号 U+2300 の区別のつかないフォントもありますねぇ
なんてことをつぶやいたのですが、私はこういうコードポイントが指すものがなにかを調べるのに例えば Unicode Character Search を使っています。
で、まあいちいちそこから検索するのも面倒なので、U+XXXX みたいにして書かれたコードポイントが自動的にリンクになったら便利じゃないの、というわけでこういうスクリプトを書いてみました:
(function (window) {
  var tags = ['p','span','pre','div','blockquote','q',
    'li','dd','dt','td','th','h1','h2','h3','h4','h5'];
  var re_tags = new RegExp(tags.join('|'), 'i');
  var is_tag = function (node) {
      return node.nodeName.match(re_tags);
  };
  var traverse = function (trav, node) {
      for (var i = 0; i < node.childNodes.length; ++i) {
          trav(trav, node.childNodes[i]);
      }
      if (is_tag(node) && node.childNodes.length == 1) {
          if (node.childNodes[0].nodeName == '#text') {
              var str = node.childNodes[0].nodeValue.replace(
                  /U\+([0-9A-Fa-f]{4})/g,
                  function (s, p1) {
                      return '<'+'a href="http://www.fileformat.info/info/unicode/char/'
                        + p1.toLowerCase() +'/index.htm">' + s + '</a>';
                  }
              );
              node.innerHTML = str;
          }
      }
  };
  traverse(traverse, window.document.body);
})(window);
Greasemonkey から使えます。基本多言語面だけでいいよね、ということで /U\+([0-9A-Fa-f]{4})/ とか荒っぽいことをしてます。

cronでコンピュータ再起動にプログラム実行

KDE とか GNOME とかだと autorun の設定ができるのでログイン時にプログラム走らせたりできるんだけど、起動したときに走らせたいとかいう要望もあるわけで。crontab に
@reboot do-something
とかと書いておくといいようです。

2011-11-28

節穴

聞こえない耳をバカにして「節穴」というのは想像力に欠ける。節穴からでも音はよく聞こえる。

Fantasia for anxieties

寝られぬ夜の為の幻想曲と名付けた不快な曲を書いてみた。どちらかと言うと英語でつけた題のほうが適切やも知れません。黒鍵が多くて混沌とした響きになっている気がします。
嫌なものを振り払いたいという掻きむしるような渇望か、それとも夜も寝られないほどの不安か。
Fantasia for anxieties (license: CC-BY)
後半うっさい気がしないでもない。

2011-11-20

カリー化と部分適用

っていうのはつまり、関数 f があったとして:
var f = function ( a, b ) { return a + b; };
  • カリー化は f をこんな感じに g へ書きなおしてやることで:
    var g = function ( a ) {
      return function ( b ) {
        return f(a, b);
      };
    };
    
  • 部分適用というのは次の h のように引数を固定、たとえば a = 10 のときはこう:
    var h = function (b) {
      return f(10, b);
    };
    あるいはさっきの g を使えばこういうふうに:
    var h1 = g(10);
することですよね。

Flatten

シーケンスのシーケンスを flatten したいのに無いの?とか言わない。System.Linq.Enumerable.SelectMany メソッドを使う。
var flatten = sequence.SelectMany(_ => _);

2011-11-18

Disposable パターン

このマヌケな脳みそはよく忘れるので。
class Disposable : IDisposable
{
    ManagedResource managedResource;
    IntPtr unmanagedResource;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    
    ~Disposable()
    {
        Dispose(false);
    }
    
    protected virtual Dispose(bool disposing)
    {
        if (disposing) 
        {
            managedResource.Dispose();
            managedResource = null;
        }
        
        Free(unmanagedResource);
        unmanagedResource = IntPtr.Zero;
    }
}
そして書いたらきっと覚える。

コントロールのクリーンアップ処理


WPF コントロールは IDisposable じゃなかったりするので、例えば
public partial class HogeControl : UserControl
{
    public HogeControl()
    {
        InitializeComponent();

        Dispatcher.ShutdownStarted += (sender, e) => Dispose();
    }
   
    void Dispose()
    {
    }
}
とかやっておく。Unloaded イベントはそのコントロールをその親コントロールがアンロードしたときに発生するだけ、いつも発生するわけではない。

2011-11-17

ファイルを関連付けられたアプリケーションで開く

System.Diagnostics.Process.Start("hogehoge.txt"); 
とかやると Windows のコマンドプロンプトから
start hogehoge.txt
を実行した時と同じことになる。

原点回帰

https://sites.google.com/site/6eskymemo/
Twitter はメモを書き込んでおくには使えるんだけど,体系化されなくて読みづらいのでこっちにかき集めておこうかな,というものです。
だなんて書いておきながらあんまり記事が増えなかったんですね。文書を木構造にマップしなきゃならないのがめんどくささの理由なのかな、とかとも思っていたりします。
ともあれ、ちょっと分量のでかいメモを書いておきたいことは多々あるのでちょっと戻ってみた次第です。