2016年 7月 の投稿一覧

FIFOの作り方を考える

FIFO(First In, First Out) を利用したときにソフトウェアだとArrayにメソッドとして実装されていたり、またKVSに実装されていたりして、あまり中身意識をすることが無いかもしれないけど、定期的に振り返って実装を考えると頭の体操になって楽しい。といってもそんなに難しいものじゃない。

雑に書いてしまえば以下の様な形になる。*1

FIFOの深さを256(8bit)、Push/Popされる値の大きさを32bitで考えることにしてみる。型をきっちり指定したいのでGoで。

package main
import "fmt"
var pushAddr, popAddr uint8
var stack[256] int
func push(value int) {
stack[pushAddr] = value
pushAddr++
}
func pop() (popValue int){
if popAddr >= pushAddr {
panic("NO stack values.")
}
popValue = stack[popAddr]
popAddr++
return
}
func main() {
push(1)
push(2)
push(3)
fmt.Println(pop())
fmt.Println(pop())
}

上を実行してみると

$ go run fifo.go
1
2

最初にPushしたものが最初にPopされている。非常にシンプル。FIFOのどこのアドレスまでPushされているか管理する変数と、逆にどこまでPopされているかを管理する変数があればよいだけである。

こうすることでアドレスの加算だけで表現できる。上の例だと pushAddr は符号なし8bitの変数なので255までアドレスの値が到達すると更にpushされたときは0に戻るのでその点も気にすることがない。いくらか雑に書いているのでFIFOがあふれる処理とかを書いていないので厳密ではないがおおよそこういった中身になっているということを知って使うだけでも少し考え方が変わったりするかもしれない。

最近できるだけ原理的なところも知ろうとする様にしている。とはいっても、端折ってしまうことも正直多いのだけど概略だけでも抑えておく意味合いでも。

*1:一つの実装の考え方なので他の実装方法もあると思う

汗まみれ宣伝論 – 徒然日記

ぼんやり午前中を過ごしていたら諸般用事があって午後から外出。待ち時間が多かったので最近読了した本を改めて読む時間にあてた。一度読み終わった本だが繰り返して読みたくなる感じがある。

この本の第五章に「汗まみれ宣伝論」という章があり、そこで書かれていた 宣伝とは仲間を増やすこと という一文があり、妙にその言葉が改めて自分の頭の中に残った。逆もしかりで仲間を増やすことがひいては宣伝になっていくのかもしれない。

ではその集まる場をどの様に作っていくといいのか。と、考えることが自分に足りてないことなのかもしれないなと思ふこの頃。

夕食に沖縄料理と泡盛頂いて終わり。

徒然日記

お昼は焼肉ランチを同じチームの人たちと行った。
味噌だれタン+カルビの定食で非常に満足。

何故か水曜どうでしょうの話になっておすすめを聞かれたがド鉄板レベルの推薦だと「ヨーロッパ21ヵ国完全制覇」ではないだろうか。あとはサイコロシリーズ。特に「サイコロ5~キングオブ深夜バス~」。

毎週TokyoMXで日曜日の夜に放映されている再放送を観るのが月曜日からの新しい週を迎える活力にここ4年ぐらいなっている。長い。
そして同じシリーズが放映されることがあっても笑ってられるのってある意味幸せな性格だなと思う。

2016年6月に読んだ本を振り返る

6月は12作品。
なぜ、あなたの仕事は終わらないのか スピードは最強の武器であるに書かれていたラストスパートに頼らず「初めの2割で8割を終わらせる」というやり方は興味深かった。


hideackの本棚 - 2016年06月 (12作品)
酷道vs秘境駅
酷道vs秘境駅
松波成行
読了日:06月11日


powered by Booklog