Archive for the ‘cognifide’ Category
Infrastructure as a Service : Just Compute and Go!
Context: Some Investment Bank, Some large project, Some time ago…
Me: Wait up Scott (Scott is our SysAdmin. Disclosure: We still are drinking buddies!)
Scott: What now Gibbon! Whatever you’re selling, I ain’t buying…
Me: Stop your whinging you miserable jobsworth. I need 10 Linux servers tomorrow for about 5 hours of performance testing.
Scott: LOL - like that’s really gonna happen chump!
Me: I’ve got budget, approval and all the necessary papers, plus fat cat sponsors. Make it happen.
Scott: Look at me!
Me: <sigh>. Do I have to?
Scott: Do you think our datacentre is a freakin’ tardis?
Me: Noooo….but I do expect it have a few servers out the hundreds you claim to spend you time servicing. Don’t be so greedy. Share a little!
Scott: Seriously. I’ve got 2 hands, 10 mission critical applications I need to provision servers for like yesterday and no more space for new machines.
Me: I don’t want new machines. Just recycle existing ones.
Scott: That’s even worse. First I have to find them (talking days here), then make sure no-ones using them (talking months here), and then and only then install all your crap on them. Next day - Get Real! More like next month…
Me: I could get to the moon and back in that time with decent alien SysAdmin in tow…seriously, this is bad news.
Today
1) I don’t have to ask Scott for servers, I can get them myself. Hmmm, I wonder what Scott is doing these day ![]()
2) I don’t have to wait weeks for servers, I can get them in minutes.
3) I don’t have to buy nor own servers/licenses, I can pay on demand.
“I don’t need my own datacentre policed by some power crazy SA, with Infrastructure as a Service (IaaS), now I just Compute and Go!
Did you pick up on the Wash and Go tag line! One of my favourites eighties commericials but let’s get back to the script. IaaS is here and is picking up traction to point where I would seriously question any small to medium IT shop not thinking about downsizing their datacentre and/or putting to bed plans to create a new datacentre. Having pretty much instantaneous access to compute resources in the form of servers and storage, delivered as a metered service, means that you are now only limited by your imagination.
IaaS enables your systems to scale out in a cost effective manner. Grab more computing resources when you need them, release them when you don’t. Neverland! For development shops, the ability to periodically fire up a test environment and tear it down in a shot is pure candy. Not just test environments for that matter, but UAT, demos, integration, and so on.
The Players
First off the bat are Amazon Web Services with its S3 and EC2. IMO, Amazon are clearly the leaders in this space, despite the early critics telling Amazon to stick to minding their shop! If you want a server or storage, eight out of ten companies prefer Amazon. I’m not going to say any more here because the best place to talk to about is on the AWS Blog.
Another lesser known player is Flexiscale. Flexiscale is an outgrowth of XCalibre that has been in the hosting business for many years. Cognifide have been using Flexiscale for about 6 months now. The platform is new and continually improving. We are actively pushing them to make the management of their servers better. We work closely with their engineers and have built a console to manage our on-demand flexiscale servers. Cogniscale is freely available for download. It is not a supported product, use at your own risk, but if you any requests or feature improvements, please talk to Adam Najmanowicz who is the lead developer. He wrote a blog post about getting started with Cogniscale that is worth a read.
Then you get hybrids that sit on top of Amazon that provide management services such as RightScale. Also, you can of course roll your own IaaS in three easy steps. (1) Buy a server. (2) Install Xen or VMWare. (3) Pick one from the X new servers. Done!
Next Steps
IaaS is not rocket science. The whole point is to make things simpler. However, with IaaS, your SysAdmin is no longer the cable guy sweating under desk, fighting with wires, or banished to the datacentre/server room. In fact, they can focus on doing the stuff they enjoy. Administering infrastructure. Which leads us onto the topic of “Automated Infrastructure”. When a single physical box spawns say 12 servers, you cannot hope of continue to manage this infrastructure manually. People don’t scale. You need damned good tools to manage and monitor the enterprise.
Earlier, I wondered what Scott, our friendly SysAdmin would be doing these days. If he had any sense, he would be looking into tools such as Puppet, iClassify, Capistrano to name a few to help automate infrastructure. Something that is going to be real important to companies that wish to take full advantage of IaaS.
Ruby is the R in Rails
I would love to have attended RailsConf 2008 but alas you can only do so much in a day. Although this was a Rails conference, it seems that this year there was less talk about Rails and more about Ruby. This is hardly surprising really given that Rails is just a web framework. Yep, Rails is just a web framework. And just like any other web framework, its serves as a gateway from the web and into your enterprise. Now, after a year of doing Rails, you’re basically done. Coasting. Yes, there are tips and tricks you can pick up along the way but for all intense purposes you’ve got the badge. You’re done. You know Rails.
Now the more pressing problems and prickly questions around the enterprise, integration and scalability need to be addressed and this is where Ruby is amore compelling story. In fact, things in the Ruby space are really moving forward at break neck speed. It’s not surprising really, given the relatively few Ruby conferences there are each year, that Ruby gets to play out and steal some of Rail’s thunder at RailConf.
So what is going on in Ruby space that’s so interesting?
Ruby Implementations - Where integration is Key
First up there’s JRuby. This is a 100% pure Java implementation of the Ruby programming language. And right there is JRuby’s sweet spot. The ability to seamlessly integrate with the Java platform through Ruby is a big win for some. So running Rails under JRuby and using it as a web gateway into your Java enterprise, together with the ability to leverage mature/known Java tools and the free performance hikes that accompany it has been a very appealing proposition to some. A prime example being the ThoughtWorks Mingle product. Also, having access to the abstract syntax tree which can be shared between multiple Ruby runtimes hosted within the same JVM process is pretty neat and a highly efficient way of managing memory.
MacRuby! As a Mac User I’m excited by this implementation of Ruby 1.9. With MacRuby you can write Mac OS X applications in Ruby without the performance hit typically attributed to standard Ruby and Ruby Cocoa. MacRuby is native to Mac OS X core technologies. Damned quick with all the elegance of Ruby to boot.
IronRuby, backed my Microsoft and sits on top of its Dynamic Language Runtime (check out John Lam’s talk on the DLR), is a .NET implemention of Ruby. IronRuby enables Ruby programmers seamlessly integrate with the .NET platform, in much the same way that JRuby does on the Java platform. Ruby.NET is open source .NET implementation that does not have the same pull as IronRuby.
In fact, the main draw for Ruby developers that target JRuby, MacRuby, Ruby.NET or IronRuby is integration with the Java, Mac OS X or .NET plaforms respectively.
Ruby implementations - Standards are key
Let’s park integration. Let’s focus upon Ruby developers building Ruby apps with an Ruby-oriented environment. Both Rubinius (a spec led Ruby implementation) and MRI/YARV (currently the official Ruby) are competing VMs for running Ruby applications. Everyone started with Matzs Ruby Interpreter (MRI) but now we have many more alternatives. The Yet Another Ruby VM (YARV) project has officially merged into MRI as of May 2008 to combine the best of both worlds to enhance the official Ruby implementation.
RubySpec
But unlike Smalltalk that was really killed by competing implementations, the Ruby community, through RubySpec are collaborating on standards and competing on implementation. This is good. No, hold up, this is great! This will hopefully provide more choice to the developers to select the appropriate Ruby implementation that best fits their solution requirements. Hopefully, this will hold the community together and keep everyone pulling in the same direction. So far, that appears to be the case…
..but then there was Ruby for Scale - Maglev
Maglev is a Ruby implementation built on top of Gemstone’s VM that is written in Smalltalk. Chad Fowler goes into the why and when you would choose to use this Ruby implementation other the others. But the problem is very few people have access to Maglev. It promises the world and come on guys its time to show me the money! The community has seen is a presentation. A damned fine presentation I’m told but Charles Nutter of JRuby is not convinced and other people are already dismissing outright Maglev’s claim to scale. 100 times performance improvement is a big claim. One to watch I guess.
And Finally!
Take a look at the following code snippet:
#!/usr/local/bin/ruby require 'scalability' # your code
Now the Twitter guys must be get this all the time. Twitter is growing in size and its architecture will mature and incorporate different technologies I’m sure that best fits their current problems. Time will time. But to say its Ruby’s fault is a little naive at best. That said, wouldn’t it be just great if only you could include scalability in Ruby applications, Java apps, .NET apps, or whatever the platform.
Now, that would be awesome. But the simple fact is you can’t include it, you have design it in. Boooooo say the crowd. Kill joy chant the business. But unfortunately, like so many things in the software industry, you have to go the long way round (read as experience) to get desired results. Because there are no short cuts (read as foolish hacks, or inexperience) on the road to scalability…only blood, sweat and tears! But there are leg ups, tools and techniques and people to assist, but that’s any story for another day…
A note to the reader
Over the last couple of months I’ve been asking myself where my interests lie and that this should be reflected in my blog. But before I could do that I had to be honest with myself. So, I stood up one day, butt naked, well semi-clad and chanted:
- “I no longer write production quality code.”
Okay, for those of you at the back, let me repeat, cough, cough:
- “I NO LONGER WRITE PRODUCTION QUALITY CODE.”
And before the wise cracks start coming in. I’m not part of the production build team. But please don’t underestimate the weight that those words carry for me. I have nothing but envy for true builders. People that delivery production code but that is something I cannot do and do the other stuff that I need do. So this brings me back to the question, what am I into?
In essence, I’m into everyday people building damned good software. What is out there for them? What crap do they have to climb over to get to the job done? Why is so hard? How can it be made easier? Understandably, these are big questions and as stuff changes. I will need to change with them but that’s what keeps things interesting.
So, am I interested in Java the language? Nowhere near as much as I used to be 10 years ago. I used to live and breath Java. It was weird as I was kinda like married to Java but from around 2001 started having an on and off affair with C#. What about Java the platform, yeah, there’s more interest there. How about C#? Well, more interesting as a language than Java, but not really enough for me to re-install VisualStudio to play with it. Ah, the rise of multi-core programming and multi-tenant systems. Now you talking. This stuff floats my boat and leads into how far is this (infrastructure/service/platform)aas (as as service) going? Very interesting stuff. Hang on, that mozilla stuff, prism, looking for more integration between the web page and the desktop. Kind of cool the idea of tearing off a web page from your browser onto the desktop. Then this RIA, Flex, and so on. But firefox 3, nope, lower down the stack i’m afraid. Agile. Yes. Static/Hybrid/Dynamic languages. You bet. Novell. Errr, no!
That’s it. Just thought I’d let you. I’m going to become more active on this blog but just a little more focussed, that’s all.
Oh, let me leave you with this. I saw this advert on the tv the other night, and being an old timer, it really made me laugh. Enjoy!
Adequate is not good enough!
A friend of mine, nicknamed “LeToe” for his rather poor footballing skills, is MD of a global telecommunications company. Big business. In a roundabout way, we came to learn that on one of his staff improvement courses, he was caught trying to motivate an employee by chanting “adequate is not good enough”! Needless to say, whenever we see the human motivator LeToe, adequate is not good enough is always a great source of fun and the first thing we throw at him whenever we meet up. What a plonker!
Clearly adequate is not perfect but as Daniel Tenner convincingly argues, perfection does not exist. Take a look at the picture opposite. As a product company you start at A and wish to build the perfect product that you think is at B. But actually, its a C. Over the years, we have learnt that you need to involve the users both early and often. Release small. Release frequently. Keep releasing! On good days, Flickr was releasing to production every 30 minutes. No question, this certainly helps companies built better products. They inspect and adapt, veering away from the white elephant at B and more towards the holy grail at C. All good so far.
Users change. If fact, I’d argue that today you woke up a different person than you were yesterday. So over time, C is really a moving target. Only a fool would assume that users and their needs stay the same. So if you’re looking for perfection in your products, you’re pretty much going to be chasing your tail. However, if you lower your goal bar slightly and acknowledge this, what you can do is build a better product that strives to meet its users needs but without comprising itself. Oh yes, there comes a time when the product is pulled so far off track that it makes no sense its current form. You just need to know when that time is or as 37signals maintain, don’t get distracted in the first place and let your customers move on if the product no longer meets their needs.
Now, swap product for company, apply the same thinking, and you inevitably arrive at the conclusion that there is no such thing as the perfect company. Even Google are starting to realise this…
Cognifide goes Google
This week we made Google our standard office platform for all mail, documentation and collaboration. So we switched off zimbra (mail) that we hosted ourselves, we are making better use of calendaring now and are tentatively becoming more familiar with their online spreadsheet and document apps. Nothing special there.
As a user, I have been using Google apps for a long time now but having your company run off Google is a completely different experience. Google is a Platform. Out of the box you are armed with a pretty decent set of apps and tools to get you up and running quickly. However, these are by no means enough. Over the next few months I think we need to dig deeper to see how we can exploit the Google platform to create the Cognifide-specific services that we need to make us run more smoothly as a company.
Contender ready….
Don’t throw out the Domain with the Design Methodology
Around 20 years ago Planet Software was being invaded. Attack of the killer Design Methodology. Every company just had to have one and there were plenty to go around. Objectory, OMT, Booch, Responsibility Driven Design, Catalysis, Fusion, Coad/Yourdon, Shaellor and Mellor, and the list goes on. All these Methodologies were championed by a design methodologist. All of them had their own take on how you should approach OOAD and what the different phases were. Underline all the nouns in your requirements specification and they are your classes! People did this. All of them had their own syntax for drawing class/object/deployment diagrams? Hmmm, should we draw a class as Cloud or Rectangle. All of them had their own take on the modeling semantics. What is an association? What is the difference between composition and aggregation? All of us, the industry at large, were in a mess. There was a lot of confusion turning into frustration. Something needed to be done.
OOPSLA’94, Portland Oregon. I remember attending a panel on Methodology Standards: Help or Hindrance. The room was packed. The industry had questions. The panel was jammed packed with design methodologists best positioned to answer their questions. There was a real atmosphere in the room. Mostly good but some bad. I, sat at the back, as a then OOPSLA student volunteer (great job), and witnessed the public birth of UML by the ‘Three Amigos’, Booch (Booch Method), Rumbaugh (OMT) and Jacobsen (Objectory) with their joint corporate mother, The Rational Corporation.
UML quickly killed off all competitors and become the standard way of representing designs within the object-oriented paradigm. And I still believe it’s still doing a good job of that. However, then came the rise of the tools. Vendors hooked onto the UML cash cow and we entered the dark period of tool oriented design. Teams were divided up into roles that the tools supported. You are a tester. You are a code monkey. You are a wavy hand designer. You are my ivory tower architect - go forth and build me a monster. You are my business analyst to protect the business from the implementation team, or is it the other way round, I forget. And finally, you are, i dunno, my domain expert. Yeah, let’s go with that. The process dictated the phases and roles. The tool simply enforced them. Developing software like this is painful at best and depressing at worst. These tools did a great job of cutting teams up and keeping them apart.
The common sense in the form of agile came along. People were already downing tools but the agile manifesto accelerated this. However, a lot of folks didn’t really get agile, instead they got lazy. Freed from shackles of tools, models and in-your-face processes, developers returned to coding because that’s what agile is all about, right? Nooooooo. But even if you aren’t doing agile, tool-oriented design is nowhere near as big as it used to be. That’s good a thing right?
Well, sort of. The question now is where do you keep your domain model? How do you capture and model the business? In the race to tool freedom, some people simply don’t see the point in domain modeling. Or place such little emphasis on it that it is reduced to a simple discussion at the start of the project and is rarely visited outside of an IDE. In these cases domain modeling is all one-way traffic that flows from the domain expert to the programmer. There is little or no feedback from the programmer back into the domain model. In fact, we no longer have a domain model but more an implementation model that we are continually translating business terms and tasks into.
So why the post. Well, I don’t think you need a tool to have a domain model. However, I think it can help because you need to revisit and change it a lot. I certainly don’t think you can generate a complete executable system from a domain model and that same domain model be communicative enough to convey its intent to all interested parties. I think every project should spend some time domain modeling. I think because its hard, and domain-driven design is much harder, people don’t do it, which is a shame. I think developers should feedback their thoughts back into the domain model to reflect the truth and not shield from the business. I think developers should learn to model and not leave that to other people. I think the domain model should be accessible and well understood across the team. I think that code should be more closely aligned to the domain model. I think that if you don’t have a domain model, your project is either short-term and/or very small. If it is not, what are you doing?
Episerver 5: Growing in Stature
We have been doing a lot work around the .NET based EPiServer CMS. So much so that one of our Senior Devs, Adam Najmanowicz is one of the first people, on the planet, to become an EPiServer Most Valued Professional (EMVP). Not content with this, Adam successfully, and officially, gets EPiServer Certified together with Marek Błotny.
Well done guys.

