Index ¦ Archives ¦ RSS > Tag: exit review

Exit review: XFCE

I've been using XFCE for about a decade, after switching from Gnome. As a developer I have lots of windows scattered across multiple screens, and find a taskbar the most convenient way to manage them. Gnome 3 went a different way which didn't work for me.

XFCE worked very well, getting out of the way and letting me be productive. The apps like file managers, window managers, image viewers, etc are all fine, and you can run any others anyway.

But I've been wanting to experience Wayland for a while, and XFCE aren't there yet. It is a lot of work for the volunteers.

So I've switched to KDE for the next decade. Everything is Wayland. The default apps are busier.

Thank you XFCE for the last decade.

Category: misc – Tags: exit review

Exit review: Running my own email server

It has been over a year since I stopped running my own email server for me and a few friends. I had been doing so for over two decades!

Why run your own?

Email was and remains a ubiquitous communications mechanism, both for people and automation. When I started running my own server there were very few providers, and they had very low limits. There would be restrictions on attachment sizes and formats, and developer emails would often be rejected as spam. There was little in the way of configurability of incoming email.

Running my own email server let me remove all the restrictions. I accepted emails up to a gigabyte in size because sometimes that was necessary in the days before Dropbox. I was able to have whatever processing rules I wanted, and had full insight into all of the details that were going on.

What do you need?

You need to have an entire system with several configurations and components all working together.

Static firewall
You can filter out countries, internet service providers, cloud providers etc that aren't worth even accepting connections from
Dynamic firewall
A second layer of filtering based on observed undesirable behaviour. For example IP addresses sending you spam can be filtered for a time period.
Spam control (generic)
Various techniques are used to stop spam no matter which user it is going to. For example greylisting is very effective, dcc and rbl tell you if other systems have seen the same message. I also filtered all messages through a virus scanner.
Spam control (user specific)
Spamassassin has many rules with weighting added together to come up with a per message score. It includes how similar the email is to previous emails you received, which you have classified as good or spam, plus many other rules.
Filtering rules
You want to make messages matching various criteria be placed in folders, forwarded, rejected etc using per user scriptable rules.
IMAP server
To actually read the email using email clients or the programs builtin to various desktop and mobile devices you need one of these.
And sometimes you want to use a browser, so you need something that presents a web front end.
Mail transfer
This component receives incoming email, and sends outgoing.
You need to ensure there are backups, have authentication, logging, monitoring, DNS records, SSL/TLS certificates etc. Some of the components can use or even require database servers.

Over time there have been open source software projects that address these needs, including more integrated ones that address many at once. There are a nice variety each in different sweet spots.

Exit review

It is a positive experience having to construct a working system. You are exposed to several components that have to work together, read lots of documentation, create configuration, and deal with upgrades and improvements. Seeing how others have addressed that makes you better at them too. I had a working system all those decades that served us very well.

The reality though is you are really running a spam detection and rejection system. There was a new attempt every 3 seconds never ending. Each one results in your system logging what happened and why, and you are acutely aware that overall you are putting more effort into controlling each spam message than the senders put into the message.

I've since switched to Fastmail (obligatory affiliate link). They have done all the work listed above, but I can still see what is happening as though it was my system. For example they too use Spamassassin. What is noticeable is just how many and how large the headers are on each message, almost all generated in the service of detecting spam. It is nice that it is someone else's duty to maintain now.

Category: misc – Tags: exit review

Exit Review: Python 2 (and some related thoughts)

Python 2 has come to an end. I ported the last of my personal scripts to Python 3 a few months ago.

Perhaps the greatest feature of Python 2 was that after the first few releases, it stayed stable. Code ran and worked. New releases didn't break anything. It was predictable. And existing Python 2 code won't break for a long time.

The end of Python 2 has led to the end of that stability, which isn't a bad thing. Python 3 is now competing across a broader ecosystem of languages and environments trying to improve developer and runtime efficiency. Great!

