Wednesday 15 December 2010

Google Web Toolkit Introduction Tutorial

Working through the GWT Introduction Tutorial using Eclipse to write a simple 'StockWatcher' AJAX application, which includes (1) Creating a GWT Project; (2) Design the Application; (3) Building the User Interface; (4) Managing Events on the Client; (5) Coding Functionality on the Client; (6) Debugging the GWT Application; (7) Applying style; and (8) Compiling the GWT Application.

Monday 13 December 2010

Installing Google Web Toolkit

Setting up Google Web Toolkit (GWT) on my laptop today. Just installed Apache Ant (including setting up environment variables etc) and the GWT SDK, set Google Chrome as my default browser, and installed the Google plugin for Eclipse.

Saturday 13 November 2010

Grid Computing

Need to add examples and need to work on motivating the reader to read my thesis! Grid Computing was suggested, i.e. the sharing, selection and aggregation of distributed and ubiquitous resources and services. As an example: universities making available their idle processors (?) for access by other universities.

Passed my viva

Huge relief. Got a month or so's worth of changes/additions/removals but passed and very nearly almost there! alhamdulillah.

Tuesday 2 November 2010

Muslim traveller phone app ideas

Seemed to have a brainstorm moment with some friends last Saturday when stopping for a rest in the forest during our day walk in the countryside. Came up with ideas for two phone apps that could come handy for Muslim travellers, as follows: (1) "Am I Musaafir": Enter your starting co-ordinates (from where you set off on your journey) and then wherever you are, hit the button and it tells you if you are a 'musaafir' ('traveller' according to the technical, legalistic meaning of the word) or not. Options for the different madhaa'ib (schools of thought) would be available. (2) "Let's do Jama'at": If you are driving along the motorway and are stopping at the next service station for prayer, geotag it and anyone following the same route or at the impending service station can pull over for a(n increased) Jama'at (congregation). Like a virtual adhaan of sorts. Not sure if anything like this exists already? But still very far from being able to produce something like this. Only just started going through an Android development guide book!

Monday 1 November 2010

Viva preparation advice

Six points of advice from (Dr) Sarah Junaid passed on (summarised) to me by Soumaya:
  1. Read up throughly all the papers written by examiners that are relavant to your thesis;
  2. Read up thoroughly the 5-6 papers that you quote most, and if you have time the other papers that are important but do not read them so thoroughly;
  3. Read up on the basics;
  4. Read up on the difficult concepts - make a plan of all the concepts that you need to know about;
  5. Prepare a 10 min intro about why your research is important, what is the big picture;
  6. Put notes in your thesis where you know there are issues so that you IF they bring it up you can show them that you are aware about them.

Monday 25 October 2010

Java (High Level Concurrency) tutorial

Just worked through the last part of the online Java Concurrency tutorial. Understood the java.util.concurrent.locks package (i.e. Lock, Reentrant etc classes including trylock(), unlock() etc methods) and java.util.concurrent.atomic package (i.e. AtomicInteger etc classes including incrementAndGet(), decrementAndGet() etc methods). Didn't quite get the stuff about Executors and Thread Pools! Also, couldn't do the Questions at the end of the tutorial so there's a clear sign I need more practice!!

Saturday 23 October 2010

Java Concurrency (Synchronization, Liveness, Guarded Blocks) tutorial

Just continued with the second third of the online Java Concurrency tutorial playing in particular with the 'synchronized' keyword and the wait()/notify() methods of the Object class.

Friday 22 October 2010

Java Concurrency (Processes and Threads) tutorial

Just worked through the first two parts of the online Java Concurrency Tutorial ('Processes and Threads', 'Thread Objects'). Learnt about the Thread class versus the Runnable interface (including the run()/start() methods) as well as the sleep(), interrupt(), join() methods and the InterruptedException class.

Job found...

... alhamdulillah! Got a job with Kickstart Digital. Set to start early January insha-Allah. Lots to learn!

Wednesday 20 October 2010

Job hunting

Spent a few weeks researching a few companies (Reuters, Autonomy and Accenture notably) and realised it was just taking too long to research companies, apply for a job etc so stuck my CV up last Monday afternoon and I've had back to back calls from recruitment agencies. I've had a few tests/interviews already (with Corefiling, Gloucester Research, Kickstart Digital, Civil Service Technology in Business Fast Stream, Metaswitch, OpenSymmetry) and I'm realising how poor my computing/programming industry knowledge is! If I don't get something by mid next week I'm going to take a time-out for a month or two and get my computing/programming knowledge/abilities up to scratch insha-Allah.

