tzeejay icon




The Missing Workhorse Mac

The Missing Workhorse Mac

Processing intensive workflows are higher in demand than ever, but the Mac lineup is missing a crucial piece to help pro customers of Apple.

AVM Fritz WiFi Mesh

AVM Fritz WiFi Mesh

AVM Fritz WiFi Mesh kam unerwartet ist aber ein Segen für den deutschen Markt

Turning iOS Extensibility to 11

Turning iOS Extensibility to 11

iOS is amazing but is lacking productivity basics

E-Mail Server Update

A long time ago I posted that I was going move my E-Mail server away from OS X Server (RIP old friend) to something at that point still undecided in a project that I called XAPPLEPUSHSERVICE. I really did want to turn this into a series of multiple posts about how I switched, the options I considered etc. but I just didn’t have the time with my daily work schedule and having others depend on the E-Mail server being operational. I tested two options, opted for the second one and moved to a new operating system and E-Mail server setup over night while everybody that depended on it being online was asleep.

Just like all my other projects I set the server up to be as maintenance free as possible. Months and months or even years of uptime with no required update or me logging is always the target. Everything that can be automated in a reasonable fashion is automated and as long as I don’t get a message that something burns down I consider it to be online and doing what it’s supposed to be doing for me.

In the end I opted to format the SSD of my server to Ubuntu 18.04 Desktop Edition and installed mailcow. It’s a “mailserver suite”, which is essentially just a fancy term for various docker containers chained together to become something useful. A E-Mail Server.

Everything required to not go crazy operating a E-Mail server, including a web management UI comes with it and allows me to quickly take care of administrative tasks when needed. Users can also log into SoGo (which is written in Objective-C btw, the non-Apple reimplementation of Objetive-C) to get webmail access. It has yet to give me any trouble at all, apart from my own misconfigurations and is absolutely rock solid! I think you can run this setup on essentially any VPS and get yourself a great little E-Mail server which allows you to own your E-Mail data and not have to rely on the mood of any particular VP at some big company in Silicon Valley or Seattle. I do know that there are many other providers out there, I pay for and enjoy Fastmail a lot but they are the exception in an industry filled with big companies trying to lock users in with predatory behaviors.

I have been operating five domains with this one E-Mail server without any trouble for well over a year and can only recommend it. They also offer support packages in case you ever get yourself into some real trouble and hosted setups, meaning they setup and maintain the host but you own your data which in turn also supports further development of this “mailserver suite”.

One of the main downsides that I was prepared for but haven’t yet been able to solve again is the XAPPLEPUSHSERVICE part of this setup. I really miss not getting Push Notifications for incoming E-Mails and I really do not understand why Apple is not openly documenting the interaction, after all they do have to support with it with their own iCloud E-Mail service and have granted Fastmail an exception and allow them to send Push Notifications if you’re using their service through the builtin and not through the Fastmail app that you can download from the App Store. Parts of the interaction are already documented by Apple hidden in their open source archive of OS X Server but some are not and maybe some of it has changed in iOS 11/12/13.


Apple Testflight - Same version multiple builds

TLDR: Increment the version number by one and set the build number to a lower number than what you were previously using. Maybe even to 0 to start over with builds for that particular version of your app. Example: Version 1.5 (500) -> Version 1.6 (0)

Recently I had to send a few builds of Guardian to Testflight in preparation of cool new features but I was unable to figure out how send multiple builds with different build numbers but the same version number to the service to incrementally test small changes. It lead to me burning version numbers out of frustration in between App Store releases. Obviously that looks weird, and it bothered me since Apple’s own Developer technologies Marketing page showed right at the top exactly what I was trying to achieve.

Screenshot taken from

I started searching the internet for a solution since I wasn’t able to figure it out, surely somebody had run into this misunderstanding before and posted a solution. To my surprise though I found various Stackoverflow threads explaining that the example presented by Apple as well as what I had seen from being a tester myself for friends Apps simply wasn’t possible.

Since this clearly wasn’t true, I went back to the Testflight page on Apple’s Developer website and noticed what I had previously missed. The build number was reset in their example, or rather not incremented by one. The build number stayed at 0 while the version number went from 1.6 to 1.7. I quickly exported a new build of Guardian that I had worked on all day and with the version incremented by one from 1.2.4 to 1.2.5, and the build reset from 115 to 0. Xcode archived, signed and uploaded the build just fine. To quickly test my theory I incremented the build number from 0 to 1 which Xcode archived, signed and uploaded just fine once again.

