Feb 062026
 

Delta Electronics DPS-420CV A REV.0 logoWell, last night I got up to take a leak and heard my VFI UPS unit beep again (the batteries are pretty dead, I just didn’t take care about it by now), so I walk past the ancient IBM server that hosts this place to switch the alarm off. And as I walk back, I notice something. This machine – as [previously described] – features a maximum of three power supplies for redundancy and load balancing. Each unit has two LEDs to indicate whether everything is working fine (green light) or whether something is wrong (orange light). One is for indicating whether the AC input is fine and the other indicates whether the DC outputs are okay. I’ve had two units die on me over the decades that this machine has been running, and last night, in the 30th year of operation – there’ll be an anniversary soon – it seems another one bit the dust. In this case, it was just completely off, no lights lit at all.

I unplugged it and plugged it back in just to see what would happen. Both LEDs went on one after another – like it should be – but the power supply then immediately went offline after less than a second. Well, that didn’t look too good, so I removed it while the server was running (as it’s the hotplug version) and replaced it with another unit, given I have several replacement units in stock.

Broken Delta Electronics DPS-420CV A REV.0

Another broken Delta Electronics DPS-420CV A REV.0 (I didn’t bother to clean it, as it’s going to enter the recycling chain soon enough, click to enlarge)

So while it was in the middle of the night, I still fetched a replacement unit and swapped them, it’s just four screws you have to remove after all, and the “new” unit appears to work just fine:

Back online

Back online (The top one was broken, click to enlarge)

After decades of experience with computer hardware I do consider power supplies consumables, so it’s kinda fine I guess. Those things have been running for almost 30 years after all, and I put them under pretty high load for at least 20 years.

Thank god I’ve collected all kinds of replacement parts for almost 20 years from all over the planet. Wouldn’t be easy these days anymore…

Dec 152025
 
Google FLoC logo

Now, before you start reading this, I’ll just tell you up front: This is all old news and likely no longer relevant to you. Or at least not for long anymore. However, I still think it is worth mentioning as a similar technology might show up in the future, and if it does, it will likely not be less dangerous than [FLoC] or its successor, the [Topics API], which I learned about from [this blog post at saptalks.blog]. So what is this stuff? Well, since third-party cookies have basically been thrown out the window when it comes to tracking users on the web, Google came up with a new technology woven directly into their Chrome browser to replace those cookies. The idea is that websites run sandboxed within your Chrome browser, but the browser itself would do the tracking and data collection on the client side, then communicate the collected data to companies to do targeted advertising based on your personal browsing profile. Somehow the browser is supposed to exclude “sensitive” information, but I doubt that this would’ve worked all that well.

This is bad for obvious reasons, potentially even more so than third-party cookies ever were. Now that the functionality is woven into the web browser itself, there’s no easy escape left (other than using Mozilla Firefox or Apple Safari instead). But let us face it: Google Chrome has a market share of around 70% by now! Safari comes in as a distant second with around 15% market share, which makes it pretty clear how insignificant the rest is – sadly including Firefox.

In any case, FLoC has been phased out and its successor, the Topics API is [scheduled to be removed] from future versions of Google Chrome as well. I guess the backlash was pretty intense.

But the technology is still there for now, so I’ve modified my web servers’ configuration to transmit a HTTP header that switches FLoC off in your Chrome browser (should you be using it), at least for most web services on this server, including this blog.

The blog post I linked above shows you how to do this for an nginx web server, but this is possible with the good old Apache server as well. Make sure you have the module mod_headers.so loaded, and add this to your httpd.conf:

<IfModule mod_headers.c>
  Header always set Permissions-Policy "interest-cohort=(), browsing-topics=()"
</IfModule>

Restart your Apache server and you’re done. The header submission can be tested with a wide variety of tools, one being [curl], in my case by running $ curl -I http://www.xin.at:

HTTP/1.1 200 OK
Date: Mon, 15 Dec 2025 06:14:00 GMT
Server: Apache
Permissions-Policy: interest-cohort=(), browsing-topics=()
Last-Modified: Sat, 27 Aug 2022 10:53:28 GMT
ETag: "22000000001684-1464-5e736d73d881c"
Accept-Ranges: bytes
Content-Length: 5220
Content-Type: text/html; charset=UTF-8

With this, your Chrome browser would not leak data about your interactions with or comments on wp.xin.at to any advertising company. I guess I’ll have to stay vigilant about stuff like this in the future as well! Also, if you have to use or want to keep using Google Chrome, it might be a good idea to keep it up to date, not just for security reasons, but also because that way you’ll get rid of the Topics API as soon as possible.

At the time of writing the current major version of Chrome is 143. Deprecation of the Topics API should start with version 144 with removal being scheduled for version 150.

Oct 282025
 
Renault R5 logo

0. Introduction

Table of contents:

  1. Introduction
  2. My personal car history
  3. The Renault 5
  4. Reasoning and some upsides
  5. Downsides
  6. Manufacturing

 

 

 

 

 

Let me present you with another post about stuff that is entirely unrelated to this blog. The last one was about a weird phone at least, but the one before it was about food of all things, I mean… So why not. This time it’s about my new car. And I don’t even know a lot about cars, I mean, I can refill engine oil and change light bulbs, but it pretty much ends there.

In any case, I’d been looking at the option of finally jumping in at the deep end by switching from combustion engine cars to a BEV, or battery-powered electric vehicle. At first I thought it would be a good idea to buy a demo car, a bit cheaper than a new one, but not a lot of kilometrage on it. I started looking for a Renault Zoe, because that’s a model that people have already collected lots of experience with (good and bad, but at least you’d know what to expect). Since I love warm colours I’d kept tabs on a model that looked exactly like this one and was in stock at a local car dealership:

Renault Zoe

Renault Zoe (click to enlarge)

But the problem was: They put it up for sale at a price of 34,999€. And that was just way too much in my opinion, especially since it wasn’t a fully equipped version, and the entire Zoe series was basically end-of-life as well. That would’ve cost me all my available cash and on top of that would’ve put my bank account into 4-digit reds at the time. That was in the beginning of 2024.

So I decided to wait and wait and wait… That’s when a (very) Francophile colleague of mine came into the office one day, evidently amused as he was telling us that “The Renault 5 is coming back and it’s gonna be an electric car!”. To my embarrassment (please forgive my ignorance!) I didn’t even know the classic Renault 5, even though it was an extremely successful car with over 9 million units produced from the 70s onwards into the early 90s. Well, I never paid much attention to classic cars, as they used to be more tool than passion for me. When said Zoe’s price had dropped to just 14,999€, it was easily cheap enough in my opinion. But by then I had lost all interest in it.

1. My personal car history

The reason for that is that when I looked the Renault 5 up on the web I fell in love pretty much immediately, with its looks and its lovely attention to detail! Especially after trying the online configurator! But it’s not all just looks as I’ll explain in a minute. Before showing you my biggest toy however, here’s a history of what I’ve driven before:

  • A 1997 Volkswagen Golf 3, 75 hp in dark blue with a manual transmission as used to be very common in Europe. My mom gave it to me when I was around 20 years old, because she had stopped driving herself.
  • A 1997 Mazda 323 with 73 hp, also a manual and in flashy red. I liked that car, but this specific model had extreme rust issues, so it didn’t live long. Bought from a good old friend.
  • 1997 again: A Volkswagen Passat 3BG turbo-charged Diesel, 110 hp in dark green, manual transmission again. Fun and cheap to drive, but very dirty, carcinogenic exhaust fumes. Bought from another good friend who sold it to me for dirt cheap, for just 1,650€!
  • A 2011 Dacia Duster in boring black, which I absolutely disliked. Cheap, soulless trash in my opinion. Plus I dislike SUVs. But the Passat was starting to break apart at just short of 400,000 km, and an uncle offered me his old Duster, so yeah. Manual again, came with a 110 hp flexible engine that could combust both petrol and ethanol.

2. The Renault 5

I went for a test drive in the last week of December, and when I returned the demo car, I just sat down at the sales guys’ desk, paused for a while, and then just told him: “Well, guess we’re gonna order a Renault 5.” to which he responded with a brief “Okay!”.

A bit over 2 months later, it arrived!

And here’s a snapshot of it (sorry for the poles being in the way):

Snapshot of my Renault 5

Snapshot of my Renault 5 that I’ve been driving since March 2025 (click to enlarge)

Usually, posting cars without retouching the license plate on the Internet is highly unadvisable. In this case I could not resist however, because I just wanted to show off the vanity plate. ;) Fits the car all too well!

This is the “large” version (if you can call it that) with 150 hp, 52 kWh battery in a yellow paint that has some mild “glitter” effect when exposed to sunlight. That plus the “twinkle” headlights give it a pretty cutesy look, whereas the rims and the red / black / yellow colour combination give it a bit of a sporty touch, or so I think at least.

Oh, by the way, the illuminated Renault logo you can see in the posts logo above isn’t actually there. Only the [concept car] had that. Too bad. ;)

I don’t think I have to talk all that much about the car’s technical features. Anyone interested in this model will probably have seen Youtube videos about it already anyway. So I’ll try to keep it minimal. Here come some photos of the inside:

 

