Windowsのテキストエディタを Visual Studio Codeに乗り換える

Windows上のテキストエディタはこれまでemacsやsublime textなど色々使ってみたけど、Visual Studio Code(以下、VS Code)に乗り換えてみることにした。自分がテキストエディタに求める条件はそんなに多くなくて、

  • 動作が軽いこと
  • emacsキーバインド風味であること。カーソル移動だけサポートしてくれれば十分
  • 用途はメモ。プログラムはlinux上でvimで書きます

だけ。ところがこれでも色々問題があって、

  • emacs。gnupackの更新も随分止まっているし、本家のダウンロード版は日本語入力時に変換候補が表示されない(確定はできるので無理すれば使えなくもない)。かといって、自分でコンパイルするのも面倒だし。Windows上でemacs使うのは鬼門すぎるなあ。
  • vim。vim本体のモード切り替え(入力/カーソル移動)に加えて、日本語入力のモード切り替えも頭の中で管理しないといけないのがなんか嫌。
  • sublime text。v1.0になって、日本語入力の変換ウインドウの表示位置がずれるようになってしまった。タブデザインもかっこわるくなってしまってイマイチ。
  • Atom。以前に一度試してみてあまりの重さに却下。
  • その他のテキストエディタはあまり知らない。

あとは別手法としてVirtualBoxなど仮想サーバでlinux動かして、それ上でemacs使うことも考えたけど、さすがに大げさすぎるので気がすすまない。

VS Codeはちょっと使ってみた感じ、上記の問題点がなくて特に気になるところがないので、これでしばらくやってみることにする。

ちなみにプログラミングはvimなのは、プログラミングはあまり日本語入力しないから。たぶん上にあげた理由のモード管理が2重になるのがなんか嫌なんだろうな。

Google Developer Day 2011 Quiz(3) Web Game

締切も過ぎたことなので解答を晒してみる。というか今 Quizトップページを見てみたらボーダーラインが101点になってる。。。これはだめかなあ。しかし、101点ということは結局のところスライドパズルがどれだけ解けるかが問題で、それまでの試験は意味ないってことだよな。

まずは Web Game。HTMLソースを見るとカードの色がベタに書いてあるので、それを読んでマッチングすれば瞬殺だけど、それではあまりに面白く無いので素直に神経衰弱してみた。

var count = 0;

function checknumberofcard(){
  var i = 0;
  var element = true;
  while(element){
    i++;
    element = document.getElementById('card' + i);
  }
  return i;
}

function solver(first){

  count++;
  console.log(count);
  if (count > 1800){
    return 0;
  }

  var card1 = 'card' + first;
  var color1 = turnupcard(card1);

  var checkColor = existColor(color1,first);
  var second;

  if (checkColor == -1) {
    second = getuncheckedcard(first);
  } else {
    second = checkColor;
  }

  var card2 = 'card' + second;
  var color2 = turnupcard(card2);

  if ( color1 == color2) {
    cardmap[first] = 0;
    cardmap[second] = 0;
    checkedmap[first] = 1;
    checkedmap[second] = 1;
  } else {
    cardmap[first] = color1;
    cardmap[second] = color2;
  }

  solver(getuncheckedcard(first));
}

function getuncheckedcard(n){
  var i = n + 1;
  while(true){
    if ((i != n) && (checkedmap[i] != 1)){
      return i;
    } else{
      return i + 1;
    }
    if (i == ncard - 1) {
      i = 0;
    } else {
      i++;
    }
  }
}

function existColor(color,n){
  for (i = 0; i < cardmap.length; i++) {
    if ((i != n) && (cardmap[i] == color)){
      return i;
    }
  }
  return -1;
}

function turnupcard(card){
  var element = document.getElementById(card);
  if (element == null) {
    return 0;
    alert('Card element is not found. Check element id.');
  } else {
    var myevent = document.createEvent('MouseEvents');
    myevent.initEvent('click', false, true);
    element.dispatchEvent(myevent);
    return element.style.backgroundColor;
  }
}

var ncard = checknumberofcard();
var checkedmap = new Array(ncard);
var cardmap = new Array(ncard);

