The Green Balcony Project

I’ve created a WordPress blog on my agendi.com domain called “the green balcony project” in order to firstly encourage and challenge people to use their balcony/backyard in a more sustainable way and to investigate the act of creating a community around a particular niche (in this case domestic environmental concerns).

In particular interest to me is “how much community makes a community”? Green Balcony Project has been running for less than a month and so far it is hard to get the message out. I haven’t really gone hard on it – a few tweets here and there, but the lack of action is depressing.

So far WordPress has proven to be an really nice blogging platform but I have my doubts about it being able to facilitate a community style site. I have also set up the wordpress forum (bbPress) integration to add more community firepower.

Reflections after reading “The Lucifer Effect” by Philip Zimbardo

“Our sense of power is more vivid when we break a man’s spirit than when we win his heart” Eric Hoffer
I have been using innovation in the noble sense eg. A great idea will inspire and win people over. This has been a demonstratively false assertion. The only recourse is to use innovation to break people and as a threat or a device of tyranny.
Disruptive innovation is “we could have done this the nice way together, but we couldn’t compromise, so now in order for me to grow you must diminish”
The evil system is the one that only recognises the zero sum.

In defence of Innovation and Prototyping

My work has been very busy lately, there is high demand for mobile and other media innovations that seems to be endless. This is a good thing. The market is hungry and relentless – traditional media has been a big, lumbering beast that recently has the shock of its life with more agile players drying up the “rivers of gold” by diverting many little attention streams from upstream. As with all erosion, eventually the groove is too deep for people to get out of to bother going back to traditional sources. Case in point – large domestic news media organisations are not competing against other large media organisations but against attention diverting social news sites. Added to this the increasing prevalence of super diversion devices such as “always on” smart phones, mobile games platforms, e-books readers, portable media devices and so on. As such, in the past monolithic product development life cycles and industrialisation of server-side software made sense, because all your competitors had to pay the same cost to compete. Those days are over.

The 6 to 9 month long projects, carefully scoped out and made “industrial”, to scale, for the hordes are seen as the preferred path to software perfection does not take into account the prevailing wind of “follow the market don’t market to followers”. By this I mean that the consumer/customer/subscriber/market is dictating the pace and not the other way around. The notion that any piece of moderately complex web-based service can be delivered as the final solution is blatantly untrue. Even during these long projects there is a lot of prototyping and work that never makes it to the final product. This doesn’t take into account the evolutionary nature of user experience, framework changes, strategic tectonic shifts as well as business priority changes and staff churn. There is a culture of “monolithic is better than prototyping because it is more structured and controllable” is a myth. Course changes are common, and will only become more common in the Media space. More often than not, the call to “industrialise” a technology is a veiled form of political control.

A prototype that can prove the right shape of a design, rapidly iterate through UX/design options, drill down into the heart of the challenge and so on. The fact that the code could be discarded and might require rework is not a weakness but a strength because bad decisions (and bad code) is easily discarded because there isn’t already that industrialised “spend”. If a project took 9 months to complete then you can be sure that the next round of basic changes will take 3 months and so on because the code base is already set.

I am not advocating a fire and forget policy of having your business run on prototypes. I’m not saying stability, scalability and architectural concerns aren’t valid and should be thrown out with the bath water. I am saying that all projects are evolutionary regardless of how long you stretch them out (in fact the more you stretch them out the more likely it is that they should be discarded, but won’t be), all platforms are moving targets and finally media consuming customers aren’t willing to wait for your 100% rock-solid platform that can only just deliver the services that they needed two years ago.

Great Circle Distance in TSQL

CREATE FUNCTION GreatCircleDistance
(
@LatitudeA float
, @LongitudeA float
, @LatitudeB float
, @LongitudeB float
)
Returns float /* meters */
BEGIN
/*
Great Circle Distance
cf: http://en.wikipedia.org/wiki/Great-circle_distance#Formulas
*/

declare @LatB float
declare @LatA float
declare @deltaLng float

set @LatB = RADIANS(@LatitudeB)
set @LatA = RADIANS(@LatitudeA)
set @deltaLng = RADIANS(@LongitudeA) – RADIANS(@LongitudeB)

RETURN( atan
(
(
sqrt(
power(cos(@LatB)*sin(@deltaLng),2)
+
power(cos(@LatA)*sin(@LatB) – sin(@LatA)*cos(@LatB)*cos(@deltaLng),2))
)
/
(
sin(@LatA)*sin(@LatB) + (cos(@LatA)*cos(@LatB)*cos(@deltaLng))
)
)* 6378137 –WGS-84 ellipsoid reference
)

END

Ruby Tutorial #2

There are very few programming fundamentals but an infinite way of using and expressing them.

I will start with two basic types – Strings and Integers.

A string is an ordered sequence of zero or more characters.
An integer is any whole natural number.

Ruby is a weakly typed language meaning that you don’t need to predetermine a variables type at declaration, rather it is dynamically set (and reset) at assignment.

message = “hello world” #string
puts message
puts message.class

message = 42 #integer/fixnum
puts message
puts message.class

The key parts of the above script are:
message: a variable
puts: prints to the console
#: a comment. Anything following the # is ignored.
.class: is a method of Object (message in this case)

Don’t worry if all these terms don’t make complete sense yet.

Some other methods to try out are:

puts message.reverse
puts message.upcase
puts message.length
puts message[0..4]

Strings can be changed and manipulated. The plus sign is concatenation eg.

message = “hello world”
message = message[0..5] + ‘mum’
puts message

Appending a ! on the end will change the contents of the variable in place.

message = “Hello Mum”
puts message
message.swapcase!
puts message

Ruby treats everything as an object. For example

puts “hi mum”.length

And you can chain methods together

puts “Hello muM”.upcase.swapcase

Beginning Ruby in Netbeans 6.5.1

The most recent versions of Netbeans (6+) have become very usable and are improving rapidly. Probably not as feature rich as Eclipse but faster and certainly not lacking in professional capability. Netbeans is currently my IDE of choice for ruby and rails development.

I intend to write a series of tutorials for my brother to gently introduce him to programming in ruby.

Lets begin.

Download Netbeans here. You have two choices you can get the Ruby package (about 60mb) or the whole suite (240mb).

Tutorial 1.

  1. Launch Netbeans
  2. File -> New Project..
  3. Select “Ruby Application”. Click “Next”
  4. Give your project a name and a location to save it. In this instance I am calling it “RubyTutorial” and saving it in my “workspace” directory. Click “Finish”.
  5. Now you are in the project environment. In the right pane the tab should say “main.rb”. Click on the “Run” button (or press F6)

The Output pane should be visible now with the words “Hello World”

Congratulations you have just run a basic ruby program.

In the code pane you will see the line:

puts “Hello World”

You can change what is between the quotes to anything you like. Press the run button (or F6) to see what happens. Any line beginning with # is a comment and won’t affect the execution of the program.

Innovationeering

One of the great joys of working with ideas is that it’s always fresh and there is always more of them out there. The awesome feeling when people start collaborating and the ideas spiral into the realm of the unreal. Instinctively we know when the ideas cross the line but by that stage we have moved beyond trying to dredge up ideas for the sake of it and genuinely playing without the inner-critic.

You can