読者です 読者をやめる 読者になる 読者になる

ntp1.jst.mfeed. 210.173.176.251 2 u 88 256 377 22.304 22.946 0.731

  1. ntp2.jst.mfeed. 210.173.160.86 2 u 104 256 377 21.677 22.019 1.096
  2. ntp3.jst.mfeed. 210.173.176.251 2 u 142 256 377 22.012 21.939 0.890

ヒント

「ntpq -p」コマンド実行後、左側の「*」は時刻同期中。「+」は接続可能な状態。
※同期中になるまで3分ほど時間がかかります。

freeBSD のサーバ構築log

http://airknights.fumimi.com/freebsd/setting/colorls.php

bashの切り替え
chsh -s /usr/local/bin/bash
gnulsでカラー表示
> cd /usr/ports/misc/gnuls
# su
# make install clean

# rehash

.bashrc に付け加え
alias ls='gnuls --color=auto --show-control-char'

http://blog.servered.net/2008/10/freebsd-70-ports.html
FreeBSDwget をインストールしてみた
# cd /usr/ports/ftp/wget
# make
# make install


tokyocabinet
http://blog.plastik.jp/archives/432
FreeBSDTokyoTyrant+TokyoCabinet

juliusインストール
#/uar/port/audio/julius/
#make config-recursive
#make install

NTPd インストール


http://freebsd.server-manual.com/freebsd9_ntpd.html

