Sunday, October 11, 2009

Procreate 1.1.1 Released!

Procreate 1.1.1

This minor release of Procreate fixes the following issues:

  • Support for 64-bit versions of Windows
  • Support for XNA 3.1 (3.0 or greater required)

You can download the latest version from the Procreate homepage.  Thanks to all who provided feedback.

Saturday, October 10, 2009

Wake On LAN (WoL) Magic Packet Sender Utility

Do you want a small, self-contained utility to remotely wake your computer?  As promised here is a utility you can use to do just that. This small utility offers the following features:

  • Wake a computer from a location that is external to the LAN
  • Wake a computer from within the LAN
  • Automatically store any number of host configurations for repeated use

Abracadabra WOL utility

Follow this guide to ensure your computer is setup correctly for use with WoL. If you are behind NAT or a firewall, ensure the port you specify for each host in the utility is forwarded to the relevant computer. At this point you may be wondering why i chose to write yet another WoL utility when there are already several free alternatives available. The problems i found with existing solutions could be grouped into one or more of the following:

  • Many utilities try to send a broadcast packet to the destination host from a location external to the LAN. 99% of consumer routers block these kinds of packets because they are commonly used in hacker attempts - hence the packet never makes it to the host. This utility does not use broadcast packets when sending externally so it does not suffer from this issue
  • The inability to wake hosts both externally and internally (broadcast is used internally since IP is not known)
  • The inability to save host configurations, requiring the details to be re-entered every time you want to wake a host

This motivated me to write this utility which allowed me to provide all the above functionality. Hopefully you find it useful – feel free to leave a comment if you want something improved or find it useful. Oh and browse the source if you are new to WPF and want to know how to write a simple app. Note that you will need at least the .NET framework 3.5 installed to run this application. This comes included with Windows 7.

Executable

Source Code

Monday, October 5, 2009

Divided Registry In 64-bit Windows

Ever tried to run an old program under a 64-bit OS and found that it just wont work, even when you try every possible compatibility mode setting and running as Administrator?  Many people don’t realise that there are some key differences that can often prevent a program from working.

Both Program Files and the registry are split into 32/64 bit variants, in case there are 2 versions of the same program that need to be installed.  This recently caused an issue for me where i had to manually apply a registry patch to get the game to ‘work’ – under Windows XP it worked fine but would not work under Windows 7 64-bit.  The reason was because by default, the registry patch gets applied to the 64-bit registry, however the game was looking in the 32-bit registry.  The easiest way to solve this is to use the 32-bit version of regedit to apply the registry patch.  You can start it by running:

%systemroot%\syswow64\regedit

Then open and apply the registry patch.  See here for more information

Sunday, September 6, 2009

Showing the Compatibility Button in IE8

After having used IE8 since it came out, i can say that compatibility mode is absolutely essential for quite a few sites that are still using IE7 hacks that don’t play nice with the new version of the browser.  Having control over when to use compatibility mode is essential and can be turned on by clicking the button in the address bar:

image

If you can not see this button in the address bar, it is almost certainly due to the ‘feature’ i just discovered in my last install of Windows 7.  In this install i did something i almost never do – use the default settings.  By default, IE8 sets the option to Include updated compatibility view website lists from Microsoft.  When this option is enabled, the compatibility button is hidden from the address bar because it is assumed that the updated list from Microsoft will include all sites that you will ever need.  In practise i have found this is not the case and i wouldn’t expect it to be – how can MS expect to trawl every website and ensure they work. 

Fortunately, re-enabling the compatibility view button is simple.  Simply go to Tools –> Compatibility View Settings to open the following dialog.  Then turn off the Include updated website lists from Microsoft setting and click OK to save.  A few seconds later the compatibility view button will re-appear in the address bar and you can click it to view a webpage like you are using IE7.

image

So in short, if you used the recommended IE8 settings the first time you ran IE8 (which is likely for a lot of people), the issue above is very likely to be the cause of the compatibility view button not displaying in the address bar.  At some point in the future most websites will be written with IE8 in mind.  Until then, this button can be a lifesaver, especially with Flash enabled pages.

Saturday, September 5, 2009

Wake On LAN (WoL) – Saving the World 1kW At A Time

When i was running Windows Vista i never even considered setting my computer to go to sleep for a number of reasons:

  • Vista’s recovery time was too long
  • I use my computer as a server for a number of services, which i frequently use remotely
  • My son likes to use the PC as a media box

Now that i have Windows 7 installed, i have taken to using the sleep feature since it wakes up in a matter of seconds.  By default Windows 7 uses the Balanced power profile which puts the computer to sleep after 30 minutes when running on power.  This caused me to think about how much power my computer had been using over the past few years.  In Perth, the cost of power is currently 12.67c/unit so we can use the following formula to calculate the amount of power a device is using:

Cost ($) per day = (wattage) / 1000 x ($$/kWh) x (hours used per day)

The power supply in my computer is 500W.  Until i get a cheap energy power meter that can accurately measure the utilisation accuracy, lets assume an average 300W usage (based on the components in my computer).  Plugging this into the above equation means that my computer is costing $1.06 a day to run!!  I really should have done this calculation a few years ago.  Its pretty easy to see that any down time on the computer is going to save some serious $$ over the year.  This is why I’ve started to use WoL as described in my previous post.

I recommend following this guide on Lifehacker to setup WoL on your network. I’ll be writing in the near future on some issues i found with using WoL, in particular the miriad of utilities out there that don’t work, why they don’t work and present a little utility i wrote for my own use while on the train the other day.

This means that for the majority of the day the PC is not running and consuming power, but is available whenever i need to use it.  Since the price of power is only going to rise in the near future, this is going to save me more and more money.  As humans with a growing energy problem, we should all be looking at solutions like this to save power when its not required.  Gone are the days when we can just be lazy and not think about it.

Friday, September 4, 2009

Let’s WoK and WoL – Computer Restarting After Going To Sleep

I finally got around to installing Windows 7 RC on my desktop PC to replace Vista Ultimate.  After enabling extended memory in the BIOS i had 64-bit running in about 1 hour and it is WAAAY faster than the Vista setup i had before.  Anyway all was going well and i had it running next to me while using the laptop.  Next thing i notice is that the computer goes to sleep - it turns out the default power profile in Windows 7 is balanced which by default puts the computer to sleep after 30 minutes of activity, even on desktops.  I guess this is to try and help the world save power, since most users probably don’t have an issue if their computer shuts itself off.  Considering i should try and be green too, I decided to run with it and leave this profile enabled.  Much to my shock the computer restarts itself 5 seconds later!

