Sunday, May 25, 2008

Gnome + Compiz + Virtualbox Seamless Window + Workaround = Awesome

I have been a long time user of Linux, with various desktops and servers throughout the years (technically both Linux and Windows), and currently I have been using Ubuntu 8.04 with VMWare Workstation 6.5 Beta.  A while back I tried out VirtualBox, now owned by Sun, and I was disappointed with the featureset and speed versus VMWare.  However times have changed, and VirtualBox 1.6 is way faster, and I am definately impressed, even with it's Seamless Desktop functionality.


Before it gets mentioned, I swapped out the vmware-vmx executable from the debug executable to the release executable to try to gain speed benefits, and of course my virtual machine was tweaked (Windows Server 2003) with the tools installed.


There has only been one issue, which was with compiz enabled, caused a nasty drawing bug with Seamless Windows when there was no windows open on the desktop.


Until a proper workaround is provided, I created this small .NET application that will force an open window into the upper left hand corner of the screen, with 1x1 pixel visible on the desktop, which seems to satisfy the seamless desktop functionality and allows things to function normally.  The window does not provide any kind of functionality, and is not available through the taskbar, in order to kill it off you must kill the process through task manager.


It was almost simple to convert my VM from VMWare to Virtualbox also.  I uninstalled the VMWare Tools, as this can cause conficts once the Virtual Machine is running under VirtualBox.  I used a registry hack called MergeIDE to ease the kernel loaders ability to load the OS from a different type of disk interface (my VMWare machine had SCSI, VirtualBox has IDE), and also I swapped the HAL in my virtual machine from Multiprocessor ACPI to the generic ACPI HAL (not uniprocessor ACPI, instead the generic ACPI hal which has the acronym for ACPI spelled out).  Since VirtualBox reads VMDK files (VMWare's disk file format), it booted right up, installed the VirtualBox Guest Additions, and was noticeably faster, with only losing support for the DirectX 9 compatibility supported by VMWare Workstation 6.5.  This is not a comparison of VMWare Workstation 6.5, the same speed differences are noticeable with VMWare Workstation 6 and VMWare Server.


You can get the full source and binaries of debug and release mode for the compiz and seamless desktop workaround here.  I simply dropped the executable into the startup folder for "All Users", under the start menu, and the issue disappears.

Friday, March 14, 2008

Repository Library - Initial Feedback Release

I am releasing my own repository library, mainly for feedback at this point, however it should be somewhat usable, proceed at your own risk (I have yet to build tests or use in a real app), under the ISC license (BSD).

You can pick up the source code (includes dependencies) here.


The library, while simplistic in nature, allows for the simplification in usability by making use of extension methods.  The following interfaces are available:


IRepositoryContext : This interface is what replaces the IxxxxRepository interfaces or IRepository<xxxx> of the typical Repository Pattern.  The Context Interface allows reference of types as such: context.Xxxxx().Find/Save/etc, all wrapped (optionally) within a Transaction when used with the NHibernate Repository Provider.

IRepository/IQueryRepository : This is the interface (one of) returned via the context.Xxxxx() call.  The generic types are <ModelObject, KeyType> for IRepository and <ModelObject, KeyType, QueryEnumType> for IQueryRepository.

IBuilderRepository : This interface allows passthrough of query objects which may be specific to the underlying repository provider (I plan to use this to implement a generic query generation UI system, using NHibernate specific features, etc...)


In additional to these Interfaces, located in the Acqusys.Repository assembly, a provider for NHibernate is provided with the implementations, as well as a small set of example projects.


While this blog posting doesn't give the full attention this project deserves, and with all the debate on the ALT.NET mailing list, I figured the best bet would be to push this out there for whoever wants to take a look and possibly provide feedback.

Time for my own implementation of this repository!