Hatena::ブログ(Diary)

四角革命前夜

2011年10月29日(土)

Vimでマージ

Mercurialでマージが発生したときにVimが起動してうれしいやらかなしいやらで、なんとかかんとかマージできたのでメモです。


diffg (バッファ番号)
diffupdate

でカーソル位置の行をバッファ番号のものにして、

再描画しています。


[c

で前の衝突行へ。

]c

で次の衝突行へ。らしい。

2011年10月25日(火)

vimgrepのメモ

vimgrep /xxx/j % | cwin " カレントバッファ
vimgrep /xxx/j # | cwin " 裏バッファ

unite-grepも使うんだけどね。


args **/*.[ch]
argdo %s/stdio/stdlib/g | update

qfreplaceも使うんだけどね。

2011年10月23日(日)

Vimのプラグイン管理を.hgsubからneobundle.vimに変えたよ

Vimのプラグイン管理をMercurialのサブリポジトリとして書いてたんですが、.hgsubにはサブリポジトリのURIをgit://で書いていたせいで、プロキシ環境で取得できなくなっていたり……

リポジトリ自体も13MBと大きくなっていたので、作り直して整理するついでにneobundle.vimを使ってみたのでした。

環境:MacOS 10.6.8 32bit, 10.7.1 64bit / Ubuntu 11.10 64bit / Vim 7.3


neobundle.vimをインストール

~/.bundleにプラグインを配置する前提で進めます。

$ mkdir -p ~/.bundle
$ cd ~/.bundle
$ git clone git://github.com/Shougo/neobundle.vim.git ~/.bundle/neobundle.vim

.vimrcにインストールするプラグインのパスを書く

.vimrcに

filetype off

if has('vim_starting')
  set runtimepath+=~/.bundle/neobundle.vim
  call neobundle#rc(expand('~/.bundle'))
endif

NeoBundle 'https://github.com/h1mesuke/unite-outline.git'
NeoBundle 'https://github.com/kana/vim-smartchr.git'
NeoBundle 'https://github.com/kchmck/vim-coffee-script.git'
NeoBundle 'https://github.com/mattn/zencoding-vim.git'
NeoBundle 'https://github.com/motemen/hatena-vim.git'
NeoBundle 'https://github.com/othree/eregex.vim.git'
NeoBundle 'https://github.com/Shougo/neobundle.vim.git'
NeoBundle 'https://github.com/Shougo/neocomplcache.git'
NeoBundle 'https://github.com/Shougo/unite.vim.git'
NeoBundle 'https://github.com/Shougo/vimfiler.git'
NeoBundle 'https://github.com/Shougo/vimproc.git'
NeoBundle 'https://github.com/Shougo/vimshell.git'
NeoBundle 'https://github.com/thinca/vim-qfreplace.git'
NeoBundle 'https://github.com/thinca/vim-quickrun.git'
NeoBundle 'https://github.com/tsukkee/unite-tag.git'
NeoBundle 'https://github.com/ujihisa/shadow.vim.git'
NeoBundle 'https://github.com/vim-scripts/delphi.vim.git'
NeoBundle 'https://github.com/vim-scripts/JSON.vim.git'
NeoBundle 'https://github.com/vim-scripts/TwitVim.git'

filetype plugin on
filetype indent on

https://になってますが、git://でも大丈夫です。(試してませんが)

Gitの他、MercurialやSubversionのリポジトリも取得できるとか。


インストール

Vimを開いて、

:NeoBundleInstall!

でインストールが始まります。


Help曰く、Vundleと互換があるらしいのでVundle使いの方でもすぐに移行できるんじゃないでしょうか。

それにしても便利…… 今まで使わなかったのが悔やまれるほどに。


追記:

unite.vimがインストールされている状態でこれを実行するとunite上(?)に表示されていきます。

neobundle.vimとunite.vimを先にインストールして、こっちのコマンドを実行したほうがいいかも。

2011年10月21日(金)

最近買ったもの

読まない気がする……

iPodTouchじゃPDF読むのは辛いし、iPadをはじめとしたタブレット持ってないし……

2011年10月18日(火)

Ubuntu11.10 64bitをインストールしたよ

Ubuntu11.10が気に入らなくてXubuntuを使ってみたり、Debian unstableを使ってみたり、LMDEを使ってみたり、Lubuntuを使ってみたりしましたが結局戻ってきました。

以下は設定変更やインストールしたアプリケーションなどです。


ホームディレクトリ直下のディレクトリを英語名に

$ LANG=C; xdg-user-dirs-gtk-update 

Google Chrome dev channelのインストール

なんかdebファイルを普通にインストールしようとしてもエラーが出るので以下のようにインストール。

$ sudo dpkg -i google-chrome-unstable_current_amd64.deb 
$ sudo apt-get -f install

apt

$ sudo apt-get install -y \
    build-essential \
    ibus-mozc \
    gnome-do \
    gthumb \
    comix \
    mplayer \
    mercurial \
    git \
    subversion \
    imagemagick \
    curl \
    exuberant-ctags \
    libssl-dev \
    screen \
    openjdk-6-jdk \
    xsel \
    easytag \
    fontforge \
    cdparanoia \
    lame

Vimをソースからインストール

$ sudo apt-get install -y libncurses5-dev
$ mkdir -p ~/Binary/Vim
$ hg clone https://vim.googlecode.com/hg ./Vim
$ cd Vim
$ ./configure \
    --prefix=$HOME/Binary/Vim \
    --disable-gui \
    --disable-selinux \
    --enable-fontset \
    --enable-multibyte \
    --enable-xim \
    --with-compiledby="sasa+1 <sasaplus1 @ gmail.com>" \
    --with-features=huge
$ make
$ sudo make install
$ echo 'export PATH=$PATH:$HOME/Binary/Vim/bin' >> ~/.bashrc
$ source ~/.bashrc

deb


Chrome

2011年10月14日(金)

Gaucheをコンパイルしたよ

Lisp系言語をやりたくなったのでGaucheをコンパイル・インストールしてみたのですよ。

すぐ飽きそうですけど。

環境:Mac OS 10.6.8


ダウンロード・コンパイル・インストール

$ wget http://prdownloads.sourceforge.net/gauche/Gauche-0.9.2.tgz
$ tar xvfz Gauche-0.9.2.tgz
$ cd Gauche-0.9.2
$ mkdir -p ~/Binary/Gauche
$ ./configure --prefix=$HOME/Binary/Gauche
$ make
$ make test
$ make install

でインストールまでは完了。あとは~/.bashrcに

export PATH=$PATH:$HOME/Binary/Gauche/bin
# もしくは
#alias gosh='~/Binary/Gauche/bin/gosh "$@"'

を記述する。といつも通りのコマンド。

さあ、果たして使う日は来るのでしょうか。

2011年10月10日(月)

UTF-8のソースコードに文字列定数を書いたらそのままUTF-8になったお話

program test;

uses
  Windows;

begin
  WriteLn(lstrlenW('あ'));  { 3 }
end.

と書いたら3が返ってきて、びっくりですよ。

ソースコードがUTF-8だからUTF-8で定数が保存されたのでしょうか。

program test;

uses
  Windows;

begin
  WriteLn(lstrlenW(#$3042));  { 1 }
end.

でちゃんと1が返ってきました。


追記:

ソースコードが、じゃなくてそもそも内部ではUTF-8を使ってるんでした。

多分それのせいかと。なので文字列定数に対してUTF8Decodeとか使えばUTF-16として戻ってくるはず。


追記2:

program test;

{$MODE OBJFPC}

uses
  Windows;

var
  s: WideString;
begin
  s := UTF8Decode('あ');
  Writeln(lstrlenW(s)); { 1 }
end.

うーむ……

Project Euler - Problem 1

no titleをやってみました。

Google翻訳していい加減に理解したけど、1000までの3と5の倍数を足し算する、っていう理解でいいのかな?

// 3と5のすべての倍数を求める
(function(max){

  var i,
      a3 = [],
      a5 = [];

  for (i = 1; i < max; ++i) {
    if (i % 3 === 0) {
      a3.push(i);
      continue;
    }
    if (i % 5 === 0) {
      a5.push(i);
      continue;
    }
  }

  function sum(ary) {
    var i,
        len,
        total = 0;
    for (i = 0, len = ary.length; i < len; ++i) {
      total += ary[i];
    }
    return total;
  }

  //console.log(a3);
  //console.log(a5);
  console.log(sum(a3) + sum(a5));

}(1000));

多分、愚直にやるより計算量少ない方法があるんだろうけど。

それはいいとしても、continueどうにかならんのか……

2011年10月07日(金)

最近買ったもの

Software Design (ソフトウェア デザイン) 2011年 10月号 [雑誌]

Software Design (ソフトウェア デザイン) 2011年 10月号 [雑誌]

FreeBSD特集が気になったので……

って、4つ目のOSを扱う事になるのかな?

fptestの使い方

久しぶりにPascalが触りたくなったのでFreePascalでアプリを書こうかと。

といっても昔作ったやつをまた作り直してるってだけなんですが……


Delphi向けのユニットテストライブラリとしてDUnitなんてのがありましたが、

更新も止まっているみたいで、DUnit2も進捗がないようです。(多分)

今回はFreePascalを使うのですが、DUniteは以前使った記憶ではFreePascalで使えなかったのですよね。

他にないのか探してみたらgithubにfptestというDUnit2からフォークしたものがあるではないですか。

そういうわけで今回はこれを使うことにしたのでした。

no title


テストユニット

unit Aaa;

interfaces

uses
  TestFramework;

type
  TTestCaseAaa = class(TTestCase)
  published
    procedure TestOne;
  end;

procedure RegisterTests;

implementation

procedure TTestCaseAaa.TestOne;
begin
  Check(1 + 1 = 2, 'TTestCaseAaa#TestOne');
end;

procedure RegisterTests;
begin
  TestFramework.RegisterTest(TTestCaseAaa.Suite);
end;

end.

テストユニットはこんな感じ。

TTestCaseを継承してpublishedでテストメソッドを書いてあげればOKです。


テストの登録・実行

program test;

uses
  Aaa, TextTestRunner;

begin
  Aaa.RegisterTests;
  RunRegisteredTests;
end.

呼ぶ方はこれだけです。


コンパイル・実行

$ fpc -Mobjfpc -WC -Fu.\fptest\src test.lpr
$ test.exe

これコンパイルと実行を。今回はTextTestRunnerをusesに入れたので、

コマンドライン用にコンパイルしましたが、GUI用のGUITestRunnerもあるようです。

2011年10月01日(土)

Mercurialのサブリポジトリを消す

  1. .hgsubから消したいサブリポジトリの行を消す
  2. コミット
  3. サブリポジトリそのものを消す