At least a few technical things: The seats feel awesome, hold you in quite well. The fabrics are nice to the touch. Most importantly though, it’s got loads of electromechanical buttons and wheels, so while actually driving you barely ever need to do anything on the touch screen. This I consider critical, because I can use mechanical buttons almost blindly, due to the haptic feedback. But using a touch screen is extremely distracting. For safety’s sake I’m supposed to keep my eyes on the road, not on some display in my car!

And here’s a closeup of that little insert box in the centre console, which is interesting, because like many of the optional parts you can order, it is not die cast, it’s actually 3D printed:

Optional insert cup with a "5" logo

Optional insert cup with a “5” logo (click to enlarge)

It blocks the cars’ front cup holders though and doesn’t offer much storage space. So I got it for looks mostly. ;)

What I haven’t made photos of yet are two more upgrades I got, so here I went with pictures from the Internet (too lazy to go take my own, heh):

 

The default shroud of the gear selector (Renault calls it “e-Pop shifter”, because marketing) is just black. This one I got here is an optional part called the “numbeR5” shifter. Supposedly this thing is meant to resemble a lipstick. I wouldn’t have seen it as such if I weren’t told so, but there you go. There are more versions of this, e.g. one with a French flag. You can find them all in [Renaults’ options brochure]. The cushion is a Chinese 3rd-party memory foam thingy that isn’t too high quality. But I wanted to have cupholders after all plus a comfier centre console.

The cupholders of the cushion are cheaply attached using velcro strips, but they’re neatly positioned, because with this solution, both passengers in the front and in the rear can use them. One could also keep the cupholders in the centre console as they are, which would give all passengers their own individual cupholders. The red colour could’ve been a bit flashier, but okay. Also the bags on the side are pretty limited and can maybe be used to hold few coins, but not much more. You can find that thing on [Amazon].

3. Reasoning and some upsides

And now, for my reasons for going electric and also as to why I got this particular car:

  • The cheap Dacia Duster had started breaking apart after just 80,000 km, so I had to do something.
  • It’s electric and I was curious about the new tech and its properties, plus I wanted to stop burning fossil fuel anyway.
  • A lot of instant torque, which is fun.
  • A large part of the car (the fabrics and plastics, mostly) are made from recycled bottles, which I absolutely welcome!
  • Aside from the entertainment system and its TSMC-made chips and I guess displays, literally everything in this car is made in France and not in China! Even the engine! Since August 2025 this holds true even for the battery! That’s a massive plus!
  • Most parts are even made within a 300 km radius, which reduces logistics costs and further reduces overall exhaust fume production.
  • No smells of burnt fuel or oil inside of the car (had that a lot in my Passat), runs very quiet and you can feel no engine vibration at all. Some people dislike this, but I love it.
  • Renault plans to source its Lithium from within the EU by the end of 2026, which I like as well. Currently, the Lithium for the batteries is still sourced in China as far as I know.
  • It’s got that cool 5-step charge indicator made of an illuminated “5” on the bonnet, making it asymmetrical!
  • The battery should last for about 5,000 charging cycles. For me that means 96 freaking years! The car will be a pile of rust long before the battery will die.
  • Also, this Renault battery has an emergency fire extinguishing system built into the cells. Gives you a feeling of additional safety. Update 2025-11-06: This is only meant for the fire brigade to be able to extinguish batteries on fire. So it’s not an automatic system or anything like that, it’s basically just a hatch that gives them a way to connect a hose or something like that.
  • It has a configurable “safety perso” mode that’s just a double-click of a button away! Turns off all the beeping when driving e.g. 32 km/h in a zone with a speed limit of 30, etc.
  • I mostly drive short distances, so charging should not be an issue (will try long distances as well though).
  • Supposedly lower total cost of ownership with time, as electrical energy is cheaper than petrol and Diesel per km.
  • My “big” (*cough*…) version comes with a mass of 1,45 tonnes, which is really not much for a BEV! Nothing like the 2+ tonne heavyweights.
  • Pretty sporty, premium multi-link independent wheel suspension for all four wheels which is supposedly very unusual for cars in this class and price segment.
  • Finally, I just absolutely love the looks of this car, it’s just a joy to look at it, adorable whether outside or inside! And it’s got a lot of little easter eggs to discover over time. ;) Plus, I love the yellow / red / black colour combination, exactly my thing with those optional red stripes and “5” logo on the roof!

It’s insane that even the automotive chips (for which we don’t need advanced process nodes) are made by ST Microelectronics right here in Europe! That’s the guys who used to manufacture those PowerVR chips for Kyro and Kyro 2 graphics cards a long time ago, and they have a factory in France and a few more elsewhere in Europe. The chips are probably made on a 28 nanometres process node I presume.

As mentioned, the multimedia system is based on Taiwanese chips and I suppose display panels. Yeah okay, we have two AIs installed, an ARM processor, DRAM and flash built in, etc. We don’t have the factories for those chips in Europe yet, and we probably won’t for a long while to come, so that’s a small minus. Nothing anyone can do about that however. The software being Google Android Automotive also means that this part comes from the USA, not Europe.

What I got is the “Iconic Five” top end model, and with all the additional extras it cost me ≈34,450€. Sure, you can get many combustion engine cars for significantly less, but this price? For a product almost entirely manufactured in a European country? What the heck, count me in! Even though it took me about 10 years of saving up, I now had just enough money to cover that expense. Plus, it’s a leasing contract anyway, but I still insisted on theoretically being able to pay for it all in one shot. It’s just a tic of mine never to buy nor lease something that I don’t have the full amount of cash for.

Just out of curiosity I attempted to configure a Volkswagen Golf in a way that resembles my R5 configuration as closely as possible and that car ended up with a price of ≈33,420€. Sure, there’ll be some discounts at the dealerships, so maybe you can get it for ≈30,000 – 31,000 € or something. It’d be cheaper, but not by all that much.

4. Downsides

Let’s look at the downsides that come to mind in regards to BEVs and this specific car, at least in my opinion after more than half a year of it having become my daily driver:

  • Range, naturally. This is to be expected. In summer, it’s easy to reach over 300 km per charge starting with 80%, in winter this may drop below 200 km in worst case scenarios at sub-zero temperatures in °C.
  • With 100 kW DC, it charges from 20% – 80% in 30 minutes. With just 11 kW AC though (the most it can do on AC), it’s multiple hours. That’s okay, but of course, it’s not petrol / Diesel refueling speed, obviously.
  • Not everybody actually likes how quiet and vibration-free a BEV runs, even though I do.
  • Its Li-On NMC battery is pretty sensitive to environmental temperature. Runs at ~10 – 13 kWh/100 km for me in the summer, but skyrockets to 22 – 28 kWh/100 km when temperatures drop below 5°C. So its range isn’t good in cold climates. Preconditioning is important here to preheat the battery!
  • The car isn’t very aerodynamic. Renault sacrificed efficiency for style here. While I agree with that decision, it does have its drawbacks: Less range, especially on highways.
  • It’s limited to a maximum speed of 150 km/h. Doesn’t matter in my case, I mostly don’t go faster than 100 km/h, but this might bother some people, especially in countries with high or no speed limits on highways (e.g. Germany).
  • The multimedia system – it’s based on Google Android Automotive – is snappy and works pretty well, but there are minor bugs, such as the radio remaining silent in rare cases when powering up the car. Switching the input source back and forth fixes this, but yeah, it’s not entirely bug-free.
  • It’s boot isn’t all too large and it’s got no frunk either. Plus, you can have large people (say 1,90 metres or so) sit in the front and in the back, but it’ll be really uncomfortable for passengers on the back seats. With 2 × 1,75 metres it works, as long as the front seats aren’t lowered down too much, so people can still put their feet under the front seats.
  • No one-pedal driving yet. Should come with future revisions, or so Renault claims.
  • It features four steering column levers. A light control lever on the left, and the gear selector, wiper and media system levers on the right. A lot of people don’t like that setup. I totally don’t mind it though and adapted to them really quickly.
  • The basic rear-view camera (not the 360° version) has a really low resolution, feels like a webcam from the year 2000 or something. I mean, it does what it’s supposed to do, but a few more pixels would be nice.
  • Renault’s “Reno” AI assistant is… ugh, well, let’s just say I disabled it permanently after it started nagging me to set it up with the setup procedure never working.

I myself don’t mind the AC charging time, because my employer has AC chargers right in front of the building I’m working in. No-brainer. The energy ain’t free, but at 28 ¢/kWh it’s reasonably priced. For the full 52 kWh that’d result in 14.56€, much less than filling up a petrol- or Diesel-powered car. Right now, where I live, 40 litres of petrol or Diesel would cost around 60€ after all. Sure, you cover way more distance with that, but for that money I can fully charge the R5 over 4 times, which would result in an overall, realistic range of 1200 km for the same money! So the R5 is cheaper per km.

Let’s compare it to a rather extreme Diesel-powered car, my old VW passat, that I even managed to push well beyond 1000 kilometres of range. Under optimal weather conditions, I managed to push it down to 4.5 L/100 km. At current prices, that’d be 6.75 €/100 km.

Let’s assume 12 kWh/100 km for the R5: 12 kWh × 28 ¢ = 336 ¢ or 3.36 €/100 km. Even in icy winter conditions, where you’d end up with ≈20 kWh/100 km, it’d cost you 5.60€ / 100 km, still less than the very best efficieny which that old turbo diesel could deliver in terms of distance per money. And you’d save a bit more even, no engine oil required, and supposedly lower maintenance cost (though I’ll only really know after a few years will have passed).

