ArchBang Install
Install
ArchBang
http://blog.hatena.ne.jp/yymm6/yymm6.hatenablog.com/edit
live usbの作成
i686のイメージファイルをダウンロードし、USBにフォーマットする。
自分はMacBookProなのでdiskutilを使う。
まずUSBディスクをunmount
diskutil unmountDisk /dev/disk1
bs=8192でddする。インストールするのは2012-11-19。
dd if=archbang-2012.11.19-i686.iso of=/dev/disk1 bs=8192
取り出し。
diskutil eject /dev/disk1
USBから起動
使用するマシンはAmazon.comで180ドルくらいだったこれ。
ASUS x101ch black
HDD 320
RAM 1G
BIOSを起動する前に。WindowsでLinuxパーティションにする予定のDドライブのある領域を空にしておく。
何か適当にインストールしてパーティションを設定したが忘れた。
F2でBIOSを起動。
USBが認識されていればEXITからUSBを起動できるので選択。
簡単にrootでUSBからArchBangが起動する。
右クリックメニューの"Install"を選択。
時間をセット
Asia->Tokyo
パーティション
cfdiskのメニューに従い以下のように設定。
/dev/sda1 Windows 100G (本から入っていたWindows7 Starter)
/dev/sda2 /Boot ext2 100M
/dev/sda3 swap 4G
/dev/sda4 /root ext4 残り(200Gくらい)
swapにそんなにいらない気もするがいいとする。
/root と /homeは分けないことにした。
Config
rootのパスワード設定
userの作成
- config
- locale.genでja_JP UTF-8のコメントアウトを外す
- mirrorlistをJapan以外のものをコメントアウトする
Bootloader
GREBをインストール。
特に設定はしない。
終了
再起動するとGREBのメニューからArchBangを起動できる。
Setting
ここからが本番。
ネット環境
WiMaxルータでWPAおk
OpenBoxのエラーメッセージ
ルートはうまくいっているが、一般ユーザーでApplicationを開く時にエラーが出る。
なにやらパスがおかしい的なエラーが出来るので、エラーメッセージに指定された場所にあるファイルを
application.xmlを指定できるように書き換える。
Pacman
とするとパッケージが更新される。
$ pacman -Ss package-name
で検索できる。
$ pacman -S package-name
$ pacman -Sy package-name
でインストール。
$ pacman -R package-name
で削除。
コマンドオプション詳細はこちら
pacman (日本語) - ArchWiki
ABS / AUR
ルートでやるとじゃないかと思う。(su/sudo使っても良いけど)
$ pacman -S base-devel
$ pacman -S abs
$ pacman -S pacman-color
$ pacman -S yaourt
/etc/pacman.conf
に以下の行を追加する。(リポジトリのURL)
[archlinuxfr] Server = http://repo.archlinux.fr/i686
AURのパッケージ、pacmanで拾えるパッケージは-Ssで検索も出来るけど
AUR (en) - Home
本家ホームページから検索してもいい。
yaourtのコマンド詳細についてはこちら
Yaourt - ArchWiki
インストール方法の参考はこちら
Tick Stick Linux : Yaourt のインストール ArchLinux
日本語環境
scim-anthyを使うことに。
いずれmozcに乗り換える可能性もあるがひとまず。
ibusでもよかったが、批判的な意見を聞いてしまい却下に、人間は他の人に流されやすいものだ。
本家インストールガイド
Smart Common Input Method platform (日本語) - ArchWiki
本家じゃないけど関連記事
ArchLinuxで日本語入力とか (scim + anthy) - opamp_sandoの日記 ...でいいよね
/etc/profileに以下を書き込む。
export XMODIFIERS=@im=SCIM export GTK_IM_MODULE="scim" export QT_IM_MODULE="scim"
日本語のフォントがサイテーなのでさくっとIPAフォントを入れよう。
yaourt -S otf-ipafont
Python
デフォルトのPythonは2.7.3。
$ python2
で起動する。
pythonbrewをインストールする。
utahta/pythonbrew · GitHub
基本的にGithubのReadmeの通りにやれば出来る。
ただし、PYTHONBREW_ROOTは絶対パスで指定しなければならない。
$HOME/.pythonbrew
/home/username/.pythonbrew
pythonbrew自体のアンインストール
pythonのインストールを途中で止めてしまったら(ネットワーク接続が急に切れた。。。)
そのバージョンをインストールできなくなってしまい。やむなくアンインストールすることに。
とりあえず、インストール時にできたフォルダを全部消去する。
これだけでは何か再インストールできなかった。
PYTHONBREW_ROOTを空に戻すと無事再インストールできた。
2.6.3と3.2.3をインストール。
3.2.3はsetuptoolsでエラーが。何故?(python3系は使う予定がないのでしばらく保留)
下に記事があったがパスの問題?らしい。
python 3.2.3 の インストール時のエラー - KRAKENBEAL RECORDS
Linux Distributions
ASUSのEeePCを買ってしまったのでLinuxを入れるしかないんだと思い
どのディストリビューションがいいのか考えてみる。
Linuxディストリビューション - Wikipedia
これからLinuxを使い始めたい人向けディストリビューション紹介 - NAVER まとめ
興味のあるディストリビューション
Fedora/Debianは有名だけどもっと軽量じゃないと。
でもRedHat系(FedoraとかCentOSとか)とDebian系(DebianとかUbuntuとか)は触っておいた方がいい気がする。
Linuxの話(13:軽量ディストリビューション編):sinkobaのブログ:So-net blog
Ubuntuも1GのRAMを必要としている時点でギリギリ。。。もっとリッチなスペックのPCに。
UbuntuベースのecolinuxとかMintとかもあるがなんとなく却下。
GentooはVirtualBoxに入れてみたが、一時の気の迷いだったと反省している。
Linux ディストリビューションの欠点比較 - 旧生駒日記・シアトル日記・豪徳寺日記・西東京日記
Gentooでデスクトップ環境を構築したいのであればSavayonがある。
Live USB Creation = Frustration | Sabayon | Home
もずくのSabayon Linux: USBで起動できた!
というわけで軽量なものを。
軽量Linuxディストリビューション - Wikipedia
あと、EeePCはUSBブートしかできないので。
USBフラッシュメモリ用Linuxディストリビューションの比較 - SourceForge.JP Magazine : オープンソースの話題満載
USBメモリにFedoraをインストール at technote
Arch Linux
注目したのがArch Linux
Arch Linux - Wikipedia
軽量志向。
公式(日本語版もあるよ)
ArchWiki
Main Page (日本語) - ArchWiki
GUIインストーラーは存在していない。
Arch linuxインストール記(とりあえずインストール編)
Arch Linux インストール - Catastrophenom
ArchのディストリビューションのBangがいい感じらしい。
http://www.lifehacker.jp/2011/11/111114archbangarch.html:tile
USBのインストールイメージの作成
USB Installation Media (日本語) - ArchWiki
同じようにGentooとかで迷っている人発見(この人はMintに行った)
Winux/Lindows Gentoo→Archbang→LinuxMint
ArchBang
USB
ArchはUSBからブートすることが出来る。
Linux, Mac, Windowsでの作成方法の情報がある。
USB Installation Media (日本語) - ArchWiki
ArchBangのイメージファイルは以下から
Arch Bang - Browse Files at SourceForge.net
Install
Installation - ArchBang
不親切。。。
cfdiskでパーティション作成
/dev/sda1 -> Windows Starter 100G
/dev/sda2 -> boot ext2 100M
/dev/sda3 -> swap 1G
/dev/sda4 -> /(root) それ以外
local.genで日本語(utf-8)をコメントアウト
URL
Impressions
自分の家は有線WAN環境が無いので、WPAパスワードが必要だったりする環境を整えたいがLinuxでは大変なことが多い。
ArchBangのようなオールインワンなディストリビューションが便利だった。
が、メジャーなディストリビューションも使ってみた方が良いと思う。
Rethink Vim
gVimは使わない。
Vimmerになりまだ半年たっていないがWindowsのgVimにイライラ来ていたので自分のVim環境について考え直してみる。
WindowsからはCygwinで、MacからはiTremで使うことによりどこでも大体同じ環境でコーディングできるようにする。(MacVimは卒業する。)
.vimrcはHg管理下に置く。
ついでに.vimperatorrcも管理したいのでWindowsではシンボリックリンクを作成しておくことにする。(Macでは同じ場所にあるので大丈夫)
>> mklink /d "作成場所パス" "参照先パス"
でおk。(ただし、管理者権限でcmdを起動しないとダメだった)
Win7:シンボリックリンクについての詳細は
Windows7(vista)の便利機能シンボリックリンクでデータをDドライブへ逃がす - consbiol のエコ日記
Mac OS X 10.6.8 : シンボリックリンク
UNIX や Linux でシンボリックリンクを作成・削除するコマンド。 | btmup Blog
UNIXの部屋 コマンド検索:ln (*BSD/Linux)
zshは必須。
CygwinではByobu、iTermではtmuxを使うことにする。
フォントはゆたぽんです。見やすいしなごみます。
font ゆたぽん(コーディング) フォント
基本的な設定
マウスのドラッグで選択すると行番号が入ってしまうので
クリップボードへコピーがうまくいかない。
行番号の表示をマッピングしてさくっと切り替えてコピーすることに。
"viとの互換を取らない set nocompatible "行番号の表示 set number "タイトルをウィンドウ枠に表示 set title "ルーラーを表示(ステータスバーにカーソル位置を表示) set ruler "入力中のコマンドをステータスに表示する set showcmd "括弧対応表示 set showmatch "ステータスラインを常に表示 set laststatus=2 "バックスペースに関する設定 "indent : 行頭の空白削除 "eol : 改行の削除 "start : 挿入モードでの削除 set backspace=indent,eol,start "タブの幅 set ts=4 sw=4 sts=0 "新しい行を直前の行と同じインデントにする set autoindent "tabを空白に置き換えない set noexpandtab "オートインデントを有効にする set cindent "バックアップファイルを作成しない set nobackup "スワップファイルを作成しない set noswapfile "Syntax HighLight syntax on "見づらい色を変更する(背景が黒の場合見づらいので) hi Comment ctermfg=cyan hi Directory ctermfg=cyan hi SpecialKey ctermfg=cyan hi Constant ctermfg=red hi WarningMsg ctermfg=red "色の確認用コマンド command! HighLightList so $VIMRUNTIME/syntax/hitest.vim command! ColorList so $VIMRUNTIME/syntax/colortest.vim "ビープ音を鳴らさない set vb t_vb= "ClipBoardの利用 set clipboard& set clipboard+=unnamed set clipboard+=autoselect set clipboard=unnamed " 検索のハイライト set hlsearch " <ESC>×2で検索の解除 nmap <ESC><ESC> :nohlsearch<CR><ESC> "最後までサーチすると先頭に戻る set wrapscan "大文字小文字の区別をしない set ignorecase "検索文字列に大文字があった場合に反映 set incsearch "分割画面切り替えキーバインド nnoremap <C-j> <C-w>j nnoremap <C-k> <C-w>k nnoremap <C-h> <C-w>h nnoremap <C-l> <C-w>l "長い文章を折り返さない set nowrap "他で書き換えられたら自動で読み直す set autoread "保存しなくてもバッファを切り替えることができる set hidden "vimrcをいつでも簡単に(rce/rcs) nmap rc [vimrc] nnoremap <silent> [vimrc] :<C-u>e $MYVIMRC<CR> nnoremap <silent> [vimrc]v :<C-u>vs $MYVIMRC<CR> nnoremap <silent> [vimrc]s :<C-u>sp $MYVIMRC<CR> nnoremap <silent> [vimrc]r :<C-u>source $MYVIMRC<CR> "vimrcを自動更新 augroup vimrc autocmd! autocmd BufWritePost $MYVIMRC source $MYVIMRC augroup END " tabnewをいつでも簡単に nnoremap <silent> tn :<C-u>tabnew<CR> " KaoriyaのCdCurrent的なものを<Space> + cdで command! -nargs=? -complete=dir -bang CD call s:ChangeCurrentDir('<args>', '<bang>') function! s:ChangeCurrentDir(directory, bang) if a:directory == '' lcd %:p:h else execute 'lcd' . a:directory endif if a:bang == '' pwd endif endfunction "Change current directory. nnoremap <silent> <Space> cd :<C-u>CD<CR> "行番号の表示/非表示をマッピング "(クリップボードが使えないときのコピー用) nnoremap <silent> non :<C-u>set nonumber<CR> nnoremap <silent> setn :<C-u>set number<CR> "helpで:help nnoremap <silent> help :<C-u>help<CR> "vimdiffにコマンド(Diff)を割り振る "2ファイルをまとめて指定するときはデフォルトのvimdiff command! -nargs=1 -complete=file Diff vertical diffsplit <args>
Python
Pythonを快適に編集できるようvimを設定する - 玉虫色に染まれ!
Hashnote - Vimを最強のPython IDEにする
を参考に。
augroup Python_Coding au FileType python call s:python_setting() augroup END function! s:python_setting() "インデント setl autoindent setl smartindent cinwords=if,elif,else,for,while,try,except,finally,def,cl setl expandtab tabstop=4 shiftwidth=4 softtabstop=4 "PEP 8 長い行をハイライトする set textwidth=0 if exists('&colorcolumn') set colorcolumn& set colorcolumn=+1 setl textwidth=80 endif setl textwidth=80 setl colorcolumn=80 "インデントでたためるようになる setl foldmethod=indent setl foldlevel=99 endfunction
Pythonのファイルの時だけ設定を変更したいのでsetl(setlocal)を使う。
PEP 8は80文字以上の行をハイライトする設定。以下を参考に作成。
Vim-users.jp - Hack #217: 横幅が長いコードをハイライトする
使ってないけど便利そうなもの
- pysmell
- pythonの補間をサポート。
- easy-install or pipでpysmellを入れておかないと使えない。
- pyflakes
- gVimでないと使えない。
プラグイン
neobundle
プラグイン管理にはneobundleを使う。
filetype plugin indent off if has('vim_starting') set runtimepath+=~/.vim/neobundle call neobundle#rc(expand('~/.vim/bundle')) endif NeoBundle 'https://github.com/Shougo/neocomplcache.git' NeoBundle 'https://github.com/Shougo/vimshell.git' NeoBundle 'https://github.com/Shougo/vimproc.git' NeoBundle 'https://github.com/Shougo/vimfiler.git' NeoBundle 'https://github.com/Shougo/unite.vim.git' NeoBundle 'https://github.com/thinca/vim-quickrun.git' NeoBundle 'https://github.com/scrooloose/nerdtree.git' NeoBundle 'https://github.com/mattn/multi-vim.git' NeoBundle 'https://github.com/mattn/zencoding-vim.git' NeoBundle 'https://github.com/mattn/zencoding-vim.git' NeoBundle 'https://github.com/scrooloose/nerdcommenter.git' NeoBundle 'https://github.com/vim-scripts/YankRing.vim.git' NeoBundle 'https://github.com/vim-scripts/Pydiction.git' filetype plugin indent on
neocomplecache/neosnippet
あるVimmerのブログ: neocomplcache Ver.7の新機能とその設計思想について
neocom ver7から併用になった。
NeoBundle 'https://github.com/Shougo/neocomplcache.git' NeoBundle 'https://github.com/Shougo/neosnippet.git'
入れてみたが、"//"と入力すると長いことフリーズし"ユーザ定義補完 (^U^N^P) パターンは見つかりませんでした"とのメッセージが出て再びそこにカーソルを動かすと(ry
という現象が起こり、解決するにもneocomの中身はよくわからないのでペンディング。きっといつか解決されるだろう。
ver6.1に戻すことに。neocomローカルリポジトリにて。
git revert [ver 6.1のコミットハッシュコード]
READMEにあるものを大体そのまま使ってる。
" Disable AutoComplPop. let g:acp_enableAtStartup = 0 " Use neocomplcache. let g:neocomplcache_enable_at_startup = 1 " Use smartcase. let g:neocomplcache_enable_smart_case = 1 " Use camel case completion. let g:neocomplcache_enable_camel_case_completion = 1 " Use underbar completion. let g:neocomplcache_enable_underbar_completion = 1 " Set minimum syntax keyword length. let g:neocomplcache_min_syntax_length = 3 let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*' " Define dictionary. let g:neocomplcache_dictionary_filetype_lists = { \ 'default' : '', \ 'vimshell' : $HOME.'/.vimshell/command_history', \ } " Define keyword. if !exists('g:neocomplcache_keyword_patterns') let g:neocomplcache_keyword_patterns = {} endif let g:neocomplcache_keyword_patterns['default'] = '\h\w*' " Plugin key-mappings. imap <C-k> <Plug>(neocomplcache_snippets_expand) smap <C-k> <Plug>(neocomplcache_snippets_expand) inoremap <expr><C-g> neocomplcache#undo_completion() inoremap <expr><C-l> neocomplcache#complete_common_string() " SuperTab like snippets behavior. "imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>" " Recommended key-mappings. " <CR>: close popup and save indent. inoremap <expr><CR> neocomplcache#smart_close_popup() . "\<CR>" " <TAB>: completion. inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" " <C-h>, <BS>: close popup and delete backword char. inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>" inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>" inoremap <expr><C-y> neocomplcache#close_popup() inoremap <expr><C-e> neocomplcache#cancel_popup() " AutoComplPop like behavior. "let g:neocomplcache_enable_auto_select = 1 " Shell like behavior(not recommended). "set completeopt+=longest "let g:neocomplcache_enable_auto_select = 1 "let g:neocomplcache_disable_auto_complete = 1 "inoremap <expr><TAB> pumvisible() ? "\<Down>" : "\<TAB>" "inoremap <expr><CR> neocomplcache#smart_close_popup() . "\<CR>"
vimproc
vimfilerの項にあるリンクにコンパイル方法があるのでそこを参考に。
OSごとにmakefileが用意されているので、合っているものを選んでコンパイルして使う。
以下のプラグインはこれがないと動かないもの多数。
vimshell
シームレスな。
nnoremap <silent> vs :<C-u>VimShell<CR> nnoremap <silent> vp :<C-u>VimShellPop<CR>
quickrun
\r。
これがないとVim使う意味がないくらい活躍している。
unite
"インサートモードで開始しない let g:unite_enable_start_insert=0 "file_mruの高速化 let g:unite_source_file_mru_filename_format = '' "キーマッピング nmap f [unite] nnoremap <silent> [unite]b :<C-u>Unite buffer<CR> nnoremap <silent> [unite]f :<C-u>Unite file<CR> nnoremap <silent> [unite]m :<C-u>Unite file_mru<CR> nnoremap <silent> [unite]c :<C-u>Unite bookmark<CR> nnoremap <silent> [unite]a :<C-u>UniteBookmarkAdd<CR> nnoremap <silent> [unite]r :<C-u>Unite -buffer-name=register register<CR> augroup MyUnite autocmd FileType unite call s:unite_setting() augroup END function! s:unite_setting() "<ESC>でuniteを終了(消えるのに1秒くらいかかる) nmap <buffer> <ESC> <Plug>(unite_exit) "分割して開く nnoremap <silent> <buffer> <expr> <C-s> unite#do_action('split') inoremap <silent> <buffer> <expr> <C-s> unite#do_action('split') nnoremap <silent> <buffer> <expr> <C-v> unite#do_action('vsplit') inoremap <silent> <buffer> <expr> <C-v> unite#do_action('vsplit') endfunction
vimfiler
vimfilerとUniteでVimをファイラとして使用する方法 | karakaram-blog
uniteと連携することにより更なるパワーを引き出せるようなので。"fi"でIDE風に開く。q(QUIT) or Q(HIDE)で消える。
操作方法も上記のリンクに。
"vimデフォルトのエクスプローラをvimfilerで置き換える let g:vimfiler_as_default_explorer = 1 "セーフモードを無効にした状態で起動する let g:vimfiler_safe_mode_by_default = 0 "現在開いているバッファのディレクトリを開く nnoremap <silent> fe :<C-u>VimFilerBufferDir -quit<CR> "現在開いているバッファをIDE風に開く nnoremap <silent> fi :<C-u>VimFilerBufferDir -split -simple -winwidth=35 -no-quit "デフォルトのキーマッピングを変更 augroup vimrc autocmd FileType vimfiler call s:vimfiler_my_settings() augroup END function! s:vimfiler_my_settings() nmap <buffer> q <Plug>(vimfiler_exit) nmap <buffer> Q <Plug>(vimfiler_hide) endfunction
nerdtree
Ctrl-eで開いたり、隠したりできるように。下のリンクを参考に。
Hunting Field: [vim] NERDTreeをもっと使いやすくするための設定
" vim実行時に引数なしなら、NERDTreeを実行する let file_name = expand("%:p") if has('vim_starting') && file_name == "" autocmd VimEnter * call ExecuteNERDTree() endif " カーソルが外れているときは自動的にnerdtreeを隠す function! ExecuteNERDTree() "b:nerdstatus = 1 : NERDTree 表示中 "b:nerdstatus = 2 : NERDTree 非表示中 if !exists('g:nerdstatus') execute 'NERDTree ./' let g:windowWidth = winwidth(winnr()) let g:nerdtreebuf = bufnr('') let g:nerdstatus = 1 elseif g:nerdstatus == 1 execute 'wincmd t' execute 'vertical resize' 0 execute 'wincmd p' let g:nerdstatus = 2 elseif g:nerdstatus == 2 execute 'wincmd t' execute 'vertical resize' g:windowWidth let g:nerdstatus = 1 endif endfunction noremap <c-e> :<c-u>:call ExecuteNERDTree()<cr>
使い方はNERDTree起動中に'?'を見れば全部書いてある。下のリンクにも書いてあるっぽい。
英語&英会話学習SNS開発記録 : vimプラグインのNERDTreeを自分好みにカスタマイズ。
multi-vim
Sublime Text2みたいなことができるネタ機能。
何かデモを見るとすごいことになっているように見える。
"Sublime Text2風な動きができるプラグイン ":Multi ^ で全テキストの前に文字を追加 ":Multi $ で全テキストの後に文字を追加 ":Multi hoge で指定文字hogeをまとめて編集 "2012/11現在非常にバグった動きをする "・まとめて指定時削除の挙動がおかしい "・neocomが割り込むと動作がバグる "・実用性があるのか不明なので一応入れたがスル― "・範囲指定ができない。。。
zencoding-vim
ZenCoding for Vim 導入方法(初心者さん向け) - sakurako_sの日記
タブインデントの設定だけする。
"タブインデントを使う let g:user_zen_settings = { 'indentation':' ' }
作成したmattnさんのページを参考に使い方を。全機能使えるわけではないので。
http://mattn.kaoriya.net/software/vim/20100306021632.htm
チートシートもあるので。
http://code.google.com/p/zen-coding/wiki/CheatSheets;title
実際に使ってみて参考にしたページ
Big Sky :: zen-coding for vim を pure vimscript だけで書いてみた。
Big Sky :: zen-codingの殆どの機能をzencoding.vimに取り込んだ。
NERD_commenter.vim
コメント処理をサポートしてくれる。
scrooloose/nerdcommenter · GitHub <- リポジトリ
使い方↓
VimのヤバすぎコメントプラグインNERD_comments.vim - ボクノス
独自のキーマッピングを使いたい。
http://nishikawasasaki.hatenablog.com/entry/20101226/1293374432
"デフォルトのキーバインドを無効に let g:NERDCreateDefaultMappings = 0 "コメントアウトはCtrl+Cで nmap <C-c> <Plug>NERDCommenterToggle vmap <C-c> <Plug>NERDCommenterToggle
他にもいろいろできそうなのでDocumentを読んでみよう。
yankring.vim
https://github.com/vim-scripts/YankRing.vim <- リポジトリを発見
YankRing.vim - Maintains a history of previous yanks, changes and deletes : vim online <- vim.orgにもある
簡単な使い方は
YankRing.vim ヤンクの履歴を管理し、効率的にペーストする
http://nanasi.jp/articles/vim/yankring_vim.html <- こっちの方が詳細
"履歴は30件まで let g:yankring_max_history = 30
smooth_scroll.vim(リポジトリがないので拾ってくる)
これでプレゼンもバッチリ。
"<C-d>:半画面下にスクロール "<C-u>:半画面上にスクロール "<C-f>:全画面下にスクロール "<C-b>:全画面上にスクロール
pydiction
vim-scripts/Pydiction · GitHub <- github
http://www.vim.org/scripts/script.php?script_id=850 <- vim.org
とりあえず、デフォルトの辞書をneocomに登録。
" Define dictionary. let g:neocomplcache_dictionary_filetype_lists = { \ 'default' : '', \ 'python' : $HOME.'/.vim/Pydiction/complete_dict', \ 'vimshell' : $HOME.'/.vimshell/command_history', \ }
Pydiction.pyというモジュールが入っていて、これからほしいライブラリの辞書を増やしていける。
Djangoには読み込めないモジュールがあるらしいので注意。詳細は下記のリンク。
gvim
使わないはずだが、gvimもvimperatorのエディタとして使ったりしたいので。簡単に。
" encording set enc=utf-8 set fenc=utf-8 set fencs=iso-2022,utf-8,euc-jp,cp932 " Font set guifont=ゆたぽん(コーディング):h16 " カラースキーマ colorscheme desert " ツールバーとかいらんな set guioptions-=T " About guioptions " T : ツールバー表示 " m : メニュー表示 " ウィンドウの幅(フルスクリーンで) set columns=9999 set lines=9999 winpos 0 0 " フルスクリーンショートカットキー nnoremap <silent> <C-f> :set fu<CR> nnoremap <silent> <C-c> :set nofu<CR>
Tips
はてな記法はvimscriptまでハイライトできるとは
nnnoremap hoge hoge
.vimrcリロードには注意
Vim-users.jp - Hack #74: 簡単にvimrcを編集する
autocmd, += はリロード時に何度も追加されてしまうので以下のように記述する。
augroup MyAutoCmd autocmd! augroup END ・・・・ autocmd MyAutoCmd FileType * set textwidth=0 autocmd MyAutoCmd FileType * set formatoptions-=ro
- =は以下のように。
set hoge_option& set hoge_option+=piyo
function
function! s:hoge() "中身 endfunction
!はリロード可能な関数を表し、s:はローカル関数ということを表す。
Vim エディターのスクリプトの作成: 第 2 回 ユーザー定義関数
command
command! or mapを考えたところ':'を押さなくもいいmapをたくさん採用しているがcommandがイマイチわかってなかったのもある。
vimdiffが優秀なのでコマンドを割り当てる。
command! -nargs=1 -complete=file Diff vertical diffsplit <args>
commandの設定については以下を参考に。
Vim-users.jp - Hack #158: ユーザコマンドを定義する
Vimスクリプトの初心者がコマンドを定義してみた - 零客痩地
Color
Cygwinのデフォルトの背景では青文字は非常に見づらいので色を変更する。
(被害はコメント、NERDTree、SpecialKey)
Vimの色の設定は
:highlight
で見ることが可能。もっと見やすいのが良ければ
:source $VIMRUNTIME/syntax/hitest.vim
青になっているすべての設定を変更する。(darkredも変えた)
hi Comment ctermfg=cyan hi Directory ctermfg=cyan hi SpecialKey ctermfg=cyan hi Constant ctermfg=red hi WarningMsg ctermfg=red
vim/gvimの色設定について - fudist
vimカラーの微調整時のまとめ。 - connvoi_tyouの日記
すべての色が使えるわけではない
VimLで色指定する数値の一覧 | Inhale n' Exhale
上を参考にperlスクリプトを動かしてみて使える色をチェックしたが、一部しか使えない。
Vim上で使える色は
:so $VIMRUNTIME/syntax/colortest.vim
で確認することが可能。
とりあえずかぶってないcyanを使った(Identifierにdarkcyanが使われているが)
色が気になってきたのでvimrcに以下を追加する。
"色の確認用コマンド command! HighLightList so $VIMRUNTIME/syntax/hitest.vim command! ColorList so $VIMRUNTIME/syntax/colortest.vim
KeyMapping
:mapで確認できる。
Vim-users.jp - Hack #148: Key mappingの設定を確認する
autoread
ファイルを切り替えたらautoloadが走るようにする。
Vim-users.jp - Hack #206: 外部で変更のあったファイルを自動的に読み直す
Encoding
viで日本語の文字コードを自動判別 - 玉虫色に染まれ!
setlにすれば大丈夫?
setl encoding=utf-8 setl fileencodings=ucs-bom,iso-2022-jp-3,iso-2022-jp,eucjp-ms,euc-jisx0213,euc-jp,sjis,cp932,utf-8
zsh
リポジトリにはzshellの設定ファイルもあるので。
あまり深くzshの設定については知らないのでどこかにあった設定をそのまま使っている。
PATHはちゃんと設定しましょう($PATHがなかったorz)
http://d.hatena.ne.jp/tsaka/20060819/1162739565;title
Macはchshでログインシェルの変更ができる。
chsh -s /usr/bin/zsh
みたいな。
UNIXコマンド [chsh]
bash から zsh に乗り換えた【その仕事、蠍は留守です】
Redmine - No Ticket! No Commit!
「Redmineによるタスクマネジメント実践技法」を軽く読んだ。
気になった項目を書いておく。
Amazon.co.jp: Redmineによるタスクマネジメント実践技法: 小川 明彦, 阪井 誠: 本
2010/10/13発売。
レビュー
感想「Redmineによるタスクマネジメント実践技法」 - yujiorama の日記
「Redmineによるタスクマネジメント実践技法」の感想を集めてみたpart16 #tidd: プログラマの思索
「Redmineによるタスクマネジメント実践技法」を読んだ
Redmineによるタスクマネジメント実践技法:ハードな日々:So-netブログ
Google検索のはじめのほうに出てくるページを読んでみた。
まちゅ氏
プロローグ
TiDD(チケット駆動開発)
- チケットは作業指示書である。仕様書はバージョン管理する。
- PLがチケットを常時保守する。
- コミットログにチケットNoを書く。
- チケットはバージョンでグループ化し、順次リリースしていく。
TiDD
No ticket, no commit
独りスクラムとTiDD
実施しなければならないチケット達 - プロダクトバックログ
それぞれのチケット(マイルストーン付き) - スプリントバックログ
チームで実施すべきチケットは、作業する個人にとってはプロダクトバックログで
個人に割り当てられた作業は優先順位や作業順序を決めスプリントバックログが決定する。
TiDDでは、こなさなければならないバックログ(チケット)を日々一覧で確認し順に実施していく
大切なのは、優先付された作業の一覧があり、順に実施するという作業を繰り返していること。
もし、新しいチケットを割り当てられてコミットするならば、優先順位に従って実施できるチケットを再度決める。
チケットの粒度
1~5人日程度。(成果物の単位で作る。WBSから作る。)
ストーリーカード・タスクカード
チケットの親子関係で作る。
version 1.0以降からチケットの親子関係がサポートされている。(この本ではversion 0.8.7)
Redmineにおけるバージョンの概念
XP:イテレーション - 2週間くらい
Scrum: 4週間くらい
バージョンを作る
↓
イテレーション開始
↓
順序を決めつつ、チケットを順次作業
↓
バージョンをリリース
XPについて日本語でサクッと知りたいならここ↓
- eXtreme Programmingの魅力を探る
開発サイクル
ロードマップ作成
↓
バージョン作成(リリース計画・イテレーション計画)
↓
チケット登録
↓
チケット解決(TDD,リファクタリング)
↓
リリース(継続的インテグレーション)
↓
振り返り(KPT)
Redmineのプロジェクト規模
2つの視点から考える。意外と少なめな感じ。
タスク管理の観点から
メンバー5人が限界。(チケットが増えすぎてしまう。そのうち放置なんかも。)
もっと大人数でRedmineする場合はプロジェクトを分割する。
ブランチのサイクルから
プロジェクトにも親子関係を適用できるので、メジャーバージョンで本番リリースしたものはブランチとして子プロジェクトにするといい。
スクラム
2001年 Agile Software Development with Scrumで文章化された。
Sprintという単位で開発を進める。Sprintは短くて1週間長くて4週間程度。
詳細はEn.Wikipediaのほうがよさそう。
Scrum (development) - Wikipedia, the free encyclopedia
知らなかったワード
- BTS
- Bug Tracking Systemバグ管理システム - Wikipedia
- KTP
- Keep/Problem/Tryのこと(良かったので続けること/悪かったのでやめること/試したいこと)
- WBS
- Work Breakdown StructureWBSとは【Work Breakdown Structure】 - 意味/解説/説明/定義 : IT用語辞典
- PMBOK
- Project Management Body of Knowledge PMBOK - Wikipedia
- EVM
- Earned Value Management アーンド・バリュー・マネジメント - Wikipedia
- ITIL
- Information Technology Infrastructure Library http://ja.wikipedia.org/wiki/Information_Technology_Infrastructure_Library
Tkinter
What's Tkinter?
TkinterモジュールはTcl/TkのTkインターフェース。
Python標準のライブラリ。
Python3.0以降ではtkinterに名前が変わっている。
日本語訳のドキュメント
24.1. Tkinter — Tcl/Tk への Python インタフェース — Python 2.6ja2 documentation
原文?
Tkinter 8.4 reference: a GUI for Python
GUIをさくっと作れて魅力的。
が、minor traditionって言われてる。
List of Python GUI Programming
Python GUIに関しては本家にリストがある。
GuiProgramming - PythonInfo Wiki
Try to Make
カレンダー作ってたので、Tkinter Calendar Widget
参考にしてなんか便利なアプリを作ろう。
ソースコードはBitbucketへ
Oops, you've found a dead link — Bitbucket
スペルが違うが気にしない。
Tkinter Functions
今回習ったこと。
ベースになるフレームクラス
Tk.Frameを継承したクラスを作ればいい。
Tkinter 入門: 11. Canvas を使って納涼しよう
Widget作成
配置方法(pack, grid, place)については以下のリンク。
Tkinter 入門: 2. Widget を配置しよう
Canvas
フォント一覧
全標準フォント一覧 / もうパンツはかない
grid配置の使い方(電卓の例)
ボタンイベント
Grid
Tkinter GUIアプリケーションの部品 (widgets) をウィンドウ上にどうやって配置するのだろう - 3つのジオメトリマネージャー - Cassiopeiaの日記
投げやりな感じなので随時加筆しよう。
Django入門
Djangoチュートリアル(前編) (1/6):CodeZine
を参考にDjango入門してみる。SEMSに会員登録(無料)しないと全部見れない。
Django ドキュメント — Django v1.0 documentationが本家(訳版)
Everything you need to know about Django (and then some).
困ったときはここ。
Djangoについて
に重点を置いており、複雑であったり、データベース主体のWebアプリケーションの構築を簡単にするために作成された。
The Web framework for pefectionists with deadlines
ということである。
2012/9時点での最新版は1.4。
Djangoのアーキテクチャ全体像
MTV
DjangoではMVC(Model View Controller)のControllerをView、ViewをTemplateと呼んでいます。
Model Template ViewでMTV。
Djangoでは
- どう見せるか→Template
- どのデータを見せるか→View
という意味で使っています。
Model
Djangoで用意されているO/Rマッパーを担当します。
データベースへのインターフェース。
Template
デザインとコンテンツ、Pythonコードの分離エンジン。
View
HTTPリクエストを引数にとり、HTTPレスポンスを返す。
どのデータを提示するかを決定するロジックを担当。
Djangoにできる他のこと
キャッシュシステム
memcachedなどのキャッシュシステムと容易に連携が取れる。
国際化
多言語対応。
管理インターフェース
CRUD(Create Read Update Delete)画面が提供されている。
管理用バックエンド画面のテンプレートがすでにあるということ。
Djangoのインストール
Download | Django
上記リンクからせっかくなので最新版をダウンロードし、ローカルの適当なところに配置。
tar xzvf Django-1.4.1.tar.gz cd Django-1.4.1 sudo python setup.py install
確認は以下のように行う。
Python 2.6.8 (unknown, Jun 9 2012, 11:30:32) [GCC 4.5.3] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> django.VERSION (1, 4, 1, 'final', 0)
自分の環境はCygwin。
何を作るのか
参考しているサイトにただただしたがって行くと、ECサイト(electronic commerce site)を作るようなので。
ECサイト - Wikipedia
Project作成
プロジェクトを作成するフォルダ(自分は~/works)で
django-admin.py startproject ecsite
とすると必要なファイルが生成される。
manage.py | 管理コマンド用ユーティリティー |
ecsite/__init__.py | 空ファイル、Pythonパッケージ通知用 |
ecsite/setting.py | 基本的なこと(DB接続定義、言語/タイムゾーン定義)の設定ファイル |
ecsite/urls.py | URL設計。正規表現使える。 |
ecsite/wsgi.py | サーバとアプリケーション間のインターフェース |
wsgi
Web Server Gateway Interface(通称:ウイスキー)
Pythonに多数のフレームワークがあるがゆえに生じた、サーバ選択の差異を埋めるために導入されたサーバ⇔アプリケーションのインターフェース。
これによりサーバ可搬性のあるアプリケーションの開発が可能になった。
Django、GAEなどで使われている。
PEP 333 -- Python Web Server Gateway Interface v1.0にて正式に発表。
日本語での詳細はWSGIことはじめ | スマートフォン要点だけブログ
話がDjangoからそれてしまうので理解&勉強する際は下記のリンクから。
WSGIとPythonでスマートなWebアプリケーション開発を|gihyo.jp … 技術評論社
サーバの起動
manage.py runserver
とすると、zsh: command not found: manage.py
python manage.py runserver
にすると、
Validating models... 0 errors found Django version 1.4.1, using settings 'ecsite.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
起動成功。
ポート番号を変えたい場合は簡単に変えられる。
python manage.py runserver 8080
setting.pyの編集
Django1.4はsetting.pyのDB設定周りが若干異なるので以下を参考にする。
ちなみにDBはSQLite3を使う。
Django 1.4 で新しくプロジェクトを作成した際にしておくsettings.pyの設定 - kk6のメモ帳*
google:Django1.4 チュートリアル
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.dirname(__file__) + os.sep + 'ecsite.sqlite', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } TIME_ZONE = 'Asia/Tokyo' LANGUAGE_CODE = 'ja'
DBはENGINEとNAMEを編集する。他はSQLiteの場合何も書かなくていい。
TIME_ZOMEとLANGUAGE_CODEは上記のように編集。
DBの同期
% python manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username : E-mail address: Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
途中Usernameなどは適宜入力。この時の情報は管理画面にログインするときに聞かれるので忘れずに。
これでDBが初期化される。
Cygwinには多分SQLiteは入っていると思うが一応チェック。
% sqlite3 SQLite version 3.7.12.1 2012-05-22 02:45:53 Enter ".help" for instructions Enter SQL statements terminated with a ";"
manage.pyのあるフォルダで
sqlite3 ecsite.sqlite
or
python manage.py dbshell
でSQLite3を立ち上げることができる。ダンプ(.dump)して確認終了。
Application作成
商品表示用のページを作成する。
python manage.py startapp itempage
itempageフォルダが作成され、
中身には
__init__.py, models.py tests.py views.py
が含まれる。
Djangoに追加を認識させるために、setting.pyのINCLUDE_APPSにecsite.itempageを追加する。
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'ecsite.itempage', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', )
About Model
モデルはDBの1テーブルに対応し、フィールドは各カラムに対応します。
コードは以下の通り。
# -*- coding: utf-8 -*- from django.db import models # Create your models here. class Item(models.Model): item_code = models.CharField(u'商品コード',max_length=256,unique=True) item_name = models.CharField(u'商品名',max_length=256) price = models.PositiveIntegerField(u'価格') start_date = models.DateField(u'掲載開始日',null=True); def __unicode__(self): return self.item_code class Meta: db_table = 'item'
django.db.models.Modelを継承して作られる。
- フィールド(属性)
item_code | 商品コード |
item_name | 商品名 |
price | 価格 |
start_date | 掲載開始日 |
書くフィールドは書いてあるようにインスタンス生成時に初期化される。
Metaインナークラスは、このモデルに対するテーブル名を指定している。
このインナークラスを書かない場合、テーブル名は"itempage_item"となりアプリケーション名の入ったものになってしまうので、明示的にテーブル名をつけることにする。
DBとの同期
% python manage.py syncdb # 同期 Creating tables ... Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) % python manage.py dbshell (ry sqlite>.dump # 確認 (ry
モデルの操作
DBとの同期が終わったら、モデルを操作できるようになります。
% python manage.py shell
とするとインタプリタが出てくるのでデータを作成。
>>> from itempage.models import Item >>> item = Item() >>> item.item_name = 'item1' >>> item.price = 1000 >>> item.save()
データの確認
% python manage.py dbshell SQLite version 3.7.12.1 2012-05-22 02:45:53 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from item; 1||item1|1000|
テンプレートの作成
setting.py
setting.py内のTEMPLATE_LOADERSにテンプレートを配置するルートフォルダを追加する。
自分の場合、~/works/ecsite/templates
追加するときはカンマ(,)を忘れずに。
templatesフォルダ
簡単な商品表示画面。item.htmlを以下のように作成。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>{{ item.item_name }}</title> <head> <body> <center> 商品コード:{{ item.item_code }}<br> 商品名:{{ item.item_name }}<br> 価格:{{ item.price }}円<br> <br> <input type="submit" value="買い物かごに入れる"> </center> </body> </html>
{{}}の部分は、Viewメソッドによりテンプレートが動的に変換される部分になっている。
ここでは、商品コード、商品名、値段。
URLディスパッチャの設定(urls.py)
urls.pyを編集する。
urlpatterns = patterns('', (r'^item/(?P<item_id>\d+)/$', 'ecsite.itempage.views.item_page_display'), )
第一引数に正規表現パス、第二引数にViewメソッド。
r'^item/(?P
数字の部分の(?P
View Method
urls.pyにあったitem_page_displayを定義する。
from django.http import HttpResponse from django.template import Context, loader from models import Item def item_page_display(request,item_id): # item_idに該当するオブジェクトを取得する item = Item.objects.get(id=item_id) # テンプレートを取得して、モデルの値とマージする t = loader.get_template('page/item.html') c = Context( {'item':item } ) # HTTP Responseを返す。 return HttpResponse(t.render(c))