Hatena::ブログ(Diary)

ryochack.clipboard

2012-04-18

go install の使い方

go install はパッケージのビルドコマンド。


使い方

  1. $GOPATH/src/以下にビルドしたいパッケージのソースコードを配置する。
  2. go install 実行

test_pkgというディレクトリ下のコードをパッケージとしてビルドしたい場合。

$ mv -rf test_pkg $GOPATH/src
$ go install
$ ls $GOPATH/pkg/"system_arch"/
test_pkg.a

これでtest_pkg.aができる。


go getの使い方はよくわからない…。

$ go get package git:/github.com/xxx/xxx.git
package git:/github.com/xxx/xxx.git: unrecognized import path "git:/github.com/xxx/xxx.git"

みたいになる。

go getの引数にはどんなパス与えてやればいいのかな?



参考ページ

GoLang Tutorials: Go packages and goinstall - creating and using your own packages in Go

2012-03-18

Apacheのエラーを確認する

PHPとかでサーバサイドのプログラミングをしている時に、Apacheのエラーを確認する方法。

$ sudo tail -f /var/log/apache2/error.log

tail -f で開いているファイルに追記があったら自動的に出力してくれる。

知らなかった。目から鱗。

2012-01-15

Go言語のスコープについて

Go言語の情報の可視性についてのルールは単純です。名前(トップレベルの型名、関数名、メソッド名、定数名、変数名、構造体のフィールドおよびメソッド名)の先頭一文字が大文字になっていれば、パッケージの利用者側から参照可能となります。すなわち大文字にしなければ、それが定義されているパッケージ内からしか参照できません。このルールはコンパイラによって実施されるため、絶対的なルールとなっています。この外部パッケージから可視状態であることをGo言語の用語で「エクスポートされた(exported)」と言います。

Goプログラミング言語のチュートリアル - golang.jp


Go言語でのスコープは3つかな?

  • 関数、if 文などの()、{}の中
  • Package内
  • Packageの外部

同一パッケージ内であれば、異なるファイルでも非公開関数や変数を参照できるみたい。

続きを読む

2012-01-09

tmuxに入門した

ターミナルマルチプレクサ Advent Calendar 2011 : ATND 見てたら、tmux使いたい欲がむくむくと。

screen使ってないけど、いい機会なのでtmux入門してみた。

インストール

Macならbrewで一発。

$ brew install tmux

設定

tmuxの設定は ~/.tmux.conf に書けばいいみたい。

dotfiles/.tmux.conf at master ? ryochack/dotfiles ? GitHub

  • 変更点
    • Prefixキーを<C-b>から<C-q>へ変更。(Vimとのバッティング回避)
    • Vimライクなキー・マップに設定。

キー・マップ変更したら快適!

VimプラグインをNeoBundleとPathogenで管理する

VimプラグインをVundleで管理しているのだけれども、VundleはVundleInstallでインストールしたプラグイン以外は自動で読み込んでくれないみたい。

例えばGo言語をインストールすると、vim設定ファイルが $GOROOT/misc/vim 以下に置かれている。

これを

ln -s $GOROOT/misc/vim ~/.vim/bundle/golang

としても、Vundleはgolang以下のpluginやsyntaxを読み込んでくれない。


そこで、Pathogenを併用することで、Bundle管理プラグインと手動管理プラグインを.vim/bundle以下で管理できるようにした。


NeoBundle

GitHub - Shougo/neobundle.vim: Next generation Vim package manager

Vundleの改善版とのことで、今回ついでにVundleからNeoBundleに移行した。

参考:

http://vim-users.jp/2011/10/hack238/:title


Pathogen

GitHub - tpope/vim-pathogen: pathogen.vim: manage your runtimepath

Pathogenを導入すると、.vim/bundle以下にpluginやsyntaxをまとめられるようになる。

参考:

vimプラグインでよりよいコーディングを - KAYAC engineers' blog


導入

NeoBundleとPathogenで管理するプラグインが干渉することがないように、お互いの管理対象ディレクトリを分けた。

bundle/automatic にNeoBundle管理プラグイン、bundle/manual に手動管理プラグインっていう感じ。


