リモートで音楽再生環境

とりあえずtiarraの設定したりしていた。
年末にZ4という少しはマシなPC用スピーカーを買って、どうせだから自宅サーバーをメディアサーバー的な何かにしようと思い立った。

理由。

  • iTunes重い
  • MacBookに容量を食うファイルを持たせたくない
  • スピーカーの配線を単純したい


環境はUbuntu9.10

sudo apt-get install moc moc-ffmpeg-plugin

sshでログインして、mocp で起動。サーバーとして起動しているのでログアウトしても構わない。


PS3(初期型)をメディアサーバーにしても良かったんだけど、駆動音がうるさい。生活空間に置くにはちょっと無理がある。
起動する度に /etc/init.d/network restart しないとDNSが解決できない。なんでだろ。

Twitterのタイムラインをしゃべるスクリプト

@clavicle_がゆっくり声でしゃべるjavaの何かを作っていた。実装を見る限りすぐ作れそうな気がしたの。で、作った。
お手軽クッキングなので例外処理とかひどく適当です

要: SayKana Mecab pythonMecab Binding Python-Twitter

#! /usr/bin/python
#coding:utf-8

import MeCab
import twitter
import os
import re

username=""
password=""

m = MeCab.Tagger('-Ochasen')

def say(text):
	os.system("saykana "+text)
while 1:
	tl=twitter.Api(username,password).GetFriendsTimeline()	
	for s in tl:
		mes=""
		for i in range(100):
			try: mes+=m.parse(s.text.encode('utf-8')).rstrip('\n').split('\n')[i].split('\t')[1]
			except:break
		print ""+s.user.name+":"+ s.text
		print mes
		say(mes)

今日のVimperatorいじり

Firefoxのプロファイルがぶっこわれたので、ついでなのでFirefox3.6b4 / Vimperator開発版で環境構築し直した。ついでにごっそり削ってダイエット。

最近のFirefox開発版はMigemoヒントがどうにか動くようになりました。これがないと日本語周りのvimperatorは割と壊滅的ですね。

はてなブックマーク拡張

Hatena Bookmark :: Add-ons for Firefox

内部でviperator使ってるらしいので連携させる
Vimperator ではてなブックマーク拡張を使う - hatena-bookmark-xul - GitHub


標準だとコメント/コメントビュアーがc/Cにコメントが割り当てられるのだが、残念うちじゃそこはcopy.jsの特等席だぜ!ということでどいてもらった。
.vimperatorrcに追記

"はてなブックマーク拡張
javascript <<EOF
liberator.globalVariables.hBookmark_shortcuts = {
    hintsAdd     : 'e',
    hintsComment : 'E',
    add          : ['e'],
    comment      : ['E'],
};
EOF

javascript if (typeof hBookmark != 'undefined') liberator.loadScript('chrome://hatenabookmark/content/vimperator/plugin/hatenabookmark.js', {__proto__: this});

set complete+=H
nnoremap h :hbt<Space>

eなのはなんとなく空いてたからです

Firebug経由でXPath取得

vimperator 2.0preだと簡単にXPathを取得できる - hogeなlog

"XPath (2.0
javascript <<EOM
// ;x use FireBugLibrary(FBL)
hints.addMode("x", "copy xpath",
    function(elem) {
        let xpath = FBL.getElementXPath(elem);
        liberator.echo(xpath);
        util.copyToClipboard(xpath);
    },
    function() "//*");
EOM

twitter.jsで投稿文字数を表示

要:statstat.js
参考:statstat.js で twitter.js 用の文字数表示 - Death to false Web browser! - vimperatorグループ

let g:statstat_expression = "let ([,,,as]=commands.parseCommand(commandline.command)) as.length"
let g:statstat_autorun = "true"
let g:statstat_interval = "400"

copy.jsでコピーしたものをそのままTwitter.jsで投げてることが多々ある。そういうときに文字数がオーバーしてないか確認できて便利