It turned out the default Windows settings are to blame for this - by default WoL is enabled for ethernet NICs and configured to allow any packet to turn the computer on!  On the majority of home networks out there with more than one computer, this means that it is highly probable a packet will be received in the near future, resulting in the issue i had, which is for the computer to immediately turn itself on.  I really don’t understand why this should be the default configuration for most users out there.  Still, it is simple enough to change so that only a magic packet will turn the computer on, or disable WoL completely, which is much more desirable for most users.  To do so:

  1. Go to the start menu, type 'device manager’ and press enter to start the Device Manager
  2. Expand the Network Adapters section and find the correct network card.  This step is very important – make sure you are modifying the network card that is used to connect to your LAN.  It might be an idea to modify all adapters if you are unsure
  3. Double-click the network adapter to open its properties
  4. Change to the Power Management tab
  5. Uncheck the Allow this device to wake the computer option if you want to disable WoL completely.  In my case, i have this turned on but ensure the Only allow a magic packet to wake the computer option is checked.
  6. Press OK to save the changes

image

I also recommend turning off Wake-on-Mouse (WoM) since its very easy for someone (eg – your 3 year old son) to knock the mouse and turn the computer on.  I like to enable Wake-on-Keyboard (WoK) since I find it very handy to be able to hit a key and start using my computer.  You control both of these through the device manager using the same method described above but for the relevant devices.  WoK combined with WoL gives me a great combination – using the keyboard to turn the computer on locally and the LAN to turn on the computer when i need to access it remotely, while minimising my PC power usage.

I love WoK and WoL, put another dime in the jukebox baby …

Thursday, September 3, 2009

Battlefield 2 Patch 1.50 Full Map List

I searched quickly and couldn’t find this anywhere on the net in one neat, succinct list, so here is the full list of all 30 maps available after installing patch 1.50 for Battlefield 2 and Special Forces:

BF2:

  • Dalian Plant
  • Daqing Oilfields
  • Dragon Valley
  • FuShe Pass
  • Gulf Of Oman
  • Highway Tampa
  • Kubra Dam
  • Mashtuur City
  • Operation Blue Pearl
  • Operation Clean Sweep
  • Road To Jalalabad
  • Sharqi Peninsula
  • Songhua Stalemate
  • Strike at Karkand
  • Wake Island 2007
  • Zatar Wetlands

Special Forces (Extra):

  • Devil’s Perch
  • Ghost Town
  • Iron Gator
  • Leviathan
  • Mass Destruction
  • Night Flight
  • Surge
  • Warlord

Euro Forces (Free):

  • Great Wall
  • Operation Smoke Screen
  • Taraba Quarry

Armored Fury (Free):

  • Midnight Sun
  • Operation Harvest
  • Operation Road Rage

Battlefield 2 Patch 1.50 Crash To Desktop Fix

DICE recently released patch 1.50 for Battlefield 2 which includes a bunch of great enhancements and content.  Its an old game but still my favourite game of all time.  I installed it on my Windows 7 64-bit install and much to my dismay, found that it would crash to desktop every time before even getting to the movies.

After a bit of experimenting i found the issue had nothing to do with Windows 7 or the fact that it was 64-bit, rather it turns out this path is only incremental and requires the game to be fully patched up to version 1.41 before applying.  I didn’t notice any documentation that mentioned this and was misled when the installer completed successfully even without patch 1.41 being applied.  Surely they could check the current version before applying … apparently not.  If you use the following steps you should find the game installs on any system.  Note that updating PB is also required to avoid being booted when you do get around to joining a server online:

  1. Install BF2
  2. Install Special Forces (if you have it)
  3. Apply patch 1.41 full
  4. Apply patch 1.50
  5. Run the PB manual update utility to bring the client PB files up-to-date

Tuesday, September 1, 2009

Macbook Pro Unibody 2009 LCD Display

This is the next piece of my MBP Unibody to receive my attention.  I am dismayed at the support for the LCD under Windows.  No driver is provided for the monitor so it using the Generic PnP Display driver.  As i have previously posted, it seems the ACPI support is almost missing.  Because of this, Windows is unable to adjust the brightness of the screen as is apparent from its absence in the Mobility Centre:

image

This also means that some of the cool new power management features of Windows 7 like the idle screen dimming feature are unavailable.  I really like this feature in OSX and would love to see it working under Windows.  I decided tonight to investigate this further and the first step was to find out some useful information about the panel.  Running the following command in an OSX terminal window gives you the model of your display:

ioreg -lw0 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | strings –6

Finding the model information under Windows is even easier:

  1. Open device manager
  2. Expand the Monitors node and double-click the display to bring up its properties dialog
  3. Change to the Details tab and select Hardware Ids from the drop down list

The model can be seen in the last 4 digits of the hardware ID.  For example mine is MONITOR\APP9CA4 which means i have the 9CA4 screen.  A quick Google search reveals that this means i have the Samsung LTN154BT08 LCD panel.  You can also use the trial version of the excellent Everest application to get even more detailed information:

image

Now that i know the panel specifications i can continue my hunt for a driver that will hopefully provide better control of the screen.  In the meantime, i highly recommend running the Calibrate display colour wizard included with Windows 7 as a minimum.  When i ran the wizard, i found the gamma to be WAY too high, which was leading to a washed out image.  I ended up following the fantastic guide and lowering the as low as it would let me.  Admittedly, up to that point i had not noticed the high gamma since the screen is so damned nice, but after making the adjustment, i can honestly say the colours are much richer.  It seems a lot of other people have come to the same conclusion even compared to the standard OSX colour profile.

Oh by the way, if you are thinking of purchasing the matte display option, read this article first.  While it does reduce glare to a certain extent, you do sacrifice quite a lot of colour richness.  I personally dont find the glare distracting at all, but i guess its personal opinion.

Sunday, August 30, 2009

Windows 7 Useful Utilities