NTP時刻あわせ
[root@freebsd ~]# mv /etc/ntp.conf /etc/ntp.conf.org
[root@freebsd ~]# vi /etc/ntp.conf
↓下記を記入
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
[root@freebsd ~]# ntpdate -u ntp1.jst.mfeed.ad.jp
6 Mar 00:03:01 ntpdate[96781]: adjust time server 210.173.160.27 offset 0.000019 sec
[root@freebsd ~]# vi /etc/rc.conf
ntpd_enable="YES" ←追加(ntpd起動)
[root@freebsd ~]# /etc/rc.d/ntpd start
Starting ntpd.
[root@freebsd ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================

Arduino

温度センサに、LM35では精度が低いなぁと思っていると、
隣に、TMP36GZとかいう温度センサが置いてあった。
使い方はさっぱりわからないが、
http://www.analog.com/static/imported-files/jp/data_sheets/TMP35_36_37_jp.pdf
ここを読んでみると、なんとかなるかもしれない。

5Vを入れてみたが、返ってくる値は、常に5V...何故?
オシロスコープが欲しい所。

使い方

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// getの全文の最大サイズ ?aa=30&bb=40=&cc=100の場合は20となる
#define MAX_GET_PARAMETER 255
// getのパラメタの名前の最大サイズ
#define NAME_LENGTH_MAX 20
// getのパラメタの値の最大サイズ
#define VALUE_LENGTH_MAX 80

を宣言しておき、

char data[MAX_GET_PARAMETER]="?aa=&bb=40&cc=100";
struct getdata *array;
array = getGetData(data, array);

こうすると、arrayの中は、

array[0].szName = aaa
array[0].szValue =
array[1].szName = bb
array[1].szValue = 40
array[2].szName = cc
array[2].szValue = 100

こんな感じで格納される。

ソースコードは以下の通りだが、freeをどのタイミングでするかよくわからない。

// vim: set fdm=marker commentstring=;#%s:
//↑vimで中括弧三つ分でテキストの折りたたみしたりするのに使用.vim以外な人は削除しましょう
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//#define
/**{{{*/
// getの全文の最大サイズ ?aa=30&bb=40=&cc=100の場合は20となる
#define MAX_GET_PARAMETER 255
// getのパラメタの名前の最大サイズ
#define NAME_LENGTH_MAX 20
// getのパラメタの値の最大サイズ
#define VALUE_LENGTH_MAX 80
/**}}}*/

//getの構造体 ?abc=35の場合
// szName 構造体の名前 abc
// szValue 中身のデータ 35
// が入る.
typedef struct getdata { /** {{{*/
	char szName[NAME_LENGTH_MAX];
	char szValue[VALUE_LENGTH_MAX];
} getdata;
/**}}}*/

//プロトタイプ宣言 /** {{{*/
int getParametersNum(char* data);
char* dispGetData( struct getdata* array );
struct getdata* getGetData(char* data, struct getdata* array);
/**}}}*/

/** GET文の中の``=''の数を数え上げることで配列の要素数を求める
 * @param data getデータの全文
 * @example data <- ``?aa=40&bb=30&cc=80'' 
 * @return iRet =の数(要素数)
 */
int getParametersNum(char* data) { /** {{{ */
	int iRet = 0;
	int i;
	for ( i = 0; data[i];i++ ) {
		if ( data[i] == '=' ) {
			iRet++;
		}
	}
	return iRet;
}
/** }}}*/

/**画面に格納されたパラメタと値を出力する.
 * @param array 格納されたデータ(構造体)
 */
char* dispGetData( struct getdata* array ) { /** {{{*/
	int i;
	char* ret;
	sprintf(ret, "");
	//配列に入っている要素を出力する
	for ( i = 0; strlen(array[i].szName) != 0; i++ ) {
		//fprintf(stdout, "array[%d].szName = %s\n", i, array[i].szName);
		//fprintf(stdout, "array[%d].szValue = %s\n", i, array[i].szValue);
		sprintf(ret, "%sarray[%d].szName = %s\n",ret, i, array[i].szName);
		sprintf(ret, "%sarray[%d].szValue = %s\n",ret, i, array[i].szValue);
	}
	//fprintf(stdout, "%s", ret);
	return ret;
}
/**}}}*/

struct getdata* getGetData(char* data, struct getdata* array) { /** {{{*/
	char delimiter_amp[]="&";
	char delimiter_equ[]="=";
	char *tok,*tokequ;
	char szBufName[NAME_LENGTH_MAX];
	char szBufValue[VALUE_LENGTH_MAX];

	char szTemp[MAX_GET_PARAMETER];

	int iEqualNum = 0;//GET文の中の = の数.
	int i = 0;
	int j = 0;
	
	//fprintf(stdout, "I'm in getGetData. data = %s\n", data);

	//デリミタである=の数を数え上げる事で、要素の数を求める.
	iEqualNum = getParametersNum(data);
	//fprintf(stdout, "配列の数=%d\n", iEqualNum); 
	//getの全文
	//fprintf( stdout, "the data = %s\n", data);
	
	// get文の最初の文字は ? から始まるが、それは必要ないので削除する
	data[0] = data[1];
	
	// メモリの確保(要素数は iEqualNumで取得することができている)
	array = (struct getdata*)malloc(sizeof(struct getdata) * iEqualNum );
	if ( array == NULL ) {
		fprintf(stderr, "memory allocation error\n" );
		exit(-1);
	}

	tok = strtok( data, delimiter_amp );
	while (tok != NULL ) {
//		fprintf(stdout, "%d:%s\n",i, tok);
		// 今のtokは、実は [パラメタ]=[値]となっているので、さらにそれを=で分割する.
		strcpy(szTemp, tok);
		strcpy( array[i].szName, szTemp );

		tok = strtok(NULL, delimiter_amp );
		i++;
	}
	//とりあえず、構造体のszValueに入れたので、それを分割する.
	for ( i = 0; i < iEqualNum; i++ ) {
		j = 0;
		tokequ = strtok( array[i].szName, delimiter_equ );
		while ( tokequ != NULL ) {
			//fprintf( stdout, "[%d]:[j=%d]%s\n", i,j, tokequ );
			if ( j == 0 ) {	//パラメタ名
				strcpy( array[i].szName, tokequ );
			} else if ( j == 1 ) { //値
				strcpy( array[i].szValue, tokequ );
			}
			tokequ = strtok(NULL, delimiter_equ );
			j++;
		}
	}

	return array;
}
/**}}}*/

int main(int argc, char** argv) {
	char disp[1024];
	char data[MAX_GET_PARAMETER]="?aa=&bb=40&cc=100&dd=24&ee=14&ff=2";
	struct getdata *array;
	array = getGetData(data, array);
	//画面に格納出来たデータを出力する.
	//*disp = dispGetData(array);
	strcpy(disp, dispGetData(array));
	fprintf(stdout, "%s", disp);
	free(array);
	return 0;
}

Aruduino のイーサネットシールドでHTTP通信(GET受信)

Aruduino uno 3を兄上に紹介されたので、購入してみた。
ついでに、イーサネットシールドも共立電子で購入。
驚く程簡単にAruduinoは、HTTPサーバに変身をする。

なんと、スニペットの様に、例文がIDEの中に入っているので、キーボードを一切打たずにサーバになる。すごい。
で、HTTP通信ができるとなると、HTTPサーバを作りたくなるというのが、人情というもの。
こうなると、結構面倒で昔のcgi(C言語)の様な香りがする。面倒で一からフルスクラッチするには心が折れる・・・。

そこで、そのあたりのくだりは、別のサイトをそのまま頂戴することにした。

http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/Arduino/%C0%D6%B3%B0%C0%FE%B3%D8%BD%AC%A5%EA%A5%E2%A5%B3%A5%F3R2-D2/
こんなサイトとか、超参考にさせてもらった。

というか、これを作りたくてAruduinoを勉強しようと思った訳なので、これで完成となるのだが、
一方で、ソースコードを読んでみると、HTTP通信でGet受信する際、Irパケット以外の情報を取得していない仕様となっている。

個人的にはHTTPのGetリクエストには、すべてを受信して、あとでプログラムの方で処理をさせたいと考えていた。
例えば、
abc.html?abc=10&def=20&ghi=TEST
とかで送られると、
abc  |  10
def  |  20
ghi   |test
といった感じで配列とかに格納したかった。

そこで、上記のGETリクエストの文字列からAruduinoで格納するためのプログラムを書くことに。
本当に久しぶりのC言語で懐かしいが、やっぱりポインタがややこしい。
超汚いコードになったが、一応動くはず。MACgccで作ったので、もしかしたらAruduinoでは動いていたかも。

問題1:が使えない!

C++入っている(一部)とか言っていたので、vector使えるかと思ったのに!

問題2:C言語にはオーバーロードがなかった!

多重定義したらgccに怒られた。ひどい(涙)。

問題3:C言語には連想配列がなかった!

ハッシュテーブルってないんだったっけ。とかつかえないのか。
本当に、GET受信も、連想配列PHPなら、一瞬なのに。

問題4:C言語にはクラスの概念がなかった!

知ってたけど、やはりめんどくさい。

で、結局しょうがないから、パラメタと値を一セットにした構造体を動的配列にした。
とりあえずNativeなCで動くと思う。

.gvimrc

どこからのサイトに.gvimrcの設定ファイルがあったので、
それを、自分なりに改造した

source $VIMRUNTIME/mswin.vim
colorscheme morning
"全般
set nocompatible
set viminfo+=!   "yankring用に!を追加
"set shellslash   "パス区切りをスラッシュにする
set lazyredraw
set splitright   "vsplitで新規ウィンドウは右側にする
set t_Co=256
"colorscheme rdark
"colorscheme desert
"set background=dark
"colorscheme peaksea
"colorscheme rootwater

"edark
"http://eureka.pasela.org/

"Low-Contrast Color Schemes
"http://www.vim.org/scripts/script.php?script_id=1448

"rdark
"http://www.vim.org/scripts/script.php?script_id=1732

"ChocolateLiquor
"http://www.vim.org/scripts/script.php?script_id=592

"peaksea
"http://www.vim.org/scripts/script.php?script_id=760

"rootwater
"http://www.vim.org/scripts/script.php?script_id=2350

"tango-desert
"http://www.vim.org/scripts/script.php?script_id=2671

"バッファで編集中のファイルがあるディレクトリに移動:q
"
"autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]://" | silent! lcd %:p:h | endif

"Tab関係
"tabstop(ts) Tab文字を画面上で何文字に展開するか
set tabstop=4
"shiftwidth(sw) インデントの幅
set shiftwidth=4
"softtabstop(sts) Tabキーを押したときに挿入される空白の量
set softtabstop=0
"expandtab(et) Tab文字を空白に展開
"set expandtab

"入力関係
set backspace=indent,eol,start  "BSでなんでも消せるようにする
set formatoptions+=mM           "整形オプションにマルチバイト系を追加
set autoindent
set smartindent

"コマンド補完
set wildmenu
set wildmode=list:longest
set completeopt=menu,preview,menuone

"補完候補を出したまま改行できるようにする
"inoremap <expr> <CR> pumvisible() ? "\<C-Y>\<CR>" : "\<CR>"
"Enterで補完決定にする
"inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<C-G>u\<CR>"
"ESCで補完キャンセルして元のテキストに戻す  ※.gvimrcで<ESC>を上書きしてるので動かない
"inoremap <expr> <ESC> pumvisible() ? "\<C-E>" : "\<ESC>"
"インクリメンタルに候補を絞り込み、Enterで決定
"inoremap <expr> <C-N> pumvisible() ? "\<lt>C-N>" : "\<C-N>\<C-R>=pumvisible() ? \"\\<lt>Down>\" : \"\"\<lt>CR>"

"検索関係
set incsearch    "インクリメンタルサーチ
set nowrapscan   "ラップしない
set ignorecase   "大文字小文字無視
set smartcase    "大文字で始めたら大文字小文字を区別する
set hlsearch     "検索文字をハイライト表示

"選択した文字列を検索
"vnoremap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
"選択した文字列を置換
"vnoremap /r "xy:%s/<C-R>=escape(@x, '\\/.*$^~[]')<CR>//gc<Left><Left><Left>

"表示関係
set number       "行番号表示
"set ruler        "ルーラー表示(ステータスライン変えてるから意味ない)
set title        "ウィンドウのタイトルを書き換える

"カレントウィンドウのみカーソル行をハイライト
"autocmd WinEnter * setlocal cursorline
"autocmd WinLeave * setlocal nocursorline
set cursorline   "カーソル行を強調表示

"特殊文字(SpecialKey)の見える化
"set list
"set listchars=trail:_,nbsp:%,extends:>,precedes:<

"カーソル下の文字コード
"http://vimwiki.net/?tips%2F98
function! Getb()
  let c = matchstr(getline('.'), '.', col('.') - 1)
  let c = iconv(c, &enc, &fenc)
  return String2Dec(c)
endfunction
function! GetB()
  let c = matchstr(getline('.'), '.', col('.') - 1)
  let c = iconv(c, &enc, &fenc)
  return String2Hex(c)
endfunction
" :help eval-examples
" The function Nr2Hex() returns the Hex string of a number.
func! Nr2Hex(nr)
  let n = a:nr
  let r = ""
  while n
    let r = '0123456789ABCDEF'[n % 16] . r
    let n = n / 16
  endwhile
  return r
endfunc
" The function String2Hex() converts each character in a string to a two
" character Hex string.
func! String2Hex(str)
  let out = ''
  let ix = 0
  while ix < strlen(a:str)
    let out = out . Nr2Hex(char2nr(a:str[ix]))
    let ix = ix + 1
  endwhile
  return out
endfunc
func! String2Dec(str)
  let out = ''
  let ix = 0
  while ix < strlen(a:str)
    if ix == 1
      let out = out . ','
    endif
    let out = out . printf('%3d', char2nr(a:str[ix]))
    let ix = ix + 1
  endwhile
  return out
endfunc

"ステータスライン関係
set laststatus=2 "ステータスラインを常に表示
"set statusline=%y=[%{&fileencoding}][\%{&fileformat}]\ %F%m%r%=<%c:%l>
"ファイルパス [filetype][fenc][ff]    桁(ASCII=10進数,HEX=16進数) 行/全体(位置)[修正フラグ]
set statusline=%<%F\ %r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%4v(ASCII=%{Getb()},HEX=%{GetB()})\ %l/%L(%P)%m

"エンコーディング関係
set fileformat=dos
set fileformats=dos,unix,mac
"if has('win32')
"  set encoding=cp932
"  set fileencoding=utf-8
"  set fileencodings=iso-2022-jp,euc-jp,utf-8,utf-16,ucs-2-internal,ucs-2
"else
"  set encoding=utf-8
"  set termencoding=utf-8
"  set fileencoding=utf-8
"  set fileencodings=iso-2022-jp,cp932,euc-jp,utf-16,ucs-2-internal,ucs-2
"endif

"文字コードの自動認識
"http://www.kawaz.jp/pukiwiki/?vim#content_1_7
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif

" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  " 一部のUCS文字の幅を自動計測して決める
  if has('kaoriya')
    set ambiwidth=auto
  else
    set ambiwidth=double
  endif
endif

"ファイルタイプ関係
syntax on           "シンタックスハイライト
filetype indent on  "ファイルタイプによるインデントを行う
filetype plugin on  "ファイルタイプによるプラグインを使う

"バックアップファイル, スワップファイル
set backup
if has('win32')
  if hostname() ==? 'LUNA'
    let s:backup_dir = 'D:/vim_backup'
  else
    let s:backup_dir = 'C:/vim_backup'
  endif
else
  let s:backup_dir = expand('~/.vim_backup')
endif
if !isdirectory(s:backup_dir)
  exec mkdir(s:backup_dir, '', 0700)
endif
"set backupext=.bak
let &backupdir = s:backup_dir
let &directory = s:backup_dir

"バイナリ編集(xxd)モード(vim -b での起動、もしくは *.bin ファイルを開くと発動します)
"http://www.kawaz.jp/pukiwiki/?vim#ib970976
"augroup BinaryXXD
"  autocmd!
"  autocmd BufReadPre  *.bin let &binary =1
"  autocmd BufReadPost * if &binary | silent %!xxd -g 1
"  autocmd BufReadPost * set ft=xxd | endif
"  autocmd BufWritePre * if &binary | %!xxd -r
"  autocmd BufWritePre * endif
"  autocmd BufWritePost * if &binary | silent %!xxd -g 1
"  autocmd BufWritePost * set nomod | endif
"augroup END

"操作関係
set scrolloff=10    "スクロール時に表示を5行確保

"Ctrl+上下で5行ずつ移動
map <C-Up> <Up><Up><Up><Up><Up>
imap <C-Up> <Up><Up><Up><Up><Up>
map <C-Down> <Down><Down><Down><Down><Down>
imap <C-Down> <Down><Down><Down><Down><Down>



"表示行単位で移動
noremap j gj
noremap k gk
noremap gj j
noremap gk k

"挿入モードのカーソル移動
inoremap <M-j> <Down>
inoremap <M-k> <Up>
inoremap <M-h> <Left>
inoremap <M-l> <Right>

"最後に変更されたテキストを選択
nnoremap gc `[v`]
vnoremap gc :<C-u>normal gc<CR>
onoremap gc :<C-u>normal gc<CR>