Let’s assume a lifetime of 10 years. With my typical kilometrage of 10,000 km/year, that would mean (very rough estimate) about 6,750 € for the Diesel fuel of my Passat if I could drive it under optimal conditions all the time. For the R5, that’d be 3,360 €, so 3,390 € cheaper over 10 years. But please take that with a grain of salt, just to get some kind of idea. I didn’t even include inflation prognoses or additional costs here, just fuel versus electricity at current prices.

But even without the chargers of my employer, I could just charge while doing my weekly grocery shopping, as there are more than enough supermarkets around here that provide fast chargers. And they are mostly just sitting there, unused. I guess most people who drive BEVs nowadays have houses with photovoltaics and a wallbox installed (I don’t own a house). The adoption of BEVs by people who aren’t wealthier home owners seems to be beginning only about now. In any case, at least around here the required infrastructure is definitely there.

5. Manufacturing

Here are some renderings of the battery packs. I couldn’t find any actual photos of it, so yeah. Both were provided by Renault, but I assume the version on the right is likely to be closer to the real thing:

 

It’s a Lithium-Ion NMC (Nickel, Manganese, Cobalt) battery, so it still relies on some problematic materials, especially considering what Lithium mines look like today and what they do to the environment. Also, Cobalt and Nickel mining processes are supposedly pretty bad as well. I mentioned that Renault is planning to source the Lithium from within the EU soon, where they will have to stick to our much stricter environmental regulations, but I have to admit I don’t know about the other raw materials for the batteries.

Renault / Verkor battery gigafactory in Douai, northern France

The new Renault / Verkor battery gigafactory in Douai, northern France (click to enlarge)

Also, right off the assembly line, your typical BEV will have allegedly produced more CO2 than a combustion engine car. Does this still hold true for the Renault 5? I asked the [French version of our great machine gods], and it claimed that it’s likely producing less than any combustion car made in China. But it wasn’t perfectly certain, it just based that on the information that Renault has invested a lot in reducing the CO2 footprint of its factories.

What I heard is, that you’d have to ride your BEV for about 10,000 – 20,000 km to break even in comparison to a combustion engine car of the same class when it comes to overall COproduction. But if what “Le Chat” claims holds true, then you’d actually have saved some when having the car made for you already. But that’s info provided by a French AI about a French factory building French cars, so take that with a grain of salt.

But after like 20,000 km you just keep going without producing any CO2 for the rest of the vehicle’s lifetime. Also no [CO], no [NOx], no [benzene], no [CH2O], no [polycyclic aromatic hydrocarbons] and no soot, either. Less acidic rain, less cancer, less greenhouse effect (even though it’ll take decades to make an impact) and so on and so forth.

Sure, a single car doesn’t make a noticable difference, but still.

6. Driving the Renault 5 E-Tech

So how does the Renault 5 feel?

It’s pure fun! :) Some people even call it a slight “go-kart” feeling.

Granted, the steering wheel could put up more resistance, but the suspension is absolutely awesome and feels great. So do the seats and most of the mechanical buttons. Also, I configured the car with the higher-end Harman/Kardon audio system with a subwoofer under the boot, and boy… I will never ever cheap out on a car’s audio setup again!

I had to set it up a little using the audio mixer, because the basslines were eating up my mids, but a 20 – 30% reduction of the bass results in something I absolutely love: Clearly defined mids and smooth highs with no harshness with the lowest of the audible spectrum being specifically emphasised. I mean that part that you almost feel more than hear. Not many songs cover that very deep part of the audible spectrum, but those that do feel really wonderful with this setup! The frequency curve reminds me a little bit of my Beyerdynamic DT770 Pro headphones, even if that sounds like a strange comparison. So, very deep bass is really intense without eating up any other parts of a song, awesome!

Does it lack anything? Yes. I thought I wouldn’t need that 360° camera, assuming the simple rear-view one would suffice. But when I saw that the 360° camera actually has its images processed into a bird-view one with a model of the actual car (in its actual configuration with decals and all!) rendered into the picture, I regretted my decision quite a bit. That would’ve been many times better than my simple rear-view camera.

Also, there still are quite a few spots where it’s just hard plastic. With some surface structure to make it feel a bit better, but still. At least Renault was smart about it: Almost every spot you actually do touch on a regular basis feels high quality! Mh… minus the gear shift lever, maybe.

Almost final words: You can see that my reasoning here is mostly driven by emotion and ideology rather than practicality, and some of you might not like that all that much (going for BEV because climate-friendly, going for “Europe first” for geopolitical reasons, etc.), but that’s my current approach. Also: I could’ve taken better and more photos, my apologies for that. Laziness struck again! Rolling eyes smilie

In any case, more passion that tool this time around. ;)

Oct 272025
 
Unihertz logo

0. Introduction and background information

Let’s be honest up front: I love phones with physical keyboards. Like the following two which have been my daily drivers up until recently when it comes to the more modern Android phone and a much longer time ago when we’re talking about the Nokia:

A Nokia E72 and a Blackberry keyOne

A Nokia E72 and a Blackberry keyOne (click to enlarge)

Even the keyOne is already 9 years old by now and runs an Android 8.1 operating system, that has been end-of-life for ages already. At least the phone has no Spectre vulnerabilities, because it uses a slowish ARM processor that features a primitive, non-[speculative] [in-order execution pipeline], like the 486 and first Intel Pentium processors did.

Naturally, the Nokia is even older and was released in the year 2009, making it 16 years old by now. It looks more primitive, but with its Symbian S60 3rd Edition operating system, it is practically totally a smartphone already. It had an appstore, web browsers, email clients, banking apps, media player apps, all kinds of stuff that we know from Android and iOS.

But: The Blackberry and its Android 8.1 are slowly becoming more unusable, as many modern apps simply don’t support it’s aging platform. Many still do, but it’s getting worse. Plus, I somehow lost LTE connectivity (possibly because of the Android 8.0 -> 8.1 update), locking me into HSPA, so 3,5G. Then, our network operators collectively switched off all 3G tech, including HSPA. This left three options: GPRS/EDGE, LTE and 5G. My phone having lost LTE somehow and being too old for 5G was locked into EDGE!

Let me tell you something: In 2010, the Internet was pretty usable with EDGE, including web browsing. In 2025, with websites using monstrous JavaScript libraries, tons of stylesheets and really unintelligently compressed and sized images, it became mostly impossible. eMail, yeah, IRC maybe, but surfing the web? Forget it.

You’d be even worse off with the Nokia, which has an old Opera 12.0 Mobile web browser installed. Opera 12 (and its Presto engine) was one of the last browsers exclusively interpreting instead of natively compiling JavaScript to machine code. When Google came up with its Blink engine in Google Chrome and with it an actual machine code compiler, Opera quickly became obsolete (The current version is actually based on Google Chromium). This forced the Mozilla project to develop a similar compiler for their Firefox browser as well. Something Opera seemingly didn’t have the resources to do, which made the original company default (The current “Opera” is developed by a different, Chinese company).

This old browser can’t do modern cryptography, as it only supports the old TLS v1.0 protocol, old hashing algorithms and old ciphers. You can’t even load any modern websites at all. And even if you could in theory, it’d be way too slow to render the pages.

So I needed a new phone. But I still wanted a physical keyboard! And I got lucky: The Chinese company [Unihertz] had launched a [Kickstarter campaign] to fund their [Titan 2 smartphone]! And it looked very, very promising to me, so I decided to join up and help fund the phone, which was very successful! With a goal of HK $ 785,000 (around 87,000 €), it reached HK $ 16,358,594 in the end, or in other words: A bit more than 1.8 million €!

We can call that a success I suppose.

And last week, it arrived!

1. Meet the Unihertz Titan 2

Here it is:

 

It’s designed and made by a Chinese company, which I usually don’t like too much to be honest, but let’s face it: Modern smartphones are all “Made in China” anyway, so it doesn’t matter too much I guess, hoping that there at least won’t be any Chinese spyware installed on it. Can’t be sure of that though, so please keep that in mind!

The first surprise is the manufacturing quality. It feels really well-made, and the haptic feedback of the keyboard is leaps and bounds better than the ones on the Blackberry and the Nokia phones. I totally didn’t expect it to be so good! Aside from the mechanical part, the keyboard is also a capacitive input device, so you can use it for swiping and scrolling without having to touch the display. So you don’t have to clean it as often. Neat!

What else? You get a built-in, analogue FM radio with integrated antenna, which I like. Update 2025-11-06: Actually, this information is wrong! It does not have a built-in antenna, so the Titan 2 also relies on wired headphones being connected to become able to receive FM signals! End of update. Sadly though, there is no 2,5 mm headphone jack, so you have to use a bundled USB-C adaptor. That part is a bit meh. Also no waterproofing I suppose. I mean, the [unihertz.co.za] product page for the phone lists it as having been IP68-certified, but given that several other specifications on that site are just wrong (display resolution, battery capacity, amount of RAM, …) I guess that’s just a hoax or some mistake, because [unihertz.com] doesn’t mention any IP rating at all and their other specifications match my device perfectly.