Thursday 7 October 2010

Governmental uses of technology

eDemocracy - e.g. the websites run by (TheyWorkForYou, FixMyStreet etc).

Opening up government data - e.g.

Digital data storage/preservation.

(Note: Post still in progress.)

Tuesday 5 October 2010

Insight Onsite Tessella Placement write-up

As part of the agreement for participation in the Insight Onsite programme just wrote a short case study about my experience of the placement to go up on Imperial College Careers Service's website, as follows:
The Insight Onsite placement for me was an opportunity to brush up on my software development skills knowing I wanted to move into a software engineering role following completion of my PhD. Moreover, almost four years on from my previous industrial work placement it was an opportunity to get some fresh experience down on my CV and to talk about at forthcoming job interviews. My work placement was with Tessella Plc, an international technology and consultancy firm specialising in R&D. The placement was conducted four days a week over a period of five weeks, allowing me one day a week to continue with PhD commitments. I was delegated a well-defined self-contained assignment as part of a larger project (The Mantid Project) based at Rutherford Appleton Laboratory in Didcot, Oxfordshire aimed at providing a platform which supports high-performance computing on neutron and muon data. The particular assignment delegated to me involved building a central repository system (client- and server- side) by means of HTML, Python, Python Server Pages, MySQL, JavaScript and Subversion (revision control system) for scientists to share and search scripts/algorithms as part of the Mantid Project. The work involved learning and applying the necessary technologies with the help of colleagues as well as working closely with the project manager to ensure user requirements were correctly understood and met within allocated time. As part of the placement I was also given the opportunity to meet and speak with various teams/employees at Tessella’s head office in Abingdon, Oxfordshire to get a broader understanding of the various technology roles on offer and I was even granted the opportunity to sit in on meetings with clients and senior management, which was greatly beneficial. All in all, the placement was a positive experience which I would strongly recommend and which I am thoroughly glad to have partaken in.

Tuesday 21 September 2010

Covering Letter sent to Autonomy

I sent off my first covering letter just now (with my CV) with the subject heading 'Software Developer Internship/Graduate opportunities at Autonomy' as follows...
Dear Sir/Madam,

I am writing to enquire about any Software Developer internship or graduate career opportunities available at Autonomy. I am a final year PhD student at Imperial College London awaiting my viva which is due to take place in early November. My area of study is Computing and, more specifically, the focus of my dissertation has been information exchange in societies of autonomous agents for resource allocation problems.

I hope to utilise both the practical and analytical skills acquired during my undergraduate and doctorate degrees, as well as previous employment, to work for a company at the forefront of technology. The area of intelligent information is of particular interest to me and I would be most appreciative of an opportunity to work with the great minds at Autonomy, to learn more about the solutions employed and to contribute to the development of the company. In addition to my core experience of working with a range of software and programming languages, I believe I have the qualities of self-motivation, problem solving, communication and teamwork required for a career at Autonomy, as demonstrated and developed over the course of my academic, career and voluntary pursuits.

I would be available to begin at the earliest opportunity and am pleased to provide further information about myself in person at any time. I have attached my CV, thank you for your time and look forward to hearing from you.

Yours faithfully,
Adil Hussain (07954 402 672)

Exciting times! :)>

CV and Covering Letter - feedback from Careers Adviser

I sent my CV and covering letter to the Imperial College Careers Advisory Service and got some (good!) feedback as follows...
Your CV
This looks really nice - it's well structured, well presented, looks good, easy to read and communicates all the relevant information. Well done. I'd only have some very minor suggestions that might enhance this.

1) You've put a line across the page each time before your heading, and you could consider using this line underneath your heading - the overall effect would be the same and it would still divide up your information into easily recognisable sections.

2) I'd also suggest losing the very heavy lines at the top and bottom. A very effective way for setting out your information could be to use your name (as you have) in the centre, but also centre all the other information, with your address in one/two line(s) followed by the other information. Sub-headings like 'email' or 'address' are not needed - this is self-explanatory.

3) for your Education section, consider losing the gaps after A-levels and GCSEs. Creating a different 'block' is making the eyeline jump across when reading.

4) Career History: this could be divided up into two sections: 'Technology Employment' and 'Other Employment' and then you could structure the work experience within these sections. Also, you need to add a job title for each of these entries and the place, e.g. city (or country). Consider moving some of this info to page 2, as you've got it all squashed up on page one leaving a big gap at the bottom of page 2. Aim for two well- balanced pages.

