| Prev»
Apr
12

quick hack、大した事やってない。
これから設計するって人は真似しちゃダメ


example.com には、外部にMXとして公開されているメールサーバ takoyaki と
内部配送用の udon, soba, kishimen があって
同一のLDAPデータベースを aliases として利用しています、はい。


tarou@example.com が
「社内のは良いんだけど、社外から来るの全部スパムなんだよね、なんとかしてちょ」


はいはい、やりますよ、takotyakiで弾きゃいいんで
でも特別な対応はしたくないし、内部用と外部用のaliases DBを分けるのもなぁ

» 続きも読む

Jan
17

パケットを食べて星が成長するフリーソフト「Packet Garden」 - GIGAZINE


前からこういうの作ろうと思ってたんだけど、出ちゃったかー
あと、もう1個考えてたのは音、歌うルータ


プロトコルタイプに応じて音をのっけりゃ、カオスな音が出来るんじゃねぇかと
テクノっぽく、色んなサンプルを乗っける感じで
Heart Beatなパケットはそのままリズムになるし
あんまり好きじゃないパケットはアラートっぽくすりゃ楽しいし



ってな事を考えてたけどやる暇無くてもう何年も塩漬けのアイディアなので誰か作ってくれ

Dec
16

quagga(旧 Zebra)でOSPFをやるの巻。
いや、別に大した事はしてないんだけど


quaggaはZebraよりも動きが良い気がするね、経路の収束とかその辺


ついでに watchquagga (watchdog) でちゃんと監視してくれるのが良い
って、裏を返せば「死ぬかもしれないから立ち上げなおさなあかん」じゃねぇの?
Zebraのときもたまに死んだからなぁ……
まぁ、いい


portsで入れるとwatchquaggaとその起動スクリプトも入る。
ただ、watchquaggaのヘルプがLinuxの例なんで (/sbin/serviceとか)
FreeBSDな場合は rc.conf に以下の様にかいときゃよろしい



quagga_enable="YES"
quagga_daemons="zebra ospfd"
quagga_flags="-d"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/etc/rc.d/quagga restart' ${quagga_daemons}"

あ、quaggaの起動スクリプトは /etc/rc.d/quagga に入るよ

Dec
06

10Gigabit Ethernet?
ダメダメ、そんなの古いよ


100igabit Ethernet ですよ(゜Д゜)NINJA SPEED!!

Mar
12
階乗を計算する、簡単なプログラムを作ってみた。

» 続きも読む

Feb
11
フロー制御は
if (if-else)
while
do-while
for と、C/C++ と同じ物が用意されている。
条件式は int type を返さなければならず、 0 が偽でそれ以外が真だ。
Limbo の case (switchでは無い)は少し変わっている。

» 続きも読む

Feb
05
Limbo は case sensitive だけど、識別子にUnicode文字が使える。
試しに、 helloworld.b をふざけた具合に書き直してみた。

init(ctxt : ref Draw->Context, args : list of string)
{
# 日本語で書いてみる。
システム : Sys;
システム = load Sys Sys->PATH;
システム->print("こんにちは 世界 !");
}

Windows上で動いているInfernoには、何の苦も無く日本語が打てた。
acme で Font /fonts/pelm/unicode.9.fonts を ボタン2クリック (以降 click(2) ) してやれば、フォントもちゃんと表示してくれる。
このコード、エラーも無くコンパイルでき、エラーも無く実行できた。

» 続きも読む

Feb
05
Limboの実行の基本単位、またはプログラムはモジュールである。
モジュール・インタフェース定義では、そのモジュールのtype(型)を定義する。
先の例では HelloWorld だ。
モジュール・インタフェース定義では、この type のみを定義していて、
その中身は別の話である。 つまりはインタフェースの定義と実装は別という話。
モジュールの type と 実装(または値)を関連付けるには、 load 命令を使用する。
このload 命令は、ランタイムに評価される。
先のHelloWorldは、多分実行時にDis VM が インタフェースとその実装を関連付けたんだろう。

» 続きも読む

Feb
05
今までは sys->print として使っていたが、毎回 sys->print とタイプするのは面倒だ。
import を使用すれば、他のモジュールからメンバをインポート出来る。
module_member : import module_variable;

helloworld.b を書き直すと

» 続きも読む

Feb
04

いよいよコードを書いてみよう。
とは言っても、先ずは HelloWorld


limbo には .b (ソースファイル) .dis (コンパイル済みバイトコード)の他に
.m (モジュール定義) があるらしい。
C のヘッダファイルみたいな感じかな? Pascal 流の declare にも近い気がする。



# helloworld.m
Helloworld : module
{
init : fn(ctxt: ref Draw->Context, args : list of string);
};


# helloworld.b
implement Helloworld;
include "sys.m";
include "draw.m";
include "helloworld.m";
init(ctxt : ref Draw->Context, args : list of string)
{
sys : Sys;
sys = load Sys Sys->PATH;
sys->print("Hello World !");
}

» 続きも読む

| Prev»