Where to Go Next ~ Operators
Go version 1.0 arrived in late 2009. It’s now a well established language and ecosystem, having carved out a significant niche in server integration and bespoke webserver code, amongst others.
Unashamedly a quirky language, Go’s developers pioneered an opinionated approach to minimalism that has evidently served it well.
This post is one of several looking to the future; it focusses on operators in Go.
Where to Go Next ~ Range
Go version 1.0 arrived in late 2009. It’s now a well established language and ecosystem, having carved out a significant niche in server integration and bespoke webserver code, amongst others.
Unashamedly a quirky language, Go’s developers pioneered an opinionated approach to minimalism that has evidently served it well.
This post will focus on iteration in Go using range
. Later posts will take a more detailed look at a few other Go features.
How are Akka actors different from Go channels?
From the Quora.com question How are Akka actors different from Go channels? I have worked extensively with both Akka actors and Go channels/goroutines and would like to offer a few comments. Firstly, it is important to stress that CSP allows rendezvous-based synchronisation between goroutines using channels, and channels can optionally include buffering. When one goroutine attempts to send on an unbuffered channel, it checks whether the other party is present. If not, it sits waiting, during which it consumes no CPU and only a little memory.
Hosting A Hugo Website Behind Nginx
I’ve been exploring Hugo lately. Interesting. There are many Content Management Systems (CMS) in the world - this site you’re reading is hosted within Drupal. But I’ve always felt that a live CMS is sometimes a needlessly heavy-weight solution to the problem of authoring content and handling the digital assets to go with it. Even large corporations blunder into complex arcane content management, maybe suffering poor productivity and bad performance, with expensive licences to boot.
The Awesomeness of Gorun
Communicating Process Architectures - CPA2014 Conference Summary
The CPA2014 conference held in Oxford over the last few days brought together an interesting group of around three dozen experts in the field of communicating process architectures. Discussions were on concurrency and parallelism topics, both theoretical and practical, in areas related to communicating process architectures (CPA). Also known as process-oriented programming, CPA is about both concurrency (the natural expression of things that are happening alongside each other) and parallelism (the physical execution of many parts of a program at the same time) by means of process algebra formalisms and CSP in particular.
Go Web Toolkits and Frameworks
Beego FrameworkTL;DR. Sorry. Revel Framework* strongly opinionated - you may or may not like what it requires you to do + routing, filters, middleware, templates/views + nice development environment - hard to step outside the Revel wayTraffic Framework+ routing, filters, middleware, templates/views - dependency on regexp-based routing: impaired performance Gorilla Toolkit+ fast routing + subrouter / tree capability is very good - ‘context’ shares a common table of state - ‘session’ uses ‘context’
Go Gaps
Go is a great and superbly simple language. It has a high degree of credibility in its competence because its progenitors worked tirelessly on achieving simple and clean precision. But it’s not perfect. There is no easy way to compare structs deeply without using reflect.DeepEqual or some hard work http://stackoverflow.com/questions/24534072/golang-how-to-compare-struct-slice-map-is-equal I really would like some single-assignment style of immutability. Channel selection doesn’t have boolean guards, unlike Occam. This is a shame when these are essentially easy to implement and greatly simplify the code needed to write stateful actors (processes in CSP-speak).
Scala, The Good Bits
== ~ Or: Why Java devs might find Scala-lite very useful ~ Case classes awesome; Javabeans smell Exception handling, schmexception handling
Cake Or Dependency Injection
Traits encourage inheritance (by a different name) instead of aggregation Cake can be harder to test - stubs/mocks; example… Cake has a single namespace, with collision problems.