.vimrcに以下を記述。

filetype plugin indent off

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

"******************************************
"*     neobundle で管理するプラグイン     *
"******************************************
NeoBundle 'git://github.com/Shougo/neobundle.vim.git'

"----- github Plugins -----

"# [ pathogen ] NeoBundle管理外の自前インストールプラグインはPathogenで管理する
NeoBundle 'git://github.com/tpope/vim-pathogen.git'
if isdirectory(expand('~/.vim/bundle/automatic/vim-pathogen'))
	call pathogen#infect('~/.vim/bundle/manual')
endif

filetype plugin indent on

管理構成

.vim
├── bundle
│   ├── automatic
│   │   ├── BlockDiff
│   │   ├── bufexplorer.zip
│   │   ├── eregex.vim
│   │   ├── gtags.vim
│   │   ├── neobundle.vim
│   │   ├── neocomplcache
│   │   ├── taglist.vim
│   │   ├── unite.vim
│   │   ├── vim-alignta
│   │   ├── vim-easymotion
│   │   ├── vim-fugitive
│   │   ├── vim-pathogen
│   │   ├── vim-qfreplace
│   │   ├── vim-quickhl
│   │   ├── vim-quickrun
│   │   ├── vim-ref
│   │   ├── vim-surround
│   │   ├── vim-visualstar
│   │   ├── vimfiler
│   │   ├── vimproc
│   │   └── etc...
│   └── manual
│         ├── cmigemo
│         └── golang -> /usr/local/Cellar/go/r60.3/misc/vim
├── dict
├── indent
└── syntax

詳細な記載は、githubの .vim/source/bundles.vim

GitHub - ryochack/dotfiles



参考ページ

VundleからNeoBundleへの移行 - sugilogのブログ

2011-10-29

カレント行にアンダーラインを引く

Vimでカレント行にアンダーラインを引く。

カレント行全体に色が着くのが嫌なので、下線だけ引くように設定。

" カレント行ハイライトON
set cursorline
" アンダーラインを引く(color terminal)
highlight CursorLine cterm=underline ctermfg=NONE ctermbg=NONE
" アンダーラインを引く(gui)
highlight CursorLine gui=underline guifg=NONE guibg=NONE

ctermはTerminal用の設定。guigvim用の設定。

ctermfg/guifgは文字色の設定。ctermbg/guibgは背景色の設定。


下線を引くのをやめて、カレント行全体に色を着けるには以下のように設定。

" カレント行ハイライトON
set cursorline
" アンダーラインを引く(color terminal)
highlight CursorLine cterm=NONE ctermfg=white ctermbg=black
" アンダーラインを引く(gui)
highlight CursorLine gui=NONE guifg=white guibg=black

環境によっては、ctermじゃなくてtermになるかも。

2011-10-22

カンマ・オペレータ

これは使えそう。

Comma operator - Wikipedia


x = (a, b);
y = (a, b, c);

っていう処理があった場合、xにはaの処理をした後にbがxに代入される。

同じくyには、aとbの処理がされた後にcがyに代入される。


int x;
int a=0, b=1, c=2;
x = (printf("a=%d \n",a), printf("b=%d \n", b), c);
printf("x=%d \n", x);

これを実行すると、こんな出力になる。

a=0
b=1
x=2

こんなマクロ書いて、ちょっと手を加えたら幸せになれそう。

#define TRACE(func) (printf("Enter %s @%s \n", #func, __func__), func)

マクロをdo-while(0)で囲むワケ

こんな感じで書かれたマクロを見ることがある。

#define SWAP(x, y) do { int temp = x; x = y; y = temp; } while(0)

do-while(0)で囲んでいるのは、ブロックで囲まれていないif文での意図しない動作を防ぐため。

例えば、以下の場合に有効。

/* do-while(0)で囲まれていない場合 */
#define SWAP(x, y) { int temp = x; x = y; y = temp; }

if (hoge)
	SWAP(x, y);
else
	x = 0;

これは、以下のように展開され、文法エラーになる。

if (hoge)
	{ int temp = x; x = y; y = temp; }
	;
else
	x = 0;

文法エラーで済むのならいいけど、以下の場合には意図しない制御になり致命的。

if (1)
	if (1)
		SWAP(x, y);
	else
		;

ちなみに、if文を{}で必ず囲めば、マクロをdo-while(0)で囲む必要もなく全て解決。

ifは必ず{}で囲もう。


参考ページ

Super Technique 講座〜マクロの技

2011-08-08

Processingで画像の色情報を取得するアプリを作ってみた

Processing触ってみたら、思いのほか楽しかったので簡単なGUIアプリを作成してみた。

画像を読み込んで、Ctrl+マウスで選択した矩形範囲のRGB平均値を表示するだけのアプリ。


こんなん。

f:id:ryochack:20110809002848j:image


hキーを押すと、ヘルプが表示される。

f:id:ryochack:20110809002847j:image



続きを読む

2011-07-27

rootユーザのPATHを設定する

sudoすると、root用のPATHに切り替わってしまう。

これはmake installなどの時にいろいろ不便。


で、root用のPATH設定は/etc/environmentで行える。

Ubuntuでsuを有効化

Ubuntuで、suコマンドを有効化する方法。

Electronic Genome - Ubuntuでsuを使えるようにする


Ubuntuはrootのパスワードが設定されていないから、suが使えないとのこと。

$ sudo passwd root

で、rootのパスワードを設定してやればsuを有効にできる。

2011-07-03

12ステップで作る組込みOS自作入門(1)

仕事で組み込み開発をしていても、組み込みOSの深いところまではなかなか入っていけてないので、以下の本で組み込みOS「kozos」の学習を開始した。

独自OSを作ってみよう!



1stステップ:開発環境の構築

開発環境の構築は、クロス開発環境の構築 - ryochack.clipboardで行ったh8300環境がそのまま使用できる。


ハマったのが、H8/3069FのフラッシュROMへのh8writeでの書き込み。

こんなエラーが出て書き込めない。

$ sudo make write
FATAL:Can not open the line to the H8/OS system.

スーパー・ユーザ権限でやっても解決せず*1Ubuntuを再起動してもダメ*2


うんうん唸って、ダメ元でシリアルケーブルを全部接続し直したら、書き込みできた。

$ sudo make write
/usr/local/bin/h8write -3069 -f20 kzload.mot /dev/ttyUSB0
H8/3069F is ready!  2002/5/20 Yukio Mituiwa.
writing
WARNING:This Line dosen't start with"S".
Address Size seems wrong
WARNING:This Line dosen't start with"S".
Address Size seems wrong
.....
EEPROM Writing is successed.

シリアルケーブルの初期化あたりの問題かな?

とにかく、これでようやくスタートライン。



※シリアルケーブルを抜き差ししてもダメな場合は、 shintaさんが公開されている改良版の「kz_h8write」を試してみるのがいいと思います。

*1:http://akita-nct.jp/~yamamoto/comp/H8/setting_linux/settings_linux.html:title?

*2:12ステップ本に記載

2011-06-09

grep結果のquickfixからEnterキーで飛べるようにする

vimgrep後のquickfixリストは編集不可になっていて、いちいち編集許可を与えないとEnterキーでカーソル下の箇所へ移動できない。

それが不便でしょうがなかったので、以下を.vimrcに追記。


" quickfix: 編集許可と折り返し表示無効
function! OpenModifiableQF()
        cw
        set modifiable
        set nowrap
endfunction

autocmd QuickfixCmdPost vimgrep call OpenModifiableQF()

これですごく快適になった。

quickfixのヘルプドキュメント、知らないことばかりだったので今度ちゃんと読もう。

Site not found


って、ちょこっと読んだら、以下の記載が。

":.cc" とかあったんだ…

QuickFixウィンドウには各行に1個ずつエラーが表示される。その行数はエラー番号に

等しい。":.cc"でカーソル下のエラーに移動できる。<Enter>キーを押すのと行をダブ

ルクリックするのは同じ効果がある。そのエラーを含むファイルがQuickFixウィンドウ

の上に開かれる。