Excavating my former homepages

Someone, a long time ago came up with the thought that whatever is put on the internet, it'll be there forever. Well, it's wrong. The old versions of my own website, including their design, was long gone, so I decided to put the Indiana Jones hat on, and started digging.

It's early 1999. I'm 13 years old, just entered high school1. Altavista is still a decent search engine. At this point I've been using the web for years, but never really participated in making it yet, and it was about to change. The idea of having a homepage stuck with me: I could make my own design, my own little world, without limits, with any kind of content I want to, without anyone supervising. This was such an exciting prospect that it had to be done. Plus: it was open for anyone, like instantly hanging your work in an art gallery!

Long story short, I did that website. And the next one, and the next one... and I kept going till this very day. The tragedy of it is that due to multiple reasons, the first two iterations and designs of my site are now completely lost.

Back in those days my English skills or my "programming" skills were quite lacking. I never heard the idea of version controlling, digital archiving, snapshots - these came so much later. Hungary tends to teach foreign languages with an overwhelming amount of grammar, resulting in a nice, but unusable skill when someone wants to explore the internet.

Put these and the options on the mid 90s web together - generic Hungary is always around 5 years behind the English speaking world in internet trends. My first sites were made with Microsoft FrontPage 98, FTP-d directly into "production", always overwriting the tiny, free space on free homepage providers, hopping from one to another, because the new one offered 5MB for free, not just 1.

1999 - 2003 - the FrontPage years

When I decided to go after the old versions of my gazillion URLs, I first turned to archive.org, like everyone would. For my gigantic surprise, after remembering that the provider extra.hu had subfolders, and not sub-domains, I found a version from May 2001! A year earlier than my earliest archive! Sadly, it was the already on it's third design, and because archive.org didn't have the images from back then, it wouldn't have mattered anyway.

The good news was that my site at this point was static HTML, so "recovering" it was simply opening the files. Did you know web browsers still support frames?

I went through this version quite a few times lately, and I alway overlooked a section, in which I had a review of an Ericsson T29s - including notes on how to hack a data cable for it, downloadable programs, full eeprom and flash binaries, and a fascinating note of:

I'm utterly tired that there are only ads on every page, and no real stuff, so I thought I'll put some here, based on my own experience

Again, this is roughly 2002. It's good to be reminded by my own words, that the internet had this problem for a very long time by now.

I decided put the review back up - look under the IT tab -, even though chances that someone is looking for these is converging to 0.

2002 design - tables, absolutely no accessibility, but hey, the content was already about tinkering with phones, and the colour palette looked very similar to my current dark theme.
2002 design - tables, absolutely no accessibility, but hey, the content was already about tinkering with phones, and the colour palette looked very similar to my current dark theme.

2004 - the PHP4 years

To access the 2004 version, magic has to be called upon - also knowns as virtual machines. I had to spin up a Debian Sarge2, because I needed PHP4 - immeasurable kudos for the Debian archives3 for still having install CDs, and working software repositories! The only trick is that during the install the apt mirror needs to be set to archive.debian.org.

I barely remembered this version. It also made me realize that I was microblogging, before it even became a term - although as Kevin Marks4 pointed it out on the indieweb-chat channel on Freenode, everyone was microblogging at first: the idea of one page per entry came later.

After not too much digging I found two more phone reviews, also with a lot of background content - in case you're after an 50KB mobile Java email application, I have one for you.

2004 - the layout probably worked in IE5 and nothing else
2004 - the layout probably worked in IE5 and nothing else

Instead of webrings, in Hungary, we regularly exchanged banners with eachother: small images, that linked to another site; sort of a graphical blogroll. Contrary to mathematical probability, I found a banner that is still alive! 16 years and still strong: the Hungarian Stargate fan site5 deserves some attribution for that banner6

2007 - 2009 - the custom CMS with friends years

2007 brought a massive change: I wanted to make the site tiny a community site, a place to where my close friends could also upload photos, short stories, art.

3 years meant PHP5, so I spun a Debian Etch7 up. These were the days when I had my custom, PHP-based CMS, of which if I looked at the code of; it's proper nightmare material.

The relevation of the 2007 version was the amount of photos I sort of accidentally removed from my site. In the coming years my site slowly morphed into a portfolio for my photos and my sysadmining skills. When I finally reverted, and swapped from curated, small galleries to a stream of individual images, I never put the old portfolio back. This will need to be addressed.

Related to this, I came across Ana's "Blogging and me" post at https://ohhelloana.blog/blogging-and-me/ . She went through very similar cycles as I did: a website first, blogging of anything, that gradually became a hyper-focused, work-only site, which then got neglected, because it wasn't fun any more. Read it. If you didn't (yet) had these cycles, or if you already did; in both cases, it's a fantastic piece.

Such design, much images. Also, curves! Curves everywhere! Regardless, I believe this was a pleasent to look at design and colour combination, plus those photos are all missing from my site at the moment o.O
Such design, much images. Also, curves! Curves everywhere! Regardless, I believe this was a pleasent to look at design and colour combination, plus those photos are all missing from my site at the moment o.O

2008 - 2013 - the portfolio years

Parallel to th community site idea, I wanted to have a portfolio site; one that is professional content only. At that point, I still believed my life will have something to do with photography, so I made a photo portfolio site under the new domain petermolnar.eu. My name is quite a common one in Hungary, but the .eu domains were new, and I grabbed it immediately.

During these years I actively participated in an alternative community in Hungary. I wrote some articles to their site, which are still up, to this very day, but the idea to put those on my own site (as well) didn't occur to me.

In 2010 , the limitations of my CMS collided with the fact that I lost touch with most people who had some content on that community site. I decided to close it, and turn my full attention towards a personal site - by switching it to WordPress.

Soon after college (2009), I ended up working as a sysadmin; it made sense to start writing my findings, my how-tos (mostly for myself) down.

With that, I've thrown a silly amount of old content away. No thoughts or personal blog entries any more: streamlined photo portfolio, photo equiment review - this one never even took off; the 2 entries I wrote for it are so low quality that they were not worth salvaging -, and a sysadmin blog is the way to go! I should never have done that, but these were the early Facebook years; everyone was doing personal communication in social silos. It seemed like a good idea that time. Mea culpa.

I did try cross-posting and syndicating early on: links to new entries to twitter, to facebook, but soon it looked overwhelming. When the same content goes everywhere, and you happend to have a large cross-section of the same people on each silo, it'll be too much for them.

First iteration of my very own WordPress theme - along with the immeasurable changes of finally moving to my own domain, with only professional-ish content
First iteration of my very own WordPress theme - along with the immeasurable changes of finally moving to my own domain, with only professional-ish content

Slowly, but steadily, topics and sections kept creeping back in. At first, it was merely a photoblog tab, in which I put collection of images grouped by a topic. It took me a while to realize I didn't like it that way: without context, the galleries were distant; they didn't feel like memories, more like and extended, endless portfolio, yet I kept going with it for years.

Second WordPress theme from somewhere in 2011
Second WordPress theme from somewhere in 2011

By the end of 2013, I was back to having a "world view" section that was to become "journal". The trigger for this was our relocation to England: there was an irrepressible urge to write about our new life.

Thankfully the streamlining didn't stick and the site kept getting more content sections back
Thankfully the streamlining didn't stick and the site kept getting more content sections back

2014 - 2017 - The features and contents years

Sometimes in 2014 I stumbled upon the indieweb8 community. With that, my site started to get features - and a lot of them.


