summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/_index.md10
-rw-r--r--content/blog/archlinux-macbook-a1211.md373
-rw-r--r--content/blog/bacula-lto4-backup.md253
-rw-r--r--content/blog/mail-disaster.md287
-rw-r--r--content/blog/no-github.md11
-rw-r--r--content/blog/openbsd-firewall-and-securityrouter.org.md2
-rw-r--r--content/blog/openbsd-firewall-appliance-intro.md8
-rw-r--r--content/blog/retro-computing-unisys.md20
-rw-r--r--content/blog/retro-computing-vintage-computer-festival-zurich-2019.md111
-rw-r--r--content/blog/retro-computing-vintage-computer-festival-zurich-2021.md87
-rw-r--r--content/blog/retro-computing-vintage-computer-festival-zurich-2022.md100
-rw-r--r--content/blog/retro-computing-vintage-computer-festival-zurich-2023.md113
-rw-r--r--content/blog/web-search-homepage.md18
-rw-r--r--content/contact/_index.md57
-rw-r--r--content/dataprotection/_index.md11
-rw-r--r--content/git/_index.md4
-rw-r--r--content/hardware/_index.md8
-rw-r--r--content/hardware/book8088-status-todos.md21
-rw-r--r--content/hardware/book8088.md18
-rw-r--r--content/hardware/imc-2001-chargen40.md90
-rw-r--r--content/hardware/imc-2001-documentation.md18
-rw-r--r--content/hardware/imc-2001-firmware.md185
-rw-r--r--content/hardware/imc-2001-images.md20
-rw-r--r--content/hardware/imc-2001-keyboard.md58
-rw-r--r--content/hardware/imc-2001-links.md19
-rw-r--r--content/hardware/imc-2001-power.md26
-rw-r--r--content/hardware/imc-2001-status-todos.md133
-rw-r--r--content/hardware/imc-2001.md18
-rw-r--r--content/search/_index.md4
-rw-r--r--content/slide/_index.md6
-rw-r--r--content/slide/strus-webservice.md411
-rw-r--r--content/software/OpenBSD_firewall.md70
-rw-r--r--content/software/linux_packaging.md2
-rw-r--r--content/software/nagios_plugin_curl.md12
-rw-r--r--content/toolbox/_index.md71
35 files changed, 2579 insertions, 76 deletions
diff --git a/content/_index.md b/content/_index.md
index da5657c..2d1a90e 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -2,6 +2,11 @@
title = "Andreas Baumann's Personal Home Page"
+++
+You reached my personal web page and blog. I post on technologies, projects
+and ideas currently on my mind.
+
+## Technical Technicalities
+
Using a static HTML generator now called [Hugo](https://gohugo.io/).
Before I used HTML and server-side-includes.
Synchronization is done with rsync over ssh.
@@ -10,7 +15,8 @@ the two wikis/CMS I had before (I don't mention names) were hacked in
no time. And don't want to spend any time doing security updates all
the time.
-Hosting is done on a Raspberry Pi 1 B+ with [ArchARM](https://archlinuxarm.org/).
+Hosting is done on a Raspberry Pi 1 B+ (as of 20th of July 2019 it has
+been upgraded to a Raspberry Pi 2 Model B) with [ArchARM](https://archlinuxarm.org/).
I was simply fed up with the speed and the cumbersome user interface of
nowadays virtualized web hosting solutions (I don't mention names here again).
@@ -22,3 +28,5 @@ my personal domain.
![Alix and Raspberry Pi for hosting](images/alix_rpi.jpg "Alix and Raspberry Pi for hosting")
..and yes, the table is dirty.. :-)
+
+## Blog articles
diff --git a/content/blog/archlinux-macbook-a1211.md b/content/blog/archlinux-macbook-a1211.md
new file mode 100644
index 0000000..f0c5ec7
--- /dev/null
+++ b/content/blog/archlinux-macbook-a1211.md
@@ -0,0 +1,373 @@
++++
+title = "Archlinux on a MacBook Pro 15'' Model A1211"
+categories = [ "Operating System", "Archlinux", "MacBook" ]
+date = "2018-11-12T16:55:39+01:00"
+thumbnail = "/images/blog/archlinux-macbook-a1211/macbook-A1211.jpg"
++++
+
+## History
+
+I got an old Mac from a collegue at work. Apple decided not to
+support those devices anymore, anyway, they date back to 2006.
+I think, it's a pitty, because this Mac has a solid case, a pretty fast
+64-bit processor (sorry Archlinux32, no test machine for you) and
+a graphic chip which is not melting away like in later models
+(I don't name brand names here)..
+
+Here the specifications:
+
+* 2.3 GHz Intel Core 2 Duo
+* 2GB 667 DDR2 SDRAM
+* OSX 10.6.8
+* ATI Radeon X1600 256 MB RAM, 1440x900, 32 bit
+
+I didn't try any Sierra OS X hacks (or installing a Capitan, rumours are,
+it works even on such an old laptop) on old hardware and besides,
+Archlinux is a better choice for a developer on a Mac. Although
+there are still MacPorts for OS X 10.6.x (no Brew though), it can be
+quite painful to get something compiled on a Mac OS that old.
+
+As we will see later, we want to keep OS X around to be able to
+change some settings, extract some firmware, etc.
+
+## Installation
+
+### Prepare for dual installation
+
+We have a whooping 120 GB hard disk space, so I shrank the OS X partition to 64 GB.
+This can be done in the *Disk Utility.app*, just leave EFI in peace, set OSX to
+64 GB and assign the rest of the hard disk as free space.
+
+Prepare the USB stick for installation, I had no luck with the standard ISO,
+but a hand-crafted USB-stick worked:
+
+```
+hdiutil convert -format UDRW -o archlinux-2018.09.01-x86_64.img archlinux-2018.09.01-x86_64.iso
+dd if=archlinux-2018.09.01-x86_64.dmg of=/dev/disk2 bs=1m
+```
+
+### EFI boot
+
+I used [ReFIT for MAC](http://refit.sourceforge.net/) to improve the
+somewhat limited EFI environment of an early Mac (don't get me wrong, it's
+pretty impressive that such an old machine already had EFI, but nowadays this
+EFI shows its age).
+
+The firmware is a 32-bit EFI without a proper command line mode,
+causing trouble all along. I didn't take ReFind as I didn't expect the
+32-bit EFI to be currently supported, especially as I see Tianocore
+failing to build with more modern 32-bit binutils and gcc.
+
+I installed a 32-bit GRUB onto the EFI partition as a second boot option
+along to OSX. This one then boots ArchLinux. This is easier than trying
+to load a 64-bit kernel with kernel EFI stub support from an 32-bit
+EFI environemnt with systemd-boot.
+
+### ATI VESA BIOS
+
+I didn't want to boot into legacy mode to make the VGA BIOS visible, so
+I got a nice problem during KMS switching during early boot: the
+graphical output just froze. The irony here is that modern Linux and Xorg
+don't care at all about the old VGA/VESA BIOS, but they do so for KMS,
+where the kernel has to rely on 16-bit firmware functions in the video
+BIOS to program the video chip for graphics mode.
+
+All I got was the following kernel and Xorg error messages:
+
+```
+[2.052705] [drm] initializing kernel modesetting (RV530 0x1002:0x71C5 0x106B:0x0080 0x00).
+[2.052742] radeon 0000:01:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xa1a1
+[2.052817] [drm:radeon_get_bios [radeon]] *ERROR* Unable to locate a BIOS ROM
+[2.052825] radeon 0000:01:00.0: Fatal error during GPU init
+[2.053037] radeon: probe of 0000:01:00.0 failed with error -22
+...
+[31.041] (EE) open /dev/dri/card0: No such file or directory
+```
+
+So this basically translates to: "I don't have a direct rendering interface,
+because there is no video card, because there is no BIOS for that card".
+
+The key idea was to extract the VESA BIOS on a distribution which handles
+the KMS switching correctly (in my case an old Ubuntu 10).
+
+```
+dd if=/dev/mem of=vbios.bin bs=65536 skip=12 count=1
+```
+
+Verify that you actually got the right firmware. There is an error message
+when booting the kernel saying:
+
+```
+[2.052742] radeon 0000:01:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xa1a1
+```
+
+so we expect to find that signature at the beginning of the *vbios.bin* file:
+
+```
+hexdump -C vbios.bin | head -n 1
+00000000 55 aa 7d e9 7f 02 00 00 00 00 00 00 00 00 00 00 |U.}.............|
+```
+
+This firmware comes into */lib/firmware/radeon/vbios.bin* to be available during
+boot.
+
+The next problem was that the radeon module in the Linux kernel doesn't
+know about this firmware. There is a patch in https://bugs.freedesktop.org/show_bug.cgi?id=26891
+for older kernels, but it translates easily to the latest kernel. All
+it does is to load the *vbios.bin* file from the right place, when all the other
+options fail.
+
+My version of the module is [here](/text/blog/archlinux-macbook-a1211/radeon_bios.c), check
+out function *radeon_read_bios_from_firmware* and the code calling that function.
+
+
+In order to use the Radeon driver for KMS as early as possible,
+I put it into the init-RAM-disk:
+
+So, I added to */etc/mkinitcpio.conf* and rebuilt the ram disks:
+
+```
+MODULES=(radeon)
+FILES=(/usr/lib/firmware/radeon/vbios.bin)
+```
+
+### "Total Darkness" after 10 minutes
+
+Everything was running smoothly.. for about 10 minutes. Then my LCD display
+just went pitch black.
+
+Setting the brightness manually didn't help:
+
+```
+xrandr --output LVDS --brightness 1
+```
+
+(it did work later though to set the brightness between 0.0 and 1.0)
+
+The trick is to tell the radeon module to handle the LCD backlight, not
+one of the Apple brightness modules. In */etc/modprobe.d/radeon.conf* put:
+
+```
+options radeon backlight=1
+```
+
+Also handy is the https://aur.archlinux.org/packages/brightd/, though
+I think also systemd-backlight can nowadays at least save the brightness
+across reboots and suspends.
+
+### Function keys or special keys
+
+If you don't need the special keys for controlling the volume and brightness but instead the old
+Fxx function keys, add the following to */etc/modprobe.d/hid_apple.conf*:
+
+```
+options hid_apple fnmode=2
+```
+
+### Camera
+
+Here we come to iSight and why we need OS X around to extract the proper
+firmware.
+
+https://wiki.archlinux.org/index.php/Mac#Webcam has a really nice walkthrough.
+
+Shortly, you need https://aur.archlinux.org/packages/hfsprogs/ to mount the HFS
+partition. There you will find a file called *AppleUSBVideoSupport* in
+*/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS*.
+
+You will also need https://aur.archlinux.org/packages/isight-firmware-tools/.
+It contains tools to extract the file containg the firmware called *isight.fw*
+from *AppleUSBVideoSupport*.
+
+Finally it contains an udev rule in */etc/udev/rules.d/isight.rules* which then makes
+sure the firmware is also loaded on startup during detection of the camera via udev.
+
+### Wifi
+
+The wireless card was supported without any problems. Just some channels
+were not visible.
+
+Install *wireless-regdb* and make sure to enable the proper regulatory domain in
+*/etc/conf.d/wireless-regdom*:
+
+```
+WIRELESS_REGDOM="CH"
+```
+
+The regulatory domain has to be set properly, put it into */etc/modprobe.d/regdom.conf*:
+
+```
+options cfg80211 ieee80211_regdom=CH
+```
+
+(CH is for Switzerland, pick your own country here)
+
+Note: I think my method is deprecated and you can also specify the
+regulatory domain directly in wpa_supplicant.conf, but then how
+to use systemd-networkd with that?
+
+### Fans and sensors
+
+[macfanctl](https://aur.archlinux.org/packages/macfanctld/) from the AUR works nicely,
+also lm_sensors had no problems to get the sensor data.
+
+### Power consumption
+
+cpupower seems to work fine. Just make sure the 'p4-clockmod' module is loaded
+at boot.
+
+Note: I didn't try powertop or other tweaks. I got some worriesome ticking
+noises of the hard disk after a suspend and my battery is not that powerful
+anyway, so I'll run mostly on net power.
+
+### Mouse buttons
+
+Managers might like to use only one mouse button. Also keyboard fanatics may
+be happy by just switching off the mousepad completly.
+
+The one button mouse is a disaster for people being used to Xorg copy-
+paste or Oberon enthusiasts used to three mouse buttons.
+
+Scrolling with two fingers is nice, but per default they are enabled only for up and down.
+I enabled also scrolling to the left and right. Besides, the keyboard is missing
+PageUp, PageDown keys, which is a usability nightmare when you want to
+scroll bigger source code files or web pages (yes, I know there is Fn-Page,
+but having Ctrl, Alt, Meta and Fn all on the same spot doesn't make it
+easier to find the right one).
+
+Side note: I'm using *Fn* for keyboard scrolling (PgUp, PgDown), *Ctrl* for Wordstar short-cuts, "Alt" for
+Notion (window manager) shortcuts, and they are really _CLOSE_ together..
+
+Change */etc/X11/xorg.conf.d/50-synaptics.conf* as follows to your likings:
+```
+Section "InputClass"
+ Identifier "Touchpad Catchall"
+ Driver "synaptics"
+ MatchIsTouchpad "on"
+ Option "TapButton1" "0"
+ Option "TapButton2" "3"
+ Option "TapButton3" "2"
+ Option "VertTwoFingerScroll" "1"
+ Option "HorizTwoFingerScroll" "1"
+ Option "ClickFinger2" = 0
+ Option "ClickFinger3" = 0
+EndSection
+```
+
+*TabButton1=1* only leads to all kind of frantic behaviour, because I
+touch the touchpad by accident too often. *ClickButton* and *TapButton*
+for the second and third button are just completly useless. Either no menu
+appears for TapButton or a menu appears for ClickFinger, but I can no
+longer do copy-pastes.
+
+The default modifiers Ctrl, Alt, Meta don't do anything with the mouse
+or just very weird stuff, like Alt-2-fingers jumps to the beginning of
+my text.
+
+For now, I choose TapButtons for copy-paste, as this is the function
+I need most often.
+
+I might add some Ctrl, Meta modifiers to get 2, 3 mouse button clicks later.
+
+## Philosophical Outro
+
+In a world where companies try hard to get people into their ecosystem (controlling
+what users can do with the products they bought and own, what they can repair or let repair, what kind
+of operating system and software they are supposed to use), I think, it's the
+duty of any tech professional to invest some time to give old hardware back some
+purpose (hence I'm also working on the Archlinux32 project). Also, throwing
+away barely used machines, just because a company wants to earn billions, is an
+ecological disaster. Remember, companies have been invented to make money, don't
+get fooled by "we are there to make the world a better place" or any other marketing bs.
+As the company which should not be named is quite good at this kind of business, I
+expect all major vendors to follow soon. So that's why I keep a park of old machines
+around and I'm not buying new machines since 10 years (I do buy old ones from Ebay though).
+
+## References
+
+* https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-core-2-duo-2.33-15-specs.html :
+ specifications of the A1211 model
+* [https://bugs.freedesktop.org/show_bug.cgi?id=26891](https://bugs.freedesktop.org/show_bug.cgi?id=26891): the patch to radeon.ko,
+ enabling loading of file as VESA bios
+* [https://bbs.archlinux.org/viewtopic.php?id=139511](https://bbs.archlinux.org/viewtopic.php?id=139511): some discussions about
+ the VESA radeon topic in the Archlinux forum.
+* https://wiki.archlinux.org/index.php/Mac#Webcam: how to make the camera work
+
+## Addendum 19.2.2021
+
+For kernel 5.7.6 updated version [here](/text/blog/archlinux-macbook-a1211/radeon_bios-5.7.6.c) .
+
+Also a small walkthrough on how to update the module (in a most likely not too official way):
+
+```
+wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.6.tar.xz
+tar xf linux-5.7.6.tar.xz
+cd linux-5.7.6
+make mrproper
+# use the the configuration of the new kernel!
+zcat /proc/config.gz > .config
+sed -i 's/.*CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION="-arch1-1"/g' .config
+sed -i 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/g' .config
+make oldconfig
+make scripts prepare modules_prepare
+# copy radeon_bios.c to drivers/gpu/drm/radeon
+make -C . M=drivers/gpu/drm/radeon
+rm -f /lib/modules/5.7.6-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.xz
+xz -c drivers/gpu/drm/radeon/radeon.ko \
+ > /lib/modules/5.7.6-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.xz
+depmod -av
+mkinitcpio -P
+cp /boot/initramfs-linux.img /mnt/efi/.
+cp /boot/initramfs-linux-fallback.img /mnt/efi/.
+
+# Archlinux kernel compilation
+https://wiki.archlinux.org/index.php/Kernel/Traditional_compilation#Download_the_kernel_source
+# build just one module
+https://yoursunny.com/t/2018/one-kernel-module/
+```
+
+Where /mnt/efi is the VFAT rEFIt EFI partition which contains grub and the kernel
+image and RAM disk.
+
+## Addendum 18.6.2023
+
+For kernel 6.3.8 updated version [here](/text/blog/archlinux-macbook-a1211/radeon_bios-6.3.8.c) .
+
+## Addendum 22.10.2023
+
+Tried a kernel 6.5.8 (still working with the 6.3.8 version of the radeon_bios patch avaiable
+[here](/text/blog/archlinux-macbook-a1211/radeon_bios-6.3.8.c)).
+
+Here is also another way to build the kernel and the patched radeon module:
+
+```
+mount /mnt/efi (before updating the kernel!)
+pacman -Syyu
+cp /boot/vmlinuz-linux /mnt/efi/vmlinuz-linux
+cp /boot/initramfs-linux.img /mnt/efi/initramfs-linux.img
+cp /boot/initramfs-linux-fallback.img /mnt/efi/initramfs-linux-fallback.img
+
+pkgctl repo clone linux
+cd linux
+makepkg -do
+cp ~/radeon_bios-6.3.8.c src/linux-6.5.8/drivers/gpu/drm/radeon/radeon_bios.c
+makepkg -s
+
+cp pkg/linux/usr/lib/modules/6.5.8-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.zst \
+ /lib/modules/6.5.8-arch1-1/kernel/drivers/gpu/drm/radeon/radeon.ko.zst
+depmod -av
+mkinitcpio -P
+cp /boot/initramfs-linux.img /mnt/efi/initramfs-linux.img
+cp /boot/initramfs-linux-fallback.img /mnt/efi/initramfs-linux-fallback.img
+```
+
+## Addendum 1.5.2024
+
+Updated to kernel 6.6.8, using `MODULES=(amdgpu)` in `/etc/mkinitcpio.conf`
+produces a working framebuffer. Atlernatively using `nomodeset` results
+also in a working text output during boot and switching to graphical mode
+works. Xorg just works using the RADEON driver (xf86-video-ati). The machine
+got a lot more boring (from a hacker perspective). ;-)
+
+I found setting the backlight brightness to be the next challenge, so far no
+tool I tried worked..
diff --git a/content/blog/bacula-lto4-backup.md b/content/blog/bacula-lto4-backup.md
new file mode 100644
index 0000000..6a91978
--- /dev/null
+++ b/content/blog/bacula-lto4-backup.md
@@ -0,0 +1,253 @@
++++
+date = "2021-08-04T12:10:05+01:00"
+description = ""
+title = "LTO-4 Backup with Bacula"
+categories = [ "Backup", "Bacula", "Tape", "LTO-4" ]
+thumbnail = "/images/blog/bacula-lto4-backup/lto4.jpg"
++++
+
+## Intro
+
+With Archlinux32 reaching some terabytes of data to backup I needed
+something "modern", like a tape. Now, big tapes like LTO-8 are close
+to unaffordable, LTO-4 drives and tapes on the other hand can be
+aqcuired on the cheap. They get thrown out of servers rooms at the moment.
+
+An LTO-4 tape can take 800 GB uncompressed data and the drive can be bought
+on Ebay for 200 to 300 CHF. Media is affordable at ca. 40 CHF per tape.
+
+# Tape Drive
+
+My first drive I ordered was advertised as working, which proved to
+be more the kind of drive only able to produce squealing noises and
+to be really hungry for tapes (and killing them). Well, my plan was
+to be under 1000 CHF for a backup solution, so I simply ordered a
+second one, keeping the first one for spare parts. Both drives are a
+HP Ultrium 1840.
+
+The second drive turned out to work just fine. But now, trying to connect, it
+showed some issues. The tape drive comes in a noisy black box, which
+I definitely don't want to run 24 hours a day. So I decided to remove
+the drive and squeeze it (quite literaly) into a machine.
+
+# Tape Media
+
+After ordering quite the wrong tape (LTO-4 WORM, which costs more and
+can be written only once, but has "smartness" built in to be tamperfree,
+oh well), I got boxes and boxes of old tapes from Ricardo from somebody
+desperately trying to get rid of them. Which is cool with me. The
+price per tape dropped to around 20 CHF this way and I have more tapes
+than I could ever have wished for.
+
+# Connectivity Issues
+
+I tried several SCSI cards to connect to the drive. The drive uses
+the last generation of parallel SCSI, which is quite a nuisance to
+find cards for. Either SCSI cards are server-grade (PCI-X) or they
+are not fast enough. Some cards (like dedicated backup SCA host
+adapters) work fine in some machines, but not in others. The SCSI
+cables are prone to transmition errors, especially a 4 meter long
+external SCSI cable with 320 MHz (external or internal 68-pin LVDS)
+is somehow not really reliable at this high speed.
+
+I went with a short shielded internal SCSI cable and putting the drive
+as close to the SCA host adapter as possible. This provided the best
+results.
+
+The result looks like this:
+
+{{< figure src="/images/blog/bacula-lto4-backup/fitting.jpg" alt="LTO-4 drive fitting the machine" >}}
+
+# Manual Backups and Tools
+
+## tar
+
+Most people nowadays don't know anymore what the 't' in 'tar' stands
+for - you guessed it: '***t***ape ***ar***chive'. :-)
+
+There are other formats but usually the "rule-of-least-surprise" applies
+here, the simpler the command line parameters used and the more widespread
+the format, the more likely somebody else (or even you yourself) is able
+to actually read and restore the data.
+
+## mt
+
+The old magnetic tape tool is no longer available as binary package
+on Archlinux, but there is an AUR package 'mt-st-git' providing the
+'mt-st' binary.
+
+This tool you need to do basic operations on the tape like positioning,
+ejecting, setting compression levels, etc.
+
+## Some use cases
+
+### Rewind and eject
+
+```
+mt-st -f /dev/nst0 rewoffl
+```
+
+### Erasing tapes
+
+```
+mt-st -f /dev/nst0 defcompression 0
+mt-st -f /dev/nst0 compression 0
+mt-st -f /dev/nst0 rewind
+tar -cvf /dev/nst0 /dev/null
+mt-st -f /dev/nst0 rewind
+```
+
+***Note***
+
+I'm disabling compression on the tapes for several reasons:
+* with compression on I'm not able to deliver enough data, resuling in shoe-shining
+* the remaining size of a tape is so much more predictable
+* I have enough tapes anyway. :-)
+
+### Append to end of data
+
+```
+mt-st -f /dev/nst0 eom
+tar zcvf /dev/nst0 *
+```
+
+### Status of the drive, current position of the tape
+
+```
+mt-st -f /dev/nst0 status
+```
+
+## sg_logs
+
+This tool can give you all kind of internal information like
+temperature, I/O errors of the drive, media information.
+
+The first page of information serves as sort of an index, of
+what the drive can report:
+
+```
+shell> sg_logs /dev/nst0 -p 0
+
+ HP Ultrium 4-SCSI B32D
+Supported log pages [0x0]:
+ 0x00 Supported log pages [sp]
+ 0x02 Write error [we]
+ 0x03 Read error [re]
+ 0x0c Sequential access device [sad]
+ 0x0d Temperature [temp]
+ 0x11 DT Device status [dtds]
+ 0x12 Tape alert response [tar]
+ 0x13 Requested recovery [rr]
+ 0x18 Protocol specific port [psp]
+ 0x2e Tape alert [ta]
+ 0x30 Tape usage (lto-5, 6) [tu_]
+ 0x31 Tape capacity (lto-5, 6) [tc_]
+ 0x32 Data compression (lto-5) [dc_]
+ 0x33 Write errors (lto-5) [we_]
+ 0x34 Read forward errors (lto-5) [rfe_]
+ 0x35 DT Device Error (lto-5, 6) [dtde_]
+ 0x3e Device Status (lto-5, 6) [ds_]
+```
+
+For instance I can get the temperature of the drive with:
+
+```
+shell> sg_logs /dev/nst0 -p 13
+
+ HP Ultrium 4-SCSI B32D
+Temperature page [0xd]
+ Current temperature = 47 C
+ Reference temperature = <not available>
+
+```
+
+This could be meshed into a nagios check script, checking the sanity
+of the drive, but then I have to manually unmount the tape pool in
+bacula-sd before each check.
+
+## socat
+
+socat is like netcat and more. It allows to build tunnels between
+machines, so that the 'tar' command can pack files on one machine
+and send them to another machine, where the tape write command is
+attached to a listening socat.
+
+```
+# on the machine with the files to backup
+tar cvf - * | socat - TCP4:<server_with_tape>:8080
+# on the machine where the tape is
+socat TCP4-LISTEN:8080 - | dd of=/dev/nst0 bs=10240 status=progress
+```
+
+***Note***
+
+If using dd I set the blocksize manually to 20*512=10240, this seems
+to be the standard blocksize of 'tar' on Linux.
+
+## mbuffer
+
+Writting directly to the tape has some drawbacks as the tape drive
+is very fast and you cannot deliver data fast enough over a 1GBit/s
+network. So here 'mbuffer' helps to at least buffer data for some time
+and then flash it in one burst to the tape drive. This avoids the
+dreadful "shoe-shining" which not only drives you crazy (the sounds of it),
+but also reduces the lifetime of the components (or at least of the
+mechanics of the tape drive):
+
+```
+tar cvf - * | mbuffer -m 2G -P100% | \
+ socat - TCP4:<server_with_tape>:8080
+socat TCP4-LISTEN:8080 - | mbuffer -m 2G -P100% | \
+ dd of=/dev/nst0 bs=10240 status=progress
+```
+
+Buffering on either side is possible, not sure if having a buffer on both sides
+improves anything.
+
+# Use Cases
+
+## Full Backup
+
+I did a full backup of everything onto 10 tapes with the
+'tar/socat/mbuffer/dd' method.
+
+This is data which is quite stable and never changes, so I'll just keep
+it on some tapes with the write protection label on. It doesn't make
+much sense to put them into a bacula job, as the retention period is
+basically 30 years or so - or till the tape dies.
+
+The index of the tape is a simple text file, noting the kind of data,
+the size, the tape number, the file number (offset on tape) and the
+date of the backup:
+
+```
+doc 946M 1 0 17.4.2021
+Attic 13G 1 1 17.4.2021
+bilder 19G 1 2 17.4.2021
+projects 29G 1 3 18.4.2021
+ARCHIVE 16G 1 5 18.4.2021
+BACKUPS 122G 1 6 18.4.2021
+...
+music 154G 4 0 19.4.2021
+movies part1 547G 5 0 19.4.2021
+movies part2 785G 6 0 20.4.2021
+```
+
+## Bacula
+
+I use bacula for the daily incremental and full backups now for tape
+and offline cloud storage.
+
+bacula-sd just works fine and integrates with the rest of my backup system
+(the master bacula-dir is still living on an old Raspberry Pi). The only
+thing I was missing is to be able to copy a bacula job to two different
+media, one being the remote cloud storage and the other one the tape.
+Sort of a bacula 'tee' would be nice to have.
+
+# References
+
+* http://cdrtools.sourceforge.net/private/portability-of-tar-features.html:
+ on tar formats and compatibility
+* https://copyconstruct.medium.com/socat-29453e9fc8a6: blog about socat
+* https://www.commandlinefu.com/commands/view/13582/backup-to-lto-tape-with-progress-checksums-and-buffering
+* https://aur.archlinux.org/packages/mt-st-git/
diff --git a/content/blog/mail-disaster.md b/content/blog/mail-disaster.md
new file mode 100644
index 0000000..ab6d452
--- /dev/null
+++ b/content/blog/mail-disaster.md
@@ -0,0 +1,287 @@
++++
+title = "Mail Problems"
+categories = [ "Mail", "Linux", "Security" ]
+date = "2019-03-29T12:58:31+01:00"
+thumbnail = "/images/blog/mail-disaster/mail-disaster.png"
++++
+
+## History
+
+It was a beautiful day. My mailserver on the Raspberry Pi B was running
+without any issues for some time now.
+
+In the evening of March 12th I got a nice email from my external DNS
+provider:
+
+```
+The BuddyNS janitor writing. A safety notification on your BuddyNS account:
+
+ Your zones reached 60% of your account's traffic quota.
+
+Details:
+* Total traffic produced this month: 181 Thousand queries.
+* Current traffic quota: 0.3 Million queries/month.
+```
+
+Well, fine, I thought, finally somebody is checking on my web page and I
+went to sleep.
+
+Of course this was not the case: I had a weak password in one of the accounts
+of my mailserver (which allowed any legitimate Linux user to send
+emails). This caused all those DNS lookups for my domain on the
+BuddyNS DNS servers.
+
+So, my thinking went along the lines: well, some weeks ago
+I replaced the SD card, because the old one was worn out, I cannot
+remember whether I replaced all standard passwords. My suspicion got
+confirmed when I saw the following line in the my mail log:
+
+```
+From: "George"<alarm@andreasbaumann.cc>
+```
+
+Swearing big times about my own stupidity (the default password for the
+'alarm' account is - well - weak) I started cleaning up the mess.
+
+Checking my mail server logs I found that all attacks went via one single
+IP (185.228.80.18). So just blocking the firewall was the fastest way to
+fix the tousands of spam email being sent via my now defacto open mail relay.
+
+## Checking status
+
+There are various helpfull tools to check the status of your mail
+server. I picked https://mxtoolbox.com/. This is what I got:
+
+```
+ dmarc andreasbaumann.cc DNS Record not found
+ blacklist smtp.andreasbaumann.cc 127.0.0.2
+ blacklist smtp.andreasbaumann.cc Blacklisted by JUNKEMAIL
+ blacklist smtp.andreasbaumann.cc Blacklisted by NIXSPAM
+ blacklist smtp.andreasbaumann.cc Blacklisted by TRUNCATE
+ blacklist smtp.andreasbaumann.cc Blacklisted by UCEPROTECTL1
+ blacklist smtp.andreasbaumann.cc Blacklisted by WPBL
+ mx andreasbaumann.cc No DMARC Record found
+ mx andreasbaumann.cc DMARC Quarantine/Reject policy not enabled
+```
+
+I also like the results from ~~[http://zy0.de/q/83.150.2.48](http://zy0.de/q/83.150.2.48)~~:
+
+{{< figure src="/images/blog/mail-disaster/zy0_de.png" alt="zy0_de check resulst for 83.150.2.48" >}}
+
+Especially it shows you headers of SPAM mails, which are quite helpful
+to detect, what went wrong:
+
+```
+Spam samples A small selection
+
+ 12.03.2019 02:03 (Z) (date of processing)
+
+Return-Path: <alarm@andreasbaumann.cc>
+X-Original-To: cindy@SPAMTRAP.INVALID
+Received: from smtp.andreasbaumann.cc (smtp.andreasbaumann.cc [83.150.2.48])
+ by mail.ixlab.de (Spamtrap) with ESMTP
+ for <cindy@SPAMTRAP.INVALID>; Tue, 12 Mar 2019 03:03:20 +0100 (CET)
+Received: from User (unknown [185.228.80.18])
+ by smtp.andreasbaumann.cc (Postfix) with ESMTPA id 909CD77F2A;
+ Tue, 12 Mar 2019 01:22:20 +0100 (CET)
+Reply-To: <gg828579@gmail.com>
+From: "George"<alarm@andreasbaumann.cc>
+Subject: Good Day!!
+Date: Mon, 11 Mar 2019 17:22:27 -0700
+MIME-Version: 1.0
+Content-Type: text/html;
+ charset="Windows-1251"
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2600.0000
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
+X-NiX-Spam-Hash2: 5994f93f698c55d5b527b1da55f31611
+X-NiX-Spam-Source-IP: 83.150.2.48
+X-NiX-Spam-MX: mail.ixlab.de
+X-NiX-Spam-Listed: yes
+```
+
+## Blacklisting
+
+Mail servers can ask blacklists for bad IPs or domains and then block
+incoming mails.
+
+Most blacklists give you a home page, where they explain, how they
+manage the list. There you might also find the status of your IP or domain.
+
+There are basically three ways you can try to get off such a list:
+
+* you can fill in a form, usually describing what went wrong and how
+ you solved the problem.
+* you have to send an email with basically the same kind of information
+* you can do nothing, the delisting happens automatically
+
+Keep in mind, that humans read those messages, be polite and be open
+about what went wrong. I never had a problem getting delisted, when
+I described, what I did wrong in the past and how I will enforce better
+security in the future.
+
+Also note: you usually don't get any email or feedback. Give people time
+and they will consider the case. If they think, you deserve to send
+emails again, they will delist you from the blacklist.
+
+Find below short descriptions of what I had to do in the individual cases.
+
+### JumkMailFilter
+
+Visited the "remove from the list" for at:
+
+https://ipadmin.junkemailfilter.com/remove.php
+
+Entered my IP and some text, why I got onto the list.
+
+### DNSBL
+
+~~[http://www.dnsbl.manitu.net/remove.php?value=83.150.2.48](http://www.dnsbl.manitu.net/remove.php?value=83.150.2.48)~~
+
+I had to fill in a form and describe, what went wrong on my side and
+how I fixed the problem.
+
+### TRUNCATE
+
+http://www.gbudb.com/truncate/index.jsp
+
+Had nothing to do here, but wait:
+
+```
+"Maintenance of this list is completely automated and there are no
+provisions for the manual addition or removal of entries."
+```
+
+### UCEPROTECTL1
+
+```
+"This blacklist does not offer any form of manual request to delist.
+Your IP Address will either automatically expire from listing after
+a given timeframe, or after time expires from the last receipt of
+spam into their spamtraps from your IP Address.
+
+There is an express delisting for 89 CHF
+```
+
+For a personal domain I can wait for seven days sending out no spam.
+
+For a business domain I would most likely pay the 89 CHF. :-)
+
+### WPBL
+
+~~[http://www.wpbl.info/](http://www.wpbl.info/)~~
+
+```
+IP addresses are automatically removed with time, after
+spam stops arriving. For example, a lone spam sighting
+will only get an IP listed for 7 days. You can also
+remove an IP address using the Lookup facility at the
+top of the page. This no-questions-asked, instant removal
+facility is provided for the benefit of administrators
+who feel that the record is in error or have fixed the
+security problem that allowed spam to be sent through
+their hosts. Access to the removal facility may be
+restricted if there is any abuse of our system, including
+attempts to automate removal of multiple IPs using
+scripts. Removed records still remain in database backups.
+```
+
+Clicking on:
+
+http://www.wpbl.info/cgi-bin/remove.cgi
+
+I got:
+
+```
+Found IP address 83.150.2.48 in database, marking for removal.
+Record removed. The published list is updated hourly, so changes may not show immediately.
+```
+
+### SPAMCOP
+
+https://www.spamcop.net/w3m?action=checkblock&ip=83.150.2.48
+
+I filled in the provided form.
+
+### IBM DNS
+
+This is a nice security product called 'IBM-X-Forge-Exchange',
+so I had to log in with my IBM Id.
+
+{{< figure src="/images/blog/mail-disaster/ibm.png" alt="entries in IBM-X-Forge-Exchange" >}}
+
+I also had to describe my case to get delisted.
+
+### Gmail
+
+Now this one was tricky. Google has a not-so-great postmaster tool, hard
+to find forms to fill in and some confusing documentation.
+
+I tried here:
+
+https://glockapps.com/blog/remove-ip-address-gmail-blacklist/
+
+https://support.google.com/mail/contact/msgdelivery
+
+The postmaster tools are not a big help, really, I registered nonetheless.
+
+I got reject till March 28th, as far as I can tell the domain reputation below
+is one of the worst ones you can get and the only option is to wait some weeks
+after filling in the forms:
+
+```
+Our system has detected that this message
+is 550-5.7.1 likely suspicious due to the very low
+reputation of the sending 550-5.7.1 domain
+```
+
+## Course of Action for a better mail service
+
+I made sure, I have some security standards in place, so that
+at least faking the domain in the 'From:' field is not so simple:
+
+* [SPF](https://en.wikipedia.org/wiki/Sender_Policy_Framework): Sender Policy Framework
+* [DKIM](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail): Domain Keys Identified Mail
+* [DMARC](https://en.wikipedia.org/wiki/DMARC): Domain-based Message Authentication, Reporting and Conformance
+
+Those things don't help against a broken account on the mail server,
+as in my case, but they provide positive rating for emails being
+judged in the future, and they are simple to implement.
+
+I also added a list of accounts/emails to the postfix configuration.
+Only those accounts are allowed to send emails from the host.
+Even if this means you have to generate the entry in '/etc/passwd'
+and another one in that postfix list. This makes sure,
+no "rogue" Linux account can be abused for sending emails, when
+compromised.
+
+I added myself to the [DNSWL](https://www.dnswl.org) white list too.
+
+And of course, I deleted the 'alarm' account on the machine. :-)
+
+### Update 4.4.2019
+
+Gmail is still blocking me (or again?). So is bluewin.ch. The mess is
+not over, so I can only recommend everybody to make sure not to get
+into this situation in the first place.
+
+Added [Fail2Ban](https://www.fail2ban.org) to filter for common Postfix
+and Postfix SASL errors, like password-breach attempts via SASL. This
+works like a charm.
+
+Added [Spamassassin](https://spamassassin.apache.org/) and
+[Razor](http://razor.sourceforge.net/) to get rid of spam.
+
+### Update 15.4.2019
+
+Gmail likes us again.. :-)
+
+## References
+
+* https://mxtoolbox.com/
+* http://zy0.de/
+* https://en.wikipedia.org/wiki/Sender_Policy_Framework
+* https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
+* https://en.wikipedia.org/wiki/DMARC
diff --git a/content/blog/no-github.md b/content/blog/no-github.md
index 1d9d56d..f5641f1 100644
--- a/content/blog/no-github.md
+++ b/content/blog/no-github.md
@@ -14,3 +14,14 @@ The reasons should be obvious:
Find my software on http://git.andreasbaumann.cc/cgit/.
If you want to collaborate or supply a patch, you can contact me via email.
+
+### Update 22.2.2024
+
+I started to make exceptions to the rule above: when forking and working on existing
+projects which happen to be on Github already. Or when I push a read-only copy
+to Github from personal repos, just to increase the visibility of the project.
+
+
+Or if I want my code to be used in Copilot as example how to do good (or maybe bad)
+coding. ;-)
+
diff --git a/content/blog/openbsd-firewall-and-securityrouter.org.md b/content/blog/openbsd-firewall-and-securityrouter.org.md
index 178b827..b58a070 100644
--- a/content/blog/openbsd-firewall-and-securityrouter.org.md
+++ b/content/blog/openbsd-firewall-and-securityrouter.org.md
@@ -5,5 +5,5 @@ categories = [ "OpenBSD", "Security" ]
thumbnail = "/images/blog/openbsd-firewall-and-securityrouter/openbsd-firewall-and-securityrouter.png"
+++
-Found a really nice new router appliance based on OpenBSD 6.0, http://securityrouter.org. I’m still missing some features like a split-horizon DNS, so I will not abandon the script-based project http://github.com/andreasbaumann/OpenBSD-firewall just for now.
+Found a really nice new router appliance based on OpenBSD 6.0, http://securityrouter.org. I’m still missing some features like a split-horizon DNS, so I will not abandon the script-based project http://git.andreasbaumann.cc/cgit/OpenBSD-firewall just for now.
diff --git a/content/blog/openbsd-firewall-appliance-intro.md b/content/blog/openbsd-firewall-appliance-intro.md
index c9b73d2..31a805c 100644
--- a/content/blog/openbsd-firewall-appliance-intro.md
+++ b/content/blog/openbsd-firewall-appliance-intro.md
@@ -203,7 +203,7 @@ I would like to test more things around the following topics:
stuff it into a floppy to compact flash adapter, write the image, put
it back. This is tedious. :-)
-## Github
+## Git
The whole project can be found here:
@@ -212,10 +212,4 @@ http://git.andreasbaumann.cc/cgit/OpenBSD-firewall/
Feedback welcome. :-)
-## Note on Github
-
-There is a version on https://github.com/Eurospider/OpenBSD-firewall. This
-is the original version and I don't plan to update it anymore.
-Further development happens on my personal repo (as I'm basically the only
-one using it anyway).
diff --git a/content/blog/retro-computing-unisys.md b/content/blog/retro-computing-unisys.md
index a3f39fa..28ee60d 100644
--- a/content/blog/retro-computing-unisys.md
+++ b/content/blog/retro-computing-unisys.md
@@ -98,14 +98,25 @@ series on Youtube by Andres Ramos.
## Future plans
I want to be able to boot a modern Linux kernel and distribution on
-it. Currently I'm working on a "port" of [Archlinux32](http://www.archlinux32.org)
+it. Currently I'm working on a "port" of [Archlinux32](https://www.archlinux32.org)
to the i486 architecture using the [crosstool-ng](https://crosstool-ng.github.io/)
-toolchain (see [bootstrap32](https://github.com/archlinux32/bootstrap32)).
+toolchain (see [bootstrap32](https://git.archlinux32.org/bootstrap32)).
The installation process has to be something over iPXE, as a 1.44MB floppy
really doesn't hold a kernel 4.15.x anymore. iPXE itself will need some
patching for i486 too.
+### Update 26.11.2022
+
+Had to set up the machine again, either the SD card died or my Linux experiments
+nuked the MBR. Found [mTCP](http://www.brutman.com/mTCP/) to be a very nice
+alternative networking package, also having a FTP and HTTP server.
+
+Also the sentence about not being able to boot a modern Linux from floppy is wrong.
+In the meantime I can boot it with the
+[Archlinux32 i486 Floppy](https://git.archlinux32.org/archi486/tree/floppy), just the
+NEx000 drivers in modern kernels are currently quite misbehaving somehow.
+
## Videos and Links
* LGR: [My Smallest 486 Desktop PC: Unisys CWD-4002](https://www.youtube.com/watch?v=ddgmzmw6_qE)
@@ -135,6 +146,9 @@ patching for i486 too.
* [DOS drivers for the NE2000](http://www.georgpotthast.de/sioux/packet.htm), the NE2000.EXE package driver
* [Vibra 16 Soundblaster drivers on Vogons.org](http://www.vogonsdrivers.com/getfile.php?fileid=33&menustate=0)
+### DOS software
+* http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/net/wget/: wget for DOS
+
### Windows 3.1 drivers
* [Cirrus Logic GD5424](http://www.vogonsdrivers.com/index.php?catid=47)
@@ -154,5 +168,5 @@ patching for i486 too.
### Other Links
-* [Index of Interesting DOS programs](http://www.opus.co.tt/dave/indexall.htm)
+* ~~[Index of Interesting DOS programs](http://www.opus.co.tt/dave/indexall.htm)~~
diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2019.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2019.md
new file mode 100644
index 0000000..98b9f28
--- /dev/null
+++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2019.md
@@ -0,0 +1,111 @@
++++
+title = "Retro Computing - Vintage Computer Festival Zürich 2019"
+categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ]
+date = "2019-12-08T09:37:22+01:00"
+thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019.jpg"
++++
+
+## Intro
+
+My first visit to an exhibition of old computers. It was held on
+November 30th and December 1st in Zürich in the "Rote Fabrik".
+Given my collection of not-so-old computers I wanted to see a collection
+of really old computers.
+
+## PDP-11
+
+The first thing which catched my attention was a PDP-11 emulator with
+frontend also simulating a Tektronix 4010 graphical terminal. It's
+running on a Raspberry-PI fully emulating a PDP-11 running BSD 2.11.
+I was aware of old Unix V6 or V7 versions running on emulators, but
+a BSD 2.11 with a TCP/IP-stack is so much nicer.
+
+The following is a real desktop PDP-11 with some emulators for things
+like tapes and external devices:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-PDP-11.jpg" alt="PDP-11" >}}
+
+## Apple ][
+
+I brought some old floppies and was astonished they were booting the
+oldest Apple machines without any problems. Even the chess program
+worked (one of my earliest encounters with a computer was playing
+chess in the computer room back at my high school on an Apple \]\[).
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-Apple-2.jpg" alt="Apple \]\[" >}}
+
+I was also able to run a "games disk" with a menu system I once typed
+in from a book during my holidays back in school (yes, floppies where
+too expensive back then and you learned BASIC as a bonus while typing).
+
+Obviously too excited this still worked I didn't take any photos of it,
+so here is a placeholer, the original book with the program listings:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-apple-games-book.jpg" alt="Apple Game Book" >}}
+
+## old PCS
+
+While everybody else at the exhibitation was showing off their machines,
+the IBM-PC guys were trying to make sure that monitors didn't explode
+(one did) and building up a network, so they were constantly busy
+doing something on those machines. I was able to run a Flight Simulator 4
+from Microsoft on an EGA-based machine, really nice:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-FS4.jpg" alt="Fligh Simulator 4" >}}
+
+## SoftVGA
+
+Really interesting speech on how to implement a VGA "card" on an Atmel-based
+board. This catched my interest because I'm all in for minimalistic
+hardware and software on an FPGA.
+
+## Fluxengine
+
+This was more out of personal interest, as I still own 100nds of Apple \]\[,
+CP/M and PC-disks reaching back into the mid-80ies. My oldest two machines
+(an IMC-2001 Taiwanese Apple/CPM-clone and the Olivetti M290) are not working
+anymore and I can hardly find a floppy connector on the already old machines
+I own.
+
+Fluxenine reads floppy images via a 5V FPGA on a stick, one side is an
+old floppy connector, the oder side a normal USB connection.
+
+I brought some old floppies I could donate (in form of an image) for
+future analysis.
+
+## What else
+
+SGI, a Next, IBM/360 on an FPGA, Amiga, Commodore, tons of Apple/Macintosh,
+ZX Spectrum, ...
+
+## What not
+
+I personally missed some CP/M-based machines (not counting the electronic
+type writer running CP/M and running games from a small tape drive, which
+was interesting to see). Closest (from the outer appearance) came the
+following IBM portable:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2019/retro-computing-vintage-computer-festival-zurich-2019-IBM-5155.jpg" alt="IBM 5155 Portable" >}}
+
+Also I missed some Atari (like the ST TT series) machines (or maybe
+I just didn't see them).
+
+## Important Lessons Learned
+
+Talk to everybody! Every single one is an enthusiast and has an interesting
+history. If you just walk through the hall and stare at the machines, most
+things will not be impressive at all. Also the talks I can recommend.
+
+## Links
+
+* general links
+ * [Vintage Computer Festival Zurich](http://vcfe.ch/doku.php): official Webpage with exhibitors and schedule of speeches held
+ * [Event Information "Rote Fabrik"](https://rotefabrik.ch/#/events/5084?utm_medium=display&utm_source=kulturzueri.ch&utm_campaign=kulturzueri#/events/5084):
+ event information
+ * [Wikipedia entry on vintage Computer Festival](https://de.wikipedia.org/wiki/Vintage_Computer_Festival): history and purpose of the event
+ * [Gallery 2019](https://www.skv-net.ch/mobilegallery/gallery.php?a=456)
+* PDP-11/Tektronik:
+ * [Tek4010](https://github.com/rricharz/Tek4010)
+ * [BSD 2.11](https://github.com/RetroBSD/2.11BSD)
+* [SoftVGA](http://neil.franklin.ch/Projects/SoftVGA/)
+* [Fluxengine](http://cowlark.com/fluxengine): the FPGA-based USB-floppy reader
diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2021.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2021.md
new file mode 100644
index 0000000..58d7158
--- /dev/null
+++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2021.md
@@ -0,0 +1,87 @@
++++
+
+title = "Retro Computing - Vintage Computer Festival Zürich 2021"
+categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ]
+date = "2021-11-29T06:43:34+01:00"
+thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021.jpg"
++++
+
+## Intro
+
+First of all, quite amazing it could even happen given the pandemic
+situation, thanks to all organizers and exhibitors. It was held on
+November 27th/28th in Zürich in the "Rote Fabrik".
+
+No talks were held this year, also for obvious reasons. There were
+not many people there presumably also due to the pandemic situation.
+
+## Tektronix 4010
+
+2019 I saw a PDP-11 emulator along with an emulated Tektronix 4010
+graphical terminal. This time there was the real thing. Really impressive,
+and a phenomenal keyboard. (The image below is unintentionally blured
+due to the subpar photographic skills of the author):
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-tektronix-4010.jpg" alt="Tektronix 4010" >}}
+
+## Soviet computers
+
+There were all kinds of Soviet computers, something we don't get to
+see very often here.
+
+For instance the Agat computer based on a 6502:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-agat.jpg" alt="Agat" >}}
+
+The BK-0010-01 Soviet computer was really nice, being roughly a PDB-11 clone
+with an impressive dual-head monitor setup:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-BK-0010-01.jpg" alt="BK-0010-01" >}}
+
+## Lilith and Ceres
+
+For the first time I saw the "portable" version of the Lilith and sadly
+non-working versions of the Ceres 1 and 3 workstations. I did my studies
+on the Ceres 3 when back at ETH Zurich from 1992 to 1997. Mr Gutknecht was
+around to explain things.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-ceres3.jpg" alt="Ceres 3 Workstation" >}}
+
+I brought along my old school books, so that people had at least the chance
+to read a little bit about the system.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-oberon-books.jpg" alt="Programming in Oberon and The Oberon System" >}}
+
+
+## OLPC XO-1
+
+I was exhibiting my OLPC XO-1 computer in a series of communication devices
+from enter.ch.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2021/retro-computing-vintage-computer-festival-zurich-2021-olpc-xo-1.jpg" alt="OLPC XO-1" >}}
+
+## Important Lessons Learned
+
+My machines are not old or rare enough. I should really try to get the IMC-2001 running again
+doing some 6502-Apple2, Z80-CP/M stuff. Or the Olivetti with a 286 board inside or the 386..
+
+## Links
+
+* general links
+ * [Vintage Computer Festival Zurich](https://vintagecomputerfestival.ch): official webpage
+* PDP-11/Tektronik:
+ * [Tektronix 4010](https://en.wikipedia.org/wiki/Tektronix_4010)
+* Soviet Computers:
+ * [BK-0010-01 Soviet computer](https://wiki.vcfb.de/2020/en:soviet_computers)
+ * [Agat](https://en.wikipedia.org/wiki/Agat_(computer))
+* OLPC XO-1
+ * [OLPC XO-1](https://www.eguide.ch/en/objekt/xo-1-one-laptop-per-child/)
+* Computermuseum
+ * [Enter.ch](https://www.enter.ch)
+* Ceres/Lilith/Oberon:
+ * [Project Oberon 2013](http://www.projectoberon.com/): second edition, with a RISC-5 CPU done on FPGA
+ * https://verhoeven272.nl/fruttenboel/Oberon: all kind of information and nice links
+ * http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/forschung/weitere_seiten/lilith/index_DE/popupfriendly/:
+ some nice screenshots of the machines
+
+
diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2022.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2022.md
new file mode 100644
index 0000000..2edbf62
--- /dev/null
+++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2022.md
@@ -0,0 +1,100 @@
++++
+
+title = "Retro Computing - Vintage Computer Festival Zürich 2022"
+categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ]
+date = "2022-11-21T07:56:22+01:00"
+thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-lisa-harddisk.jpg"
++++
+
+## Intro
+
+This is the last vintage computer festival in Zürich in the "Rote Fabrik"
+(which has to be restorated after a bad fire back in 2012) - at least
+for now. It was held on November 19th/20th.
+
+It was back to what it was before the pandemic in terms of exhibits,
+the amount of people attending, the talks (which where held again this year).
+
+It's an ever growing community of exhibitors, most of them try to
+attend every year, so I'm just pointing out the new things, which
+catched my attention (the others can be seen on older blog entries
+of the series).
+
+This year we had challenges, so visitors could try their skills by
+solving puzzles or programming tasks at the exhibition desks. This
+is a good idea to get visitors more involved and it's not just a
+museum then, where exhibitors have to say 20 times the same stuff
+or people are just walking by the computers and making photos.
+
+I was sceptical in the beginning (basically because I don't like
+puzzling), but in the end I also did one or two of the challenges:
+trying to use a Lisa desktop and trying to get a message to Mastodon
+from an old Unix System V.
+
+## Local Heroes
+
+Again we had the ETHZ Lilith and Ceres as local Zürich computers, but
+this time also the group around Prof. Jean-Daniel Nicoud from the EPFL
+Lausanne. He showed some really interesting things.
+
+### Teaching Electronics
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-electronics-teaching.jpg" alt="Teaching Electronics" >}}
+
+Those blocks are basically 74xxx series logic chips in a block with
+schematics on top. You use cables to connect them and form logical
+blocks like for instance a small adder with carry. This is much nicer
+to deal with than with breadboards and the real logic chips.
+
+### Smaky
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-smaky-100.jpg" alt="Smaky 100" >}}
+
+This is a series of 8-bit computers, the first one based on Intel 8080, later on Z80.
+This one is based on a 68k processor. The really nice thing is the graphical interface,
+the keyboard and the mouse which feel absolutely modern.
+
+### Self-made computers
+
+On Youtube you can find a lot of people doing their own computer
+projects based on 6502 and Z80 CPUs. This one is a really early example
+of it (and totally without Youtube - the green one on the left with
+the high voltage sign and the cards sticking out as in a toaster):
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-self-made.jpg" alt="Self made computers" >}}
+
+## Apple Lisa
+
+This is a computer you usually see not running and only behind some centimeters of glas.
+At the VCF you had the chance to experience the GUI (especially its speed, ahem).
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-lisa-front.jpg" alt="Apple Lisa" >}}
+
+## CP/M
+
+Hidden in a corner were some really nice CP/M-based machines:
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2022/retro-computing-vintage-computer-festival-zurich-2022-cpm-machines.jpg" alt="CP/M machines" >}}
+
+## Important Lessons Learned
+
+My IMC-2001 is still not running and I'm currently fighting all kind of
+broken stuff (keyboard circuit, power supply, broken ROM-chip). Not having
+an exact twin of this machine makes it hard to repair.
+
+..and yes, I know how to create a document on the Apple Lisa now. ;-)
+
+## Links
+
+* general links
+ * [Vintage Computer Festival Zurich](https://vintagecomputerfestival.ch): official webpage
+* Smaky (sadly a lot of the links are broken)
+ * [Smaky Mouse and Keyboard](https://www.informatiquegestion.ch/mouse-and-keyboard): close up images
+ * [Smaky machines](https://www.smaky.ch/chapitre.php?id=lami_4): the timeline of the Smaky computers
+ * [Smaky@museebolo](https://www.museebolo.ch/): where the Smakies can usually be seen outside the VCF
+ * [Video on Smaky](https://www.youtube.com/watch?v=5Vt01NJIy18): on Youtube, shows off various Smakies,
+ history, games, etc. @debConf
+* videos
+ * [Youtube Gamo Tech25](https://youtu.be/rL4lvOuebJE)
+ * [Tomaniac](https://youtu.be/hIb0VxhVU2M)
+ * [The Phintage Collector](https://youtu.be/baWwDEKfXBA)
diff --git a/content/blog/retro-computing-vintage-computer-festival-zurich-2023.md b/content/blog/retro-computing-vintage-computer-festival-zurich-2023.md
new file mode 100644
index 0000000..75a2785
--- /dev/null
+++ b/content/blog/retro-computing-vintage-computer-festival-zurich-2023.md
@@ -0,0 +1,113 @@
++++
+
+title = "Retro Computing - Vintage Computer Festival Zürich 2023"
+categories = [ "Retro Computing", "Vintage Computer Festival", "VCF" ]
+date = "2023-11-12T17:32:22+02:00"
+thumbnail = "/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-scrib.jpg"
++++
+
+## Intro
+
+This time the vintage computer festival in Zürich was held in
+the "EWZ Kraftwerk Selnau". This is a former substation in the middle
+of Zurich which is a museum, event hall and coworking area now.
+The enterior is best described as a bunch of ship containers
+aranged in a middle of a factory hall. In the middle there is a bar
+now. There are corners with couches and a big room upstears which
+looks like the former control room (and most likely was one).
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-selnau1.jpg" alt="EWZ substation at Selnau" >}}
+
+As always I'm not listing all exhibitors and exhibited pieces, I'm
+just pointing out new things, which catched my attention this year
+(the others can be seen on older blog entries of the series).
+
+This year I was not in for challenges, I rather prefer talking to
+people, but everybody can do what he wants.
+
+New this year is a full recording of all the talks, this is nice
+as you don't have to decide whether you are watching the computers
+in the exhibition and having discussions with the exhibitors or whether
+you are watching the talks. This also good for the exhibitors themselves who
+would love to be able to attend to the talks too.
+
+## Portables
+
+A full room upstears was dedicated to a bunch of portable computers
+from the venerable Osborne OCC-1, Commodore SX-64, Amstrad,
+various PC portables, etc.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-portables.jpg" alt="Portable computers" >}}
+
+### OLPCs
+
+It's nice to see two OLPC XO-1 next to each other, with the mesh
+wlan in action. My takeaway is that it's not only the pieces of
+hardware you have and want to show, it's also about the story
+you tell about them and the way you present them - and where.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-olpcs.jpg" alt="Two 'One Laptop per Child' OLPC XO-1 on a bench" >}}
+
+### IBM PC Convertible (model 5140)
+
+I couldn't resist to play Planet X3 on CGA Composite on a small
+surveilance monitor thingy (sorry, one photo was blurred and the
+other one has now a non-syncing output signal, I promise,
+take my word, it worked just fine in "full" CGA colors).
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-ibm-convertible.jpg" alt="IBM PC Convertible (model 5140) with external monitor" >}}
+
+### Scrib
+
+Thankfully they was a Scrib teletype writer from the Smaky series
+of computers in that room which you could actually touch without
+white glowes. It was the technological equivalent of a Chinese
+fingertrap to me, trying to spin my head around the way you use this
+thing. Unique is the idea of using a mirror on the back to reflect the
+image of the CRT (which is mounted on the back). The image is cristal
+clear compared to other CRT displays of that time.
+
+I managed to print something, but couldn't remember the key combination
+I pressed so I spent far too much time to reproduce printing.
+I managed all kind of "erreurs de casettes" (behind the little
+shiny glas cover on the right the machine can hold two small tapes)
+but sadly not a second print.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-scrib.jpg" alt="Smaky Scrib" >}}
+
+## BBC Acorn Econet school network
+
+It was real joy to see the UKs pride of computing in a series of Acorn
+machines joined in a Econet network. Of course various Raspberry PIs
+were serving as coprocessor emulators, network files servers, etc.
+
+It was really pleasant to talk to Mark Usher and his plans collecting and
+documenting those machines.
+
+Who has the time should see BCC early education series on computing on TV.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-acorns.jpg" alt="Acorns" >}}
+
+## Other nice projects
+
+Especially nice was the Fusix on a Dragon32 (something I can also imagine
+to try on my IMC-2001) and the fully restaurated Sol-20 with wooden borders.
+
+{{< figure src="/images/blog/retro-computing-vintage-computer-festival-zurich-2023/retro-computing-vintage-computer-festival-zurich-2023-others.jpg" alt="Dragon 32 and Sol-20" >}}
+
+## Important Lessons Learned
+
+Fix that darn IMC-2001.. ;-)
+
+## Links
+
+* general links
+ * [Vintage Computer Festival Zurich](https://vintagecomputerfestival.ch): official webpage
+* smaky
+ * [Smaky Scribd](https://www.smaky.ch/chapitre.php?id=lami_6)
+* Acorn, Econet
+ * [Listing of computer models](https://www.retro-kit.co.uk/page.cfm/content/Acorn-Computers-Ltd/index.html)
+ * [Econet manuals](http://www.8bs.com/othrdnld/manuals/econet.shtml)
+* videos
+ * [Youtube video on the IBM PC Convertible (model 5140)](https://www.youtube.com/watch?v=F4fH6iPMxGw)
+
diff --git a/content/blog/web-search-homepage.md b/content/blog/web-search-homepage.md
index a3a1cc3..98b81c7 100644
--- a/content/blog/web-search-homepage.md
+++ b/content/blog/web-search-homepage.md
@@ -258,10 +258,24 @@ The upload to the remote webserver can be done more elegantly.
One idea is to use the backup/replication API of strus for this:
build an index locally and sync it to the strusWebService.
-Update March 2018: currently the ARM version of strus is completely broken
+### Update 8.3.2018
+
+Currently the ARM version of strus is completely broken
and the strusWebService is being rewritten. So there will be an updated
blog entry when those things are fixed.
+### Update 29.4.2018
+
+Replaced the web page search with an [Elasticlunr](http://elasticlunr.com/)
+Javascript search, running 100% on the client for added security and load
+distribution benefits.
+
+### Update 17.12.2023
+
+Replaced the Elasticlunr search with a webassembly version of
+[Sqlite Free Text Search 5](https://www.sqlite.org/fts5.html).
+Also runs completely on the clients browser.
+
# Sources
As always you can find the sources of the project on my github (also hosted
@@ -271,5 +285,5 @@ http://git.andreasbaumann.cc/cgit/www-andreasbaumann-cc/
The strus specific scripts and configuration are in:
-http://git.andreasbaumann.cc/cgit/www-andreasbaumann-cc/tree/strus
+http://git.andreasbaumann.cc/cgit/www-andreasbaumann-cc/tree/search/strus
diff --git a/content/contact/_index.md b/content/contact/_index.md
index e01bd58..66cb333 100644
--- a/content/contact/_index.md
+++ b/content/contact/_index.md
@@ -30,27 +30,42 @@ tzehXAMDqBBPyqlL88XZUBpXTIOyHBqC1kDjwTsIla+6AgepIRZQ2KDUaZrpuvDZ
jdnkclNZOIdmJapUfUu37CN4EP0noOkfvLOcsgqedWqtOox0GpGg5zoMFzG//O1H
V8H8yj65hsUa2118wXyy5MJ3+a6UkMuROgW5Hingks7md0QHbjQqG8EZherqdYm7
9Aa74y/O82hhYFHJJzpcRUo5hFrUusF3+uWrABEBAAG0KEFuZHJlYXMgQmF1bWFu
-biA8bWFpbEBhbmRyZWFzYmF1bWFubi5jYz6JAVQEEwEIAD4WIQQ4rKagJtJc3SJ9
-JIMvY5nc0iEhlQUCWaWx+AIbAwUJA8JnAAULCQgHAgYVCAkKCwIEFgIDAQIeAQIX
-gAAKCRAvY5nc0iEhlfnMCADzJPsby7+rBDFmt/QR929SiE35Uod+Q91YWYlC23/E
-o3HxRk01GAUmv6InN9cYJoCZEdcXDYJPtJhHjO/DSURDU2xx5gBd3gWbIFIsTiUi
-ryqqDyeIoq+pMWzQ9LG3eQfdGfIcRu5jLem7k/naPCQvxSpHf6O3YekwHZqng6i3
-yDmwUp5CSNDxDqV7HnwW6d02kHvA+3Q6undDAWQF0XdP7wgm3mlMVLNkTqDmYeQS
-ATptJcOpMEwi8t9mYmuiWYYPwDm492NScK5AoUF0WVK42aG5BEz2Oz9LVtcXKquu
-17Zr6xcuKtgM71paCO3dxnlvef0HbFeHFmOTT6lqu1z2uQENBFmlsfgBCADfP4Se
-cL8GvCKgVWuoM1tOEaZ/eND4jc4RcYTRdEiZYHfGah8S+kNd21Zpep++FSvQbwb+
-PjdQRbCwn+dBdxgpMhrLfZ3zy3Xtd4EEftq0y8Gyi+6ejJjk8eW7Xvl91objJSyh
-J5Fx5v/K9bof9uCTLaWq/aFjcWpovsbbDWrq/OXowp8A69xMPAmJee8zW/Nj7Fv0
-sgQrIGNe3T4BWVncuuzP3YWxCB85ysk99l17joKrQx6w7FaG0e/n+gd1X0YRofYg
-eu2UCpswbwfu7pwiWnNtgCajhaw47Og/9FMpsXGvuQs93pOLon7jLlPn1nsOaX5h
-NkHfmyYabykXlpZBABEBAAGJATwEGAEIACYWIQQ4rKagJtJc3SJ9JIMvY5nc0iEh
-lQUCWaWx+AIbDAUJA8JnAAAKCRAvY5nc0iEhlaMBCADIwsJwRi9XqkxaldehThkx
-giQDp6M99J+quKLsevVRtDKi88tSWEhYRNKNjZLkmfQ8cKcR4eSDEIN9135RTK+w
-mYq+IWgKIAPaFeMGQmBm2vlKTSpR4cuNMUCCToXwq4vUr5e/jRg+TzTf7j2pH7hi
-HIQILaiU74g7KCcR2X8EUxG6Dus1Sk6zcvmnASBirw2M8bgarTBlr8GPpDUxnp7Q
-LilZfyClqM29IfDjGOa+9RvOqHeC4m3xW8pqjIEuKOQeMmSY4xX7B01rFgILqhH4
-+IzlxIwq3xx0kxUup0zNLUtzBg2y9W6KX+VwruO4jH3qG91m3l/+1y1jRnQrtVkf
-=hS12
+biA8bWFpbEBhbmRyZWFzYmF1bWFubi5jYz6JAVQEEwEIAD4CGwMFCwkIBwIGFQgJ
+CgsCBBYCAwECHgECF4AWIQQ4rKagJtJc3SJ9JIMvY5nc0iEhlQUCZWIaRwUJDZ2b
+zwAKCRAvY5nc0iEhlSkcCACWXadTea1QUA9Ny9RoEqKCnEN+IbnEyukewmsnq4Xc
+6iX2MlkAxtPqUGxk8L3xxp1/q9s0yXaSNZjjBzj0uu0KS6QGDbTXDVzyC567jlbQ
+qeDI8IfJlVZl28FJtPwuTOBqnxx+0BwEZX4WGoa3d+lhuuoqjpXw6Z4QZYVGEucW
+m2Ri8qJFDpGXOjornaq7NJfhVx3Z8vNrwr0mipRG9B7HzleqPwwaJ/CmJrFeDY3B
+Qv5cMTZiSPRUa/j/qh59rCwyhMlqX6MdOxQ62BaeapM0I4tS2CsdiRWxF+pWbRXc
+rIB2Vb20J4h/R4IbHt/H078ABtPI2dwUs2VvPzf1lLjAiQFUBBMBCAA+FiEEOKym
+oCbSXN0ifSSDL2OZ3NIhIZUFAlmlsfgCGwMFCQPCZwAFCwkIBwIGFQgJCgsCBBYC
+AwECHgECF4AACgkQL2OZ3NIhIZX5zAgA8yT7G8u/qwQxZrf0EfdvUohN+VKHfkPd
+WFmJQtt/xKNx8UZNNRgFJr+iJzfXGCaAmRHXFw2CT7SYR4zvw0lEQ1NsceYAXd4F
+myBSLE4lIq8qqg8niKKvqTFs0PSxt3kH3RnyHEbuYy3pu5P52jwkL8UqR3+jt2Hp
+MB2ap4Oot8g5sFKeQkjQ8Q6lex58FundNpB7wPt0Orp3QwFkBdF3T+8IJt5pTFSz
+ZE6g5mHkEgE6bSXDqTBMIvLfZmJrolmGD8A5uPdjUnCuQKFBdFlSuNmhuQRM9js/
+S1bXFyqrrte2a+sXLirYDO9aWgjt3cZ5b3n9B2xXhxZjk0+partc9okBVAQTAQgA
+PgIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgBYhBDispqAm0lzdIn0kgy9jmdzS
+ISGVBQJdS9cGBQkHaIwOAAoJEC9jmdzSISGVEAcH/RfoMGcAw4A4GnlwQO3cBXIb
+G6z06H/7gPuAwSwGETBCIh6D3rkpjSw7I8YqXsbpNzWloXOhRoX1jsy3a0Vy5rps
+e6dddBXcyJOPSvTgNw3uWU0FbXQHlqVlwJ/SWQq882aOZZFnXITkaxzYK3TZtqRJ
+p4vgszEHhtaycMfyeXQNmlWQY0SHXA9AVgxYecIvvxkxp1AZ4GrhHXR9KC40FcSY
+CDvXluc6Uuscnl2t2Elxbjl8fpeb2Ifjy34AIUHB8vPPaVqfDfne6MbthYG8gG+s
+92NQPlhYjUCPc/IbWD2IvNJObXbBna9jGYsEg0/rR0DzChkzNA5SxJXb6I8DX0e5
+AQ0EWaWx+AEIAN8/hJ5wvwa8IqBVa6gzW04Rpn940PiNzhFxhNF0SJlgd8ZqHxL6
+Q13bVml6n74VK9BvBv4+N1BFsLCf50F3GCkyGst9nfPLde13gQR+2rTLwbKL7p6M
+mOTx5bte+X3WhuMlLKEnkXHm/8r1uh/24JMtpar9oWNxami+xtsNaur85ejCnwDr
+3Ew8CYl57zNb82PsW/SyBCsgY17dPgFZWdy67M/dhbEIHznKyT32XXuOgqtDHrDs
+VobR7+f6B3VfRhGh9iB67ZQKmzBvB+7unCJac22AJqOFrDjs6D/0Uymxca+5Cz3e
+k4uifuMuU+fWew5pfmE2Qd+bJhpvKReWlkEAEQEAAYkBPAQYAQgAJgIbDBYhBDis
+pqAm0lzdIn0kgy9jmdzSISGVBQJlM3LABQkNbvRIAAoJEC9jmdzSISGV3VsH/2or
+KR4Dvf+KYmdjYRSJmN0qczO7x/IZx9WGCIUrKCj+11d8voDOGCPwleiPlDQ6UO0p
+TknWn9oH0xuJoRLhZCaxCb04p2x1Urbscb09NJA9opibs3g8lbX1Mjdg3ayeUDb3
+5EkpowtI4tyjkX+sqtBYbwxgqg0kGwtt38xhLutilCIxSD8q92Sm92DKePaEAgGi
+NqYf/QUfjWtwswo7B/vhIUNbCBIUk0oWtW9P3HfJ/nQfWyG+N7N9KEvrTXaJ2o0K
+pLo22OY6Cg3qbLvbCkQ0/H30bPRQo7dqm6tvWP7V/Qy6PZX7NOiphka4cRw3uI8W
+Q1qs4ogfoSGjc/IkYyc=
+=3o73
-----END PGP PUBLIC KEY BLOCK-----
```
diff --git a/content/dataprotection/_index.md b/content/dataprotection/_index.md
index 2d92266..0d35960 100644
--- a/content/dataprotection/_index.md
+++ b/content/dataprotection/_index.md
@@ -12,6 +12,11 @@ or Piwik.
I do keep Apache log entries and firewall rules with IP, Date and User-Agent
information for at most 7 days in order to fight attacks and spam.
-Currently I'm using a Wordpress theme which uses Google fonts.
-For more information about Google Fonts see https://developers.google.com/fonts/faq,
-section "What does using the Google Fonts API mean for the privacy of my users?".
+Currently I'm using a Wordpress theme which uses Bunny fonts.
+For more information about Bunny Fonts see
+[https://bunny.net/fonts/](https://bunny.net/fonts/).
+
+This page is available both via HTTPS and HTTP, because using retro
+computers usually means you don't have the necessary libraries or
+computing power for TLS. To learn more about this topic see
+[http://neil.franklin.ch/Save_HTTP/index.html.en](http://neil.franklin.ch/Save_HTTP/index.html.en).
diff --git a/content/git/_index.md b/content/git/_index.md
index 4467646..1edb036 100644
--- a/content/git/_index.md
+++ b/content/git/_index.md
@@ -15,3 +15,7 @@ git clone git://git.andreasbaumann.cc/repo.git
If you have comments or patches, you can send them via email.
If you want to collaborate, I can give you write access.
+
+## Github
+
+Forked projects are on [Github](https://github.com/andreasbaumann?tab=repositories).
diff --git a/content/hardware/_index.md b/content/hardware/_index.md
new file mode 100644
index 0000000..ef4be4e
--- /dev/null
+++ b/content/hardware/_index.md
@@ -0,0 +1,8 @@
++++
+title = "Hardware"
++++
+
+A (not so curated) list of "old" hardware I own:
+
+- [IMC-2001](/hardware/imc-2001): Taiwanese Apple \]\[ / CP/M clone
+- [Book8088](/hardware/book8088): Modern 8088 XT-style laptop PC
diff --git a/content/hardware/book8088-status-todos.md b/content/hardware/book8088-status-todos.md
new file mode 100644
index 0000000..b02ba5e
--- /dev/null
+++ b/content/hardware/book8088-status-todos.md
@@ -0,0 +1,21 @@
++++
+title = "Book8088 Status and Todo List"
++++
+
+# Todos
+
+Trying to fix several issues:
+
+- Minix 2.0.4: has some weird issues around IRQ handling. It gets stuck
+ in readclock (I suspect after every IRQ, because it happens also when
+ using sleep - which needs a hardware clock interrupt - and when printing
+ to serial). The CF uses _no_ interrupt, this explains why Minix 2 is
+ booting at all.
+
+# things known to work
+
+- DOS 6.22 with mTCP network stack and a NE2000 Kinston card
+- Mini 1.7 boots and runs just fine
+- Booting XT-IDE serially with DOS image
+- Booting Minix 2.0 over serial using the Linux version of serdrive
+ from XT-IDE
diff --git a/content/hardware/book8088.md b/content/hardware/book8088.md
new file mode 100644
index 0000000..ee06868
--- /dev/null
+++ b/content/hardware/book8088.md
@@ -0,0 +1,18 @@
++++
+title = "Book 8088"
++++
+
+{{< figure src="/images/hardware/book8088/book8088.jpg" alt="Book8088" >}}
+
+This is a modern clone of a IBM PC (XT), with a NEC V20 CPU, compact flash,
+VGA graphics, serial and parallel connector and a USB connector (which mainly
+serves as mass storage device). It has 640k of RAM (yes exactly 640k). It runs
+in 4 or 8 MHz speed (turbo mode). You can also connect 8-bit ISA-cards over
+an ISA-bus extender with 3 slots (though this renders the laptop much less
+portable).
+
+It runs the [8088 BIOS](https://github.com/skiselev/8088_bios) not the Chinese
+pirated one. This one also includes the [XT-IDE](https://www.xtideuniversalbios.org/)
+disk BIOS for the compact flash or serial disk drive.
+
+- [Status and Todos](/hardware/book8088-status-todos)
diff --git a/content/hardware/imc-2001-chargen40.md b/content/hardware/imc-2001-chargen40.md
new file mode 100644
index 0000000..84bf54a
--- /dev/null
+++ b/content/hardware/imc-2001-chargen40.md
@@ -0,0 +1,90 @@
++++
+title = "IMC-2001 40 character mode"
++++
+
+{{< figure src="/images/hardware/imc-2001/chargen.png" alt="character in the 40-char ROM" >}}
+
+*A4-A6* on the schematics is the character ROM in a chip labelled
+UMC UM2316-J127 8432, it is Intel 2716 EPROM compatible chip it seems.
+
+It can be read with the TL866 and returns the following 2K dump:
+
+[chargen.rom](/hardware/imc-2001/chargen.rom): Chargen 40-column ROM
+
+The official ROM
+[3410036.BIN](http://www.applelogic.org/APPLEASICs.html) on
+http://www.applelogic.org/APPLEASICs.html doesn't match
+at all. The arangement of the characters is different and there are
+lowercase characters in the clone ROM.
+
+I wrote a small program to show the contents of chargen.rom:
+
+```
+#!/usr/bin/tcc -run -Werror -DSDL_DISABLE_IMMINTRIN_H -I/usr/include/SDL2 -lSDL2
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL.h>
+
+int main( int argc, char *argv[] )
+{
+ FILE *f = fopen( "./chargen.rom", "r" );
+ char *buf = malloc( 2 * 1024 );
+ fread( buf, 2 * 1024, 1, f );
+
+ SDL_Renderer *renderer;
+ SDL_Window *window;
+
+ SDL_Init( SDL_INIT_VIDEO );
+ SDL_CreateWindowAndRenderer( 300, 200, 0, &window, &renderer );
+ SDL_SetRenderDrawColor( renderer, 0, 0, 0, 0 );
+ SDL_RenderClear( renderer );
+ SDL_SetRenderDrawColor(renderer, 0xFF, 0xB0, 0, 255 );
+
+ int x = 0;
+ int y = 0;
+ for( int c = 0; c < 2 * 1024; c++ ) {
+ int v = buf[c] & 0x00ff;
+ for( int b = 0; b < 8; b++ ) {
+ if( v & 0x01 ) {
+ SDL_RenderDrawPoint( renderer, x, y );
+ }
+ v >>= 1;
+ x++;
+ }
+ x -= 8;
+ y += 1;
+ if( ( (c+1) % 128 ) == 0 ) {
+ x += 10;
+ y = 0;
+ }
+ }
+
+ SDL_RenderPresent( renderer );
+
+ int done = 0;
+ while( !done ) {
+ SDL_Event event;
+ SDL_PollEvent( &event );
+ switch( event.type ) {
+ case SDL_QUIT:
+ case SDL_KEYDOWN:
+ done = 1;
+ break;
+ }
+ }
+
+
+ SDL_DestroyRenderer( renderer );
+ SDL_DestroyWindow( window );
+ SDL_Quit( );
+
+ free( buf );
+ fclose( f );
+ return 0;
+}
+```
+
+And indeed I get:
+
+{{< figure src="/images/hardware/imc-2001/chargen.png" alt="character in the 40-char ROM" >}}
diff --git a/content/hardware/imc-2001-documentation.md b/content/hardware/imc-2001-documentation.md
new file mode 100644
index 0000000..20fce81
--- /dev/null
+++ b/content/hardware/imc-2001-documentation.md
@@ -0,0 +1,18 @@
++++
+title = "IMC-2001 Documentation"
++++
+
+# Operation Manual
+
+"Operation Manual for IMC-2001, version 2.01":
+
+{{< figure src="/images/hardware/imc-2001/manual_frontpage.jpg" alt="manual frontpage" >}}
+
+[The complete scanned manual](/hardware/imc-2001/manual_imc_2001_2.01.pdf)
+(also on archive.org, see [https://archive.org/details/manual_imc_2001_2.01](https://archive.org/details/manual_imc_2001_2.01))
+
+# Super Serial Card
+
+I got a super serial card from Ebay, the documentation of it can be
+found here [https://archive.org/details/Apple_II_Super_Serial_Card_1981_Apple](https://archive.org/details/Apple_II_Super_Serial_Card_1981_Apple).
+
diff --git a/content/hardware/imc-2001-firmware.md b/content/hardware/imc-2001-firmware.md
new file mode 100644
index 0000000..8e4aabc
--- /dev/null
+++ b/content/hardware/imc-2001-firmware.md
@@ -0,0 +1,185 @@
++++
+title = "IMC-2001 Firmware"
++++
+
+{{< figure src="/images/hardware/imc-2001/romboard.jpg" alt="IMC-2001 ROM card" >}}
+
+# Intro
+
+The ROM consists of two ROM chips. The bigger chip labelled "ROM1" was
+broken (it got really hot) and could not be read (it returned all zeroes).
+It has no markings on it, so one can only guess it is something AT28C256
+compatible.
+
+The ROMs sit in the special "slot 0". The board has two other
+unused ROM sockets and an arrow pointing to an additional ROM socket on
+the motherboard itself.
+
+On the schematics the slot is not labelled "slot 0" but "ROM" and this
+gives away it's special purpose for the machine.
+
+# ROM 2
+
+ROM 2 (sticker with hand-written red 2 on top) is a Mitsubishi M5L2732K,
+32k-bit, 4k-ROM, seems very ok during operation (the carvings say
+"M5L2732K, 83080L, JAPAN").
+
+## lower-case patch
+
+Comparing ROM2 to the standard Apple autostart ROM
+(https://6502disassembly.com/a2-rom/AutoF8ROM.html) we see only one difference at:
+
+```
+FD80 (F800+580)
+
+AutoF8ROM
+00000580 90 02 29 df 9d 00 02 c9 8d d0 b2 20 9c fc a9 8d |..)........ ....|
+monitor.rom:
+00000580 90 02 ea ea 9d 00 02 c9 8d d0 b2 20 9c fc a9 8d |........... ....|
+```
+
+```
+fd80: 90 02 bcc ADDINP
+fd82: 29 df and #$df ;shift to upper case
+fd84: 9d 00 02 ADDINP sta IN,x
+fd87: c9 8d cmp #$8d
+fd89: d0 b2 bne NOTCR
+fd8b: 20 9c fc CROUT1 jsr CLREOL
+fd8e: a9 8d CROUT lda #$8d
+fd90: d0 5b bne COUT
+```
+
+*EA EA* are 2 nops where the *and #$df* is. This seems to do away with
+uppercasing the byte coming from the keyboard, so that lower-case character
+work.
+
+# ROM 1
+
+ROM 1 is hard to guess, what it originally contained (as mine got fried).
+
+# addressing mode
+
+I put back the original Autostart ROM, the addressing on the PCB is a little
+bit weird. As the monitor was working I could write a test ROM with
+
+```
+#!/usr/bin/tcc -run -Werror
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main( int argc, char *argv[] )
+{
+ FILE *f = fopen( "./pattern.rom", "w" );
+ char *buf = malloc( 1024 );
+ for( int i = 0; i < 32; i++ ) {
+ memset( buf, i, 1024 );
+ fwrite( buf, 1024, 1, f );
+ }
+ fclose( f );
+ free( buf );
+ return 0;
+}
+```
+
+and get the following pattern in the monitor:
+
+```
+D000 1C
+D400 1D
+D800 1E
+DC00 1F
+E000 18
+E400 19
+E800 1A
+EC00 1B
+```
+
+So the replacement AT28C256 is arranged as follows:
+
+```
+0x6000 18 must contain the second 4k of the apple rom starting with e000 (24k)
+0x7000 1c must contain the first 4k of the apple rom d000
+```
+
+So I ended up doing this:
+
+```
+dd if=/dev/zero of=zero1 bs=1 count=24576
+dd if=Applesoft of=apple1 bs=1 skip=4096 count=4096
+dd if=Applesoft of=apple2 bs=1 count=4096
+cat zero1 apple1 apple2 > newrom1.rom
+```
+
+## Unkown difference
+
+When I watched the series on the Apple clone from Adrian's Digital Basement
+(he has a nice 3 part mini-series on the fixing of an Apple clone of unknown
+origin) I noticed the following difference:
+
+ROMS he published 'Apple\ II\ Clone\ ROM\ E0\ 300854cc.bin' which
+has one single difference in the E000 ROM:
+
+```
+ ; Convert FAC to integer. Must be -32767 <= FAC <= 32767.
+e10c: a5 9d AYINT lda FAC ;exponent of value in FAC
+e10e: c9 90 cmp #$90 ;abs(value) < 32768?
+e110: 90 09 bcc MI2 ;yes, okay for integer
+e112: a9 fe lda #<NEG32768 ;no; next few lines are supposed
+e114: a0 e0 ldy #>NEG32768 ;to allow -32768 ($8000), but do not!
+e116: 20 b2 eb jsr FCOMP ;because compared to -32768.00049
+ ; <<< BUG: A=-32768.00049:A%=A is accepted, but PRINT A,A% shows that A=-
+ ; 32768.0005 (ok), A%=32767 (wrong!) >>>
+```
+
+instead of *a0e0* it has *a0e5*
+
+```
+ ; <<< meant to be -32768, which would be 9080000000 >>>
+ ; <<< 1 byte short, so picks up $20 from next instruction >>>
+e0fe: 90 80 00 00 NEG32768 .bulk $90,$80,$00,$00 ;-32768.00049 in floating point
+```
+
+maybe the variable got moved to *e5fe* for some reasons? hard to tell, especially
+as the other ROMs have no differences. I kept mine on the original autostart ROM.
+
+## PIN Layout
+
+Found on https://forum.classic-computing.de/forum/index.php?thread/11666-apple-clon-gtac-fragen/&postID=401752#post457130
+
+```
+Slot Rom1 Rom2 Slot Rom1 Rom2
+
+Pin Pin
+
+26 12 14-12 25 28 24
+27 20,18 24
+28 22 23
+29 22
+30 21
+31 20
+32 19
+33 18
+34 17
+35 16
+36 15
+37 14 2
+38 13 23
+39 12 20
+40 11 24
+41 10 25 23
+42 9 3 1
+43 8 4 2
+44 7 5 3
+45 6 6 4
+46 5 7 5
+47 4 8 6
+48 3 9 7
+49 2 PIN10 8
+50 1
+```
+
+## Links
+
+* https://forum.classic-computing.de/forum/index.php?thread/11666-apple-clon-gtac-fragen/&postID=401752#post457130
diff --git a/content/hardware/imc-2001-images.md b/content/hardware/imc-2001-images.md
new file mode 100644
index 0000000..f7d3bdb
--- /dev/null
+++ b/content/hardware/imc-2001-images.md
@@ -0,0 +1,20 @@
++++
+title = "IMC-2001 Images"
++++
+
+From the outside:
+
+{{< figure src="/images/hardware/imc-2001/computer_full.jpg" alt="IMC-2001" >}}
+
+Booting into Apple \]\[ CP/M 56k:
+
+{{< figure src="/images/hardware/imc-2001/cpm_40chars.jpg" alt="IMC-2001" >}}
+
+The motherboard and floppy drives:
+
+{{< figure src="/images/hardware/imc-2001/motherboard_internal.jpg" alt="IMC-2001" >}}
+
+The motherboard seems to be a CTAG-2 Taiwanese motherboard, so pretty standard.
+
+The floppy drives are standard TEAC-55A-U-00, with the short cable without the ground
+pins between data lines presumably.
diff --git a/content/hardware/imc-2001-keyboard.md b/content/hardware/imc-2001-keyboard.md
new file mode 100644
index 0000000..aaeea43
--- /dev/null
+++ b/content/hardware/imc-2001-keyboard.md
@@ -0,0 +1,58 @@
++++
+title = "IMC-2001 keyboard"
++++
+
+connector to machine (sort of a rubber version of a DB-9):
+
+The connector on the computer side has a 9-pin DSUB connector male:
+
+```
+ +----------- white INTR
+ | +--------- black GND
+ | | +------- green DATA
+ | | | +----- blue RESET
+ | | | | +--- Yellow CLOCK
+-------------
+\ O O O O O /
+ \ O O O O /
+ ---------
+ | | | +---- red 5V
+ | | +------ n.c.
+ | +-------- n.c.
+ +---------- n.c.
+```
+
+On the keyboard PCB there is a strange white connector with the following layout:
+
+```
+ +------------- white INTR (active low, after last clock tick)
+ | +----------- black GND
+ | | +--------- blue RESET (active low)
+ | | | +------- green DATA
+ | | | | +----- yellow CLOCK
+ | | | | | +--- red +5V
+ +-----------+
+ |o o o o o o|
+ +-----------+
+ | |
+```
+
+Keyboard layout:
+
+{{< figure src="/images/hardware/imc-2001/keyboard_front.jpg" alt="keyboard layout" >}}
+
+Keyboard has a 8039 CPU inside and a 2K EPROM:
+
+{{< figure src="/images/hardware/imc-2001/keyboard_pcb_controller_prom.jpg" alt="PCB and controller" >}}
+
+On the oscilloscope:
+
+{{< figure src="/images/hardware/imc-2001/oscilloscope_serial_keyboard.jpg" alt="serial keyboard signal" >}}
+
+The protocol is basically ASCII over 19200 baud serial, with an interesting end signal which
+IMHO triggers a latch on the motherboard or so (INTR white above).
+
+Broken keyboard cable (the black pins are just connectors added by me to test connectivity,
+both connector are female per default):
+
+{{< figure src="/images/hardware/imc-2001/keyboard_cable.jpg" alt="PCB and controller" >}}
diff --git a/content/hardware/imc-2001-links.md b/content/hardware/imc-2001-links.md
new file mode 100644
index 0000000..2d8a421
--- /dev/null
+++ b/content/hardware/imc-2001-links.md
@@ -0,0 +1,19 @@
++++
+title = "IMC-2001 Links"
++++
+
+## Other IMC-2001
+
+* [Mention of the IMC-2001](http://www.epocalc.net/php/liste_models.php?texte=&look=All+fields&yearmax=2018&nocomp=pc&cat=Apple+2+clone):
+ mentions it on the list of Apple clones
+* [Youtube video of similar machine](https://www.youtube.com/watch?v=c7crlJg80Zg):
+ "APPLE II CLONE + CP/M ------- IMC 2001 made in taiwan.--------", Retro Computacion Argentina Jorge E. Nuviola
+
+## Other Similar Clones
+
+* West PC 800:
+ - Pietro Filiberi: https://www.youtube.com/@dustylife/videos
+ - Retro Erik: https://www.youtube.com/watch?v=Kop7mHEmJyM
+* https://github.com/eyalabraham/apple2 or
+ https://github.com/pfiliberti/gtac-appleclone
+* http://john.ccac.rwth-aachen.de:8000/patrick/MEWA48.htm
diff --git a/content/hardware/imc-2001-power.md b/content/hardware/imc-2001-power.md
new file mode 100644
index 0000000..ee8e3a1
--- /dev/null
+++ b/content/hardware/imc-2001-power.md
@@ -0,0 +1,26 @@
++++
+title = "IMC-2001 Power and PSU"
++++
+
+Power connector on the motherboard:
+
+```
++-------------+
+| O O O O O O |
++-------------|
+ | | | | | +--- GND black
+ | | | | +----- +12V red
+ | | | +------- -5V blue
+ | | +--------- -12V brown
+ | +----------- +5V white
+ +------------- +5V white
+```
+
+Old PSU:
+
+{{< figure src="/images/hardware/imc-2001/old_psu.jpg" alt="New PSU" >}}
+
+New PSU replacing the old crusty one (this is a standard replacement PSU for
+Apple \]\[ from [Reactive Micro](https://wiki.reactivemicro.com/Universal_PSU_Kit)):
+
+{{< figure src="/images/hardware/imc-2001/new_psu.jpg" alt="New PSU" >}}
diff --git a/content/hardware/imc-2001-status-todos.md b/content/hardware/imc-2001-status-todos.md
new file mode 100644
index 0000000..9ba7995
--- /dev/null
+++ b/content/hardware/imc-2001-status-todos.md
@@ -0,0 +1,133 @@
++++
+title = "IMC-2001 Status and Todo List"
++++
+
+# Todos
+
+Trying to fix several issues:
+
+- CPM65 works on the machine in 40-character mode (hacked), the
+ Videx card is the next goal. The 40-character mode still is quite
+ unreliable and crashes the machine, the screen TTY driver is still
+ to be done for apple2.
+- the 5V rail is on 4.5V now, causing issues with the keyboard (the
+ length of the cable) and with the paddles. Not clear, whether this
+ is the PSU (which is also showing 4.7V without load) or something
+ on the motherboard. There are two +5V lines on the original PSU and
+ only one on the replacement PSU, maybe that's a problem?
+- the keyboard beeps and issues '=' and '/' characters when connected
+ to a longer serial cable, no problems when connecting the botched
+ wire from the old connector on the keyboard PCB directly to the
+ computer. Some shielding or capacitance issue? It also appeared
+ only after playing with the paddle connectors.
+- the new paddle connector with DIN-5 connectors works somewhat with
+ paddle 0, though the nob is not totally up when on 255. This indicates
+ again a capacitance issue, probably with the cable itself?
+- two new teac drives turned out to have the very wrong connector for
+ an Apple \]\[ disk controller, some adapted has to be designed and
+ a PCB has to be printed.
+- strange issues with floppy images not working in LinApple or also
+ not on the real computer, always bailing out in the monitor in strange
+ locations. Used Fluxengine and ADTPro to get images, they are identical.
+ Checked the RAM of the machine, no errors. Must investigate if boot
+ addresses are the issue (48k floppy masters not working on 64 or similar
+ issues)
+- HGR shows a line on row 0 only partially. This could be an adjustment issue
+ of the CRT image or also bad RAM.
+- the CRT shows some flickering and diagonal effects. Testing on an old TV
+ shows the same issue (so I suspect it's some grounding/shielding issue
+ with the new PSU).
+- the CRT is producing some flickering when turning the brightness nob,
+ this should be fixable with some deoxit.
+- the second floppy drive (the more used one) now sees floppies always as
+ "write protected". Diagnostic tests show alignment issues of the drive, this
+ could be true, or the clone always had a different alignment than a default
+ Apple 2 drive?
+- the paddle wire is self-made on paddle 1 and quit a mess. Doing a rewire
+ with DIN-5 connectors which then lead to a 9-pin DSUB-Apple ][ standard
+ joystick connector, which will go to the 16-pin DIP socket on the motherboard.
+ The original joystick connector has a completely weird layout and is not usable
+ (it has no Apple 2 layout)
+- really bad design to connect DIP 2x8 cables of the joystick and the paddles
+ directly on the motherboard, you pull the cable a little bit too much and
+ you tar out half of the motherboard.
+- possibly much more
+
+# Fixed Issues
+
+- ~~the paddle and the joystick connectors miss some legs for putting them into
+ the sockets on the motherboard~~. No essential pins are missing, will
+ rework this anyway as a 8x2 DIP to 9-DSUB, from there to an adapter
+ where you can connect 2 DIN-5 cables, needs rewiring of both paddles.
+- ~~paddle 0 seems to be a little bit shacky (the button works unreliably)~~.
+ DeOxit in the button helped. Works much better now.
+- ~~the lever moving the contacts between 40-character and 80-character
+ mode for the CRT output is corroded, doesn't always make contact
+ and produces a flickering image~~. The box is heavily sealed and there
+ is no easy way to fix it. Using an audio switch box for switching modes now
+ (the cables are standard audio-like cinch connectors).
+- ~~the floppy drives read floppies (both) but they don't write to floppies
+ (when copying in CP/M or creating a file), they work when formatting
+ a drive on CP/M though. ~~Could be a side-effect of the PSU not working properly.~~
+ The PSU has been replaced, the voltages look ok, so I rule out the PSU.
+ Could be some missing code in the Apple ROM (but that would be weird to
+ call 6502 firmware code from the Z80 CPU). It could also be the write
+ current being to low for writting (but why does formatting a drive work then?!)~~
+ So, yes. DOS 3.3 and CP/M both use some ROM routines from ROM1 to write to disk.
+ Works now.
+- ~~floppies written read/written with Fluxengine don't really work either
+ on the real hardware or the emulator. Suspecting a encoding/decoding issue.~~
+ Updating Fluxengine solved the issue, also choosing 96dpi 5 1/4" for the real
+ floppy drive. :-)
+- ~~the keyboard reset line cannot be taken to ground on the keyboard, works
+ with shrtening ground and reset though just fine. Must be a bug on the
+ ICs of the keyboard controller or a broken trace.~~ Fixed with a botch
+ to bridge the broken ribbon cable between keyboard matrix and the PCB with
+ the controller logic.
+- ~~ROM 1 with BASIC is broken (and gets really hot). This explains
+ the booting issues.. (will be tricky to get a replacement). The
+ board layout doesn't fit to the original ROM sizes too..~~
+ Got an AT28C256, no more frying of chips, Apple Basic prompt appears,
+ tested some commands and it seems fine. The 32k ROM has to be filled in
+ starting from 0x6000 with #E000-$EFFF and from $7000 with $D000-$DFFF.
+ If this ROM is ok we will see.
+- Reseated and deoxied all ICs, some of them were quite corroded, at
+ least 3 more turned out to be bad. ~~Sadly it didn't have an effect on
+ ROM 1 not getting hot (must be something else).~~ The new replacement
+ ROM works fine and doesn't get hot. So I actually blame it on the ROM
+ itself causing the other ICs to fry and not vice-versa.
+- ~~power switch made some hissing noises, it was not the switch, now
+ the original power is dead (and some transformers are humming). Ordered
+ a Apple 2 replacement PSU, waiting for it..~~
+ The new replacement power supply works like a charm, also replaced
+ the power switch, the old one was too unreliable.
+- ~~sometimes I get into the monitor~~
+- ~~lower-nibble bit 3 of the key
+ being pressed is missing, unclear where it is lost, I suspect a
+ bad register on the motherboard holding the current ASCII value of
+ the key pressed or something similar~~. Replaced a bad 74LS257N,
+ works now just fine.
+
+# Not fixed issues:
+
+- ~~The 220V fan no longer works.~~
+ I just disconected it, I don't think, it really helps to cool the system.
+
+# Known things to work:
+
+- The keyboard works electronically (8039 MCS-48 like CPU with a 2K EPROM),
+ has a new serial cable now and is fully functional
+- the Rockwell R6502 CPU has a phase 0 clock and seems to go through
+ address lines and output data (another strong indicator is the 'Apple \]\['
+ sign on the monitor when switching on which indicates 6502, 40-character
+ ROM, video circuit seems to be just fine).
+- Monitor is working just fine (which is sort of amazing for such an old
+ CRT monitor).
+- I can boot from a Apple \]\[ CP/M 56k floppy and I get a prompt, now
+ as the keyboard works and the CP/M on the 80-character card I can also
+ assume the Z80 is working just fine.
+- the 80-columns card (a Videx Videoterm or rather a clone of it) works just fine.
+- the highres graphic mode works just fine, I can run "Peter Anvin Chess" and play it.
+- Applesoft BASIC works fine
+- the new Super Serial Card II I got works fine, though it looses characters
+ (without parity and adding some delay in minicom). Definitely usable.
diff --git a/content/hardware/imc-2001.md b/content/hardware/imc-2001.md
new file mode 100644
index 0000000..608e455
--- /dev/null
+++ b/content/hardware/imc-2001.md
@@ -0,0 +1,18 @@
++++
+title = "IMC-2001"
++++
+
+{{< figure src="/images/hardware/imc-2001/computer_full.jpg" alt="IMC-2001" >}}
+
+This is an old Taiwanese Apple \]\[ / CP/M clone.
+
+- [Status and Todos](/hardware/imc-2001-status-todos)
+- [Keyboard](/hardware/imc-2001-keyboard): keyboard connector and protocol
+- [Power](/hardware/imc-2001-power): PSU and power
+- [Chargen40](/hardware/imc-2001-chargen40): 40-column character mode
+- [Firmware](/hardware/imc-2001-firmware): the monitor, Applesoft ROMs
+- [Documentation](/hardware/imc-2001-documentation): documentation about the machine
+ and peripherals
+- [Images](/hardware/imc-2001-images)
+- [Links](/hardware/imc-2001-links): links to other similar machines
+
diff --git a/content/search/_index.md b/content/search/_index.md
index 80efd10..1c0d6d7 100644
--- a/content/search/_index.md
+++ b/content/search/_index.md
@@ -2,4 +2,6 @@
title = "Search"
+++
-The search is using [ElasticLunr](http://elasticlunr.com/).
+<!-- The search is using [ElasticLunr](http://elasticlunr.com/). -->
+
+The search is using [FTS5 Sqlite3 in sql.js](https://www.skypack.dev/view/sql.js-fts5).
diff --git a/content/slide/_index.md b/content/slide/_index.md
index ce5b956..eab5ab6 100644
--- a/content/slide/_index.md
+++ b/content/slide/_index.md
@@ -6,10 +6,10 @@ title = "Slides"
* [OBS Build System](/slide/obs): how to package C++ software with the
help of the [Open Build Service](http://build.opensuse.org). Used in
- the [Strus](http://project-strus.net) project.
+ the [Strus](http://project-strus.net) project (2015).
## Strus
-* [Strus Web Service](http://eurospider.github.io/strusWebService/doc/slides/strus-webservice.html): a web service written
+* [Strus Web Service](/slide/strus-webservice): a web service written
with [CppCMS](http://cppcms.com) exposing the [Strus](http://project-strus.net)
- APIs as a JSON protocol similar to [Elasticsearch](http://www.elastic.co/products/elasticsearch).
+ APIs as a JSON protocol similar to [Elasticsearch](http://www.elastic.co/products/elasticsearch) (2015, 2016).
diff --git a/content/slide/strus-webservice.md b/content/slide/strus-webservice.md
new file mode 100644
index 0000000..2638e6e
--- /dev/null
+++ b/content/slide/strus-webservice.md
@@ -0,0 +1,411 @@
++++
+title = "strusWebService"
++++
+
+ <div class="reveal">
+
+ <!-- Any section element inside of this container is displayed as a slide -->
+ <div class="slides">
+ <section>
+ <h1>Strus - Web Service</h1>
+ <p>
+ <small>Created by <a href="http://www.andreasbaumann.cc">Andreas Baumann</a></small>
+ </p>
+ <p>
+ <small><a href="http://www.andreasbaumann.cc/slide/strus-webservice">http://www.andreasbaumann.cc/slide/strus-webservice</a></small>
+ </p>
+ <p><small>(C)2015/2016</small></p>
+ </section>
+
+ <section>
+ <h2>Outline</h2>
+ <ul>
+ <li>Have a web service, language independent, for search.</li>
+ <li>The software to the vision exists, it's called <b>Elasticsearch.</b></li>
+ <li>Based on Lucene, so we do the same with Strus</li>
+ <li>Currently there is a Java API which uses this service</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Strus web service</h2>
+ <ul>
+ <li>uses JSON and HTTP GET/POST</li>
+ <li>implemented using <a href="http://cppcms.com/wikipp/en/page/main">CppCMS</a></li>
+ <li>uses only the <a href="http://patrickfrey.github.io/strus/doc/doxygen/html/index.html">Strus core API</a> currently</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Design rationales</h2>
+ <ul>
+ <li>standard technology (HTTP, JSON)</li>
+ <li>CRUD (all basic functions exists for all classes)</lib>
+ <li>proxyable and securable</li>
+ <li>zero-configuration</li>
+ <li>scalable</li>
+ <li>C++</li>
+ <li>MPL v2</li>
+ <li>runs on Linux, OSX, FreeBSD</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Service functions</li>
+ <li>Index functions</li>
+ <li>Document functions</li>
+ <li>Query functions</li>
+ <li>Transactions</li>
+ <li>Statistics</li>
+ <li>Introspection and Configuration</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Manipulate indexes:
+ <pre><code class="hljs" data-trim contenteditable>
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/index/create/A
+'-d { "params" : { } }'
+
+{"result":"ok"}
+
+curl -XPOST http://localhost:8080/strus/index/delete/A
+{"result":"ok"}
+
+curl -XPOST http://localhost:8080/strus/index/exists/A
+{"exists":false,"result":"ok"}
+
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Insert document:
+ <pre><code class="hljs" data-trim contenteditable>
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/document/insert/A
+-d
+{ "doc" : { "docid" : "doc3",
+ "attributes" : [
+ { "key" : "title", "value" : "This is a Hello World Document" },
+ { "key" : "attr1", "value" : "val1" },
+ { "key" : "attr2", "value" : "val2" } ],
+ "metadata" : [
+ { "key" : "doclen", "value" : 23773 }, { "key" : "docweight", "value" : 3.1415 } ],
+ "forward" : [
+ { "type" : "word", "value" : "Hello", "pos": 1 },
+ { "type" : "word", "value" : "World", "pos" : 2 } ],
+ "search" : [
+ { "type" : "Word", "value" : "hello", "pos": 1 },
+ { "type" : "word", "value" : "world", "pos" : 2 } ] }
+}
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Query:
+ <pre><code class="hljs" data-trim contenteditable>
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/query/A
+-d
+{ "query": {
+ "first_rank": 0,
+ "nof_ranks": 20,
+ "weighting": {
+ "scheme": {
+ "name": "bm25",
+ "params": [
+ {
+ "key": "b",
+ "value": 0.75
+ },
+ {
+ "key": "k1",
+ "value": 1.0001
+ },
+ {
+ "key": "avgdoclen",
+ "value": 11943
+ }
+ ]
+ }
+ },
+ "summarizer": [
+ {
+ "attribute": "attribute",
+ "name": "attribute",
+ "params": [
+ {
+ "key": "name",
+ "value": "docid"
+ }
+ ]
+ }
+ ],
+ "features": [
+ {
+ "name": "feat",
+ "value": {
+ "term": {
+ "type": "word",
+ "value": "hello"
+ }
+ },
+ "weight": 1
+ },
+ {
+ "name": "sel",
+ "value": {
+ "expression": {
+ "operator": "union",
+ "range": 0,
+ "cardinality": 0,
+ "terms": [
+ {
+ "term": {
+ "type": "word",
+ "value": "hello"
+ }
+ }
+ ]
+ }
+ },
+ "weight": 1
+ }
+ ],
+ "select": [
+ "sel"
+ ]
+}
+
+{
+ "execution_time": 0.000983791,
+ "ranklist": {
+ "documents_ranked": 1,
+ "documents_visited": 1,
+ "passes_evaluated": 0,
+ "ranks": [
+ {
+ "attributes": [
+ {
+ "key": "docid",
+ "value": "doc3"
+ }
+ ],
+ "docno": 1,
+ "weight": 0
+ }
+ ]
+ },
+ "result": "ok"
+}
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Transactions:
+ <pre><code class="hljs" data-trim contenteditable>
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/transaction/begin/A/T1
+
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/document/insert/A
+-d
+{ "transaction" : { "id" : "T1" },
+ "doc" : { "docid" : "doc1",
+ ...
+}
+
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/transaction/commit/A/T1
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Introspection (document):
+ <pre><code class="hljs" data-trim contenteditable>
+curl -XPOST -H 'Content-Type: application/json'
+http://localhost:8080/strus/document/get/A/doc3
+
+{
+ "doc": {
+ "attributes": [
+ {
+ "key": "attr1",
+ "value": "val1"
+ },
+ {
+ "key": "attr2",
+ "value": "val2"
+ },
+ {
+ "key": "docid",
+ "value": "doc3"
+ },
+ {
+ "key": "title",
+ "value": "This is a Hello World Document"
+ }
+ ],
+ "docno": 1,
+ "forward": [
+ {
+ "pos": 1,
+ "type": "word",
+ "value": "Hello"
+ },
+ {
+ "pos": 2,
+ "type": "word",
+ "value": "World"
+ }
+ ],
+ "metadata": [
+ {
+ "key": "docweight",
+ "value": 3.141499996185303
+ },
+ {
+ "key": "doclen",
+ "value": 23773
+ },
+ {
+ "key": "date",
+ "value": 0
+ }
+ ],
+ "search": [
+ {
+ "pos": 1,
+ "type": "word",
+ "value": "hello"
+ },
+ {
+ "pos": 2,
+ "type": "word",
+ "value": "world"
+ }
+ ]
+ },
+ "execution_time": 0.00028157,
+ "result": "ok"
+}
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Statistics and introspection (index):
+ <pre><code class="hljs" data-trim contenteditable>
+curl http://localhost:8080/strus/index/stats/A
+
+{"result":"ok","stats":{"nof_docs":1}}
+
+curl http://localhost:8080/strus/index/config/A
+
+{"config":{
+ "attributes":["attr1","attr2","docid","title"],
+ "metadata":[{"name":"date","type":"UInt16"},{"name":"doclen","type":"UInt16"},{"name":"docweight","type":"Float32"}],
+ "types":["word"]},
+"result":"ok"}
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Protocol</h2>
+ <ul>
+ <li>Statistics and introspection (system):
+ <pre><code class="hljs" data-trim contenteditable>
+curl http://localhost:8080/strus/config
+{"config":{
+ "posting_join_operators":[
+ "chain","chain_struct","contains","diff","inrange","inrange_struct","intersect","pred","sequence","sequence_struct","succ","union","within","within_struct"],
+ "summarizer_functions":[
+ "accuvariable","attribute","matchphrase","matchpos","matchvariables","metadata"],
+ "weighting_funtions":[
+ "bm25","formula","metadata","td","tf"]},
+"result":"ok"}
+
+ ...
+ "weighting_functions": [
+ {
+ "description": "Calculate the document weight with the weighting scheme \"BM25\"",
+ "name": "bm25",
+ "parameter": [
+ {
+ "description": "defines the query features to weight",
+ "name": "match",
+ "type": "feature"
+ },
+ {
+ "description": "parameter of the BM25 weighting scheme",
+ "name": "k1",
+ "type": "numeric"
+ },
+ ...
+ </code></pre>
+ </li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Strus web service</h2>
+ <h3>Links</h3>
+ <ul>
+ <li><a href="http://github.com/patrickfrey/strusWebService">http://github.com/patrickfrey/strusWebService</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Java API</h2>
+ <ul>
+ <li>Uses latest Java 1.8 (aka requires Java 1.8)</li>
+ <li>Uses Jackson for POJO serialization from/to JSON</li>
+ <li>uses javax.ws.rs.client web service classes for HTTP</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Java API</h2>
+ <p><b>Note:</b> dead, no longer maintained or developed!!</p>
+ <h3>Links</h3>
+ <ul>
+ <li><a href="http://github.com/Eurospider/strusJavaAPI">http://github.com/Eurospider/strusJavaAPI</a></li>
+ <li><a href="http://eurospider.github.io/strusJavaApi/apidocs/index.html">JavaDoc</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Todos and future</h2>
+ <ul>
+ <li>support all functions from all strus APIs, not only small part of query and storage interface</li>
+ <li>reimplementation (C++11, alternatives to cppcms?, HTTP/2.0 support? using new strusBindings)</li>
+ </ul>
+ </section>
+ </div>
+ </div>
diff --git a/content/software/OpenBSD_firewall.md b/content/software/OpenBSD_firewall.md
index a03ec00..baa9794 100644
--- a/content/software/OpenBSD_firewall.md
+++ b/content/software/OpenBSD_firewall.md
@@ -8,15 +8,15 @@ description = "OpenBSD firewall via scripts"
Earlier versions of this project were used at Eurospider by Mihai Barbos (https://github.com/mbarbos)
to build corporate-style firewalls with Portwell hardware.
-Newer versions run on Soekris hardware now.
+It ran on a Soekris net6501 for 4 years.
-I merely collected the ideas and updated them to new versions of OpenBSD and cleaned up the repository a little bit. :-)
+Newer versions run on a Network LES of Thomas Krenn now.
-And I'm using it at home.
+I merely collected the ideas and updated them to new versions of OpenBSD and cleaned up the repository a little bit. :-)
-## Github
+And I'm using it at home on an Alix 2D.13.
-The old unsupported version can still be found on https://github.com/Eurospider/OpenBSD-firewall.
+## Git
Further development happens on git://git.andreasbaumann.cc/OpenBSD-firewall.git
or http://git.andreasbaumann.cc/cgit/OpenBSD-firewall/.
@@ -51,11 +51,57 @@ or remotely (after booting from floppy dongle or from hard disk):
## News
+14.4.2024:
+
+ updated to OpenBSD 7.5
+
+19.10.2023:
+
+ updated to OpenBSD 7.4
+
+20.4.2023:
+
+ updated to OpenBSD 7.3
+
+22.10.2022:
+
+ updated to OpenBSD 7.2
+
+1.5.2022:
+
+ updated to OpenBSD 7.1
+
+24.10.2021:
+
+ updated to OpenBSD 7.0
+
+3.6.2021:
+
+ updated to OpenBSD 6.9
+
+22.10.2020:
+
+ updated to OpenBSD 6.8
+
+5.6.2020:
+
+ updated to OpenBSD 6.7
+
+20.10.2019:
+
+ updated to OpenBSD 6.6
+
+11.05.2019:
+
+ updated to OpenBSD 6.5
+
+28.10.2018:
+
+ updated to OpenBSD 6.4
+
06.05.2018:
- The firewall at Eurospider has not been updated in years and I'm fed up with
- Github and the world in general, so I moved the repo and abandoned the old
- development area on Github.
+ moved repository from Github to a local repository.
15.04.2018:
@@ -127,11 +173,13 @@ At Eurospider we had Portwell NAR-2054 (3 and 5 ethernet port versions),
some have VGA ports and USBs, others only COMs, so make sure we always
get boot output on COM.
-Now at Eurospider we run it on a Soekris net6501, but I'm not going to
-update and test that one anymore.
+It ran on a Soekris net6501 for 4 years, then the Soekris died.
+
+Newer versions run on a Network LES of Thomas Krenn now.
At home I'm running it on an ALIX.2D13 with 3 LAN ports and a WLAN card.
-VirtualBox build and test
+
+## VirtualBox build and test
Create a VMDK wrapper for the disk image built with 'build.sh firewall-test':
diff --git a/content/software/linux_packaging.md b/content/software/linux_packaging.md
index e6bd7cc..805aa2c 100644
--- a/content/software/linux_packaging.md
+++ b/content/software/linux_packaging.md
@@ -20,7 +20,7 @@ I stopped to maintain the CRUX packages.
I'm still maintaing some ARCH Linux packages, mainly things I need for
personal hacking.
-See my [ARCH packages](http://aur.archlinux.org/packages.php?SeB=m&K=andreas_baumann).
+See my [ARCH packages](https://aur.archlinux.org/packages?O=0&SeB=M&K=andreas_baumann&outdated=&SB=p&SO=d&PP=50).
I'm also taking part in the [Archlinux32](https://www.archlinux32.org) project,
an effort to keep 32-bit Intel alive for Archlinux.
diff --git a/content/software/nagios_plugin_curl.md b/content/software/nagios_plugin_curl.md
index bd83c2c..1867b9f 100644
--- a/content/software/nagios_plugin_curl.md
+++ b/content/software/nagios_plugin_curl.md
@@ -3,17 +3,15 @@ title = "Nagios Curl Plugin"
description = "a [Nagios](http://www.nagios.org) plugin replacing check_http"
+++
-In my job I'm sometimes the deputy of the system administrator.
-Using nagios/zabbix/SNMP for monitoring I needed a decent plugin
-for Nagios to do HTTP alive checks. The standard one had some problems
+In my job I'm taking care of a monitoring system using nagios.
+For monitoring web sites I needed a decent plugin for Nagios to do
+HTTP(s) alive checks. The standard 'check_http' plugin had some problems
mainly with chunked transfer encoding, thus I hacked a plugin using the
excellent [libCurl library](http://curl.haxx.se).
Further development goes on as 'check_curl' in
-[monitoring-plugins](https://github.com/monitoring-plugins/monitoring-plugins)
-in branch
-feature_check_curl. If you want help out testing or developing it
-should happen there.
+[monitoring-plugins](https://github.com/monitoring-plugins/monitoring-plugins).
+If you want help out testing or developing it should happen there.
An old archived version of the plugin can be found at
http://git.andreasbaumann.cc/cgit/nagios-plugin-curl/.
diff --git a/content/toolbox/_index.md b/content/toolbox/_index.md
index 5b45780..1c6b78c 100644
--- a/content/toolbox/_index.md
+++ b/content/toolbox/_index.md
@@ -13,8 +13,10 @@ Some things I found to be useful for daily programming.
I use mainly the memory checker and the profiler.
* [KCachegrind](https://kcachegrind.github.io/html/Home.html): graphical
profiler presenting runs of valgrind performance checks in a nice way.
-* [xxdiff](http://furius.ca/xxdiff/): 2 and 3-way graphical diff tool,
+* [xxdiff](https://github.com/blais/xxdiff/): 2 and 3-way graphical diff tool,
I use it because of nostalgia (aka: I got used to it).
+* [entr](http://eradman.com/entrproject/): for executing a command on
+ changed files, e.g. make.
## C Programming
@@ -24,7 +26,9 @@ Some things I found to be useful for daily programming.
## Database Modelling
* [dbmodel](http://oxygene.sk/projects/dbmodel/): a very neat
- database modeller with PDF and image export.
+ database modeller with PDF and image export. (For Qt5 there
+ are fixed versions at http://git.andreasbaumann.cc/cgit/dbmodel/?h=qt5,
+ branch 'qt5' or https://git.eckner.net/Erich/dbmodel/)
## Data processing
@@ -35,9 +39,6 @@ Some things I found to be useful for daily programming.
## Infrastructure
-* [openSUSE Build Service](https://build.opensuse.org/): for building
- release packages in the cloud.
-* [Travis CI](http://travis-ci.org/): for continuous integration on Mac OSX.
* Using [libvirtd](http://libvirt.org) now instead of VirtualBox
(sorry, Oracle). Main reason: it's still a little bit un-ready round
the edges but hey, it's really open source. :-)
@@ -60,21 +61,61 @@ Some things I found to be useful for daily programming.
## Other
-* [Ion3](http://tuomov.iki.fi/software/): tiling window manager with
+* [Ion3](http://tuomov.iki.fi/software/ion/): tiling window manager with
strong keyboard and Lua scripting support. Sadly the original author
got into fights with the open source community :-(
- I'm currently using the fork [Notion](http://notion.sourceforge.net/).
- Read [http://raboof.github.io/notion/tour/](http://raboof.github.io/notion/tour/)
+ I'm currently using the fork [Notion](https://sourceforge.net/projects/notion/).
+ Read [http://raboof.github.io/notion/](http://raboof.github.io/notion/)
if you want to learn how to use such a window manager.
* [Joe](http://en.wikipedia.org/wiki/Joe's_Own_Editor): my editor for
- all quick editing jobs. Having used a lot of Wordstar in my youth,
- **jstar** is the editor I can't get rid of in my brain. :-)
+ all quick editing jobs. Having used a lot of Wordstar and Turbo Pascal IDEs
+ in my youth, **jstar** is the editor I can't get rid of in my brain. :-)
* [meh](http://www.johnhawthorn.com/meh/): as fast and easy an image
- viewer can possibly get.
+ viewer can possibly get. I use a fork which adds QOI support (see
+ https://github.com/andreasbaumann/meh/tree/qoi)
* [MuPDF](http://www.mupdf.com/): an equally fast PDF/XPS viewer.
* [Trojitá](https://en.wikipedia.org/wiki/Trojit%C3%A1): a simplistic
and really fast mail reader for IMAP accounts. For long-term archiving
- of email I'm using a combination of [OfflineIMAP](http://www.offlineimap.org)
- and good old [Mutt](http://mutt.org).
-* [Seamonkey](http://www.seamonkey-project.org/): back to old SeaMonkey,
- fast, no clue what they did to Firefox to make it so slow.
+ of email I'm using [Mutt](http://mutt.org) with POP3 and a maildir
+ directory (proved to be extremely stable over time).
+* [Luakit](https://luakit.github.io/): webkit-based browser, highly customizable
+ with Lua scripting
+* [Palemoon](https://www.palemoon.org): derived from Firefox, uses much much less
+ resources than Chromium or modern Firefox while still supporting almost everything
+ I need from a web browser.
+* [irssi](https://irssi.org/): for chatting (terminal)
+* [newsboat](https://newsboat.org/): a RSS feed reader looking like mutt
+ (I'm using the old pure-C++/non-Rust version I forked as
+ [newsboat-og](https://github.com/andreasbaumann/newsboat-og))
+* [Wordgrinder](https://cowlark.com/wordgrinder/): really nice text editor
+ if actually all you want to do is writting some text
+* [Suckless](https://suckless.org/): pretty much every software there is
+ 10 times smaller and easier to use than whatever makes up the default
+ Linux user land. I'm a big fan of it.. it only should be the standard
+ on every Linux system.
+* [Ripcord](https://cancel.fm/ripcord/): way faster alternative to
+ Discord (and yes, I also pay for software - Slack), no video capabilities
+ though, just audio and chat but that's usually all I need. The Electron
+ based Discord and Slack are just so unbearably slow, if I need that
+ experience I can as well start the browser version.
+* [Hugo](https://gohugo.io/): static web page generator for all kind of
+ web pages.
+
+## Deprecated
+
+The following tools I used in the past, but not anymore:
+
+* [Seamonkey](http://www.seamonkey-project.org/): Seamonkey slowly gets
+ all the "features" of Mozilla (slow, Rust build problems, out-of-memory
+ when building and linking). So I lost interest in it. I replaced it with
+ Palemoon/Luakit and mutt/trojita, irssi, etc..
+* [Librewolf](https://librewolf-community.gitlab.io/): fork of Firefox,
+ without all the built-in stuff from Mozilla nobody needs or asked for.
+ I'm no longer using it, as compiling it is too much of a hazzle with
+ frequent Rust incompatibilities..
+* [openSUSE Build Service](https://build.opensuse.org/): for building
+ release packages in the cloud. They deleted my home project and I'm
+ no longer doing software development, really.
+* [Travis CI](http://travis-ci.org/): for continuous integration on Mac OSX.
+ Don't care about building on Apple anymore due to all kind of reasons..
+