Skip to main content


Showing posts from November, 2014

Just good enough or why TDD should be dead

It's Thanksgiving 2014 and we've returned home after a nice family Thanksgiving dinner. The icing on the cake was the recollection of the Vietnam era Soviet Union and how that story could have meaning on the modern view of TDD and other types of software testing and development. While the stories were wonderful to hear I cannot do the storytelling justice so I'll limit my comments to the learnings except to say that the storyteller was an engineer which included working for the old Soviet space program and other agencies.

When we talked about the space program he verbalized something that UX designers already know. Keep is simple. But what UX designers don't appreciate is that simple also means few moving parts or the second layer of simple in the actual implementation.  As he described it when you're out there in space you do not have time to be distracted by bad interfaces. And things have to be simple to prevent the number of potential points of failure.

The con…

Need an alternative to Skype

I must have misplaced the original post so I'll post it again. I have a paid-for account on Skype but recently they started advertising to me. I could understand if I were a free user but I have a balance so why are you bothering me? Here is the proof...

Google Hangout is a good second choice and I have already started to notify my contacts. I might also start using teamview's version of meeting software. There is also Sococo and I can always install a webrtc server of my own. Skype's days are numbered.

Columnar Code NameSpaces

In order to define methods in a global namespace ... either there is no namespace except the first-class namespace where all names are considered at the same semantic level or there is a hierarchy of names representing all of the individual levels. In the first case everything might be labeled global.myname() and in the second it might be

In the sense of language design there are pros and cons for having proper class structure related to object oriented design but then the global design is well suited for procedural and some functional languages. Flow based programming is extremely well suited for global namespaces.

When I wrote the title for this post I was thinking I was going to implement a schema structure that could be used in a procedural context, however, as I started to construct the content I realized that I really wanted to implement the FBP model instead and that's pretty simple.

method namemethod language typemethod configsmethod inputsm…

code:deck - the game as a metaphor

I have no idea how to play code:deck or if it is even a game. What I like is what is implied by "code on a card". It harkens back to the days when best practices regularly defined the ideal size for a function or class as enough code to fit on a single printed page. In recent years this has come to mean "fit on a single screen" which is also reasonable. The ideal column view, for me, would be a contextual column view.

Creating Extensions for Atom and Brackets

I've created in an attempt to recapture the feelings I had when I was programming with Borland International's Turbo Pascal 1.0. Even though I cannot find screenshots and I have no intention of relearning the WordStar navigation keys etc... I really want to recreate the pure developer experience even if it's just for myself.

The first step in the process is going to be some variation on the theme. Can I get Atom or Brackets to  behave nicely. And can I merge or create all of the dependencies that I need. So the first step in that process is creating the first package, compiling or assembling the package, and then publishing the package.

Here are the first links that need reading:

How to write Brackets extensionsCreate your first [Atom] extension I'm starting with Atom and Brackets because while they are javascript apps running on nodejs they are standalone apps from the host OS perspective. If I happen to go down the Ace or CodeMirror path then I'll pr…

OpenStack - Glossary of Feature Names

Silicon Valley has long since been in love with giving features names instead of numbers. I'm not sure what the exact origin of the practice was but there was a time when projects had names. My first recollection of the double name was from the Debian project which then leaked into the Ubuntu project. I have no real first hand experience with this information it's just the timeline that I'm familiar with... so relax.

I do not have the complete list but the last 3 releases of OpenStack are Grizzly, Havana, and IceHouse. And for the most part that's ok too. They are long standing project with reasonable lifespans and support. People grok the context without much effort.

I typed this list before I found this link. Couldn't the OpenStack team select names that were closer to their function. This is particularly important since the namespace is essentially prefixed by "openstack" anyway. The goofy names are probably better for google searches but they are no l…

Robot publishers beware

How many times have you received buckets of emails from the same publisher and finally decided to unsubscribe only to fine that the publisher has added some friction like a subscription configuration form or even prompting you for your email address? It happens to me from time to time.

I used to think that the publisher was lazy or simply not taking the time to customize the unsubscribe link. But as I looked closer at the email other elements like my name in the header and to fields and sometimes in the footer of the email. So it's clear to me that they are already doing some of the required work and adding a GUID to the unsubscribe would be trivial. The reality is that the publisher is adding friction in the hopes that I/we/you abandon the task at hand.

Which leads me to a word of warning for publishers of this type.  Make it easy for me to unsubscribe or I will mark you as spam. If enough of my peers mark you as spam the filters will get you and it will cost you a lot more to cl…

Do not underestimate the value of proper Estimates and timely Feedback

