Architecture Chat #51, #52 & #53

  • Discussed the Pomodoro technique, David's been doing it from the start of the year (And finding it working well), Jamie started a couple of months ago, Josh started a couple of weeks ago.   Here's the book, and here's a whitepaper.
  • New Zealand most peaceful country.
  • Study identified software developers as generally being healthier then people working in other industries.
  • Mylyn Eclipse Plugin.
  • Discussed Pipe Networks cable, and there was some debate that it had been both started or stalled...  Some older Articles mentioning arriving at Austrlia, but not NZ.   There's also a wikipedia page for PIPE Networks.
  • Discussed Distributed source control, including..

  • Peter and Josh put out the call to arms - if you haven't tried a DVCS, now is the time!
  • Java in legacy lockdown - we discussed the rate of change / addition of new features in Java vs. C# as flagship languages for their associated JVM & CLR.
    • Also discussed the current trend (At least on blogs / podcasts) to identify a Java v.Next, such as Scala.
    • Are java's days really numbered when being considered for developing green-fields apps (as a language, obviously not as a platform).


  • Automapper - Updated group of experiences after using it in a recent project, generally nothing but good news to report.  Did discuss configuring mappings when using an IoC container or plugin model.
  • Discussed Firefox weave.
  • WPF Event Manager - we discussed why events in WPF are potentially quite slow.
    • Discussed the contrast between the winforms event model and WPF.
    • Also discussed how the windows forms event model was generally inefficient, and sometimes like sucking on a fire hose, relying on efficient handling to avoid issues.
    • Discussed how the Reactive / Rx Framework might help to simplify some of the problems we face today.
    • Discussed the Drop of the Rx (Linq To Events) In Silverlight 3 - see here for a great write up.


  • Discussed the interesting timing of Lightspeeds announcement of SQL Function support and EF 4.0's ;o)
  • Discussed open source projects
    • The statement "if I don't know about your project, that's your problem" - Amen, open source is not just about throwing code up on a public accessible repository.
    • Discussed community.
    • Discussed educational materials, having up to date examples etc.
    • Discussed the interesting mix of the hugely greatful and downright rude people you interact when running an open source project.
    • Distinguishing the scratch an itch i.e. casual open source project (normally written by just one person) verses the more organised attempts to create lasting pieces of software and community.


  • Discussed Google Pub Sub.
  • Peter raised the question of writing services that render directly to the client i.e. using RDP or VNC protocols - talked around if this was a good idea, the feeling that it was a little like x-windows 15+ years ago and that there are some devices or applications that might already be doing this using the VNC protocol (?).
  • Discussed Internationalization & user customisation, including:
    • Implementing the functionality to allow users to create custom "languages" for products so they can change labels, terminology etc.
    • The costs of doing this at the start of a project vs. after shipping.
    • The impacts of certain languages on layout.
    • Why are our web dev frameworks not built with a degree of customisation out of the box i.e. moving the order of fields on screen, changing widths etc.


  • Big vs2008 patch? (Not sure what this was, think Peter mentioned it being rolled out about a month ago).
  • Entity Framework 4.0 features etc.
  • Talked about the problem of too much content being delivered as video, including:
    • Not having the time to actually sit down and watch it - we need more transcripts and audio-only podcasts/content!
    • Main culprit was identified as Microsoft with Channel 9 & Mix, love the content - but there need's to be more pure Audio and transcripts.  Round the table most people had hours and hours of videos on their "must watch list" with more and more piling up every day.
    • Peter raised the question "what are you missing out on by not watching them" - none of use could really answer, gut feeling was probably not much if you keep an eye on twitter and blogs anyway.  Also it seems "big picture" stuff is often easy to grok when in video format (or at least more engaging), but video is too slow for anything else.


  • Talked about Fibre round NZ - the ongoing "suck" that is Auckland's internet situation, and discussed what's involved what would be involved in setting up a wifi network for smaller NZ towns, to provide high speed access to fibre.
  • Talked about NHibernate's codebase, why it is the way it is, and the advantages it brings i.e. ability to incorporate associated projects like shards, search etc.
  • Microsoft futures video - discussed the video, it's "vision" of the future, and contrasted it to videos of the future from 10 years ago, how much was right, how much wasn't etc.
  • Discussed the Hudson CI Server, and why a few of us like it More the CC.Net and Teamcity.
  • GWT .. also mentioned some of the interesting bits in GWT 2.
  • Discussed Eclipse vs. Mono Develop.  Was interesting how divided it was, some people really don't like Eclipse, others quite like it.  Also discussed the FUD around Eclipse vs. Mono Develop features.  Quite a few of us are using Eclipse for something i.e. PHP or Java development.
  • We asked the question of "why?" Teleriks ASP.Net MVC Controls even exist.
  • Discussed learning Groovy / Grails, and my dabbling with Groovy as a replacement for Jelly script in a project I was working on (though I think I mistakenly called it Jettyscript at the time - what a java noob I am! ;o)
  • Discussed Suse Studio and Matt Richards Mass customisation etc. concepts - and how this could be applied to delivering custom applications.
  • Polyphonic C# was discussed - including the concept of Chords - there was some debate around whether this project became part of c-omega as well (according to the web page, it did).
  • Discussed Parallelization, PLinq etc.
  • We discussed Rob Howard's "legacy" of the provider model, how it came about, community server, and why for many of us the provider model was either an underwhelming or unsuitable set of extension points.
  • We talked about Horn, Josh mentioned my "Love letter to Horn" ;o) - and I talked a little about why I think this is important
  • David started a discussion around Peer to Peer Banking, including this interesting article from Jason Kolb.
  • Discussed if Shards exists for NHibernate.  Yes and no from the looks of it, it's in Contrib, but appears to be incomplete / non-functional.
  • Discussed Caliburn WPF framework, and it's yield goodness.
  • Discussed codeplex making their Wiki engine available.
  • Talked about writing DSL's - including Boo, Oslo's M, and Jetbrains MPS.
    Contrasted differences, and why Boo can be quite appealing to developers compared to developing complex grammars for External DSL's.