5) I would also suggest providing more information for your work experience. You've got one bullet point for Tessela - consider using another with a bit more info about what was involved in building this system - did you work on your own or in a team? Did you communicate with anyone - had meetings, liased etc. also, did you have a deadline to work to? Consider giving some insight into the transferrable skills you've used. Same with Argugrid. How did you participate- what did you do?

6) Teacher Training Agency - this is also a bit vague - what were your tasks? You were in charge of a team, but what did your team do? If you were in charge of teaching - did you teach yourself? Consider including planning lessons, developing excellent communication skills and interpersonal skills (?) - if appropriate.

7) Overall, aim for around 3 bullet points of info about your work - the reader needs to understand what you did, what was involved/e.g. how you did it and what you learned from that, e.g. skills developed. You've got plenty of space left at the bottom, so that's fine.

8) the last two sections could usefully be changed. Normally, it's SKILLS & TRAINING after your work experience. This is about hard skills, e.g. your IT skills and languages, also the first aid course, but could include driving licence or any other courses you've attended. For languages, give some indication about how well you speak/write Urdu, Punjabi and Arabic.

9) your last section could be Interests and Achievements. Consider using sub-heading to organise this information. You could use the information from your current skills/interests section and copy over the sports. Travel could be useful, but then state where you've travelled to, how long - mention development of language skills, adaptability and insight into other cultures, if you've travelled extensively. Make it useful for the employer.

Overall, this is a great CV - well done!

Your covering letter

This is a great start, but could be expanded. Ideally you would also need to include some information about what you have to offer the company. You've talked about your degree, but you need to include information about your work experience, team working and communication skills - ideally making reference to the skills required for the role you're applying for and giving evidence - where have you used those skills already? The application is about what you have to offer them, so this is important. Your penultimate paragraph needs to give information about what you want to work for that company.

... Made changes accordingly. Didn't make all the changes. Might need to return to this later if job applications are not going well. Let's see.

Monday 20 September 2010

C(++) and Pointers

Been playing with C and C++ variable declarations and pointers (using Microsoft Visual Studio 2010) last few mornings. This code should serve as good reference in future:
#include <iostream>

using namespace std;

