A proper server is heavy and breathes different: it’s an engine for dreams, a quantity for clearance laptops gives triple-digit gigabytes of RAM and multiple physical CPUs. If I had known it – really etched it deep in the bones – I would have four of them by now or a rack. If I could have accumulated scraps of basics into a single line of enterprise gear, it feels time better spent than learning fresh languages.

Why would anyone purchase a glorified display and boast over mobile when the same gets a thin client and an invisible behemoth? Something is wrong with the market equation. It comes down to what we value in engineering, which is the physical necessity of beauty. Aesthetics become something we see in the made, but not from ourselves. Our scattered notes are obsolete before the second read, worth less than the next blue link of the world’s thought.

What I would like to start is a collective, a place to swap scripts and stories, a BBS when more folks want to capture everyone for lifestyles than exclusive experience. That was the same conceit for why storytellers should not work for free; I resolve the hypocrisy by elevating all to create.


Setting up naive static IP on OpenBSD 5.7

After adding static IP to your account, your ISP sends you the following:

Gateway IP:
Usable range: ...
IP Subnet mask:
Primary DNS server:
Secondary DNS server:

Issue the following commands:

# echo > /etc/mygate
# echo inet > /etc/ [1]
# echo lookup file bind > /etc/resolv.conf
# echo nameserver >> /etc/resolv.conf
# echo nameserver >> /etc/resolv.conf
# echo > /etc/myname
# echo mycomp >> /etc/hosts
# reboot

Verify the following:

  • Your machine is connected to the modem – or router/modem combo – on the first Ethernet port.
  • Your machine is not connected to a “hotspot” device, if the ISP supplied you with more than one device that takes a coaxial cable.
  • You asked your ISP to “program” static IP, to set “bridge mode” on the modem/router, and to turn off the firewall.
  • You asked your ISP to verify the above, and rebooted your machine just to make sure.

Try the following:

# host

If you do not get “Path not found” or “Invalid argument” messages, and instead some information that appears to be network-related, congratulations: you now have a machine connected to a global packet firehose, and your education begins today.

[1] Your network card is named as /etc/, where “xxx” is a detected interface. Use ipconfig to display the list of interfaces, including lo0 (loopback), which is not the one you’re looking for.

ssvnc to TightVNC server

ssvnc will connect to TightVNC server, so OpenBSD clients can access Windows machines. Because the default X allows nine desktop workspaces, one workspace is enough to fit almost the whole screen of a remote desktop.

Remoting Windows lets me access an up-to-date web browser. Everything else is convenience: Dramatica, Excel, and Powerpoint are available without committing virtualization resources.

As I need it, I spend time to learn it, but staying aloof to certain elements which do not connote mastery; relying on certain convictions while acknowledging pragmatics, this is just what shakes out out of necessity.

Remote viewing with ssvnc (OpenBSD) and x11vnc server (Ubuntu)

I could not figure out how to get RealVNC server on Windows to receive connections with ssvnc on OpenBSD, so I decided to install x11vnc with Ubuntu. My experiments with “secure Firefox” from packages was not successful, and qemu would require both a network tunnel and greater system resources than using a remote desktop approach.

The x11vnc server runs after you click “Apply.” No need to click OK, I think. Checking the confirm checkbox lets you determine that your connection is getting through.

Being able to access an updated version of Firefox is good, and nothing in web dev needs Windows specifically, so I’m golden. Stallman views web pages from a mail reader while disconnected, though. Baby steps.

Without Amazon, I would not own as many computer books, treasures worth more than their single cent and shipping. Without Google, I would be left flailing at mathematical solutions and software mysteries. We benefit by the height of our giants, but I appear to be sleuthing among the crevices of their toes.

Compiling with Allegro 4

I’m starving for something to chew on, smaller than a big project, a little larger than dry exercises, and I’m hoping graphics gives me some respite:

$ gcc `allegro-config --libs` `allegro-config --cflags` test.c

Maybe I am not creative enough? I look into books and cannot draw out the relevance. It is a begging stance to reject the buffet and do nothing instead. But I cannot do nothing; everything waits!

I guess maybe demonstrate mathematical concepts with graphics. That combines the need for ADTs, drawing and math.


My understanding of subnets could not be shaped from one book. One book’s section wasn’t enough; it took a mental amalgamation of parts, from Internet, handbook, man pages and other books, to get a grasp of what might be happening. I can’t wait to try it on actual hardware.

From an old Sybex title “Network Complete,” the diagram of a network with one router and four servers. There are five network addresses, and each server manages up to thirty hosts.

From “The Handbook of Unix and Linux System Administration,” you get to choose the last right-side N bits for the network addresses; this determines your subnet mask. For example, a class C network of N.N.N.H means you can salvage bits from the “H” octet. In the network example above, choosing 3 bits gives you eight possibilities. Two bits is not enough (only four), so you “round up.”