There were lots more discussions, but I'm finding the conversations too interesting lately so I'm not taking as many notes as I should - If anyone recalls any other discussions / topics, just leave a comment on this post and I'll update it with the relevant details.

See you all next week!

Read More

Taking Horn for a test drive

So I decided to take the Horn project for a test drive after repaving a number of machines to Windows 7 RTM and waiting for things to install.

After Horn’s initial announcement this year I was excited, but it didn’t really do anything at that stage (and I didn’t have enough time to assist with the dev work / patches)... so I put it on the back burner.  But I found myself need to rebuild Rhino Tools, Castle and NHibernate today from trunk and thought I would give it a try.

At any rate, this is a post covering my “noob” observations as I walk through building horn, and then using horn to build Rhino Tools.

Background


As a little background, Horn was started by the Scotland ALT.Net group, it was kicked off on the scotaltdotnet google code project, and later moved to the hornget project, also on google code. The projects Initial mission statement is to “take control of building a common set of open source packages that are probably similar to many in the ALT.NET space” which I think it’s coming close to realising, but they also have a grander vision of “providing a standard mechanism for easy installation of .Net Packages” – something I definitely think .Net needs, and that dynamic languages lord over us currently with their gem’s and egg’s (and incidentally it is a much trickier problem to solve when you need to produce compiled assemblies, think signing vs. unsigned, ability to specify x86/x64/any platform flags and the way in which assembly versioning in .Net works).

Building Horn


Assuming you have the Subversion command line tools installed (or tortoise svn) - it’s pretty easy.  First off check out the horn trunk…
svn checkout http://hornget.googlecode.com/svn/trunk/ hornget-read-only

Once all the files have been pulled down, you need to then build horn, using the following batch file:
cd hornget-read-onlysrc
hornbuild.bat

hornbuild.bat will execute Nant, and the total build takes about 15 to 20 seconds. It dumps the outputs into a buildnet-3.5debug folder, including horn.exe which is the command line client (Horn package manager).  I would assume as Horn matures we will see an installer / binary release on the horn website, which should hopefully make this even easier.

Running Horn


Now jump into the outputs directory...and run horn for the first time.
cd buildnet-3.5debug
horn

At which point you will be rewarded with the usage screen:
THE HORN PACKAGE MANAGER

http://code.google.com/p/hornget/

Usage : horn -install:
Options :
-rebuildonly Do not check for the latest source code.
-version: The specific version of a package.


Now it's just a matter of building the project you want.. in this case let's build rhino tools (which in turn will build Nhibernate and some parts of the castle project).  Might pay to go make a coffee at this point, as there's going to be a lot going on while you wait patiently.
horn -install:rhino

