30 January 2008

Useful Free Mac Applications

I'm tight, if there is a free tool to do something I will find it. It is a bit harder work to find those applications when you use a Mac, but I have over my time using my Macbook Pro found plenty of stuff to help me get full use out of my computer. So I thought I would share them:
  • Adium - Instant messaging with the GAIM base.
  • AppFresh - Make sure that installed programs are up to date.
  • Audacity - Edit audio files (I used it to make iPhone ringtones).
  • Bean - Simple and easy to use document editing.
  • Chamonix - A CHM reader for OSX.
  • Cocopad - A simple scribbler application.
  • CoRD - Connect to other computers using the MS remote desktop protocol.
  • Docker - Lots of settings for the dock on Leopard.
  • Eclipse - The ubiquitous platform for IDEs.
  • Firefox - Because I love the plug-ins. I'll doa post about them another time to geta more integrated Firefox (could be moot with v3.0).
  • Google Earth - Because i wanted to see old maps wrapped around the globe.
  • Google Notifier - Keep an eye on your Google inbox.
  • Gridwars - Free game allegedly like Geometry Wars.
  • Handbrake - Rip movies to your desired format.
  • Inkscape - Vector drawing.
  • MacPorts - Package manager for thousands of open-source programs. I have mentioned this before.
  • MacTheRipper - DVD ripping.
  • Max - CD ripping software.
  • NeoOffice - OpenOffice integrated Aqua style.
  • Onyx - More settings for your Mac!
  • Perian - Loads of codecs for OSX.
  • Pixen - Simple art package.
  • Porticus - Great Cocoa front-end for MacPorts.
  • Senuti - Get music from your iPod back to your computer.
  • SvnX - Graphical front-end for Subversion.
  • scplugin - TortoiseSVN style integration for the Mac.
  • TinkerTool - More settings for the Mac.
  • VLC - Great open-source video player.
I tend to prefer open-source to free in most instances, and MacPorts (with Porticus) gives so much that it deserves more than a one line description... oh well ;)

Interesting stuff - GPU general programming

An interesting library I stumbled across on the Internet the other day enables the user to accelerate general code by using your graphics hardware. An open-source library libsh provides a high level metaprogramming language in C++ for programming GPUs.

Unfortunately, libsh is no longer actively developed because the developers behind it have created a commercial business around it (those lucky guys have found a way to make programming pay!)

It would be nice to utilise the processing power of the GPU, essentially treating the hardware like another (more specialised) processing core. After all graphics cards have more transistors than the average CPU... I think I mentioned something like this in my multithreading post many a moon ago. But I suppose also it ties into virtualisation of the procesing hardware available on the computer which I even posted about before.

A great website for this type of stuff is General-Purpose Computation Using Graphics Hardware which does exactly what it says on the tin. There are active forums and tons of news and information.

Surprisingly there is not a huge amount of general purpose stuff out there freely available but as GPUs become more powerful and more programmable I am sure that will change. Personally I think the future would be to use a core of these multi-core processors to do the graphics, even if it is slightly specialised for stream processing or something. That would certainly negate the need for faster graphics buses as it would run on the processor (although other buses would still need to progress). But yet again I have digressed....

21 January 2008

C++ Static Code Analysis

I've mentioned before about the usefulness of PC-Lint when doing C++ development on Windows. It closes off a whole class of bugs that can live in a codebase and raises teh minimum standard of development.

I came across a really decent article you can read here. They integrated it into their automated build process and bootstrapped Msbuild to use it.

Also, you can't forget that there are some good tools that can make it easier to use. There is LintProject to run Lint across an entire project, and also there is the Visual Lint which is a nice integration into Visual Studio.

It would be nice however if somehow it was possible to integrate it completely with the cl.exe commandline.

14 January 2008

Starting A New Development Project

With all the tools out there to make developer's lives easier, what would I do when starting a new project. When starting a new development project the initial decisions you make reflect throughout the life of the codebase because once the ship is in sail it is hard to change direction without real willingness.

There are really two areas that this would cover, first the tools you use, and then how you use those tools.

Lets say that you are developing on Windows. You would use Visual Studio instinctively, unfortunately the build system sucks in the worst way when it comes to project dependencies and command-line operations. You could use something like CMake or bjam or any one of the other build systems available. The problem then is that the features always lag behind what is available within the IDE.

But I am going off on a tangent. I am deciding on a development environment for a new project (C++). Right then what could we use that is more or less free...
* Source control : Subversion
The main reason to use this is that there are so many tools available (most specifically TortoiseSVN).
* Bug tracking : Trac
I would rather a more powerful bug tracking system (I am a big fan of Bugzilla) but the tight integration with Subversion is a major plus point. Plus you get a wiki for free, and with the plug-ins you can have continuous integration and a myriad of other things integrated in one Intranet website.
* Compiler : Visual Studio
This means you can support 32 and 64-bit (which MinGW sadly lacks at the moment) targets.
* Continuous Integration : Cruise Control.NET
Regular builds make sure that you haven't gone too far down the wrong path. It can also be used to do other processes like testing or analysis. You can integrate it with Trac as well here http://syntactic.org/2007/7/23/cruisecontrol-net-trac-integration or here https://oss.werkbold.de/trac-cc/.
* Wiki : Trac
Developer documentation should be quick and easy to edit and should be encourages. It's good news it is also part of Trac.
* Unit testing : Boost
Using Boost in a C++ project makes perfect sense, so using their unit testing framework would therefore be a good idea. It can be difficult to drive but other C++ unit testing frameworks are as much a pain so rolling your own could also be an idea.
* Batch testing : Python
Python scripting would be a good idea for doing actual system testing. What would be even better is the ability to run the program due to Python being embedded in the program to drive it. Get the output well formed and I think it can be integrated with Trac as well.

When you start:
* All commits must have a comment and preferably a bug number so you can always work out the reasoning behind all edits. Being able to work out why is always useful to a developer.
* Compile with the warning levels on the maximum available level and have warnings as errors.
* Try to use some static analysis like Lint to improve the baseline coe quality.

By building in high standards in the beginning you don't have to go through laborious and error-prone tasks later in the day retrofitting some standard process. Also, I like the idea of having Trac as a port of call or documentation, source code, and analysis means as a developer you can't complain any of the process is too difficult.

I've probably left out loads but its a start at least...

DisplayLink lots of links

Working for a new company is weird. But it is weirder when the week you join the company is getting tons of CES coverage from Las Vegas. It seems positive on the whole which is great stuff...

Stacks of links:
Link 1
Link 2
Link 3
Link 4
Link 5
Link 6
Link 7

I've been using two connected devices on a Windows PC with Vista and it has been working great for development, I really can't notice much difference from connecting to a VGA connector. At least it makes it easier for people to actually work out the kind of company I am working for ;)

08 January 2008

Visual Studio 2008 Feature Pack Beta

Microsoft have just released the beta of the Visual Studio 2008 "Feature Pack" which is an update for the C++ portion of the environment. The main features are substantial updates to MFC and TR1 library support.

The VC++ 2008 MFC libraries have been extended to support creation of applications that have:
* Office Ribbon style interface
* Office 2007, Office 2003 and Office XP look and feel
* Modern Visual Studio-style docking toolbars and panes
* Fully customizable toolbars and menus
* A rich set of advanced GUI controls
* Advanced MDI tabs and groups
* And much more!

This feature pack also includes an implementation of TR1. Portions of TR1 are scheduled for adoption in the upcoming C++0x standard as the first major addition to the ISO 2003 standard C++ library. Our implementation includes a number of important features such as:
* Smart pointers
* Regular expression parsing
* New containers (tuple, array, unordered set, etc)
* Sophisticated random number generators
* Polymorphic function wrappers
* Type traits
* And more!

Note: This feature pack does not include C99 compatibility or support for special math functions.


Certainly for anyone maintaining MFC based products it is a free upgrade tot he look and feel of the program with tons of advantages.

You can download it here. Unfortunately it tries to force you to download Silverlight which I have been avoiding like the plague but the attempts to get you to install it from Microsoft are getting more aggressive.

07 January 2008

New Year - New Start

Part of the reason I have been so quiet recently isn't just getting old and turning 30, or even the Norovirus I managed to catch in time to blow the bowels out of Christmas. The main reason is that I had my head down before starting a new job.

Today was my first day at Displaylink which is a rapidly expanding display technology company in Cambridge who are good enough to host the ACCU Meetings.

Hopefully I can now get back to a normal blogging service now all of the upheaval should be coming to an end. I had a good seven and a bit years working on the same codebase and hopefully have contributed some decent things to those companies. It was always a shame to say goodbye to NC Graphics when PTC took over, but it also helped me to decide to try something new.

Now I can't see it as a conflict of interest I should do some CAM blogging although it would never be as good as Julian Todd's and I would be approaching it from a higher level perspective.