Programming concepts: who needs to know about Monads? who doesn’t?

Programming language users don’t need to know about Monads. No I won’t get into explaining what a Monad is or isn’t, instead I will focus on the potential usefulness as an angle to this hot topic.

I drafted this post in February 2015 then forgot about it. I recently stumbled upon it again, so I thought to publish it, after some minor editing.

There is a clear chasm in the way people communicate thoughts and concepts within programming language communities. And this chasm manifest itself in the multiple layers of conversations in the communities, interacting at different levels. In the mix, some are discussing language design issues whereas others are just trying to get started with basic concepts.

Let me paraphrase Martin Odersky – I got the following rough definition from him, though I’ve lost the reference, I can’t provide an exact quote, just the idea. I emphasise the main idea:

There are three categories of people in most programming language communities: language designers, framework or toolkit designers, and language users.

These groups of people have different concerns, although they intermingle on social media they seldom speak the same language. This becomes quite obvious when you read their tweets.

Recent years have seen a significant focus on functional programming, the cool kids can’t rave enough about it. These are typically functional programming advocates. Monad, a word that comes up quite frequently in conversations. Wow, it sounds so cool! Nobody wants to be left out, nobody wants to sound old-fashioned or inferior, so everyone think they too should be involved with this monad stuff. I think it’s misguided to just dive in without clear justification. Most regular developers really belong in the language users group, they need not bother about monads too soon.

A regular developer is someone who’s main job is to write software aimed at end users. The work doesn’t result in programming artefacts for other software writers, instead the software is produced for people will just run them. If this is your main job, then you really don’t need to know about monads. If you’re feeling some kind of peer pressure, a sense of being important, if that’s what’s driving you into this monad business, then you are wasting your time.

Having got that away, let me give a really short take on what Monads are useful for, the one definition for the non-initiated (sorry, this is you, software non-librarian):

In essence, Monad is important because it gives us a principled way to wrap context information around a value, then propagate and evolve that context as the value evolves. Hence, it minimises coupling between the values and contexts while the presence of the Monad wrapper informs the reader of the context’s existence.

Excerpts from the book: Programming Scala, by Dean Wampler & Alex Payne. Any typos or mistakes are mine.

This explanation is really good, easy to understand, no PhD in Math required. The word value might be puzzling if your choice of programming language doesn’t have such concept, you could just substitute it with something. Ultimately, this is about writing a more general solution, that can be trusted for soundness and solidity if its architectural concepts are backed by math theories. The notion is popularised by functional programming theories, concepts, programming languages and tools. Monad is one powerful tool from such a trove. The  programming language, its libraries and the compiler, combine to provide such power.

The discipline emerged from academia, researchers working on formal proof of algorithm correctness started it all. During my studies at the university, we got introductory lectures on language theories and formal proofs, but never went much too deep. At the time I thought it was really for people who wanted a career in academia, I wanted to make software for people. In recent years, functional programming picked up steam and is ever growing in popularity. I won’t dive further into the background here, there is plenty of material on that.

In the early stages, as your solution is only starting to emerge, it doesn’t make sense to try and reason in terms of monads or not. I think it best to simply write something that works, gives the user what they need. Then only after that first goal is achieved, would you take the time to contemplate what you wrote, look for opportunities to remove boilerplates, repetitions, ambiguities, and so on.

As you engage in this type of exercise, that’s when you start to to think: wouldn’t it be handy if a tool existed, or the compiler, to allow me to make my algorithms and recipes more general, without me having to invent something? That is the point where it is good to look at what your language and its compiler offer, the libraries available. Chances are, you could soon be using some monads without even knowing to call them so.

The more you progress in this journey, the more concise your code becomes, fewer components can perform increasingly more work. The process helps you improve quality, reduce maintenance burden, and even save yourself valuable testing time. If your programming language is built for this, like Scala, Haskell, Idris, OCaml, and so on, then you reap much more rewards. In fact you’d be expected to be building on such concepts. These benefits can be discussed and reasoned about without getting lost in strange cabalistic terminology. Cabalistic is as math may sound like to the uninitiated.

The process illustrated in the previous paragraph would probably be trivial for framework designers. Indeed they need to achieve high levels of reusability without sacrificing performance and legibility. Folks engaged in domain specific language (DSL) design would also have similar aims. Math savvy framework designers would probably go a formal way, that’s where category theory comes into play. Unfortunately, math savvy people can behave like doctors, speaking in tongues that only specialists can understand. And this is how, although well meaning, most people get lost when trying to follow conversations or reasoning involving such concepts.

On social media and blogs, software people who regularly talk about monads and various kinds of math infused concepts, are either language designers, or framework designers, or are perhaps aspiring to become one. They seem to be either demonstrating proficiency, or trying to informally engage people they acknowledge as peers.

That’s it. A programming language user doesn’t need to know about monads. It is useful if they do and can actually take advantage of it, but one can be productive with no knowledge of monads. To those wondering what a monad is, whether they need one or not, I would suggest to check out Dean Wampler’s quote above as a way to assess one’s motivation. If that qualifies their quest, then it is worth reading up many different code samples from multiple languages to find out how to take advantage of it. No need to get mystified.

Suddenly my MacBookPro becomes unresponsive, tempted to fling it out the window, and curse Apple. But just wait, what’s actually going on?

This article was actually written just before new year. So the tone may reflect that. But I only managed to add a small bit then publish it now.

A recent craze on my Twitter timeline was triggered by someone’s rather ill-advised tweet (no direct link, hoping to spare the poor lad). The guy has CEO as title in his Twitter profile. He tweeted:

The best software developers I know are always hacking over the holidays.

The twitterati started mocking him, sometimes in creative ways. Hopefully the author’s learned his lesson.

