Nullable

旧レガシーガジェット研究所

RESP(Redisプロトコル)を話す in Golang.

概要

ひょんなことをキッカケにGo言語で簡易的なRedisのサーバを書いたので簡単にまとめようと思う。

https://github.com/0n1shi/beehive-redis

動作としては以下のように普通のRedisサーバとなんら変わりなく、redis-cliからも接続することができる(コマンド数は極端に少ないが)。

# terminal 1
$ beehive-redis run --config conf.yaml
2022/02/20 09:17:27 starting Beehive Redis server ...
# terminal 2
$ redis-cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set msg "hello world"
OK
127.0.0.1:6379> get msg
"hello world"
続きを読む

CPUをつくる ~ FPGA編 ~

概要

FPGA上で動作するMIPSプロセッサを作ったので学習の流れや大まかな作り方をまとめる。

mips-fpga

https://github.com/0n1shi/mips-fpga

成果物

続きを読む

CPUエミュレータを書く

概要

https://github.com/0n1shi/mipsemu

CPUエミュレータを書いたのでまとめる。 今回書いたのはMIPS1のCPUエミュレータ。命令は全て実装したわけではなくC言語のコードいくつか書きクロスコンパイルしたバイナリを実際に動作させ、ある程度のコードが問題なく動作することを確認した。

実際には以下のようなC言語を書き、

int c = 0;

int main(void) {
    int a = 10;
    int b = 3;
    c = plus(a, b);
    return 0;
}

int plus(unsigned int a, unsigned int b) {
    return a + b;
}

ビルドしたバイナリをエミュレータで実行した結果が以下になる。

f:id:k--onishi:20210211153548p:plain

続きを読む

Erlang 入門

概要

1986年にスウェーデンの通信機器メーカーであるEricsson社が電話通信アプリケーションを開発する目的でErlangを開発し1998年にOSSとして公開した。

Erlangは巨大なサーバソフトウェア(メッセージキューイングやWebサーバ、分散データベースなど)などの高レベルプロトコルの実装に向いており、現在ではWhatsApp、ドワンゴ、LINEなどがErlangを採用していることを表明している。

qsort([]) -> [];
qsort([Pivot|Rest]) ->
  qsort([ X || X <- Rest, X < Pivot ])
  ++ [Pivot] ++ 
  qsort([ Y || Y <- Rest, Y >=Pivot ]).

e.g. クイックソート

続きを読む