Martin Aatmaa's Blog

Riding the software development fail whale since 1999.

Buyer Beware: Bootcamp on Macbooks is a Ripoff

with 2 comments

For those considering buying a Macbook with the intention of running Bootcamp on a regular basis, beware of the following limitations, and factor those in to your purchasing decision.

Context

I have been using an Early 2009 era Macbook Pro 17″ Unibody for about six months.

During this time, my usage has been about 75% Bootcamp with Windows 7 Ultimate.

Disclaimer

To the best of my knowledge, the issues listed here apply to all unibody Macbooks running Bootcamp.

I am running the latest Snow Leopard bootcamp drivers.

These issues only apply in Bootcamp mode. If you run Windows in a virtualized environment on OSX (Parallels or VMWare Fusion), these problems do not exist.

The Shitty Deal

Integrated video is not an option

In Bootcamp mode, I cannot use the integrated video. I am forced, without an option, to use the discrete graphics at all times.

This sucks because I an stuck with all the negatives of running discrete video: poorer battery life, increased heat, and increased fan noise.

The trackpad functionality is crippled

The trackpad functionality under Bootcamp is crippled. Three and four finger gestures are not available, nor are advanced motions (e.g. rotate).

The trackpad functionality is buggy

Among the buggy implementations are tap to click (though this is improved in the Snow Leopard driver set), and control clicking. These gestures frequently (say, 1 in 4 times) do not register properly, which is surprisingly frustrating for continuous use.

The keyboard backlight is buggy

You cannot completely turn off the keyboard backlight. The lowest setting possible is one tick above off. This is a bug in the drivers.

When you power on, or resume from hibernate or sleep, your backlight setting is forgotten, and defaults to maximum brightness, which is annoying.

A third party utility now exists where you can turn off the backlight manually, via a system tray application menu.

Conclusion

I would love to be wrong on any of these, so please do let me know if there is an error on my part, or an otherwise known workaround available.

None of these issues are deal breakers, but in combination they do have a negative effect on the user experience. They are all annoying, and even more so considering the fact that they are clearly software/driver deficiencies.

Bootcamp is a (seemingly purposefully) neglected feature, and that sucks.

Why not Windows on OSX via Virtualization?

In my case, for two reasons:

  • Performance

    In certain scenarios, the performance penalty of virtualization cannot be tolerated.

  • Security requirements

    My security requirement was to run Windows BitLocker on the OS drive. This is not possible to do in a virtualized environment.

Written by Martin Aatmaa

April 27, 2010 at 05:36

Posted in Hardware

Tagged with ,

Database Change Management in .NET: Part 1: Overview and Resources

leave a comment »

The idea of a database change management system (also known as a Database Migration system) does not hold much mindshare in the .NET development world.

Most of the projects I have encountered in my experience have not had a working process in place, and indeed many times the developers involved (myself included) did not have an understanding of the requirements or benefits such a process could bring.

On a current brownfield project I have had the opportunity to introduce a database change management process where one did not exist before.

I have documented the process, and intend to share my findings in a series of blog posts.

Since the majority of my learnings have come from the community, I hope that this will be an suitable way of giving back in appreciation.

The Historical Landscape

From what I have seen, this area has been historically neglected in the .NET scene for the following reasons:

  • The “Developer” and “Database Administrator” divide

    There has always been some kind of informal divide between the traditional developer and traditional database administrator.

    They are positions which at their extremes require different skill sets, use different tools, and in the classical development model have worked in isolation from one another.

  • The “Official Tooling” segregation

    Microsoft has had (to my knowledge) a DB dev tool since Visual Studio 2005 (Microsoft® Visual Studio® 2005 Team Edition for Database Professionals).

    In the 2005 and 2008 editions, however, this tooling was limited to the high end “Team System” enterprise SKUs, which effectively prevented non-enterprise developers access to it.

  • The “Official Tooling” quality

    I’ve been using the Database Edition of Visual Studio since the 2008 betas. Recently I’ve started to use the 2010 editions. Based on this experience, I can comfortably say that the tools have been extremely painful to use. They are buggy, slow, and buggy (did I mention they are buggy?).

    Long story short, the official tooling is still not there yet, and therefore makes their uptake even harder.

While these are certainly generalizations, each has come up in my discussions with peers about the subject.

The Changing Trends

  • The agile trend is bringing the app and database developer closer together

    As more and more large teams adopt agile development techniques, they’re finding that interaction between the app developer and database developer becomes more frequent, and the scope of the work is more incremental.

  • The agile trend is placing more requirements on the database development process

    Databse code now needs to change in unison with the application code it accompanies: quick iteration, quick deployment, and the ability to automatically spin up DB instances on the fly

  • The tooling is getting stronger

    Microsoft’s tools are picking up speed GDR after GDR, and the OSS space has a large number of tools available to facilitate the process.

    A number of these tools have been influenced by developments in other spaces/frameworks, like Ruby/Rails.

  • The tooling is getting more accessible

    The Visual Studio DB Edition has been merged into the Professional (or is it Premium?) VS SKU, and is no longer confined to the high end Team System (now defunct) SKUs.

    The OSS tools are getting better month after month, and adoption continues to increase.

  • The discussion is gaining traction

    More and more .NET developers are aware of the benefits, and are seeking solutions.

