Portfolio and links
Have a peek at some of my work — recent and ancient.
Page status
Status of the portfolio page: outdated since 2017.
Most links still work, and their contents may be up to date. New projects and links have not been added though, making the portfolio outdated as a whole.
Joel Purra's CV on LinkedIn
My curriculum vitae, updated on a regular basis. Let's connect!
My CV in PDF format
My curriculum vitae, in a PDF format for print.
Joel Purra's open source projects
A list of most of the open source projects I've founded -- currently 70+ (February 2017).
Joel Purra on github.com
Code hosting for most of my open source git repositories. Also using github to contribute to other projects.
Joel Purra on Twitch.tv
Live programming open source software with the internet as an audience -- follow to catch the next session!
Joel Purra on stackoverflow.com
Actively use stackoverflow.com when developing software. Am currently ranking in the top 2% of the all-time, world-wide high score list, My answers have reached 4.9 million users (July 2023).
Joel Purra on stackexchange.com
Network profile page on StackExchange (parent site of StackOverflow), with 100+ specialized communities where you can ask and help answer questions. Actively using several of the computer software communities, and answer questions when I feel I can contribute.
Talkie in Chrome Web Store
Google Chrome, Chromium, Vivaldi, etcetera version. Select text on any web page, and have the computer read it out loud for you by simply clicking the Talkie button.
Talkie in Mozilla Firefox Add-ons
Firefox version. Select text on any web page, and have the computer read it out loud for you by simply clicking the Talkie button.
Talkie open source project page
Project page for the open source Talkie project.
Talkie reviews page
Reviews and ratings page for the Talkie browser extension.
Talkie support page
Support page for the Talkie browser extension.
Conversation Augmentation: Chat Mediator Bot project page
Reduce anger and improve two-way human-to-human conversations with the help of a mediating/moderating chatbot. This particular bot blocks angry messages which have a bad sentiment score from being delivered to the other chat participant.
Conversation Augmentation
Improve conversations between humans by adding chatbots to the mix.
Meddelare.com
Install custom social share counters on your website with your own hosted solution, which only makes a single API request and loads minimal or zero assets to display the counters.
@meddelare organization on GitHub
All Meddelare projects on Github.
@meddelare on Twitter
Official Meddelare organization account on Twitter.
@meddelare on NPM
All Meddelare node packages on NPM.
meddelare-node-server
Standalone Node.js server for easy Meddelare deployment.
meddelare-node-express
Node.js Express web server middleware for in-app, self-hosted Meddelare within your current server.
meddelare-node-counters
Node.js promise-based, asynchronous, parallel, per-URL social network share count fetcher -- the base of Meddelare.
AT4AM.eu
Ever wanted to change the EU law? Now you can! 'Write me an amendment!' is the most common way MEPs end their meetings with EU lobbyists in Brussels. Whoever has the resources to write change proposals can get them through to MEPs for voting. Now, what would happen if that invitation was extended to every citizen in Europe? Well, you're hereby invited. AT4AM is for all and everybody who wants to write an amendment and send to MEPs who care to listen.
AT4AM.eu on Github
A collection of open source software related to AT4AM.eu
@at4ameu on Twitter
Official AT4AM.eu account on Twitter
AT4AM.eu on DFRI
The Föreningen för digitala fri- och rättigheter (DFRI) project page for AT4AM.eu
jqnpm - a package manager built for the command-line JSON processor jq.
This is a complete package manager for jq. It takes care of downloading and installing packages, as well as making sure they are linked properly when executing jq.
jq-fallbacks
Provide fallbacks for bad values.
jq-object-sorting
Sort objects by keys or values.
jq-key-counter
Count occurances of values across objects and arrays.
jq-zeros
Integers and floats as strings, padded with zeros to your liking.
jq-stress
Manipulate strings without stress.
jq-dry
Don't repeat yourself! Apply a filter `f` to its own output `n` times. Can be used to apply filters 'n' recursive levels, to build deep objects and for arithmetic.
jq-disarray
Manipulate arrays while avoiding general disarray.
jq-counter-buckets
Count occurrences of values within a range.
jq-ratio-buckets
Counter buckets for the [0,1] range.
jq-interval-buckets
Counter buckets which also collect values outside an integer interval '0..n-1' in the first and last buckets respectively.
jq-math
A collection of basic mathematical functions.
jq-bigint
A big integer library for working with possibly-signed arbitrarily long decimal strings.
jq-random-prng-bsd
An implementation of the BSD libc rand() pseudorandom number generator (PRNG) function. The range is [0,2147483647].
jq-random-prng-microsoft
An implementation of the Microsoft C Runtime rand() pseudorandom number generator (PRNG) function. The range is [0,32767].
jq-random-prng-vdc
An implementation of the Van der Corput quasirandom sequence generator function. The range is [0,1).
jq-bugfix-jq-552
This repository is now made obsolete by upstream fixes in jq, in commits after jq-1.5rc1-12-gcca3e92
Swedes Online: You Are More Tracked Than You Think
How many companies are tracking you online, and how much information does the average Swede leak while using popular .se websites? Many, and a lot - more than you think. Large organizations are able to connect the dots you leave behind during everyday usage, and construct a persona that reflects you from their perspective. Have you told your family, friends, or colleagues about your gambling addiction, your sex toy purchases, or your alcoholism? Even if you didn't tell anyone your deepest secrets, these companies might conclude that they can put labels on you by looking at everything you do online. And now they are selling it as hard facts behind the scenes.
masters-thesis
The source for my master's thesis report, and other documents.
more-tracked-paper
Research paper by me and my master's thesis examiner, Niklas Carlsson, based on my thesis.
har-heedless
Scriptable batch downloading of webpages to generate HTTP Archive (HAR) files, using PhantomJS.
har-dulcify
Extract data from HTTP Archive (HAR) files, quite possibly downloaded by har-heedless, for some aggregate analysis.
har-portent
Using har-heedless to download and har-dulcify to analyze web pages in aggregate.
DNSSEC name and shame!
Created together with Tom Cuddy during The Next Web's Kings of Code Hack Battle in Amsterdam 2014 - it even won PayPal's prize. Attended sponsored by Verisign Labs and NLnet Labs to use getdnsapi - thanks!
TNW - Hackbattle - DNSSEC Name and shame
The official video from the presentation on stage at The Next Web's Kings of Code Hack Battle.
DNSSEC name and shame! - getdnsapi project at TNW Europe 2014 Hack Battle
Video from the presentation on stage at The Next Web's Kings of Code Hack Battle, shot by our getdnsapi's sponsors Verisign Labs and NLnet Labs.
node-dnssec-name-shame
The source code for dnssec-name-and-shame.com
DNSSEC name and shame! at Hacker League
Our entry for the TNW hackathon, which won us PayPal's prize.
DNSSEC-name-and-shame Spotlights Top Web Sites Without DNSSEC, by Dan York
A dedicated blog post in Internet Society's Deploy 360 blog, by Dan York.
Hackathon at TNW-2014, by Wouter Wijngaards and Olaf Kolkman
A blog post by Wouter Wijngaards and Olaf Kolkman from NLnet Labs summarizing the getdnsapi teams efforts during TNW.
@dnssecnameshame on Twitter
The offical dnssec-name-and-shame.com account on Twitter
Tweets about dnssec-name-and-shame.com
Tweets mentioning dnssec-name-and-shame.com
Improving user experience in HTML forms (presentation video)
This is the video recording of the presentation.
Improving user experience in HTML forms (presentation slideshow)
These are the slides.
Improving user experience in HTML forms (source code)
Here are the code examples from the presentation.
HTML5 Berlin User Group MeetUp #9
Held the presentation Improving user experience in HTML forms 2013-12-09. "Some of the user experience/behavior in HTML5 forms isn't standardized across browsers/platforms, but with a bit of scripting it can be. There are also additional ways to improve your forms, especially for repeated use in administrative systems, and Joel will showcase a few open source libraries to help you out."
h5Validate
My own fork of the HTML5 form validation compatibility script, with many useful features and fixes.
SkipOnTab
A jQuery plugin to exempt selected form fields from the forward tab order.
PlusAsTab
A jQuery plugin to use the numpad plus key as a tab key equivalent.
EmulateTab
A jQuery plugin to emulate tabbing between elements on a page
AutoCleanCallback
A jQuery plugin to clean input fields with common functionality, like trim, normalize whitespace, digits only. It is also easily extensible.
autocleancallback-canada
Canadian extensions to AutoCleanCallback (required).
EditDidWhat
Compare two strings to see what has changed, and perform some string manipulation.
followup
A jQuery plugin to show and hide follow up questions in a form.
pagehasformchanges
A jQuery plugin to check if *anything* has changed in *any form* on a page, and warn the user before leaving the page.
extract-fields
Scripts to extract HTML form field information from one or several webpages.
formfieldinfo
A javascript plugin used to collect information about forms in a page. This information is then used to filter out potential form problems, like missing values for radio buttons etcetera.
Projects related to the European Parliament
Project page for my European Parliament hacks, mainly from the January 2014 EuroParl.me hackathon
ep-the-corrections
Using data on erroneous/corrected votes in ep-erroneous-votes, based on open data dumps from Parltrack, to visalize erroneous, and subsequently corrected, votes by Members of the European Parliament.
ep-erroneous-votes
Using open data dumps from Parltrack to analyze erroneous, and subsequently corrected, votes by Members of the European Parliament.
Danske socialdemokrater er EU-mestre i stemmeændring by Rikke Albrechtsen, Altinget.dk
Article in Altinget.dk, a Danish political newspaper, by Rikke Albrechtsen, about the Danish social democrat MEPs and their comparatively high number of corrected votes.
Analysing the corrected votes of the MEPs by Geraldine Nethercott
Article in EuroParl.me by Geraldine Nethercott, about the the erroneous/corrected votes project I worked on during the January 2014 hackathon.
Hackers hold the European parliament to account by Emma Howard, The Guardian
Article in The Guardian by Emma Howard, about the January 2014 EuroParl.me hackathon. "United by 'hackers' spirit', participants at a Brussels hackathon bring the actions of MEPs under scrutiny for the first time"
Europarl Hackathon : 48 hours to free European Parliament data by Marie Jamet, Euronews
Article in Euronews by Marie Jamet, about the January 2014 EuroParl.me hackathon.
Europarl Hackaton : 48h pour libérer les données du Parlement européen by Marie Jamet, Euronews
Article in Euronews (in French) by Marie Jamet, about the January 2014 EuroParl.me hackathon.
E-uropa: hackers y democracia by Lina María Aguirre
Blog post in La Vanguardia (in Spanish) by Lina María Aguirre, about the January 2014 EuroParl.me hackathon.
De zwarte doos van Europese besluitvorming
Article in Mondiaal Nieuws (mo.be, in Dutch) by Laurens Cerulus and John Vandaele, about open data and the January 2014 EuroParl.me hackathon.
claimid-dump.joelpurra.com
A service to extract and dump links and data from shut down claimid.com user pages.
claimid-dump
The source code to for the service to extract and dump links and data from shut down claimid.com user pages.
Goodnight claimID, by Terrell Russell
One of the founders of ClaimID.com mentions my claimid-dump tool as an alternative after their shutdown.
RIP ClaimId.com, by Ken Schumacher
Claimid-dump mentioned in a blog post by Ken Schumacher.
5 Alternatives to ClaimID for your Online Reputation Management, by Arvid Linde
Claimid-dump mentioned in a blog post by Arvid Linde.
Tweets about claimid-dump
Tweets mentioning claimid-dump
bespoke-secondary
Show slide notes in a secondary window/screen with Bespoke.js (presentation/demo)
bespoke-jumpy
Keyboard shortcuts to jump straight to a specific slide in Bespoke.js (presentation/demo)
bespoke-advanced
Auto advance slides on a timer in Bespoke.js (presentation/demo)
bespoke-convenient
Convenient extension methods for building Bespoke.js plugins (presentation/demo)
bespoke-indexfinger
Keep track of the active slide in Bespoke.js (presentation/demo)
bespoke-logbook
Log bespoke.js events and state to the console (presentation/demo)
bespoke-analytics
Visitor analysis per slide in your Bespoke.js presentation (presentation/demo)
bespoke-secondary
Show slide notes in a secondary window/screen with Bespoke.js (source code)
bespoke-jumpy
Keyboard shortcuts to jump straight to a specific slide in Bespoke.js (source code)
bespoke-advanced
Auto advance slides on a timer in Bespoke.js (source code)
bespoke-convenient
Convenient extension methods for building Bespoke.js plugins (source code)
bespoke-indexfinger
Keep track of the active slide in Bespoke.js (source code)
bespoke-logbook
Log bespoke.js events and state to the console (source code)
bespoke-analytics
Visitor analysis per slide in your Bespoke.js presentation (source code)
Thought About You (Android app)
Android application in the Google Play Store, for this for-fun project. "When did you last call someone out of the blue? Why not do it today! It's as simple as the click of a button. Thought About You helps you by calling the ones you care about and love. Try it out now!"
Thought About You (webpage)
Project web page for this for-fun project.
Thought About You's public idea and feedback board
If you want to see a new feature, have experienced bugs or want to say hi this is the place.
npshell - Command line music queue manager
Stricly command line based music queue manager/player for extra nerd credits.
shell-keystroke-animator - Simulate keypresses and record a demo.gif
Simulate stroking keyboard keys into another application/window while taking screenshots to create a `.gif` animation.
homebrew-joelpurra
Easy installation of my open source software using `brew` on Mac OS X.
hexagonif
Played around with the canvas for use in the background of a website, and ended up with this.
hexagonif
The source code to hexagonif.
jquery-mutation-summary
A jQuery wrapper/plugin for mutation-summary, the DOM mutation-observers wrapper. It adds easy, chainable .mutationSummary() calls to your jQuery objects.
fabric-git-betwixt
Selective fabric deployment of a compiled project using a git repository betwixt and between your source code and target machine.
nodejs-configvention
A node.js configuration convention with a minimal readonly interface.
CollectCalls
Collects functions that should be called in the future.
WellCompareDir
WellCompareDir is a tool to compare and select images with the same name from two folders, and copy to a third folder. Created for an immediate need while working on Fröer.nu, released as open source.
COM2CORBA overview
A presentation on COM2CORBA, without the gory tech details.
COM2CORBA.com
An open-source project for generating COM interfaces from CORBA services. Made by a group of students for BAE Systems Hägglunds AB.
X-Mouse Controls
A tool to enable or disable active window tracking, raising and also the delay in milliseconds. This is known as x-mouse behavior.
Open WWF documents as PDF
A simple tool to convert WWF documents to normal PDF documents
multi-video-frames
Play/view multiple video player streams in the same browser window by using iframes.
University grades 2010-01-08
My official transcript of records from Linköping University. It's a full Master of Science in Information Technology and Engineering, except for the thesis which was finalized in 2015.
Food Trends Mobile Barcode Application
Creating an application prototype for finding the trendy recipes, with a mobile phone that reads barcodes of ingredients.
Game Design
A shoot-em up game, an adventure game and one game design for an action/driving game. Try them out!
Access Networks
A two-hour presentation on the techniques used in access networks (fiber/phone/cable/wireless) held together with another master student.
Technical information about Microswede.se
A report and presentation on techniques surveyed and what's in use.
Promoveo Systems
A 100+ page report on a project investigating and partially implementing a robot used to transport patients between different areas of a hospital. Worked with six other master students full time during one semester.
Computer student section at Linköping University
Member of the board of webmasters for computer/information technology engineering students 2003-2006. Helped completely redesign the site in the fall of 2003. Implemented on the Roxen.com platform using revolutio...
Joel Purra's OpenPGP key
Key ID: 8192R/2A977668 2013-12-26. Fingerprint: 4C47 B4FF 173A E6ED 0DB7 3394 6DF6 890D 2A97 7668
Joel Purra at DFRI.se
Author page at DFRI, where I was an active member in 2013/2014/2015/2016.
Fly the rainbow flag! Show your support by adding the rainbow flag to your photos!
A non-Facebook version of their #CelebratePride campaign, which adds the rainbow flag to photos but requires a Facebook account and have restrictions on the images the rainbow flag can be applied to.
Source code for fly-the-rainbow-flag.com
The source code for the fly-the-rainbow-flag.com image uploading and image manipulation.
riksdagens-ledamoter
A small utility to extract a list of first name, surname and email to all members of the Swedish Parliament.
Så gick #MeraKrypto | :DFRI.se
Wrote a post about the first #MeraKrypto conference in Stockholm, promoting cryptology for companies, organizations and others who are interested.
The day we fight back | :DFRI.se
Wrote a post about The Day We Fight Back, 2014-02-11, in order to collect signatures against mass surveillance.
Dagen vi slår tillbaka | :DFRI.se
Wrote a post about Dagen vi slår tillbaka (in Swedish), 2014-02-11, in order to collect signatures against mass surveillance.
Angående proposition 2013/14:KU6 Sekretess i det internationella samarbetet | :DFRI.se
Wrote an email to all members of the Swedish parliament, on behalf of DFRI. "DFRI vill ha transparens i de beslutsprocesser som rör inskränkningar i medborgares digitala fri- och rättigheter. Vi tror att proposition 2013/14:KU6 ökar hemlighetsmakeriet och minskar förtroendet för de demokratiska processerna."
Regarding proposition 2013/14:KU6 Confidentiality in international cooperation | :DFRI.se
Wrote an email to all members of the Swedish parliament, on behalf of DFRI. This is a partial translation from the Swedish version of this blog post.
DFRI:s wiki-sida för proposition 2013/14:KU6 Sekretess i det internationella samarbetet | :DFRI.se
Wrote an email to all members of the Swedish parliament, on behalf of DFRI. This is the wiki page regarding the correspondence
Protokoll för DFRI:s styrelsemöte #10 2013-12-28 | :DFRI.se
Attended and took notes during one of the DFRI board meetings. This one was held at 30c3, Hamburg, Germany.
DFRI <3 Internetdagarna | :DFRI.se
Helped organize DFRI:s track during the Swedish Internet Days, which included several talks plus a panel discussion with DFRI and Cory Doctorow.
Arbetsmöte – träffas, diskutera, få saker gjorda | :DFRI.se
Organized a work meeting for DFRI members - new ones in particular.
Arbetsmöte om fundraising | :DFRI.se
Organized a meeting regarding attracting funds to DFRI.
Joel Purra's CV on stackoverflow.com jobs
My profile on stackoverflow jobs, which also shows my "world ranking" for certain programming skills.
Joel Purra's Developer Story on stackoverflow.com jobs
The developer story version of my profile on stackoverflow jobs. Let me know which version you prefer -- a classic CV or the developer story.
Joel Purra's CV on AngelList
My CV with more of a startup focus.
Joel Purra on meetup.com
My profile on meetup.com, which is my preferred developer/techie meeting organizing website.
Joel Purra on gist.github.com
Code snippets and small plugins that do not have documentation and a test suite yet.
Joel Purra on alternative.to
Links to my open source software programs, and their alternatives.
Joel Purra on jsfiddle.net
A few public fiddles demonstrating problems and solutions to different HTML, CSS, and javascript problems, mostly from stackoverflow.com.
Joel Purra on Trello
My profile on Trello.
Joel Purra on SourceForge
My profile on SourceForge.
Joel Purra on Google Play Store
My profile on Google Play Store.
Joel Purra on NPM
My plugins in the Node Package Manager.
Joel Purra on Bower
My plugins in the Bower Package Manager.
Joel Purra on jQuery Plugin Registry
My plugins in the jQuery Plugin Registry.
Joel Purra on Open Source Report Card
My GitHub commits to my own and others' repositories analyzed at Open Source Report Card.
Joel Purra on David
My profile on David, a dependency management tool for Node.js projects.
Joel Purra on Packagist
My profile on Packagist, the PHP package archivist.
Joel Purra on resume.github.io
My GitHub résumé, generated automatically using public information from my GitHub account.
Joel Purra on Gratipay
My profile on Gratipay, where you can help support my open source development.
Joel Purra on GitRep
My profile on GitRep.
Joel Purra on Bitdeli.com
Visitor statistics for my gihub hosted projects.
Joel Purra on MIT License
My personalized MIT license page.
Joel Purra on Keybase.io
My personalized Keybase.io page, which cross-verifies some of my encryption keys, accounts, etcetera.
joelpurra.com
The portal to my professional pages, in English. The current version was developed in 2010.
joelpurra.se
The portal to my professional pages, in Swedish. The current version was developed in 2010.
joelpurra.de
The portal to my professional pages, in German. The current version was developed in 2010.
Joel Purra on CouchSurfing.org
Am an avid traveler with many friends from around the world. While traveling I often stay with locals, at home I host other travelers. Site requires registration to view profile.
Stockholm Boardgames
Felt Stockholm lacked a boardgame group on Meetup.com, so created one.
Joel Purra on Google
My search results in Google.
Joel Purra on Twitter
Me on Twitter.
'joel purra' on Twitter
My search results on Twitter.
Joel Purra on 30c3
My profile on the Chaos Computer Club's 30c3 wiki.
Toronto .NET Hackers winner
Congratulations! Joel Purra is this month's winner of 1 free month @pluralsight subscription.
Report from OpenSpaceRio V
Honorable mention as a traveling developer at my first meeting in Rio de Janeiro.
BarCamp in Rapperswil, Switzerland
Attendant at conference about software development.
Swedish Programming Championship 2009
Placed #29 this year, with my two team mates.
Reports from IT defense exercise
Our team's preparations and thoughts on security and performance of our system.
Studenter tränas i it-krig - IDG.se
Another article (in Swedish) about the cyber warfare exercise with FOI, FRA, and more.
Sverige och Estland i cyberkrig - IDG.se
An article (in Swedish) about the IT defense exercise.
Swedish Programming Championship 2008
Ended up #30 with my two team members.
Joel Purra on cafepress.com
My cafepress shop, where I sold a few t-shirts with custom designs from 2004.
Bajsmacka.com KB2002 S1 Enköping
Co-designed and co-coded a small site for me and my fellow Swedish Army second lieutenant/company level military officers at S1 Enköping.
lists.joelpurra.com
Email lists related to joelpurra.com and other adventures of mine.
tracker.joelpurra.com
Tracking of visitors of projects and sites of mine. Data is kept locally on my piwik server.
meddelare.joelpurra.com
Personal instance of Meddelare.
payment.joelpurra.com
Personal instance of a Stripe payment gateway, used for payments and donations to projects of mine. See the donations page for actual usage.
staging.payment.joelpurra.com/examples
A collection of different ways to ask for payments -- or in my case donations. Examples use Stripe as the payment processor. My staging payment gateway server is running in Stripe test mode, so you can use their test credit card numbers and go crazy.
files.joelpurra.com
Personal file server serving data and other files related to projects of mine.
Fröer.nu
My own creation. Selling flower and vegetable seeds by mail in Sweden. The current version was developed in 2010, evolved from the original code from 2001. Worked there part time/seasonal circa 2001-2013.
Microswede.se
My own creation. Was under re-development, now dormant. Selling motocross clothes and accessories by mail in Sweden. Worked there circa 1998-2007.
Tedags.se
A planned expansion to our suite of ecommerce sites: selling tea online.
Cross-center.com
Designed and coded an ecommerce site for a motocross/enduro/speedway product/spare parts manufacturer in Habo, Sweden. We worked on it for months on and off, but it never got released.
SweCross Motocross Team
Designed and coded a small site for a team of motocross riders in Stockholm.
Net Connect Stockholm
Designed and coded a small site for a phone and telecom services company in Stockholm.
ENAB El & Nätverksmontage AB
Designed and coded a small site for a electrical and network hardware installation company in Stockholm.
Eplus Teledata
Designed and coded a small website for a senior consultant in telecommunications. Worked on the site in 2001.
Eplus Teledata
Designed and coded a small website for a senior consultant in telecommunications. Worked on the site in 2001.
R2Meton AB
Co-designed and co-coded an alternative version of R2M.net as part of our final semester at Forsmark Skola. The site looked great and impressed all web developers with its technical quality, but was never release...
Domains for sale
Over the years I've purchased and used domains for longer and shorter periods of time. Some of these domains are now for sale.
convaug.com
Domain is for sale.
e-plus.se
Domain previously used for a family company.
eplus.se
Domain previously used for a family company.
jqpm.org
Planned usage was for an open source project.
parleporten.se
Everyone wants to see the pearly gates.
nnymous.com is not anonymous
This will be something, some day.
Lifehacker.se
My bookmark domain for the original Lifehacker, where I get a lot of useful tips.
Metadomain.se
Nerd humor? Check the IP - it's your new test address! ;)
Grindsjön.se
My favorite lake, just south of Stockholm.
deathrow1.se
Empty personal webpage
Integration techniques in math
Graphical demonstration of integration techniques in math
Design Box
For a while in 1999 I wanted to get into the design template business.
ICQ-style homepage
My first personal web page - with super duper cool graphics!