We did it! LightSpeed 3.0 is done!
15 December 2009 in .Net & Code & Mindscape & Tools | Comments (2)
I am stoked – we finally got LightSpeed 3.0 out the door! For a company the size of Mindscape, we took on a mamoth amount of work and took almost all of 2009 to deliver what we think is an extremely solid 3.0 product.
If you’re interested in the features, you can read the official blog post with highlights or check out the more detailed change log (which incidentally is the same size as all our previous change logs combined).
What I’m really excited about is the integration of migrations into LightSpeed 3.0. Personally I have always hated the pain of having to script out my database changes as I was working away. Even in Rails I’ve not overly enjoyed creating migrations even though they have a nice simple abstraction for them. LightSpeed 3.0 allows you to have the designer track changes and automatically generate the migrations for you. This means you do not have to write a single line of code to have migrations created for you as you tool around updating your model. To me, this is a huge win – we are taking even more work away from the developer so they can focus on solving the actual business problems. I can’t wait to see what feedback we get around this feature
The other exciting aspect of the migrations tracking is that it moves LightSpeed up the value chain – we’re no longer “just an ORM”. With LightSpeed 2.0 we delivered a cool designer will full schema round tripping for heaps of different databases. That was an awesome performance boost for developers and really helped folks working with their models. The migrations capability moves us even further up that value chain by helping manage the life-cycle of the database for developers.
There is of course far more to LightSpeed 3.0, but I wanted to share my thoughts on one feature that I think will really boost my productivity going forward
Download the free express edition and let me know what you think!
IETester – Essential web dev tool
22 January 2009 in Tools | Comments (2)
In my last post I wrote about several add-ins to FireFox that make web development easier. Now I’ve found another tool that makes the world of web development much easier – IETester. Oh. My. God. This is a tool that every web developer on the planet should have running on their machine. What you get is a nice tabbed interface to show your web pages using the IE 5.5, 6, 7 and 8 rendering engines. Fantastic!
One of the *biggest* costs to web development, in my view, is the cross browser compatibility work. Internet Explorer is the prime offender here because of older versions that are still in use. To be fair, we all know that if Microsoft aggressively pushed updates, like Mozilla do, they would get in legal troubles. Damned if they do, damned if they don’t. Personally I think IE updates should be forced upon people just to reduce the massive global waste of development effort that goes into cross browser support but perhaps that’s my view of the world
Grab this free tool, install it and hopefully you’ll find cross browser development much easier!
4 essential FireFox extensions for geeks
12 January 2009 in Tools | Comments (3)
I’ve always used extensions with Firefox but only really one or two. Recently I’ve started using a few more and finding them super handy. Perhaps I’m late to the party but who cares – lets call it fashionably late. For those of you who haven’t seen these extensions then perhaps they’ll help you too. If I’ve missed any you think help developers then post a comment!
Every now and then the network monitoring ability of FireBug lets you down. It’s powerful but not superman tough by any means. Enter HttpFox. HttpFox is a much more powerful network monitoring add-in which will provide you with truck loads of information about what’s going in and out of your browser.
One annoyance with FireBug is the need to force a re-post of values to see what the response to a POST action was. This is where HttpFox helps out – it just does everything all the time. Good Times. Thanks to Jeremy for pointing me in the direction of this great add-in.
You’re storing your data on Amazon’s S3 service right? No? Well perhaps you should. S3 is a great services for storing large amounts of data and making it available on the web in a very inexpensive manner. The downside is that tooling support is somewhat limited which is exactly the problem that S3Fox resolves.
Once installed it’s like getting a file explorer for S3 right inside your browser. Manage ACL’s, upload files, do everything you need.
Lots of geeks are on twitter but it can be time suck. TwitterFox nicely integrates into FireFox and means you don’t need to sit there on the Twitter site or with a dedicated application running. Every now and then it pops up and shows recent tweets which is handy. Saves the whole “oh, I best go refresh the page!” syndrome.
NDepend – deep code metrics
23 June 2008 in .Net & Tools | Comments (4)
Generating code metrics is becoming more and more common with development tools these days – we’ve seen Visual Studio 2008 start to add some basic metrics such as cyclomatic complexity and “maintainability index”. This is all driven by an increased awareness of the difficulties of creating maintainable and reliable software as our software solutions become larger and more complex.
At Mindscape we even published some metrics about an earlier version of LightSpeed. I completely agree with Andrew’s comment that it would be beneficial for commercial software vendors to be more transparent about their code quality – especially when those vendors are providing developer tools. We’ll update our LightSpeed metrics on the Mindscape blog soon.
When it comes to deep code metrics I think you’d be hard pressed to find a more comprehensive tool than NDepend. NDepend is dedicated to code metrics and because of that dedication you’ll find you can spend days exploring everything this tool can do – I tell you this because this blog post will just scrap the surface of what can be done so I recommend you explore the tool yourself to find what parts you get the most value from.
NDepend ships with command line tools and CI integration tools but I’d recommend starting out by playing with the VisualNDepend tool. Here you can easily create a new NDepend project and add assemblies that you want to analyse.
Lets get some analysis done
So how do we start digging into the really meaty analysis? Hit F5, it’s go time!
This generated html file includes data about almost everything you could think of measuring. Basic information such as lines of code are presented first but aren’t off a huge amount of value.
Let’s have a look at a graph of abstractness vs. instability. This helps you quickly identify if your application is in the “Zone of pain” or the “Zone of uselessness”. Ideally you don’t want to be in either and want to ride the fine line between the two. Here’s the break down for LightSpeed and the LightSpeed LINQ provider:
I’m pretty comfortable with that – we’re in the green zone!
What does this mean?
- Stability means that there are a lot of dependencies on an assembly.
- Abstract means that the assembly is very extensible.
So we would end up in the zone of pain if we have a very stable assembly but it’s not extensible. You can imagine working with such a project – any changes have a huge ripple effect and if you’re working with the a project depending on it, you have very little ability to actual alter the behavior of that dependency.
Conversely, we end up in the zone of uselessness when an assembly is very extensible but nobody is actually using it (no dependencies upon it).
LightSpeed assemblies seem not to be depended on by other assemblies (I excluded the 10+ Unit Test libraries for this) and aren’t overly abstract. This is by design – we do have a rich API but you don’t really want to be fiddling in the absolute core of the product so we’ve tucked away some parts to keep the public API simple and easy to use.
The power of CQL
You tend to know that a product is sophisticated when it includes its own query language and NDepend doesn’t let us down here. CQL allows us to write queries for measuring metrics – for example, we might want to display a warning when a method has too many lines of code, or where cyclomatic complexity exceeds certain levels.
NDepend ships with several of these rules already enabled and some of them have been tripped in our LightSpeed analysis. For example, we have several methods with more than 30 lines of code. That can be useful for identifying areas of our code base that might be worth refactoring.
// <Name>Methods too big (NbLinesOfCode)</Name> WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbLinesOfCode > 30 ORDER BY NbLinesOfCode DESC
I’d recommend having a play with CQL to write your own queries especially if you’re using CI (you are using Continuous Integration right?) as you can hook NDepend to report warnings.
Visual dependency graph
One area that I’ve found useful with NDepend is the ability to more visually see a dependency hierarchy and better see how your projects fit into the software ecosystem in which they have been developed.
Here’s the output for LightSpeed + LightSpeed.Linq
We can see here the usual suspects – System, System.Data etc but we can also identify other assemblies that might not be obvious. For example, LightSpeed provides support for talking to SQL Server, MySQL, PostgreSQL, SQLite, VistaDB and Oracle and the caching can leverage Memcached or the caching provider in System.Web.
I could certainly see this feature being of use to developers picking up an existing project as it would certainly aid understanding the structure more quickly and efficiently.
There is considerably more information provided by NDepend and I’ve only covered a few areas that I found most interesting in this review. There is a free version for trial/academic/open source users and a professional version also available. I highly recommend grabbing a trial and exploring your projects – you might be a surprise.
The key with any metrics is knowing how to interpret them and understanding the action that you can take to improve them. My suggestion would be to download the trial, run the analyzer over your code and identify some areas of concern, fix them and then recheck. Continue this cycle for the duration of your trial and I’m sure you’ll find you’re producing better code because of it – something we should all be endeavoring to do.
Go and grab NDepend and start improving your code.
Velocity project – memcached by Microsoft?
9 June 2008 in Microsoft & Tools | Comments (8)
Reading over the last week shows that there is some strong interest in Microsoft’s new “Velocity” project. What is Velocity? It’s a distributed caching framework to aid in scaling out applications over many servers – for example, an ASP.Net website.
But, wait a minute, doesn’t this sound exactly the same as what memcached does? Almost the defacto standard for distributed caching and developed many moons ago, memchached powers sites like YouTube, Slashdot, Facebook, NYTimes.com to name a few.
I’m a big fan of what Microsoft creates, in fact I’m building a business that sits on top of what Microsoft builds. I appreciated that the initial blog post even referred to memcached and hints at some of what Microsoft might want to add to their caching system to create some differentiation.
What concerns me here is seeing posts popping up about how cool this framework is from various Microsoft geeks from the “ooo – distributed caching!” perspective. Do they not ever look outside the Microsoft world? Do they not realise this is not new? I think it’s an important discipline for developers to keep looking outside their comfort zone to learn new things. This is by no means something I’m perfect at – it’s a struggle when you’re comfortable with what’s already in front of you but, as the saying goes, you don’t know what you don’t know.
I look forward to the future of the Velocity project and I really hope it’s not just a me too project from Microsoft. You can keep an eye on it by subscribing to their blog.
As a mild plug, our LightSpeed object/relational mapping product has included a memcached provider if you’re building suitably large solutions since version 1.0
Valuecruncher – free business valuations
2 June 2008 in Business & General & Mindscape & Tools | Comments (0)
I’m pleased to announce that Valuecruncher is now live!
What is Valuecruncher?
Aside from clicking the link and finding out directly, Valuecruncher is an online tool to facilitate creating, sharing and finding company valuations. The valuations are created using a Discount Cash flow Model which is a tried and true mechanism for creating business valuations. We’ve worked hard to try and make the site as easy to work with as possible by pre-populating many values required to compute it and providing a nice user interface for creating a valuation. You start with an existing valuation, modify as you see fit and then save. Try it for yourself – click here to go and create a valuation of Apple Computers.
What companies can be valued?
Currently we’ve included many public companies from the NZX50, S&P 500, FTSE 350, ASX 200, TSX Composite. If you don’t know what these mean that’s ok – just browse around and you’ll spot companies you know like Microsoft, Apple, Dell and more.
Currently creating valuations is limited to a selection of public companies that are suitable for a discount cash flow valuation.
What’s the technology behind Valuecruncher?
This is a geek blog primarily so it makes sense to answer this. Valuecruncher is built using Ruby on Rails and the blog is powered by WordPress. The simple interface of the site hides the fact there is some seriously grunty code running behind the scenes.
Who’s behind Valuecruncher?
Valuecruncher is a new business venture that was built by Mark Clare, Sam Stewart, Rowan Simpson, Andrew Peters, Jeremy Boyd and myself. Simply put – Investment bankers, Ex-Trade Me guy and Mindscape.
I’m very happy with what the current site offers but believe me, we have a long list of new exciting features that we’ll be adding to the site in the future. I’ll be blogging about the new features as we release them but I’d urge you to subscribe to the Valuecruncher blog and join the site so that we can keep you in the loop more directly
Even if you’re not a finance person, I would really appreciate any feedback you can provide!
YouTXT web services launched
17 March 2008 in Business & Tools | Comments (0)
Recently YouTXT, a company I’m involved with, made available a set of web services to help users automate and integrate YouTXT services into their applications and websites. At the moment these services are effectively CRUD methods for your stored messages (Create, Read, Update, Delete) however I’d like to hear feedback about what other functionality people would like to see provided by the web services.
What is YouTXT?
YouTXT allows small businesses to get into the text marketing game at no cost. Simply create an account and create “codes” to be sent to 8808. Once you’ve created your codes you can publish them in your marketing material (e.g. “Text ‘coke’ to 8808 for more information”).
YouTXT also provides detailed logging of how your text messaging campaign is running – at any point you can view your statistics online or download them into Excel. From this data you can see exactly when a text was sent and who sent in the text message.
What never ceases to amaze me is the creative ways that people use YouTXT. We have accounts where people create codes as virtual business cards (Text their name to 8808 to get their details), organizations running competitions and tracking those who text and being able to phone the selected winner from the cell number stored in the logs, even groups use this service to track cancellations or when a next event is held.
You can find out more or create your own accounts by visiting the YouTXT site here.
For more information specially about the web services check the API page here.
Nightly builds – see the future
20 February 2008 in Apple & Mindscape & Tools | Comments (1)
Most people that know me are aware that I like to play with new tech. Being that I’m more of a software guy than a hardware guy this usually means the newest versions of tools, frameworks and applications. This is somewhat of a two way street – sometimes you get cool stuff early, sometimes you get buggy crap
I’ve been tinkering with FireFox 3 for about 3 months and had gone back to using FireFox 2 for the time being as there were one or two annoying bugs that prevented me working at a good speed. Recently however I gave FireFox 3.0 another crack on OS X and WOW, it is a million times better than FireFox 2.0. The native theme and widgets are just fantastic and the feel is much more slick all round.
I’d also read that WebKit (the rendering engine behind Safari) is blazingly fast vs. everything else at the moment but you need to use a nightly build. A nightly build is what it sounds like – a build of the software generated on a daily basis from the latest version of the source. It’s usually cutting edge, not guaranteed to work and often buggy. The upside is that you get early access, can help by submitting bug reports and also get to test your software against the newest builds (Xero, take note, FireFox 3.0 beta 3 does not love you very much!)
Tools for nightly builds
It can be useful to automatically update to the latest nightly and on the Mac there is a cool set of tools you can grab here that allow you automate this process for WebKit & FireFox (and several other tools I believe) which is super handy. It can even provide the changelog, maintain a copy of the old version in case the new one is borked and do all sorts of fancy things. Very nice.
We do nightlies too
Since very early on we have provided nightly builds off all our software at Mindscape. This is important because, as stated earlier, it allows people to test against new features, get access to new features we may be working on etc. We’ve enhanced this process for our customers by allowing them to access nightly builds based on what they own. That means that people who have bought the Enterprise edition for example will get the source code with their nightly build. This is something that many other vendors do not provide.