"挿入モードで範囲選択(セレクトモード)
set selectmode=key
set keymodel=startsel,stopsel
snoremap <C-S-Up> <S-Up><S-Up><S-Up><S-Up><S-Up>
snoremap <C-S-Down> <S-Down><S-Down><S-Down><S-Down><S-Down>

"フレームサイズをテンキーの+-で変更する
map <kPlus> <C-W>+
map <kMinus> <C-W>-

"ウィンドウ移動
nnoremap <S-Up> <C-W>k
nnoremap <S-Down> <C-W>j
nnoremap <S-Left> <C-W>h
nnoremap <S-Right> <C-W>l

"バッファ切り替え
nnoremap <S-PageDown> :<C-u>bn<CR>
nnoremap <S-PageUp>   :<C-u>bp<CR>

"タブ切り替え
nnoremap <C-Tab>   gt
nnoremap <C-S-Tab> gT

"マウス関係
"set mouse=a
"set ttymouse=xterm2

"set tags=tags       "タグファイル
set grepprg=internal "内蔵grepを使う

"編集中のファイルのあるディレクトリに移動
au BufEnter * exec ':lcd %:p:h'

"TOhtmlコマンドの設定
"let g:html_number_lines = 0
"let g:html_ignore_folding = 1
let g:html_use_css = 1
"let g:html_no_pre = 0
"let g:html_use_encoding = 'utf8'
let g:html_use_xhtml = 1


