RavenDB is amazing. You don’t have to work with it for a long time to get that. What’s even more amazing is the extensibility and testability of it. This post is about the last two.

In my recent work I needed to have versioning of documents with very specific requirements that are not matching RavenDB built in versioning bundle. Default versioning bundle would generate revisions of all documents upon any change that occurs to a document. In my scenario, I needed only 1 revision at any given time, and revision should be generated only for the documents that have a Status field and its value is changing to “Published”. Very specific to the business requirement. After poking around, reading documentation, and bugging people on user group, I learned a few things about testing custom bundle/plugin RavenDB style.

Testing

If you are doing unit testing, RavenDB.Tests.Helpers is your friend. Once nuget package is installed, your tests can inherit from RavenTestBase class that will wire a new embedded document store for you, optimized for testing, and allowing additional modification needed for testing scenario(s) (#3). For bundle/plugin testing, I needed to register all of my triggers (optionally, you could register one at a time, or all of the triggers found in assembly) in Raven’s configuration. The base class exposes ModifyConfiguration for that purpose (#1). In addition to that, RavenDB needs to be told that we are activating our bundle (#4). Logging (#2) was more for me to see what happens with RavenDB while test is running.

image

Custom Triggers

One this that I haven’t seen in documentation, but was helped with at the user group was the attributes needed for each custom trigger. InheritedExport and ExportMetadata are both needed. BundleName is the name that is registered with Raven’s configuration.

image

Enabling Bundle in RavenDB

In order to get custom bundle to work, it has to be copied into Plugins folder under RavenDB location and database setting has to be updated to let Raven know we want bundle to be activated.

image

Bundle in Action

image

image

image

I have ran into an interesting message when opened a user group site in Visual Studio (not something that I usually do) and it made me wonder

1. What version of IE Visual Studio 2012 Update 2 CTP is using if not the one found on machine (IE9 on my Windows 7)

2. Google is playing dirty… this message would only show up in IE version 8 and lower.

Capture

RavenDB has a great way to monitor what’s happening between client and server. I found it very helpful when trying to figure out what’s happening, or just understand how things work (such as querying).

When doing unit testing, the pattern is to leverage in-memory store to speed things up. Unfortunately, when that’s the case, there’s exposed communication happening between unit tests (client) and in-memory store (server).

There are a few possible solutions folks have suggested, but one that really made my day was… custom logger. This is a fantastic way to tap into what’s happening and see it all (Thank you Matt Johnson for help).

Now there’s no more blindness and magic. Everything is revealed. Happiness.

If you are doing web development, then you have the headache of testing your web application on various browsers. What makes it even more “fun” is the fact that on a given OS you might run multiple browsers of various versions. What I have done in the past was targeting “standard” browsers. That was long time ago, and today reality is a little more challenging. Along with the desktop browsers, nowadays there are mobile browsers that are making things a bit more complex.

Typical solution would be to create VMs. But just a thought of managing all those VMs in a library of VMs, hardware/cloud investment to make it work… gives me chills. Luckily, there’s a service called browserstack that does it for you. And let me tell you that for the money they ask you get a LOT.

Windows XP/7/8, OSX Snow Leopard/Lion/Mountain Lion/iOS-*, Android-* – that’s just a short list of OSes supported by browserstack. But that’s not all. What makes it even better, are the Web Tunnel and Command Line options. So far I have tested only the first, which allows you to run an OS/browser you choose with the LOCAL web site under development. Yes, you are reading correctly, local version. I.e. you do NOT have to publish to a preview public site to make it work. Slick.

The second option, command like, is more for automated testing. I’m yet to try it, but it sounds promising and something tells me my team will love this option Smile

Year end is always an interesting time. Reminds a sort of retrospective, but that’s a geek in me that sees it that way. Yet what happened this year? A lot for me. Here’s a list of significant things for me:

  • Leading and managing people are two different things, combining both and having good results is not an easy task
  • Start-up experience, building from concept to a pilot
  • Windows Azure experience, lessons learned from Cloud Services with NServiceBus
  • Getting a little taste of Client Side “revolution” through knockout and backbone
  • Power of ASP.NET MVC WebAPI and SignalR
  • RavenDB (and document databases in general) awesomeness I wish I’d discover earlier
  • And last, but not least, learning more about humans and myself

This was a good year, packed with lots of learning and new things. The goal for 2013 is to keep it that way and exceed.

Happy new year to everyone!

One of our latest projects has failed to restore nuget packages on the build server. Error message was

Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, click on Package Manager node and check 'Allow NuGet to download missing packages during build.' You can also give consent by setting the environment variable 'EnableNuGetPackageRestore' to 'true'.

I have looked into options, and was surprised that default way to handle it was

  • Go to your build server (rdp or physical)
  • Start Visual Studio

While this is acceptable for a local development, for a build server this is a big red light right there. Gladly, as pointed out in this blog post, there’s an option of setting a system variable to solve the issue.

Would be nice to see nuget default to system variable, and then fallback to an instance of VS on a server, but not the way around.

Quite amusing to read pros and cons of not having a start menu button in Windows 8. Debates from how great it is to how poor the decision was to remove it are all over the web.

I know people want to be able to navigate to their apps quickly through a single point. But for the love of simplicity, is THIS simple? Yes, I am talking about that monster hiding behind little cute as button button… Start Menu. Not only you had to click through multiple times, but also you had to master multiple cascading menus that where chaotically expanding all over the screen, unless you never installed applications and had it nice and tidy. Is this what people are complaining about? Hmmm, interesting.

For myself this was not even relevant. I have stopped using this “useful” button along with the spaghetti menu long time ago (from Windows XP) thanks to David (ex-co-worker) who has introduced me to Object Dock Plus. That got rid of the start button along with the unnecessary task bar (you may say I copied Mac – so it be, they also “borrowed” the idea from somewhere, good software development imagepractice). Next step – Executor. There are other alternatives, but I found this one the best. Wish only the creator would compile it in 64bit mode, but that’s a different post. So switching to Windows 8 is seamless – no need in button and menu at all.

Now why do I write this post? Probably because it’s my reaction to  those who wine and complaint about the fact that someone moved their cheese, ignoring the fact that the cheese was stinky old. Embrace the change, and if you don’t like it, then find alternative, but don’t complaint just because you think it’s not going to work.

And BTW, Windows 8 has brought my old hardware back to life. Something that only Linux could do before Winking smile

Update 2012-09-20: If you really miss the button, there’s a solution for you as well. It’s called VI Start for Windows 8

Update 20012-11-02: Another free alternative is Classic Start. Features list is quite impressing.

Update 2012-11-08: If you want Shutdown/Logoff/Restart tiles on your new start screen, there’s an easy PowerShell commands to get the job done.

Update 2012-11-26: So far the slickest implementation is Start8 by StarDock, which I like for Fences and ObjectDock.

Our group is moving to Git for code management and we were looking for in-house hosting option on Windows platform. I was surprised to find out that out of the box there are not many options. Rolling your own solution (aka setting it up manually) was not an option as we are a small group that is already tasked with enough work. So I started my search for free or paid options. You can guess that options were limited, yet one product I found has exceeded expectation and was just perfect – SCM-Manager. Easy, simple, smooth integration with Active Directory and Jenkins build server. What else a boy needs SmileNot to mention that it’s absolutely free. Amazing piece of work. Highly recommended.

image

Wow.

Among the features I love about Gmail is to be able to access multiple accounts w/o signing out and signing in. I’m late to learn this, but apparently you can do the same thing with Windows Live IDs. Same idea, straight forward.

image

The bonus is that you can control access to your account like LinkedIn, Facebook, Twitter, and Google. Very neat.

More Posts Next page »