I have always enjoyed working with people from very different backgrounds. I am from Germany but I got my M.Sc. from SFU in Canada. During my years of living in Vancouver, I had the chance to work with people from all over the world. I moved to Berlin some twenty plus years ago and I was happy to see it slowly shifting to a more international city. I am also glad that remote work has finally…
One of the most requested features for my terminal user interface library tview (now at 8.6K stars, which is still mind-boggling to me) was a multi-line text editor. Before starting to work on this UI component, I collected my users’ requirements for it. They basically boiled down to this: A multi-line text editor with optional word wrapping Common navigation keybinds: arrow keys, home, end,…
It’s fairly common that one has to write unit tests for applications that access external systems. We don’t want to forgo the advantages of unit tests for these applications. So we need to find a way to run them self-contained, without depending on external systems. Imagine we have a function which saves a user’s password in the database: func SavePassword ( userID , password…
It may seem that “word-wrapping” or “line-breaking” — the process of breaking a section of text into lines such that it will fit in the available width of a display area — is a simple thing to do: Find the last space character in a line of text and break after it. If you’re dealing with simple English text, that is, all ASCII characters, this will work reasonably…
Apple just announced that they will use “perceptual hashing” to detect illegal photos on iPhones. I have some experience to share on this technology. At my company, we use “perceptual hashes” to find copies of an image where each copy has been slightly altered. This is in the context of stock photography, where each stock agency (e.g. Getty Images, Adobe Stock,…
If you turn to Google on how to convert an image (e.g. a JPEG) to grayscale, almost all solutions you will find will cycle through all pixels individually to convert them to a luminance value: result := image . NewGray ( img . Bounds ()) for y := img . Bounds (). Min . Y ; y < img . Bounds (). Max . Y ; y ++ { for x := img . Bounds (). Min . X ; x < img . Bounds (). Max . X ; x ++ { result . Set (…
Watch this video which I recorded two years ago while travelling in Madagascar: If it looks crazy, that’s because it is. As a tourist, you will almost always rent a car with a driver. You don’t know the rules. It may seem that there aren’t any rules. But after having been in and watched the traffic for dozens of hours, I realized that there are rules but not in the sense of road…
Nichts darf, aber jede Menge kann schief gehen. Die neue Studie des Teams um den Epidemiologen Christophe Fraser zeigt einen Weg aus der aktuellen Misere: Wenn mindestens 60% der Bevölkerung eine sogenannte “Contact Tracing App” nutzen, lässt sich mit einer gewissen Wahrscheinlichkeit die Reproduktionszahl R₀ auf unter 1 senken und damit trotz halbwegs normalem öffentlichen Leben die…
This post likely doesn’t affect most readers of this blog. But since I also write to document my work, this announcement will go here. I implemented a new commercial software tool which can read IATA SSIM Flight Schedule files (Chapter 7). SSIM files follow a sophisticated fixed-width format and are used to describe an airline’s flight schedule over a specific period of time (usually…
You would think that maintaining a mildly popular package such as tview would consist mostly of adding cool new features, maybe with the odd bugfixing sprinkled in. You would be wrong. If I had to guess, I would say 70% of my work on it was dedicated to making Unicode characters work. It’s all very simple when you just have to support the English language. But with the first requests for…
Every now and then, I work on a project that doesn’t involve any electronics. A recent trip to the German Ore Mountains (“Erzgebirge”) inspired me to make a Christmas pyramid myself: I noticed that laser cutters have replaced a lot of the coping saw work done to produce the typical Ore Mountains Christmas pyramids and Schwibbogen , to the disappointment of some of the older…
Even after four years of programming in Go , there are still things I didn’t know about the language itself. The following example illustrates behaviour that surprised me. My (false) assumptions actually led to a bug which was very difficult to find as it happened only rarely and repeated reviews of the code didn’t turn up anything unusual. Here it is: package main import ( "fmt" )…
I was pleasantly surprised when I realized my recently published Go package tview had just passed 1400 stars on GitHub which is quite significant. It seems to have struck a nerve. As mentioned in my previous blog article , there are already a number of Go packages that allow you to create terminal-based user interfaces. But the focus on making it simple seems to have paid off. Naturally, with this…
Recently, a number of Go packages to create terminal-based user interfaces popped up. This is great because it allows you to run semigraphical applications on the server. It’s also more secure than implementing a dedicated admin area in your web app because it reduces the attack surface by hiding behind an ssh login. Here’s an example from Stock Performer where we can monitor the…
I’ve released two new Golang packages on GitHub: github.com/rivo/sessions and github.com/rivo/users . They will help you write web apps in Golang. For their release, I wrote a guest blog post over on Gopher Academy. Check out the link: https://blog.gopheracademy.com/advent-2017/web-sessions-and-users/
A blog post from 2014 explains quite nicely how one can achieve graceful server stops and restarts in Go, that is, how to implement a server process that allows running requests to finish before exiting the application. We will also want to deploy new binaries without interrupting running requests and without any noticeable server downtime. There are tools for this and in the past, I’ve used…
The fidget spinner trend is pretty much over, as can be easily seen by the fact that they can now be bought virtually everywhere for as little as €1. At the time everybody was still talking about them, I thought, why not design and build my own? I guess I just wanted to find a reason to use Formulor , a service which lets you order custom laser-cut materials, in this case acrylic glass, by…
It was a huge controversy when the iPhone 7 was released. Apple dropped the 3.5mm headphone jack in favour of their Lightning port. That is, their earphones now come with a Lightning jack. I usually like to give changes like this a try for a while before getting all upset, as the rest of the Internet appears to do sometimes. A few months have passed since I’ve got my iPhone 7 and my verdict…
We’re going to create a background like this in pure CSS: Of course, the simple version would be to simply create a CSS gradient (and there are tools that make creating them easy): But it just doesn’t look that great, simply because we can only create linear or radial gradients. We want more randomness, something that looks less geometric and predictable. A common method is to choose a…
Having to run your own server, whether it’s in the cloud or rented as a physical machine in a data center, is inevitable once you try to do more than just host a few HTML files. It seems easy at first: Install Linux and the LAMP stack and you’re ready to go. But even with the best intentions, chances are you will quickly find that your server has been hacked and is now serving porn to…
I recently had to find a way to generate colours for charts. Specifically, the series in a chart — typically visualized using bars, lines, dots, or areas — are often distinguished using different colours which, for the most part, should be generated and assigned automatically. And while d3.js (on which the chart code was based) offers some pre-defined colour schemes which consequently…
The web browser has become our preferred user interface of choice. But even in 2015, I bump into fellow developers who view the web as nothing more than a bunch of companies’ online presences. Surely, a native Windows client or a Java SWT app must be more powerful than your average web browser. I would have agreed in the days of Internet Explorer 6 (which, by the way, already supported AJAX…
I’ve released a Go library Github: Duplo . The library can be used to detect image duplicates or to find similars in a set of images. It is an implementation of Fast Multiresolution Image Querying by Jacobs et al. It works surprisingly well if you want to find duplicate images which may have been modified slightly (e.g. colour correction, different compression / file format, watermarks).…
I gave a talk at Berlin’s Golang User Group (which is supposedly the biggest one in Europe at the moment). It was a quick overview of the duplicate image detection software I wrote in Go for Stock Performer . You can find the slides here . I will put the code on my Github profile very soon. There will also be a more extensive blog post about it.
I’ve contributed to Github projects before but I’ve just now uploaded my first own Github repository: The Font Manager . It combines two things I’ve been wanting to do for a quite a while: Learn to program in Clojure Write a font manager / viewer that can look into ZIP archives There are lots of font viewers out there. But for some reason, I wasn’t able to find one that…
I’ve worked as a project manager for about 8 years. While it involves a lot of politics, especially when the company or the customer you work for is a larger enterprise, a major part of a project’s success can be attributed to the project team. You definitely want the best team. And that does not necessarily mean the best individual players but people who can work together —…
At many of these Berlin meetups that are happening almost every day now, I bump into developers employed at startups. Maybe it is the nature of these events but I have yet to meet someone who is happy with their employer and who is not looking for a new job. Naturally, I ask them what it is that they dislike so much about their job. The answers are surprisingly uniform. Often, the development team…
Started learning Swift . This seems to be a good moment to finally get into iOS programming. What I’ve seen so far looks ok, although I’ve recently started to really enjoy simpler languages (more on that later). The trend in the last few years seemed to be to add more and more “features” to a language based on whatever the trend is at the time. Generics, closures, features…
Every day, I see job postings for “technical co-founders” or CTOs. Almost all of them from non-technical founders. I have to say I don’t know the overall success rate in hiring that person. But I’ve talked to many of them at meetups and the complaint that it is impossible to find that CTO is widespread. Part of it is certainly the limited supply of programmers, especially…
I’m reactivating this blog. Initially, it was meant to be a joint effort between Luis and I, to document our path to becoming startup founders. We became those founders much faster than expected so that path wasn’t very long. Also, Luis feels he can’t invest that much time into writing for this blog so he’ll drop out. I will keep it up and it will be more or less my…
Since YCombinator came on the scene, a number of investors have also started to call themselves “startup incubators”. In Germany, there is a group of people who became quite successful with the ever-discussed copycat. Many of them have since gone on to become an incubator. The biggest ones are probably “Rocket Internet” and “FoundersLink” but there are more…
Meetup #2 We’ll have our second meetup on Tuesday, Dec 13, 2011 in Berlin. Here are the details: Date: Tuesday, December 13, 2011 Time: 20:30 (open-end) Location: Spreegold, Rosa-Luxemburg-Str. 2, 10178 Berlin Mitte (at Alexanderplatz) Spreegold Website http://www.goldapfel-berlin.de/ Link to Google Maps We want to get together to chat and to demo the projects we’re working on. (So…
We’re at a point now with Stock Performer where we can take money for the service. If it was that easy. Sure, I could put my private PayPal account up there and risk a complete mixup with my personal purchases and Stock Performer subscriptions. And how would I deal with Luis’s part? He’d need to send me an invoice. And I would somehow do my taxes from that which I don’t…
I think we’re off to a good start! A bunch of us came out for a nice chat about Berlin’s startup scene, about technology, and generally to get to know each other. Since this was my “minimum viable meetup” I certainly wanted to know what everyone’s expectations were so we could develop it from there (and pivot if necessary). Simon suggested to take cues from the Berlin…
Meetup #1 We’ll have a Hacker News Meetup on Tuesday, May 17, 2011 in Berlin. A number of people have already announced that they’ll join us on that date. These are mostly people working at local startups, founders, and people generally interested in coding and working on interesting projects. We don’t have a specific agenda for that day so it’ll simply be an event where…
You may wonder why there have been few posts in the last few weeks. Part of it has to do with my amazement how other founders can spend so much time writing thoughtful blog posts while running a startup. When I’m working on something intensely, blogging, tweeting, facebook-status-updating, even the hourly check of the HN front page comes as a distraction. And if I do need a healthy dose of…
Is the act of leaving a well-paid, safe job behind to become an entrepreneur really such a small thing to do? I do read the occasional “I finally did it” blog post but there’s not much out there on the topic. Maybe it’s just me thinking about it too much (I’m pretty sure it is). But at the same time, I know so many people stuck in corporate jobs who dream about doing…
There is something I still don’t quite understand. It is the observation that some people manage to always give confusing replies to simple questions. Apart from the obvious I-don’t-want-to-answer tactic, I think it boils down to two reasons: They either don’t notice that the listener is coming from a different point of view or their thinking is simply too complex. The latter one…
The following story will remind some German readers of the great Loriot . As a teenager, I wanted to eat the perfect egg for breakfast. So naturally, I set up an experiment where I would vary the time the egg would cook in the boiling water as well as the heat setting of the stove. It took me about five or six tries to find the perfect procedure. My eggs came out consistently perfect. Then one…
In our search for a good place to start our venture, we’ve been discussing a number of ideas and areas. I’ll list them here although I know the discussion is far from finished. We haven’t done much research yet either. This is for you to join the discussion. Analytics: It seems people are data hungry. Money is being made by scraping statistics off sites such as iStockphoto and…
Update May 12, 2014: I’m taking Luis’s “About” page off this blog. We agreed for me to continue this blog by myself. (I’ve been writing most entries anyway.) No worries, Luis and I are still running Stock Performer together. -Oliver I’m on this adventure too. I spent quite a few years at a big company with a solid job. But after accidentally transforming my…
The following text will be added to the “About us” page: As you can see, I have black hair and brown eyes. I haven’t played much soccer in my life. Nor did I drink much beer. But I’m still German. I am and have been a hacker for about 30 years now. My M.Sc. degree in CompSci got me some fancy job titles such as project manager and product manager. During my quarter-life…
There are four common ways to start an Internet business: The dot-com method: Come up with a revolutionary idea, write up a business plan, get VC money, hire a team of 50 people, burn through your millions in funding, and launch your fully developed website a year later. Lately, there is typically an intermediate step of getting angel money first. The bootstrapping / MVP method: Build an MVP…
With this post, on August 17, 2010, we’re officially launching our blog “Rent-a-Founder”. Luis and I have long been talking about starting a company together. This is an attempt to document that journey and provide any insights gained along the way. The company does not exist yet. Heck, we don’t even have a business idea yet. Hence the name “Rent-a-Founder”…