What have I done?? What does it meeean???!

Playing saxophone
Programming 6501 assembly and Basic on the Commodore 64
Natural Science Programme - Tumba High School
Music Programme - Södra Latin High Scool
Musical Military Service
Musicology - Stockholm University
History of Ideas - Stockholm University
Jazz studies - Folk Colleges of Hemse and Lunnevad
Jazz- and pedagogic studies - Royal College of Music, Stockholm
Java, databases, Pascal, logic - Department of Computer and Systems Sciences, Stockholm University
Driver and traffic controller at Stockholm tramways
C++ - Uppsala University
Web Programming, Java, C++ C#, PHP - Gotland University
Web developer at Ping Pong AB

I have been programming since I was twelwe or thirteen. First Commodore 64 and ZX Spectrum BASIC, then moving to 6501 assembly. Later, various other BASIC dialects as well as Pascal and Perl, C/C++, Java, Ruby and PHP.

After jazz- and pedagogic studies at the Royal College of Music in Stockholm, I worked as a musician and a teacher in (jazz/pop/rock) improvisation and ensemble playing. After a while, I joined Stockolm Tramways, where I drove trains and also worked as a traffic supervisor for the tramway system.

My current occupation is at Ping Pong AB as a web developer.
The product, PING PONG, is a learning managment system (LMS) used by many schools and companies in Sweden.

I have been working there as a full stack web developer since 2007. “Full stack” here means coding everything from CSS rules to PostgreSQL tables and triggers, via HTML/JavaScript, jsp pages, Struts actions and Tiles, Spring and Hibernate mappings, and Tomcat/Apache configurations.

Implementation of new functionality for the application typically involves:
  • creating customer offer
  • doing prototyping
  • Iterations of:
    • UI design
    • Implementation
  • creating documentation and help texts
  • deploying
  • doing follow-ups
As part of these processes, inviting customers to a meeting at our office, travelling to meet them, or just host an e-meeting has not been uncommon.

I have been in charge of implementing customers' graphic profiles (“branding”, “skins”) in our system, which could amount to near full disguise of the underlying system. Fun with CSS!

For some new employees, I have been the mentor person, helping them to grow into their roles. That would include answering questions about the company's policies for the application, sorting issues with code style etc.

Over time, I have gravitated towards the front end development and especially the JavaScript part of it. Day to day I work to bring and keep sanity to a JavaScript codebase that has evolved since about the year 2000.

In my “spare” time I have been focusing on JavaScript and node.js, but also done work in PHP and Rails.
I keep myself updated about what is happening in the web development world by following and interacting with some interesting people via Twitter, following mailing lists like ES-discuss (for future versions of JavaScript) as well as participating in the use group sthlm.js and going to conferences like jsconf.eu and Jfokus now and then.

Other projects and functions I have created (or helped create) in PING PONG include:
  • content creation
  • survey- and test system
  • logging functionality
  • blog integration
  • product user feedback system
  • data extraction services (HTML, JSON, XML, csv)
  • wizard systems (reports and content creation)
  • timetable including a resource booking system and attendance reporting
  • integration with external test system (MapleTA)
  • JavaScript widgets for selecting dates, colors, etc. etc.
  • Tooltip/help system


JavaScript frameworks... They are all just applications of JavaScript, so “knowing jQuery”, “knowing knockout.js” etc. does not mean much I think (except for those who don't really know JavaScript itself of course).

What I think is most important - together with understanding (browser-) scripting itself - is: clarity of code, testability, accessibility, security and performance.

On the micro level, clarity of code would correspond to stylistically consistent, just-enough commented code with a well balanced mix of concise and idiomatic expressions and more verbose solutions.
A very important component is good naming of variables, functions and modules.

Testability boils down to having loosely coupled code that supports mocking relevant parts in a testing environment.
I have mainly used JsTestDriver and buster.js for testing.

Accessibility can be a lot of things, but important parts are having semantic markup, making good use of rock solid web technology (like form controls), and using progressive enhancement. And do not break keyboard navigation!

Security is probably not implemented in JavaScript alone, but avoiding JavaScript injection and handling third party JavaScript in a safe way are corner stones here.

For good performance, understanding the concepts of script loading and parsing, doing effective DOM manipulation, browser repaints and -reflows are very important. How well do the current client side operations solutions scale? When would it be appropriate to move some more work back to the server side?

Ok? :-)