Anyway, that aside, I did take a break, turned off my computer for a few days so that I could dedicate most of my attention to my little family. Then, just today, it happened. I turned on my Mac, it became totally unresponsive. I wasn’t sure what I did wrong. I only remembered recently updating the CUDA driver and Parallels Desktop, but nothing else. A strange dialog popped up, giving me the shudder:

your system has run out of applicaition memory

What was up with this? How come, a system that run smoothly for two years, would suddenly behave like this? Puzzling anyone, except perhaps those versed with the inner-workings of MacOS – I’m not one. At this point it would be reasonable to consider a system reinstall, would cost a day’s effort.

Too long, Don’t read [TL; DR]

Two processes showing high CPU usage, Dropbox app for Mac, a called bird which seems to stand in for iCloud daemon. iCloud also showing memory leaks in the system log. Additionally, Docker for Mac Beta, Parallels Desktop, Parallels Access and Veertu are all installed. All of these installed kernel extensions, something in that mix was apparently causing havoc. I couldn’t tell which one. After a long quest, I resorted to 1.) Backup my Mac, 2.) create a bootable USB stick and reinstall the OS. Only then it was back to normal operation. Without losing any files, or buying a new computer, I was able to fully recover my system.

Now the whole story

I took a deep sigh, started investigating. I used the troubleshooting tips that I know, checked the disk with Disk Utility, it found no errors. Uninstalled CUDA, removed items from the LaunchDaemon and LaunchAgent lists. To no avail, nothing helped.

Boot MacOs in Safe Mode

I started googling at this point. I eventually found a suggestion to restart the computer in Safe Mode. I wasn’t sure why that should help, but I tried nonetheless. I followed the procedure:

  1. Restart the Mac
  2. Immediately press and hold the Shift button.
  3. It took so long that I actually put something heavy on the button to keep it depressed and used my iPad while waiting. Later I woul find out it wasn’t necessary to hold the key depressed. I didn’t time it, could’ve been anything between 3 to 5 minutes, but eventually …
  4. When the login screen showed, I released the SHIFT button, then restarted the computer.
  5. The problem seem to be resolved. But I was going to find out soon enough.

Then something dawned on me: Caching screwed up my machine, again!

For a little while I used my computer, then it started to slow down steadily to a crawl once more. It became totally unusable. It got so bad that something seemed to be turning the camera on without user intervention! I checked, didn’t see Photo Booth or FaceTime running, what the heck was turning the camera on then? Now I really started to worry that some malware has crept in, ruining my system.

Chasing malware (or ghosts)

Now thinking that my computer was malware infected, I decided to investigate. First, I covered the camera with a tape, started doing packet capture and analysis with Wireshark. This is a tedious task, it’s forensic work, it takes forever and you don’t know upfront if you’ll get anywhere! I briefly had a go, sampled various connections, scanned and tracked them. I found nothing, not sure how the camera how was triggered anyway. After about an hour of prodding here and there, I stopped and decided to should try something else.

The system became slow to the point that nothing worked. Activity Monitor was stalling with blank screens. Finder wasn’t responding. Trying to launch a terminal session wasn’t working, I would invoke the system search box and it would take 2 minutes to show the search input box! I would try to type something, one character shows, not the rest, I stop typing wait and after much delay, a couple of characters show and then again no response. In short, all the signs of an absolutely hosed computer. My trusted workhorse was just letting me down, without a warning, and all the usual troubleshooting tools keep showing me green, a clean bill of health for my computer. What the heck is going on?

Getting angry

At this point my patience run out, starting to get angry. I have no idea how I managed to trip the system up in this way. I felt I wasn’t actually doing anything special or tricky, just running Parallels Desktop and getting my Windows VM updated. Other than that, nothing else. I can’t remember such a terrible experience with a Mac since the days before I got rid of Adobe Flash, a few months before the famous thoughts on flash letter was published. Simply cursing Apple is now tempting, given the perplexing decline in quality at Apple. But I thought better of it, I wasn’t just going to fall for a cargo cult. I had to fix this, it’d already cost much time but I had to find out.

Boot in recovery mode

I rebooted it in recovery mode, intending to restore from a backup. Then I found out, rather was reminded that I had explicitly excluded the OS from my backups. Had I resorted to the online restore or other means, I would be going back to an ancient version, this means OSX Maverick! No way!

I left it alone, went back to socialise some more.

A few hours later, I returned, not sure if it’d be worthwhile or not. I run a systems diagnostic test, boot with ⌘ + D. The diagnostic completed signalling no errors or problems at all! This isn’t making any sense at all, no problems or errors anywhere, yet my system has suddenly become unusable, how is this possible ?!?

I had to look in another direction now, perhaps I should have done right from the start. I booted it up in recovery mode again, this time I opened up a terminal session to examine the system differently. I had a hunch that perhaps some software has setup a kernel extension hijacking my system.

Kernel extensions misbehaving?

On terminal, I looked for “.kext” files in the system Library. There were a bunch of them. I couldn’t recognise most, logical since I’m mostly just a user. However, I was beginning to doubt if Docker for Mac or Dropbox was causing the issue. The reason for thinking that is because, I know they are architected to directly hook into the system, listen to low level events and catch some of those on the fly. Dropbox is a particularly aggressive one, I had to remember to turn it off before ever upgrading Xcode for example. Whenever I fail to do that, Xcode installation or upgrade would take forever.

So I had my potential culprit. I deleted every kernel extension associated with Dropbox, Docker for Mac, and Veertu. I also deleted the apps themselves, emptied my account’s Login Items, then restarted the computer. And tah dah!, there it was, back in business again, all responsive and smooth! Phew! This cost me hours I hadn’t planned. I decided to write about it, use it normally for a couple of days before reaching any definite (temporary) conclusion.

