António Afonso's Curriculum Vitae

Personal Information

Name
António Afonso
Email
GTalk
antonio (dot) afonso (at) gmail
Currently living
Sunnyvale, CA, USA

Profile

I have extensive experience in developing JavaScript scripts and HTML code. My main area of work and interest in JavaScript are frameworks and libraries. I have created my own libraries from the ground up and also contributed to open-source projects.
I also use UNIX scripting to create tools to help me on my tasks since repetitive tasks are no fun and computers are all about automation.

In the past I have been a C, PHP and Java developer but the ever growing love of the distributed and openness nature of the web lead me to focus my time on learning and developing it.

I like to think of myself as a problem solver, I am very persistent in my work and I never give up in front of a challenging problem until I have found a good solution.
Technology is constantly evolving and I believe it is fundamental to follow and keep up with that evolution. I strive for knowledge, so along the years I have surrounded myself with a good knowledge network composed of people, blog feeds, books and other sources of information, reading is how I spend most of my free time.

I am eager to work in a company that shares the same passion that I do for the web and that has plans to keep "pushing the envelope" in terms of what we think is possible to deliver on the browser using open standards. I'm motivated by interesting challenges that will make users go "wow, how did you do that? are you sure this is not flash?" when the project is up and running. Attention to detail and a good user experience is very important to me even if that means sacrificing feature count, I prefer "feature-less but usable" than "feature-rich but unusable".

Very strong technical skills
JavaScript, HTML, DHTML, CSS, XPath, JSON, HTTP
Technical skills
PHP, XSLT, XML, SQL, Java, Ruby, C, Bash

Work Experience

Period
since December 2010
Role
Senior Software Engineer
Employer
Motorola Mobility
Responsibilities
Undisclosed project.

Period
From May 2010 to November 2010
Role
Senior JavaScript Lead Developer
Employer
Nokia gate5 GmbH
Responsibilities
Development of the Nokia Maps JavaScript framework.

Period
From October 2008 to May 2010
Role
JavaScript Developer
Employer
Opera Software ASA
Responsibilities
Development of multi-platform widgets for desktop and mobile.
Development and maintenance of the bundled Opera Unite applications.
Design, development, maintenance and documentation of JavaScript libraries meant to be used by 3rd party developers.
Projects
Development of mobile widgets for Vodafone Widgets (powered by Opera) using HTML, CSS and JavaScript according to the W3C Widget Specification.
Design and implementation of the "Markuper" JavaScript template system released under the BSD license.
Details
For Vodafone, the development of a facebook widget meant to be run on mobile phones such as the N73 and N95. This project mostly consisted of reading through the facebook public APIs, the OAuth spec and making sure it was implemented following all the requirements and mockups given.
Co-author of the entire JavaScript framework currently in use to develop all Opera Unite Applications made by Opera Software. This work consists of a core part and an extension system based on some Aspect Programming concepts (around). Author of several plugins used to facilitate the development of new Unite Applications and of a template system based on ui patterns instead of a generic programming language that can be easily extended. Also author of guides and tutorials to help in-house and 3rd party developers to get acquainted with the technology used. Occasionally answering to developers on forums and e-mail and helping the Developer Relations team at Opera Software with examples and reviews of articles before publishing.
Implementation of Opera Unite's Media Player application. Maintenance of four other Unite applications.
Type of Business
Internet

Period
Summer of 2004
Role
Independent Contractor
Client
TIMwe
Project
Complete design and implementation of a PHP portal for mobile services.
Details
The challenge was to develop a portal to sell mobile "software" such as, wallpapers, ringtones, java games, etc. The first part of the project was mostly spent presenting and discussing ideas on the whiteboard of a platform that could be easy enough for a non-tech to change and maintain. The entire project was made using PHP and some shell scripts to unpack new content files whenever it arrived by ftp. Since no back office was required by the client a very simple DSL was developed in order to completely define the content and layout of the homepage. Technical and user manuals were written in both Portuguese and English (since this platform was meant to be deployed on Portuguese and English markets)

Period
From June 2000 to February 2004
Role
Consultant
Employer
Link Consulting, SA
Responsibilities
Design and implementation of new applications and features.
Technologies Used
Java, Visual Basic 6.0, VBScript in ASP, HTML, JavaScript, XSLT, PHP and Database Systems (ODBC/JDBC/MySQL/Oracle).
Projects
Report generation application for Banco Mais.
GSM/UMTS Network Management tool for Vodafone.
Development of an extranet for Novis Telecom.
Customization and deployment of Bugzilla (GO).
Details
One of the main key developers of the team that developed the radio network design software for Vodafone Portugal. Developed pages in ASP(VBScript), XML and XSLT. Another part of the application, for hardware design, was made in Java. I was responsible for maintaing and adding new functionality to that application that was around 3.5MB source code and more than 500 Java classes. Releases were in a close cycle and the majority of the communication with the client, regarding features and requirements, was made by the developers themselves.
Development of the extranet site for Novis Telecom in PHP and eZPublish. Requirements and mockups for this site were based on the previous version of the site made in ASP(JScript) and new functionalities request by the marketing department. There was also the development of an eZPublish plugin to create surveys that was released as open-source.
Customization and deployment of Bugzilla in-house, this was a project done in my own free time since there was no bug tracking system used at the Link Consulting before this. Creation of back office in order for project managers to create their own bugzilla installation that they could customize to fit their projects' needs. It is currently mandatory to have a bugzilla installation in all projects as it is part of the ISO-9001 compliant procedure documents.
Type of Business
Consulting