I’m finally in front of a proper keyboard after sitting in a waiting room and recovery for hours…

What I observed about estimates and timely feedback:
the procedure was as normal as normal gets. Therefore highly predictable.we were told that the procedure was 10 min once she was sedatedsedation was going to take a little longer than the procedureafter 80min I convinced someone to check with the OR. So, while the risk was personal it’s no less important than a business, proper estimates and feedback make all the difference. While inflammatory: anyone who does not understand the value of proper estimates or timely feedback does not have the maturity to lead or run a business; this is not agile but common sense.

UPDATE: if you decided that every method had to fit on a single card, page or screen could you estimate the average time to [a] compose a card, [b] compose a hand of cards, [c] play the hand as dealt?

Introduction to AppScale and Google App Engine - Part 3

I was going to spend the third part of this topic trying the same appscale installation on a VMware install on ubuntu 14.04LTS as well as a CoreOS install. I'm not going to do that now.

I have decided that while the idea of using appscale on private hardware there is a lot to be gained by installing my apps on GAE instead. The fact that I would not have to maintain the host OS is of tremendous benefit. And by extension that could have been accomplished with CoreOS but since CoreOS is really meant for Docker I'm uncomfortable trying to pollute the CoreOS ecosystem.

So this chain of reasoning is over and part 5 of this series will focus on a hello world app in go, dart and maybe nodes if it exists. I will be skipping over python, php, and java. I have already implemented a project or two in python and I like the tools.

turbo lang

Some months ago I reserved the domain, after posting my admiration for everything turbo, because I thought I wanted to build an IDE that reminded me of the original turbo-pascal from Borland international. (no matter how hard I try I have not been able to locate screenshots of turbo-pascal 1.x) A few days ago I read an article about a running tcl code in a browser. And while I was not interested in a browser or NaCL solution I still want that old turbo-pascal feel; and so I registered and I have a github organization called turbolang with the hopes that I can get some help.

I am curious enough to wonder if I can accomplish my goals by forking atom or brackets; or for that matter just implementing some common theme extensions in the way of same compile, link, format etc... But at the core of my thought process is that the turbolang editor needs to be clean, concise, and opinionated. Using the CUA shortcuts etc is just fine but the vim/emacs war is over and…

Introduction to AppScale and Google App Engine - Part 2

In my previous post I tried to install appscale on a virtualbox installation but it failed. In this post I am going to try the same installation on a Google Compute Engine instance following the appscale. Notice that I'm going to install on GCE and not GAE. The current theme is appscale and so I have not switched over to GAE yet.

Here are the instructions for installing appsacle on GCE.
install gcloud SDKcreate an oath credadd appscale image to your repogcloud command is buggy... you have to specify the project id$ gcloud config set project VALUEinstall appscale toolsconfig and start appscaleshutdown appscale I was able to install appscale on GCE and I was able to open the dashboard just to see what was there.  appscale is very interested in selling you a license to use hawkeye and there was something in there for monit but I did not follow it.  There was even a limit to the type of machine that you could install onto; so there was no possibility to install on google's f1-micro;…

Introduction to AppScale and Google App Engine - Part 1

I'm not certain how many parts this is going to take and what the outline looks like. It's off the cuff but I hope you find this interesting nonetheless.

Lately there has been a lot of interest in micro services in the form of Docker. While I am a Docker fan and categorizing it as a micro service container started me thinking about monolithic and micro kernel operating systems; and that also forked a conversation about J2EE and google app engine; with a little flow based programming sprinkled in for good measure.

From the history perspective micro-based systems are faster but harder to orchestrate and debug. This is the one prevailing reasons why MicroSoft's monolithic Windows kernel defeated IBM's microkernel (but that war might have also been over before it started for many other reasons not related to the kernel). Testing a micro service itself is not difficult it's the integration testing within the system and testing the orchestration system/bus itself.

I rece…

I won't take a survey to boot your status

One of the last things that happened to me in WDW was that two separate people solicited me for my opinion. They were not actually going to ask me the questions on the spot but wanted permission to ask me in the future. I agreed but only if the information was meant to make the park experience better and not simply to boost their ratings. I have taken an AT&T survey and there was nothing in it that indicated that they wanted to improve their service. Maybe they wanted to fire an employee for poor service but honestly their problems were and still are policy and process.

So don't bother me if you're just trying to boost your cred.

Scaling the Disney way Part 2