I hope this helps somebody having the same issues with Testflight. Apple’s systems can be hard to use sometimes and error message are usually not very helpful, but we shouldn’t forget that designing a system like this isn’t particularly easy either, and I wouldn’t know if I’d be any better at it.


Leaving the Cloud

For quite a long time this place on the internet that I call home had been hosted by a third party service. Netlify has treated me very well and provided me with a complete headache-less setup, given that over the last two-ish years they didn’t ask me to pay for a damn-thing. They run a solid service, with a fair system in place and I would absolutely recommend it to people who aren’t as broken about this as I am. Having said that, I still left the cloud and re-conquered a little space for myself.

But it’s 2020… who runs their own web servers anymore, let alone their own hardware? That’s a job for the cloud to take care of!
As we all know big to semi big cloud services run our internet today and I work with them on a daily basis. Nevertheless I enjoy being part of the small group of people on the internet that hasn’t been swallowed up by the cloud. Cloud services provide great connectivity even to the furthest corners on this planet and almost all guarantee 99% uptime backed by the latest generation Intel Xeon E5 CPUs or something alike (sounds familiar?). For many reasons using the cloud is the right thing to do, but doing the right thing is usually also less fun.

I am consciously giving up all amenities and have decided to serve my own website by running my own web server, on a Raspberry Pi 4 Model B, from a datacenter in Hamburg. I rent space there due to many other reasons and since I had more unused IPv4 addresses I decided to tinker a little and let me enjoy this. I run zero important services or applications from this Raspberry Pi. Everything is static HTML created with Hugo & served by Nginx, which I could move to and replicate on absolutely any other service at any given moment. It’s my own version of a almost headache-less web hosting setup. Boring, simple and reliable.
The biggest factor which enables me to do this though is N@Work’s great peering. They are a great partner even for a very small customer like me and offer direct peering with the worlds biggest internet exchange point in Frankfurt. The DE-CIX is only a couple Milliseconds away and from there my traffic quickly arrives at any destination in the world.
To test everything I asked a friend in San Francisco to open my website, without telling him why. I was told that it showed up almost instantly on his phone over a cellular connection, which made me really happy since it shows that I’m not facing any major downsides to leaving Netlify since this website is small and efficient.

On top of that how many websites can show you a photo of the server that just answered your request to send you this website?


Friends Around The World

Traveling long distances has become a commodity. A plane to the other side of our planet is leaving at least once a day from any major airport and I would recon that most middle class households could afford at least one ticket.
I was born in 1994 and I remember peoples reactions to my parents taking my sister and I onto an overseas trip to the US, when I was only around nine or ten years old. My parents are of the generation that built this world. They grew up with Germany being split into two by a huge wall. That wall separated many families and a lot of people lost their lives trying to cross it by being shot or ripped apart by land mines. All of that happened in the middle of Europe, the last time only 30 (!) years ago in 1989. In stark constrast I grew up being able to freely travel into any neighbouring country, without even thinking about bringing a passport or being stopped at a border. This is Europe at its finest and I think this part of being a European citizen is something that came as a bonus alongside the tariff free trading union and a unified currency.
Growing up with this mindset and visiting many places around Europe and northern America I always liked the idea of infinte “Fernweh”. Don’t get me wrong, I love Hamburg to death, but seeing other places and understanding the state of mind in another city, smaller of bigger, is always refreshing. It gives you perspectives and experiences you wont get in any other way.
Alongside those upsides you may even end up making new friends along the way. In my case I made friends in a couple of different places and they’re all people I can rely on and ask for a favor, even when I’m thousands of kilometers away. Nothing beats the feeling of being able to get a question answered or a recommendation from a local when you’re visiting.

I have friends who live close by and I wouldn’t want to miss them but the Internet enables me to maintain friendships with people on different continents. By doing that it enables me to maintain a different viewpoint onto the world and I think it overall improves me as a person.

Many people in different age groups have lifes like mine now, but I think I’m part of the first generation that is really able to leverage this technology in this way and growing up with it. The downsides are getting more and more obvious in recent years though, but I hope once it gets to a more maintainable state of crazy we will be able to enjoy the technology more.

It’s more than likely not to be the case but I reamin hopeful.


Keeping Myself Motivated

Daily routines can sometimes really get to me. Recently I’m once again feeling bored by my work or many other things in my life, even though there isn’t really anything to complain about. It’s mostly all just a processes though and set backs of any kind squash the little motivation I had left to deal with any of it. I just want to drop everything, turn around and never return.

