Kaiwa is a modern web based client for XMPP, forked from the original O-Talk project and rebranded. I’ve created a docker image from the fork at https://github.com/ForNeVeR/Kaiwa which is used at jabber.ru amongst others.

I’ve also created a docker image of the node-xmpp-bosh component that can easily be bundled with kaiwa to create a standalone application. You can use docker-compose and a docker-compose.yml like this:
version: '2'
services:
bosh:
image: sstrigler/node-xmpp-bosh
ports:
- 5280:5280
restart: always

Let’s talk about code quality and about quality of documentation. One example. I’m using underscore. So there is ‘findWhere’ on collections. All you can get is “Just like where, but directly returns only the first model in the collection that matches the passed attributes.”

Ok, fine, you might say, but what if it doesn’t find an element? It’s not like this never happened before. Shouldn’t that ‘rare’ case be covered in the documentation? Given that ‘where’ returns an array and that might be empty, the case what’s the first element then could be quite interesting.

WTF! Even my linter flashes the code all red at that place already: “anonymous function does not always return a value”. Yes, the function does not return anything in case no element is found. I know, ‘fuck types’ you might think, but no, fuck you and your laziness. This is just crap and the opposite of what’s good. Code quality, I haz it! #not

The other day I was looking for a solution to replace my Charles based proxy setup for our legacy system’s dev environment. Mostly because a colleague doesn’t have a license and didn’t want to pay for it. And we’re only using it for a single use case. The functionality they call “Map Remote”. Basically it redirects calls to remote services to some other other service making it look like it’s the original system. Ideal for a development system where you can’t just change hostnames (for reasons…).

So what I want to do, I want to type http://foo.example.com in my browser and not end up at the actual example.com live system but instead on services running locally on my computer.

We’ve switched to using docker, so running them locally is a breeze anyway already. So why not just add another docker component that acts as a proxy and does that job for me? I’d then just have to change settings in my browser to make it use that proxy and here I go.
After a short search on duckduckgo I’ve found tinyproxy and after inspecting it a bit deeper I found a way to make it work for me the way I wanted.
Here’s the Dockerfile I came up with, just change the hostnames that suit you and you’re all set.

A customer of mine asked for a WebRTC based, self hosted solution. So I started investigating and stumbled upon the great Otalk IM Client. Unfortunately it has not been maintained for a while. I decided to go with it nonetheless. I updated dependencies as required to make them work with latest stable NPM (3.x) and Node.js (6.x) as applicable and fixed bugs all along the way. Check out my fork if you are interested! Feedback would be very welcome. I think it makes for a very good starting point if you were about to create your own WebRTC solution. Or maybe even just a regular chat client.

Hiya! Long time no see. So I was upgrading my beloved ejabberd a while back and when I looked closer I found that most of the new functionality just wouldn’t work. Mostly because my ejabberd’s DB schema dating back to some 2.1.x install didn’t fit anymore. So but how to upgrade? After playing weird ideas back and forth I came across a script called ‘php-mysql-diff‘. According to its description it sounded very promising to what I wanted to achieve. Just that it wouldn’t work right of the box. After tearing it apart and putting it back together again I found that this was because my dump files as created by mysqldump sport a ‘COLLATE’ keyword which wasn’t supported by the built-in regexp used by its parser. After I fixed this I got the desired result, a migration script that I could use to upgrade my schemas. Hooray!

I understand or lets say, I’ve learned after a fresh install your default email client is thunderbird. Lets rather call it a strong suggestion instead of default cause default would mean you could seamlessly switch away from it. Which you can’t. Anyway. At the same time I discovered that thunderbird does not support any calenders or management of such and as such it does not support the calendar widget in your taskabar. Something I really like and want to see on my desktop. You know, I like it when my computer reminds me of things I could easily forget otherwise. Ok. I switched to evolution because of that. And also it’s kind of advertised as a possible replacement of thunderbird. And also I’ve been using it. Years ago. My calendar works now. Thanks for that. But evolution is not able to set Emails to read when they come with an attachment. Or sth evolutions thinks is an attachment. Lets not get too much into details here. How hard can it be to deploy a decent solution here? You know, we’re talking about fundamental things here. But you don’t even get the WindowManager right. Or at least stable. So why am I even complaining?