ReadyRoll 1.1 now available

Today I am excited to announce that the first feature revision to ReadyRoll SQL Server projects for Visual Studio is out! Highlights of Version 1.1 include:

 

Improved change visibility with Side-By-Side Diff

The new diff tool window gives you the ability to view individual object changes side-by-side, prior to importing the change into your project.

The left pane displays the definition of the selected object at the source, reflecting the state of the object where the change was initiated (in this case, a column was added to the [Shippers] table on the local development SQL Server instance). The right pane displays the “current” state of the object (in this case, the Visual Studio project version of the object).

Immediately below the two-pane view is another pane containing an object synchronization script, providing a preview of how each individual object will be affected when the full script is generated.

You can access the new window through the ReadyRoll DBSync tool window by right-clicking an item in the pending change list and selecting View Object Differences:

You may also notice a couple of other new items within the DBSync context menu:

View Synchronization Script
Opens a dialog containing a preview of the script that would be executed upon synchronizing with the project/database. This feature is useful if you want to confirm that destructive changes will not be included in the generated script.

View Revert Script
Opens a dialog containing a preview of the script that would be executed upon executing the Revert Selected Object(s) command, which returns the selected objects to a previous state (in this case, the state of the object in the Visual Studio project). Similar to the View Synchronization Script command, this feature is useful if you want to confirm that destructive changes are not performed during a revert operation.

 

Less waiting around with Build Caching

Before deploying your database to a target SQL Server instance, it is necessary to first perform a Build in order to produce the SQLCMD-based deployment script.

Though ReadyRoll has a fairly lightweight build process, for larger projects/solutions time spent on simply waiting for the solution to build can quickly add up.

To reduce processing time both within Visual Studio and on your build server, ReadyRoll now makes use of MsBuild conventions to cache project artefacts as part of the build process. This means that the project only goes through the full build process if a project asset (eg. a Deploy-Once script file) is added/removed/modified within the project.

Here’s an example using a sample AdventureWorks database project, calling MsBuild directly from the command prompt. Notice the first time a build is performed it takes ~14 seconds to complete:

However upon subsequent builds this time is reduced to just ~0.1 second, because MsBuild only needs to check that all files are up-to-date with respect to the project inputs/outputs:

 

Extensibility with Build Events

On a recent implementation project a client had a requirement to integrate their database development process with their in-house ORM tool.

Rather than build this integration into the ReadyRoll codebase, I decided instead to add support for a new build target to the .dbproj file that would allow the ORM tool to update its object/relational map when the user performed the ReadyRoll Synchronize command.

Implementing the integration itself was then a simple matter of adding the AfterDatabaseSync target to the .dbproj file and consuming the meta-data passed in by ReadyRoll:

<Target Name="AfterDatabaseSync" Inputs="@(DBSyncFiles)" Outputs="OUTPUT_PLACEHOLDER">
 <PropertyGroup>
   <TablesAffected Condition="'%(ObjectCategory)' == 'Tables' and '%(ObjectOwner)' == 'dbo'">
          @(DBSyncFiles->'%(ObjectName)')
   </TablesAffected>
   <AddedObjects Condition="''%(FileOperation)' == 'Added'">
          @(DBSyncFiles)
   </AddedObjects>
 </PropertyGroup>

 <Message Condition="'$(TablesAffected)' == ''"
          Importance="High"
          Text="No Table objects were affected during Synchronization." />

 <Message Condition="'$(TablesAffected)' != ''"
          Importance="High"
          Text="The following objects will be imported into the ORM: $(TablesAffected)" />

 <Exec Condition="'$(TablesAffected)' != ''"
       Command="ImportObjects.exe /projectDir=c:\src\db\AdventureWorks\ /tables=$(TablesAffected)"
       IgnoreExitCode="False" />
</Target>

The AfterDatabaseSync example above consumes the @(DBSyncFiles) metadata in order to create a semi-colon separated list of Tables that were changed during synchronization. The hypothetical ImportObjects.exe command is a utility belonging to the ORM tool which is responsible for keeping the object mappings in-sync with the database: by taking a list of changed Tables as a parameter, it updates its object/relational mappings based on the relational definitions provided by the ReadyRoll database project files.