console.log(ncard);
for(i=0; i < checkedmap.length; i++){
  checkedmap[i] = 0;
}
for(i=0; i < cardmap.length; i++){
  cardmap[i] = 0;
}

solver(0);

単純に 1枚目をめくって色を覚える。もしこれまでめくったカードでマッチしてないカードのなかに同じ色があれば 2枚目はそれをめくる。なければめくってないカードからひとつめくる。色が違っていればそれも覚える。カードがなくなるまで以下繰り返し。

1800とかいうマジックナンバーはこれは無限ループ抑止用。思い出した。バグがなくなった今はなくてもいいはず。

しかし汚いソースだ。改めて読み返すと我ながら意味不明だ。

Google Developer Day 2010 Japan採点結果

quizサーバにログインすると採点結果がわかるらしいので、確認してみた。

問題 最終結果 進行状況 / 得点
ウォームアップ: 三択問題 4.00 非公開
ラウンド 1: HTML5 間違い探し 3.00 非公開
ラウンド 2: Google Maps API 1.00 1.0 0.0 未挑戦
ラウンド 2: 2-legged OAuth 5.00 5.0
Super Hackers:Shiritori 4.00 1.0 3.0 採点済
Super Hackers: PAC-MAN 未挑戦 未挑戦 未挑戦
Top Favorites: Google Code Site Japan 3.00 1.0
Top Favorites: Issue Tracker 未挑戦
Top Favorites: Hackathon 未挑戦
Top Favorites: Android アプリケーション 未挑戦
Top Favorites: Chrome Extensions 未挑戦
Top Favorites: コミュニティ貢献度 未挑戦
Next Generation: エッセイ 未挑戦

以前の予想通り Top Favorites枠での選出だった。

gonzui-0.1 release

http://namazu.org/~satoru/gonzui/

アルファ版だけど 0.1がリリースされたので早速試してみる(OSは FreeBSD 4.9-RELEASE)。

  • BDB binding for Rubyが未インストールだったのでインストール。0.5.2以上推奨(0.5.1NG)のところ,portsのバージョンは 0.5.1だったのでソースをとって来た。ヘッダファイルが見えていなかったので

[bash]
% ruby extconf.rb –with-db-include=/usr/local/include/db42
[/bash]
で明示的に指定してインストール完了。

  • iconv for Rubyもなかったので,こっちは portsから converters/ruby-iconvをインストール。

configureが通るようになったので makeすると c.cや java.cで文句言われるので
[c]
size_t len = maxlen;
[/c]
を関数の先頭行に移して makeを通す。

ようやくソースコード読み込みまでたどり着いた。が,
[bash]
fumi@graphite[~/work/gonzui-0.1]% ./gonzui-import /usr/ports/distfiles/wget-1.8.2.tar.gz
gonzui-import: Progressbar library is required to show the progress
gonzui-import: See http://raa.ruby-lang.org/project/progressbar/
./gonzui/util.rb:233:in `conv’: Invalid argument – iconv(“UTF-8”, “windows-31j”) (Errno::EINVAL)
[/bash]
と言われて,util.rbの
[ruby]
return Iconv.conv(“UTF-8”, name, str), name
[/ruby]
の strが空なのかなあ,というところまで追って力尽きた…。
(追記)
と思ったけど strが空じゃなくて windows-31jなんか知らない,と言っているのか。226行目のPreferenceから “windows-31j”を削除したところ,無事に正常終了するようになった。

[bash]
% ./gonzui-server
[/bash]

で起動完了。なかなかいい感じ。でもソース全表示させるとちょっと重いな。約 2000行のソースだと 1分くらい返ってこなくなる。

Hikiの利用者制限

SD11月号を見ながら .htaccessを編集。ページを編集できなくするだけなら POSTメソッドを禁止すればよいので、

<Limit POST>
Require user foo
</Limit>

とかで OK。しかしこれだと確かに既存ページの編集はできなくなるが、GETメソッドで実行されるページの新規作成はできてしまう。ならば GETメソッドも、と考えたけどそうすると今度は単なるページ閲覧のときにも認証が必要になるので、さすがにそれはうっとおしいと思いあきらめた。