I did see a quote that Python is generally the second best solution to any problem. That is a good summary, and shows why Python is so useful when you need to solve many different problems. It is also my review of Python 2.

So let's have some musings ...

Python has had poor timing. The first Python release (1994) was when unicode was being developed, so the second major Python version (2000) had to bolt on unicode support. But if it had waited a few more years, then things could have been simpler by going straight to utf8 (see also PEP 0538).

Every language has been adding async with Python 3 (2008) increasing support with each minor release. However like most other languages, functions ended up coloured. This will end up solved, almost certainly by having the runtime automagically doing the right thing.

Python 3 made a big mistake with the 2to3 tool. It works exactly as described. But it had the unfortunate effect of maintainers keeping their code in Python 2, and using that to make releases that supported both Python 2 and 3. The counter-example is javascript where tools provide the most recent syntax and transpiling to support older versions. Hopefully future Python migration tools will follow the same pattern so that code can be maintained in the most recent release, and transpiled to support older versions. This should also be the case for using the C API.

The CPython C API is quite nice for a C based object API. Even the internal objects use it. It followed the standard pattern of the time with an object (structure) pointer and methods taking it as a parameter. There are also macros for "optimised access". But this style makes changing underlying implementation details difficult, as alternate Python interpeter implementations have found out. If for example a handle based API was used instead, then it would have been slower due to an indirection, but allow easier changing of implementation details.

Another mistake was not namespacing the third party package repository PyPI. Others have made the same mistake. For example when SourceForge was a thing, they did not use namespacing so the urls were - which then led to issues over who legitimately owned projectname. Github added namespaces so the urls are (user can also be an organization.) This means the same projectname can exist many times over. That makes forking really easy, and is perhaps one of the most important software freedoms.

Using NPM as an example, this is the only package that can be named database. It hasn't been updated in 6 years. On PyPI this is apsw and hasn't been updated in 5 years. (I am the apsw author updating it about quarterly but not the publisher on PyPI for reasons.) Go does use namespacing. A single namespace prevents forks (under the same name) and also makes name squatting very easy. Hopefully Python will figure out a nice solution.

Category: misc – Tags: exit review, python

Exit review: Emacs

A shocking time has come - I've given up Emacs, after using it for 20 years. When interviewing developers, one of the questions I ask is about their favourite editor. I don't care what the answer is, but I do very much care about why it is. An editor is a fundamental part of developer productivity, so I want to hear about the candidate caring about their own productivity and trying to improve it on an ongoing basis.

The irony is that I was using the same editor for decades. I did keep trying to find improvements, but never could. There are two sides to Emacs - one is as a competent & coherent editor, and the other is "living" in it. It has builtin web browsing, image viewing, email and news support, terminal emulators etc. I was never one of those.

Before Emacs I used vi. Its modal interface, small size, and availability on all systems make it a good tool. However it was text console only, and didn't do colour, menus, multiple files or other useful functionality. (It does now.) vi does have a learning curve - I estimate it takes about 4 years to be good with it, and 8 years to be an expert!

I had known about Emacs for a while, but it was text console only, and didn't do colour, or menus. Each attempt to use it left me frustrated with what amounts to another arbitrary set of keystrokes. (I've always been a cross platform person so I was also juggling keystrokes for other operating systems and applications.) A colleague (hi Jules) introduced several of us to XEmacs around 1995. It had a gui, and colour, and most importantly a menu system. It was no longer necessary to memorize a large set of new keystrokes, as the menus showed them. You could do everything without knowing any, and then pick up those you use often enough.

By the mid 2000s XEmacs was languishing, and Emacs was slowly catching up with the gui. More and more packages only worked with regular Emacs (there were small but growing incompatibilities). I eventually made the switch from XEmacs to regular Emacs.

