I’ve recently had to tear myself away from the compiler and do some software project management, in a rather different fashion than has been seen lately round these parts. I took the decision to jump in, lock stock and barrel, to a cross between XP and Scrum. There are too many flavours of Agile around to actually choose one and as it’s basically common sense, it makes even more sense to follow one’s nose in these things.
I’ve seen enough projects turn into train wrecks to know what not to do but what *to* do? The project is a small, three person team, short timescale web application development to allow teaching staff to upload lecture videos for QuickTime streaming. The process is manual at the moment, so we’ve been tasked to automate it and we have an intern to help us. The application is also sandwiched between two larger frameworks, the streaming server upon which it depends for the streaming functionality and the wider repository initiatives that are going on, so we need to be aware of the wider landscape when designing the application. The repository stuff was fairly easy to deal with. We decided early on to produce a Dublin Core metadata file for each uploaded video, which would provide an extension point for ingesting the streaming content into, for example, a Fedora repository at a later stage. (more…)
If you’re in the UK, grab a coffee and settle down for the best hour and twenty minutes you’ll spend in front of the telly. Last night the BBC showed Micro Men, a potted history of the Sinclair/Acorn battle for supremacy. It’s superb! I learned to program assembly on a BBC micro and for all you young whippersnappers, the chip inside your iPhone, the ARM, was created by Acorn way back in the early 1980s. Brilliant programme!
See it on iPlayer here.
I’ve knocked up some Spring web applications that show how to use basic functionality in Spring. Each one is contained in a git branch and has just the right amount of maven clutter to make it work. The functionality in each branch so far is:
- master : basic Spring web application with a simple JSP view and one that shows how to use the Model
- with-logging : master plus log4j logging in the controller
- with-localisation : master plus localisation via the URL, e.g. /en/, /gd/. English (UK) and Scottish Gaelic
- file-upload : master plus how to handle file upload in a view and the controller
You can get the source from my github repo.
Download from sourceforge or github (more…)
It happens all the time. You sit there with a cup of coffee, daydreaming about all the projects you want to do. Then the coffee runs out and the ideas pile up. Eventually you get round to actually choosing one to implement. You do some light research and before you know it, you’re confronted with a huge pile of technology skills that you either don’t have or have become rusty over time. So you read some more and procrastinate some more. You make some more coffee and go think. And so the cycle repeats.
This is what I was confronted with when I started Guanxi. Shibboleth? Wot’s that? SAML? eh? Digital signatures, XML encryption/decryption, PKIX, the list was endless. Eventually I just sat down, stopped going to meetings about talking about things and started coding. The more I coded the more I learnt and the more I learnt the deeper I could shine a light into unknown areas. Big problems crumbled into collections of smaller problems I’d already solved. I started to read APIs instead of tutorials and before I knew it, I’d written a SAML Service Provider and Identity Provider.
Well, it turns out I was exposing myself to the Zeigarnik Effect, which basically states that once you take the first step, the rest will follow.
I follow a fairly predictable pattern when learning a new programming paradigm. The latest is iOS. I start with books and tutorials, lots of them. I read and type code and endlessly debug it to work out why it won’t work. Eventually I learn the programming patterns. I read less books and start to read the API instead. Eventually it becomes second nature to bolt the boiler plate stuff together and I start to get creative in the code department. I start to form opinions I can defend. It’s only after that process has completed I can claim to have become an iOS developer.
So the smell of freshly ground coffee and the soft hum of the machine should remind you to just get started and get coding.
I’ve been working on CBLocation to get OS grid references from iPhone latitude/longitude and all the unit tests were working fine and importing the static library into a test app worked fine both on the simulator and the phone. However, when I ran the app independently on the phone it immediately crashed. Luckily, there’s a way to look at what happened, although it’s not very pretty.
First you need the crash logs from the phone. Plug it into the machine, fire up iTunes and do a sync and I found the crash logs in:
~/Library/Logs/CrashReporter/MobileDevice/Alistair's iPhone
with a name along the lines of:
CBLocationTest_2011-02-08-221002_Alistairs-iPhone.crash
The crash log is pretty useless without the dSYM file from the build, so what I did was clear out the crash logs directory, then run the app on the phone to get it to crash, then sync it and retrieve the single crash file. I then copied the crash file and the dSYM file:
CBLocationTest.app.dSYM
to a separate crash directory I made. The next piece of the jigsaw is to locate symbolicatecrash. Mine was in:
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework
/Versions/A/Resources/symbolicatecrash (more...)
I’ve started working on a spare time app for the iPhone that lets you find out about the geology in the vicinity of the device. The first version will just tell you what sort of rock you’re standing on. I’m asked this question quite a lot when I’m guiding in the mountains so I thought it would be a fun learning exercise for iOS development and to get an app in the App Store.
The first thing I needed to do is somehow convert the Core Location latitude/longitude to OS Grid coordinates. This is a horrendous job, with horrendous maths but luckily I stumbled on Chris Veness’s javascript pages, which do just that. Chris has kindly open sourced the code so I took the liberty of porting it to Objective-C. It’s now available under the MPL 1.1 license on my GitHub repo:
CBLocation
The current version converts latitude/longitude to OS grid coordinates but I’m sure I’ll port more of Chris’s code as and when I need it, as well as write some additional functionality.
A while ago, I migrated Guanxi to GitHub but for various reasons I haven’t been able to make a release, so I’ve hedged my bets and kept the CVS repo going on Sourceforge at the same time, planning to make a decision when the time came to make a release. Well, the next release of the SP and IdP is imminent and it looks like my decision has been made much easier by Sourceforge themselves. After the recent hack, they’ve shut down CVS access and reset all passwords but worryingly, they’re also phasing out CVS:
“We are also considering the end-of-life of the CVS service and hope to have user support in migrating CVS users to Subversion in coming months”
I’ve looked at Subversion for Guanxi before but it doesn’t support modules, which allow me to host all the Guanxi modules in one CVS repository (SP::Engine, SP::Guard, IdP etc). That’s why I decided to set up a Guanxi organisation on GitHub. I’ve also migrated the localhost tutorial to my own site, which I’ll make live fairly soon, once I’ve migrated the rest of the wiki content.
So it looks like I’ll be moving Guanxi to GitHub permanently and prolly just use Sourceforge for official release downloads.