"========== プラグイン設定 ==========

"autocomplpop
"http://www.vim.org/scripts/script.php?script_id=1879
let g:AutoComplPop_NotEnableAtStartup=1
let g:AutoComplPop_MappingDriven=1
autocmd FileType * let g:AutoComplPop_CompleteOption='.,w,b,u,t,i'
autocmd FileType php let g:AutoComplPop_CompleteOption='.,w,b,u,t,k$VIM/vimfiles/dict/php.dict'

"PHP辞書
"http://www.asahi-net.or.jp/~wv7y-kmr/memo/vim_php.html

"taglist
"http://www.vim.org/scripts/script.php?script_id=273
if has('win32')
  let Tlist_Ctags_Cmd="ctags.exe"
else
  let Tlist_Ctags_Cmd="ctags"
endif
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
let Tlist_Use_Right_Window=1
let tlist_php_settings = 'php;c:class;d:constant;f:function'
map <silent> <leader>tl :TlistToggle<CR>

"bufexplorer
"http://www.vim.org/scripts/script.php?script_id=42
"map <silent> <leader>bl :BufExplorer<CR>

"winmanager
"http://www.vim.org/scripts/script.php?script_id=95
"http://www.vim.org/scripts/script.php?script_id=1440
let g:winManagerWindowLayout = 'FileExplorer,TagList'
let g:explSplitRight=1
let g:explStartRight=1
let g:explDateFormat='%Y-%m-%d %H:%M:%S'