Something that I started doing some time last year and set as an active goal for this year for myself are my Personal Projects.
It may sound like a bit of a general phrase that doesn’t mean much and I absolutely intended for it to be exactly that. A Personal Project is supposed to be anything that I’m doing for myself. Something that makes me happy and gives me energy. Of course this could be helping someone else out with something, but getting to exercise one of my skills is very welcome. The best thing about it though, is that I get to choose what to do and what not to. I always recommend starting with something that may take you a day or two at max and just keep doing that for a while. Little improvements to your life and living situation are always a good starting off point.
I’m always on the hunt for new things to learn or to try. If something isn’t for me I always have the ability to move on. I have tried it, was able to form an opinion about it and can objectively reason about why this isn’t for me.
Since I’m mostly working with my brain and not with my body, as in physical exercise to get a job done, I try to balance that by getting up and building things with my hands. I find it incredibly satisfying and a good way to sharpen my engineering skills.

When trying something new I usually have to buy something to either get started or I need to buy the resources for the project. In order to do something like that I always recommend searching around thoroughly and getting as much context as possible so that you can then spend as little money as possible to get going. Buying everything at once is very expensive but I started buying things little by little on a monthly basis as I need them and giving myself a small allowance every month to do such purchases.

This year I set myself quite a few random goals but I wont hold myself to do all of it. It’s probably impossible for me to do all of it but I will try regardless. If I can’t manage to do it this year, either I wasn’t as enthusiastic about it or I can simply do it next year.
Since this is something to make me happy I will absolutely stick to going my speed.

I hope that this post was able to motivate you to improve your life and yourself in any way that makes you happy.


Community Hubs: Slack vs. Discourse

For the longest time I was convinced that providing a Discourse Forum is the turn key solution to communication and customer engagement problems everyone has been searching for all these years. It’s a ready to rock tool for civilised conversations around your company and the products that you offer.

While working for CircleCI I first came into contact with a Discourse Forum. My colleagues on the support team and I used it daily to communicate with customers about all kinds of things. We posted quick workarounds to issues for everyone to see or we sent out announcements about the pre installed software in our CI images just to give simple examples.
It was great to use and had a pretty high customer adoption rate. It was a very helpful tool to us managing the at times crazy amounts of inquiries came in.

When I then joined MacStadium they had already thought about hosting a Discourse Forum for their customers and I was very excited to get it setup. We paid Discourse for hosting and proudly announced that customers are more than welcome to join the conversation about Mac hosting a iOS CI stacks on dedicated hardware. Basically no one showed up and it was even very hard to motivate colleagues to use it. In hindsight they had every reason to ignore me since there wasn’t anything to do or talk about there. Months went by and we cross posted almost every blog post there for customers to leave comments underneath.
Still nothing.
Colleagues of mine really did try to make it work but we were absolutely unable to get it up and going and I eventually became so busy doing other tasks that I simply forgot to go back there and use it in order to attract others.

I had completely forgotten about all of this and how defeated I felt when we couldn’t get it to work, until I saw this tweet:


I remain convinced that a Discourse Forum is the better choice of the two options for most tech (and related) companies but I was very clearly wrong about it for MacStadium and I have the feeling that I now understand why. In most cases it will boil down to how you engage and do business with your customers.

If you require customers to talk to a Sales rep, or more general a human of any kind in order to get them to sign on and give you money for your product or service, they will naturally also always expect someone to find a solution to their issues with whatever you sold them.
If any customer can open your website though, select the service or product that they desire and leave their credit card information for it without interacting with a human at all in the process, it’s more likely that they will expect to help themselves. The only help you should provide in that case is either documentation for whatever they acquired, a community forum for customers to help each other or ideally both.
If your customer has never talked to a Sales rep or anyone else who are they supposed to contact and how, but if they have and especially if they did in order to sign up for your service you absolutely have to be prepared to deal with all those support requests.

For me personally I will always prefer a Discourse Forum over Slack for such a community place since Slack is expecting you to be there all the time in order to be part of the conversation. It’s a real time chat application after all and the conversation is always happening right now which leads to a much more hectic and fast paced single sentence posts. The Discourse Forum is much more asynchronous in that way. Customers can open the site and read much more at their own pace without sound effects playing or other indicators nagging them that the actual conversation is happening right now and that they’re not participating. Another major upside for me is the fact that each topic is siloed into it’s own thread. You may link back and forth or converse in multiple threads at the same time but it’s not one big mix of all kinds of conversations in one thread. If someone has something they’d like to talk about they’re free to open another thread. If there is interest in that thread others will join automatically, which makes it feel much more natural but still organised in comparison to Slack which will become an absolute disaster to follow after 6 or more people chat at the same time in the same thread.

In the end you’ll always have to decide for yourself and chose your own path but I absolutely applaud MacStadium for tearing the non functioning system down and trying something else.