There was an explosion in different file types I was editing: Python, C, Javascript, Java, Objective-C, HTML, HTML with Jinja Templates, JSON, matlab, CSS, build scripts, SQL, and many more I have forgotten. Emacs had support for most. Support means syntax highlighting, indenting, jumping around notable symbols etc. More packages were produced that did linting (looking for common errors), and various other useful productivity enhancements.

At the same time a new editor Sublime Text was introduced. It had fantastic new interaction (goto anything, projects, command palettes, multiple selections, distraction free) and a rich package system (written in Python - yay!) I kept trying it, but kept finding issues that affected me. Development also seemed to drastically slow, and since it was closed source there was no way for others to improve and update the core.

Meanwhile Emacs became more and more frustrating. The web (HTML, Javascript, CSS) is not a first class citizen. Not many packages were distributed with the core, and you had to copy crytic elisp code from various places, or use strange tools to try and get them installed and kept up to date. Then you had to do that on each machine. Heck the package repositories (eg MELPA) didn't even use SSL by default! My emacs configuration file kept getting longer and longer.

Ultimately tools these days are defined by their vibrant community, useful defaults, and easy to use extension mechanisms. Emacs has all those, especially in the past. But they are of a different era and different cadence.

I have switched to Atom. It had a rough initial exposure with performance problems, and the extremely dubious choice of being closed source. However both have been addressed. Just days before Atom 1.2 was released, I removed Emacs in favour of Atom 1.1. My configuration file is 10 lines long, and I get the same experience on every machine.

Category: misc – Tags: exit review

Farewell: Mario Kart Wii

Last week Mario Kart Wii online services went away. I am a fan of driving games and have had Mario Kart Wii since it came out in 2008. Most driving games only allow for perfection. If you take a corner badly or have a crash, then that is it. You'll have lost several seconds and have to start again for the position or time [1].

Mario Kart is very forgiving, using goodie boxes scattered throughout the tracks, containing random items. The closer to the front you are the more pointless the goodies are, while being further back gives the good stuff especially items that let you get closer to the front.

That all leads to a nice balance. Mistakes that lose position get you better goodies that let you recover. Players who aren't as good drivers also get opportunities to move up. You get three laps of hectic racing with everyone having a reasonable chance of a good scoring position. And the best driver can come last too.

The single player game, racing against the computer is ok but not that much fun. You need to complete various cups to unlock vehicles and characters. It just isn't that hard nor does the computer offer much challenge.

Online on the other hand is spectacular fun. You race against other people. Unlike the computer they do all sorts of unexpected things as well as cool tactics. This makes every race unpredictable and lets you use your own nefarious tactics. Fortunately Nintendo means there is no interaction with other players unlike the swearing, racism and misogyny reported on other platforms. Heck you can't actually tell it is even people other than they don't behave like the computer does. When playing you'll assign all sorts of motives to actions, be lenient or get revenge.

The engineering is impressive too. The players can be all over the world (and often are) which means it takes a while for position and speed information to be transmitted to all other players. Until later correct information arrives it has to predict where karts are to show you them right now. This is why you can sometimes think you hit or shelled someone but then nothing happens.

Online is what makes this game.

The Wii doesn't do code storage or online code updates, so Nintendo's developers had to get everything right first time for the CD. (By contrast Gran Turismo 6 for PS3 had updates every few days after release.)

There are two areas that Nintendo didn't get right. The first is balance - you expect characters and vehicles to be approximately equal. There are different attributes - eg one vehicle may have a higher speed, but lower acceleration or vice versa. These can still be balanced. Sadly they gave the bikes too much advantage, with the consequence being virtually all highest scoring players using a big player (eg Donkey Kong) on a bike.

The second area is the waiting. Each race is a multi-step process waiting to join a race, waiting for everyone else to join, selecting a track, waiting for everyone else to track select, waiting for the system to pick the track, waiting for everyone to load the track and then finally you get to race. A lot of this waiting could be combined to make the whole process be quicker.

Sadly near the end the distasteful topic of cheats came up. Some people reverse engineered what was going on and could for example shell every player as the race started, or avoid having anything affect them. Despite these "impossible" things happening, Nintendo never seemed to do anything about it.