Personal Projects

Period
Summer of 2006
Name
AGI Emulator for the Web
Description
Created an AGI emulator for the web all coded in JavaScript+HTML and some PHP for extracting the information from the main binaries of the game.
The PHP server-side code is a compiler from AGI Assembly into JavaScript. The generated JavaScript code is then executed on the client-side.
Details
This project started as a challenge to see how far I could get implementing an AGI engine for the web. The first part mainly consisted of finding the right documents that detailed the bytecode used by Sierra, fortunately there was lot of reverse engineering work made by Russians in the eighties to make a clone of Sierra's interpreter. Images and sprites were the first to be extracted from the "ROM images" of games such as Larry Laffer and King's Quest. For the core engine I was afraid that browsers wouldn't be fast enough to parse the bytecode instructions in real time (this was 2005) so I decided to attack the problem by first compiling the bytecode into JavaScript code to remove all that parsing layer. While doing so I was a little bit stuck convert goto's because JavaScript doesn't have them in the language. The majority of goto's could be easily converted into if/else/elseif structures but there were still some left that were just plain simple goto <label>. In order to solve that I compiled the code in different functions, whenever a new label was found in the bytecode a new function will be created, goto's were then translated into return statements with the correct function name to be executed next.
Location
http://web.ist.utl.pt/antonio.afonso/agi
Referenced in
Jacob 'Nihilogic' Seidelin's "2008 — A Year of Awesome JavaScript"

Period
July, 2009
Name
Custom JIRA® portlets
Description
An extension to the built-in "Show Saved Filter" with the option to add user selected fields to the list.
Details
Created this project because the version of JIRA used at Opera Software didn't allow users to specify which bug fields to display on the homepage. The core of the work was learning more about JIRA and its architecture by reading JavaDocs and forums. This small project was launched under the BSD license and currently deployed at Opera Software for testing.
Location
http://code.google.com/p/custom-jira-portlets/

Period
Currently
Name
Several JavaScript libraries/tools
Description
Bookmarlets
ID3v2 tags parser (currently used in Opera Unite's Media Player)
Ultrastar parser
jschardet (python's chardet port)
Collection of tools to speed up development and debugging
Details
One of the most useful tools I use is a TextMate script that svn externs, packages and send widgets to a specific cellphone via bluetooth. The file is sent via bluetooth by an external AppleScript script which is another standalone tool that I wrote. This enabled me to go from 1 minute (from save file to running on the phone) to 2 seconds, which can account for a lot of time while in a short cycle debugging session.
Another script that I use everyday at work, downloads the most recent build of Opera browser, installs it and automatically configures the required options to work in debugging mode. Since there can be several builds per day this actually saves up time on downloading and setting up the environment.

Papers

Date
2010
Title
Alternative Method for Message Passing Between JavaScript and Flash. [PDF]
Abstract
This paper introduces a method to communicate with Flash using JavaScript when the ExternalInterface is not available in the hosting platform.

Education and Training

Period
November 2006 to September 2008
Degree
MSc in Information Systems and Computer Engineering
Institution
Instituto Superior Técnico, Lisboa

Period
November 2003 to November 2006
Degree
BSc in Information Systems and Computer Engineering
Institution
Instituto Superior Técnico, Lisboa

When
January 2003
Certification
Sun Certified Programmer for Java (SCPJ)
Name
Sun Certified Programmer for Java 2 Platform 1.4 (310-035)

Period
July 1996
Qualification
English — Pre-Intermediate
Institution
The British Council

Technical and Personal Skills

Very Strong Technical Skills
JavaScript/AJAX, HTML, DHTML, CSS, XPath, JSON, HTTP
Other Technical skills
PHP, XSLT, XML, Bash, SQL, Java, Ruby, C, UNIX
Mainly School skills
Scheme, Common Lisp
Frameworks
jUnit, Prototype, jQuery
Tools
SVN, CVS, Mediawiki, Bugzilla, JIRA
Other Competences
AppleScript, OAuth, Accessing REST services, scraping html, creating bookmarklets, reading articles, books and specs, Textmate, LaTeX, playing Frets on Fire with Gibson PS3 Guitar
Mother Tongue
Portuguese (European)
English
Reading and listening
Excelent
Speaking and writing
Very Good
French
Reading
Good
Listening and speaking
Basic
Organisational Experiences
At the university I've created the Mac@IST initiative, with the objective of creating a community of people at school that utilizes the apple platform in their studies.
I've also organized events for students to participate in and established contact with companies in order to create small internships for students in the early stage of their studies.