map <C-w><C-f> :<C-u>FirstExplorerWindow<CR>
map <C-w><C-b> :<C-u>BottomExplorerWindow<CR>
map <C-w><C-t> :<C-u>WMToggle<CR>

"matchit
:source $VIMRUNTIME/macros/matchit.vim

"mru.vim
"http://www.vim.org/scripts/script.php?script_id=521
let MRU_Max_Entries=20

"smooth-scroll.vim
"http://www.vim.org/scripts/script.php?script_id=1601
"nmap <PageDown> <C-F>
"nmap <PageUp> <C-B>

"evalbuffer.vim
"http://eureka.pasela.org/
vmap <silent> <F10> :<C-u>EvalBuffer<CR>
"nmap <silent> <F10> mzggVG<F10>`z
nmap <silent> <F10> :<C-u>EvalBuffer<CR>
map  <silent> <S-F10> :<C-u>pc<CR>

"bwTemplate.vim
"http://www.vim.org/scripts/script.php?script_id=1411
if has('win32')
  let g:bwTemplateDir=substitute($VIM . '\vimfiles\templates\', '\', '/', 'g')
else
  let g:bwTemplateDir=$HOME . '/.vim/templates/'
endif
let g:bwTemplate_author='Yuki'
let g:bwTemplate_email='paselan at Gmail.com'
nnoremap <unique> <F4> :<C-u>WTemplate<CR>
nnoremap <unique> <S-F4> :<C-u>WTemplateList<CR>

"project.vim
"http://www.vim.org/scripts/script.php?script_id=69
let g:proj_flags="imstg"

"Align.vim
"http://www.vim.org/scripts/script.php?script_id=294
let g:Align_xstrlen=3

"surround.vim
"http://www.vim.org/scripts/script.php?script_id=1697

"eregex.vim
"http://www.vector.co.jp/soft/unix/writing/se265654.html

"vcscommand.vim
"http://www.vim.org/scripts/script.php?script_id=90

"yankring.vim
"http://www.vim.org/scripts/script.php?script_id=1234

"svn-diff.vim
"http://www.vim.org/scripts/script.php?script_id=978

"grep.vim
"http://www.vim.org/scripts/script.php?script_id=311

"phpmanual.vim
"http://www.asahi-net.or.jp/~wv7y-kmr/tools/phpmanual.html
let phpmanual_convfilter='cat'
let phpmanual_htmlviewer='w3m -O "EUC-JP" -T text/html'
let phpmanual_use_ext_browser=1
let phpmanual_ext_command='PHPBrowser'
let phpmanual_ext_browser_cmd='firefox'

"monday.vim
"http://www.vim.org/scripts/script.php?script_id=1046

"commentout.vim
"http://nanasi.jp/articles/vim/commentout_source.html

"AutoClose.vim
"http://www.vim.org/scripts/script.php?script_id=1849
"IMとの相性が悪いようなので解決策が見つかるまで無効にする
"let g:autoclose_on=0

"colorsel.vim
"http://www.vim.org/scripts/script.php?script_id=927

"ScreenShot_mb.vim
"http://nanasi.jp/articles/vim/screenshot_vim.html
let g:ScreenShot = {'Title':1, 'Icon':0, 'Credits':0, 'fill_screen':0}

"Chalice
"http://www.kaoriya.net/
set runtimepath+=$VIM/vimfiles/chalice

"TwitVim
"http://www.vim.org/scripts/script.php?script_id=2204
let twitvim_api_root = 'https://twitter.com'
let twitvim_cert_insecure = 1
let twitvim_login_b64 = 'IDとパスワード'
let twitvim_browser_cmd = 'C:\Program Files\Mozilla Firefox\firefox.exe'
let twitvim_count = 50


"========== プライベートな拡張 ==========

"memo
function! Memo()
  if has('win32')
    if hostname() ==? 'LUNA'
      :tabnew D:/memo.lst
    else
      :tabnew C:/memo.lst
    endif
  else
    :tabnew ~/memo.lst
  endif
endf
command! Memo :call Memo()

"日付挿入
function! InsertCDate(format)
  let old_lc_time = v:lc_time
  try
    exec ':silent! lang time C'
    let datetime = strftime(a:format)
    return datetime
  finally
    exec ':silent! lang time ' . old_lc_time
  endtry
endf
"YYYY-MM-DD HH:MM:SS
inoremap <Leader>date <C-R>=InsertCDate('%Y-%m-%d %H:%M:%S')<CR>
nnoremap <Leader>date i<C-R>=InsertCDate('%Y-%m-%d %H:%M:%S')<CR><ESC>
vnoremap <Leader>date s<C-R>=InsertCDate('%Y-%m-%d %H:%M:%S')<CR><ESC>
"RFC2822(WDay, DD Month YYYY HH:MM:SS +-Timezone)
if has('win32')
  "Windowsの%zは「東京 (標準時)」とか返してきて+0900が得られない……
  inoremap <Leader>dt822 <C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S +0900')<CR>
  nnoremap <Leader>dt822 i<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S +0900')<CR><ESC>
  vnoremap <Leader>dt822 s<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S +0900')<CR><ESC>
else
  inoremap <Leader>dt822 <C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S %z')<CR>
  nnoremap <Leader>dt822 i<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S %z')<CR><ESC>
  vnoremap <Leader>dt822 s<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S %z')<CR><ESC>
endif

"HTML整形
function! HTMLFormat()
  let l:reg_slash = @/
  exec '%s/></>\r</g'
  normal! ggVG=
  let @/ = l:reg_slash
endf
command! HTMLFormat :call HTMLFormat()

"ファイル末尾に改行を付けずに保存
function! WriteNoEOL()
  let l:old_bin = &binary
  let l:old_eol = &endofline
  set binary
  set noendofline
  exec ':w'
  let &binary = l:old_bin
  let &endofline = l:old_eol
endf
command! WriteNoEOL :call WriteNoEOL()


" vim:set ts=2 sts=2 sw=2 et:

"全般
set t_Co=256
"colorscheme rdark
"colorscheme desert

"edark
"http://eureka.pasela.org/

"Low-Contrast Color Schemes
"http://www.vim.org/scripts/script.php?script_id=1448

"rdark
"http://www.vim.org/scripts/script.php?script_id=1732

"ChocolateLiquor
"http://www.vim.org/scripts/script.php?script_id=592

"81桁目以降を強調表示
"hi over80column guibg=dimgray
"match over80column /.\%>81v/

"ウィンドウ関係
set guioptions-=T
if hostname() ==? 'LUNA'
  set columns=160
  set lines=65
  winpos 70 70
elseif hostname() ==? 'SATELLA'
  set columns=110
  set lines=35
  winpos 100 15
else
  set columns=140
  set lines=55
  winpos 70 70
endif
set cmdheight=2  "コマンドラインの高さ(GUI使用時)
if has('win32')
"  set guifont=MS_Gothic:h10:cSHIFTJIS
"  set guifont=Consolas:h9:cSHIFTJIS
"  set guifont=MeiryoKe_Console:h10:cSHIFTJIS,M+1VM+IPAG_circle:h10:cSHIFTJIS,MS_Gothic:h10:cSHIFTJIS
  set guifont=M+1VM+IPAG_circle:h11:cSHIFTJIS,MS_Gothic:h11:cSHIFTJIS
else
  set guifont=M+1VM+IPAG\ circle\ 10
endif

"メニュー関係
set winaltkeys=no "Alt+xでメニューをフォーカスしない
" Alt+Spaceでウィンドウのシステムメニュー
nnoremap <silent> <M-Space> :<C-u>simalt ~<CR>

"タブ関係
set guitablabel=%M\ %-20.20t

"マウス関係
set mouse=a
" マウスの移動でフォーカスを自動的に切替えない (mousefocus:切替る)
set nomousefocus
" 入力時にマウスポインタを隠す (nomousehide:隠さない)
set mousehide

"IME関係
if has('multi_byte_ime') || has('xim')
  " 挿入モード・検索モードでのデフォルトのIME状態設定
  set iminsert=0 imsearch=0
  if has('xim') && has('GUI_GTK')
"    set imactivatekey=C-space
    set imactivatekey=Zenkaku_Hankaku
  endif
  " 挿入モードでのIME状態を記憶させない
  inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>
endif

"クリップボード関係
"inoremap <S-Insert> <C-R><C-O>+
"nnoremap <S-Insert> "+P
"vnoremap <S-Insert> "+p
"vnoremap <C-Insert> "+y
"vnoremap <S-Delete> "+x

"URLをブラウザで開く
"Chaliceからfunction拝借
"let BrowserPath = 'C:\Program Files\Mozilla Firefox\firefox.exe'
function! AL_execute(cmd)
  if 0 && exists('g:AL_option_nosilent') && g:AL_option_nosilent != 0
    execute a:cmd
  else
    silent! execute a:cmd
  endif
endfunction

function! s:AL_open_url_win32(url)
  let url = substitute(a:url, '%', '%25', 'g')
  if url =~# ' '
    let url = substitute(url, ' ', '%20', 'g')
    let url = substitute(url, '^file://', 'file:/', '')
  endif
  " If 'url' has % or #, all of those characters are expanded to buffer name
  " by execute().  Below escape() suppress this.  system() does not expand
  " those characters.
  let url = escape(url, '%#')
  " Start system related URL browser
  if !has('win95') && url !~ '[&!]'
    " for Win NT/2K/XP
    call AL_execute('!start /min cmd /c start ' . url)
    " MEMO: "cmd" causes some side effects.  Some strings like "%CD%" is
    " expanded (may be environment variable?) by cmd.
  else
    " It is known this rundll32 method has a problem when opening URL that
    " matches http://*.html.  It is better to use ShellExecute() API for
    " this purpose, open some URL.  Command "cmd" and "start" on NT/2K?XP
    " does this.
    call AL_execute("!start rundll32 url.dll,FileProtocolHandler " . url)
  endif
endfunction

function! Browser()
    let line0 = getline(".")
    let line = matchstr(line0, "http[^ ]*")
    if line==""
      let line = matchstr(line0, "ftp[^ ]*")
    endif
    if line==""
      let line = matchstr(line0, "file[^ ]*")
    endif
"    exec ":silent !start \"" . g:BrowserPath . "\" \"" . line . "\""
    call s:AL_open_url_win32(line)
endfunction
map <Leader>w :<C-u>call Browser()<CR>
" vim:set ts=2 sts=2 sw=2 et:

PHPバージョンアップ

PHPをバージョンアップさせた。
やり方は、
http://www.hot-linux.org/osx/?rec_no=124
を参考にした。postgresqlは使わないのと、
apacheは1.3なので、 apxs2をapxsにしたぐらいか。
$ sudo ./configure --with-pgsql=/opt/local/lib/postgresql83 --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-apxs2=/usr/sbin/apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-trans-sid --with-xml --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-dbx --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc

そしたら、pukiwikiがおかしくなったorz..