So what is next? Wii U has a new Mario Kart coming out, but it isn't that good. And it costs over $300 because you have to buy a relatively unpopular system. I'm going to pass, and just remember the several years of multiplayer Mario Kart Wii for the fun it was.

[1]A notable exception is Excite Truck where you lose a fraction of a second in a crash, and even get points for how spectacular the crash is. When the game resumes you are still in the thick of the action instead of seconds behind in the dust.

Category: misc – Tags: exit review

Exit Review: Novell Bag

In the spirit of Bunnie's exit reviews I'm writing about a bag.

In 2005 I happened to be passing the Moscone Center where lots of events happen, and spotted many people on the street with the bag. It turned out Novell's Brainshare conference was happening inside and that was amongst the swag being given out. The bag looked the perfect size to me and one was ordered online. In the almost decade since, that bag has been with me all over the world for both personal and professional trips and meetings, and has been perfect.


It is hard to get size exactly right. I wanted something big enough to function as a carry on (eg some clothes, toiletries, books, electronics and laptop) but at the same time being small enough that it easily fits in overhead bins, cars, and with me when I am walking. This bag makes the tradeoffs and gets the size exactly right.

When other passengers have been made to weigh or measure their carryon, I've always been bypassed with the bag.

For my last two laptops I specifically made sure they fit in the bag (just). They were the Lenovo Thinkpad T61 (15 inch) and T430s (14 inch).

Wheels and extension handle
It has wheels at the front and a nice long extension handle. The handle has two vertical pieces which makes it very stable and easy to control.
Straps, grab handle
There is another decent sized grab handle on top, useful for pulling out of overhead bins or just moving the thing around. There are also two backpack style shoulder straps at the front, hidden behind a panel. Although I never remember using them - it was always wheels or grab handle.
Plastic bucket
You can't see this in the picture but the entire bottom is a large plastic bucket with the fabric over it. It is about 15cm deep. This means that if it ever ended up in water, the water would have to be quite deep to actually get into the bag itself. It is nice to be puddle proof.

There are 3 compartments - not too many and not too few. At the back (closest to the camera) is a small compartment suitable for keys, documents, pens etc. There is a nice organizer inside for all these including a zipped pocket and quite a bit of space at the bottom where I would have things like spare contact lenses and an alarm clock.

The middle compartment is for laptops and has a nice padded pouch plus enough additional space for things like mice and power bricks.

The main compartment is suitably spacious. Even when full it kept its shape which meant you could still easily get the laptop in and out.

Side pockets
You can see one suitable for water bottles or rolled up magazines. It has a drawstring with a clamp to keep whatever is there from falling out. The other side has zipped pocket - perfect for ear plugs and eye masks.
Understated but sufficient colour
The black colour means it doesn't draw attention to itself, but the red trim and panel at the front made it sufficiently noticable that it would get lost in a sea of other black bags or get forgotten in a meeting room.

Sadly it broke earlier this year with the plastic near the extension handle folding over. This causes the main compartment to distort which then does the same to the laptop compartment rendering the whole thing broken (or at least significantly reduced capacity.)

It was the exercise of trying to get a replacement bag that made me appreciate just how perfect this one is. Sadly Novell don't sell the bag anymore, nor could I track down who actually made it.

During my shopping trips to get a replacement I found problems like:

  • Not having wheels
  • Too large or too small
  • Mismatched dimensions (eg really tall but comical lack of depth)
  • Nowhere to put a laptop
  • Designed to only take small Apple laptops (eg 11 inches)
  • Not having easily accessibly external pocket/compartment for travel docs and similar
  • No side pockets
  • Very inconvenient to take laptop in and out
  • Tendency to fall over
  • General lack of attention to detail

So far the JWorld Sundance (model RBS-19) has been the least worst replacement, and took a really long time to find.

Category: misc – Tags: exit review

Contact me