int intFunc(int x, int *p, int **pp) {
return x;

int *pointerFunc(int x, int *p, int **pp) {
return p;

int **pointerPointerFunc(int x, int *p, int **pp) {
return pp;

int main()
int x, *p, **pp;
int resultx, *resultp, **resultpp;

p = &x;
pp = &p;

cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
printf( "x = %d\n", x );
printf( "&x = %d\n", &x );
printf( "p = %d\n", p );
printf( "*p = %d\n", *p );
printf( "&p = %d\n", &p );
printf( "pp = %d\n", pp );
printf( "*pp = %d\n", *pp );
printf( "**pp = %d\n", **pp );
printf( "&pp = %d\n", &pp );

resultx = intFunc(x,p,&p);
printf( "resultx (intFunc) = %d\n", resultx );

resultp = pointerFunc(x,p,&p);
printf( "resultp (pointerFunc) = %d\n", resultp );

resultx = *pointerFunc(x,p,&p);
printf( "resultx (*pointerFunc) = %d\n", resultx );

resultpp = pointerPointerFunc(x,p,&p);
printf( "resultr (pointerPointerFunc) = %d\n", resultpp );

resultp = *pointerPointerFunc(x,p,&p);
printf( "resultp (*pointerPointerFunc) = %d\n", resultp );

resultx = **pointerPointerFunc(x,p,&p);
printf( "resultx (**pointerPointerFunc) = %d\n", resultx );


Friday 17 September 2010

Processes and Threads

A 'process' is an 'instance' of a 'computer program' that is being 'executed'. It contains the 'program code' and its 'current activity' (state?).

A 'thread of execution' is the smallest unit of 'processing' that can be scheduled by an operating system. It generally results from a 'fork' of a computer program into two or more concurrently executing 'tasks'. Typically, a thread or multiple threads are contained inside a process and share resources such as state and memory.

An advantage/use of multi-threading: the ability for an application to remain responsive to input, e.g. in a single threaded program, if the main execution thread blocks on a long running task, the entire application can appear to freeze. By moving such long running tasks to a worker thread that runs concurrently with the main execution thread, it is possible for the application to remain responsive to user input while executing tasks in the background.

Thursday 16 September 2010

Insight Onsite application

Posting here my response to the question "How do you believe that participation in the Insight Onsite project will further your career planning?" which I forgot to Blog when I sent it off last February prior to my internship at Tessella:
I intend to pursue a career in industry following my PhD which is due to be completed mid-2010. My area of interest is information technology and software development in particular, and I would hope to find myself in a company where I can utilise both the practical and analytical skills acquired during my undergraduate and doctorate degrees. The Insight Onsite placement would be an ideal way to find out more about my options whilst awaiting my final examination. The placement at Tessella specifically offers exposure to a wide range of projects and careers in my area of interest. It would be extremely useful to get a taster for some of the different software engineering and consultancy services Tessella provides, as well as the knowledge and skills I would need and develop working for such a company. In addition, I look forward to meeting and speaking with employees in different positions and roles, and thereby gaining an invaluable insight into work life and the work environment. I would appreciate immensely this opportunity to experience first hand the range of careers I could expect to opt for when applying for a job.
Writing (starting) my first covering letter today!

Monday 30 August 2010


About to give away my book 'modern compiler implementation in Java'. Was skimming through it and thought I'd Blog some key words/definitions for future reference and as a reminder of some of what I learnt during my undergraduate days:

Compiler - used to translate a programming language into executable code.

Syntax - the way in which words are put together to form phrases, clauses, or sentences.

Abstract - disassociated from any specific instance.

Semantic - of or relating to meaning in language.

Stack - an orderly pile or heap.

Translate - to turn into one's own or another language.

Canonical - reduced to the simplest or clearest schema possible.

Instruction - a code that tells a computer to perform a particular action.

Register - a device for storing small amounts of data.

Debug - to eliminate errors in or malfunctions of.

Garbage - unwanted or useless material. (Heap-allocated records that are not reachable by any chain of pointers from program variables.)

Garbage Collection - process by which memory occupied by garbage is reclaimed for use in allocating new records. (Process performed not by the compiler but by the runtime system: support programs linked with the compiled code.)

Wednesday 18 August 2010

Software Development Processes

Just read a bit about Software Development Processes. In particular, the 'Waterfall Model' (where progress flows sequentially from top to bottom through various phases) and 'Iterative and Incremental Development' (where progress is through cycles (iterative) and in smaller portions at a time (incremental)).

Regarding the former, an example of the phases (in order): Requirements specification; Design; Construction (AKA implementation or coding); Integration; Testing and debugging (AKA Validation); Installation; Maintenance.

Regarding the latter, a quote from Wikipedia: "Learning comes from both the development and use of the system, where possible key steps in the process start with a simple implementation of a subset of the software requirements and iteratively enhance the evolving versions until the full system is implemented. At each iteration, design modifications are made and new functional capabilities are added."

Friday 13 August 2010

PhD Submitted, Updating CV, MEng Modules

Submitted my PhD thesis today. Huge sense of relief maa sha Allah. Updating my CV now getting ready for the inevitable job hunt.

Removing the MEng course modules from my CV and Blogging here for the record...

4th Year Modules: Computing for Optimal Decisions, Grid Computing, Intelligent Data and Probabilistic Inference, Knowledge Representation, Management (Economics and Law), Modal and Temporal Logic, Multi-Agent Systems, Network Security

3rd Year Modules: Advances in Artificial Intelligence, Bioinformatics, Computational Finance, Concurrent Programming, Decision Analysis, Operations Research, Organisations & Management Processes, Software Engineering Methods

2nd Year Modules: Artificial Intelligence, Compilers, Complexity and Computability, Computational Techniques, Concurrent Programming, Networks and Communications, Operating Systems, Software Engineering, Statistics

1st Year Modules: Computer Systems, Databases, Discrete Mathematics, Hardware, Logic, Mathematical Methods and Graphics, Programming, Reasoning about Programs

... 8 good long years at Imperial College coming to an end!

Thursday 12 August 2010

Remote-control warfare: Droning on

Blogging for the record an interesting piece entitled "Remote-control warfare: Droning on" about "How to build ethical understanding into pilotless war planes" which featured in the April 3rd 2010 issue of The Economist (Science and Technology section). A quote:
... Ronald Arkin of the Georgian Institute of Technology's School of Interactive Computing has a suggestion that might ease some of these concerns. He proposes involving the drone itself - or, rather, the software that is used to operate it - in the decision to attack. In effect, he plans to give the machine a conscience...
Good article. Worth a re-read.

Saturday 24 July 2010

PhD application

As well as the patient-appointments scenario which I have, i.e. making as many patients as possible happy with their allocated appointment, another one could be to give as many employees as possible a task which they like (or a task which is within their capacity perhaps).

Friday 23 July 2010

74, Argumentative Alternating Offers

Good paper ('Argumentative Alternating Offers', Nabila Hadidi, Yannis Dimopolous, Pavlos Moraitis, 2010). Understandable. Always a good positive feeling understanding a paper!

Paper is about introducing argumentation to the "alternating offers (negotiation) protocol" and separating (making a distinction) between "practical" and "epistemic" arguments. Worth nothing that the work is for the 2-agent setting and arguments are treated as abstract entities.

A few questions to ask of the author(s):
  • Are (would) the conflict relations (Re and Rp) (be) shared by both agents? (see page 442)
  • Are (would) the preference relations (>=p and >=e) (be) shared by both agents? (see page 442)
  • Why is the assumption on page 443 that all practical arguments are 'useful' for some offer necessary?
  • The 'reject' case on page 445 (and explained on page 447): Why is it so? What does it mean for arguments and offers to be removed from the agent's theory?
  • Are offers ever added to the agents known offers (i.e. is it dynamic or static)?

73, Opportunistic Belief Reconciliation During Distributed Interactions

Tried reading this paper ('Opportunistic Belief Reconciliation During Distributed Interactions', Paul Martin, David Robertson, Michael Rovatsos, 2010) but couldn't understand why and what it is. Seems kind of related to my AABA paper.

Sunday 6 June 2010

Tessella Work Placement

I am starting a one-month work placement at Tessella tomorrow. I will be based at Rutherford Appleton Laboratory working under Nicholas Draper on the Mantid project. The Mantid project is described as follows: "The Mantid project provides a platform that supports high-performance computing on neutron and muon data."

Wednesday 21 April 2010

64-67, References from Master's Project Report

References from my Master's Project Report that I keep forgetting to Blog!...

64, A simple procedure for finding equitable allocations of indivisible goods, by Dorothea Herreiner & Clemens Puppe, 2000.

65, Issues in Multiagent Resource Allocation, by Yann Chevaleyre et al, 2006.

66, The Contract Net Protocol: High-Level Communication and Control in a Distributed Problem Solver, by Reid G. Smith, 1980.

67, A task-swap negotiation protocol based on the contract net paradigm, by Matteo Golfarelli, Dario Maio & Stefano Rizzi, 1997.

Tuesday 20 April 2010

Deadlock in Implementation

After quite a few days debugging finally spotted the problem...

Consider the following case:

1) a1 initiates a proposal with a3 and a4.
2) a2 initiates the same proposal with a3 and a4.
3) a3 responds to a1 with acceptance.
4) a4 responds to a2 with acceptance.