See those bubbles? Those were mainly comments, backfilled from Facebook.
See those bubbles? Those were mainly comments, backfilled from Facebook.
Calculated read time; I believe medium.com brought it in.
Calculated read time; I believe medium.com brought it in.
I still had my photo portfolio as well. It was already a responsive design; on mobile, it because a simple list of full-width images.
I still had my photo portfolio as well. It was already a responsive design; on mobile, it because a simple list of full-width images.

Once you read too many studies on the internet you may start questioning your own experiences with certain things. One of these is the "light on dark" vs "dark on light" representation when it comes to computers and the web. To obey this, I started presenting text content in light, photo content with dark background and themeing; a route I should never have taken.

During the 15 years prior to this, my site was dark. This page is supposed to be my home, and it's supposed to represent me on the internet. And I'm not a light background person; I never was. When I still used Window XP it looked like this:

The bottom is a launcher bar, not opened applications.
The bottom is a launcher bar, not opened applications.

Even so, for the coming years, the design went lighter and lighter.


Painfully bright, and never felt like my own. Plus there was a huge stream of content: bookmarks, quotes, twitter reply copies, etc. I turned my site into a stream, and the more content it had, the more distant it felt, the less of a homepage it became.
Painfully bright, and never felt like my own. Plus there was a huge stream of content: bookmarks, quotes, twitter reply copies, etc. I turned my site into a stream, and the more content it had, the more distant it felt, the less of a homepage it became.


In 2017, I found the icons I'm using till this very day, but I still had the dreaded light design. Plus I added even more content, including the idea to backfill EVERYTHING I ever made on the internet. Needless to say this idea was later reveted, though without the journey, I may never have realized why it was bad.
In 2017, I found the icons I'm using till this very day, but I still had the dreaded light design. Plus I added even more content, including the idea to backfill EVERYTHING I ever made on the internet. Needless to say this idea was later reveted, though without the journey, I may never have realized why it was bad.

2018 - back to the roots: dark, static, simple.

Content was dropped, and I again, felt like I have a homepage, and not a one person social media site.

Back to the darkness. Still not the best, but much less strain on my eyes.
Back to the darkness. Still not the best, but much less strain on my eyes.
Turned out the studies were right about a few things, and that for some, light on dark is unreadable. So for everyone to be happy, I added an option to switch between them, making the dark, or the operating system setting the default. I also tried to make it look like some really messed up terminal. It didn't work.
Turned out the studies were right about a few things, and that for some, light on dark is unreadable. So for everyone to be happy, I added an option to switch between them, making the dark, or the operating system setting the default. I also tried to make it look like some really messed up terminal. It didn't work.

And thus we arrived to 2020, and you're looking at the freshest, most current iteration of my website.


I think at the beginning I started to dig my sites up to verify how much have I gone back to my roots. To see how it started, how it done, when it was solely for the fun. Ana's post, which I already mentioned9 was definitely a trigger to take this journey.

I lost the first two designs. I remember the very first vividly, with the water-like repeating background. The second I completely forgot about, and only had some reminders in words, from a microblog entry, from 2001, when I was being happy replacing it with something fresh and new.

My conclusions are simple: your homepage is called that for a reason. It's a poster, a gallery, a window to you, out for anyone to visit, to see. Show everything; show all the topics you're interested in, drag all the posts from decades ago, and only police the ones that are truly outdated - if there are any. It's not a social media profile. It's not a resume. It's you.

  1. https://en.wikipedia.org/wiki/Education_in_Hungary

  2. https://cdimage.debian.org/mirror/cdimage/archive/3.0_r6/i386/iso-cd/

  3. https://cdimage.debian.org/mirror/cdimage/archive/

  4. http://www.kevinmarks.com/

  5. http://www.csillagkapu.hu/

  6. http://www.csillagkapu.hu/img/agbanner.gif

  7. https://cdimage.debian.org/mirror/cdimage/archive/4.0_r0/i386/iso-cd/

  8. https://indieweb.org/

  9. https://ohhelloana.blog/blogging-and-me/

Fri, 26 Jun 2020 21:55:00 +0100

2020-06-10 10:15 UTC+01:00

This post is a reply to: https://ohhelloana.blog/blogging-and-me/

Ana, this is a wonderful post. It covers a journey, with invaluable takeaways; thank you for writing it. This response is just replies to bits and pieces from it.

I recently went through archived versions of my site. The contents, and the generic ideas followed the path of:

Therefore I believe the wave you went through is not at all unusual, and many of us made similar mistakes by trying to take too much away from our sites.

You’re more than your job title! You’re a whole person!

Please make this big, bold, and allow it to stand out - that is a very important sentence :) Especially considering:

So, unconsciously, I started to ignore my interests in order to fit in with the rest.

I began to feel guilty for having fun in my free time - one time, one co-worker asked me what were my plans for the weekend and when I said it, his reply was: “maybe you should stay at home reading a javascript book”.

Years ago I read an article on how Instagram is reducing us to a single aspect of ourselves, because an account is only successful if it's streamlined to a single aesthetics. It's sickening how many people started living like this, believing sentences like these. We're not simple creatures, we should never, ever, focus on a single aspect of possibilities.

“Share what you learn. And the best time to share is while you’re learning it. (You’ll have a voice in your head saying ‘Everyone knows this already’... Ignore that voice.)”

This is probably the reason why I never had the issues with my tech entries: I always thought about them as my personal notes, and how-tos, so it didn't matter if it was done before or not, or if it was perfect or not - it's how I did it. Most of them were results of hours, days, weeks of works, so regardless of the content, it certainly felt mine.

Treat it like a hobby. If your hobby is cooking, you don't expect to have an audience in your kitchen whenever you're baking right? Treat your blog the same way. Do it for yourself.

I'd go one step further: treat it like your virtual home. Like a homepage.

As I said before: you’re more than your job title. Don’t know what to post? Here are some ideas: Today I learned, travel, cooking, job stuff, thoughts, “retrospectives”, experiences, just photos. EVERYTHING IS VALID.


The Wayback Machine is there to remind me that everything you do on the internet, stays on the internet forever.

If only that was true. I spent countless of hours looking for long lost websites from the ancient Hungarian internet (read: pre 2002), disappeared photo albums of summer rock festivals, forsaken blogs. No, the internet forgets. Everything decays. I lost the first 2 iterations of my website completely - '99 and 2000 versions -; I can't even find traces of it. A few paragraphs later you mention:

There were a few more tweets from other people that were very important to me but because they were posted around 2013 -2015 I just couldn’t find them anymore.

So the problem is real.

I remember loving Dynamic Drive

copy-pasting mouse trailing bouncing balls in JS was a big thing
copy-pasting mouse trailing bouncing balls in JS was a big thing

There was also https://www.hotscripts.com/.

“I miss the useless web. I miss your grandpa’s blog. I miss weird web art projects that trolled me. I miss fan pages for things like hippos. I wish I didn’t feel like the web was collapsing into just a few sites plus a thousand resumes.” Sarah Drasner, https://twitter.com/sarah_edo/status/1013427276350873600

I recently discovered https://wiby.me. Whoever made it brought the web 1.0 back into my life. Just start pressing "surprise me...", it'll land you on a forsaken site left behind by the first settlers of the internet.

Wed, 10 Jun 2020 10:15:00 +0100

Refactoring my static generator

