Development

7 Common mistakes in Go and when to avoid them

Not a generic list of programming mistakes, these are the lessons I wish I learned earlier while developing Go. I’ve spent the past two years developing some of the most popular libraries and applications written in Go. I’ve also made a lot of mistakes along the way. Recognizing that “The only real mistake is the one from which we learn nothing. -John Powell”, I would like to share with you the mistakes that I have made over my journey with Go and when you can avoid them.

Hugo Summer 2014 Update

Hugo, the fast and flexible static site generator, is really coming of age. I wanted to give a quick update about the progress Hugo has been making over the past couple months. New Website Hugo can now be found at http://gohugo.io. Update your bookmarks. New Team Members I want to formally welcome our newest team members. Tatsushi Demachi has been making excellent contributions hugo, particularly with extensions to the template capabilities.

Evangelism is NOT Sales

I recently had a discussion with a CFO of a technology company. We were meeting because he is trying to better understand the role technical evangelism could play within his company. Ten minutes into our conversation he said, “so evangelism is pretty much rogue sales”. Internally I cringed. I politely corrected him that the two could not be further apart. Allow me to be a bit philosophical or rather, etymological here.

Go for Object Oriented Programmers

This presentation was given at OSCON 2014. Object Oriented (OO) programming has dominated software engineering for the last two decades. The paradigm built on powerful concepts such as Encapsulation, Inheritance, and Polymoprhism has been internalized by the majority of software engineers. Although Go is not OO in the strict sense, we can continue to leverage the skills we’ve honed as OO engineers to come up with simple and solid designs. Gopher Steve Francia, Author of Hugo, Cobra, and many other popular Go packages makes these difficult concepts accessible for everyone.

Using MongoDB with Go and mgo

This presentation was given at OSCON 2014. This presentation will give developers an introduction and practical experience of using MongoDB with the Go language. MongoDB Chief Developer Advocate & Gopher Steve Francia presents plainly what you need to know about using MongoDB with Go. As an emerging language Go is able to start fresh without years of relational database dependencies. Application and library developers are able to build applications using the excellent Mgo MongoDB driver and the reliable go sql package for relational database.

Getting Started with Go

This presentation was given as a Workshop at OSCON 2014. Description New to Go? This tutorial will give developers an introduction and practical experience in building applications with the Go language. Gopher Steve Francia, Author of Hugo, Cobra, and many other popular Go packages breaks it down step by step as you build your own full featured Go application. Starting with an introduction to the Go language. He then reviews the fantastic go tools available.

Pointers vs References

Some languages including C, C++ support pointers. Other languages including C++, Java, Python, Ruby, Perl and PHP all support references. On the surface both references and pointers are very similar, both are used to have one variable provide access to another. With both providing a lot of the same capabilities, it’s often unclear what is different between these different mechanisms. In this article I will illustrate the difference between pointers and references.

Is Go an Object Oriented language?

To truly understand what it means to be ‘object-oriented’ you need to look back at the origination of the concept. The first object oriented language, simula, emerged in the 1960s. It introduced objects, classes, inheritance and subclasses, virtual methods, coroutines, and a lot more. Perhaps most importantly, it introduced a paradigm shift of thinking of data and logic as completely independent. While you many not be familiar with Simula, you are no doubt familiar with languages that refer to it as their inspiration including Java, C++, C# & Smalltalk, which in turn have been the inspiration for Objective C, Python, Ruby, Javascript, Scala, PHP, Perl… a veritable list of nearly all popular languages in use today.

9 MongoDB 2.6 Drivers Released

I’m pleased to announce the coordinated release of drivers in 9 languages in preparation for the release of MongoDB 2.6. This is the largest driver release in the history of MongoDB, both in terms of code changes as well as in terms of drivers released. Official Drivers for C, C++, C# (.net), Java, Node.js, PHP, Python, Ruby and Scala were all released with Perl following shortly. In the upcoming weeks community drivers will be updated to take advantage of the new features present in MongoDB 2.6.

Cross Compiling with Go

One of the great features of golang is that you can compile executables for many different platforms and architectures from a single machine. It’s really nice to be able to provide executables of Hugo for a bunch of different platforms and architectures without having to have all these different machines in a build cluster. As I’ve been working with Hugo, I’ve wanted to make the experience of cross compiling as easy and painless as possible.

A modern CLI Commander for go