After playing with Windows 7 there are a number of programs i have found invaluable in filling a few small gaps that Windows has missed:

  • Wireless Autoswitch – This great utility disabled the wireless card whenever an Ethernet cable is plugged in.  This saves power and ensures there is only one connect to your LAN, which means you will not accidentally be transferring gigabytes of data over your wireless connection, which is inevitably 10x slower.  Cost = $AU10
  • BlueSoleil BT stack – This is the best BT stack i have come across, officially supports Windows 7, is updated on a regular basis and best of all can be purchased and used on your system for a wide range of BT modules.  Cost = $AU35
  • Winrar – DUH, best compression utility out there.  Cost = FREE (with reminder)
  • Virtual Clone Drive – This lets you mount disc images and use them like a CD/DVD has been inserted.  I used to use Daemon Tools but at this point in time the Lite version does not support Windows 7.  This utility supports Windows 7, integrates into explorer (ie - double click images to mount) and is free.  Plus, if you enable virtual sheep, you get a cute sheep as your disc icon …  Cost = FREE
  • Live Writer – I have a new found love for this simple app.  Im sure there is better out there but this does everything i need.  I can simply paste an image from the clipboard and it uploads it for me – man i cant believe i EVER used the Blogger editor …  Cost = FREE
  • SpeedFan – This great little utility reads the hardware sensors in your computer.  In particular i used it to monitor the temperature of my CPUs while initially playing around with Windows 7 because I had heard that under Windows 7 the MBP ran hot.  I have found this to be completely false with the CPUs never moving from 40C during normally daily operation.  Obviously while playing games the temperature can get higher but nothing to worry about.  It also picked up my GPU and hard drive temperatures.  I recommend changing the system tray font to white and large to make it fit nicely with the Windows 7 look and feel.  Cost = FREE

Ill post more as i think of them.  For now sleep time …

Macbook Pro Unibody iSight Working

OK this post is going to fall into the ‘what the’ category.  I just reinstalled Windows 7 Enterprise 64-bit on my MBPU and the iSight webcam is working inside Messenger!  This is strange since last time the webcam worked in Windows but not inside Messenger.  The only difference is that i installed Enterprise this time instead of RC but i cant see why that would make a huge difference as it is the same version of Messenger, which seems to be where the issue lies.

I will investigate further and keep you posted but the main reason i wrote this post is to point out an excellent utility i found for testing your webcam.  Its very small and simple but provides a large range of useful information.  The utility is called Webcam Diagnostic Assistant and it helped me to work out when i was using RC that the webcam was indeed working under Windows, but not inside Messenger.

Live Writer + Blogger = 403 Error

The editor that comes with Blogger is SHITTTTT so i decided to give the Live Writer tool that comes with Windows Live Experience pack a go. In a word – brilliant, except for one small error – when you try to publish a post with an embedded image you can get a 403 error, as i discovered when publishing my last post. This is easily fixed by logging into your associated Picassa account, after which Live Writer is able to publish the embedded image just fine. Kudos to this guy’s post for succinctly steering me in the right direction

Live Messenger And The Default Communications Device

Discovered something else totally cool about Windows 7 (and probably Vista though i havnt tried it on there).  For audio playback devices there are two default settings:

  • Set as default device - Audio from all programs will be played through this audio device unless otherwise configured
  • Set as default communications device - All calls and video call audio will be played through this audio device unless otherwise directed

Turns out that messenger falls into the second category.  If you make a video call or voice call through messenger it will direct to the default communications device not the default playback device.  What this means, if you are using bluetooth headphones or similar, is that the sound will still go to the speakers unless you configure it to use your headphones.  Doing this is very easy:

  1. Shut down messenger if it is running
  2. Connect your bluetooth headphones or plug in your wired headphones
  3. Right-click the speaker icon in the system tray and select Playback devices to display the following dialog:image
  4. You will see the top item is my bluetooth headphones – they are currently set as the default playback device automatically when connected by the BlueSoleil software i am using
  5. Right-click the bluetooth/wired headphones and select Set as default communication device.  This will cause all communication audio (ie - Live Messenger calls) to redirect through the headphones when they are connected
  6. Click OK to save the changes
  7. Restart messenger and make a call.  The audio will now go through your headphones

Note that it is necessary to restart Messenger for these changes to take effect.  If Messenger is running and you make the change it will continue to use the speakers until you do so.

Friday, August 28, 2009

Using BlueSoleil With Macbook Pro Unibody

In my last post i showed how to use the Toshiba BT stack with the 15" Macbook Pro Unibody (and probably any other BT device you would like). I wasnt too happy with the outcome though - i find the Toshiba BT stack to be quite clunky in the way it integrates with my BT hardware and has a very dated feel to the software. On the plus side it was nice and configurable which i do like. The BIGGER downside though, is that there seems to be no option to license the software on non-Toshiba hardware, rendering it useless after 30 days, unless you crack it. As a software developer myself i try to avoid the latter option and support the industry :)

With that in mind i set my sights back on the other two options - Broadcom and BlueSoleil. My first choice was Broadcom, only because the MBP Unibody uses a Broadcom manufactured module. However Broadcom plainly refuses to install itself on any device that has not paid them royalties for the BT stack, which Apple obviously has little incentive to do at this time. So i turned my attention back to BlueSoleil. This was always my first choice to begin with, since it is intended as an all-purpose stack that you CAN buy a license for if you like it. Well i was successful this time around and i can tell you, the effort was definitely worth it.