Some years ago I decided to walk away from dynamic website in pursuit of something that feels a bit more, like the small web, and what's more fault tolerant for the future. Unfortunately my solution overgrew its promise so it was time for some reaping.

A few weeks ago I sat down in front of my site and realized: it's doing too many things, the code is over 3500 lines of Python, and I feel lost when I look at it. It was an organic growth, and happened somewhat like this:

Let's start simple: collect images, extract EXIF using exiftool1, watermark them, if needed, resize them, if needed. Collect markdown files, convert them to HTML with pandoc2 using microformat friendly templates. Ah, wait I need categories. I also need pages. And feeds. Multiple feeds, because I'm not going to choose sides, RSS, Atom, JSON, hfeed. Let's make all of them! I'll even invent YAMLFeed3 for the lulz. I need webmentions. Receive them, create comments before rendering anything, then render, then sync, then send outgoing webmentions. Oh. Don't send them every single time, just on change. I need to publish to flickr, but I need to be able to backfill from brid.gy. Let's handle gone content properly, also redirects nicely. Let's try JavaScript based search. Or let's not, it's needs people to download the full index every time, let's do PHP from Python templates instead. Google zombies are doing JSON-LD, academics are doing Linked Data, let's do all that. Hell, let's make an intermediate representation of all my content in JSON-LD that is made from the Markdown files before it hit's the HTML templates! In the meanwhile, why not auto-save my posts to archive.org? But what if I already did it? Let's find the earliest version automagically! OK, this is a bit slow now, let's start using async stuff. Let's syndicate to fediverse via fed.brid.gy. I don't like my pagination logic, let's do some categories flat: all on one page; others paginated by year. I want to add something funky for IWC this year, I'll add a worldmap for photos with location data. I see federated things are pinging .well-known locations, let's generate data for them.

I'm not certain if this is the whole list of features, but it's quite clear it has overgrown it's original purpose. In my defense, some of these functionalities were only meant to be learning experiences.

DRY - don't repeat yourself

I started with the most painful point. The previous iteration had a source directory for the content, with the unprocessed, original files, a nasg for the code, and a www for the generated output. What I should have done from the start it to have 1 and only 1 directory for everything.

The main reasons for the original layout were to keep my original - quite large - images safe on my own computer, copy only the resized and potentially watermarked ones online. The other was to keep the code in it's own repository, so it can be "Open Sourced". Why the quotes: because I've started to question what Open Source means to me and what it is right now in the world, but this is for another day.

The more I complicated this the more I realized all these disconnected pieces are making the originally simple process more and more convoluted. So I made certain decisions.

My generator code is not going to live on Github any more. Instead, it'll be in the root folder of my site content, which will also be the root folder for the website. I'll generate everything in place. I'll move the original images to be hidden files and protect them via webserver rules, like I did in the WordPress times. I'll place the Python virtualenv in this directory as well.

With the move to a single directory structure I also moved away from the weird path system I ended up with: direct uris for entries and /category/ prefixes for categories. Now everything always is /folder/subfolder/ etc, as it should have been from the start.

It needed some rewrite magic to have it done properly, but it should all be fine now.

Parsing should be stiff and intolerant

When I saved markdown files by hand, I wasn't paying too much attention to, for example, dates. The Python library I used - arrow - parsed nearly everything. This also applied to the comments, but the comments were saved by my own code: missing or null authors, bad date formats, etc.

With the refactoring I decided to ditch as many libraries as possible in favour of Python's built in ones, and datetime suddenly wasn't happy.

I fixed all of them; some with scripts, others by hand. Than swapped to a very strict parsing: if stuff is malformed, fail hard. Make me have to fix it.

No workarounds in the code, no clever hundreds of lines of fallbacks; the source should be cleaned if there is an issue.

Not everything needs templating

In order to have a nice search, I had templated PHP files. Truth is: it's not essential. Search is happy with a few lines of CSS and a "back to petermolnar.net" button.

My fallback 404.php can now rely on looking up files itself. Previously I had removeduri.del and some-old-uri.url files. The first were empty files, with the deleted URIs in their names; the second contained the URL to redirect to. Because of the content and www directory setup, I had to parse these, collect them, and then insert in the PHP. But now I had the files accessible from the PHP itself, meaning it can look it up itself.

This way both my 404.php and my search.php became self-sufficient - no more Python Jinja2 templates for PHP files.

Semantic HTML5 is a joke, JSON-LD is a monster, and I have no need for either

Some elements in HTML5 are good, and were much needed. Personally I'm very happy with figure and figcaption, details and summary, and time.

I findheader, footer , and nav a bit useless, but nothing tops the main, section, article (and probably some other) mess. There's no definitive way of using one or the other, so everyone is doing which make sense to them4 - which is the opposite of a standard. Try to figure out which definition goes for which (official definitions from the "living" HTML standard):

The X element represents a generic section of a document or application. The X , in this context, is a thematic grouping of content, typically with a heading.

The Y element represents a complete, or self-contained, composition in a document, page, application, or site and that is, in principle, independently distributable or reusable, e.g. in syndication.

The Z element represents the dominant contents of the document.

So I dropped most of it; especially because I have microformats5 v1 and v2 markup already, and that is an actual standard with obvious guidelines.

Next ripe for reaping was JSON-LD. I got into the semantic web possibilities because I was curios. I learnt a lot, including the fact that I have no need for it.

The enforced vocabulary for JSON-LD, schema.org, is terrible to use. Whenever you have a need for something that's not present already, you're done for, and it'll probably pollute the structured data results, because all the search engines, especially Google, are picky: they limit the options plus they require properties. Examples everything MUST have a photo! And and address! And a publisher! If you don't believe me, try to make a resume with schema.org then check the opinion of the Google Structured Data Testing Tool about it.

No, Google. Not everything has an image - see http://textfiles.com Like it or not, a website doesn't need and address. The list goes on forever.

I'm going to stop feeding it, stop feeding all of them, stop playing by their weird rules. HTML has link and meta elements, plus rel= property, so it can already represent the minimum, which is enough. Plus, again, there's microformats, and Google is still OK with them6.

Note: with structured data, in theory, one could pull in other vocabularies to overcome problems like nonexistent properties in one, but search engines are not real RDF parsers. Unless you're writing for academic publishing tools that will do so, don't bother.

Pick your format, and pick just one