Continuing my previous article. Disney can scale it's production. Just look around and just about everything you see has a real world analog. Everything from the light posts, manhole covers, garbage cans, decorative lights, video screens ... are all common household or commercial items. And I think there is a very good reason for this. Liability. If there is a short in an electrical system and someone or many people are injured, WDW does not want the responsibility. But more importantly there is simply time to market. If the imagineers had to imagine, design, implement, and test every single component in every single attraction etc... they might not ever have completed either park.

So the lesson I'm taking away from there is several fold when constructing software:

know what it is that I'm developingknow that the first MVP is actually a POCknow that the second MVP is the alphaknow when to implement a library and when to adopt a 3rd partyplan to understand the risk and depen…

Scaling the Disney way Part 1

I took some notes when I was in Walt Disney World last weekend.  I had originally planned to write an article about how well WDW was in scaling. Over the past few years the Disney company has introduced something called the MagicBand and the FastPass. These devices were meant to improved our experience and to some degree they do.  But there is a dark side too.

If you are staying at a Disney property you will receive a MagicBand that you can use to enter your room, pay your tab, buy swag, enter the park, stay late, enter early, and so on.If you're staying on property you can register for your FastPasses 90 days in advance.If you are NOT staying on property you can still buy a band but you have to buy it at the will call, ticket booth or downtown disney. You can only select your FastPasses 30 days in advance. One thing that disney learns from the fastpass is the public interest in the rides so they know when they might be able to maintain the rides that are of least interest. They mi…

Software estimation failure

If you want to know why some or most software estimation fails then you should watch kids playing with Legos. What you'll see is the mind striving for [a] perfection [b] approval, and [c] improvement. I suppose that there is a lot in common for [a] and [c] but when you see them compete in addition to the aesthetic you'll see the iterative process too.

When kids are constructing gocarts or lego racers time is no object or at least time is not kept and they do not have a sense of when they have achieved good enough. Since I'm not a psychology major I cannot profess these things to be true in all cases but after 30+ years of programming and managing programmers and 4 years of watching my kids ... it might actually be an educated guess.

If we knew what it meant to be GE (good enough) then there is a better chance we'd get there on time.

Javascript and related browser tools

Here are the links to libraries I like to use. It's still under development.


MetricGraphics - display graphs


Bootstrap, wrapbootstrap

html5, html5boilerplate,


This is a work in progress. I need to add many links and complete the lists:

Bootstrap - Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web.

jQuery - fix and normalize some javascript

squire - wysiwyg editor from fast mail

ace - text editor
codemirror - text editor

more to come...
This article is a little more involved than the nodejs community and detractors give it credit for. Taking a quote from the article as the quintessential challenge for nodejs instead of the use your tools properly.  While they share a like sentiment they are vastly different and have a deeper meaning.
What did we learn from this harrowing experience? First, we need to fully understand our dependencies before putting them into production. I did some programming in nodejs when I was working on a zero downtime migration project. It worked and the nodejs tools were solid. My project failed when my SQL requests became more complicated than counting the number of rows in a table... when a number of round trips or consecutive queries were needed.

Install nodejs
$ brew install nodejs

Install expressjs
$ npm install express
Install hapi
$ npm install hapi
Both express and hapi required 24 packages.

Now that I installed them both... I created my first express project. Now I have installed another 54 …

LXD (lex-dee)

I could not decide what to write for my 100th post but somehow I could not get LXD(lex-dee) off my radar. It popped up on my reading list and google searches like a bad dream. To hear Ubuntu talk about LXD they swear it's meant to coexist with Docker but when you start to parse the marketing speak you might get a different picture; as I did.

Ubuntu's LXD:
for marketeers (link)for the casual observer (link)and for marketeers who are in denial (link)for the developer (link, link2) While Ubuntu is making verbal declarations that LXD and Docker are meant to coexist the evidence is underwhelming. In the links above you'll read that LXD uses LXC. LXC was the container technology that Docker was built upon until Docker started to build it's own container wrapper (presumably to patent the API).
While LXD may ultimately become a lightweight, complete and secure virtualization of the host OS within which you might be able to execute Docker containers but is this really what is ne…

Contrarian View of Continuous Integration (CI)

CI is great when you do not have the time or resources to oversee the build pipeline 24x7. However, and this is a huge HOWEVER... just like NoSQL did not actually make the DBA obsolete; continuous integration did not make the build custodian obsolete either.

Peter Leschev, of Atlassian, made the following statements in a presentation "Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infrastructure as Code" (link):

Less Human Interaction + More automation = Higher confidenceLess Human Effort = Increased frequency of releases These two statements are probably correct or true in some or even most cases. And here is the however; what is the cost when things go wrong? The bigger the build system the more complicated it can get. But even in the most general and simple CI systems. What is a down state going to cost you? How are you going to call at 3am? Do enough devs know enough to be considered a build SME so that their patches will demonstrate "producti…