Installing BlueSoleil On An Unsupported Device
  1. Download the latest BlueSoleil release from here (version 6.4.275.0 was used for this writeup)
  2. Extract the contents of the zip file and browse to the install directory
  3. Open setup.ini for editing using notepad or similar and replace the contents with the following (simplified for ease of reading). Note that while some of these changes may not strictly be necessary, they streamline some parts of the install process and avoid problems later:

    [bsconfig]
    BluetoothPlaceSite=1
    ShutDownBluetoothHardwarePower=1
    DefaultLocalDeviceClass=1

    [Install]
    CmdLine=""%SetupExeLocation%%PROCESSOR_ARCHITECTURE%\setup.exe"
    [SPDPhoneNumber]
    NumberCount=1
    SPNumber1=#777

  4. Save the file and close it
  5. Run setup.exe as administrator (this is probably not necessary, but its what i did to achieve a successful installation so vary and post your results below)
  6. The installation should succeed with no errors. You should notice the default MS BT stack icon in the system tray has disappeared. Do NOT restart your system when prompted - we want to make a few changes first
  7. Open file explorer and browse to where you installed the BlueSoleil BT stack (default is C:\Program Files\IVT Corporation\BlueSoleil)
  8. Open the bttl.ini file for editing in notepad or similar. Search for the text 8203. The line that is found should be in a section titled [HW356]. If you are using a different version of the drivers then it is unimportant if this title is different. What is important is that you take note of the title. Change the text 8203 to 8213 - what we are doing here is changing the hardware ID specified in this section to match the hardware ID of the BT module. If your hardware ID is slightly different, then simply change the hardware ID here to match yours (and in all subsequent steps). See my previous post on how to locate your hardware ID if you are unsure
  9. At the top of the file, in the [DEFAULT] section, change the setting NUM=363 (number may differ depending on your version of the drivers) to NUM=356
  10. Save the file and close it. Depending on your security settings in Windows 7, you may not be able to save the file directly. Instead - you may have to save the file to your desktop or some other location, close the file and then manually move it back into the directory
  11. Go to the driver\usb subdirectory and open the file btcusb.inf for editing.
  12. Search for the text 8203 and replace all instances (there should be two) with 8213 (again substitute for your hardware ID if it is different from mine)
  13. Save the file (again you may need to indirectly save it using the method explained above) and close it
  14. Restart your computer and once it has restarted, you should see the new BlueSoleil icon in the taskbar. At this point BlueSoleil is installed successfully, but the BT module is not yet setup. We need to do that manually through the device manager
  15. Go to the start menu, type "device manager" and press enter to open the device manager
  16. Browse to the BT module under Bluetooth - it will likely be called Generic Bluetooth Device (if not you may have some other BT software installed that should be removed before any of these steps are performed, but you can probably just install it at this point and proceed)
  17. Right-click the BT device and select Update Driver Software
  18. Select the bottom option Browse my computer for driver software
  19. Select Let me pick from a list of device drivers on my computer and browse to the location of the USB BT driver modified above (default is C:\Program Files\IVT Corporation\BlueSoleil\driver\usb) and click Next
  20. Select the only option in the list, which will be Apple Built-in Bluetooth
  21. A warning will pop up saying the driver is unsigned - click Install this driver anyway
  22. The device should now change its description in Device Manager to Apple Built-in Bluetooth and is successfully installed!
  23. Right-click the BlueSoleil icon in the taskbar and select Turn on bluetooth. You should now successfully be able to pair your bluetooth devices (eg headphones) with your MBP Unibody!

My Experience With BlueSoleil

  • A2DP connectivity is ABSOLUTELY seamless - I made my headphones discoverable - BAM they were connected and appeared as connected on the computer. No redundant password prompt or connection dialog. Music instantly started playing through them. Turn them off and sound changes back to the speakers. Turn them back on they start playing again. Absolutely seamless - i dont even have to stop/start the program using the audio device at the time, which i had to do with the Toshiba drivers
  • Beautiful icon set - the icons used are all vector graphics and fit very nicely with the slick look of Windows 7
  • Minimal set of services - only 3 which is not as good as the MS stack, but way better than the Toshiba drivers which had around half a dozen! They seem to be well designed, making efficient use of resources too which is important - BT should be very transparent to the system in my opinion

As requested, here are the modified INF files (generated from version 6.4.286.0 on 2/12/2009)

Wednesday, August 26, 2009

Bluetooth Stereo Audio (A2DP) Fixed on Macbook Pro Unibody

Well after 3 solid days of searching, downloading and modifying the various Bluetooth (BT) stacks out there, ive finally been successful in getting my Logitech Freepulse Wireless Headphones to work with my MBP 15" Unibody. Its worth it since i spend 1.5 hours each day travelling on the train, so this really comes in handy. Let me walk you through my experiences (so you can see what didnt work) and finally the resolution that did work.

What I have tried
The following list i have tried over the past few days without success:
  • Uninstalled Windows 7 64-bit and reinstalled 32-bit. See my previous post on the main reasons i did this, but it was also to see if the 32-bit drivers were any different from the 64-bit counterparts - they weren't and the same problems were still evident. My next step will be to revert to 64-bit again to reclaim my memory
  • Discovered that the MS BT stack is extensible, though documentation is so far sketchy at best. Contemplate writing an A2DP profile extension that would provide all Windows users with full A2DP support. I havnt completely disregarded this yet but it looks like it will be significant work to fully support all types of encoding, etc. This idea has been shelved pending my future experiences with the BT stack i now have working
  • Tried to use the seemingly excellent BlueSoleil BT stack 6.4.275. This doesnt support my current adapter out of the box, but using similar techniques to what i describe here, i was able to get it to install. Mixed experiences with this one - the first time after installing i managed to get the BT service to start but could not connect. Subsequently i was never able to get the service to start again - it would always freeze - and i mean FREEZE as in the computer was responsive but hung whenever i tried to shut it down or uninstall BlueSoleil. This did not give me a warm, fuzzy feeling at all. They seem to update frequently though and it does officially support Windows 7 now as well as several, older Apple BT modules so i will definitely try it again once they officially support my hardware
  • Tried to use the Broadcomm BT stack 6.3.0.200. Again, my hardware is not officially supported and this was made trickier by the fact that the installer seems to only be a stub that then downloads the components it detects as necessary. I didnt play around with this one too much and i will be revisiting it now that i have had some success
  • Tried to use the Broadcomm BT stack 6.0.1.5300. I found the full package of this version so i decided to give it a go. After tweaking the INF files i had no success in getting the installer to identify my BT module. This is a problem because if the Broadcomm package can not detect your module, it refuses to install at all, preventing further tweaking. I will likely focus on a later release of Broadcomm anyway
What worked
I ended up having success with the Toshiba BT stack 6.40.02. You can download the latest 32-bit and 64-bit versions from here. Again, the current version of the driver does not support my hardware out of the box, so use the following steps to get it to install:
  1. Extract the contents of the downloaded zip, which will result in another self-extracting executable called v64002T_20090623_x32.exe

  2. Extract the contents of this executable using a suitable program (my persontal favourite is Winrar, but 7-zip should also do it)

  3. Run the silent_install.bat batch file - this will perform a silent installation of the BT stack, so you wont see much on screen except probably a UAC confirmation (if you have it turned on) to confirm the operation. Doing this is better than running the installer normally, since if you do that, it tries to install the BT module as part of the installation. However that will fail because the INF file does not support the current hardware yet

  4. After the silent install has completed, browse to C:\Program File\Toshiba\Bluetooth Toshiba Stack\Drivers\tosrfusb and open the tosrfusb.inf file for editing

  5. Search for [Standard] to go directly to this section. You will see a bunch of entries with the following format:

    %DisplayName%=Section, HardwareID

    We need to add another entry for the BT module in our MBP. Add a new line at the top of the list that looks like this:

    %Apple.DeviceDesc%=TosrfUsb_Device, USB\VID_05AC&PID_8213

    If your Hardware ID for your BT module is different, simply subsititute it for the above. The process to find your hardware ID is outlined below.

  6. You now need to add a description of your BT module to the INF file. Go right to the bottom of the file and you will see a bunch of declarations with the following format:

    Key = "Description"

    We need to add another entry for the BT module in our MBP. Add a new line at the bottom of the list that looks like this:

    Apple.DeviceDesc = "Apple Built-in Bluetooth Module"

    You can actually make the text inside the quotes whatever you want - this is what will appear in the Device Manager for the device

  7. Save the INF file - under Windows 7, depending on your security settings you may be unable to save the file directly since this is a protected location. The easiest way around this is to either edit the file as administrator or save the file to the desktop, then move it back to the folder overwriting the old file

  8. Press the Windows key to open the start menu and type 'Bluetooth Settings' then press enter to start the Toshiba BT manager. This will trigger the Toshiba BT manager to go and discover the BT module in your MBP. With the settings added to the INF above, it should install the necessary drivers, set up the required service as well as shut down the standard MS stack for you. You may be required to restart your computer after this step.

  9. At this point the Toshiba BT stack is installed and ready to use. You can now right click the new BT icon in the system tray and pair with your BT devices


  10. I have discovered a small glitch with my Logitech Freepulse Wireless Headphones when using the Toshiba BT stack. Everytime i pair the headphones it prompts me for the password (0000). If i connect this way (ie headphones initiated the connection) i find the sound does not work at all! However if i initiate the connection from the computer, it pairs without asking for the password and the sound works flawlessly.

  11. By default stereo headphones are set to use low quality with the Toshiba BT stack. To change this, right click the heaphones icon in the Toshiba BT manager and select Detail. Change the Sound Quality setting to High Quality and click OK. Note you will have to reconnect your headphones for this setting to take effect if they are already connected

The only downside to using the Toshiba BT stack is that because this is a non Toshiba piece of hardware, the BT stack only runs for 30 days. I dont believe there is an option to purchase this stack either, unlike the BlueSoleil option. I will leave that limitation as an exercise for you to overcome. I will just say that there are options out there to overcome it.

Works On My Machine!
Please note that this should work on every single MBP 15" Unibody, since they are all the same hardware! However there is always a chance Apple will start using a different BT module in the near future. My machine identifier is MacbookPro5,4 (which can be found using the System Information tool that comes with Windows under the System Model field). The details of my BT module are as follows:

Manufacturer: Broadcom
Firmware Version: 162 (251)
Hardware ID: USB\VID_05AC&PID_8213
HCI Version: 2.1 ($4)
HCI Revision: 251 ($FB)
LMP Version: 2.1 ($4)
LMP Revision: 8610 ($21A2)
Composite Class of Device: 3670284 ($38010C)
Device Class (Major): 1 ($1)
Device Class (Minor): 3 ($3)
Service Class: 448 ($1C0)

Finding Your BT Module Hardware ID
The hardware ID is what is used inside the INF file to uniquely identify a particular configuration of hardware. To find your hardware ID, use the following steps. If it is not the same as mine above then substitute it at the appropriate points in the above steps and it should work. Please post your experiences in the comments!
  1. Go to the start menu and type "Device Manager" then hit enter to open the device manager.

  2. Browse to the Bluetooth section and expand it

  3. Double-click the Generic bluetooth device to open the properties (the name may be different if you have already installed a BT stack - eg Apple Built-in Bluetooth Module if you followed the above steps already)

  4. Go to the details tab

  5. Change the Property list to Hardware Ids

  6. The ID you are after will have the format USB\VID_xxxx&PID_yyyy

Troubleshooting
If it doesnt work, i would suggest looking at the following:
  • Uninstall any other BT stacks you have installed - this includes Widcomm, Broadcom, Toshiba and BlueSoleil. The standard MS stack will always be there but all the other packages seem to now handle it fine and perform the necessary steps to disable it as required
  • Try preventing the MS stack from detecting and installing its drivers by removing the bth.inf and bth.pnf files from C:\Windows\inf (back them up of course). This really shouldnt be necessary though and i have never had to do it with Windows 7
  • Try stopping the Bluetooth Discovery Service
  • Usual stuff like restarting, checking your device ID, etc
  • Pray to the BT gods ...
Final Words
I really, really wish MS would just include the A2DP profile in their built-in MS stack. To be honest i much prefer the built in stack over all the other implementations - it is much simpler, has better icons, integrates better into the various features of Windows 7 and seems to have a lot less services and processes needing to be run. It would be a simple DLL addition to provide the support and is something that OSX now provides out of the box since 10.5. I really cant believe in this day and age they are going to release Windows 7 without it, but this seems to be a reality that we have to work around.

Monday, August 24, 2009

Getting Around The 4 Partition Limit With Just The Windows 7 Bootdisk

In this post i talked about how i ran out of partitions when trying to create my Data partition after using the recommended Windows 7 install configuration on my MBP. Well tonight I finally decided to blow away my 64-bit RC build of Windows 7 and replace it with a 64-bit RTM build after i found out i can run it for 120 days without entering a valid key. I figure this is long enough for me to get a valid license after its released that i shouldnt have to install again. Then again, if the 64-bit RTM version doesnt fix all the driver issues im having (and i see no reason why it should) then i might roll back to the 32-bit RTM version just to see if its any better - stay tuned.

Still when it came time for me to do this i realised that i didnt have a bootable partition utility handy (TODO: i need to find out which Linux boot disk utility to use for next time). However i worked out you can force Windows 7 to install on just a single partition using only the basic and very limited parition tool that comes with the Windows 7 installer. I found the method i used amusing - it reminded me of those classic maths puzzles where you have to end up with Y litres of water using only a 3L and 5L jug.
  1. Boot into OSX - Use Boot Camp Assistant to remove the existing RC Windows 7 partition and its associated 200Mb boot partition, so that there is only the OSX parititon and its 200Mb boot parition remaining.
  2. Restart Boot Camp Assistant to resize the OSX partition right down (i used the minimum of 25Gb) and assign the rest to Windows
  3. Restart using the 64-bit RTM boot disk and go to the partition utility (Advanced)
  4. Delete the Boot Camp partition to leave the OSX boot, OSX main and unallocated space
  5. Create a new paritition in the unallocated space. Windows 7 will automatically create the 100Mb boot partition.
  6. Delete the Windows 7 boot partition so there is 100Mb unallocated space
  7. Create a new partition in the 100Mb unallocated space
  8. Delete the larger, older Windows 7 main partition
  9. Extend the 100Mb NTFS partition to whatever size you want your Windows OS & programs partition to be (i used 100Gb)
  10. Create a new partition in the remaining unallocated space (mine was 172Gb)

This left me with the desired 4 partitions:

  1. OSX boot - 200Mb
  2. OSX main - 25.9Gb
  3. Windows main - 100.1Gb
  4. Data - 171.9Gb
The windows recovery files are then placed in \Recovery on the Windows main drive

Wednesday, August 19, 2009

Windows 7, BootCamp and Trackpad Scrolling

A lot of people seem to be having issues with the trackpad driver when running Windows 7 on a Macbook Pro using BootCamp. My experience is that if you use the BootCamp 2.1 drivers the touchpad works pretty well - 2 finger scrolling, 2 finger right click - all that works great. The only issue is that 2 finger scrolling is way to fast.

What a lot of people dont seem to realise is that once the trackpad driver is setup, you can use the standard mouse control panel to change the properties of the 2 finger scrolling. It seems that the driver is incredibly basic - simply generating linear scroll-wheel events when 2 fingers are dragged up or down. By default, Windows scrolls 3 lines for each mouse-wheel 'click'. Since the 2 finger scrolling generates quite a lot of scroll-wheel events, i recommend reducing this to 1 line for each 'click'. You can do this by pressing the windows key, typing mouse and pressing enter to go into the mouse control panel. On the Scroll tab you can change the setting under the Vertical Scrolling section.



The result is a nice experience overall - a very smooth scrolling action when using 2 fingers. If you need to move more quickly up and down, page-up/page-down (Fn+Up/Down) will do that.

Tuesday, August 18, 2009

OSX / Windows 7 Multi-Boot Partition Limitation

In my new MBPU 15" that i have been writing a lot about lately, i have OSX and Windows 7 partitions so i can boot into either. After all, OSX has some nice software i still like to use. I came across an interesting issue with this setup last night though. My standard setup on a system is to have 2 partitions - one for the OS and progs and one for the data. This allows all documents, email, movies, pics, music, etc to be kept on a seperate partition. Then i 'ghost' my OS drive and refresh the image every few months once a substantial number of updates come out. This means if anything happens to my OS or i need to refresh it, it only takes me 20 minutes to be up and running again.

Unfortunately this is not possible on my MBP using the current configuration. Reason is that both OSX and Windows 7 prefer to have a seperate partition for their boot files. This link explains the advantages of such an approach. This requires a seperate partition of around 100-200Mb for each OS, meaning that i have the following partitions:

1) OSX boot
2) OSX
3) Windows 7 boot
4) Windows 7

When i tried to use my free space to create another parition for my data, using the excellent free Paritition Wizard utility (which supports Windows 7), i found i was unable. Apparently there can only be 4 primary partitions on a physical disk! As we can see, i already have 4 partitions.

It seems there are are ways to get Windows 7 to avoid creating the seperate boot drive - i need to carefully study the disadvantages of this before i make the switch. The article above points out most of these disadvantages but most of them dont really concern me. Although it may be a better way of handling the boot files, it makes no sense to have all my data on one parititon so i will likely end up canning this partition and reinstalling

Windows 7 on Macbook Pro Unibody - ACPI Support is Screwed

So Windows 7 has some great new power management features, like idle timeout screen dimming and such - see here for excellent information outlining the available power management features and how they can be used.

Unfortunately it seems again the Apple have not provided drivers to fully support the ACPI specification that allows a lot of these features to work. I suspect this is a large part of why i only get 4 hours of battery life under Windows 7 when i get around 7-8 under OSX.

You can start to get a picture of what is not supported by running the new powercfg command-line utility with the argument -energy. This runs a 60 second test to profile how the system is using power. Doing this on my MBPU 15" showed the following issues:
  • USB Suspend:USB Device not Entering Suspend - None of my USB devices are supporting being suspended, which means they are unnecessarily always on. This is probably not a huge concern but sucks considering my power profile says to suspend all USB devices when not in use
  • CPU Utilization:Processor utilization is high - When you run this test you are supposed to shut down all applications, etc to get a realistic perspective of your idle computer power usage. My results showed my idle CPU usage was fairly high (4.92%!) which will consume power. Guess what the culprit was? - yep KbdMgr.exe, the Apple BootCamp application that allows keyboard shortcuts, etc to work - this is constantly using 2% CPU! An indication that this app should be seriously profiled and optimised
  • Platform Power Management Capabilities:Adaptive Display Brightness Support - This is by far the biggest concern for me, as it means that the display cannot be automatically dimmed and controlled depending on the power profile is set. I suspect this is due to ACPI not being properly supported by the provided drivers

To confirm the suspicions with ACPI support, i turned to the excellent Notebook Hardware Control utility. This tool allows a driver to be written in C# (my language of choice!) for a specific hardware configuration (notebook). After mucking around for many, many hours i managed to work out how to dump my ACPI SDST file from the registry and decompile it into ACPI ASL (ill describe this process in another post), which is a descriptive language that shows what ACPI features are supported on my notebook. Ive yet to master what this file is exactly trying to tell me, but initial findings to seem to indicate that the required screen brightness entries (as defined in the official ACPI specification) are not available, which is why Windows is unable to control the screen brightness.

Now if i understand what i am reading correctly, i can actualy modify the ASL, recompile it and enable these features. I know they are available hardware-wise because OSX is able to dim the screen after 30 seconds. I also know Windows 7 supports this out of the box, so the only remaining step is the SDST definition being correct!

I originally thought that i would not bother with this since surely Apple will fix it when Windows 7 is released right? Hmm after seeing the amount of time it is taking them to fix their touchpad, sound, video, bluetooth, etc drivers im not so sure.

Windows 7 on Macbook Pro Unibody - Sound Driver Issue Resolved

Turns out that Apple did some strange things in the driver INF file that caused the speakers to be dampened and the headphones to be amplified, as well as forgetting to enable 1/3 speakers.

To resolve this issue, download the fixed drivers here

Thats one issue ticked off the list.

MSN Connection Issue (Error code 0x80072efd) Resolution

My brother made an interesting discovery tonight. His copy of MSN could not connect to the server and came up with the EXTREMELY generic error "Could not connect you to MSN blah blah ... Error code 0x80072efd". Googling this error is completely useless because its the kind of error that 1 million noobs encounter and post solutions like "is your firewall off" ... that kind of thing. Turns out the issue in his case was very simple - the date on the computer was set to December last year. Once this was changed to the correct date/time, MSN connected fine! We changed it back to a dodgy date just to verify that this is indeed what fixed the issue.

Seems that Live Messenger does not let you connect unless the date/time is somewhat sane, which is perfectly acceptable. What is not acceptable is the terrible error message.

Windows 7 on Macbook Pro Unibody - Driver Issues

Ill be writing a lot about this combination of OS and laptop - considering i just bought myself a nice new 15" Macbook Pro Unibody with the intention of using Windows 7 as my primary OS. Im running the RC version at the moment and its running pretty nice. Damn nice in fact - but there are a few driver issues, which is totally due to the sad state of BootCamp at the moment. Out of the box i have these issues:

- Bluetooth driver 'isntalled' but device manager reports it is still using the MS driver
- iSight driver is the same issue
- Nvidia driver did not install
- ACPI support is abissmal
- Speaker sound volume is very low
- Sound does not switch to headphones when plugged in

Ill be addressing these issues as i fix them or try to fix them. If anyone has any tips let me know

Thursday, June 25, 2009

Removing Empty Lines From Code In Visual Studio

There are plenty of source code formatters out there, but after searching for 3 seconds and not finding any free ones that were better than the in-built VS source code formatter, i came up with the following regex that will at least remove all redundant lines from my colleagues lovely source code:

Replace ^\n$ with (nothing)

To use it, bring up the Replace dialog (Ctrl+H for me, depends on the environment profile you are using), tick the box at the bottom to use regular expressions, select "entire solution" to process all files (or set to your needs), and type the above regex into the "find" box and hit "Replace All". VOILA! All redunant empty lines are gone.

Of course this is a very simple regex and does not take into account the context of the blank line, so you may still end up with single blank lines where they are not needed (inside methods for example). But its a start - if anyone has a better regex for C# that conforms to Microsoft's recommendations please post. Also post any fantastically configurable free tools that you know of.

Ideally i think the view of code should be independant from the stored format of the code. In other words, VS should give more formatting options and apply it automatically when a file is viewed, so every developer can 'view' the code the way they like, but under the hood its stored in source control in a standard format - like a model/view separation concept

Procreate Version 1.1 Released!

I actually released this two weeks ago, but im only just getting around to blogging it, so just pretend the date on this post is the 15th of June :)

The following changes have been made amongst others:
  • Added overlays, which are drawn in the scene regardless of the rendering mode - things like hydrogen bonds, atom labels, etc
  • Added ability to automatically add hydrogen atoms to the molecule in their correct position
  • Fixed the renderers so they aline double, triple, etc bonds correctly
  • Optimised the scene rendering
  • Improved the speed of the PDB importer
  • Improvements to the extension API

Try it out and let me know what you think! I have another release in the works which will add a bunch of cool new features, coming soon. If you have any requests let me know ill see if i can get it in there.

Thursday, April 16, 2009

Windows Media Player 11 Library - Apply Media Information Changes

I use WMP 11 because it does everything i want and comes with Windows - nuff said. If you use another player fair enough but dont post comments here about how other players are better, im well aware of them. Anyway i recently got myself a new 8GB SDHC card to replace my dead 4GB SD card to use in my Dopod D810. After using it for a bunch of MP3s, it became obvious very quickly that i needed to cleanup my music collection and update the meta data so they would be sorted correctly in the mobile media player. This is some useful information i found along the way and is a response to, what seems to be, a very misunderstood part of WMP and rightfully so.

Organising the Collection
WMP is actually really cool at doing this. The online metadata is fairly up-to-date and enabled me to organise my collection fairly quickly with the correct artist, album and song title information. The process i used was:

  1. Display my collection using the Additional Views -> Folder view, since although the MP3 tag may not have reflected it, my collection was logically organised into folders representing albums
  2. Browse to a folder (album) that i noticed wasnt being sorted correctly in the mobile media player
  3. Highlight all the songs, right click and select 'Find Album Info'. Select 'all songs are from the same album' if prompted. This usually yielded a fairly good search result where the correct album was in the top 3 hits. It seems to yield a much better search result than right clicking the blank album cover and selecting 'Find album info' since you are given the option to select that all songs are from the same album
  4. Manually match any unmatched songs. It appears that WMP matches based on song length more than any other piece of information. Title also appears to have some influence
  5. Click finish. Sometimes you then have to right click the blank album cover and select 'Update album info' and give it a few seconds to download the album art

Of course if you ripped the MP3s directly from a CD in WMP then usually this step is not necessary since it will be done using the CD information at the ripping stage.

Apply Media Information Changes
Doing that above gave me a very accurate set of songs. To my surprise though, the changes are not automatically applied to the files on disk, leaving the WMP database of information out of sync with the underlying files. I guess this is done for performance reasons ... although personally i think the small delay required to update ~10 files would hardly be noticed amongst the above process.

Anyway, you apply the changes to the underlying files using the Library -> Apply Media Information Changes option. This seems to be the step that gives most people a lot of hassle and i also encountered most of the problems which i was able to solve. This usually involves the progress bar not moving at all, or appearing to move but jumping back to 0 percent constantly. The following fixed the issue for me:

  1. In the options, ensure the Library -> Retrieve additional information from the Internet option is turned OFF completely (neither of the suboptions). This will stop the apply process from retrieving any meta data from the internet which can be an extremely slow operation for large music collections. In theory, if you followed the above steps each album should have the correct meta data anyway and it is unlikely to EVER change.
  2. The Player -> Connect to the internet setting, which supposedly overrides all other settings appears to have no effect when applying media changes. In other words, if you turn this OFF, it is not the same as turning off the option i mentioned in step 1. So make sure you perform step 1
  3. WMP does not apply media changes to files that are read-only. I would have expected WMP to simply make the change regardless, but this is not the case. This does mean you can use this to your advantage however, and make files readonly that you DONT want WMP to sync with its internal database. To make all music files writable, go to the root folder of your music collection and right click the folder and select properties. Then untick the 'readonly' attribute and click OK -> Apply to all subfolders.
After making these changes, the AMI option in WMP worked a treat and all files were updated with the correct information. It can still be reasonably slow for large collections (minutes) but you should clearly see it progressing at a reasonable pace now.

Hope this helps someone - working with software all day every day i was easily able to work out why WMP wasnt doing what it was supposed to. However i can see why the vast majority of people get frustrated with this function and end up turning to another player just because they cant update their media information. Its a shame because i think the library management in WMP is quite good - if they provided decent quality album art it would be even better!

Saturday, March 14, 2009

Battlefield Heroes Beta Key Scraping With WatiN

