Buyer Beware: Bootcamp on Macbooks is a Ripoff
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.
Database Change Management in .NET: Part 1: Overview and Resources
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
-
K. Scott Allen’s Blog (Ode to Code)
-
Versioning Databases – Change Scripts
http://odetocode.com/Blogs/scott/archive/2008/02/02/versioning-databases-change-scripts.aspx
-
Versioning Databases – Views, Stored Procedures, and the Like
-
Versioning Databases – Branching and Merging
http://odetocode.com/Blogs/scott/archive/2008/02/04/versioning-databases-branching-and-merging.aspx
-
References: Tooling
-
-
.NET Database Migration Tool Roundup
-
-
Community For MVC March Show and Tell: Database Migration Frameworks
Khalid Abuhakmeh’s talk from 3/10/2010.
Video is not on the c4mvc site yet, but can be found on Viddler here.
References: Tooling (Tarantino)
-
-
Tarantino project’s Database Migrations screencast
http://jeffreypalermo.com/blog/tarantino-project-rsquo-s-database-migrations-screencast/
(Part of the excellent Headspring training videos.)
Also via Eric Hexter’s blog at Los Techies:
http://www.lostechies.com/blogs/hex/archive/2009/09/17/continuous-database-integration-video.aspx
-
-
Ryan Kelley at Elegant Code
-
Database Change Management with Tarantino
http://elegantcode.com/2009/11/28/database-change-management-with-tarantino/
-
-
Rob Reynolds’ Blog (Fervent Coder)
-
The Tarantino Project – Database Change Management
-
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!
Manually Upgrading an ASP.NET MVC 1.0 application to ASP.NET MVC 2 (RC2)
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.configfile. Search forSystem.Web.Mvc,and replace all instances with
Version=1.0.0.0System.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 (viaAdd 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.configfile, comment out the assembly reference to the GAC version ofSystem.Web.Mvclike 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!
Using GitHub with Multiple User Accounts
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:
- Guides: Multiple GitHub Accounts
http://github.com/guides/multiple-github-accounts - Generating SSH keys (Win/msysgit)
http://help.github.com/msysgit-key-setup/ - Multiple SSH keys
http://help.github.com/multiple-keys/
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/
Hello world!
A new decade. A new year. A new blog.
And an obligatory Hello World post too!