Are we there yet?

After all that effort, I thought I was safe. I was wrong. After a reboot, the system performance would slowly degrade. Before it became totally unusable, I would reboot it, gain some relief only to go back in the same state in less than an hour of normal use. I was baffled. Alas, having tired of trial and error, I decided it was time to call Apple Support. As it happen, my standard Apple Care support  had expired, so I had to purchase a one time € 29,- support call. I decided to go for that.

I called Apple, the friendly voice at the other hand took me to the usual drill, paths that  I’d already exhausted earlier. We went through reboots, diagnostic, SMC Reset and all that, to no avail. Apple Support suggested that I reinstall the OS from the recovery mode session, and call them back should that fail. I hung up, took a break. I came back and tried to reinstall the OS from the recovery mode. I booted in recovery mode, tried to reinstall the OS, it would start for a little while then fail. I tried this several times, no success. I eventually gave up for the day.

The next day, I called Apple Support again. Apple Support now suggested a remote session, I were to download and install a program. That process also stalled, I got a zero length file that wouldn’t install. Apple Support now suggested that I book an appointment with Genius Bar. I reluctantly thought I’d try, though I doubted it would help. I called Genius Bar, they were super busy, the next free slot was a full week away. I couldn’t be without my laptop for that long, I decided against this. I had to figure it out by myself, buying another computer seemed like a real possibility now. But which one, given that it was allegedly ‘no longer for professionals‘ ?  😉

I went to my Mac Mini, an mid-2011 model, still working fine though noticeably slower. I checked the time stamp of my last successful Time Machine backup, it was one day earlier, in the interim I hadn’t created anything new on my computer. So I could afford to rebuild it. Using the Mac Mini, I launched App Store app to download a fresh copy of macOS Sierra. When it finished, I created a bootable USB with it. I tried to boot my MBP with it, that didn’t work. So I booted it up normally, logged in as one of my spare admin user, then mounted the USB stick and launched the installer app. The first attempt failed, but the second attempt worked. Finally, I could let it go through the long running installation process to its completion.

Once the OS re-installed successfully, I rebooted the machine and logged in with my regular account. I found that everything was where I left it, nothing lost, nothing broken, and my computer was back to its shiny best! I had expected to have to restore from backup, I didn’t have to. And since, for a long while, I took the habit of spreading my work files between iCloud and  Dropbox, I was sure my work documents were available, intact.


I am not sure what triggered the problem, but it was really startling and irritating to see my computer suddenly become unresponsive. I still haven’t figure out how the camera seemingly turned itself on. Was I hacked? Is there some command line tool or keystroke sequence to start Camera without using FaceTime and Photo Booth or some kind of camera enabled app? I don’t know, it is not reassuring at all. It might as well have been a malware, I had no patience to do the forensic work, rebuilding it has got me rid of any troublesome bit there was. As I was contemplating this issue, I saw a tweet in my timeline, on the security aspect. It’s a product I once run into but might now give a try.

When our computers become unstable, we are often quick to blame the vendor. This behaviour is even more acute when it’s open season for bashing a vendor. By this, I mean the cargo cult habit of thrashing a company for it’s alleged failures. Whether justified or not, that’s how people typically behave. I’ve linked a few articles above on this subject. You can’t always blame people, it’s frustration due to feeling powerless and a sense that you’re getting a service below par. Yes, some are definitely out for grabbing headlines, juicy click-baits, I-was-first and what not, kind of pursuit. In my particular situation, the system was healthy with regular apps running. Having installed a bunch of stuff over time, I eventually reached a point where some system extension caused trouble. So, once trouble hit, backtracking some of what I did, I was able to eventually recover my system. It did take a lot of time, as I hope I’ve detailed enough. Does this say something about Apple? I am not so sure. Years ago, when I only used Windows PCs and laptops, I also reached such situations at times. Does this say something about software reliability in relation to extensibility? Absolutely!

It’s often a question of trade-offs. I could have pursued the path of getting external support, it would have cost me time, money and I’m not even sure the fix wouldn’t have unnecessarily resulted in even more expenditure. By doing it myself, it cost me a lot of personal productivity and leisure time, but I didn’t spend any extra money to solve it. Maybe I was just lucky that there was no hidden hardware or other serious issue.

It could have been a hardware issue, though the diagnostic tools didn’t report any problems, I have to rule that out. So, yes it’s possible that Apple software contains some annoying bugs, every software has those. Maybe I was just unfortunate to have hit one. The same thing is possible with any number of third-party software I have installed over time. It is also possible that I was infected by some malware. Whatever the case, in this particularly situation, having found the resources to troubleshoot my problem and get back to a normal operation, it would be harsh to only blame Apple.

Mac, Windows or other Unix/Linux are all susceptible to get corrupted and become unstable eventually, as you install more and more software on it. We, the users, most often find ourselves in the latter situation. The non-technical user, the user in a rush, often don’t have the resources to fully recover their machines in such situations.

If you’ve hang around this far, I thank you for your patience and I truly hope this tale could help save you some time or frustration or even unnecessary expenditure, some day.

An abundance paradox: so many opportunities to innovate, yet so little demonstration of it

In his number titled Rat Race, Bob Marley once sang the following lines,

In the abundance of water,
The fool is thirsty.

I think it could apply to the world we live in at the moment.

Many observers wrote that the world is producing unprecedented amount of media at an unprecedented rate. All that information is mostly freely available. Yet it has hardly been more difficult to make proper use of such manna. Technology is evolving at such a pace that the barrier to innovation is lowering by the day. Capabilities that would sound like science-fiction just a few years back, are now becoming available at near commodity levels.