In this situation a3 cannot respond to a2 and a4 cannot respond to a1. Both are stuck.

Now need to think what to do about it!

Friday 9 April 2010

Assumptions as contraries of assumptions

I wanted the desirable property of not allowing two conflicting assumptions to hold simultaneously and thus added conflicting assumptions to the set of contraries for each assumption, e.g. asmHas(X,R) is set as a contrary of asmNotHas(X,R) and vice versa.

This introduces a couple of problems though:
(1) The defences of arguments get really large since there are now so many more attacks to consider/counter.
(2) Incorrectness! e.g. the contrary of asmHas(a2,r5) is notHas(a2,r5) supported by asmNotHas(a2,r5), but asmHas(a2,r5) counter-attacks asmNotHas(a2,r5) so the initial attack doesn't hold (wrongly).

I have commented out for now (in the implementation) assumptions as contraries of assumptions.

Saturday 6 March 2010

IBM - the smarter city

Awesome resource for those into information, technology and governance. So exciting no? Or maybe it's just me :(

Split into six sections as follows: Transportation, Public Safety, Energy & Utilities, Education, Healthcare and Development. Would be an exercise to think how my PhD research could tie into some of these.

"Welcome to the smarter city. A collection of smart ideas happening in cities all over the world today..."

"The time to make our city smarter is now. But how do you keep traffic flowing, cure healthcare systems, protect citizens while protecting their privacy? How do you demonstrate one decision affecting millions of people? And involve them in making their city a better place to live?"

Wednesday 3 March 2010

Signalling and Signalling Games

Just did a bit of reading on the class of Game Theory games termed 'Signalling Games' and the Economics and Evolutionary Biology theories of 'Signalling'.

Tuesday 2 March 2010

68-69, Coloured Trails (CT) game

Looked through a couple of papers describing and running experiments using the Coloured Trails (CT) game for multi-agent resource negotiation:

68, The Influence of Social Dependencies on Decision-Making: Initial Investigations with a New Game, by Barbara J. Grosz, Sarit Kraus & Shavit Talman, 2004.

69, The Effects of Goal Revelation on Computer-Mediated Negotiation, by Ya'akov Gal et al, 2009.

Implementation referenced in [69] can be found here: