articles tagged with project

VideoSnap

no comments yet, post one now

I’ve just released my first attempt at an Objective-C project, VideoSnap. It’s a simple OSX command line tool for recording video and audio from any attached QuickTime capture device.

VideoSnap was inspired by ImageSnap from @rharder, and I started working on it after finding problems with the older (carbon based) wacaw command (which no longer works with some of the latest Mac/OSX hardware). I hope to use VideoSnap in a new version of lolcommits, which i’m working on.

With VideoSnap you can specify which device to capture from, the duration, size/quality, a delay period (before capturing starts) and optionally turn off audio. The only required argument is a file path. By default VideoSnap will capture 6 seconds of video and audio from the default capture device in H.264(SD480)/AAC encoding to ‘movie.mov’. You can also use VideoSnap to list attached QuickTime capture devices by name.

VideoSnap is coded with Objective-C and uses the Cocoa and QTKit frameworks. It has been an interesting project so far and a great introduction to both Objective-C and Xcode. If you happen to give it a try, please let me know of any issues.

September 08, 2013 14:32 by

FAQtory update

no comments yet, post one now

Its been a while since I mentioned anything about the FAQtory app. Rest assured that, along with Bugle it’s been keeping me busy in my spare time!

To re-cap quickly, the FAQtory (pronounced Factory) is a simplified stackoverflow-like question and answer app. It allows you to Ask and Answer questions on any topic you like. The app is entirely content-focused and deliberately simple. A simple user voting mechanism ensures the most popular questions and most correct answers filter to the top.

Looking at the logs, it was last August when I kicked off the very first commit. After almost a year of on-again, off-again work and long periods of inactivity, last week finally saw it launch! In its current form the FAQtory is deployed for a single account, (pmfaqtory.com) – you can take a look here. Over time PMfaqtory intend to use FAQtory to build a resource of project management questions and answers.

This is a big milestone for me and with all features locked down for launch, I can concentrate on preparing for a general release. This will involve adding an account model, pricing options and payment gateway integration. I’ll also be moving the app to a new server stack and cloud based host.

Over the coming weeks I hope to talk more about some the design and technology decisions I have made so far. For a bit of fun, here is a replay of the Git log using the latest Gource visualisation engine (now with added ‘Bloom’ effect!)

music is 'Penguin' by the Books

Gource is now available on Mac Ports which is a much easier install than it used to be (again, compiling from source stills give errors on FTGL)

Paging Keys

no comments yet, post one now

Some time ago I wrote a javascript class to implement keyboard short-cuts for paging through listings one item at a time (and across paginated pages). It was inspired by the navigation at FFFFOUND! and explained nicely by Ryan Singer of 37Signals.

Some time ago Ryan posted a link to my script on the 37Signals blog, now with over 130 watchers on github a creeping sense of responsibility has settled in. So the latest revision now has both jQuery and Prototype support and a handier configuration object, so you can further customise how your page and CSS work with the script.

var config = {
  nodeSelector:        '.hentry h2 a.entry-title',  // used to select each item on the page and place in the map (must be a link)
  prevPageSelector:    '.prev_page',                // link on this element should always jump to prev page a.prev_page (must be a link)
  nextPageSelector:    '.next_page',                // link on this element should always jump to next page a.next_page (must be a link)
  pagingNavId:         'paging-nav',                // dom id of the floating page navigation element
  keyNext:             'j',                         // hot keys used 
  keyPrev:             'k',
  keyNextPage:         'h',
  keyPrevPage:         'l',
  keyRefresh:          'r',
  additionalBodyClass: 'paging-keys',               // this class is assigned to the page body on load
  bottomAnchor:        'bottom'                     // the name of the anchor (without #) at end of page, e.g. set on last post on the page
};

I’m using the script on this site (see the overlay on the top right) and you can try it out by pressing j/k to navigate through the articles. Some things worth mentioning about the code;

  • It tries to closely follow the ’7 rules of unobtrusive javascript":http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/
  • By default (and in the demo) it hooks to items in the HTML that formated with in the hATOM microformat
  • It also latches onto pagination links generated from the popular will_paginate gem
  • It makes use of Hotkey.js
  • Eventually this script will live inside many of the default templates in Bugle
November 18, 2009 11:14 by

The Un-agile Prince

2 comments

Heard of PRojects IN Controlled Environments aka. Prince ? If you’re in the UK you’ve probably seen it, asked for on job descriptions,
listed in expense reports and generally talked up among those in the project management industry. Outside of Europe Prince2 holds little clout. Most people have never heard of it, (including Mr. Joel on Software)

Prince2 is essentially a project management framework, that claims it can be applied to (or modified to fit) any project. It is great theory – but that’s pretty much all it is. In reality it’s rarely the right methodology to choose for a software project.

The problem is some large (often bureaucratic) companies place a strong emphasis on having a Prince2 qualification, even in the software industry. Year on year, it seems to make a regular appearance on training expense reports.

To make things worse, whatever good intentions Prince2 had to begin with, have faded away. What’s left now is a money making training industry (with loyal repeat customers). Having to re-take the same training and sit the exam every year or so, just to keep the accreditation. Speaking to those who have taken the course, it doesn’t seem to offer anything more than ‘how to pass the exam’ – and is scant on the underlying principles of project management using the framework (including how you might want to tailor it).

Simply put, Prince2 is too rigid to fit with the complexity involved in managing software projects, especially those with small teams. The amount of work you would have to do, moulding Prince2 into a more agile solution, would offset any benefit in using the framework.

If you’re still not convinced, I’d suggest have a good read through ‘Why Software Projects Fail’ , ‘Getting Real’ and ‘The Agile Manifesto’

Heads up, I know which one I prefer in the Agile Manifesto vs. Prince2 debate.

Basecamp > ActiveCollab Importer

no comments yet, post one now

For some time now I have been trying out ActiveCollab, a free project management tool, to see if it could be a decent competitor to Basecamp

As far as I know, ActiveCollab started out as a free alternative to (and almost straight copy of) Basecamp – It is open source, written in PHP, and version 0.7 was released just a few weeks ago. After installing and setting up an example project I really needed to see how the thing would run with some real data, y’know some real life stuff.

After playing around with the (very useful) Basecamp API I had created a little Ruby class that allowed me to import projects, users, messages, comments and categories into ActiveCollab from Basecamp.

Run from the command line, the class outputs SQL (to the screen or a file) – which you can run against your ActiveCollab database after a default install. Read on if you’re interested in how it works.

First, some information about the class;

  • Start by installing a fresh copy of ActiveCollab 0.7, run through the installer, but don’t create any projects just yet
  • View/Download my Ruby class from here (usage instructions described at the bottom)
  • The script only generates SQL for importing Projects, Users, Messages, Comments and Categories (milestones, tasks etc. arent included)
  • Since Categories don’t exist in ActiveCollab, Messages are organised by category using single Tags
  • The user specified in the connection to the Basecamp domain is automatically assigned as an ‘administrator’ in ActiveCollab
  • ALL USERS imported are automatically given the same password ‘123’ – since the Basecamp API does not expose raw user passwords for use
  • To run, you’ll need Ruby installed, with the MySQL and RedCloth gems – and the basecamp.rb wrapper should be sitting along-side this class.

Second, some assumptions and configuration;

  • No dates are extracted for messages/comments (to just fill the database with info, I didn’t bother looking at :posted-on)
  • By default the prefix ‘ac_’ is assumed for all existing ActiveCollab tables (this can be changed on the class constant CollabTablePrefix)
  • By default, the script assumes all imported data will be assigned to the default ‘Company’ that is created after installing ActiveCollab
  • By default ‘TRUNCATE’ statements are generated for all affected tables, (clearing the before INSERTS) this can be switched off
  • By default the class is configured to export all it can (in the generate_sql function) – however this can be tailored to generate SQL for different ActiveCollab tables in isolation.

Much more could be done with this, but it was enough for my evaluation purposes. There has been some talk (for some time) in the ActiveCollab camp for something like this script to be built-in to their next release.

After all this, I have to say I’m sticking with Basecamp, it just feels better – better UI, somehow more responsive, faster and it continues to make project management, more well, manageable. From what I can see, ActiveCollab is still in its infancy and things like their database structure and code base change frequently – so this class may not be of much use in the future.

← (k) prev | next (j) →