[http://sites.google.com/site/fudist/Home/qfixhowm:title=QFixHow

コマンド履歴、検索履歴を活用して、作業効率を上げよう。―名無しのvim使い
Emacs からVim へ移行しました - Slow Dance
トップ - vimrcbox
VimがTwitterクライアントになる! TwitVimの紹介 - Creative Gear
vi で Python を補完する - えこ日記


				レッスン 1 要約


  1. カーソルは矢印キーもしくは hjkl キーで移動します。
	 h (左)		j (下)         k (上)	    l (右)

  2. Vim を起動するにはプロンプトから vim ファイル名 <ENTER> とタイプします。

  3. Vim を終了するには	   <ESC> :q!	 <ENTER>  とタイプします(変更を破棄)。
               もしくは	   <ESC> :wq	 <ENTER>  とタイプします(変更を保存)。

  4. カーソルの下の文字を削除するには、ノーマルモードで x とタイプします。

  5. カーソルの位置に文字を挿入するには、ノーマルモードで i とタイプします。
	 i     テキストのタイプ	<ESC>         カーソル位置に追加
	 A     テキストの追加   <ESC>         行末に追加

NOTE: <ESC> キーを押すとノーマルモードに移行します。その際、間違ったり入力途
      中のコマンドを取り消すことができます。


				レッスン 2 要約


  1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
  2. カーソル位置から行の末尾までを削除するには d$ とタイプします。
  3. 行全体を削除するには dd とタイプします。

  4. モーションを繰り返すには数値を付与します:   2w
  5. 変更に用いるコマンドの形式は
               オペレータ   [数値]   モーション

     それぞれ:
       オペレータ - 削除 d の類で何をするか。
       数値       - そのコマンドを何回繰り返すか。
       モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
                    けるか。

  6. 行の先頭に移動するにはゼロを使用します:  0

  7. 前回の動作を取消す:	u   (小文字 u)
     行全体の変更を取消す:	U   (大文字 U)
     取消しの取消し:		CTRL-R

				レッスン 3 要約


  1. 既に削除されたテキストを再配置するには、p をタイプします。これは削除さ
     れたテキストをカーソルの後に挿入します(行単位で削除されたのならば、カー
     ソルのある次の行に挿入されます)。

  2. カーソルの下の文字を置き換えるには、r をタイプした後、それを置き換える
     文字をタイプします。

  3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
     更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
     c$ ならば行の終わりまでを変更します。

  4. 変更コマンドの形式は

         c    [数値]   モーション

さぁ、次のレッスンへ進みましょう。


vimに入門してみる

小指の疲労感が深刻なレベルに達しているのでvimを練習しておくことにした。
vimperatorを弄っていたのでコマンド群にそれほど抵抗なく入門できたと思う。
基本的にMacVimです。

macvim - Project Hosting on Google Code

すごく適当なモードの理解

ノーマルモード(esc) - インサートモード(i)
   |
ビジュアルモード(v)


各モードからノーマルモードに移るには
ノーマルモードで:打ってから適当にコマンド飛ばせる
コマンドがEmacselispなんかと違って非常にわかりやすい

キーバインド

とりあえずノーマルモードキーバインドを最低限覚える

i インサートモードへ
v ビジュアルモードへ
: コマンドラインでへ
hjkl 左下上右
yy 行コピー
p 張りつけ
dd 行削除

ファイル操作

:w 保存
:e filename 開く

!をつけると強制力を持たせることができる。:w!など


画面操作

v 縦分割
s 横分割
o 分割解除
バッファ移動

いまいちヴィジュアルモードの存在意義がわかってない

Emacsからの移行

とりあえず慣れるまでEmacsからの移行用に以下のキーバインドを追加した。
vimの設定ファイルは ~/.vimrc

map <C-x><C-f> :e<Space>
map <C-x><C-s> :w!<CR>
map <C-g> <esc>
map <C-x>2 <C-w>s
map <C-x>3 <C-w>v
map <C-x>1 <C-w>o

なんのためにvim使ってんだ、って話ですが

vimrc

適当に切り貼りしたvimrc
まだ全然調べてないので暫定版

~/.vimrc
====================

"vi compatible mode off
set nocompatible
"share clipboard with other applications
set clipboard=unnamed
"number ruler
set number
"define backup dir
set backupdir=$HOME/vimbackup
set directory=$HOME/vimbackup
" ignore case in search
set ignorecase
" consider case if the search pattern contains uppercase
set smartcase
" incsearch
set noincsearch
" tab = 4space
set tabstop=4
" tab is tab. doesnot expand to space.
set noexpandtab
" allow autoindent
set autoindent
" backspace can delete linefeed, tab, space
set backspace=2
" hilight another brace if the cursor was on it
set showmatch
" add extra features to command-line
set wildmenu
" show whitespace chars as following
set lcs=tab:>-,eol:$,trail:_,extends:\
" doesnt allow textwrap
set nowrap
" show status line
set laststatus=2
" commandline height
set cmdheight=1
" show commandline
set showcmd
" show filename on titlebar
set title
" hilight cursor line
autocmd WinEnter *  setlocal cursorline
autocmd WinLeave *  setlocal nocursorline
set cursorline
" hilight searched chars
set hlsearch
" make me go to next line
set whichwrap=b,s,h,l,<,>,[,]
" statusline
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P

"number of screen lines to show around the cursor
set scrolloff=2
" minimal number of columns to keep left and right of the cursor
set sidescrolloff=3
" first directory is where the buffer exists
set browsedir=buffer
" hide toolbars
set guioptions-=T
" use console dialog instead of popup dialogs for simple choice
set guioptions+=c
" show japanese charactors (this works only if this file was saved as Sfhit-jis)
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=#555555
au BufNewFile,BufRead * match ZenkakuSpace / //
" delete buffer but splitted window remains there
command! Kwbd let kwbd_bn= bufnr("%")|enew|exe "bdel ".kwbd_bn|unlet kwbd_bn
command! FKwbd let kwbd_bn= bufnr("%")|enew|exe "bdel! ".kwbd_bn|unlet kwbd_bn
"change hjkl behavior for line wrap
noremap j gj
noremap k gk
noremap gj j
noremap gk k

" tab change
map <F2> <ESC>:previous<CR>
map <F3> <ESC>:bnext<CR>
map <F4> <ESC>:bwipe<CR>
map <F9> <ESC>:Kwbd<CR>
map <S-F9> <ESC>:FKwbd<CR>

set visualbell

"user map
"from Emacs
nmap <C-x><C-f> :e<Space>
map <C-x><C-s> :w!<CR>
map <C-g> <esc>
map <C-x>2 <C-w>s
map <C-x>3 <C-w>v
map <C-x>1 <C-w>o

Google Closure Compiler を手軽に使ってみた

特に深いことを考えずに使ってみた。コメント行、使われてない関数を勝手に割り出したり、変数名を短く書き換えたり、(そのファイル内で)整合性を失わない程度に変換してファイルサイズを抑えてくれる。GWTが吐くjsにも似てる。
ウェブ版はClosure Compiler Serviceで、ここに適当なjsファイルを突っ込んでみると圧縮してくれる。これがすごく便利。ローカル用のファイルもあるけど特にややこしい用途に使わない限り満足できそう。
イメージとしてはjquery.js がjquery.min.js になった感じ(とはいっても中身をみたことがないと分かりにくいだろけど…)


参考:グーグルのJavaScriptツール集大成「Google Closure Tools」 - そこが知りたい! 注目のツール:ITpro