What about cards? It has dual-SIM support, but there is no SD cardreader. So no extending your flash memory. It’s got way more than enough internal memory for my usecase though. Here are some specs:

  • ARM big.LITTLE CPU by MediaTek with 4 × 2,5 GHz and 4 × 2,0 GHz cores
  • 8 GiB of RAM
  • 500 GB of internal storage
  • A weird, quadratic display with a resolution of 1440×1440 pixels
  • An even weirder secondary display on the back for displaying small things, such as time and date
  • A huge battery with a whopping 5050 mAh of capacity (The Blackberry has a 3500 mAh one)
  • 5G support
  • They promise they’ll upgrade it at least to Android 17 (it’s currently running Android 15)

I was a bit worried about the width of the phone, but I can happily report that it does fit into my trouser pockets! I’m still using the clip-on case for protection though. Because, as usually the case, I didn’t manage to put the protective films onto the displays without air bubbles and dust particles caught under them, so I just took those off and threw them away.

And: How much does it cost? For the Kickstarter pledge it was just about 250 € including the old-fashioned clip-on case they offer you. The normal price for just the phone is quite a bit higher though: 400 € or USD $ 400 with  30 € / $ 30 for the optional case. Currently they sell the phone for a slightly discounted price of 380 € / USD $ 380, but that’s a time-limited offer. Still not all that pricey, given my Blackberry keyOne cost me about 650 €, while featuring a much lower quality keyboard and smaller battery.

I had my doubts about this thing, but after just a few hours of testing it, I decided to make it my new daily driver! Bye bye, Blackberry keyOne! :) It was nice using you, but… this is just way better! :)

Sep 142025
 
Ajitsuke Tamago logo

0. Introduction

Edit 2025-09-26: Typing & punctuation errors as well as some grammar mistakes and word repetitions corrected. Also: Phrasing improved and a few more logos added.

Some people still keep complaining that I’m not posting enough stuff recently. Like, interesting stuff. Yeah, I know, I’m not, because there just isn’t anything interesting happening around here right now! ;) So you shall get a new article that has nothing to do with what this weblog is about. Just because. Here you go:

Like probably many other people who weren’t used to cooking, I was… let’s say “encouraged” to try it during the COVID pandemic. Only getting Pizza and Kebab via delivery while being locked up at home got boring pretty quickly and instant meals aren’t very fulfilling in the long run either. Plus, that stuff just doesn’t taste good. Back in the day I used to find recipes kinda too vague to follow. As a tech guy I am used to very precise and highly specific manuals. Cooking recipes aren’t that, given it’s more art than science I suppose. Luckily, experience can fix that, and pretty quickly as well.

What follows comes in chronological order.

1. Simple Ramen

The first attempt was to make some simple Ramen. I chose this because I could use instant Ramen noodles and spices as a base to just upgrade a little, making them an easy starting point. All I added was set up a kombudashi broth (briefly boiled seaweed and fish flakes) and added the instant Ramen stuff and some simple toppings to that. The most complex part would be the Ajitsuke Tamago – marinated Ramen eggs. My marinade consists of soy sauce, Nihonshu (Sake), Hon Mirin, garlic, finely sliced ginger, and 1 – 2 pieces of star anise. Sometimes I mess up the soft-boiled eggs a little bit, but here are some successful results, this was the very first attempt:

 

For the next two attempts that I made two weeks apart from each other I omitted marinating the eggs. I don’t remember why exactly, maybe I was just too lazy or didn’t have the additional, Japanese ingredients at the ready:

 

2. A failed Pizza

The next thing was Pizza. But not normal, Italian Pizza, but a version that my late grandmother had created. It was nothing at all like that super-thin dough with but traces of toppings on top. She used yeast dough, so the result would be about 1 – 1½ cm thick. Then tomato paste and another cm of [Leberkäse] (there is no exact English translation for that) or even [Käseleberkäse]. And then the rest, so ham, cheese, olives, onions, paprika, etc.

Having a larger piece means you’d have to run around the block for the rest of the day to lose all those calories. ;)

This was a failure however, as I had made a critical mistake:

Pizza with failed dough

Pizza with failed dough (click to enlarge)

The mistake: When I put herbs into the freshly kneaded dough, I also added salt. That was before rising the dough. Hint: Salt kills yeast bacteria. Dead yeast bacteria aren’t particularily helpful when it comes to rising dough. It looks a bit as it should, but the result was still a catastrophe. The dough was ruined, so I only ate the toppings and threw the dough into the compost (as much as I hate throwing food away), it was an inedible, compact mass.

Well, mistakes were unavoidable I guess.

3. Fish

Sadly, I didn’t make photos of my attempts to fry bass and trout, even though that ended up rather well. In any case, for now let’s have some fish soup with lots of mashed tomatos, tomato paste, paprika and some Zander (that can barely be seen in the photo). This is a really simple dish to make, just boil the tomato juice, add herbs to your liking; Rosemary and a larger amount of thyme in my case. Also some salt and real, red Kampot pepper. The red, ripe variety has a (very!) slightly fruitier taste than green / black pepper, which is picked while still unripe. Don’t mistake red pepper with the pink peppercorns they put in pepper mixes, that’s from a different plant! Red pepper fits vegetables and especially fish very well. Or so I think at least:

Fish / tomato soup

Fish / tomato soup, looks utterly boring, but tastes rather good! (click to enlarge)

4. Meat

Ribeye meat logoThe next step had to be meat. I went for certified organic meat, with the first example being leg of lamb. I need to pick and prepare my meat carefully, as I suffer from quite a significant lack of saliva (long story). So swallowing very dry foods such as lean pork is very hard if not impossible in my case. Lamb on the other hand is pretty juicy. Also, I found some chanterelles in my granny’s freezer, which became the side dish together with an onion. Spices were salt, black pepper, mustard, the before-mentioned onion, thinly cut garlic and the obligatory thyme and rosemary. I didn’t go all out with the heat, so I had it set to ⅔, which seems to be getting me the best results. The chanterelles were fried separately, the onion together with the lamb:

Leg of lamb

Leg of lamb (click to enlarge)

I was shocked to see how well this turned out. With very, very little in terms of experience mind you. The meat – being of a very high quality – was quite tender! I had picked that medium-rare style to further overcome my swallowing issues, but I also like the taste better than that of say medium or god forbid well-done meat. The gravy consists of fat, some olive oil with a bit of fatty butter for frying, now-fried mustard and freshwater added to the pan after removing the meat.

Some guy on the Internet told me that he didn’t consider frying lamb so briefly an option, he only knows braised versions, so he said. So I looked that technique up on the web as well. My idea was: Throw lamb and root vegetables (carrots, parsley root, celery root, onions, potatoes) into a large pan, fill it up with port wine and lamb stock and leave it in the oven for 2 – 3 hours. I had no port wine however, but I did still have Nihonshu and Hon Mirin leftovers, so… yeah. I just used those. I had just enough left back then and they had to be used up anyway. First I prepared the meat, the herbs, garlic, butter and tomato paste and fried the veggies including some floury potatoes from the years’ first harvest:

 

So much for the preparation steps, on to the actual braising. What can’t be seen in the pictures is that I covered the pan with aluminium foil as to not lose too much moisture. Here we go:

 

Could’ve made the serving a bit more presentable I guess, but taste-wise I’m happy to say that using Nihonshu and Hon Mirin as (weird) replacements for port wine did indeed not ruin the dish. Also doesn’t somehow make it “feel Asian”. This is actually very good, because it means I have found another use for those left-over alcohols from making those Ramen eggs.

Now let’s switch to beef! Usually, beef means trouble for me (just like lean pork does), but there are a few exceptions. And one of those is the ribeye steak. Here it is even more important for me to pick the certified organic variety, because those cuts are much more finely marbled with fat. That, and picking one that has a nice, big fat eye. Sadly I forgot to take an image of the raw meat, but anyway, here we go:

 

While cooking I suddenly got a strangely intense craving for eggs and still had a bit of time left before the meat would be done, so hence I ended up with those two sunnies on top of the meat. ;) At first I was a bit worried that I might’ve fried the steak for a bit too long, but surprisingly the end result was very close to perfect, best one I’ve produced so far! That was two or three weeks ago. Like for the leg of lamb, I had the heat set to ⅔.

That pattypan squash came directly from the garden, so it was very fresh when I made this. First time I ever had pattypan, actually. It’s quite crisp and has a nice, refreshing taste, although I have a hunch it might be a better match for fish than meat.

5. The 2025 Zucchini flood

Zucchini logoNext comes a part of this years’ Zucchini madness. It seems Zucchini loves cooler, wetter weather, because that was what the entirety of our July looked like this year. And the mere two Zucchinis we had planted this year had simply exploded out of their patches. When I made the below dish, I had eaten nothing – literally nothing! – but Zucchini for an entire week already! Fried zucchini, steamed Zucchini, ugh. This was starting to border on malnutrition, so I added some tomatoes, minced meat (mixed pork and beef) and some cheese to make filled Zucchini:

 

I guess I made a few minor mistakes here. First, if you look closely at the first picture – so the top left one –  you may notice that there are little yellowish “sticks” in there. That’s butter. An attempt to add fat and juiciness. Did it work? Maybe. I guess I need more of them for effect though. At least twice as much.

Second, I chose “Geheimratskäse”, a local brand of butter cheese for the topping. That’s a very fatty, soft cheese that is however also very mild when it comes to its taste. I should’ve probably chosen some Alpine cheese or maybe some Emmental cheese with 6+ months of ripening. It was lacking that distinct kick that you get from slightly stronger, harder sorts of cheese with longer ripening periods. Not bad, mind you, but there clearly is room for improvement.

This was followed by Zucchini soup just the next day (ugh…):

Zucchini soup

Zucchini soup with dill (click to enlarge)

I mean, let’s face it: It looks utterly boring. And don’t get me wrong, I love Zucchini, but at that point I’ve had (almost) nothing but Zucchini for eight days or so, so bleh… (I still liked the soup though, to a degree). The salad was an amateurish attempt at Greek Tzatziki, could’ve done that better. Well, next time, then!

Finally I made a simple and apparently primitive dish. Just breaded Zucchini – yeah, again –  (remember the zucchini explosion? There was STILL more of this!), hah. In any case, I invested some extra work in the breading here. First, a photo:

Zucchini, again

Zucchini, again (click to enlarge)

Breading things is probably an exclusive German and Austrian (maybe Swiss?) thing, I guess? So you drown the stuff in wheat flour (rye flour might be an option though, need to try that), then in scrambled eggs, and then typically in wheat-based breadcrumbs. This is where I upgraded things a bit. First, I added a lot of Parmesan cheese as well as a lot of sweet paprika powder on top of some garlic powder and a bit of salt and red Kampot pepper to the breading. And then I just fried it in a pan using olive oil.

Sure, it was not the best of meals. And – like all others so far – not vegan either, given there’s cheese in it. Not that I care, really. But this is like, super-primitive, right? But with all those upgrades to the breading, it was actually quite enjoyable even if a bit too spicy because I overdid it with the pepper a little. I gotta modify and retry this, maybe with more cheese.

One more – pretty large – Zucchini left in the garden. Cracking my knuckles already!

6. You got a sweet tooth instead? I got you covered!

Apricot dumpling logoSo you are more into sweet than hearty and spicy things? Alright, here is another one out of grandma’s kitchen! Or at least, almost. In summer, she used to sometimesmake apricot and Damson plum dumplings, where Damson means the European plum variety, not the Asian fruit of the same name. What made me fall in love with those dumplings wasn’t just the sweetness, but the awesome dough she produced. When I grew older I learned that this was curd cheese dough. It’s made from – obviously – curd cheese, but also wheat (I actually used spelt flour instead), vanilla sugar, semolina, eggs and warm butter. Hm, I’m thinking I could maybe add a shot of milk to it as well, maybe the fattier, tastier sheep version. It’s like regular milk, but on steroids.

Anyway, I did not use my grandmothers’ recipe here, simply because I do not have it. But, I got a recipe from a newspaper, originally from a restaurant in my country, and those guys likely didn’t get two Michelin stars for nothing! The recipe was probably published for advertising purposes, because it came with a large article about the restaurant itself. But hey, whatever. A free Michelin-star-level recipe that has survived generations unmodified? Sure, why not!

The fruits all came from my garden by the way, just like the Zucchini. Doesn’t get any more fresh than this.

The original recipe is for apricot dumplings specifically, and yup, it too is based on curd cheese dough! My mum – and she doesn’t like sweet things at all – once made some for me upon my request. She used potato dough. Really, mom, I love you and all, but… just no. After that – for the sake of experimentation – I requested some dumplings from my grandma, but this time with choux pastry. That was not bad, but all in all, curd cheese dough it has to be! Anyhow, here’s the result, this was actually my very first time that I made dough (aside from that failed pizza), so I expected failure. But thank god, there weren’t any catastrophes this time around:

 

Oh my god, it really worked!

But: Some of you may notice something here and become a bit concerned. People tend to warn me about the stones. You should remove them, because they’re dangerous! Yet, my grandma never did. Time for some research: Is there any danger? Actually, potentially, yes! The stones contain Amygdalin, which reacts to produce hydrocyanic acid via a multi-stage chemical reaction in your body. Hydrocyanic acid is a potent cell toxin that results in O2-deficiency on the cellular level throughout your entire body! So, you’d be suffocating your body on the cellular level?! People are especially concerned about cracked stones (can happen during cooking), because of toxin leaking out into the pulp.

Yet, my grandma never removed the stones. Why did that never harm us, even when stones did eventually crack open? More research, and… truth is, the amount of toxin that you ingest in such cases is absolutely minimal. Even if you eat three dumplings, all with broken stones inside their fruits, you wouldn’t feel a thing. What you would have to do to actually, seriously harm yourself is to break any unbroken stones and then swallow a few of them whole! No person in their right mind would do something like that. And if you do, I shall nominate you for the Darwin award! ;)

The original recipe had instructed me to replace the stones with sugar cubes, but I consider that to be too sweet for my taste. I like that kinda sweet + sour thing you get from the apricots as-is. So I left the stones alone.

Quick word about the breading: It’s bread crumbs made from wheat with sugar added and then fried in lots and lots and lots of butter. And no, we cannot become friends if you use low-fat butter here. Like. Seriously. Don’t. It’s wrong.

And now, with the apricots all gone it’s plum season! Hence I redid the dumplings, but with the Damson plums I mentioned:

 

They did not taste exactly like the dumplings my grandma used to make. Maybe it was the rum that the recipe told me to add to the water for cooking the dumplings? Or was it the vanilla sugar? I am not sure. But they were very much, pretty darn close. So I guess my late grandma just earned herself two Michelin stars! At least in my book!

If you want to learn the full recipe, just ask in the comments (That is if you can withstand the extreme slowness of this 1996 server). Those dumplings are the only dish that is based on an actual step-by-step recipe after all.

Now to the finals with yesterday’s dish, also a pretty simple one:

7. Potato goulash

This is yet another one that I loved when my grandma made it. Any day that she made this was a good day! It’s quite simple, but what can I say… I can’t help myself, I need this at least once a month or so. ;) This time around I recorded the entire cooking process in a little more detail. And I dared modify my grandma’s recipe in pretty weird ways this time around. Let’s see how that turned out!

First, let’s prepare the ingredients!

 

Yeah, the floury potatoes still have their skin on. I like it that way for texture, but it’s also healthier. More vitamins and fibre and stuff, just like it works with apples. The paprika does not appear in the original recipe, but hey, if lots of the flavour of this dish is supposed to come from paprika anyway, adding more can’t hurt, right? ;) As for the spices: We have tons of marjoram, a mix of basil, parsley, thyme and rosemary, as well as black pepper, garlic powder and wild garlic. Plus another ton of sweet paprika powder.

Let’s continue:

 

So I fried the onions and garlic in a mix of olive oil and butter, then when the onion bits started to get translucent, I added the paprika. When the onion bits started to get brownish, I added the broth. Oh boy, the broth. It should’ve been beef stock, or maybe pork stock mixed with some vegetable stock or something. But I used leftover lamb stock and white wine instead. That’s the modification I mentioned. Also: I made some salad that’s kind of a cultural mashup: Leaf lettuce with cocktail tomatoes and Mozzarella? Screams Mediterranean, and with it “olive oil”, right? Yet, I used Styrian – or “Austrian” by now – pumpkin seed oil. Well, it does not matter at this point I guess. ;)

This oil is very dark green, almost black and has an intense, nutty taste. If your oil isn’t almost black and maybe looks a slight bit brownish, you might have encountered a Chinese counterfeit instead of the real deal. It happens even to salad oils these days.

In any case, you need to test the potatoes for softness using a fork while they are boiling! As soon as they’re easily penetrable, add the Debreziner! Or… add your [Frankfurters] or [Braunschweiger] (smoked liverwurst) instead, which are also viable options after all. In any case, cook it for no more that five additional minutes after adding the sausage parts!

Oh, I should probably explain this; You likely know Frankfurters. Imagine those, then add some smoking, add some spicy paprika for seasoning, and then you get: Debreziner. There you go! They aren’t overly spicy though, just a little extra kick.

The final 5 minutes:

Debreziner added

Debreziner having been added (click to enlarge)

And the result:

Lunch is served once more

Lunch is served once more (click to enlarge)

And the result? Was it better than the original passed to me by my grandma?

No.

It was still quite good (I’ll have another portion at work tomorrow), but the prominent lamb stock does not harmonise very well with the rest of the recipe, I have to say. Don’t get me wrong, this was by no means “bad”, it just… wouldn’t win any prizes, I guess. I don’t think the white wine hurt, but the lamb stock just isn’t a good fit. So it didn’t quite work out. Beef + vegetable stock again next time. ;)

So much for out-of-context articles. Keep asking for more content, and more of this unrelated stuff will be coming along. Rolling eyes smilie

Ah nooo, wait, I forgot about dessert!

8. Dessert

When most of the other dishes are filled with fat, carbohydrates or even sugars as well as proteins, why not add something reasonably healthy (aside from that Zucchini soup…)? Here you go, this is for dessert. The banana was from a special basket of my supermarket that is meant for stuff like “We can’t make profit off this anymore, because it’s got brown spots on it, so let’s just cut our losses”, and the strawberries were locally sourced in-season:

Strawberry & banana dessert

