2010年10月22日金曜日

DnD, FileAPI使ったブックマークレット再び

ChromeがFile APIをサポートしたので、前書いたブックマークレットを試してみたら動かなかったので、FirefoxでもChromeでも動くように手直ししてみた。
(dev使ってるので前から出来たはずだけど、忘れてた)

ブックマークレット用
javascript:(function(){var f,i,r,a=function(n,f){document.querySelector("#t").addEventListener(n,f,0)};a('dragover',function(e){e.preventDefault()});a('drop',function(e){f=e.dataTransfer.files;for(i=0;i<f.length;i++){r=new FileReader();r.onloadend=function(e){t.value=r.result};r.readAsText(f[i],"UTF-8");}e.stopPropagation()})})();

少し見やすい状態
javascript:(function(){
 var f,i,r;
 var a=function(n,f){document.querySelector("#t").addEventListener(n,f,0);};
 a('dragover',function(e){e.preventDefault();});
 a('drop',function(e){
   f=e.dataTransfer.files;
   for(i=0;i<f.length;i++){
    r=new FileReader();
    r.onloadend=function(e){t.value=r.result};
    r.readAsText(f[i],"UTF-8");
   }
   e.stopPropagation();
  });
})();

2010年10月16日土曜日

wikkid wikiのcreoleと日本語ファイル名など

Wikkid wikiを使ってみるの続き。適当にいじったので、日本語ファイル名/フォルダ名、WikiCreole書式、そしてWindowsでも使えるようになったので、スクリーンショットを取ってみた。

日本語ファイル名でcreoleで書いてみる。先頭に
# creole
と書くとcreole書式として処理される。
creole書式で編集
保存すると、期待通り表示されました。
うまく表示された

jinja2を使っているので、日本語にも出来そう。

Wikkid wikiをいじる

まだ、勝手にやってる段階だけど、次のような感じでいじってみた。
  • creoleが動くようにした
  • 日本語ファイル名を使えるようにした(unicode化してるから、bzrで扱える文字なら多分全部いけるはず)
  • Windowsでも動くようにした
launchpadにブランチ作っておいてあります。

2010年10月7日木曜日

Wikkid wikiを使ってみる

Wikkid wikiBazzarブランチ上で使うWikiエンジンです。
渋日記: Bitbucket買収?そもそもそれ何?という人のためのBitbucket紹介をみて、そういえば最近debianパッケージにBazaarバックエンドのやつが入った記憶があるなと思って、調べたらwikkidだった。
なので、debianでexperimentalも見るようにしてあればapt-get wikkidだけでインストールできる。

ちょっとだけ使ってみたので、メモ代わりに置いておく。

使い方

新規のブランチでやっているが、既存のブランチでもやれば出来るんじゃないかと思う。
bzrのブランチなので、分散管理できるはずですが試してません。

ブランチの作成

適当にbzr init wikiとかしてブランチを作る。

サーバ起動

bzr wikkid または wikkid-serveで起動する(オプション無指定時には8080をListenする)。
hideaki@siduxbox:~/works/wiki$ bzr wikkid
2010-10-06 23:40:45 INFO    Using: <WorkingTree6 of /home/hideaki/works/wiki>
2010-10-06 23:40:45 INFO    Using bzr identity: "Takahashi Hideaki", "mail addr"
2010-10-06 23:40:46 INFO    Listening on port 8080

ブラウザでアクセスして編集

最初は何もないのでページを作成する。
最初は何もないのでページの作成
編集画面になる
ReSTで書きます。下のセーブボタンを押せば保存。
結果を見る
保存すると書いた内容が表示されます
右上のBrowseボタンを押すとファイルリストが見られる
ブラウズボタンを押すと、ファイル一覧が見えます

テキストエディタで編集

ただのテキストファイルなので、当然普通に編集できます。
Emacsで編集して保存します
編集結果をブラウザで見る
編集結果はブラウザで見られます
確認したら、コミットするかブラウザの方で保存します。

Creoleにも対応しているはずなのだが、同梱されているパーサーが古い(0.1.1)ためうまく動かなかった。

2010年10月3日日曜日

JDK7のString in switch(2)

文字列リテラルのhashCodeがぶつかったときどうなるか調べた。
予想通り、最初のhashCodeでのジャンプの後でequalsでそれぞれ確認して実際の処理に分岐するための値を設定していた。


java.lang.Stringを書き換えてbootclasspath(-J-Xbootclasspath/-bootclasspathの両方)で指定してもうまくいかなかったので、検索して見つけたテストコードを参考にやってみた。hashCodeが0になるパターンをいくつか指定している。


public class Test {
    public static void main(String[] args) {
        String s  = "\u0000";
        switch (s) {
        case "":
            System.out.println("empty");
            break;
        case "\u0000":
            System.out.println("\\u0000");
            break;
        }
    }
}

28-34で""か判定して、""じゃなければ42-48で"\u0000"か判定してる。
8: invokevirtual #3                  // Method java/lang/String.hashCode:()I
        11: lookupswitch  { // 1
                       0: 28
                 default: 53
            }
        28: aload_2
        29: ldc           #2                  // String
        31: invokevirtual #4                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
        34: ifeq          42
        37: iconst_1
        38: istore_3
        39: goto          53
        42: aload_2
        43: ldc           #5                  // String
        45: invokevirtual #4                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
        48: ifeq          53
        51: iconst_0
        52: istore_3
        53: iload_3
        54: lookupswitch  { // 2
                       0: 80
                       1: 91
                 default: 99
            }
        80: getstatic     #6                  // Field java/lang/System.out:Ljava/io/PrintStream;
        83: ldc           #7                  // String empty
        85: invokevirtual #8                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        88: goto          99
        91: getstatic     #6                  // Field java/lang/System.out:Ljava/io/PrintStream;
        94: ldc           #9                  // String \u0000
        96: invokevirtual #8                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        99: return