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 ...

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...

Latest fun/scary @resin_io project: launch & control a drone fleet with Resin, Alexa & Amazon IoT. https://resin.io/blog/manage-a-fleet-of-drones/ "Alexa, attack"
Include node version in sentry logs
Add a polyfill to fix local configure in older (<6) Node versions
You have a bash injection vulnerability in an interesting server, but you can't include any spaces. What're some interesting attacks?
My @BcnJS slides are up: https://speakerdeck.com/pimterry/hardware-hacking-for-js-developers. JS developers, get hacking some hardware!
Sad to see that it looks like the Intel Edison is being discontinued: http://hackaday.com/2017/06/19/intel-discontinues-joule-galileo-and-edison-product-lines/

There's quite a few other Express middlewares you can use as examples, e.g. Method-Override, and its type definitions.

As a more concrete example, if you want to add this .boom property to the response object, you should just need to create a type definition (express-boom.d.ts) containing:

declare namespace Express { interface Boom { // Add boom's properties in here } export interface Response { boom: Boom } } 
I'm talking at @BcnJS tonight! Come learn how to bring your #JS skills into the world of hardware: https://www.meetup.com/BarcelonaJS/events/240476654/ #Barcelona
New repo: pimterry/typed-promisify-all
I've got some fun plans to build a better way to do live coding talks... What's a good guide to building visual studio code plugins?
Make emulated builds reliable in the presence for WORKDIR comands
Fix issue when using resin deploy with non-standard stdin
Resin deploy ux improvements
Ensure emulated builds use the correct relative path to qemu
Gzip images when deploying
Ahhh, that feeling when you spot the tiny magic clue in a stacktrace that makes an impossible bug neatly unravel before you...
Growth in secure web tech (HTTPS/etc) in top 1M sites: https://pokeinthe.io/2017/06/13/state-of-security-alexa-top-one-million-2017-06/ Still low (HSTS & CSP especially), but great progress!
Hide the ETA, if no ETA is specified
I'm speaking at @BcnJS in a few weeks! Alternate title: 'come see a series of hilariously risky live hardware hacki… https://twitter.com/i/web/status/872051328532578306
IoT Leeds are doing their first event soon, and they need another speaker. Anybody interested? http://meetu.ps/e/CPRl5/fKG0z/d
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