Tim Perry

Senior software engineer at resin.io.
Creator of Build Focus, keen open-source contributor, and maintainer of Loglevel, Git‑Confirm and Server Components.

Federate your content just one more step, all by yourself, and making jumping ship a little less scary.

Mastodon has been quietly building popularity for a good few months now, but over the past 48 hours it’s really burst to life, leaping from 25,000 to 40,000+ users in no time at all.

This is an exciting good thing: we’ve been in desperate need of less centralized and walled social networks for a good long time now.

Moving on from Twitter though isn’t easy, as many of us have been there many years...

Because sometimes you want to know if they actually work.

Bash scripts are unloved and underappreciated. Many of us developers spend a lot of time on the command line, and a good shell script is an incredibly powerful thing to drop into & extend your existing workflow.

Shell scripting isn’t easy though. Many of the tools and techniques you might be used to aren’t nearly as effective or well-used on the command line. Testing is a good example: in most languages, there’s a clearly agreed basic a...

Promises Are So Passé at Codemotion Milan

CSS-only tabs are a fun topic, and :target is a delightfully elegant declarative approach, except for the bit where it doesn’t work. The #hash links involved jump you around the page by default, and disabling that jumping breaks :target in your CSS, due to poorly defined behaviour in the spec, and corresponding bugs in every browser.

Or so we thought. Turns out there is a way to make this work almost perfectly, despite these bugs, and get perfect CSS-only accessible linkable history-tracking tabs ...

Opening Open Source with DevOps at DevDay
Promises Are So Passé at Frontend Conference

Building a Server-Rendered Map Component

Part 2: How to use client-side libraries like Leaflet, in Node.

As discussed in Part One: Why?, it’d be really useful to be able to take an interesting UI component like a map, and pre-render it on the server as a web component, using Server Components.

We don’t want to do the hard mapping ourselves though. Really, we’d like this to be just as easy as building a client-side UI component. We’d like to use a shiny mapping library, like Leaflet, to give us all ...

Introducing Git Confirm

Get easy confidence on exactly what you’re committing.

Git Confirm is a git hook, which asks you to confirm when you commit a change that includes additions from a (configurable) list of risky matches. Think ‘TODO’, ‘FIXME’, ‘@Ignore’, ‘describe.skip/it.skip’ and ‘describe.only/it.only’. You can drop Git Confirm in, and effortlessly stop yourself ever committing anything like this by accident.

TODO is the easiest example. It’s really useful to sprinkle TODO comments in your code as you work, to ma...

You’ve written an application deployed using Dokku, and you’ve got it all up and running and great. You’ve heard a lot about why HTTPS is important nowadays, especially the SEO and performance benefits, and you’d like to add all that, with minimal cost and hassle. Let’s get right on that.

Let’s Encrypt is a new certificate authority (an organisation that issues the certificates you need to host an HTTPS site), which provides certificates to sites entirely for free, by totally automating the syste...

The wifi on the bus goes round and round... https://t.co/9JBS3OdcSy
Refactor all the integration tests into separate files for clarity
Fix breaking bug in resin local ssh
Document log subscriptions in detail (and include .unsubscribe())
Fix small but breaking testing/CI bugs
What if you wanted to be able to destroy all the data in your servers, on demand, *permanently*, within 60 seconds? https://www.youtube.com/watch?v=-bpX8YvNg6Y
String-based enums are coming to #TypeScript! https://github.com/Microsoft/TypeScript/pull/15486
Get docs and the code generating them back in sync
Include full command line arguments in Sentry errors
Include the username used in Sentry errors
Sometimes npm reminds you of the house of cards we've built: https://github.com/crypto-browserify/createHmac/issues/17 Using browserify + any crypto? Your build is broken.
New status page format: just a graph of the number of people checking the status page over time.
Full credit to @gigantictickets for including the unsubscribe link nicely up front in their emails, never seen that… https://twitter.com/i/web/status/862612617776570369
We have an open #frontend position at resin.io, so far >90% male applicants 😕 Female frontend devs, join us! https://resin.workable.com/j/F8D86329DB #jobs
Trying to update my student loan repayment settings, on the UK national student loans system. ...This is fine 🔥 https://t.co/71kUNJwJ9Z
From the CEO of the Raspberry Pi foundation & Code Club. Feels good to work for a company that builds truly useful… https://twitter.com/i/web/status/860946621403729922
New repo: resin-io-playground/rpi3-bluetooth-peripheral
npm5 in public beta! --save by default, lockfiles, proper offline support, everything you've ever dreamed of. https://twitter.com/ag_dubs/status/860084993565110277
After a grey week in #Barcelona, summer is back with a vengeance... ☀️ https://t.co/Oywy5NhQBi
Fix bug with token error handling when code is minified
Stop config.* methods from refreshing the token (as they don't use it)
Fix documentation for device.getDashboardUrl()
Build & deploy all version-tagged branches
I'm unspeakably excited for this. Phantom's been great, but limited at best. Finally we've got a real modern reliab… https://twitter.com/i/web/status/859307775263993856
Add # to automerge commits to autolink to the PR
Travis now runs builds against commits on master, in addition to PRs
We at @resin_io are looking for a frontend dev: https://resin.workable.com/j/F8D86329DB. Come join us! Underrepresented people extr… https://twitter.com/i/web/status/857571408611860480
Thanks for having me @Code_Europe! My hardware with JS and @resin_io slides are up at https://goo.gl/ZL6ROV, enjoy 🙂. #CodeEurope #omgkrk