Between 2003 and 2007 some tragic mud-throwing (mirror translated Hungarian phrase, just because it's pretty visual) was going on on the web, over something ridiculously small: my XML is better, than your XML! 7.

When I first encountered with the whole "feed" idea itself, there was only RSS, and for a very long time, I was happy with it. Then I read opinions of people I listen to on how Atom is better. https://fed.brid.gy is Atom only. Much later someone on the internet popped the JSONFeed thought.

When I first saw JSONFeed, I thought it's a joke. Turned out it's not, because there are simpletons who honestly believe the world will be better if things are JSON and not XML. It won't, it'll only result in things like JSON-LD

In the heat of the moment, I coined the thought of YAMLFeed8, strictly as a satire, but for a brief time I actually maintained a YAMLFeed file as well Do not follow my example.

And then I found myself serving them all. I had a Category class in Python, that had JSONFeed and XMLFeedsubclasses, which latter had AtomFeed and RSSFeed subclasses, it used FeedParser to deal with it, and so on... in short, I made a monster.

I went back an RSS 2.0 feed and a h-feed. The first can be made with the lxml library directly, and I always liked the RSS acronym.


If you have a website in 2020, it's probably a hobby for you as well; don't let anything change that.

It should never become a burden, any part of it. It did for me, and I seriously considered firing up something like Microsoft FrontPage 98 to start from the proverbial scratch, but managed to salvage it before resulting to drastic measures.

Don't follow trends. Once a solution grows deep enough roots - microformats, RSS, etc - it'll be around for a very long time.

Screw SEO. If you're like me, and you write for yourself, and, maybe, for the small web9, don't bother trying to please an ever-changing power play.

If you want to learn something new, be careful not to embed it too deep - it may be a fast fading idea.

  1. https://exiftool.org/

  2. https://pandoc.org/

  3. https://indieweb.org/YAMLFeed

  4. https://www.w3schools.com/html/html5_semantic_elements.asp

  5. http://microformats.org/

  6. https://aaronparecki.com/2016/12/17/8/owning-my-reviews#historical-recommendations

  7. https://indieweb.org/RSS_Atom_wars

  8. https://indieweb.org/YAMLFeed

  9. https://neustadt.fr/essays/the-small-web/

Mon, 01 Jun 2020 08:30:00 +0100

Rethinking, downsizing, and revisiting the idea of a home server

Lately I've found myself spending way too much time and effort on my home server while not solving any of the issues I uncovered. It was time to take a step back.

Over a decade ago I had a rented KVM. It had 128MB memory, negligible disk space, but it was enough to run some website and mailing. Eventually I bought a second hand 1U HP node, which was nice, but also near impossible to upgrade (SCSI disks, pricey, ancient ECC memory, etc). In 2012 I heard about Hetzner1 and had a rented server from them ever since, until a few months ago.

When we moved houses we had to switch ISPs. My beloved previous ISP, Zen2, due to the lack of fibre in the local exchange, could only offer 16/1Mbps ADSL, which is not enough for these days. The only speedy alternative with static IP was the dreaded Virgin Media Business. Unuware of all the mess it will bring into my life - their participation in the IWF block list, the fact that their "static" IP is a GRE tunnel3, the frequent outages caused by T3 timeouts4 triggering a router reboot that lasts 20 minutes, etc - I foolishly moved my services to my home server5.

With this move, apart from the reliability issues, I eliminated an important factor I had: off-site backups. I thought I can simply replace this with an external hard drive and monthly offline archiving, but other issues started to pile up. The home server lived under a cabinet, which is nice, but far from being physically secure. We were burglared once and got very lucky - barely anything was taken - it made me be aware of such events. That offline single copy is also in my house, albeit in a fire safe, and it certainly didn't contain up to date copies of the website data. Because we now have hard floor, and that the area is eerily quiet during the night, I heard the machine way too well at late hours.

Another trouble was FreeNAS. The goal of running FreeNAS was have a GUI that less technical people could use as well, but the moment I started using jails, custom devfs rulesets, etc., the FreeNAS interface became rather complicated immediately.

Then there were the failed ideas with the server's physical existence.

  1. I tried to make a "custom case" by putting all components in a drawer. It failed, because I failed to realize how much space cabling would need
  2. I was at the second "silent" fan - I have to tip my hat towards Noctua, their fans are actually pretty nice - but I still couldn't fit in properly in the case, which was meant to house some 10k rpm jet engines

    A silent fan in the iw-rf100s chassis, held in place by double sided tape
    license: A silent fan in the iw-rf100s chassis, held in place by double sided tape
    PENTAX K-5 II s
    Shutter speed
    1/60 sec
    Focal length (as set)
    35.0 mm
    ISO 400
    smc PENTAX-DA 35mm F2.4 AL

  3. I was constantly thinking of needing more drives to have RAID on everything
    The front USB3.1 ports converted into internal ones with an mSATA to USB converter and a 64GB mSATA SSD to RAID it with the 64GB SATA SSD
    license: The front USB3.1 ports converted into internal ones with an mSATA to USB converter and a 64GB mSATA SSD to RAID it with the 64GB SATA SSD
    PENTAX K-5 II s
    Shutter speed
    1/60 sec
    Focal length (as set)
    35.0 mm
    ISO 400
    smc PENTAX-DA 35mm F2.4 AL
  4. I bought car deadening mats6 to silence the machine, and while it worked a bit, it didn't nearly work well enough. 3.5" drives are NOISY, I forgot how noisy they are, because 20 years ago my computers at home were not running 24/7.
  5. I ended up puting a $5 DigitalOcean droplet as caching nginx proxy in front of the setup to prevent downtimes of the websites
  6. I spent days trying to find a better PC case

    The 1U server case needs an ultra low profile IO shield, which didn't come with a motherboard, given it's consumer grade - the one on the picture is cardboard with aluminium tape
    license: The 1U server case needs an ultra low profile IO shield, which didn't come with a motherboard, given it's consumer grade - the one on the picture is cardboard with aluminium tape
    PENTAX K-5 II s
    Shutter speed
    1/60 sec
    Focal length (as set)
    35.0 mm
    ISO 400
    smc PENTAX-DA 35mm F2.4 AL

... and the list goes on, so at this point I decided to take a step back.

The question I should have started with: what do I need?

Instead of thinking about "simplifying" by moving to a single machine, "saving money" by canceling the rented server I should answer the needs.

I need:

So let's go one by one.

A reliable 24/7 server and off-site backups: back to Hetzner

Hetzner is a wonderful provider, and though their hardware fleet is a bit aging now, it's still going strong. For roughly €30 a month, one can get a machine of with an Intel Xeon E3-1245, 2x Enterprise level 3.0 TB SATA HDD, 4x 4GB ECC RAM. That is more, than enough to run the services, plus the off-site backups.

I decided to stick to FreeBSD, mainly because of the smooth ZFS experience, and because it certainly feels ile oldschool sysadmining.

Backup server, local backups, Domoticz: home server revisited

I had some hardware lying around, namely a lot of 2.5" drives: an 1TB HGST Travelstar, a 2TB Samsung Spinpoint, an 1TB Toshiba SSHD. These used to be the drives in my previous home server, when it manifested as a ThinkPad T400 laptop, but when the 2TB Spinpoint started to throw ZFS errors, I panicked, and moved to 3.5" drives. Ever since then I ran amples of tests on that drive and never found any issue, so when this day came, it was time to add it back.

One of the pain points of trying to find a case was trying to find a board with enough SATA sockets and a case to commodate it. Truth is, if you get angry enough you realize that if you don't overdo it, USB is actually enough(ish). I also happened to find the Thinkcentre Tiny line of Lenovo, mainly the Thinkcentre M6007: these are low power, passively cooled, made to be thin client machines, but just enough to also be home servers. It has 2 USB2, 4 USB3, 2 DisplayPort, 1 Gbit ethernet, an m.2 slot (also a SATA slot, but it's unusable because of the heatsink), and it goes nicely with all the ThinkPads at home. I managed to source one on eBay for ~£60.

Lenovo ThinkCentre M600 with external hard drives, front view
license: Lenovo ThinkCentre M600 with external hard drives, front view
Shutter speed
1/60 sec
Focal length (as set)
35.0 mm
ISO 800
smc PENTAX-DA 35mm F2.4 AL

As for the disks, I had 3 USB2 enclosures, which was possible to glue on with a strong, double sided tape on the top of the case, e voilà, my ugly little duckling home server, that fits inside a drawer, near silent, and is working remarkably well.

Lenovo ThinkCentre M600 with external hard drives, side view
license: Lenovo ThinkCentre M600 with external hard drives, side view
Shutter speed
1/60 sec
Focal length (as set)
35.0 mm
ISO 800
smc PENTAX-DA 35mm F2.4 AL