It has never been easier and cheaper to publish digital media. At the same time, long established media publishers seem to be relinquishing publishing control to new players such as Facebook, Medium or Google. I won’t even start on horrible terms such as post-truth and similar misnomers, you get the impression they’re on about some World Wrestling Entertainment show, or maybe soap operas. Quality seems to be missing when it should’ve been easier to publish truthful and newsworthy items.

It used to be very difficult and time consuming to design and build even modest web solutions, nowadays the task can be accomplished at a fraction of the cost and comparatively no time at all. And yet, many businesses are struggling to digitise their processes, take many months if not years to deploy decent solutions. We might not be learning fast enough, have our eyes on the wrong priorities, struggling to streamline our messages and get them across, falling too quickly to fads, finding it difficult to separate wheat from chaff. The reasons are varied and multiple, but it is clear that technological prowess isn’t proportionally resulting in unquestionable progress in a lot of cases.

All this, to me, point to an increasing inability to innovate and deliver value when it should have been relatively easier and cheaper to do so. Why is this happening? How come we can’t seem to do better, despite getting access to ever better and cheaper tools and learning?

I just read an article about a new uncertainty that’s going to hit businesses that ship user-facing software solutions built on the Java platform. Many who invested in building IP around user solutions, will likely face large bills or tedious legal procedures. This will come as a shock surprise to many, who never considered the scenario.

Fluff, stuff and veneer

Products can be categorised in three broad sets, based on the proportion of fluff, stuff, and veneer in their structure. This can be seen in the picture below.

distribution of fluff, stuff, and stuff

What really makes a difference is stuff, that is the true substance. Fluff is often added to help with margin. Veneer makes it easy to sell, may also help with the margin. Users are more naturally looking for (a.) type of products, but this is often not the case. Companies that offer (a.) type of products usually have more affinity with value, have more empathy, and can learn to adjust to changing times. Companies offering (b.) products also have decent chances to respond when the environment changes. However, those only dishing out (c.) products will suffer most in times of change. The latter group builds on thin air and is promptly exposed, they may be adept to fad.

What about infrastructure?

If infrastructure is at the core of what a company sells, then it may well be stuff. Even then, there is value in working out how much fluff and veneer it may contain. In other cases, if infrastructure is determined to be a key part of the differentiator, then it should still be considered as stuff. When that is also not the case, then infrastructure may well be part of fluff and should be given a lot of scrutiny. A key consideration is thus, how do you determine what is fluff, stuff or veneer? In which part are you spending most of your resources, stuff, fluff, or veneer? How do these spending proportions look like? In which one have you become very good at? These are important questions to ask.

What’s fluff for one company may be stuff or veneer for another. Other combinations apply equally. Infrastructure for one business may be veneer for another. It is quite likely that the proportions would differ significantly, even for companies serving a given market. Attempts to apply generally accepted recipes should focus around formulas and the careful gathering of input, but definitely not pre-cooked outputs that might be off in a different context.


If a business strongly relies on information technology, an increasingly common case nowadays, it ought to carefully consider applying the sharing economy principles. Essentially, the path to nimbleness is paved with pay-as-you-go operating models, requiring less and less ownership of the infrastructure. The less infrastructure you own and operate, the less liability you incur, the more agile your business becomes.

Roughly, the notion of sharing economy that has taken hold in recent years, sees people increasingly ditching ownership of fluff in favour of sharing or renting. Stop owning things that may be fluff or veneer, share those instead. When applied to the context of business computing, sharing amounts to embracing cloud native solutions whereby infrastructure is put to maximum use over its allocation time.

An obvious and immediate defensive reaction I often hear is, how about vendor lock-in? That’s possibly one of the most overused red-herring these days. People are too inclined to worry, afraid of getting stuck, preferring to freeze and starve instead. That’s like worrying about your hair style while standing in the pouring rain. What’s the point in that? I don’t have enough space to discuss lock-in in this post, I’ll just say that it’s a non-issue for most businesses that find themselves on a burning platform. Even in plain sailing conditions, choice is inevitable. Whatever choice a business makes will obviously imply some kind of lock-in. Being afraid of it doesn’t change things, choosing the right kind of lock-in does. No lock-in often means going for the lowest common denominator, that should be vetted against the cost of operating such setup.

When people and companies succumb to fad, that they mostly go with the flow, there is an absence of steering. And that’s one possible reason that so few innovations are emerging out of the abundance of the opportunities created by technological progress. Likewise, the overabundance of information is creating a discernment crisis, all look the same to newcomers, experienced folks may have lapses of vigilance, deafening noise cancelling out sound judgment. Sure, we learn by experimenting, by failing as they put it. Fail fast is the motto in hip startup technology circles. But, exactly how fast should that be? At what point does it become a case of fail fast rather that an instance of quitting, abandoning? How do companies determine that it is time to fail? Some will try to copy recipes they’ve heard worked elsewhere, only to fall into a me-too trap, no realising the benefits sought after.

Fixing Apple Calendar sync problems on MacOs, a tale of caching gone wrong

Ever seen an error message like this before?

Apple Calendar for MacOs sync error
Apple Calendar for MacOs sync error

If so, could you figure out, as a regular user, what was wrong?

Well, I have run into the problem. In fact many times in the past, I usually ignored it, would close Calendar app and not rely on it. But recently, I thought I’d look into it. I found out why and how to fix it. My first place of call was Google Search, leading to StackOverflow, some Apple articles, all quite frankly misleading, but they put me on the path to a solution.

Such error would turn off every user who isn’t technical, and the fix is likewise a turn-off. Here is how to fix this problem. I assume that the readers might not all be experienced Mac users or very technical, hence I include more detailed steps.

1.- Quit Calendar, to prevent it from crashing. Simply close the app, sometimes it gets stubborn and you have to force-quit it.