Oh, and expect to see a lot of this if your connection to the various project’s SVN repositories is slow..
Reading the current revision for castle
working......
working......
working......
working......
working......
working......
working......
working......
working......
working......

Also, as an aside - there's a cyclic relationship between Castle and NHibernate (i.e. Nhibernate relies on Castle Core & Dynamic Proxy, while Castle relies on NHibernate to build) - it's not truly cyclic as such though, just that if you attempt to build either set of project in it's entirety, you will need the outputs of the other. In Horn things like dynamic proxy are broken out into separate projects ie. "castle.tools" rather then just "castle" (though a castle package exists as well, which does build castle in it’s entirety).

It seems to handle this scenario well, and this was certainly a failing of most home-grown solutions I’ve put together over the years which relied on nant or msbuild files… Right, so after about 5 minutes, you should see the horn executable run to completion, like this:

BUILD SUCCEEDED

Total time: 46.6 seconds.

HORN HAS FINISHED INSTALLING rhino.


Note: The "BUILD SUCCEEDED" message is from rhino tools, which was the last project to be built, rather then telling us how long the process took in total.

Locating Outputs


At this point Horn has finished doing it's job, but... if you do a quick directory search, you probably won't find any output binaries. What gives? Well Horn in fact stores all it's files under a directory against the user's profile. So in the case of windows 7 / Vista, that means I can just change directory to find them:
c:devOtherOpenSourcehornget-read-onlysrcbuildnet-3.5debug>cd %USERPROFILE%.horn

C:Usersalex.horn>_


If we grab a quick directory listing... we can see there's a few folders in there.
C:Usersalex.horn>dir * /A
Volume in drive C has no label.
Volume Serial Number is 6AFA-976C

Directory of C:Usersalex.horn

12/08/2009 09:39 p.m.

.
12/08/2009 09:39 p.m. ..
12/08/2009 09:37 p.m. .svn
10/08/2009 03:47 p.m. buildengines
10/08/2009 03:47 p.m. builders
10/08/2009 03:47 p.m. esbs
10/08/2009 03:46 p.m. frameworks
10/08/2009 03:47 p.m. ioc
10/08/2009 03:46 p.m. languages
10/08/2009 03:46 p.m. loggers
10/08/2009 03:46 p.m. mappers
10/08/2009 03:47 p.m. mocks
10/08/2009 03:47 p.m. orm
12/08/2009 09:45 p.m. result
12/08/2009 09:37 p.m. 15 revision.horn
10/08/2009 03:47 p.m. web
10/08/2009 03:47 p.m. wpf
1 File(s) 15 bytes
16 Dir(s) 578,876,366,848 bytes free


Notice the .svn folder, the .horn directory is actually populated from this subversion repository, which stores all the package descriptions etc. (I’m not entirely clear on the terminology here, documentation is fairly sparse on the website – they’re almost more like package build scripts, because they’re a DSL outlining the steps required to build the outputs, required dependencies and so on).

The one folder not under version control is "result" - which is where our outputs are actually stored. So let's take a quick look...

C:Usersalex.horn>cd result

C:Usersalex.hornresult>dir
Volume in drive C has no label.
Volume Serial Number is 6AFA-976C

Directory of C:Usersalex.hornresult

12/08/2009 09:45 p.m.

.
12/08/2009 09:45 p.m. ..
10/08/2009 03:56 p.m. 1,997 ABC.hbm.xml
10/08/2009 03:48 p.m. 110,592 adodb.dll
10/08/2009 04:07 p.m. 568 AnotherBus.config
10/08/2009 03:48 p.m. 40,960 anrControls.Markdown.NET.dll
10/08/2009 03:58 p.m. 106,496 antlr.runtime.dll
10/08/2009 04:01 p.m. 116,736 Antlr3.Runtime.dll
10/08/2009 03:59 p.m. 40,960 Bamboo.Prevalence.dll
10/08/2009 03:59 p.m. 6,656 Bamboo.Prevalence.Util.dll
10/08/2009 04:01 p.m. 40,960 Boo.Lang.CodeDom.dll
10/08/2009 04:01 p.m. 753,664 Boo.Lang.Compiler.dll
10/08/2009 04:01 p.m. 118,784 Boo.Lang.dll
10/08/2009 04:01 p.m. 32,768 Boo.Lang.Extensions.dll
10/08/2009 04:01 p.m. 86,016 Boo.Lang.Interpreter.dll
10/08/2009 04:01 p.m. 425,984 Boo.Lang.Parser.dll
10/08/2009 03:48 p.m. 28,672 Boo.Lang.PatternMatching.dll
10/08/2009 04:01 p.m. 81,920 Boo.Lang.Useful.dll
10/08/2009 04:01 p.m. 32,768 Boo.Microsoft.Build.Tasks.dll
10/08/2009 04:01 p.m. 28,672 Boo.NAnt.Tasks.dll
10/08/2009 04:07 p.m. 393 BusOnTransactionalQueue.config
10/08/2009 04:07 p.m. 405 BusWithLogging.config
10/08/2009 03:48 p.m. 45,056 Cassini.dll
12/08/2009 09:43 p.m. 249,856 Castle.ActiveRecord.dll
12/08/2009 09:43 p.m. 6,656 Castle.ActiveRecord.Linq.dll
12/08/2009 09:43 p.m. 17,920 Castle.ActiveRecord.Linq.pdb
12/08/2009 09:43 p.m. 4,736 Castle.ActiveRecord.Linq.xml
12/08/2009 09:43 p.m. 960,000 Castle.ActiveRecord.pdb
10/08/2009 04:02 p.m. 543,085 Castle.ActiveRecord.XML
12/08/2009 09:42 p.m. 49,152 Castle.Components.Binder.dll
12/08/2009 09:42 p.m. 138,752 Castle.Components.Binder.pdb
12/08/2009 09:42 p.m. 17,275 Castle.Components.Binder.xml
... And the list goes ...

353 File(s) 67,002,734 bytes
2 Dir(s) 578,875,887,616 bytes free


Not bad for what was effectively just a single command line.

Where to from here


I strongly suggest giving Horn a go – not just because it’s useful, but I think that it fills a real hole in the .Net developer open source space, removing one of the barriers to entry – making it easier for people to develop applications against the trunk, or a specific version, of many popular open source projects, will definitely drive up adoption of these projects.

It’s worth noting that currently “Horn” is considered a “developer-only” release at the moment, though I think it’s current state is useful enough to warrant giving it a try, and providing feedback to the Horn dev team etc. so umm… Check it out, if you haven’t already.  I think you’ll be pleasantly surprised.

Read More

2009-08-12 - Architecture Chat Tomorrow

Some Possible Topics:


We'll be meeting at the usual time of 11:30am @ Garrisons, Sylvia Park, Thursday 14th August 2009 - and the topics above are just there in case we run out of anything else to talk about (which is rare).

For more details on the location and write-ups of previous sessions you can consult the associated wiki.

Read More

2009-07-28 - Architecture Chat Tomorrow

Some Possible Topics:


We'll be meeting at the usual time of 11:30am @ Garrisons, Sylvia Park, Thursday  30th July 2009 - and the topics above are just there in case we run out of anything else to talk about (which is rare).

For more details on the location and write-ups of previous sessions you can consult the associated wiki.

There's also a .Net user group meeting Tomorrow (Thursday, 30th July, 5:30pm onwards) - details here.

Read More

2009-07-14 - Architecture Chat This Thursday

It’s been a month since the last one – I’ve shaken off my flu – and It’s time to get back on track.

So yes, It’s that time again – time for another Auckland Architecture chat!

Topics…


Some possible topics for this week:

When & Where...


We’ll be meeting at the usual time of 11:30am @ Garrisons, Sylvia Park, Thursday  16th July 2009 – and the topics above are just there in case we run out of anything else to talk about (which is rare).

For more details on the location and write-ups of previous sessions you can consult the associated wiki.

Lastly…


Lastly – watched this video tonight on channel 9, where Brian Beckman and Erik Meijer whiteboard the IObservable and IObserver interfaces, exploring it as a Dualisation of IEnumerable and IEnumerator i.e. the underpinnings of reactive programming, and how this allows us to bring Linq to events.  Great to see this will get adoption at the framework/Microsoft level – and I think the IObserver interface looks easier to follow and more complete (especially with respect to handling exceptions) compared to say the Reactive Linq library Tomas Petricek blogged about last year which I used on some toy projects at the time.

Had a quick play around with implementing some of the basic functionality, like Where, Select, Take, Last, Merge, Rate Limiting etc. while watching the video, just to see what was involved, you can take a look at all the code here if you’re curious.

Read More