Of these eight choices, you have to give up two right away: one for the network address and a second for the broadcast address. Eight minus two is six, which is just enough to accommodate your target five addresses. After choosing 3 bits, your mask is then

1111 1111.1111 1111.1111 1111.111 00000
      255.      255.      255.224

Feet-first or headlong

I don’t do simulations well. Getting a static IP was one small step to really interacting with the Internet. I hoped it would stop me from consuming the trivial: becoming a sysadmin, responsible for a narrow legacy and volunteering monies for the privilege.

“What is your company name?” the ISP rep asked.

I had to incorporate, at least to cover my bases. So in a single evening, what amounted to a friendly desire to grok pf and to feed an inexplicable knowledge craving escalated into owning a small business and making up a company name.

People actually don’t do this. They choose cheap hosts, co-located machines, or virtualized remotes. The rep thought it strange that I wanted to run a hosting service from the ground up, learning DNS, ARP, routing, etc.

“I just feel it’s something I have to do,” I said.

A window in Xlib

Chasing down the tiny basics, scrounging up the shallow berries, before winter sets in and we have to buckle down and accomplish our grandest works – here’s some pointers to getting a window up and showing in Xenocara:

$ gcc myprog.c -l/usr/X11R6/include -L/usr/X11R6/lib -lX11
  • XMapRaised() plus XFlush() works, but not XMapWindow() by itself
  • sleep(5) lets you see the window appear without aborting a while (1) loop
  • My template also #include’s stdlib.h and stdio.h

Quite a few tutorials online for Xlib after the first Google page.

MINIX 2.0.0: set up SYS.TAZ and CMD.TAZ

Boot up MINIX 2.0.0 and configure BIOS monitor (hd=bios). Log in as root and type df for disk usage. You will notice / is not very big and /usr has the majority space. So I put the stuff from CMD.TAZ and SYS.TAZ into directories in /usr.


# mkdir /usr/cmd
# setup /usr/cmd

In xterm, do the dd thing and carve up CMD.TAZ into CMD.01, CMD.02, etc. I only needed up to three. (SYS.TAZ may be only two pieces.) Then cat as file 1.44 and press Return. Repeat as you did to set up USR.TAZ.

After CMD.TAZ and SYS.TAZ are installed, read a man page:

# man -M /usr/sys/man sh

So we’ll have MINIX 2.0.0 soon

To finish our MINIX 2.0.0 installation, we will boot from c: and carve up USR.TAZ, CMD.TAZ, and SYS.TAZ into virtual diskettes. The Bochs INSTALL.386 instructions pre-req files that don’t exist in CD-ROM-2.0; i.e. USR.01, USR.02, and so on. We create them.

First, edit .bochsrc to boot from c: instead of a:. Comment out the boot a: line and uncomment the boot c: line.

Start up bochs with ./bochs. Press Escape and specify hd=bios! Log in as root. If you set up MINIX 2.0.0 correctly, the console message should mention something like “type setup /usr” instead of the usual “type setup.” Do this.

You will get a prompt for size. Type 1440. Press Enter (Return) for [0] floppy drive. Now you should get a prompt to insert disk 1.

Switch to a free xterm and do the following:

# cp /path/to/CD-ROM-2.0/MINIX/I386/USR.TAZ /my/work/dir
# cd /my/work/dir
# dd if=USR.TAZ of=USR.01 bs=1440k count=1 skip=0
# dd if=USR.TAZ of=USR.02 bs=1440k count=1 skip=1
# dd if=USR.TAZ of=USR.25 bs=1440k count=1 skip=24

I didn’t need to go farther than the third file, or USR.03. Note the byte sizes that dd outputs. The first two are 1474560 bytes and the third is 776267 bytes. The fourth is 0 bytes, so you only need USR.01, USR.02 and USR.03.

The INSTALL.386 instructions say to concatenate the files as pairs, but you can get away with doing it one at a time:

# cat USR.01 > /path/to/1.44

Switch to bochs emulator and press Enter. Installation should proceed until you are asked to insert the next disk. Then

# cat USR.02 > /path/to/1.44

And press Enter. This should continue until you get a hash prompt, hopefully with no error messages. If you get a “header checksum error,” check your steps.

  • You are not concatenating multiple files.
  • You do not have to write a novel header file.
  • Don’t click into the bochs emulator screen; that will cause it to exit. LOL Only click the title bar.
  • Type halt to shutdown MINIX before closing bochs.

You’re pretty much done. Next is to set up the CMD and SYS sources, which will use the same techniques outlined here. I like completeness and I want my manual pages.