Here is a list of the metadata passed-in to the target through the @(DBSyncFiles) item group:

  • FileName: The name of the file affected, eg. dbo.Suppliers.sql
  • FileOperation: Specifies whether the file related to the object was Added, Deleted or Modified
  • ObjectCategory: The type of SQL object affected, eg. Tables, StoredProcedures, Views, etc.
  • ObjectName: The name of the affected SQL object, eg. Suppliers
  • ObjectOwner: The schema that the affected SQL object is contained in, eg. dbo

In addition to the AfterDatabaseSync target, a number of standard MsBuild targets are now supported by ReadyRoll database projects including: BeforeBuild, AfterBuild, BeforeDeploy, AfterDeploy, BeforeClean & AfterClean.

 

Other Changes

In all Version 1.1 contains nearly two dozen new features, improvements and general bug fixes, including:

  • Encrypted objects can now be decrypted and processed (requires membership in the sysadmin server role)
  • Support for built-in system objects within the project declaration files, such as the “db_datareader” role and “dbo” user
  • Improved clarity of DBSync tool group headers: the text/icons within the pending object list more clearly articulate the source & destination of changes
  • Increased level of detail in build progress reporting: ReadyRoll now echoes each stage of progress during project build

Download the 30-day trial now or see the release notes for all changes in this release.

Advertisements

My ‘Accidental DBA’ story

I started out as a shareware developer in the late 90’s, initially working on a CSS editing product on VB4 among other tools for Web Developers (or Webmasters as they were then known!). Eventually I decided that I should join the corporate world, to learn about how big organisations operate and work with people smarter and more experienced than me. So I applied for and got a job with an IT consultancy.

During my time there I was mentored by a team of DBAs working with Oracle 8i. They were working on a sighting database as part of a government initiative for the protection of endangered wildlife. It was my first exposure to an “industrial-grade” DBMS, and the enthusiasm those guys had for their craft left an impression that would set the tone for the next decade of my career.

After a couple of years of consulting work, I changed to a more permanent team role within a retail finance company and moved away from Oracle to the Microsoft toolstack. Moving to SQL Server 2000 was something of a revelation: I remember thinking to myself, “Wow, databases can be friendly?”. I was particularly taken with DTS and how readily large amounts of data could be shuffled around from server-to-server. Enterprise Manager and its point-and-click query and table designers unleashed all sorts of possibilities for me. In time, however, I would learn that these GUI tools could also be dangerous if not applied with proper forethought and due care.

I have to admit that the whole RDBMS paradigm didn’t come that easily to me. Initially I saw it simply as a way to persist my application object data; something I later learned was quite common among AppDevs (Grant Frichey summed up this quandary well in his article on DBA/Developer communication). But in time I came to appreciate the subtleties of working with relational databases and got to grips with deployment techniques, like how to preserve the integrity of a schema during table object changes.

As our team started to face the pressures of shorter release cycles, and as tensions between Devs and DBAs became evermore frayed, my manager and I saw a need for a role that would keep the wheels of our application lifecycle turning. So for 3 years I did nothing but prepare and execute releases to our enterprise contact centre systems, working with both teams to find ways to make our deployments go a little smoother and a little faster each time. I discovered the wonders of Continuous Integration with TeamCity, integrating our build process with a Compare API, which helped us with our deployments as well as keep our environments in-sync. My manager helped me put a DevOps team together and over time we got deployments down to a fine art, making the best of our ever-narrowing release windows.

I enjoyed this work so much I recently quit my job to develop and market a tool for database professionals. So in a way my career has come full circle with a return to independent software development. The difference to when I started out 15 years ago is that the vernacular has now changed from “shareware developer” to “Micro-ISV”. Times may have changed and certainly the tools for software development and deployment have come a long way, but in a lot of ways database development tools are still stuck in the dark ages. Having worked on both sides of the Dev and DBA divide, I have been fortunate to gain an interesting perspective on the challenges faced with software delivery and operations.

So the gauntlet that I’ve now thrown down for myself is to make the best of that opportunity: to help teams work more harmoniously and simply get more releases out the door.

Ready and Rolling!

ReadyRoll Logo

I am very excited to announce that ReadyRoll — the flagship product of my new startup of the same name — has today graduated to Version 1.0!

Working on this product has been one of the most satisfying experiences of my career. Of course this is just the initial release; there’s a barrel of items in the backlog that I’ll be focusing on next, particularly in the areas of usability and performance.

When I first started working on ReadyRoll, one of my goals was to help bridge the growing divide between Developers (responsible for building databases to meet the needs of the business) and Database Administrators (the custodians of an organisation’s data, aka the people who get the 3AM wakeup calls).

