Recent Updates Toggle Comment Threads | Keyboard Shortcuts

  • penguin 21:43 on 2020-07-08 Permalink | Reply
    Tags: flutter,   

    Install flutter on MacOS 

    I blog so I don’t forget … this:

    First, the non-CLI actions:

    • install XCode from the App Store
    • install Flutter plugin for Visual Studio Code (if you haven’t installed VS Code, do it now, you can also use “brew” for that)
    • download the latest Flutter SDK, unzip it, and move the unzipped flutter/ folder to $HOME/Dev/frameworks (or any other location you favor)
    • add $HOME/Dev/flutter/bin and $HOME/Dev/flutter/bin/.pub-cache/bin to your path

    That’s about it for now. Then do some CLI magic:

    brew tap dart-lang/dart
    brew install dart android-studio android-sdk
    sudo gem install cocoapods
    pod setup
    sudo xcode-select --switch /Applications/
    sudo xcodebuild -runFirstLaunch
    flutter doctor --android-licenses

    After that some more UI stuff:

    • Start Android Studio. It will want to install a couple of things (Intel drivers pop up, weirdly)

    And finally: A final flutter doctor will tell you if everything is all right.

    The whole process will download about 10-12 GB of data.

  • penguin 20:28 on 2020-07-06 Permalink | Reply
    Tags: gadgets   

    Bluetooth Headsets 

    I’ve had a few now. Still do. Here’s a review.

    Bose QuietComfort QC 35 II

    The best one, hands down. I still try to move away. Why? Several reasons.

    • Bluetooth Connectivity. I had situations where I could barely move 2m away from the laptop until people started complaining. Line-of-sight, that is. Not 2m of concrete wall or something stupid.
    • I had 3 replacements in 2 years of usage, because the connectivity got worse over time.
    • ANC works perfectly – for me. If I fill my coffee maker in my kitchen is next to my home office workplace people hear the Niagra Falls.

    The good parts:

    • ANC. Just fucking awesome.
    • Super comfy earpads.

    Bose 700

    I assume the ANC is just as good. Those are the reasons I brought them back after 3 days:

    • Same Bluetooth issues.
    • They changed the headphone design, which is just annoying. The size adjustment is continuous, which to me is a big step back because the one from the QC worked flawlessly.
    • The touch controls suck – if you use them the earframe basically acts as a drum and produces very annoying and loud sounds from your fingers.
    • Same issues with surrounding noise in calls as well – it’s good for me, but not for my communication partners.

    Sennheiser Momentum 3 Wireless

    Ugh. I am disappointed. Solidly more expensive than the Boses, and a lot of disadvantages (firmware version 3.5.1):

    • Very base-heavy sound. You have to like that. The punch is cool, but can be annoying. Overall sound is great, though.
    • Heavy!! 304g, which is about 55g heavier than Bose 700, and you feel it. It really makes a difference!!
    • Uncomfortable. The grip is very, very strong and it hurts your head. I solved that by bending up the metal arc which forms the headphone. Also the earpads are much less soft than the Bose ones, which is also uncomfortable after a short while.
    • Bluetooth connectivity is good, but Bluetooth in general is awful. After taking a call I have to restart Spotify because it just won’t play any more. Connecting can also take a long time, sometimes. Also sometimes it’s “connected”, but sound is not played back from the device, and then the connection drops again.
    • It’s “Phone 1 connected”, “Phone 2 connected”, etc. where Bose actually reads the names of your devices so you know precisely which device you’re connected to.
    • The app is just awful.
    • Firmware updates take ages (about 15-20 minutes), and the app needs at least one restart and maybe a re-pairing to pick up the change.
    • No on/off button. You switch them off by folding them (if they accidentally unfold the battery will drain), and if you want to use them as passive headphones you have to unfold them while holding the control button. Very intuitive.
    • The ANC is just not good.
    • The head size adjustment is also continuous, basicalls the over-ear-part is sliding in a metal rail, which makes them always feel slightly wrong-fitted, especially if you reduced the grip-pressure before.
    • And the aforementioned issue with the noise for the other parties in the call.

    Jabra Elite 65t

    Jabra is starting to make a lot of things right. The only issues I have are:

    • My ears are tiny. The things are a bit big and uncomfortable (those are in-ear headphones).
    • And of course the issue with the ambient noise and the communication partners.

    The good points?

    • OK ANC.

    Apple AirPods Pro

    An incredible piece of hardware, absolutely stunning. Yet:

    • Comparatively short battery time (yes, this can be an issue in long and subsequent calls).
    • I quote: “Oh I can always tell if you use your AirPods – all the ambient noise is getting so much louder then“. (I kid you not)
    • If you want to hold them while talking on speaker, you have to be very careful. If just one of them thinks it’s “in your ear” because you block one of the “ear sensors” they will grab the call. Yes this is intended behavior, still I have found this annoying at enough occasions to remember.

    The good points?

    • Amazing sound for that size.
    • Amazing ANC for that size.

    Compared to the over-ears they lose of course. That is to be expected, or I would assume an even heavier price tag.

    Now what?

    I have isolated the Jabra Evolve2 85 to try. Why?

    • Made for conferencing – it has a hardware microphone in front of your mouth. It seems tech still needs this. Also if you pull it up you go mute, which is perfect.
    • Bluetooth.
      • I wanted a mic, and so I read up on gaming headsets. Unfortunately all of them are extremely specialized for gaming, so most come with additional hardware (e.g. a dongle) and use separate connections (Bluetooth vs. custom 2.4GHz dongle) for sound vs. speech. Also they are sometimes tied to a single hardware platform, so the risk of buying an expensive good one to use on the iPhone is substantial.
    • Apparently a whole apparatus of 11 (!) microphones for speech vs. noise computation.
    • Supposedly very good sound quality.
    • ANC is supposed to be good.
    • They come in beige, enough with boring black tech gear. (all right this is by no means a technical feature …)

    If those suck as well … I’m currently out of options.

  • penguin 10:23 on 2020-05-06 Permalink | Reply
    Tags: ,   

    Homebrew, OpenSSL and PowerShell 

    On Mac, PowerShell really, really wants to specifically use OpenSSL version 1.0.

    Unfortunately, homebrew switched to OpenSSL version 1.1 in v2.2, because OpenSSL 1.0 is end-of-life.

    This fixes it (for now at least):

    brew uninstall openssl --ignore-dependencies
    brew uninstall openssl --ignore-dependencies
    brew install


  • penguin 12:24 on 2020-04-26 Permalink | Reply
    Tags: , ubuntu, updates   

    Ubuntu update procedure 

    Brain dump.

    # from here:
    apt-get update && apt-get --with-new-pkgs upgrade 
    # restart
    # do it again
    apt-get update && apt-get --with-new-pkgs upgrade 
    # remove shit
    apt autoremove
    # done.


  • penguin 09:49 on 2020-04-26 Permalink | Reply

    Coding fonts 

    This is a list of popular coding fonts. My personal favorites are marked in bold.

    As for “why” … Consolas and Menlo are just super smooth. Right weight / height / spacing / proportions. You can “just work” with them and it’s never wrong. At the moment I think JetBrains Mono is just this tiny bit better, even if only for the ligatures.

    Honorable mentions go to Iosevka, which is a bit strange, but very narrow so you can fit a lot in the available screen width.

    The rest is not bad, I just keep circling back to one of the mentioned alternatives within minutes usually. Personal style might differ.

    • Consolas – Windows proprietary.
    • Menlo – Mac proprietary.
    • Jetbrains Mono – brew cask: font-jetbrains-mono
    • Fira Code – brew cask: font-fira-code
    • Hack – brew cask: font-hack
    • Monoid – brew cask: font-monoid
    • Iosevka – brew cask: font-iosevka
    • Inconsolata – brew cask: font-inconsolata (broken?!)
    • Source Code Pro – brew cask: font-source-code-pro
  • penguin 23:18 on 2020-04-25 Permalink | Reply
    Tags: , , , nextcloud   

    nextcloud and Docker and reverse proxies 

    I have a nextcloud setup like described here (docker-compose, let’s encrypt proxy companion, postgres and nextcloud). And for a while I couldn’t connect any new nextcloud clients to the installation.

    This fixed it:

    $CONFIG = array (
      # manually added because it's not picked up from
      # the env vars once set ... it seems ...
      # the docker IP range
      'trusted_proxies' => [""],
      # the hostname of the server
      'overwritehost'   => "my.super.secret.server",
      # the ENDUSER->PROXY protocol, NOT the proxy-> nextcloud protocol!
      'overwriteprotocol' => "https",
      # AAAND NOW back to the original config file ...
      # ...

    Some notes:

  • penguin 20:39 on 2020-04-19 Permalink | Reply
    Tags: avm, fritzbox, home network, unifi, usg   

    FritzBox, Unify Security Gateway, and router replacements 

    My respect for network changes went up two or three … hundred notches.

    What happened. At my mother’s place, there was a German FritzBox, which handles a VPN between my place and hers, phone lines, the doorbell, WiFi, DHCP, and maybe even more. Now we rent our parts of our house with AirBnB, and those people want – WiFi.

    I don’t want them to be in the same WiFi as myself and – more important – my mother, also I wanted to manage the whole house-WiFi from one central place. Unify / Ubiquity does a great job of delivering really capable products to a reasonable price, so I went for it. During the whole weekend (really, every waking second except for two 10k runs to get the anger out of my system) this is what I learned:

    • This article about how to configure a FritzBox to just do the modem part is still and fully correct for 1und1 in Germany.
      • FritzBox PPPoE passthrough might not work if the model is too old. It won’t tell you anything.
      • You don’t need to set a VLAN ID in the USG then.
      • You do not need to prefix the 1und1 username with “H”, at least for my contract.
    • You must not configure any duplicate IPs in the Unify Control Center, ever. The thing works declaratively – if you hit “apply” or “save” the Control Center tries to create this scenario.
      • What do I mean? I configured the local “network” in the USG with the existing router/gateway IP. But when hitting “save” the USG is immediately configured to use that IP, battling the FritzBox, and provisioning will fail.
    • A FritzBox cannot connect two site networks without the usage of the proprietary “MyFritz” service out of the box. You have to tinker. Which sucks. (Really, AVM?! No site2site VPNs without MyFritz?!)
      • This is the last open item btw, this is the only thing I couldn’t rebuild so far.
    • “systemd-resolved” really want to use DNSSEC. It shouldn’t when using a USG as name server though.
    • /etc/systemd/resolved.conf does not like comments after settings (“THING=value # with a comment behind” will not work)
    • cron jobs are “out”, using systemd timers is “in”.
    • a systemd timer has to be treated the same way as a systemd service (“systemctl enable thing.timer ; systemd start thing.timer“)
    • systemd really wants to do everything
      • … but I kinda like it, it’s one thinking behind everything, and really flexible
      • … if it works.
      • … which it sometimes really doesn’t
      • … and then you have no f*cking clue why.

    In the end, I’m about 90% there. The results are very, very good – Unifi does a great job in providing ready-for-use products which satisfy SMB requirements just fine. Some annoyances, well, really solid and flexible and insanely useful nonetheless.

    • someone 10:27 on 2020-08-21 Permalink | Reply

      also no client2site with OS X clients without myfritz. Using port Forwarding and an appliance now – to have at least some open source standards. The RPI 4 8GB RAM even has enough QoS for that.

      • someone 10:32 on 2020-08-21 Permalink | Reply

        could maybe even run on stock ubiquiti hardware. With a single apt-get install…

  • penguin 22:23 on 2020-04-16 Permalink | Reply
    Tags: camel, , , success   

    A more peaceful rant about Java & Camel 

    I did it. I feel like I survived something, like I am on the path on enlightenment (and it feels like raising the foot for the first step in a yourney which I know to be several AEs long). Anyway, I’m kinda happy.

    What did I do? I succeeded to write this Java code using the Apache Camel library (and yes, that’s it – in total):

    import org.apache.camel.main.Main;
    public final class CamelPusher {
        private CamelPusher() {
        public static void main(String[] args) throws Exception {
            Main camelMain = new Main();

    Impresive, huh?

    What took me longest was to add the “file:” in the line camelMain.configure().withXmlRoutes("file:*.xml");. Yup, really.

    Code-wise, that is. It took me even longer to set this up:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="" 
      xmlns:xsi="" xsi:schemaLocation="">
      <description>The thing that transfers payment files to OC</description>
        <!-- -->
        <!-- -->
        <!-- -->
              <!-- -->
              <!-- fucking maven shit honestly those java assholes suck so badly -->
            <!-- see here: -->
              <execution>            <!-- Run our version calculation script -->
    <!-- I FUCKING HATE MAVEN. -->

    And this, cause maybe I still don’t fully get maven (and with maybe I mean definitely, and yes I know there’s an error in the Makefile, I’m gonna fix it – later):

    all: clean build prepare-test test
    .PHONY: all
        rm -rf tmp
    .PHONY: clean
        mvn package
    .PHONY: build
    prepare-test: clean
        mkdir -p tmp/from_here tmp/to_here tmp/and_from_here tmp/to_here_as_well
        echo deeply > tmp/from_here/i-want-to-be-moved.txt
        echo deeply > tmp/and_from_here/hashtag-metoo.txt
        cp target/camelocclient-SNAPSHOT.jar tmp/
        cp test-config.xml tmp/
    .PHONY: test
        cd tmp; pwd; java -cp . -jar camelocclient-SNAPSHOT.jar
    .PHONY: test
    run: test
    .PHONY: run
    .PHONY: _git_dirtycheck
        [[ ! -z "git status -s" ]] || (echo -e "\n\n***** working dir is dirty. *****\n\n" && false)
    .PHONY: _major
    _major: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.nextMajorVersion}.0.0 \
    .PHONY: _minor
    _minor: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.nextMinorVersion}.0 \
    .PHONY: _patch
    _patch: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion} \
    .PHONY: _set_version
    _set_version: _git_dirtycheck
        read -p "new version: " VERSION ; \
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=$$VERSION \
    .PHONY: _snap
    _snap: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
    .PHONY: _tag
        git commit -am "Version bump"
        mvn build-helper:parse-version exec:exec
    .PHONY: _snap_tag
    _snap_tag: _snap _tag
    .PHONY: _addsnap
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.incrementalVersion}-SNAPSHOT \
    .PHONY: _release
    _release: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.incrementalVersion} \
    .PHONY: major
    major: _major _tag build _snap_tag
    .PHONY: minor
    minor: _minor _tag build _snap_tag
    .PHONY: patch
    patch: _patch _tag build _snap_tag
    .PHONY: addsnap
    addsnap: _addsnap
    .PHONY: rel
    rel: _release _tag build _snap_tag
    .PHONY: release
    release: rel
    .PHONY: set-version
    set-version: _set_version _tag build _snap_tag
    .PHONY: setver
    setver: set-version

    So this is it. That abomination took me days to build.

    So now I can do “make release“, get a .jar file, and place something like this next to it:

    <?xml version="1.0" encoding="UTF-8"?>
    <routes xmlns="">
            <from uri="file:from_here"/>
            <to uri="file:to_here"/>
            <from uri="file:and_from_here"/>
            <to uri="file:to_here_as_well"/>

    … having a freely configurable, all-purpose, no-nonsense Camel engine to my disposal, which I can then deploy to any host of my liking to do things which are useful. In that case – it’s supposed to transfer files (the “left” side of the system, a couple of deployments) to S3, and then pull them out (the “right” side of it, one deployment) into a folder on a target machine.

    This is it, this is all, this is basically the most trivial use case ever invented, and it’s supposed to be replaced with something “real”. Let’s see how long it takes to get there.

    Now, am I happy? Yes. Is this … “good”? No. Does it work? Probably (it does with a file server / sftp transfer system).

    But the best part is: I kinda, sorta understand a little bit of what I did. And I am starting to think that Camel might actually be awesome, and maven actually useful – once you start understanding the concepts and ecosystem. But that’s just a vague possibility, given that I still don’t 😉 .

    I published the files here as well.

  • penguin 17:47 on 2020-04-13 Permalink | Reply
    Tags: ,   

    A big fucking rant about Java 

    Well, I’m back to writing Java. It was supposed to be simple – an Apache Camel .jar file which just reads the route definitions from a nearby *.XML file in the same directory. So it can be re-used, because we have a couple of dead simple use cases which just require a Camel runtime and no special Java Beans.

    Simple, right.

    I’m playing Doom Eternal for fun at the moment. And just thinking of this abomination called “maven”, which Java uses to build shit makes me wish for all maven devs to rot in hell eternally. This piece of junk is basically undocumented. Don’t get me wrong, theres tons of written stuff, intros, tutorials, etc. about maven. It’s just after reading all of them you’re still the same code-copy-pasting monkey you were before. Once you hunted down the snippet on Stackoverflow you go on to the next blackbox.

    Examples? Sure.

    • Versions in build plugins. Maven complains, but countless examples I found don’t use any version. (A Java illness, it seems all examples have to be incomplete, otherwise it’s no fun for the developer, right?).
    • Complexity. You can configure the versions-maven-plugin to update the version numbers. To ignore alpha / beta / whatever versions you have to write a regex expression in a separate file and import that to the pom.xml. Of course you write the import statement in the configuration section of the plugin. Writing the rules in there? Naaaaah, too easy my friend. Extra file please.
    • Commands. There’s no help. There’s only “plugins”. No starting point, no idea what’s “default” and what the 1, 2, 3 steps are to get your app built. Just a bunch of horseshit you try out until your app is built. Or you think it is. (Or back to Stackoverflow, take the first example that works and go on to the next blackbox …)
    • Reposities. It seems I built my app several times correctly, then I configured some repositories, and suddenly it was built … more correctly. Don’t ask me why.

    Let’s continue with Spring. They once were (and probably still are) on the forefront of “modern”, modularized, reusable, enterprise-pattern-enabled, lightweight Java. Problem is, that’s still way too complex for any sane human being.

    Examples? Sure.

    • Configuration. I try to use Apache Camel. Seems to be a great product, all is configurable using either Spring DSL or code. Now if you want to do it with Spring, until today I invested days to find out how to read the fucking configuration from that god-damned configuration file. It’s just. Not. Possible. Sure, countless examples on the net, but that leads me to …
    • the documentation. Just some random notes:
      • The examples there are just don’t cut it and come basically without any documentation.
      • All links which sound like they could help lead to a 404 page.
      • “if you want to do X you can ‘easily’ do this using Spring XML” is a sentence I want to burn now, because … well, there’s no example, usually. You’re just being redirected to some Spring page which explains the Spring concepts in epic detail, with no connection whatsoever to the actual problem with the actual fucking library.
      • If they include a code snippet it’s always without any context. So you have the critical 3 lines, but if you want to include them into an actual application, you wonder about imports, namespaces, setup boilerplates, and countless other things every. Single. Time.
      • In summary it seems the docs are there for the pros who want to just quickly look something up they inconveniently forgot cause they already know a shit ton of shit. If you’re new to this? Yeah, go ahead, it’s easy, here’s a link to the Spring concepts.
      • Oh yeah, and it might be it’s just plainly, utterly, horribly wrong. But Java being nothing but enterprise, it’s at lease consistently wrong all the time.

    I think I managed to solve the problem just now. Unfortunately this cost me days, and only because of the most brainwashed, brainfucked eco-system I can imagine.

    (Disclaimer: I think Java has some really cool parts as well, just right now – I honestly don’t care. At all.)

    • oscerd 06:21 on 2020-04-14 Permalink | Reply

      All your findings about the first experience with Apache Camel may be really useful if reported to the users mailing list or dev mailing list. It would be valuable improve this experience from a documentation perspective. So, if you have time, it would be nice if you report back to the community mailing list.

  • penguin 19:27 on 2020-03-29 Permalink | Reply
    Tags: data sources, sars-cov-2   

    SARS-CoV-2 (“Corona”) Data Sources and APIs 

    Last update: 2020-04-01

    You just have to write about something, and it changes. In this case, that’s pretty good 🙂 . So here’s a list of APIs and data sources for the CoV-2 pandemia.


    Data sources:

    Dashboards and visualizations:


compose new post
next post/next comment
previous post/previous comment
show/hide comments
go to top
go to login
show/hide help
shift + esc