The normalized cost of Amazon Lambda

Amazon announced a new AWS feature called Lambda. I watched the presentation with great interest, however, I did not make it all the way through... even at 7min it was too long. The idea is simple. Some event that your code is configured to watch occurs. When it occurs your code starts running until it finishes running and then stops.
This is an amazing bit of architecture, design or implementation. Whatever you want to call it. In many respects it borrows from flow based programming without actually saying it.
Pricing - there are three factors that contribute to the overall cost. [1] the number of requests, [2] the running time of the function, [3] the amount of memory you opted for when configuring your function. I assume that amazon is normalizing the CPU over the function in order to calculate some sort of compute index. 
If I were to run my function non-stop for the span of the month then the cost would be just under 6 dollars. (2.6e9 / 100 * 0.000000208) and if you get the upper …

Deis 1.0.0 was released

I'm happy that the Deis team has decided to release their 1.0.0 offering. In many respects it seems a bit more polished than previous versions; and while I would prefer to write a rave review there are still too many things to hate. I've just looked at the Deis issues list and there are only 5 issues submitted in the last 24 hours. My personal experience suggests that either their user-base is low or version 1 has not been adopted yet.

Here is a list of the bugs I'm reporting:

no single installation path; all paths crossin order to install deisctl with the curl | sh -s 1.0.0 command the user needs to run the command as the SUDO because the core user cannot create the /opt/bin.the the sudo ln -fs command cannot be executed because the /usr/local... folder is readonly.the output from the curl+sh command includes some console control characters that make reading the message difficult.the documentation refers to exporting some values. These values are's easy to for…

Total Cost of Ownership - Apple, MicroSoft, Google

I constantly struggle with the cost of my hardware and software choices. I also struggle with the cost of quality, reliability and support of the hardware. And finally I struggle with the quality, features, and cost of the software.


In reality, when comparing the cost of Apple hardware to equivalent hardware from Dell, HP, Sony, or Lenovo - the cost is very close. Dell and HP might be a little less expensive, however, Sony and Lenovo can actually cost more. Please keep in mind I'm also comparing hardware component quality, features, reliability, support; so you will not see me compare Acer or Packard Bell.


Since MicroSoft does not have anything except it's software in it's catalog it has to sell it's operating system as the product. In order to receive premium dollars it has to create a catalog of versions with varying levels of features and support. The last time I purchased an OEM Windows disk it cost me about $125 for the home edition and $250 for …

Curated OS' and tools

There are a number of tools that I recently used in order to determine the efficacy of my teamcity pipeline and associated chef tasks.  They included iostat, iptraf, iftop, htop. And now I have sysdig.

There is CoreOS and ProjectAtomic. The former is ready for production and the devs are making great strides.  The later has potential, however, it suffers from many serious deficiencies and dependencies. It seems that the devs are making redhat a dependency rather than fedora. This makes CoreOS a better choice. And now it appears that Ubuntu is entering into this field with snappy.

The latest CoreOS with docker, and promise of rocket, are still the frontrunner.

appscale instead of or including google app engine.

Dart lang article, home.

2600hz - Blog, home, micro service video.

A lesson to remember

I was watching "The Profit" yesterday and it finally hit me. Marcus Memonis has been using the same criteria to evaluate businesses as taught in Harvard MBA classes.

peopleprocessproduct And that lesson did not cost me a Harvard education.

Surprise editor - Atom

I have not been much of a fan of Atom but as I'm feeling nostalgic for the days when I used TurboPascal for everything I was writing ... Atom and it's Go-Plus and Git-Plus packages are starting to fill the void. It's far from complete but it feels almost as good.

It's safe to compare Atom to a mythical TurboGolang. (sadly it's not the same TurboPascal that I saw on youtube. Those are many years after.  You can tell because the text IDE implemented pseudo windows. Sadly there are no Google images either.)

I wonder if I could fork Atom and make a Go - only environment? The license is very liberal.

PS: the emerald syntax theme makes me feel good.  All someone needs to do is add a yellow.

Sample prettyprint code in blogger

Thanks to Heiner's post I think I can prettyprint code. The code below is from a previous post but meant for testing purposes.

package main import ( "fmt" ) type myfactory struct{} func (f *myfactory) make(line string) task { return &work{line: line} } type work struct { line string } func (w *work) process() { w.line = strings.ToUpper(w.line) } func (w *work) print() { fmt.Println(w.line) }