2.- Stop Calendar Agent service, it runs in the background. Here is how.

  • Start the Activity Monitor app. I always use ⌘ + Space to find and start programs. Press ⌘ + Space, type Activity Monitor then ENTER.
  • Search for: CalendarAgent, just start typing the word. when it’s highlighted, click on the Force Quit button as indicated. See the illustration. activity monitor

3.- Now it’s time to open Terminal.

Press ⌘ + Space, type Terminal then ENTER, to start the app. Be cautious in this step, don’t accidentally delete anything. If in doubt, simply move files to your Desktop for example. First, let’s see what files are there by listing them

$ ls -lpatrh ~/Library/Calendars/

You’ll see something like this:


This is macOS caching calendar events, locally on my MacbookPro. Some of these folders contain files that are no longer valid. Apparently, Calendar app wasn’t able to figure it out and is throwing its hands in confusion. With some patience I could go through these folders, find out exactly which ones aren’t good and remove them. But, no, I don’t have time for that. I just get rid of them all and let Calendar re-sync with the servers. In my example, I move the files to Downloads, which can be emptied if everything goes well.

$ mv ~/Library/Calendars/* ~/Downloads/

Now that the cached files are gone, it’s time to start Calendar app again.

4.- Optionally, toggle Calendar OFF then back ON

Since I am unsure how many other places caching may be occurring, I apply my usual macOs toggle technique. This means that I turn OFF and then ON again, the Calendar feature of my Internet Accounts. To be sure, press ⌘ + Space, type Internet Accounts then ENTER. toggle calendar

5.- Open Calendar app again

When Calendar starts up now, it should find that it needs to download everything from the servers, it would do so, and the error should be gone for good. Phew! What a hassle that was!

This shouldn’t happen, yet it does. This is not user friendly in many ways. For a start, the problem seemingly appeared out of nowhere, in the sense that I am not aware of any user action I specifically took that should result in such outcome. This means that 99% of regular users would find this baffling at best. Second, the error message means nothing because, again, I never entered such a URL anywhere while setting up my Mac. I can see what it is suggesting. It was all auto-magic while configuring my email accounts, so I shouldn’t be asked to fix a URL that I never actually typed.

What was the problem then?

In short, it was a caching problem. The clue can be seen in the suggested buttons. Here it is:

revert to server

This is telling me that a local copy, hence a cache, is not aligned with the server somehow. Looking at the URL, I can’t see anything wrong and all my other devices, iPhone and iPad (Android or others, if that’s what you have), are functioning properly. In earlier attempts, I did what it suggested, the dialog would pop up again and again. I also tried the ignore option on occasions, to the same effect, the dialog keeps popping up. As a user this is very confusing, because you don’t know how many times it would and why it keeps nagging about it – my hunch at this point, is that the dialog would occur for each problematic folder found in the Calendars cache place. Worse, after a reboot and sometimes a re-logon, the same ugly dialog pops up again, repeatedly. This is infuriating, as a user, it seems I can’t get this issue behind. If this happens to you, hopefully with the steps above you have resolved it.

I’ve had Calendar working properly many times and over very long stretches without any troubles. So I knew Calendar app can be reliable, I just don’t know what tripped it up and what else I might be missing should I continue ignoring the error. That is what motivated me to look into it eventually.


One might ask, how would Apple ever allow such a seemingly trivial problem to occur? Why not prevent it by design? I can see a large number of reasoning behind it, why it might not be so easy to solve this kind of problem in a durable way. For example, when a local copy of a calendar event isn’t aligned with the server, it may be because changes on one device didn’t make it to the server or other devices yet. With many devices on the go, determining which one has the fully complete overview might not be a trivial task. People would be furious if they should lose data due to some clever sync algorithms. I could dive into this subject at length, but that wouldn’t fit in this post.

Caching is very handy when it works. Apple uses it profusely, everywhere and in many ways. But when it breaks, lots of time can be lost trying to diagnose and fix it. I don’t have any stats, but caching could be the cause of a proportionally large number of headaches that we routinely face with our computing devices. In this instance, especially for Apple products, it’s really hard to find out what may be going on.

Since Apple doesn’t tell us much about the inner-workings of their software products, a user, however savvy, may not have much clue how to address this kind of problem. This situation causes a lot of the frustration amongst users of Apple products, and particularly the technically savvy ones. I don’t have a clearcut answer. It’s easy to guess that the very large majority of Apple users aren’t technically savvy, hence wouldn’t venture trying to fix technical issues. However, a case could be made to include an Expert Mode, for those who feel like having a go. Maybe include an Insane Mode (borrowing from Tesla), for the really daring folks, even if that would mean voiding warranty or some sort of disclaimer. We should be able to tinker with our toys if we feel like it, there is no need for father-figure for the entire community.

Interesting thoughts: Frameworks are fundamentally broken

I just read this blog post, Frameworks are fundamentally broken. Many of the points highlighted resonated with me. Then I realised that I blogged about an aspect of the problem that can occur with frameworks. It was a few years back, in fact in 2010 as I just verified. I kept my post at a high level, taking the discussion above Rails and other particular paradigms but focusing on the cognitive load aspect alone.

Tim’s article calls for reflexion. My own take on the issue was triggered as I spotted a rant on Rails (of Ruby on Rails). My post is Code frameworks and ghettos, where creativity gets a lock-in

Innovation shouldn’t always imply full-on revolutionary. Confusing: do people want desktop PCs, or do they prefer laptops to ‘improve’ into transportable desktops?

A lot has already been said about this topic. I want to look at it from one perspective. Imagine, you are part of the product management at a company. And this (anger about MacBook Pro) would be people reaction to your latest product release, how would you consider it, objectively and other ways?

I’ve been taking in all the stuff  written about Apple’s latest MacBook Pro line. If you’d consider it in a logical way, Apple has done a tremendous job, they’ve improved the most important aspects of portability and comfort: weight, display quality, battery life. They’ve made flexible and extensible a part of the computer that no-one seemed to be paying attention to: the function keys. People should’ve been thrilled.

Apparently many aren’t, according to some articles and tweets I saw.

Based on what I see in my Twitter feed, several people are angry about the 16Gb Ram limit. If that were 32Gb, would that have pleased them? Should that be 64Gb instead? How much disk space, 1Tb? 2Tb?, what CPU spec, the latest more powerful intel? And how much battery life to go with that? And would it have to weigh the same as last year’s top spec MacBook Pros? heavier, or lighter?

Until last week, I didn’t see anybody claiming that they needed a laptop with 32Gb Ram, I might not have been paying attention, of course. If Apple had released a weightier but more powerful one, more battery-hungry, wouldn’t people have a fit? Actually, how many potential buyers are there in the disappointed category, 10 Mio? 100 Mio? Or in the  thousands range? How would that compare to the addressable market?

The other group of professionals, which some advocate would be disappointed (are they? will they?) are photographers and media publishers. Apparently the new keyboard doesn’t have as much travel as the old ones. That could be a question of taste, I don’t know. I am not a typist. The loss of SD card and fewer extensions. I can understand that SD card would be a daily use item, but surely in that case anyone with a 2014 upward model is sorted for at least another year, wouldn’t they?

Often, as folks write their complaints, many also note that 2015 MacBook Pro was the finest laptop they ever had! I’ve seen similar things written about the last generation of iMacs. What !? So you’ve got the finest ever, it’s still doing great for you, why wouldn’t you keep things that way for another year or two? I’ve got a 2014 MacBook Pro, I’m still happy with it. When Apple released the 12 inch MacBook it was also a kind of concept machine, not aimed at volumes but setting a new direction. The new MBP might or might not fall into that category. But it seems that Apple does this quite often, all the way back to the first iPhone.

I read that professional developers are angry they’re not getting more powerful laptops. That’s strange. Because, most of the time, I only read pro developers proudly stating that they don’t need IDEs, that they only need a unix-compatible shell session on a terminal and a text editor. Furthermore, these folks practice continuous delivery, run their infra as code, maintain their code repository on GitHub, deploy their workloads on AWS, Google Cloud, Azure, and many variant hosting environments. The cool kids are all creating microservices, spinning up Docker or Kunernetes clusters backed by large datastores or block storage clusters. So a beefier laptop is more apt to running (heaven forbid) monoliths, something that the cool kids don’t do, and surely clusters and more networking would mean cloud or more hardware than just a laptop. These folks travel all the time, they do talks using web-browser based slideshow apps, and on the road they hack using text editors only. So these pros, albeit an elite group, really don’t need laptops with any more memory or CPU power on a regular basis, they need faster networks and faster access to the cloud where their serious stuff lives. The exception is obviously those doing GPU intensive work, again, a very select group.

I am confused about all the hoopla. Especially, when I read how some of the same people are raving about Microsoft’s new hardware, then I get the impression that some undeclared passion is leading to frustration. Samsung regularly releases higher spec’ed mobile devices that Apple’s, that doesn’t drive the same kind of reaction, albeit iPhones get more frequent refreshes. I find it hard to see the rationale for the angry responses. I explain.

The very first laptop I worked with was, wait for it, a Toshiba with 8 Mb Ram and 120 Mb disk. I think it weighted around 6Kg. I stop here with the specs, the point I want to make is around portability. A few decades further, we always want lighter laptops. So lighter and faster  (or at least not slower) and with better battery life, should be good, shouldn’t it?

Furthermore, if you’d put yourself in Apple’s shoes, what have they done so badly wrong here? Before I elaborate, I need to point out that folks insisting in using the term “fanboi” or “fanboy” are just being childish. Those won’t read this blog, or not go beyond this paragraph. I don’t care, I actually want them to go away.

Now, here are some my reasons for thinking that Apple did a good job:

  • all of Apple’s latest hardware have improved computing mobility:
    • more Cloud service for ubiquitous access to data created on any device
    • more wireless services for seamlessly transferring data across devices
  • better displays, slimmer devices
  • function keys typically do nothing all day: Apple rejuvenated that space, and ensured more of your computer is working for you
  • if portability is increased by making devices lighter and no loss of power, then Apple’s scored well here
  • if removing some physical connections would help make a device lighter then, offering more wireless and cloud capability is a good balancing choice
  • If supporting 32+ Gb would require a board consuming more battery life, then the trade-off is to go for battery, expecting folks to keep shifting heavy-duty workloads to Cloud, use more wireless, and their keep already nice earlier models.

Apple also stated that the new MacBook Pro architecture represented a new start, for bringing up more things that they are not disclosing yet. As everybody knows, this is Apple’s code for we’re also working on stuff we find exciting but that aren’t ready yet, so we can’t tell you much more than that folks. This could be the reason that no new iMacs or MacPros were announced this time. They might be trying to find a way to open the next “5 year lead”. Whatever else might be going on, I think Apple’s done enough to keep engaging their customers. Not to lose them, obviously.

Those who’d put themselves in the Apple’s shoes, should see many things to like. The usable life of a laptop is easily 2-3 years, so those with a 2013 laptop should be the ones looking to upgrade now, and if they do they would most probably be thrilled. Their 2013 computers will not suddenly die anyway. My 2009 is still around and works, but with the successive transitions, it’s no longer that useful to me like it used to.

No company in their right mind would make moves to alienate their customer base. Apple doesn’t seem to be, from my point of view. Apple under the current leadership has been more attentive to external feedback than the Apple of yore, so it’s bizarre to read that they are intentionally trying to annoy their customers.

On the other hand, if people expected that Apple’s devices should always be the fastest and more powerful or always be the only ones sporting the most innovative features, if these are the expectations, then I get all the anger. This because Samsung and Microsoft are releasing highly spec’ed devices more frequently. Many of the same people are raving about Microsoft’s announcement, stating that they were switching to Microsoft immediately (out of anger?). I don’t get that one, sounds like an angry rallying call than anything else. I’ve seen Microsoft’s new products, they look nice of course, if I wanted to try it or switchover, I wouldn’t say it’s because Apple didn’t do a good job. Microsoft has done what Apple did, an incremental improvement on what they already had, and the Surface Studio looks very much like an iteration of some models that were released earlier by companies like HP and Asus. This may be folks’ way of encouraging their champion to keep on trying to better competition.

I am following a lof of media and people online. I see and enjoy the regular drop of cogent writing, clear and delightful thinking. But, then, when folks suddenly drop a load of emotion coated with some logical reasoning, they just throw me off course and I get rather puzzled. This is one such instance. It’s a lot more about feelings, much less about unmet needs per sé. Yes, customer feeling is absolutely essential.

Some interesting questions are: how many serious potential buyers are angry, because of the 16Gb limitation? Will reaction persist throughout their buying period? What would happen, should Apple, in a few short months, release some highly spec’ed devices, would the mood turn again? How much of a stable customer base would that represent then? Isn’t hardware lifecycle much longer than say SaaS subscriptions that could be terminated at a snap of the fingers? How would a company do decent hardware design if buyers would turn so fickle?

Maybe people aren’t that angry after all. One doesn’t just throw away years of content, brain muscle and proficiency simply because one particular product release didn’t meet hopes. Maybe it’s just a testament of Microsoft’s move, hold their event just hours before Apple’s in an attempt to steel some buzz. Some will certainly switch. Of those, many might do the same when Google comes up with their next Chromebook for example.

I always follow these announcements with an inquisitive interest. I am not a writer, not a reviewer, just some guy interested in to find out what he can learn. This post might be full of typos and relatively weak prose. But it’s just a simple blog, no ads here, no attempt to create audiences, just a place to jot doen a few thoughts.

In the department of Too Subtle UX, your Apple ID is the unique passport for iCloud on every device

I was triggered by the following tweet:

I quickly read the article and saw what was going on. Indeed I did notice it, but I knew to expect the kind of behaviour. The good news is, the feature seems to be working correctly: with a single Apple ID, you can login to any device and get access to your desktop and documents thanks to iCloud. The bad news is, most people will easily overlook the single Apple ID part, they’d only think about each device they’re using and would not make the mental link to a single iCloud account. Apple, with their clout, are bound to know this and should be expected to anticipate on it. However, as far as I can tell, people weren’t explicitly forewarned, and they’re probably supposed to be obviously aware of owning a single iCloud account (as in Duh, what else are you thinking?). And that is precisely the problem, this kind of logical behaviour, although intuitive at first sight, doesn’t take into account the long established mindset that we all have. Therefore, while upgrading the OS you wouldn’t think twice before enabling iCloud sync.

In my personal experience, iCloud did the right thing. The first computer I upgraded was my MacBook. My Desktop and Document were all properly sync’ed to iCloud. Then a few days later, I upgraded my Mac Mini, this time iCloud added a new folder on my ubiquitous iCloud backed-up desktop, prefixing the folder name with my Mac Mini’s hostname. In an instant I could recognise what had happened and weren’t surprised. It seems that the gentleman who posted the article didn’t get the same nice experience that I did. I won’t speculate on that particular case, but had Apple said something about this topic loudly and clearly as they geared up for the official launch, people wouldn’t get startled and maybe some would have thought things through before upgrading.

To my mind, this is a perfect illustration of the kind of problem I was referring to when I wrote the following post: When the UX interaction can be too subtle.

Maybe this article won’t go anywhere, many having got a good experience. Or maybe, since the twitterati is always ready for some outrage-tweetstorm, there will be plenty of chatter and not just compliments to go about. We’ll see. Funny enough, I was actually pondering this weekend, the apparently lack of something-gate to do with MacOs and iOS10 in social media. I didn’t have to wait for too long. 😉

The original article is here, exactly as it’s title reads:

maybe be careful with osx sierra”

Four days with my Upgraded MBP to MacOs Sierra, a few minor tweaks, but so far no complaints.

Yes, I could’ve waited a couple more days. But had I wanted to wait a couple of days, then I wouldn’t actually want to upgrade anytime this year. The reason is simple, anything that still breaks in a significant way right now will probably not see a good fix until a few months down the line. This has been my previous experience. That’s why I decided this time round, if something should fail to install or run then I’d look for a Docker container and not bother about it much.


Yay! It runs without me doing anything at all. I simply let the upgrade run its course and the restart all happen, when that was all done then Docker continued to work as before. Now I can’t recall, I might have downloaded Docker for Mac once again. In any case, I never tend to remember technical things that went to plan. This flawless upgrade gave me the assurance that my fallback plan, running things in containers, is going to work.

Here is what I did to keep it humming.

Scala and Java

There was an issue with TLS, I fixed it by pointing the JVM to the new location of the CA Certs with this setting:

I did this for both JAVA_OPTS and SBT_OPTS, then I could run Java apps again.

IntelliJ IDEA

If this wouldn’t work then I might seriously consider downgrading. But nope, I didn’t have to downgrade, it worked first time. The one issue I run into was with running a Java app that tried to establish a TLS connection to the outside world. This issue was resolved as per the previous fix. I run all the JetBrains tools that I use, AppCode, IDEA, DataGrip, and so on, no problems with any of them. So This meant that whatever breaks from this point on will be re-homed in Docker and I won’t deal with it.


I’m using RVM, as expected it complained and wouldn’t install or re-install a Ruby binary. I checked the version that ships with MacOS Sierra, it was good enough for me, ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin16]. so I settled with that. Here is what I had to get RVM and the ruby stack going:

  • run, to get the command line tools installed (shouldn’t have to, given that I have Xcode installed, but I was at this spot before and didn’t want to spend any time on it:
  • $ xcode-select --install
  • Switched to System Ruby distro
  • $ rvm use system
  • Restored the install gems to pristine, then everything worked from there.
  • $ gem pristine

Haskell Stack

GHC installs fine, but Haskell Stack doesn’t. I run brew install ghc, but I gave up on Haskell Stack as it just wouldn’t succeed. I run out of my budgeted time, so I stopped trying that.


I got a few misleading error messages from this, but it turns out the real culprit was a prior failed installation via brew. I run brew doctor, looked for and removed all libraries that obviously look related to rust. You can’t miss them. Once I was done with this, I just built Rust from source and installed it. I haven’t used it in any anger as yet, but it seems to work fine now.


Not a single problem. I didn’t even have to touch it, it worked as it always did.


I run brew doctor, to find out what was broken. I found out I had a partially installed Rust version. Rust would no longer install nor uninstall. I solved that the hard way, got rid of all related libraries as reported by brew. After that everything was working fine.

My daily tools

I found out I actually use lots of tools, none of them showed any issues. Omnigraffle, Sketch, Android Studio, Atom, TextMate, Parallels Desktop, Postgresql and a half dozen other command line tools, not a single glitch with any of those.

Forward with Sierra

This is the chance to do a clean slate on one topic that I’ve had in mind for a while. If you follow this blog, you’d remember my statement about containers providing a new chance to compartmentalising software components. With MacOs Sierra, this is my chance to pursue this idea. I will stop installing development components via Homebrew. Instead, I’ll look for Docker containers. This is what I plan to do for everything like DBMS, ElasticSearch, and other cluster native stuff like Riak, Spark, and so on. Basically, it no longer makes sense to install these locally, it’s best to use a container-based cluster manager as that is the only likely use for them.

Closing notes

Please use your own judgment, decide if you want to risk installing a bleeding edge software on your production machine. Remember that Leslie Lamport statement that I often paraphrase, no two computers will likely have the same state. This is important because the slightest difference, and there will be a lot of them always, could result in different behaviours between two seemingly equivalent environments. If nothing else, ensure you have backups that you can verifiably restore your machine from, before attempting this kind of upgrade. If you still go ahead and break your machine, don’t say that I didn’t warn you.

That being out of away now, if you decide to give it a go and it goes well, you might enjoy the experience. Since the upgrade I noticed that I actually gained about 40GB of additional free space. And this is probably thanks to a feature that promise to move rarely used items off of my computer and on to iCloud. Yes, you guessed right, I have an iCloud account.

Never mind Oracle’s business as usual, Java EE has run its course anyway

Oracle might not even have to lift a hand, nature will kill Java EE for them. By nature, I mean the numerous thriving communities that keep at improving the developer experience. Developer experience is all that matters now, and Java EE has nothing to offer there.

Java EE was born out of a playbook for big vendors, in a day and age when vendor push was the norm. Java EE was never about developers, it was always about vendors. Once alternative playbooks focusing on developer experience started to thrive, that’s when Java EE started its slow and steady descent into irrelevance. And there is no stopping that trend. Everybody knows this. Oracle is simply acknowledging this fact then trying to figure out how it can remain relevant in the longer run.

Companies large and small have all come to realise that what used to be called enterprise software needs to be rethought and retooled. The most promising programming models favour an approach that gets rid of large initiatives and management units, in favour of ever smaller and more nimble concepts. These are totally antagonistic to what Java EE stands for. Furthermore, the enterprise push model has had its time and the world has moved on from that. Every large vendor is having to rewrite its business model and rethink its technology.

Java EE has perhaps joined the ranks of mainframe technology, it will survive for a long time in one form or another, but will no longer be exciting. Effectively, Java EE is out of date, its future lies in the past (if that makes sense). It has run its course and has fared well. It’s time to leave it alone and move on.

A selected quote from the article:

Oracle’s silence about Java EE has brought developer community distrust to a fever pitch.

Source: How Oracle’s business as usual is threatening to kill Java | Ars Technica

When the UX interaction can be too subtle

In the tech industry we love metaphors, citing cultural references that make you sound smart in hipster loving social circles. One particular domain where this is prevalent is in user experience (UX). For example, if I quote user experience is like a joke … lots of people would promptly complete the phrase. Apple is frequently eulogised for this. It’s nice that we get inspired by the A players. However, I regularly see occurences where this notion is taken too far. Here is one, with iBooks. I’ll first add a screenshot then I’ll comment on what I don’t like about it.

ibooks doesn't show me the latest books



I’m focusing on the Swift books from iBooks Store. I had older versions on my computer and didn’t update them for quite some time. I’d been mainly using the iPad as my eBook reader. This week I thought to get Swift 3 versions on my Mac but they were nowhere to be found. I thought to remove them and rebuild my library, only then, as I delete a title I now see the option to GET it back and this time with the latest version. In effect, my copy  was overshadowing the latest version in the Store. I find this too subtle.

Not to mention. As I download several titles in quick successions, I am prompted to login multiple times. That just feels wrong, and it is wrong. I can imagine what is going on, but I cannot imagine anyone being happy with this. These authentication challenges are just the opposite of too subtle, they are outright annoying and pointless.

Featured image: