Chatbots: The Revenge of Command-Line

Recently I began hearing terms like “conversational marketing”, “chatbots” etv. and I was thinking that should be a joke or something. It was during my university years (around 1995) that windows 95 were released and the GUI paradigm won the competition against the command-line, which was more popular on unix-based system at the time.

I even remember students among several others, expressing their disappointment for the command-line of unix, and how in windows one can administer the services and the apps more efficiently. I was thinking back then that it was lack of experience, you know, it is like Leon said: “first you begin with the sniper rifle, as far as you can be from your victim, then you end up with the knife”. So, it was typical for inexperienced users to begin with the UI that had all the options exposed and the most experienced to end up with command-line that provided rapid configuration and automation.

Time has passed since then, and GUI won the war obviously. My kin (aka people that liked command-line) ended up with OS X, that has excellent apps and stability, backed by a unix-based system.

But as it seems, revenge is a dish served cold. Chatbots, which are the latest trend are backed up by artificial intelligence and provide automation through a chat interface, like slack. But the chat interface is like command-line right. So you have to memorize commands in order to receive specific functionality or information. So, all these people that hated the command-line, now through chat, they love it. And they will be very happy to use it! Cool huh.

Either way, things are very interesting these days and the progress has been real significant in applications and hardware. Now that I think about it, maybe the bash should be a chatbot right? Put a little AI in the traditional shell (and NLP). Who knows?

Meeting that Deadline, Part One

I am almost one year now at the position as CTO of e-food ( and my duties involved several areas, including complete restructuring of the IT department, modernising the software stack and battling several old-demons of the current system. In our effort to address all these issues, we became more agile and hired several developers (I prefer the term developer than engineer for some reason). In one of the latest sprint review and retrospective, a newly hired developer, only 3-4 days at the job at the time, he quoted “you know, I feel there are no real deadlines here, I do not really know if this is a problem, but I cannot feel any pressure so far”. I heard his comment very carefully, I thought at the time, “what exactly did he had in mind, that we had to feel pressured to deliver things all the time? I prefer to be able to deliver things with no pressure at all” and thus I began thinking my role there, and what exactly I should do as CTO of the company.

The Short Answer

The short answer I gave to the team was that my role is to keep the pressure out. I should talk with all people in the company, make the hard choices regarding technology, give my insights, even deal with complex problems on my own, but let my team thing that there is no actual deadline. The deadlines are set during each sprint’s goals, but we should use them to organise our work and coordinate with the other departments of the company, and not to actually make ourselves obsessed with them. Of course, we should not miss them, but missing them is also meeting the sprint’s goals, right?

Did he liked my answer? I do not think so to be honest (even now) if he was convinced at the time, but I think these issues are answered due time, when things are beginning to happen and most importantly delivered and deployed.

The Distance

At the time, I was still involved in the sprints actively. The team was really small when I arrived, and I was very picky in my selection of people. I developed some critical parts of the system, in order to help the team, build some confidence and gain some velocity. But, one day, the CMO of the company told me, “why you are in the sprints? You know, I was at first, but it has no meaning. You have to trust your people and focus on higher level issues.”. Ooops, it was the second time that I got myself thinking, if my previous life as a developer made me taking wrong decisions. So, I decided to get some distance from day-to-day coding. So, effective immediately I removed myself from the sprint, getting the appropriate distance from “production” code, also from deadlines, which from now on I have to coordinate people to achieve them, and not implementing them myself.

… to be continued

.bashrc generator

Today I was just browsing on the web (slow Sunday thing). Just discovered this .bashrc autogenerator :), which is super cool for those who do not have spare time to dig through man pages.

I have also using some custom scripting to automatically get current git branch, among other things …

Easily Install Docker on OS X

I tried recently to install docker on my mac. The problem with the mac port is that it needs a VM that runs linux to properly execute it locally. I found this guide.

In short, it uses a Virtual box image to run the app. The whole process can be simplified by using homebrew. Just execute the following commands on a console:

brew update
brew tap phinze/homebrew-cask
brew install brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker
boot2docker init
boot2docker up

… then export the three environment variables and you are ready.

Note: The default image size created by boot2docker has only 4GB hard disk space. Make sure that you have all the required parameters in place when you launch your docker instance, since later on it’s a fuss to resize the HD. 🙂
Note 2: I think that docker is a dependency of boot2docker, so you really need to install boot2docker only.