Is it fast? No. But it does the job. And it's certainly faster than the WordPress I once ran on a HTC Desire mobile phone. Yeah, don't do that.

Lenovo ThinkCentre M600 with external hard drives, opened
license: Lenovo ThinkCentre M600 with external hard drives, opened
Shutter speed
1/20 sec
Focal length (as set)
35.0 mm
ISO 800
smc PENTAX-DA 35mm F2.4 AL
Lenovo ThinkCentre M600 - the ones with passive heatsink can't fit a 2.5" drive, there's simply no space
license: Lenovo ThinkCentre M600 - the ones with passive heatsink can't fit a 2.5" drive, there's simply no space
Shutter speed
1/20 sec
Focal length (as set)
35.0 mm
ISO 800
smc PENTAX-DA 35mm F2.4 AL

Note: during the external enclosure ventures I made an interesting discovery. The peak power use of any of my SSDs, both SATA and mSATA, is 1.5A on 5V, whereas the HDDs have peak 900mA8 (even though the sticker says 700mA on the HGST, 850mA on the Samsung, and 1A on the Toshiba). This is a rather serious problem when you take the USB3 port capacity into account, which is 900mA - making it unadvised to run external SSDs off them. The M600 has a "charging" USB3 port, which I'd assume if giving more power off, so I'm running the Toshiba off that, but I've given up on the idea of running SSDs over USB < 3.1.


Whenever there's a discussion about archiving, one of the important points is that the formats - physical media, file format, etc - should be something that is as future proof and/or as widely used as possible.

Due to the size of the things I'd want to archive - photos over a TB - I gave up on Blu-Ray. External hard drives, even if they are sub-par on performance9, are OK for write occasionally, maybe read in the future, so I got a 4TB Seagate USB3 hard drive. But what about the filesystem?

When I tried to copy from FreeBSD I realized having a common file system is, surprisingly, nearly unsolved. Ext3/4 is a no go on FreeBSD, ZFS is obscure for desktop and nonexistent on Windows; problems are similar with XFS, UFS, etc. I don't trust FAT and 4TB may even be over it's limits. Which left me with NTFS.

Due to the existence of ntfs-3g nearly anything - Windows, Mac, Linux, BSD, etc - can read and write NTFS, even if compression is on. (Note: don't turn ntfs-3g compression on. It's a serious resource hog.) Plus, unlike FAt, NTFS is POSIX compliant.

sudo apt install ntfs-3g

My drive was sdd, once I made a single partition, mounting it is:

sudo mkfs.ntfs -s "$(lsblk -d -o name,PHY-SEC | grep sdd | awk '{print $2}')" -f /dev/sdd1
sudo mount -o auto,users,permissions /dev/sdd1 /mnt/

And it's all good.

Media renderer

I covered this already in my previous entry under 'Raspberry Pi 3 as featherweight headless media renderer'10.

+ 1: addressing the router outages

Virgin Media had a nasty series of outages; 6 of them on every first quarter of the hour. Yep, it does sound like a cronjob. The annoying bit wasn't really the internet not being available but that whenever the router reboots, I lose my home network. So I started to look into way that I could reduce my reliance on the router to an absolute bare minimum and maybe even had a 4G connection as a fallback.

I still have my previous router from a relatively unknown manufacturer, AVM, a FRITZ!Box 349011 . AVM is an oldschool German manufacturer, meaning the have DOCUMENTATION on everything. Plus realiable and rock solid products.

I turns out that while the 3490 is a VDSL modem/router it can be easily put into Ethernet mode12 or even 4G over USB mode13. Unfortunately with Ethernet mode it is not possible to use the fallback to 4G in case of an outage option; it's either ethernet or 4G. It still gives me an option to connect a mobile phone with tethering in case Virgin has a really bad outage without needing to reconfigure a single device in my household.

In order to actually use the FRITZ!Box, I did the following in the Hitron router:

turn off port forwarding
turn off port forwarding
Turn off DHCP
Turn off DHCP
Turn off 2.4GHz Wi-Fi
Turn off 2.4GHz Wi-Fi
Turn off 5GHz Wi-Fi
Turn off 5GHz Wi-Fi
Point the DMZ option at the FRITZ!Box
Point the DMZ option at the FRITZ!Box
Set the FRITZ!Box to internet over LAN 1 mode
Set the FRITZ!Box to internet over LAN 1 mode
and set it to a static IP to eliminate potential issues with DHCP
and set it to a static IP to eliminate potential issues with DHCP

And with that, I have a NAT behind a NAT (yay?), 2 devices, but at least a reliable and nice solution if Virgin fails us again.

  1. https://hetzner.de

  2. https://zen.co.uk

  3. https://www.ispreview.co.uk/index.php/2017/11/uk-virgin-media-business-static-ip-users-suffer-unstable-broadband.html

  4. https://www.thinkbroadband.com/broadband/monitoring/quality/share/33a204abf691e1ed2e9dc2bac326be6f0f7298b1

  5. https://petermolnar.net/home-server-2019/index.html

  6. https://www.amazon.co.uk/gp/product/B01KZ5X7KO

  7. https://www.lenovo.com/us/en/desktops-and-all-in-ones/thinkcentre/m-series-thin-clients/M600-Thin-/p/11TC1MTM60010KH

  8. https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/product/hgst/travelstar-5k-series/product-manual-travelstar-5k1000.pdf

  9. https://community.wd.com/t/invalid-command-operation-code-write-same/242463

  10. https://petermolnar.net/lightweight-headless-media-player-raspberry-pi/index.html

  11. https://en.avm.de/service/fritzbox/fritzbox-3490/overview/

  12. https://en.avm.de/service/fritzbox/fritzbox-3490/knowledge-base/publication/show/106_Setting-up-the-FRITZ-Box-for-use-with-another-router/

  13. https://en.avm.de/service/fritzbox/fritzbox-3490/knowledge-base/publication/show/1205_Configuring-FRITZ-Box-for-internet-access-via-an-Android-smartphone-USB-tethering/

Mon, 04 May 2020 17:00:00 +0100

Raspberry Pi 3 as featherweight headless media renderer

After years of experimentation with modern media center software I gave up. As usual, the simpler, the better, and cleaner, so welcome back MPD and VLC, and welcome raspotify.

During the past years I've been trying to find a media center to accommodate my local data. Despite my efforts of gardening my music metadata properly, they all fail, mainly because it's far from a usual set of stuff. I have:

Despite the complexity, it's organised. If you open the library in a file manager, the layout is trivial and it's fairly simple to browse or find whatever you're after.

Most modern media centers which rely heavily on gathering data from the internet, fail hard: some never even find the movies - Plex1, I'm looking at you, especially since you became quite agressive with their you really ought to subscribe message. Others, with plugins and manual help, like Emby2, excel at movies, but simply overheat at music collections by trying to force everything in one folder into one album. Sithicus from Sanguis in Nocte is really not part of the 100 Best Trance Songs compalation.

Different solutions, like Nextcloud3 are already slow and heavy; adding media to it really doesn't help. Ampache4 feels dated, and no matter how many times I tried, I failed to properly set it up as DNLA/UPnP system.

Apart from the library issues, the other problem is DLNA/UPnP itself. If you're not familiar with the idea or the details, the short summary if the following every setup would have:

The server contains (or connects to) and manages the data and the library; the renderer shows the content; the controllers tells the renderer what to play. The problem is that my main renderer, an LG Netcast TV, is simple. It's so simple that it can about play wav, mp3, mpeg2, x264, and that's it. Things like flac, vorbis, x265, etc would all need to be transcoded. Plex doesn't support ogg and flac. Emby does, but the transcoding doesn't really suit a 10W TDP CPU that's already serving websites, and an NFS server. Whenever transcoding wasn't needed, like most of the music, the TV kept asking for permission at every.single.track. to allow to play if one was using a controller, and not the built-in media browser.

So I tried another approach: Kodi5, OSMC6, and LibreELEC7 on a Raspberry Pi. Again, they tried to be way too smart and complicated, and none of them offered a simple File Browser mode, or something like that. Also, all of them are oriented to either touchscreens or fancy remote controls.

Once I arrived at this point two thoughts popped up in my mind.

  1. I want have to make this simpler.
  2. Hang on, had I not done this once already?

Local music

When I first decided to run a home music center, I started with MPD8. MPD, while not that old, is still 17 years old. And it's rock solid. What it does: picks music libraries, plays them to various outputs, and allows to be remote controlled over the network. That's it. No metadata fetching daemons, no uber fancy web interface. And it can use nfs shares on the fly. And it has a browse files view.

apt install mpd


music_directory         "nfs://home.server/music/library"
playlist_directory      "/var/lib/mpd/playlists"
db_file                 "/var/lib/mpd/tag_cache"
log_file                "/var/log/mpd/mpd.log"
pid_file                "/run/mpd/pid"
state_file              "/var/lib/mpd/state"
sticker_file            "/var/lib/mpd/sticker.sql"
user                    "mpd"
bind_to_address         ""
port                    "6600"
auto_update             "no"
zeroconf_enabled        "yes"
zeroconf_name           "mpd @ rasbperry"
filesystem_charset      "UTF-8"

