Working on a loosely based on NZ-43 (14C). It’s approximately 12m long 🙂

First time I’m trying my luck with a vessel and not a building. The curving is difficult to realise in tho.

It started life in the old Java version of the game because the new Unity version has no posters yet. I had to segment the plan of the cog (carved in a very bad resolution from a PDF) into several in-game posters that had to be aligned in-game again to get the proper measurements.

After that I moved the blueprint of the frame over to the new version and started putting planks on it. A cumbersome process during which I learned a lot. I’ll probably make another and more improved hull based on the gathered know how.

I also fell straight into another “not yet implemented” trap. RisingWorld has a flip command to mirror an object and I kinda assumed this would work with blueprints too. It does not. And I was really not looking forward to put plank on both sides of the frame.

Luckily most of the leg work to read the binary blueprints was done by @paulevs before who released https://github.com/paulevsGitch/BlueLib under the MIT license. It has been a while that I touched Java but I could come up with some code of my own that would flip the planks only (I used rounded cubes for the planks exclusively) making use of this lib and the very first try at it looked promising already.

Here is the source I came up with in case you wonder:

package blueprint.flip.maybe;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import paulevs.bluelib.blueprint.Blueprint;
import paulevs.bluelib.blueprint.BlueprintIO;
import paulevs.bluelib.blueprint.element.BlueprintElement;
import paulevs.bluelib.blueprint.element.BlueprintElementType;

public class App {
    public static BlueprintElement cloneBlueprintElement(BlueprintElement el) {
        BlueprintElement element = new BlueprintElement(el.type);
        element.setPosition(el.posX, el.posY, el.posZ);
        element.setSize(el.sizeX, el.sizeY, el.sizeZ);
        element.rgba = el.rgba;
        element.setRotation(el.rotX, el.rotY, el.rotZ, el.rotW);
        element.setSurfaceOffset(el.surfaceOffsetX, el.surfaceOffsetY, el.surfaceOffsetZ);
        element.texture = el.texture;
        return element;
    }

    public static Blueprint readBlueprint(String pathname) {
        File file = new File(pathname);
        Blueprint blueprint = null;
        try {
            blueprint = BlueprintIO.read(file);
        }
        catch (IOException exception) {
            exception.printStackTrace();
        }

        return blueprint;
    }

    public static void main(String[] args) {
        final Blueprint blueprint = App.readBlueprint("/path/to/Blueprint-flip-maybe/cog_base_split_1670726695.blueprint");
        System.out.println("Opened " + blueprint.name);
        System.out.println("Blueprint has " + blueprint.elements.size() + " elements");

        ArrayList<BlueprintElement> elements = new ArrayList<BlueprintElement>();

        blueprint.elements.forEach(element -> {
            if(element.type == BlueprintElementType.ROUNDED_BLOCK) {
                System.out.println("T: " + BlueprintElementType.getElementName(element.type));
                System.out.println("pX: " + element.posX + "pY: " + element.posY + "pZ: " + element.posZ + " rX: " + element.rotX + "rY: " + element.rotY + "rZ: " + element.rotZ);
                BlueprintElement el = App.cloneBlueprintElement(element);
                el.posX = el.posX * -1;
                el.rotY = el.rotY * -1;
                el.rotZ = el.rotZ * -1;
                System.out.println("pX: " + el.posX + "pY: " + el.posY + "pZ: " + el.posZ + " rX: " + el.rotX + "rY: " + el.rotY + "rZ: " + el.rotZ);
                elements.add(el);
            }
        });

        elements.forEach(element -> {
            blueprint.elements.add(element);
        });

        blueprint.name += "_flipped_X";

        File outputFile = new File("/path/to/Blueprint-flip-maybe/" + blueprint.name + ".blueprint");
        try {
            BlueprintIO.write(blueprint, outputFile);
        }
        catch (IOException exception) {
            exception.printStackTrace();
        }
    }
}

I’m kinda happy with the result. This Lib also allows me to change the texture of the elements so I don’t have to worry how the used texture during the construction may look in the end.

Now onwards to improve the curves. I really wish for a bend mode where the beginning would snap on to an existing object and the opposite plane could be moved around individually.

With (Unity) improving a lot lately we’re feature wise almost on par with the old Java version again. Due to my hobbies I’m playing on the server https://medievalrealms.co.uk/ where I usually construct buildings based on specific periods according to my understanding of timber-framed constructions. Which may not be the best to rely on but hey, it’s a game after all.

One of the features still missing is an ingame map. We do have the compass already though and with debug enabled we even get an exact position on the current map. And the new maps are huge! And since we’re building here in multiplayer it’s no wonder that this is a dire missed feature to get an idea where the others are and what they are building, because it’s not fun navigating with X,Y,Z alone to visit other players (and keep note of where the own spot is located).

So I was intrigued to see that the player @Bamse did what gamers tend to do when a feature is missing. They start some sort of helper app (or wiki or whatever). This resulted in a Cloud map project at https://qgiscloud.com/Bamse/MapMedievalRealms/ where players from the same server may add POIs and do the leg work of surveying the “new” world.

The only drawback (haha. sorry.) is: It’s a PITA to do the surveying because stopping every few meters to note down a bunch of coordinates takes hours! Someone had to do this though, because “my” isle – a piece of rock I randomly stumbled over after the latest server reset – was still missing! And while I clocked roughly ~700h on this game already I was not going to do that. I’m a programmer – which equals to lazy in my opinion. So I started scripting and after a few minutes came up with the following still crude solution:

echo "" > move.log
while true; do
	gnome-screenshot -w -f /tmp/snapshot.png && convert /tmp/snapshot.png -crop 165x30+905+975 /tmp/snapshot-cropped.tiff && tesseract /tmp/snapshot-cropped.tiff - -l eng --psm 13 quiet | awk 'match($0, /([[:digit:]]+[.][[:digit:]])+.([[:digit:]]+[.][[:digit:]]+).([[:digit:]]+[.][[:digit:]]+)/) { print substr($0, RSTART, RLENGTH)}' | awk '{ printf "%0.0f,%0.0f,%0.0f\n", $1, $2, $3}' >> move.log 
	sleep 2
done

This surely can be improved a lot but… minimum viable product. We’re still talking about a game. Here is what it does:

* Take a screenshot of the active window (Rising World while playing)

* Save it to /tmp (that’s in my RAM disk)

* Crop out the coordinates and convert it to tiff using `imagemagick`

* Run `tesseract` for OCR detection

* Pipe the result to awk and use a RegEx to identify three numbers

* Reformat the 3 numbers (remove the precision) and dump it in as csv-like log

* Sleep for 2 seconds and repeat until terminated

And in case you wonder why I used gnome-screenshot: I’m on and the usual suspects written for X do simply not work. I did recompile gnome-screenshots tho to disable the annoying flashing though so it’s silent now.

Why the awk program? Well, tesseract is good but the raw data looked something like this in the end and the RegEx cleans that up somewhat:

serene ep)
9295.2 95.4 2828.0 |
9295.2 95.4 2828.0 |
9296.4 95.4 2828.5 |
nn
9303.1 95.4 2838.5 |
9295.0 98.4 2857.65
9289.1 98.7 2868.1 (7
9296.5 96.7 2849.0 |»
9301.1 95.4 2835.5 |
9301.1 95.4 2835.5 |
nn

So I put this to a test and jogged around “my” isle and here are the results:

One(!) data point was misread during the ~15 minutes run. Not too shabby! That could easily be fixed manually and who knows… mebbe I’ll improve on the script to check for implausible spikes like that at some point.

I demoed the script to other players on the same server and some already started investigating into solutions to adapt this script to Windows. Just don’t ask me how to do that – I really wouldn’t know 😛

Updated 10th Dec 2022: A solution to do the same on Windows PC appeared on https://wiki.calarasi.net/en/public/medievalrealms/ocr-coordinates

TonUINO by thorstenthorsten (voss.earth)

TonUINO, DIE DIY Musikbox (nicht nur) für Kinder Man nehme einen Arduino, ein MP3 Modul, einen RFID-Leser, eine Micro-SD-Karte, etwas Kabel und Zeugs und einen alten (oder neuen) Regallautsprecher… und schon habt ihr den TonUINO!

Trying to get (or even find) a cheap TV in 2022 is a horrible experience. Especially on Amazon, because there are no filter for this and the search function will simply not care and keep shoving all kinds of Smart TVs in the face. Various other websites designed to compare TVs also do not offer such a filter and I really wonder why, because there are very valid reasons to *not* want a Smart TV. Yes, I don’t even want the Telefunken ones that come at least with Linux!

For reference, our current is some very old Samsung with whopping 720p (including burnt in artefacts) and I’m out for replacing this for a while now.

I’m also not out for the greatest and widest since the TV may be part of our living room but that room is not designed around the TV. It’s more a corner thing. It should be a real upgrade for the 720p so “just HD” is out of the question. I kinda settled with the idea of something around 55″ and 4K – so not quite a computer monitor any more, due to it’s size, where I’d have way more choice. And cheap please. I really do not spend much time in front of the TV.

Apparently Sceptre is one of the few selling some non-Smart TVs but that seems to be US only (e.g. Walmart) so not an option for me.

I was already close to giving up when I randomly stumbled over the homeX U55NT1000. I’ve had no idea about this brand before, nor do I have an idea about the quality but they _advertise_ with the fact that this thing is “As smart as I want it to be” by connecting external devices of my choice: https://www.homex.eu/4k-uhd.html

Apparently it also comes with a Triple-Tuner that I don’t care about but it’s nice to have that option I guess. Also no idea about it’s audio connectivity. I’ve my own AV receiver for that anyway 😁

And it comes pretty cheap (roughly 300 EUR according to historical data on the net) ticking off all my boxes:

~~cheap~~ affordable
☑ 4k (UHD)
~~dumb~~ non-Smart
☑ HDMI
☑ 55″

So I ordered. I’m already very curious how this will play out and will update this once the TV arrives.

Fluggeschwindigkeiten, IAS, TAS, EAS, CAS, Mach by wabis wabis (Walter Bislin's Blog-De)
Dieser Artikel befasst sich mit den verschiedenen Fluggeschwindigkeiten, deren Berechnung aus im Flug gewonnenen Messdaten und deren Beziehung untereinander.

Das ist so wahnsinnig gut erklärt. Ich komme immer wieder auf http://walter.bislins.ch/blog/index.asp?page=Fluggeschwindigkeiten%2C+IAS%2C+TAS%2C+EAS%2C+CAS%2C+Mach zurück. Und dabei fliege ich nicht mal im echten Leben – und habe es auch nicht vor o0

Vielen Dank @wabis!

Adulted much and did lots of mundane tasks in the house recently. Including some plumbing that was really overdue. Water starts to become my arch nemesis in our ageing building and leaks really do not improve over time.

On my list were 4 siphons, that needed replacement, a shower hose and a shower head. Some of this stuff was only held together by varnish and replacing all this was a mess.

Anyway, what I find really great is that some of the required parts could be obtained in environmental friendly packaging. Namely the shower head and three of the siphons. No further plastic was in the cartons. Really appreciate this.

Sadly that was not the case for the shower hose and the new kitchen armature. Especially the last came with formed foam. That could really do without too.

Oh yeah and remember the unexpected findings in the washing machine from https://beko.famkos.net/2022/06/21/6686269/ ? This time it was Siemens 0, Grass Trimmer 7 and I really wonder “will they ever learn?” This time the sieve was toast and needed replacement 😠