Prometheus: Overview

Last time I gave a brief introduction to my understanding of the agent-oriented programming (AOP) paradigm. To me, it’s a deeply interesting perspective from which to consider the operation of a computer program: as though it were a human system composed of a number of people interacting and working towards their own desires to achieve an overall system goal. At a high level, designing such a system is akin to designing a business process and selecting humans to fill the roles.

I imagine it’s something Alan Turing would have considered inevitable. If computers could be intelligent to the extent that they were conversationally indistinguishable from humans, then surely we could slot them into our logical processes in place of such a human.

Of course, a good little software engineer shouldn’t jump right into solutions; engineering is about repeatable processes, and the traditional object-oriented processes are not entirely appropriate for the level of abstraction that AOP offers.

Prometheus is a design methodology developed specifically for agent-oriented systems. It is similar in the sequence of activities to the more traditional object-oriented methodology, providing a number of concepts represented in a number of diagrams and detailed descriptions which compose a complete design. It goes through three familiar phases of specification (essentially requirements), architectural design and detailed design, with a number of artefacts that are developed concurrently and iteratively. Many of these artefacts can be cross-checked against each other to ensure consistency along the way, and the Prometheus Design Tool helps to automate this auditing.

The overall methodology is well described in the 2004 paper The Prometheus Methodology, and represented in the diagram below, with the phases as horizontal swimlanes and the artefacts as boxes in the appropriate phase. The solid arrows show how each artefact is derived from others, and the dashed arrows represent the cross-checks you can perform between them.

Prometheus overview

A high-level overview of the Prometheus methodology.

It’s a neat little diagram, and provides a good visualisation of the way in which various artefacts are developed and feed into other artefacts and so on. As a high-level diagram it doesn’t capture a lot of the detail (which the paper goes on to explain), so for a little more precision I prefer to break the phases down into separate, more comprehensive diagrams.

I’m hoping to find some time to cover each of them in future posts, but it’s a hefty process and we’re still busy trying to fit everything together outselves. I’ll try to divide them and conquer each stage in a separate post, then combine them at the end with a practical Prometheus tutorial, with reference to some of the work that has gone into our year-long software project.

As an addendum, Prometheus was created by Lin Padgham and Michael Winikoff, researchers from RMIT University’s Agents Group, just down the road from my University of Melbourne. For the record, Melbourne also developed an AOP design methodology called ROADMAP, but it’s much more abstract and incomplete beyond the requirements phase. Padgham and Winikoff wrote a book on Prometheus called Developing Intelligent Agent Systems: A Practical Guide if you’re interested in learning more, and there are a number of papers (that say much the same thing) with a wealth of references at the end of each.

* Without diving too deep into semantics, a process is a series of activities performed to achieve an end, whereas a methodology is a combined set of principles, methods and processes; a process is a subset of a methodology. Prometheus provides a set of tools as well as a way to go about using them, and hence is considered a methodology. This kind of completeness is essential for something so fundamental to provide real value.

Farewell Semester 7

Agile wall

Smells like progress!

Today marks the end of my seventh semester of university, having finished my last exam. Hooray! What happened?

First of all, exams went very well! Not much more to say there.

‘Twas a good semester of subjects, with some fundamental theory but unfortunately very little coding. Linear Algebra was surprisingly engaging, and Software Requirements Analysis and IT Project Management were about what you’d expect: valuable but fairly dry. Looking forward to some dirtier hands next semester.

Our year-long software project has been pretty exciting! Working with the Nossal Institute, we’re developing an agent-oriented medical platform with applications for diagnosis, treatment and drug dosage calculations. After a lengthy requirements engineering period we’re now digging into the code, which is almost all Prolog (I know!). Watch out for us at Endeavour, and in future posts right here! I’ve been learning a lot about agent-oriented software engineering, and it’s more than a little fascinating. I look forward to exploring it further.

It was also my first semester of tutoring first/second year students which was an experience. It really provides a fascinating perspective on the education process. Kids these days… Actually it was fantastic, I had two great classes full of (mostly) enthusiastic students that I tried to encourage as much as possible. It’s very rewarding work. I probably won’t tackle it next semester however due to time constraints, due in large part to…

MUtopia! MUtopia is a university research program I’ve been working on as project manager and software engineer for the past few months, and it appears to have a very bright future lined up. In a sentence, it’s a sustainable urban design, simulation and 3D visualisation web application. It can be used to model planned urban developments, run cutting-edge research simulations and analyse the outputs under custom scenarios to perform cost-benefit analyses. Check out the brochure in the link for some more details.

This is most exciting because come the end of July, we’ll have doubled our development team from two to four, and I’m going to be running it as an Agile project. Yes, that means we’ll have our own Agile wall! I’m looking forward to the challenge of managing a real project with the freedom to experiment. We’ll be having retrospectives every week, so hopefully I’ll have some reflection to post up here.

Whew.

So now I have about a month of holidays, but I won’t be getting a moment’s rest. Not only is MUtopia being kicked up to roughly full-time work over the break, but I’ve got a bundle of side projects lined up to attack in any time I have left over. How people manage to be bored in this day and age is beyond me. I’ll try to keep this blog updated with what I’m up to as I go. I know I keep promising that, but hey, n’th time lucky?

Excitement!

Photo courtesy of http://www.gerrykirk.net/options-for-team-task-board-when-one-team-member-remote/

Hello Again, World!

Done! Exams are done! University is done! It’s all over! I’m FREE!

Now I can finally get to work. There’s so much to do! I suspect I’ll be a little bit giddy around here for a week or so, since I’ve been looking forward to fixing this place up for some time now. So welcome everyone, and if it looks like a bit of a ghost town, look again in a week. Below is a list of the things I’ve got planned for the next few months:

  • Write some more posts about things!
  • Fix outstanding pim2smsbr bugs (especially the character conversion errors/warnings)
  • Move piemaster.net from WordPress to Drupal, and go nuts with customisation
  • Particularly get a support forum integrated with the site. WordPress kinda sucks at this. The default Drupal forum is a bit ugly, but Drupal is a programmer’s framework. It gets the job done right.
  • Clean up all the site content
  • Release the new version of Forgbook that my team and I developed as a university project (then extend it to the moon)
  • Write up some more detailed information about the other projects I have lined up
  • Actually start on some of those projects!
  • Revisit Jario and clean it up a bit (related to one such unannounced project)
  • Just mess around and experiment with things!

My future is currently undecided. Whatever I choose to do I have a few months off now to play around with proper, focused software development, and after that I will either find my way back to uni to take a Masters of Software Engineering, or take a bit of a break and keep exploring the wonderful world of software.

I kind of want to build a startup out of one of these ideas, just for the experience. I don’t expect to become a millionaire overnight, or even a thousandaire over a year, but developers live to have their work seen and used by others, and for that to happen that work has to be a tight, focused application that solves a problem and solves it well. I know I can do that given enough time, and I can only imagine what the journey will bring with it.

First however I will get out of bed and have a shower, then diagnose which part of my PC exploded (literally) a couple of weeks ago. Thank you all for your support, whether or not it was deliberate, but even just having people view the site definitely keeps me going. There’s so much to do, and I’m going to make it happen. I hope you can get some value out of what is to come. Cheers, and Happy World Toilet Day!

Retro-introducing: Shadow Quest

Shadow Quest iconA couple of years ago, I took a subject at uni called Object-Oriented Software Development (433-294). Although I had already introduced myself to OOP, this was the best subject I’d ever taken, because the OOP paradigm was my favourite thing about programming, and it’s always worthwhile learning important things formally. On top of this, we had a fantastic lecturer (Shanika Karunasekera) with a bold plan to inject some life into the otherwise tiresome semester project – instead of building a generic banking application or similar, we would be writing a game.

This was, of course, right up my alley, and ultimately the result was Shadow Quest. You can read more about it on the project page, but essentially we were given a set of specific requirements to build an RPG using the Slick game library, and that would be our assessment (though various stages of planning and development). Brilliant. Everyone loved it.

Of course some students found it less challenging than others, and for them the challenge was set to create the best game extension by the end of the semester. So long as the basic requirements were fulfilled, we could add anything we wanted, and the author of the best game would win a book voucher.

I leapt at this opportunity, and set about implementing a bunch of features from Diablo II, my favourite RPG (despite it being a hack’n'slash). I added player experience, levelling, stats, inventory and equipment, magic items, random item drops, gold drops, buying potions, and the thing I was most proud of was my randomly generated dungeon: five levels of caves procedurally generated by a cellular automaton. It took a lot of work, but worked a treat, and I felt like I was in with a chance for best game.

Unfortunately, come judgement day, there was some very impressive competition, including one game which blew all the competition away in terms of features and polish. A giant map, animations, weather, visual effects, magic spells, archery, horse-riding, a town with indoors in the buildings, a bunch of NPCs, and so on. It was the deserving winner, but I still reckon it was the work of more than one person.

Anyway, I dug out the code for my version of Shadow Quest the other day, and decided to post it up here for posterity, with a few tweaks for efficiency. Again, you can check out the project page, the source code on Bitbucket (don’t judge me, it’s old!), or more importantly play it in your browser or download the Web Start. Enjoy!

Back In The Saddle

With semester one of university now completed (after my final exam yesterday), I am once again free to kick on with development of the good ship Piemaster and all that sail in her. There’s so very much work to do and I’ve been looking forward to it for quite some time now, having played around with a few new technologies during semester.

One of the primary objectives I hope to complete is to start posting more regularly about interesting new things as I come across them, and retrospectives of my experiences as I have them. I will try even harder now to make time for these, despite having said that repeatedly before.

I’ve also started working on a new game (a simple Asteroids clone at first, then something more sophisticated) taking advantage of a beautiful new framework I discovered, which I will write more about later. I’m putting development of my productivity-type applications on hold for the holidays and diving headlong into game development, for a few reasons: it was (indirectly) the topic of a subject at uni last semester; it’s much easier to get feedback from myself and others; it can more easily be defined as “finished”; and I just really enjoy creating games, whether in my head, on paper or with a computer. There should be plenty to write about along the way.

So that’s enough for now, and I’ll expand on a few of these points in the near future. Welcome back, and I hope to be able to provide a few things of real value within the next 3 weeks.