Strawberry & banana dessert (Out-of-chronological-order-but-who-cares-at-this-point, click to enlarge)

All done and dusted! And all off-topic. Rolling eyes smilie

Edit 2025-11-30: Let’s extend this.

With what? With two dishes, one from last week on the left and one from yesterday and today on the right:

 

The carp on the left comes bathed in a mustard-lemon sauce with some onions and scallops on the side as well as garlic on top, plus a salad that included some radish and cocktail tomatoes for added colour as well as Styrian pumpkin seed oil together with balsamic white vinegar for its dressing. For the drink on the side we get freshly pressed orange juice, pulp included. Usually, I’d add blood oranges, grapefruit and pomelos to the mix, but this time it was regular oranges only!

On the right side we get a photo taken today, on the first Sunday of Advent in 2025. I made duck soup, which is essentially exactly the same as chicken soup, with just the meat replaced by duck. From an immunological perspective, this brings no up- nor any downgrades; Both are good for you when you are affected with the common cold just the same. That’s folk wisdom or empirical medicine, but there’s also some actual, [scientific proof] for this being the good stuff by now.

But: With the slightly more expensive duck meat, the dish will just taste more hearty, more fulfilling, also a little bit more fatty. Added Umami I suppose. I also add a lot of thinly-sliced ginger. This adds spiciness as well as additional, strong flavour. That part is a make-or-break deal though. If you don’t like ginger, then this is gonna ruin it for you. ;) Immunologically though, ginger is an absolute killer; Not only are its anti-bacterial, anti-viral and anti-inflammatory as well as anti-cancerous ingredients heat-resistant, but they are also incredibly potent!

If you can, spice things up even more by adding pepper! The spicy piperine inside will add another weapon to your arsenal when it comes to fighting those common colds throughout winter! :) So, you know chicken soup but never tried it with duck? Go ahead! You’ll be surprised! :)

Edit 2025-12-19: This isn’t really “cooking” at all, but doesn’t matter. I had the following two plates for breakfast some time this week at my workplace, so here we go:

 

I guess it’s quite strange to eat those things for breakfast, but whatever. It’s home-grown cocktail tomatoes with snack cucumbers on the left and surprisingly also home-grown Kiwano and starfruit on the right. The Kiwano really surprised me, as they come from an arid, desert-like and hence pretty warm part of Africa. And now we grow them in Austria? In greenhouses I suppose, but still. Guess that’s climate change for you.

I never had Starfruit nor Kiwano before, but they’re nice, a pretty light, refreshing taste with only very little in terms of sweetness, especially the Kiwano.

Coffee is a bad fit for those though, so tea it was. :)

Edit 2026-01-14: Today I had some more veggie snacks in the morning at work, this time some snack paprika and some really good cherry tomatoes from [Frutura in Blumau] (which is quite known for its excellent tomatoes):

Some more veggie snacks

Some more veggie snacks (Click to enlarge)

At least it’s not always just potato chips and other salty wheat-based snacks. ;)

Sep 042025
 
TK-IP101 logo

Over 10 years ago, I got a TRENDnet TK-IP101, which is an old KVM-over-IP “switch” (actually more like an access point, it doesn’t do any switching by itself). I still use that little box to access the ancient XIN server remotely in an out-of-band management fashion. The box has been working reliably for a long while, but in the past years it would sometimes lock up, so I had to power-cycle it to make it work again. Now at first it was maybe a crash per year or so, roughly. Then every few months. And now it’s more like the box crashing every few weeks as it’s gotten hotter and hotter in my flat, because summer. Okay, there was a small LAN switch sitting on top of the KVM-over-IP box which probably trapped additional heat, but still.

I’ve been looking for another one for years, but the TK-IP101 is really rare these days. Thankfully I found one on eBay UK quite recently, so I immediately jumped at the chance! And it’s new old stock even, which is great. I wouldn’t know how to reset it if it came pre-configured:

 

10 years ago I had [decompiled the KViewer Java client software] to modify it and make it work with modern Java runtime environments. The problem was the deprecated cryptography it uses, which modern Java can fundamentally still use, but it doesn’t allow you to do so. This was successful, and given it’s Java it works pretty much everywhere, Windows, macOS, Linux, *BSD and others, which is nice.

After talking to TRENDnet about [releasing my modified version under a free software license], TRENDnet agreed and allowed me to do so using the [GPL v3]. Their conditions were that all TRENDnet brand names and logos had to be removed and my version – which I named [XViewer] – should in no way suggest that TRENDnet would be responsible for the functionality, stability and safety of XViewer. This I could agree to, of course.

For this new box (if you can call that “new”) I removed all eight screws holding the case together and opened it up. This is what you’ll see when doing so:

TK-IP101 opened up

TK-IP101 opened up (Click to enlarge)

So what do we have here? First two 143 MHz CL3 SDR-SDRAM ICs which probably make up the main memory of the box: Two [EOREX EM488M1644VTF] chips. It appears to be 32 MiB large in total, which appears to be sufficient for the tiny Linux system it’s running. Then there is another, single SDR-SDRAM IC made by ESMT that I couldn’t find any documentation for, that [ESMT M12L128324A(2C)] chip. I assume this is the graphics memory. Likely a 4 MiB IC, given the system’s maximum resolution.

Then, there is a NAND flash chip, the one with the little white sticker on it. I couldn’t identify it, looking up “KLE D06BFE90” didn’t yield any results. This should be where the operating system and configuration data are located. Not sure what the CR2032 lithium battery is for here, maybe just for timekeeping?

The two smaller chips up top are a [XILINX® SPARTAN® XC2S200E™] on the right, which is an FPGA. I assume it’s handling input devices, LEDs and I don’t know, maybe even the serial interface? The one on the top left is an [Analog Devices AD9888] VGA chip for output to any local VGA screen. So the box sits between your server’s VGA graphics card and a local monitor, same for the PS/2 inputs that your local keyboard and mouse can be hooked up to. The maximum resolution that graphics chip can do is 1280×1024×24 @ 60 Hz. So not exactly modern, but good enough for my server.

Finally, the big chip in the middle is an [Intel® XScale™ PRIXP425ABD]. This is the systems’ main CPU. I had totally forgotten about the XScale series, it’s from the times when Intel designed ARM chips, a branch they later abandoned. This one’s based on the ancient ARM v5 microarchitecture. The tiny one to the left of it is an [Inphi Corporation Cortina™ LXT972M] 10/100 Mbit/s network chip.

Now I just applied my 2-component thermal adhesive made by Hernon, which consists of the dissipator #746 and the activator #59 and put some heatsinks on the XScale, the VGA and the FPGA chips. I’m pretty sure the latter two won’t get that hot really, but I have a lot of those small heatsinks lying around, so yeah. The XScale CPU can clock at up to 533 MHz, so it’s very likely the hottest-running thing in there. Here we go:

TK-IP101 with some heatsinks attached

TK-IP101 with some heatsinks attached (Click to enlarge)

After it’s configured I can swap them and then do the same mod to my old TK-IP101. The additional cooling might solve the stability issues, I had similar cases with other network appliances before, actually. One was an ancient 100 Mbit hub, that had a plug and a mounting spot for a 5 V 40 mm fan. I added heatsinks and a Noctua NF-A4x10 5V fan as well as a dust filter, and it didn’t crash even once afterwards. Same for some old Realtek WiFi access point.

We’ll see, fingers crossed.

Aug 262025
 
Raptor logo

It’s been a while since I’ve done this, but today I’d like to show you how to make the free and open-source version of the game “Raptor: Call of the Shadows” work on Windows XP and Windows XP Pro x64 Edition. Thanks fly out to Srandista, who let me know about this on the #guests channel of my [IRC chat server]. This is a funny one, given that the original game was developed for DOS in the early 90s. While the games’ developer Scott Host gave the source code to another developer going by the nick name [skynettx] to be released under the free GPLv2 license, this version is based on a reverse-engineered version of the source code produced by nukeykt. You can download The Windows release build [here]. It requires at least Windows Vista, however.

Attempting to launch the game as-is under Windows XP makes a screen appear that I have seen a couple of dozen times already. ;)

Raptor is not a valid Win32 application

An old friend stopping by for a visit!

Now before I start, let me say that there are two ways to handle this game when it comes to Windows XP compatibility: An easy way which includes modifying the games’ PE32 / PE64 header and a hard way, recompiling the whole thing from source code. Let’s start with the easy way!

No, wait… Let’s actually start with the downloads first:

0. The files

Here’s what you need to make your version of Raptor work on Windows XP:

The game download includes some assets, but only those that came with the shareware version of Raptor: Call of the Shadows. So you don’t get the full set of .GLB files. To get the full game, you still need to buy the game in its classic version (e.g. on Steam), as the assets are still distributed under a proprietary, commercial license[1]. The game asset files of the full version are called FILE0000.GLBFILE0000.GLBFILE0001.GLBFILE0002.GLBFILE0003.GLB and FILE0004.GLB. Those need to sit in the same folder as raptor.exe.

1. The easy way out

For those of you who are new to this, but want to fix the official release instead, please download the tool [CFF Explorer] by NTCore, and open raptor.exe in it. Click on “Optional Header” and look for the fields MajorSubsystemVersion and MinorSubsystemVersion:

CFF Explorer inspecting raptor.exe

CFF Explorer inspecting raptor.exe

These are set to 6 and 0, which corresponds to the Windows NT kernel version 6.0. So, Windows Vista. Change these to 5 and 1 instead (or 5 and 2 for the 64-bit version) and save the file. Do the same for raptorsetup.exe, should you need it:

Fixing the PE32 / PE64 header

Fixing the PE32 / PE64 header

This is really all, there are no actual Vista+ dependencies. The problem arises only due to the platform toolset of the Microsoft VisualStudio project not having been targeted at Windows XP. A very common (and by now understandable) issue with modern software projects that use Microsofts’ development environments.

The game should now work on Windows XP:

Raptor running on Windows XP

Open-source version of “Raptor: Call of the Shadows” running on Windows XP (click to enlarge)

The Raptor setup that comes with the official build is pretty funny actually, looks just like it did in DOS times:

Raptor setup.exe

raptorsetup.exe

2. Compiling from source, or: The hard way out

For this, you will need Microsoft VisualStudio 2017 and probably also 2015 and and its components for targeting Windows XP installed on some newer version of Windows. Newer versions of VisualStudio don’t have the platform toolsets for targeting Windows XP included anymore, so that’s why. Clone the source code from [here] using git. After that, open the solution file raptor\raptor.sln in VisualStudio 2017. Edit the project properties and change the platform toolset to “Visual Studio 2015 – Windows XP (v140_xp)”. Actually, v141_xp should also work, but the solution did not compile for me with that toolset, throwing some weird errors that I didn’t understand. That’s kind of strange considering skynettx seems to be using the much newer Visual Studio 2022 instead, but I didn’t care to inspect this more closely.

Edit the solution properties and pick your desired version (Debug or Release) and platform architecture (x86, which means 32-bit or x64, which means 64-bit) under Configuration Properties > Configuration. Now you can build the solution to get a raptor.exe that works on Windows XP.

Bundle raptor.exe with raptorsetup.exe (if desired), and at least with SDL2.dll, which is required, as SDL2 is the graphics library the open-source version of the game uses to draw stuff on screen.

Raptor Setup is actually a separate project, for which you can get the source code [over here]. The process to build it is similar, so you need to compile that as well to get the raptorsetup.exe I just mentioned.

And that’s it, have fun! Beer smilie I guess I will, given that I’m a huge fan of [Tyrian]! :)

[1] Raptor: Call of the Shadows is © 1993 Cygnus Studios and was licensed for exclusive distribution by Apogee Software, Ltd. The source code has since been re-licensed under the [GNU General Public License v2].

Jul 252025
 
Dead IBM PC Server 704 logo

XIN.at has been down for about two weeks. Do you know what it looks like, when a PCI bus controller horribly dies? I do now. Let me tell you: It doesn’t look pretty, exactly. Beginning of July – I think it was a Saturday – I sat down in front of my gaming PC, fired up Firefox (no pun intended) and wanted to check on some websites. Timeout. Whoops. Aah, surely it’s Magenta – my Internet service provider – because it’s always their fault. Always. Or so I thought. Tried to access one of my other public appliances via my phone over LTE, and sadly enough, it was responding just fine. It was then that I started getting nervous. Because now it was pretty clear that the fault was with my server, which acts as a jack-of-all-trades including its routing firewall that is supposed to hook up my LAN and WiFi to the Internet.

IBM PC Server 704 - XIN.at - Rebuild running

My server when some drives were (almost) failing way back (click to enlarge)

Sooo, I switched on the VGA monitor of the server (which has now been running for 29 years), and what I saw was ugly. First, it was telling me the following: “NMI: Parity Check / Memory Parity Error”. And what’s pretty uncommon for this type of error is that it specified that the error has happened on the system’s EISA bus. Which yes, this IBM PC Server 704 actually has.

So I was like… oookay. “Memory Parity Error” made me think that it might also have been caused by the system’s main memory, but nope. Those can also happen in PCI or ISA memory areas. And an “NMI” is a non-maskable interrupt. That means a real hardware interrupt that any half-decent operating system kernel has to react to with a full stop. So a kernel panic on UNIX-like systems, or a BlueScreen Of Death on Windows systems.

I decided to just switch it off and back on. Magical self-healing, pretty please! I was relieved at first to see the system POST (power-on self-test) come up, but after the VGA card’s BIOS and the network card’s PXE BIOSes had POSTed, there was nothing but a blinking cursor on a black screen. At that point the first SCSI controller BIOS was supposed to show up and tell me what kind of drives it has connected to it. 

Shivers were sent down my spine. This machine has two PCI buses. And yup, one EISA bus with no cards on it, that is connected to PCI bus number 2. Here’s the block diagram:

i450GX block diagram

i450GX “Orion” block diagram ([image source], click to enlarge)

The image above makes it look like the EISA bus is sitting on the first PCI bus, but nope, that’s actually the second one. Huh, this is an Intel diagram, it shouldn’t be right-to-left?

Anyway, I opened up the case only to find that the first SCSI controller in the system sits on the first slot of PCI bus number 2. I removed one network card and moved the SCSI controller from PCI bus 2 to bus 1, and surely enough, it’s BIOS came up! Alright, I removed the second network card, installed a new Intel dual-port server adapter, removed the Matrox Millennium graphics card (there is an onboard one made by Cirrus Logic, it’s not good, but for emergency operation…) and moved the two SCSI controllers up to the slots of bus number 1.

But, it was hopeless. I did get past the blinking cursor with no cards wanting to POST a BIOS on bus 2, but the operating system kernel got interrupted almost immediately by another NMI after the kernel started booting, likely due to it scanning all bus systems for cards.

Dead in the water. Nothing more I could do.

Aaand then, a few days later there was a medical “situation” that sent me to the hospital for a while, which delayed any repair attempts even further. :(

Anyway, last Sunday I started serious repair attempts using the parts I had stockpiled over the decades. First replacement system board was entirely dead. No POST, no beep, no POST codes on the front-panel display, no text at all actually. Tried the next one, and YES, POST! And then nooo, CPU riser 2 with CPUs 3 and 4 detected as “broken”. Which very likely is bogus, I guess that system board is damaged too. From the error logs (the board logs and displays the errors that had happened during the prior boot-up attempt), the former operator had already encountered this error. So yeah. Likely the system board.

I decided to ignore that, and after a few more issues (with the network configuration) and a misconfiguration that I did when re-migrating the emails of my users that had been re-routed to an external server via a DNS MX-record change made the server essentially DDoS itself when pulling the mails back from said external server. Though yeah, that was purely my fault. Many emails were multiplied, tens of thousands of them. Hah. :(

Well, now I only have 2 instead of 4 CPUs for now, and yes, that does make things sluggish, but it is what it is. It’s only 333 MHz Pentium II Overdrives after all. Also, I found two dead memory riser boards amongst my spare parts, when I was suspecting the memory subsystem. Can’t trust my spare part depot too much I guess…

And here is the system board with the broken PCI bus controller, it’s based on the Intel AP450GX reference board, the top three PCI slots sit on bus 1, the lower three on bus 2, as do the EISA slots, that are connected via a PCI-to-EISA bridge chip:

The dead system board of an IBM PC Server 704

The dead system board of an IBM PC Server 704 (click to enlarge)

Ship’s listing, but still sailing!

It has to make it to at least 30 years of operation!

Feb 072024
 
Mindustry logo

Short version: Install an old Java 1.8 runtime environment and run the game’s desktop.jar with it. Alright, and now the long version: [Mindustry] is a free and open-source tower defence game with a bit of focus on production & transport logistics. And it’s being written in Java, which means it’s compatible with all kinds of different operating systems, Linux, FreeBSD, macOS, Windows, Android, and iOS, so it’s got most ecosystems covered. Also, it supports at least Java 1.8 up to Java 1.17 (or 8 and 17 as it’s called these days), which means it should work on Windows XP. The default release of the game doesn’t run out of the box, though. You can make the 32-bit version work by doing a simple PE32 header hack, so by setting MajorSubsystemVersion to 5 and MinorSubsystemVersion to 1 with e.g. CFF Explorer for Mindustry.exe, so that good old trick.

Today we’re going to do it a bit differently though. First, you need a compatible Oracle Java 1.8 runtime engine, and here it is:

Unpack the above Java runtime environment with [7-Zip] and install it. That’s unless you already have one installed that is version 1.8. This will give you a warning message when you launch the installer, telling you that you’ll need a newer version of Windows:

JRE installation warning on Windows XP

JRE installation warning on Windows XP (click to enlarge)

Thankfully you can just ignore that. If the JRE 1.8 is old enough, it’ll still install and work just fine.

On Windows, Oracle bundles not just a java.exe, but also a javaw.exe with the runtime. The latter doesn’t spawn a terminal window when launched, so we’ll use that. Now get the Windows version of the game from [Mindustry’s itch.io page] and unpack it. If you’re getting the 64-bit version for XP x64, the Mindustry.exe will have its icon missing, so I’ll provide you with the icon file from the 32-bit version:

Once again, just unpack that archive, and then put Mindustry.ico next to Mindustry.exe for the 64-bit version. Now we’ll create a desktop launcher. First, locate your javaw.exe. The default location should be C:\Program Files\Java\jre\bin\javaw.exe. The second file you need to locate is the game’s desktop.jar, which is the main program. It should be located in the jre\ subfolder where you extracted the game.

So, create a shortcut on your desktop that looks somewhat like this:

"C:\Program Files\Java\jre\bin\javaw.exe" -jar "C:\Games\Mindustry\jre\desktop.jar"

Now assign the Mindustry icon to that shortcut. For the 32-bit version, you can get it from Mindustry.exe and for the 64-bit one just use the Mindustry.ico file I provided above, so you’ll get something like this:

Mindustry desktop launcher

Mindustry desktop launcher

And with that, you’re done:

Mindustry running on Windows XP using the Oracle JRE 1.8u144

Mindustry running on Windows XP using the Oracle JRE 1.8u144 (here it’s a German 32-bit version of Windows)

Naturally, you shouldn’t use an old Java version for networked programs, and this game does come with multiplayer support and a server that you can self-host. Just so you’re warned. I mean, if you’re on Windows XP, security is probably not your priority anyway. Newer versions of the JRE 1.8 can work on Windows XP (e.g. 1.8u221), but the installer won’t. So you’d have to unpack the .zip version and add the path to java.exe & javaw.exe manually. I don’t know since which JRE version it really stopped working entirely on XP, but at least the latest at the time of writing – 1.8u401 – won’t run at all.

Also, the game will only run if you have a graphics card that supports at least OpenGL 2.0 correctly. On the NVIDIA side, this means the GeForce FX released in 2003 and anything newer than that. For ATi/AMD, anything with an R300 chip will work, so cards like the Radeon 9500 or 9700 released in 2002 or newer cards. I’m unclear on Intel iGPUs and others though. Some appear to have broken OpenGL 2.0 support, but that’s mostly driver issues I guess.

And, as always: Cheers! Beer Smilie

Update 2024-02-09: User M477 on the XIN IRC pointed out that Nojus has an [article about newer Java versions on XP]. What he’s doing is unpacking the .tar.gz version of Java, and overwriting the existing files. The latest installer-based versions that worked were 1.8u151 and 1.8u152.

After experimenting for a while I found that the newest Java runtime environment version that works by unpacking is 1.8 update 251, or as Oracle calls it, 8u251.

Nov 302023
 
OpenTyrian logo

0. Introduction

I really love Tyrian. It’s an old shoot’em up game for DOS, developed by Epic Megagames* (now just “Epic Games”). It features nice, classic 2D pixel graphics, a neat soundtrack and a really quirky backstory. It was later re-released as Tyrian 2000 with additional bug fixes and an additional, fifth act. Much later, free software developers created a full, open-source port of Tyrian called [OpenTyrian] that works not just on Microsoft Windows, but also on POSIX-compliant operating systems such as Linux, FreeBSD, Apple macOS and others. The current release version of OpenTyrian does not run on Windows XP by default though, so I decided to port it back to that older operating system family.

*This information is actually wrong. Thanks to user Srandista for correcting me. The developer was actually Eclipse Software, with Epic Megagames acting as publisher.

Actually, binary-hacking this game to make it run on XP is super easy. All you’d have to do would be to set the PE32 / PE64 header fields MajorSubsystemVersion and MinorSubsystemVersion to 0005 & 0001 respectively. However, since OpenTyrian is free software, I decided to try and create a clean build of the source code targeting XP and also attempted the same with the fork [OpenTyrian2000]. Luckily, this was relatively unproblematic, so it was a success:

OpenTyrian 2.1-r9750f8c running on XP x64

OpenTyrian 2.1-r9750f8c running on XP x64 (click to enlarge)

1. The downloads

Before I describe what I did in detail though, here are the files, unpack all .7z archives with [7-Zip]:

The builds have been tested on physical as well as virtual Windows XP & XP x64 computers. I’ve played it for about 2 hours and encountered no glitches or crashes.

2. Licensing & required game data files

Note that OpenTyrian & OpenTyrian2000 are licensed under the [GNU General Public License Version 2.0], whereas the SDL2 libraries are licensed under the [zlib license]. The Visual C++ redistributables are licensed under the [Microsoft Software License Terms for the Microsoft Visual Studio 2017 Tools, Add-Ons and C++ Redistributable].

Once you have the correct Visual C++ 2017 redistributable installed, unpack the game. There is still one thing missing though: The game data. While I cannot share it here directly for copyright reasons, it has been released as freeware by original Tyrian developer [Jason Emery]. You can download it here: [tyrian21.zip] for OpenTyrian and [tyrian2000.zip] for OpenTyrian2000.

Depending on whether you want to run OpenTyrian or OpenTyrian2000, unpack tyrian21.zip or tyrian2000.zip and place all the files inside (*.dat, *.shp, *.lvl, etc.) into a data\ folder right next to opentyrian-Win32-Release.exe or opentyrian-x64-Release.exe, depending on which version you intend to run. If the game cannot find its data, it’ll start up, but just instantly close itself. Just create the data\ folder beforehand.

3. Building the game from source code while targeting Windows XP & XP x64

The guide below was written based on OpenTyrian, but it works similarly for OpenTyrian2000.

The developers of the game apparently used Microsoft VisualC 2015 to build the newest release builds as of the time of writing. For the required SDL2 and SDL2_net libraries, MinGW’s GCC has been used. I’m not sure if the OpenTyrian developers compiled SDL2 by themselves or if they’ve just fetched pre-compiled builds. SDL2 is the GUI library that renders the game on screen and also handles the game’s networking code. I decided to build all three projects with Microsoft Visual C/C++ 2017, which is the newest one that can target XP using the vs141_xp platform toolset.

There were just some minimal modifications required, most likely because of the strictness of Microsoft’s VC++ 2017 compiler. When mixing C++ with C code, the compiler will not accept empty structs or unions, which can make sense in C++. Because of that, it’s well-defined in the C++ specifications but is undefined in C99. Most compilers (e.g. GCC or clang) would print nothing but a warning when encountering such a construct, but VC++ 2017 is so strict that it treats this as an error. The offending struct sits in Microsoft’s own ROAPI header file roapi.h, which SDL2 includes.

To fix it, I just removed the ROAPI inclusion from the game. three files need to be modified for that, the first is src/core/windows/SDL_windows.c. Look around line 30 and find this code block:

  1. #if defined(HAVE_ROAPI_H)
  2. #include  /* For RoInitialize/RoUninitialize (Win32 only) */
  3. #else
  4. typedef enum RO_INIT_TYPE
  5. {
  6.     RO_INIT_SINGLETHREADED = 0,
  7.     RO_INIT_MULTITHREADED = 1
  8. } RO_INIT_TYPE;
  9. #endif

Comment out the offending preprocessor conditional and the #include inside of it:

  1. // Mod: Remove ROAPI
  2. //#if defined(HAVE_ROAPI_H)
  3. //#include  /* For RoInitialize/RoUninitialize (Win32 only) */
  4. //#else
  5. typedef enum RO_INIT_TYPE
  6. {
  7.     RO_INIT_SINGLETHREADED = 0,
  8.     RO_INIT_MULTITHREADED = 1
  9. } RO_INIT_TYPE;
  10. //#endif
  11. // End of mod

Next, open src/joystick/windows/SDL_rawinputjoystick.c and look for #include <roapi.h> around line 68. Comment that out as well, then do the same for a similar include line in src/joystick/windows/SDL_windows_gaming_input.c around line 38.

Now compile the SDL2 solution in Visual Studio 2017 after configuring its platform toolset (like vs141_xp) and target architecture (Win32 or x64). The solution file sits in the VisualC\ subdirectory. Once done, open the SDL2_net solution and configure its include and library directories so it can find SDL2. Similarly to before, configure the correct platform toolset and architecture, then build SDL2_net. For SDL2, the headers to include can be found in its include\ subdirectory. For release builds, the libraries are in VisualC\Win32\Release\ or VisualC\x64\Release\, depending on whether it’s 32-bit or 64-bit. For SDL2_net, the headers are in the root of the source tree and the libraries again in e.g. VisualC\Win32\Release\ or VisualC\x64\Release\.

Finally, open the OpenTyrian solution in its visualc\ subdirectory. There are some requirements here; Like for SDL2_net, you need to add the include and library directories. Make sure you add them for both SDL2 and SDL2_net, as OpenTyrian needs both. This isn’t enough though! Open the file visualc\sdl_path.props in the OpenTyrian source code tree in a text editor and make sure to set the SDL2BaseDir and SDL2netBaseDir locations correctly. Adapt them for your local paths:

  1. <!--?xml version="1.0" encoding="utf-8"?-->
  2.  
  3.  
  4.     X:\Build\SDL2\SDL2-2.28.5
  5.     X:\Build\SDL2_net\SDL2_net-2.2.0

For a last change, make sure you reconfigure the project’s warning level from /Wall to /W0 or it may fail to build.

With this, OpenTyrian should compile and link correctly. The resulting binary opentyrian-Win32-Release.exe or opentyrian-x64-Release.exe can then be found in the root of OpenTyrian’s source tree. Copy it to the deployment directory, then pick up SDL2.dll and SDL2_net.dll from their library directories and copy them next to the .exe. Then, as described in point 2., copy the game data folder over, so the game can find its audio & image data.

With that, we’re done! Beer Smilie