input {
        plugin "curl"

audio_output {
        type            "alsa"
        name            "ALSA"

There are plenty of clients to control it; on Android, I prefer M.A.L.P.9 whereas on desktop, gmpc10

M.A.L.P. on Android, showing access to Files
M.A.L.P. on Android, showing access to Files

I have a Topping MX311 connected to the Raspberry. In order to have that as default output, /etc/asound.conf needs to exists with:

defaults.pcm.card 1
defaults.ctl.card 1

Local video


omxplayer12 is a Raspberry Pi native player, which has a rather impressive performance, due to the hardware accelation it utilises on the Pi. While omxplayer itself doesn't have a HTTP interface, it can easily be started over SSH, plus there's and android app, OMX Remote (Raspberry Pi)13 which does exactly this for you.

It's a lot faster, than VLC, and certainly has less bugs.


UPDATE: I added the section under omxplayer - I had a lof of trouble with VLC after writing this article.

I'm aware Kodi & Friends have web interfaces, but that doesn't make them less wannabe smart. Then I remember that I used to have VLC14 with it's HTTP interface on as player.

apt install vlc dbus-x11

It's a little tricker to launch it on a headless system - meaning no X server -, but not that bad:


Description=Headless VLC service
After=network.target sound.target

ExecStart=/usr/bin/dbus-launch -- /usr/bin/vlc -A alsa --alsa-audio-device ${ALSA_DEVICE} -I http --http-port ${HTTP_PORT} --http-password ${HTTP_PASSWORD} --media-library


The dbus-x11 package contains the dbus-launch command, which allows the service to start in a non-x environment properly. The ALSA device selected in this case is the built-in HDMI; aplay -L gives the list of options.

Unfortunately, unlike MPD, VLC can't directly use NFS shares, so it needs to be mounted by hand by adding this to /etc/fstab:

home.server:/media/library /media nfs ro,hard,intr,rsize=8192,wsize=8192,timeo=14 0 0

Once done, with a remote control, like VlcFreemote15 on android, the whole filesystem can be browsed, including the NFS mount. This way there's not transcoding problem, no mis-identified media problem, and all the subtitles/tracks are available.

VlcFreemote on Android, showing the whole remote filesystem
VlcFreemote on Android, showing the whole remote filesystem


Yes, I use Spotify. Yes, I should buy albums. Trouble is: the CD is not that good business for the artist either, so unless I can buy on Bandcamp directly from the band, I'm ok with Spotify. I will, and always had been trying to go live gigs, because that is an actual support, plus a whole different, hopefully unique experience.

I mentioned I went down similar roads a while ago but that was before Spotify Connect appeared. I gave mopidy with it's spotify plugin16 a go, but it wasn't working nicely, so instead, I used to run the full fledged Spotify client in a mocked X environment with xfvb. Sometimes is worked. Sometimes.

Eventually I stumbled upon spotifyd17 and raspotify18. Tried both, with raspotify came out as winner - it shows up as speaker over Wi-Fi properly, allowing other accounts to use it and see it as well. It has nice install guide, and basicall doesn't need any special trickery to work.

Spotify on Android showing raspotify as a local network client for Raspotify
Spotify on Android showing raspotify as a local network client for Raspotify

A maybe-working DLNA/UPnP setup

The trial and search journey that dragged me across these experiences introduced a nice project: gmrender-resurrect19. This is a picked up and continued project of an old, abandoned software, GMediaRenderer, which was made to be an audio (and potentially video, but I still can't get that running, no matter, what) DLNA renderer for linux. Combined with pulseaudio-dlna20 it's possible to stream the audio of anything - in-browser youtube, etc - onto my speakers via the raspberry.

Unfortunately, pulseaudio-dlna itself can get rather choppy and slow; it works fine on my XFCE desktop, but not with my wife's Cinnamon.

If I ever make it work properly, I'm hoping I can add the codecs into gmrender itself, making the problem of the lack of codecs disappear, and use a simple minidlna21 to be my media server again. Talking about minidlna: it has a fork, that, in theory, can transcode if needed: ReadyMedia-transcode22.

Pulseaudio on XFCE showing network DLNA sound renderers as potential output devices
Pulseaudio on XFCE showing network DLNA sound renderers as potential output devices

I'm going to stick to MPD, VLC, raspotify, for now. It's working. Not the nicest, shiniest setup, but it does what I'm asking for. I have Netflix and Amazon Prime, where having information, maybe even trailers, can be important. With my own collection, especially with the music and the ripped CDs of street musicians, I know what I'm looking at, I don't need overly smart media centers with their mistakes and CPU baking capabilities.

  1. https://www.plex.tv/

  2. https://emby.media/

  3. https://kodi.onl/

  4. http://ampache.org/

  5. https://kodi.onl/

  6. https://osmc.tv/

  7. https://libreelec.tv/

  8. https://www.musicpd.org/

  9. https://f-droid.org/en/packages/org.gateshipone.malp/

  10. https://gmpc.fandom.com/wiki/Gnome_Music_Player_Client

  11. http://www.tpdz.net/productinfo/398300.html

  12. https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md

  13. https://play.google.com/store/apps/details?id=com.tencarssoftware.omxremote&hl=en_US

  14. https://www.videolan.org/

  15. https://f-droid.org/en/packages/com.nicolasbrailo.vlcfreemote/

  16. https://mopidy.com/ext/spotify/

  17. https://github.com/Spotifyd/spotifyd/

  18. https://dtcooper.github.io/raspotify/

  19. https://github.com/hzeller/gmrender-resurrect

  20. https://github.com/masmu/pulseaudio-dlna

  21. https://sourceforge.net/projects/minidlna/

  22. https://bitbucket.org/stativ/readymedia-transcode/

Sat, 18 Apr 2020 19:45:00 +0100

Climate activists, I challenge you to give some real advice

What people truly need are guidelines on what to and how to do, not vague demands and loud words of street-marching activists in plastic fast fashion coats

Making demands only is flawed

After illegally blockading a road for multiple days, XR Cambridge defaced an iconic scene in the middle of Cambridge1 - they dug up the lawn and the area around the apple tree in front of Trinity college - yesterday. Apparently if you're loud enough, this is not even a crime2. I know grass is a lot less good as wild fields, but like with statues or paintings, that particular spot was an ornament.

During the years in the UK I learnt to first read and try to understand other views, so I went onto their website and read their... mess.

For ages I've been getting very angry with people who say "X is bad, don't do it" without pointing at a realistic alternative. Extinction Rebellion seem to be made up completely of these people.

The quoted text are literally their demands.

  1. The University of Cambridge must cut ties with the fossil fuel industry

That's one of the most vague sentences I've seen in my life and I worked for multiple big companies, so that's quite an achievement. If you follow the reasoning you'll see these: "Completely divest from fossil fuels." The rest is about how dare the Uni accept money from bad, bad companies and even do research for them!

Research allowed engines to become powerful with 1L petrol tanks. Diesel combustion engines are among the most power efficient machines humanity ever made. Yes, we need to phase them out, but research on making them more efficient and to produce less pollution is still a high priority.

We recently bought a house and had to re-wire the whole establishment, including replacing the main cutout (the big fuse). It was a 60A fuse, but we upgraded it to 100A (Our main electricity cable is a single phase one, limited to 100A.), considering we might be able to afford a plug-in car in the future. The car charger port on it's own is 32A. Now, image if a whole street suddenly starts charging their cars overnight in an area where the power mains was laid in 1954. The smell would be what we used to call "ampere smell" in college - also known as burning electrical equipment.

The house heating and hot water is on gas. Changing it to an electrical one was not possible: it's either that or the car charger; the 100A physically can't support both plus generic living equipment. Also, electric combi boilers run at a dangerously high temperatures - they are not ready for prime time yet. For heating, we could do with FIR3 panels and a backup wood burner, but that doesn't solve the hot water problem, plus a wood burner produces a lot of bad smoke - and I didn't touch the question of how on earth to afford this.

Now apply these problems to the power and heating system of the University.

Let's move on, to power plants. For those who hadn't learnt how power plants and grids work - I touched some high voltage topics at college -, an extremely quick summary: there are big, stable power plants that are very slow to turn on/off; these support the base needs. Then there are the small ones that are fast to turn on/off for additional power surges. In some rare cases these latter ones might even be able to "reverse the polarity", to turn them into power consumption units -because excessive power in the grid is dangerous: it can literally burn it down. The trouble with green energy is that when it's on, it's REALLY on, and you can't turn it off - hence events like "Germany paid people to use electricity over the holidays"4 There is no technology to store extra energy yet. There are attempts, like Energy Vault5: stack concrete blocks to store it. It's not ready. Plus there's the issue of building out a whole new national grid, given the natural resources are all location bound6.

  1. Cambridge City Council must hold a Citizens’ Assembly on Climate Justice.

Yeah, no. Just no. The 'expert panel' idea is good, I'd get behind that, but not the generic citizen. There's 3000 years of history for a reason why these attempts are always bad, and I've heard enough stories about the 1956 Revolution in Hungary to know how bad this can end.

History books are you friend on this: democracy is slow, but it still the only one that's best for the most.

If you want to make an impact there's literally nothing stopping anyone to join or form a party and use the existing tools to move the world.

  1. Cambridgeshire County Council must work with other relevant regional authorities to provide a plan for a just transition away from an inadequate transport system reliant on fossil fuels.

This might be the only one I can get behind: the public transport in Cambridge is horrible, slow, unreliable, expensive.

The thing is... the public transport in Cambridge is privatised, this is even mentioned as problem. But that also means anyone could start a green minibus company to compete with the current ones and if it has the right pricing, message, routes, etc, people will use it. Right?

Maybe not. Maybe there's a reason why it's expensive.

Real advice for everyone

For many years, we've been quietly trying to make a difference within our own reach with my wife. The principles are simple:

  1. Reduce

    Consume less. Buy better clothing that last longer. Don't follow the fast fashion. Don't fall for seasonal, temporary temptations. Always ask yourself if you need it or just want it7.
  2. Repair

    Buy repairable equipment and repair it. Get a lint remover and revive your clothes. Buy (used) business grade laptop and replace the gears if needed.
  3. Reuse and sell

    Try to sell or give things away; make less waste. Get used things if they can fulfil the need just as well as a new.
  4. Buy the one with the non-plastic packaging

    If you can choose between a product that's in plastic or another one that's in glass, buy the glass. Or the can. Or the paper. Or the PLA. The packaging is part of the product you're buying; take it into account just as much as the thing wrapped in it. Many plastics advertise themselves as compostable - that is not the same as biodegradeable: it means it falls apart into microplastic. Obviously take away containers and coffee cups are a no go - stay there and consume it locally from a real cup or plate.
  5. Eat local, buy local

    It is outrageously hard to buy European made clothing. Shoes are OK, and though they are expensive, they are also pretty good. But palm oil, coconut wonders, cashew, clothing Made in China, etc are all imported and they travel a long, long way, usually on humongous ships that alone pollute the earth as much as a smaller country8. Try to minimise the transport it needed between you and it's place of origin. This is where my problem with veganism comes into the picture: many vegan food comes from tropical countries, packed in plastic, transported across the globe. You're only doing good to yourself with that, not the planet, so please don't try to sell so.
  6. Recycle

    This is a last resort: recycling is not cheap and can require a lot of energy.
  7. Travel less frequently for a longer periods

    A roundtrip with a plane takes just as much fuel for a 2 day stay as it does for a 14 days stay. A longer period of rest is better for you anyway; 1 or 2 days is never enough. Make your holidays worthy.

  1. https://www.bbc.co.uk/news/uk-england-cambridgeshire-51534446

  2. https://www.cambridge-news.co.uk/news/cambridge-news/extinction-rebellion-cambridge-police-protest-17766704

  3. https://www.herschel-infrared.co.uk/

  4. https://www.independent.co.uk/environment/germany-power-grid-pays-customers-christmas-sustainability-renewable-energy-a8141431.html

  5. https://qz.com/1355672/stacking-concrete-blocks-is-a-surprisingly-efficient-way-to-store-energy/

  6. https://www.nytimes.com/2020/01/08/opinion/nuclear-power-germany.html

  7. https://www.becomingminimalist.com/

  8. https://newatlas.com/shipping-pollution/11526/

Tue, 18 Feb 2020 13:00:00 +0000

Consistent USB device naming in a FreeNAS jail

How to make an Aeotec Z-Wave Z-Stick, a CC2531 Zigbee2MQTT, and an RFLink work with a FreeNAS jail running Domoticz

My current home server is a FreeNAS1 with a bunch of jails and plugins; one of these is Domoticz. While I barely do anything above collecting sensor data with it, I still had to make it work with RFLink2, Zigbee2MQTT3, and an Aeotec Z-Stick Gen 54.

I'm not going into the installation of Domoticz on FreeNAS, there are excellent tutorials on the iX Community forums:

Note: zigbee2mqtt is a node.js daemon; I'm using pm27 to run it.

iocage hooks

The iocage jail controller has some hooks that can run scripts on the host for the jail. The two hooks needed in this case are the exec_poststart and exec_prestart hooks. The prestart runs before the jails is created; the post start runs once the jail filesystem is up, but nothing is started yet.

My ZFS dataset for the iocage is called server. Modify the paths according to that, and create the bin directory on it.



# add devfs rules to allow USB devices to be seen from within domoticz
if ! grep -q "devfsrules_jail=5" /etc/devfs.rules; then
    cat <<"EOF" >>  /etc/devfs.rules

add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path zfs unhide
add path 'tty*' unhide
add path 'ugen*' unhide
add path 'cu*' unhide
add path 'usb/*' unhide
    /usr/sbin/service devfs restart



function get_tty () {
    local vendor="${1}"
    local product="${2}"
    # return the tty{} value, eg; U2
    sysctl dev.umodem | grep "vendor=${vendor} product=${product}" | sed -r 's/.*ttyname=([^\s]+) .*/\1/'

function create_symlink () {
    local source="${1}"
    # failsafe
    if [ "${source}" == 'tty' ]; then return; fi
    local target="/mnt/server/iocage/jails/domoticz/root/dev/${2}"
    if [ -e "${target}" ]; then rm -f "${target}"; fi
    ln -s "${source}" "${target}"

# rflink is an arduino mega
create_symlink "tty$(get_tty '0x2341' '0x0010')" "ttyUrflink"
# zigbee is a Texas Instrument CC2531
create_symlink "tty$(get_tty '0x0451' '0x16a8')" "ttyUzigbee"
# zwave is a Z-Stick Gen 5
# note: it needs the 'cua' device in domoticz, not the tty device
create_symlink "cua$(get_tty '0x0658' '0x0200')" "cuaUzwave"

Note: these commands are meant to be ran after domoticz was successfully installed in a jail named domoticz

chmod 0755 /mnt/server/bin/domoticz-poststart.sh
chmod 0755 /mnt/server/bin/domoticz-prestart.sh
iocage stop domoticz
iocage set exec_poststart=/mnt/server/bin/domoticz-poststart.sh domoticz
iocage set exec_prestart=/mnt/server/bin/domoticz-prestart.sh domoticz
iocage set devfs_ruleset=5 domoticz
iocage start domoticz

Hardware configurations inside domoticz


Domoticz hardware configuration for aeotec z-wave stick with path of cuaUzwave
Domoticz hardware configuration for aeotec z-wave stick with path of cuaUzwave
Domoticz hardware configuration for rflink with path of ttyUrflink
Domoticz hardware configuration for rflink with path of ttyUrflink


Domoticz hardware configuration for zigbee2mqtt
Domoticz hardware configuration for zigbee2mqtt


homeassistant: false
permit_join: false
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
  port: /dev/ttyUzigbee
  channel: 25


There's a weird behaviour of the CC2531 for which I haven't found a reason or a fix for: after being plugged in, on the very first start the tty interface shuts down and gets reassigned to another position, eg. from ttyU0 it becomes ttyU4. I've tried using devd rules to trigger a restart of domoticz or a recreation of the symlink, but so far, none of them provided good results. I'm not completely happy with the zigbee2mqtt project anyway, because it requires a separate node.js daemon to run in the background - one more moving element -, therefore I'm not too keen to find a fix. Instead l'll probably look into alternatives, like the dresden elektronik ConBee8

  1. https://www.freenas.org/

  2. http://rflink.nl/blog2/

  3. https://www.zigbee2mqtt.io

  4. https://aeotec.com/z-wave-usb-stick/

  5. https://www.ixsystems.com/community/threads/howto-domoticz-and-open-zwave-in-a-freenas-11-jail.61030/

  6. https://www.ixsystems.com/community/threads/install-script-for-domoticz-with-open-zwave-driver-in-iocage-jail.62254/

  7. https://pm2.keymetrics.io/

  8. https://www.amazon.co.uk/dp/B07PZ7ZHG5/

Fri, 07 Feb 2020 19:00:00 +0000

Hongcun bridge closeup

As mentioned before, I don't think there's a chance to take an image if the bridge only. However, if you're early and patient enough, an opportunity might present itself when only people who actually fit the settings are on the path.

I know the framing is a bit off, but there were people standing on both edge of the bridge, and it was either to cut the reflection, or to break the scene.

Sat, 26 Oct 2019 09:00:00 +0100

Hongcun bridge

I firmly believe that it is now impossible to take a picture of the bridge in Hongcun without people already occupying it to take a selfie. Or a lot of selfie. And one more selfie.

This was taken 07:05 local time, about an hour after sunrise and before the tourists were allowed in, meaning these people all slept inside Hongcun as well.

Fri, 25 Oct 2019 09:00:00 +0100

Sunrine in Hongcun

Just the sun rising above Hongcun with misty mountains in the background. Nothing special apart from the idyllic and near perfect conditions to feel how China probably was a few hundred years ago.

Thu, 24 Oct 2019 09:00:00 +0100

Sunrise at the Moon Lake in Hongcun

The Moon Lake is in the middle of Hongcun and is the "belly" of the water system running across the town like veins. It has fisn, snails, shellfish, and a lot of special plants that filter and clean the water.

We tried to get out here early as possible, but we still weren't the first, even though the sun has just rose up when this picture was taken.

Wed, 23 Oct 2019 09:00:00 +0100

Empty morning in Hongcun

Want empty streets in Hongcun? Sleep inside the town, because it's loked from visitors till 7am. And get up around 5am. If you do so, you'll meet adorable cats loudly welcoming you and a crispy morning, with unique street views.

Tue, 22 Oct 2019 09:00:00 +0100

Saturday night in Hongcun

If you go somewhere for a week or a bit more it's inevitable to have a Saturday night included. Saturday night at any heavily tourist populated are can be bad, but Hongcun was a lovely suprise: it was lit with lampions, everything was open till 22:00 at which point everyone went to sleep.

We've slept in an actual mountain monastery, so we knew it's different when the place has a history and you're staying at an old place. The unexpected part was that our accommodation, well within Hongcun, was immaculate: clean, interesting, with lovely people running it. And for Saturday, it even included a baby corgie.

Mon, 21 Oct 2019 09:00:00 +0100

Couple in the sunset in Hongcun

There were so many people staring into their phone, or taking selfies - except them. This young couple took a photo of the place, and not a selfie.

Sun, 20 Oct 2019 09:00:00 +0100

Sunset in Hongcun

Hongcun ( 宏村 ) is a small, old village in Anhui province - and it's location of the opening scenes of Crouching Tiger, Hidden Dragon. This fact made Hongcun one of the most frequently visited tourist attractions in China. I saw images from before the movie, from the '90s, and there were absolutely no sign of the level of decoration anywhere, let alone the hurds of humans cross the bridge the same direction Li Mu Bai did.

Hongcun has a very unique water - and plumbing system. The South Lake in this photo it's essentially the storage tank of city-wide hydrophonics with biological cleaning.

Sat, 19 Oct 2019 22:30:00 +0100

Working on the Emerald Valley

Swarms of tourists are usually bad in a scenic area, but at least in this very case, it shows how well the Emerald Valley is maintained.

Sat, 07 Sep 2019 09:00:00 +0100

Page created: Thu, Jul 16, 2020 - 09:05 AM GMT