リモートで音楽再生環境
とりあえずtiarraの設定したりしていた。
年末にZ4という少しはマシなPC用スピーカーを買って、どうせだから自宅サーバーをメディアサーバー的な何かにしようと思い立った。
理由。
環境はUbuntu9.10
sudo apt-get install moc moc-ffmpeg-plugin
sshでログインして、mocp で起動。サーバーとして起動しているのでログアウトしても構わない。
PS3(初期型)をメディアサーバーにしても良かったんだけど、駆動音がうるさい。生活空間に置くにはちょっと無理がある。
起動する度に /etc/init.d/network restart しないとDNSが解決できない。なんでだろ。
■
Tiarra
TwitterIRCGateway
TransmissionCLI
MP3Blastterr
rsync -av ~/local user@server:~/remote
spc ~/local user@server:~/remote
Twitterのタイムラインをしゃべるスクリプト
@clavicle_がゆっくり声でしゃべるjavaの何かを作っていた。実装を見る限りすぐ作れそうな気がしたの。で、作った。
お手軽クッキングなので例外処理とかひどく適当です
要: SayKana Mecab python用Mecab 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)
各モードからノーマルモードに移るには
ノーマルモードで:打ってから適当にコマンド飛ばせる
コマンドがEmacsのelispなんかと違って非常にわかりやすい
キーバインド
i | インサートモードへ |
v | ビジュアルモードへ |
: | コマンドラインでへ |
hjkl | 左下上右 |
yy | 行コピー |
p | 張りつけ |
dd | 行削除 |
ファイル操作
:w | 保存 |
:e filename | 開く |
!をつけると強制力を持たせることができる。:w!など
画面操作
縦分割 | |
横分割 | |
分割解除 | |
バッファ移動 |
いまいちヴィジュアルモードの存在意義がわかってない
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