2015 in review
A new year has come and it’s time to say good bye to an eventful year by taking a look back at it.
The year started out at Bloglovin, but I later left and now I freelance. Throughout I built some cool stuff for both Bloglovin (push, better images, smarter feed) and the IndieWeb (publishing to Jekyll blogs from eg. iOS etc) and now I’m all occupied building cool stuff as a freelancer.
2015 started out in the startup world. When it entered the scene I was still part of Bloglovin and we were getting ready to launch a lot of the stuff me and my closest colleagues had been working on.
My first feature to launch was push notifications, of which I was tasked with building the backend that was the middleman between devices that were to receive notifications and our other backends that wanted to notify a user about something.
Then the launches moved on to improved metadata fetching for blog posts – something which was to enable eg. better images on Bloglovin by utilizing the very same metadata that eg. Facebook uses. Me and the awesome devops Love on this also did a successful experiment with Amazon Lambda and thus saw it scale to all of Bloglovins imported blog posts with ease – a cloud service that really delivered on the promises of the cloud and something I definitely want to return to in the future. Later on we also open sourced the very code behind the metadata parser.
In the midst of the metadata fetching project we also had a terrific gathering of the entire Bloglovin team in Stockholm where lots of amazing ideas were discussed – some truly inspirational days.
As summer arrived we all in the Skåne team of Bloglovin decided it was time to move on. For me Bloglovin wanted to move in a different direction than I did. After first having moved to a new apartment I followed the example of Simon and decided to freelance (Simon later got the awesome opportunity to join Filibaba where he now produces amazing apps with vegetarian recipes, while Hugo on the other hand went on to HD-Sydsvenskan where he apparently is also creating some rather amazing, although less visible, things).
So I left Bloglovin at the end of June and entered a few months of vacation/”funemployment” (following the example of the excellent Chris Messina) while waiting for the Swedish business world to get back from vacation – and what better way to spend a ”funemployment” than to read books in the sun and code IndieWeb in the dark?
The months after Bloglovin saw some interesting IndieWeb experiments. I decided to finally tackle one of the major problems I’ve been having in the IndieWeb problem: The fact that my blog is a static GitHub Pages hosted Jekyll site – something that makes it hard to do all of the dynamic awesomeness of eg. Micropub. The simple solution would be to just abandon the staticness, but I really like Jekyll and how it enables me to focus on just content and markup and nothing but that. I also solved WebMention for static sites 1,5 years before so surely Micropub could also be solved?
I decided that it would be my summer project – enabling myself to publish to my static GitHub Pages hosted Jekyll blog through a Micropub API. And three open sourced modules later I had it up and running. Through the Micropub Express, Format Microformat and GitHub Publish modules and some minor glue in between the three I could publish posts to my blog through tools like OwnYourGram and Quill and they would be presented in the appropriate way through some more complex templating in my blog and possibly presented in one of the two new lists on my site, Links and Social. I’ve yet to polish the glue and the templates so that those can be released separately as well though.
When I had the publishing part working I also wanted to find useful ways to publish to it and since the IndieWeb is all about selfdogfeeding I couldn’t resist trying to copy the Instapaper annotations flow that Federico of MacStories described for the Editorial app in two articles – so I had to try to create a Micropub flow for the Editorial app as well – and I succeeded (that funemployment thing – very productive) although it’s still a bit rough.
A screencast of the Editorial flow for publishing Instapaper annotations to the Links section of my blog (sorry for the silent sound):
It uses the three Editorial workflows: Micropub, IndieAuth and optionally IndieAuth Deauthorize.
I later extended it with more metadata + a Workflow.app workflow and Editorial workflow for replying to posts from within a browser. Here’s an updated screencast showing that:
I also made a Workflow.app workflow for publishing a bookmark with an optional quote from the selection on a page in a browser – it uses the same IndieAction Editorial workflow as the reply one did.
So, I can now publish to my static blog from iOS – that’s pretty cool – happy to have had time this year to overcome that obstacle.
Now my blog supports nearly all the aspects of an IndieWeb:ish site – all I want to add before I say that it is fully IndieWeb:ish is automatic WebMention sending (something that’s a bit problematic for static sites as there’s often a build delay between publishing something and it being published, which means one has to wait with the pinging until one knows something has been published successfully. I have some ideas on plans on that as well though – that’s in the same spirit as my other solutions – so 2016 will likely see that little last piece of the puzzle solved).
In other IndieWeb news during the year: Not only did I focus on the new Micropub-related projects, but I of course also released some updates to my WebMentions project. All changes can be found in the changelog or can be subscribed to, but to summarize the most major changes:
- At the very beginning of the year a new experimental embed, ”cutting-edge”, was introduced to allow for UI-additions and with it a facepile for showing interactions such as like and repost was introduced.
- Basic support for updates as well as some deletes of mentions was introduced – this also happens in realtime in some of the embeds.
- The PG Pubsub module was extracted from the underlying realtime solution and launched as a separate module for any Postgres Pubsub needs. As part of that also Promised Retry was launched to provide for a Promised based mechanism to ensure that one always receives a database connection when asking for one and that proper retries are made when the connection is lost or can’t be established.
- The code responsible for ensuring that all web pages fetched as part of the endpoint are fetched ”politely” (rate limited) was extracted as Fetch Politely and extended with an optional robots.txt mechanism from my relspider so that ultimately both projects + other similar projects can share the same basic mechanism. Also added an optional database backend to that module which introduced persistence of throttled items across instances for the WebMentions project which in turn made me relax the limit of how many throttled items the endpoint accepted before returning errors.
- As with most of my projects I moved to iojs and then later Node.js 4.x and now 5.x to get newer features like Promises and arrow functions natively. I still don’t do eg. Babel, especially not server side.
- In the later part of the year yet another embed solution was created – one which solved the curlability problem of the original embeds by moving to progressively enhance an existing link (marked up with the experimental ”u-responses” class) rather than inserting WebMentions straight into the page. This was a precursor to Salmentions support. As part of the work I also moved the WebMention project to use my Tema theming engine as I then felt a need for a server side templating solution and I preferred to reuse the same solution as on my other projects and the themability features that comes with it adds some cool new possibilities.
- Not yet released, but added a full Salmentions flow that receives comments from downstream, presents them and repings them upstream. As part of this I yet again discovered the amazingness of Postgres by recursively fetching an infinitely deep comment tree through the use of ”WITH RECURSIVE”. Also as part of this feature extended and moved the parsing mechanism to an extendable fork of the Bloglovin Metadataparser module that I created previously in the year and extended it with Microformats parsing for this project. The current Salmentions implementation is a bit too optimistic though, it repings upstream no matter if a comment has changed or not which can probably even result in infinite repingings – so some kind of check whether a post has been updated or not, perhaps even a pessimistic such, remains before launch and is being tracked in #21.
- and throughout the year did bug fixes and improvements to the underlying system
Bloglovin and IndieWeb aside, after the funemployment of the summer the projects started to arrive in the autumn and now I’ve got plenty to do with lots of freelancing projects of a very varying nature and am gaining new experiences by the day and evaluating, planning and thinking about the upcoming year and what shape and in what direction I will take my freelancing then.
My latest project, which is still an ongoing one with many additions and tweaks to come, is the site for this year’s The Conference which was created with Node.js, Heroku, Stripe, Sass, Browserify, some vanilla JS etc. and which sold a fourth of all of the tickets in just three days without a hiccup and before any speakers had been announced. More tweaks will come and speakers and programs will be added.
As for this year it will start out by rejoining some former colleagues on an interesting Malmö based project until February and after that perhaps a new office at Malmö Coworking. The plans are still not set for the rest of the spring and summer so there’s still a possibility to hire me for whatever crazy project or sweet creation one would want my help or input on. We can always grab a coffee and discuss the possibilities, so send me an email at firstname.lastname@example.org if you think you have an interesting opportunity – tiny or large.
That’s 2015. Quite a lot happened there. And this is 2016. And even more will happen here. But to end things – here’s a full list of the open source projects of mine that I’ve created or updated during the year:
A list of all new projects 2015
- Metadataparser – Node.js module, Bloglovin-related of which I currently have a personal fork
- Promised Retry – Node.js module
- PG Pubsub – Node.js module
- Fetch Politely – Node.js module
- Micropub Express – Node.js module, IndieWeb-related
- Format Microformat – Node.js module, IndieWeb-related
- GitHub Publish – Node.js module
- and some other projects that I have yet to polish some more on as well as eg. the above mentioned workflows for Workflow.app and Editorial.app that isn’t really standalone projects of their own
A list of updated projects 2015
- Lintlovin – Node.js module, a personal fork of mine which is upgraded to eg. use ESLint
- A WebMention Endpoint – hosted service written in Node.js
- Connect PG Simple – Node.js module – probably my smallest and most popular project with certainly the highest amount of contributors (GitHub currently says 8 other persons have contributed to it)
- and some other projects as well as a bunch of PR:s that’s been contributed to a bunch of projects – such as Dependency Check.