As a former DevOps guy, I have had the opportunity to work with both Developers and DBAs, and it’s my hope that I can provide them with a tool that helps solve a problem they share: bearing in mind the subtleties of working with schemas, how can an organisation achieve a repeatable and reliable database deployment process?

So without any further ado, it’s time to get rolling!

Total unabashed fanboy review of The 7th Guest for iPad

WARNING: I’ve made absolutely no attempt to curb my bias here. This game is what got me into computers all those years ago and I just had to repost it!

Review of 7th Guest for iPad – 18th December 2010

In the summer of 1993 I received a copy of the 7th Guest as a present from my parents, and immediately I was enthralled. The first thing I noticed when opening the box was the stunning artwork, featuring the mansion of toymaker Henry Stauf, exquisitely architected by Robert Stein and his team.

In the box was a host of treats, including a stunning lithograph featuring one of Stauf’s enigmatic dolls. Behind that the two CD-ROMs containing the hours of live-action video, gameplay and 3D Studio-rendered graphics, with the remainder dedicated to the game’s haunting CD-audio soundtrack. And finally, nestled behind a small doorway was a “making of” video cassette which offered a detailed insight into how all the diverse elements of the 7th Guest came together. Later versions also shipped with a booklet entitled The Stauf Files which provided a new story arc featuring the investigative journalist Robin Morales. This also acted as a nice segue into the game’s sequel, The 11th Hour.

As a 13 year old kid, it was like having Christmas all in one beautifully packaged box. I can’t tell you how many countless hours I spent on my dad’s PC in the study, exploring all the rooms of Stauf’s sprawling mansion, looking for so-called “kinetic hotspots” like the hidden portal to the subterranean portrait gallery, screaming blue murder over the infuriatingly difficult Microscope puzzle (Note: this had to be dropped for the iOS version due to technical issues) and piecing together the (intentionally) fragmented storyline of what took place when 6 guests were invited one night.

In the near two decades since its release, there have been multiple ports of the game, including one to the long-forgotten CD-i platform. The latest and first one in 13 years is to the iOS platform, with both iPhone and iPad flavours being made available.

In firing up this game for the first time in years, the first thing I realise is how far the gaming platforms themselves have come. It’s easy to take this for granted in the age of the smartphone and the PS3, but I can still clearly recall the difficulty in setting up the game back in the 90’s: Correct VESA/SoundBlaster  drivers? — check, MIDI/WAV volume balance — check, enough available Conventional/Extended memory — check. Indeed, the first puzzle of the game could be described as actually getting it up-and-running (later releases of the game did improve on this, thankfully). But it was all worth it as the game’s ouija board was revealed and that delectably evil voice of Henry Stauf offered that unnerving greeting: “Welcome to my… house.”

Players of the PC/Mac version will notice how true to the original the iOS port is. Thankfully, the clever team that has brought this version to us (under the direction of the game’s co-creator, Rob Landeros) has left the game for the vast majority intact, avoiding any George Lucas-style tinkering of its parts. One thing I did miss, however, was the game’s cinematic title sequence, which featured a bone-chilling crescendo provided by the musical genius George Sanger, aka The Fat Man. This introduction, which lead into the haunting exposition of Stauf’s “road to evil” (which is included in the iOS version), set the tone and atmosphere for the game in a way that had me checking my back as I explored the house’s darkened corridors. I distinctly remember at one time being a little freaked out having got lost in the vast maze that leads to the house’s crypt: as I rounded a corner and was met with a dead-end, Stauf offered his most chilling taunt of all, “Feeling lonely?”.

Now as I fire up the ouija board on my iPad and that skeletal hand beckons me deeper into the bowels of the mansion once more I can’t help but feel a certain sense of trepidation all over again: will I beat the house in the face of Stauf’s merciless taunts and “live to play another day”, or will I once more fall victim to the house having succumbed to my “mere mortal” weaknesses?

Either way I’m sure I’ll be reminded why this game made a such a big impact when it was released all those years ago: it’s straight-forward and intuitive gameplay, it’s uncompromising production values but most of all it’s focus on storytelling, which was way ahead of its time (my favourite of the camp cast of characters being the man-eating seductress, Martine Burden). As this latest incarnation spreads throughout the Internet, I will follow with great interest the thoughts and reactions of a whole new generation of Egos who dare to enter the mansion.

Today I quit my job to focus on my startup

I recently attended Business of Software in Boston, and at the conclusion of the event Paul Kenny asked everyone to make a tangible commitment to act on something they had learnt during the conference.

My commitment was to free up my time so I could ready v1.0 of my new product for launch.

Realising this was going to be near impossible while still in fulltime employment, I decided that I would hand in my resignation upon returning to Sydney. And now, after an incredible 7 year run working with some of the most talented and generous people I’ve ever met, my time with FlexiGroup Ltd will today come to an end.

During those 7 years, I’ve worked as a Developer, shifted into a Release Engineering role and finally onto leadership of the DevOps Team.

However during the last few months, my thoughts and energies have progressively drifted towards my startup. Developing ‘ReadyRoll‘ has occupied nearly all of my time outside work for the better part of the last year but I’ve found it incredibly enjoyable. Corporate work usually involves balancing a number of different workloads, so being able to lavish the design of a singular piece of software is something of a luxury.

ReadyRoll will be the my first product since ‘StyleMaker’, a CSS authoring tool that I created way back in 1997 as a teen. It was something I made for a school assignment, but it ended up being more than that when I decided to distribute it as shareware. I can still remember the rush of my first few sales and seeing my software on the front page of sites like TUCOWS and Download.com.

Though I did manage to achieve “ramen profitability“, it didn’t work out in the end but I learnt a lot about things like how much hard graft and perseverance actually goes into creating things of real value. And how listening to customers and being open and honest in your dealings is key to long-term prosperity in business (thanks to Jason Cohen for reminding me of this). Failure to deliver on these things can be a great teacher.

So in a way this move is a continuation of my “geek origin” story. In the years since my early efforts, I’ve been blessed to have had the opportunity to hone my skills under the guidance of some fabulous mentors. And now I get to do the indie software developer thing all over again.

With trepidation and excitement in equal amounts, today I begin to take those first few tentative steps from “Wannapreneur” towards “Fledgling Startup Founder”. Who knows what happens next.

UPDATE 04/02/2012: ReadyRoll has launched!

Introducing ReadyRoll

ReadyRoll Logo

Today I am very excited to tell you about a new tool I’ve been working on. It’s called ReadyRoll, and it’s a new type of Visual Studio 2010 project designed with SQL Server database refactoring and developer productivity in mind.

It’s built on the idea that the best way improve a system and evolve its design is to refine it in lots of little increments over time, rather attempting a “big bang” type of change.

The database development tool market has a number of stellar products in it, and so I’m definitely standing on the shoulders of giants here. But I do believe that that developers and database professionals lack a tool that allows them to create a sustainable process in how they develop databases. What is needed is a tool that encourages experimentation, and fosters a virtuous cycle in improving the design of existing schemas.

It’s early days, but what I really want is for ReadyRoll to do for databases what ReSharper has done for code.

There will be a preview release available shortly with a 1.0 release to follow sometime in October. Please drop me an email on dan at danere dot com if you’d like to take part, I’d love to hear your feedback and of course will provide you with a complimentary license on launch for lending me some of your valuable time.

Of course the best way to get to know it is to see it in action! Read more about ReadyRoll, download it now, or watch this short screencast (duration 3:16):


If you can’t see this video, view the MP4 version

A Maker’s World

One of the most exciting things happening right now is the maker movement: everyday people taking big ideas from conceptualisation through to reality.

In the IT world, this is nothing new and I have always felt a bit spoilt by this. Ever since the dawn of the information age people have been realising their hair-brained ideas, often on their own and without external help (or hinderance!). Inherently, programming lacks the constraints of the physical world as there’s very little upfront spend required and no expensive manufacturing involved.

And now this same philosophy is starting to take hold in more traditional industries, aided by the very technology that helped inspire it. They’re calling this new breed of pioneer’s “makers” and they come from all walks of life: from artists to jewellers, to scientists and fashion designers. This exciting DIY movement has seen a resurgence in interest over the past couple of years, with inspiration from Maker Faire (an annual gathering of makers that takes place in multiple cities in the US and the UK started by Dale Dougherty), the proliferation of 3D printers like Ultimaker, electronic prototyping platforms like Arduino and outsourced “making systems” such as Ponoko.

With everyday people taking control of the design, implementation and ultimately the marketing and distribution of products, traditional (i.e. complacent) industry should be more than a little worried about its future in a connected world.

Watch Dale Dougherty and others from Pixar et al talk about the Maker Movement at Google Tech Talks: