Friday, August 30, 2013

GoLang Polymorphic Factories

I just finished watching one of the "Clean Code Talks" and while it looks like a grand idea and applicable in Go ... the examples are trivial and does not lend itself to more complex ideas.

Moments ago I determined that my execute() function was not really a class member function (but a factory of sorts) because there are a number of flow control features in the code. (1) is the user logged in (2) if the command is a GET then maybe the results are already cached (3) when the remote server responds will I get a result, stack dump, authentication/authorization error, session timeout; and so on.

[UPDATE 2013-09-02] As I look at my current project and I consider the effort to replace every "if" statement with a polymorphic class I realize it's probably more viral to fork all that code rather than finding a better way to test or even find a better way to write the code in the first place. (this is one place where erlang inspired and other functional/matching languages excel.)

Tuesday, August 20, 2013

Methodology Anti Patterns

Is there such a thing as a Methodology Anti-Pattern? The first one that comes to mind is when your organization collects methodologies but never formally purges the ones that do not work.

Friday, August 16, 2013

Ted Talk Confirms Simplicity - the simple life

I was never one to sit there and customize my vimrc file or my editors at large (beyond a color theme and some very basic config). The idea that I could get stuck in the time-suck vacuum of the never ending tweak-fest.... just never appealed to me.

In a recent Ted Talk the speaker professed that if you're tweaking then your not making decisions or planning or looking for the things that will get you, company or family in a winning position.

And he was absolutely right.

I just read an article by a vim "export".  He was recommending that I install some 20 plugins without presenting a script or instructions. It was at that moment that I realized that if I took another step I was going (a) be distracted for the rest of the day and not get anything done; (b) that many of the changes would not port to ALL of the environments that I work in and therefore I might be crippled in them without all these tools.

It has been a few years since I decided to take the appliance approach to software development.  I have a plainly installed macbook air with full disk encryption and 5 or 6 different browsers that I use to test my work. Also, in recent days I have started to use It's far from perfect and creates some security concerns but it represents the simple life.

And since I have been working in the simple way I have had some brainstorms that have actually seen the light of day.

Privacy Matters!

There was a survey recently that concluded that most gmail users expect that Google is reading their mail or some such. While it's not hard to come to that conclusion based on recent events I think that the wording is ambiguous and will lead to other, potentially, larger problems.

The problem is ... if people accept that google is reading their email then by extension it's ok for google to read their email. Which would be considered "evil". Google's terms of service and privacy policy provide all of the necessary expectations.

I have no doubt that google's robots are reading my email, blog posts, wiki, source code, reading list and so on. It's all intended to understand me better and make me click. Given the number of users in the world I seriously doubt that someone is reading my content and doing something with it. But just in case you're listening.... you do not have my permission.

The 1 day in 5 is all but extinct

In this article the author indicates that the 20% feature at Google is all but dead. First of all this was easy to predict. Less astonishingly... if this was the reason you went to work for Google in the first place then it/you might have been doomed from the beginning. Traditional employers encourage this sort of activity outside of the normal work week.

Tuesday, August 13, 2013

The new "hello world" is here

They are not that new but the realization is: the new hello-world for GUI framework programmers is the TODO app. And the new hello-world for backend programmers is the chat.

Monday, August 12, 2013

Are you a System Architect?

System Architects come in many forms. I'd consider the programmer(not me) who decided to use pseudo pointers as WindowHandle(s) in OS/2's Presentation Manager implementation and the programmer (me) who replaced the mechanism while porting Presentation Manager from 16 to 32-bit for use in WorkPlace OS as system architects. These are deep technology choices.

Deciding to use jQuery, Bootstrap, Rails, Django etc... are implementation details and not architecture. Slamming together a few Redis clusters, HA Proxy machines, or even DB replication does not an architect make.

Having the vision to decompose the problem domain by time and space (scale) and selecting tools, implementation, structure, process and schedule; whether from scratch or just a patch; does make you an architect.

The future of programming languages

Is not a programming language at all. What we really need is a proper syntax that can be translated into some other base language which is then compiled. I hate to call it a DSL but maybe a GDSL or GPDSL (a general purpose DSL) but that's sort of an oxymoron.

Sunday, August 11, 2013

Paying for Fonts?

I had been on the fence as to whether or not to purchase a terminal font (not it advertising here). There are a lot of free and default fonts that function within reason. The tipping point for me was when I put on my reading glasses and it was just that much easier to read. So I now have to include fonts as part of my toolkit in addition to editors, compilers, debuggers, etc...

Saturday, August 10, 2013

The next IDE

I really like LightRoom but my only criticism is that LightRoom seems more like a runner than an IDE. Maybe that's the purpose; or maybe not. The most important thing to take from the demo is that the smallest commit-able unit is the function and not the module or file. Which has serious implications.

My ideal IDE stores all of the code in a DB. The code is stored as fragments. And the fragments are effective-dated. The storage is relational. The code is shared. The fragments are implemented by strict contract. The fragments are assembled into projects. The simplest fragment is a global declaration and the largest is a proper function.

And taking a page from the SQLite book and most proper C programming examples. The precompile or assembly step concatenates the fragments into a single file and then passes it off to the compiler. With these requirements the notion of namespaces is practically moot(**).

(**) GoLang has an object system of sorts. In reality the notation is:

func (m *MyObject) MyFunction (p1, p2, p3 string) (int, err) { ...

Which is not really much different from:

def  MyFunction (m *MyObject, p1, p2, p3 string) (int, err) { ...

None of that really matters... just do it.

another bad day for open source

One of the hallmarks of a good open source project is just how complicated it is to install, configure and maintain. Happily gitlab and the ...