While developing Hugo I became disappointed with the interface limitations flags alone provide. A quick look at virtually any command line application (ls, grep, less, etc) reveals that most applications overuse flags to do everything and often allow conflicting flags to be applied. Even though hugo is relatively simple, we already had the ability to stack flags that didn’t make sense. You can set the port using –port but this only has an effect if you also specified –server.

Building Modern Web Applications

I gave this presentation to a packed house at DevCon5 in NYC July 24th. DevCon5 is a web developers conference and this year it focused on HTML5. This was one of the hardest presentations I’ve worked on for the simple fact that the audience had name recognition, but not familiarity with the database industry. Typically I’ve leaned on the fact that most participants were familiar with at least one database prior to my presentation, I had no such luxury here.

MongoDB and PHP Webinar

This is a 90 minute MongoDB tutorial on using MongoDB in PHP which I gave as a webcast for O’Reilly last year.. The tutorial covers everything from Installing MongoDB along with installing and configuring the MongoDB PHP driver. You will learn how to work with MongoDB from within PHP as well as within the MongoDB shell. What would happen if you optimized a data store for the operations application developers to actually use?

Hugo: A fast and flexible static site generator built in GoLang

Hugo Website Hugo is a static site generator written in Go. It is optimized for speed, easy use and configurability. Hugo takes a directory with content and templates and renders them into a full html website. Hugo makes use of markdown files with front matter for meta data. Written in GoLang for speed, Hugo is significantly faster than most other static site generators. A typical website of moderate size can be rendered in a fraction of a second.

Nitro : A quick and simple profiler for golang

Nitro
Nitro is a quick and easy performance analyzer library for golang. It is useful for comparing A/B against different drafts of functions or different functions. Building on the standard pprof library, Nitro provides a very high level view of your application performance to help identify areas to investigate further. It also provides an easy metric to compare as you revise and improve each part of your application.

spf13-vim : Steve Francia's Vim Distribution

spf13-vim is a distribution of vim plugins and resources for Vim, Gvim and MacVim. It is a good starting point for anyone intending to use VIM for development running equally well on Windows, Linux, *nix and Mac. The distribution is completely customisable using a ~/.vimrc.local and ~/.vimrc.bundles.local Vim RC files. Unlike traditional VIM plugin structure, which similar to UNIX throws all files into common directories, making updating or disabling plugins a real mess, spf13-vim 3 uses the Vundle plugin management system to have a well organized vim directory (Similar to mac’s app folders).

PIV : PHP Integration for VIM

This project contains the most feature complete and up to date PHP Integration for Vim. It began as a fork of the largely outdated VIP (formerly PDV), but has morphed into it’s own project. It is intended to include the best PHP specific plugins, configurations and resources for editing PHP. Special care has been taken to include the best, keep them up to date and make sure everything plays well together.

Release early, release often to minimize risk

Release Cycles have been debated for the last 30 years and will certainly be for the next 30. Arguments for longer release cycles with larger releases usually focus on how risky these rapid releases are and the stability and polish these larger releases with their longer cycles bring. These arguments are absolute rubbish. To add to the discussion I’ll put a different emphasis than I’ve heard before. Release early and release often to minimize risk.

Getting Started with Symfony2

In a follow up to my popular post on Symfony2, the open source PHP framework we use at OpenSky, I’m providing an easy guide to getting started using Symfony2. This isn’t your basic “Hello World”, but a practical guide to beginning a project with Symfony2. Requirements To get started with Symfony2 you should have a working install of Git as well as a well made install of PHP version 5.3+. Symfony2 also requires internationalization support compiled into PHP.

On Symfony2

Disclaimer I’ve got a couple disclaimers in writing this. 1. I’m one of the primary authors of the Zoop Framework for PHP. It’s pretty much the first web framework for PHP dating back to 2001. In spite of it’s age it’s still quite relevant and in use by thousands worldwide. 2. I run engineering for OpenSky where we elected to build our ecommerce platform on the Symfony2 framework and have since become the 2nd largest contributors to it.

Software Development's Magic Triangle

There’s an old adage “Fast, Cheap, Good; Pick Two”. This situation is called a magic triangle. You can have two and only two, if you try for all three you will compromise all three. Fools often try, losing everything. In the world of software development, another magic triangle exists. You can pick any two of the three, but not all three, so figure out what’s truly important. Fixed Schedules Fixed Features High Quality Unfortunately business owners rarely have visibility into the last one (Quality).