uragami note

ただの殴り書き

Arch Linux上にRe:VIEWをインストールする

書籍執筆支援システムRe:VIEWの環境構築のメモ。 依存パッケージのインストール Re:VIEWを使うために必要なパッケージをインストールする。 $ sudo pacman -S ruby ruby-rubyzip texlive-most texlive-langjapanese poppler-data dvipdfmxのフォントのエラー…

vim-plug: プラグインがインストール済みかどうかを判定する

Vim

追記: 以下の記事にfunction! s:plug.is_installed(name)としてプラグインの存在確認方法が載っていました。 おい、NeoBundle もいいけど vim-plug 使えよ by @b4b4r07 on @Qiita 例として、プラグインの存在確認をするための関数を定義してみます。vim-plug…

bit置換

bit

ある値のn bit目からn+m bit目までを別の値で置き換えたい、という時がある。 例えば、以下のような値a,bがあったとして uint8_t a = 0b01010101; // 0x55 uint8_t b = 0b10101010; // 0xAA aの値の2〜4bit目をbの値で置き換えた値cを求めたい。 a,bが上記の…

LPC812マイコンでUSBシリアルからGPIO制御

組み込み開発の自動テスト化検討のためにUSBGPIO8とか買ってみようかと思ったけど、マニュアル読むと単にPCからUARTコマンド送ってGPIO制御するだけっぽい— ryochack (@ryochack) September 2, 2015 これならUARTがあるマイコンとUSBシリアル変換モジュール…

ctagsでCとアセンブラ間のタグジャンプができるようにする

ctags使っていて、Cとアセンブラでお互いにタグジャンプできないのが不便だったので、やっつけでtagsファイルを書き換えるスクリプト書いた。 Gist: ryochack / ctags_ac.rb アセンブラからCの関数を呼ぶ時には、関数名の先頭に"_"がつく。 そのため、tagsフ…

Go言語のヒープに確保するデータの初期化コストについて調べてみた

2014.6.14追記 途中MakeContainer()/MakeContainerOneLine()がごちゃごちゃになっていたのを修正 golangでは、ヒープに置かれるデータの初期化方法によって内部の挙動が若干異なるみたい。 (環境はx86_64、go version 1.2.2) 違いが出たのは以下のコード。 …

Go言語での複数チャネルからのメッセージ受信

Goではgoroutineを使うことで並行処理をとても簡単に実行できるが、複数goroutineとの同期が難しい。 そこで、複数走らせたgoroutineのメッセージを用いた同期方法について考えてみた。 以下のように、複数のチャネルからのメッセージを受信する必要がある時…

Go言語でmmapシステムコールを使ったファイル読み込みの高速化検討とC言語のコンパイラの話

長いタイトル…。 こないだ書いたgorepっていう検索ツール、もうちょっと速くしたいなと思ってファイル読み込みの部分をmmap()で置き換える検討中。(ちょっぱやのagもmmap()を使っている) mmap()での高速化確認用にCとGoで簡単なコード書いて実験していたら、…

C言語とGo言語で標準出力が端末を参照しているかどうかを判定する

標準出力のディスクリプタを取得して、それが端末を参照しているかどうかを判定する。 使いどころは端末に出力する時と、ファイルにリダイレクト出力する時とで表示の仕方を変えたいとき。 例えば、以下のページの方法でターミナルの文字をカラーにできる。 …

Go言語でgorepっていう検索ツール書いた

ディレクトリ名やらファイル名やらGrep検索やらを一緒くたに正規表現で検索する"gorep"っていうツール書いた。 https://github.com/ryochack/gorep 以下のコマンドを打ち込むと、カレントディレクトリ以下から再帰的にgo..pにマッチするディレクトリ、ファイ…

Go言語の並行処理で総和を求める

パタヘネ本の7章(マルチコアとマルチプロセッサとクラスタ)に以下のような(ちょっと違うけど)図が載っていたので、Goの並行処理を使って100,000個の数の和を求めてみた。 最初の図とはちょっと違って、実際の制御はこんな感じ。 値が2つ揃ったら、加算を行う…

チャネルの配列(スライス)を生成する

Go言語でチャネルの配列(スライス)を生成するには、以下のように宣言する。 チャネルの固定長配列 var chans = []chan int { make(chan int), make(chan int), make(chan int), make(chan int), } もしくは var chans [4]chan int for i := range chans { ch…

Go言語のflagパッケージを使う

Go言語でコマンドラインオプションを扱う - そこはかとなく書くよん。 に触発されたので、flagパッケージについて自分で使ってみてハマったところを書いておく。 コマンドラインオプションの略称を登録する flag.IntVar()などのXxxVar()を使う。 これで -boo…

Go言語は定数配列宣言ができない

以下のコードはコンパイルが通らない。 package main func main() { const array = [...]int {1,2,3,4,5} } コンパイルエラー。 const initializer must be constan Goでは、配列やスライスは全てランタイム中に生成される。 それに対して、定数はコンパイル…

はじめてのOSコードリーディング #2 simhでV6を動かす

simhというエミュレータ上でUNIX V6を動かせるとのことで試してみた。 simhエミュレータのインストール http://simh.trailing-edge.com/がsimhの開発プロジェクト。 debian系なら apt-get で楽ちんインストール。 $ sudo apt-get install simh simh用のUNIX …

はじめてのOSコードリーディング #1 ことはじめ

UNIXカーネルなどの低レイヤなところに詳しくなりたい。 ずっとそんなことを思っていたので、「はじめてのOSコードリーディング」で勉強を始めた。 はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus) 著者の@superhoge…

Vimビルド時のオプション

Vim

たぶん2度と思い出せなくなるのでメモ。 $ ./configure --prefix=$HOME/Garage/Toybox/ext --enable-FEATURE \ --enable-mzschemeinterp --enable-perlinterp=yes --enable-pythoninterp=yes \ --enable-python3interp=yes --enable-rubyinterp=yes --enable…

選択範囲に一括ペーストできる fitpaste-vim 書いた

Vim

Vimでは[ctrl-v]のブロック選択からI、またはAを入力することによって、選択列の先頭もしくは末尾にテキストを一括入力することができます。 [ctrl-v]でブロック選択して、 Iでテキスト入力。 [esc]で抜けると、一括挿入! これがとても便利で、よく活用して…

VimScript覚書

Vim

はじめての、びむすくりぷと。ってことで、ちょっとしたVimプラグインを開発中。 その過程でのVimScript覚書をメモ。 VimScript開発の取っ掛かりに参考にさせてもらったページ Vimスクリプト基礎文法最速マスター - 永遠に未完成 Big Sky :: モテる男のVim S…

はてなブログてすと。

はてなブログのテスト。てすてす。 はてなダイアリーからのデータ移行ってできるようになるのかな?