I am pretty excited about the impending release of Battlefield Heroes. Ive been a huge fan of the BF franchise since BF2 and this free-to-play game looks like it is going to be a lot of fun. I signed up for a beta key some time ago and had all but given up of getting one, until I received it the other day out of the blue. It turns out they are getting ready to roll out the game sometime soon and as such are slowly giving out keys to everyone who has signed up in the order that they signed up. So i fired up the game and was pretty excited by what i saw - not only is it fun but my wife was pretty excited by what she saw too. Now she doesnt usually get into games so i was pretty keen to get my wife involved in one of my favourite activities. So all i needed to do was get her a key - problem is that since i signed up over 100 000 people have since decided its a good thing too. Thats a long queue to wait for a beta key. Then i found out that a site called BFHVerse has 60 keys to give out. Naturally every man and his dog wants one so the problem then becomes being able to grab a key within 2 seconds of it being posted before someone else does. Then i saw a particular post that caught my eye - one of the keys was apparently 'not working' because the way it had been printed on the coupon was all screwed up:



Because of this, the general consensus in the comments of the post was that the image was too badly scrambled and there was no point trying to use it. Bingo! This badly printed coupon was a stroke of luck - it meant i might have enough time and little competition to use this beta key. After studying this for a while and using Paint.NET i was able to make out all of the digits except the last three:



This gave me an idea - ive been wanting to try out the WatiN automated web testing framework for a while and there was currently a need to use it at work. This was the perfect opportunity to try it out and write an application to automatically search through all the possible combinations and try and find the remaining digits!

I made the following assumptions which i felt were pretty sound:


  1. The first 17 digits were correct
  2. The first unknown digit had a flat left edge, leading me to conclude it was either an 'E' or 'B'
  3. The other two unknown digits were indiscernible and could be any number, or any character
  4. The characters 'I', 'O', 'S' are generally not use in keys because they can be confused with '1', '0' and '5' respectively
  5. From analysing the other beta keys, it appeared that only certain characters were actually used, so they were a good starting point

Based on these assumption, there were around 1000 combinations of possible keys. This was a feasible amount so i came up with the following quick code to use WatiN to automatically fill in the beta key registration page with the various combinations until a valid key was found:

namespace BattlefieldHeroesBetaKeyFinder
{
using System;
using System.Globalization;
using WatiN.Core;

public class Program
{
//private const string BetaKeyFormat = "16D57-47H26-E5120-43E4H";
private const string BetaKeyFormat = "16D57-47H26-E5120-43{0}";
private const string AccountName = "TestUser";
private const string AccountPassword = "Password";

private static char[] Slot1Digits = { 'E' };//{ 'B', 'D', 'E', 'F' };
private static char[] Slot2Digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'H', 'L', 'R', 'T' };
private static char[] Slot3Digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'H', 'L', 'R', 'T' };

private static int slot1Offset;
private static int slot2Offset;
private static int slot3Offset;

[STAThread]
static void Main(string[] args)
{
string betaKey = "Not yet assigned";

using (IE ie = new IE("http://beta.battlefield-heroes.com/activate"))
{
do
{
string digits = Program.GetNextDigits();

if (digits == null)
{
betaKey = "No key found";
break;
}

betaKey = String.Format(CultureInfo.InvariantCulture, Program.BetaKeyFormat, digits);
Console.Write("Trying - " + betaKey);
//Console.WriteLine();

ie.TextField(Find.ByName("key")).TypeText(betaKey);
ie.TextField(Find.ByName("sec_name")).TypeText(Program.AccountName);
ie.TextField(Find.ByName("sec_pass")).TypeText(Program.AccountPassword);
ie.TextField(Find.ByName("sec_pass_confirm")).TypeText(Program.AccountPassword);
ie.CheckBox(Find.ByName("agreement")).Checked = true;

ie.Button(Find.ByValue("Activate My Key")).Click();

if (ie.ContainsText("That key appears to be invalid."))
{
Console.WriteLine(", FAILED");
}
else if (ie.ContainsText("That key has already been activated."))
{
Console.WriteLine(", IN USE");
}
else
{
Console.WriteLine(", SUCCESS!");
break;
}
}
while (true);

Console.ReadKey(true);
}
}

private static string GetNextDigits()
{
if (slot3Offset >= Program.Slot3Digits.Length)
{
slot3Offset = 0;
slot2Offset++;
}

if (slot2Offset >= Program.Slot2Digits.Length)
{
slot2Offset = 0;
slot1Offset++;
}

if (slot1Offset >= Program.Slot1Digits.Length)
{
return null;
}

return new string(new char[] { Program.Slot1Digits[slot1Offset], Program.Slot2Digits[slot2Offset], Program.Slot3Digits[slot3Offset++] });
}
}
}


The program took about 2 seconds per attempt and after about 10 minutes of trying i found the key that worked! All this and it had only taken me about an hour to create it all. Unfortunately it turns out that the key had already been registered, but the exercise had taught me a lot. The point of this post is not really to say that the above code is awesome, more that WatiN is an extremely useful package that can be used to autofill and scrap webforms with ease. I highly recommend you check it out. Im just happy that the BF Heroes beta key administration didnt pick up my multiple attempts and ban my IP.


Oh and btw...for those curious types out there, the correct beta key is included as a comment in the above code :)

Tuesday, February 17, 2009

Procreate 1.0 Released!

Procreate Screenshot
I just released the first version of my protein visualisation program 'Procreate'.

You can head over to here and check it out. Some of the features include:



  • Highly optimised 3D rendering engine using DirectX
  • Suite of display modes including space fill, ball & stick, sticks, cartoon, wireframe, backbone and more
  • Suite of colouring modes including element, group, structure, ordinal, chain, electrostatic and more
  • Suite of post-process effects to alter the appearance of the scene such as depth of field, depth visualisation and more
  • Ability to combine display modes for individual atoms/bonds in the protein
  • Processing framework to modify the protein's structure
  • Powerful API for writing extensions
  • Completely FREE!
Ive been working on various incarnations of this program over a period of about 5 years now (on and off) so it represents a big milestone for me to finally get this program out and available for people to try. I actually finished it sometime last year but adding the finishing touches necessary to create a polished product took a lot longer than expected. The program aims to be well designed and utilise the best practises i have learnt throughout my C# career, so i hope to be able to write some good posts about the lessons learnt while writing it. It is designed to be extremely extensible by using interfaces for every area of functionality or 'decision point' as i like to call them. Custom addins will be automatically loaded and integrated when the program starts by putting the assemblies in predefined subdirectories so i hope the community will get behind it and invest some effort to develop numerous visualisations and data manipulation addins that i am having a hard time finding the time to develop myself!

Stay tuned for posts on my experiences in XNA, shaders, releasing an application, localisation, automatic updating, concurrency and numerous other topics.