Current Community Resources

As a first part to this series, I’ve compiled a list of resources I’ve found extremely useful.

My focus has been towards the .NET space, and I have favoured SQL based tools over code based ones (more on that in a future episode), with a particular interest in Tarantino from the awesome dudes at Headspring Systems.

References: General, Process

References: Tooling

References: Tooling (Tarantino)

If you know of any others that I’ve missed, please post them in the comments!

In the next part I’ll be looking at the goals of a database management system, as well as examining the two different types of tools that exist.

Your comments are always appreciated, and I look forward to learning from them!

Hope this helps!

Written by Martin Aatmaa

March 15, 2010 at 22:05

Manually Upgrading an ASP.NET MVC 1.0 application to ASP.NET MVC 2 (RC2)

with 2 comments

The ASP.NET MVC 2 RC2 release notes have a step by step process that explains how to manually upgrade an MVC 1.0 app to an MVC 2.0 app:

Upgrading an ASP.NET MVC 1.0 Project to ASP.NET MVC 2

To upgrade an existing ASP.NET MVC 1.0 application to version 2, follow these steps:

1. Make a backup of the existing project.

2. Open the project file in a text editor (the file with the .csproj or .vbproj file extension) and find the
ProjectTypeGuid element. As the value of that element, replace the GUID {603c0e0b-db56-11dc-be95-000d561079b0}
with {F85E285D-A4E0-4152-9332-AB1D724D3325}.

When you are done, the value of that element should be as follows:

    <ProjectTypeGuids>
        {F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
    </ProjectTypeGuids>
    

3. In the Web application root folder, edit the Web.config file. Search for System.Web.Mvc,
Version=1.0.0.0
and replace all instances with System.Web.Mvc, Version=2.0.0.0.

4. Repeat the previous step for the Web.config file located in the Views folder.

5. Open the project using Visual Studio, and in Solution Explorer, expand the References node. Delete the
reference to System.Web.Mvc (which points to the version 1.0 assembly). Add a reference to System.Web.Mvc
(v2.0.0.0).

6. Add the following bindingRedirect element to the Web.config file in the application root under the
configuraton section:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
    

7. Create a new ASP.NET MVC 2 application. Copy the files from the Scripts folder of the new application into the
Scripts folder of the existing application.

8. Compile the application and run it. If any errors occur, refer to the Breaking Changes section of this
document for possible solutions.

Eilon Lipton has also put together a migration tool that takes your existing solution file and does this process automagically.

We’ve been doing the migration manually on a large number of internal projects.

Here are some notes, based on our experience:

  • Step 2 is required only if you want Visual Studio tooling support

    Tooling includes Visual Studio keyboard shortcuts, menu items, and scaffolding/code generation support.

    If you don’t need/want this (or can’t have it, if you’re working with Visual
    Studio 2010 RC and ASP.NET MVC 2 RC2
    ), you don’t need to perform this step.

  • In Step 5, prefer referencing bin-deployed System.Web.Mvc assemblies instead of the GAC ones

    When you install ASP.NET MVC 2 RC using the installer, it will place a copy of the assemblies in the following folder:


    C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\

    It will then register these .dlls in the Global Assembly Cache (GAC).

    When setting up your project, don’t reference the GAC assemblies (via Visual Studio > Project References > Right Click Menu > Add Reference > ".NET" Tab).

    Instead, copy the dlls from the above directory, place them in your application’s lib (or Library or Dependencies) folder, and reference those in your project (via Add Reference > "Browse" Tab.

    This approach has the following benefits:

    • All external application dependencies are located in your Lib folder, making it easy to source and identify them

    • You can develop your application on a machine which does not have the ASP.NET MVC2 runtime/components installed

    • You can include custom builds/versions in the future without any pain

    If you do this, you will also have to modify Step 3.

    In the root web.config file, comment out the assembly reference to the GAC version of System.Web.Mvc like so:

            <system.web>
                  <compilation debug="true">
                      <assemblies>
                          ...
                          <!--<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>-->
                          ...
                      </assemblies>
                  </compilation>
            </system.web>
            

Hope this helps!

Written by Martin Aatmaa

February 9, 2010 at 23:25

Using GitHub with Multiple User Accounts

leave a comment »

GitHub is awesome, and I use it for both work projects and personal projects. I have a separate GitHub account for each profile.

What if I want to be able to work with repositories from both GitHub accounts on one machine?

Well, since I connect to GitHub via SSH, all I need to do is configure my SSH setup with multiple SSH keypairs.

GitHub has great documentation on how to do this:

Also, because I’m working with multiple repositories using different personas, I need to make sure that my individual repositories have the user settings overriden accordingly:

Setting user name, email and GitHub token – Overriding settings for individual repos
http://help.github.com/git-email-settings/

Written by Martin Aatmaa

January 27, 2010 at 23:03

Posted in Uncategorized

Tagged with , ,

Hello world!

with 2 comments

A new decade. A new year. A new blog.

And an obligatory Hello World post too!

Written by Martin Aatmaa

January 17, 2010 at 08:15

Posted in Uncategorized

Tagged with