I have a few power sockets that can be switched wirelessly, mainly Energenie devices triggered by my Raspberry Pi. I’ve had a web interface for ages, and some automation around things like sunrise/sunset, but I’d been meaning to add voice control to save me requiring a device to hand.
Obviously Alexa is hosted on Amazon’s servers, so any command from the Echo was going to outside my own network. I needed to get it back inside, to trigger the code on the Pi, but I wanted to do that without exposing any URLs or potential data breach opportunities.
I found a few tutorials that showed how to do it by setting up your own Alexa Skill in AWS Lambda, combined with Amazon’s IoT option, but this seemed like a lot of effort. Instead, I was trying to find the right combo of services that would knit together. In the end, a combination of IFTTT, Beebotte and a custom Node script running on a local machine did the job.
Integrating with Alexa
IFTTT was a simple selection as it already has Amazon Alexa listed as one of the services it integrates with.
A bit of research also highlighted the ability to accept and hit webhooks. So I could set up an Applet in IFTTT to listen for a command on my Echo and make a call to a URL that included a command.
To do that, simply select Amazon Alexa for the ‘this’ part of the Applet, then authorise integration. Once done, pick a “Say a specific phrase” trigger.
Click for larger version
MQTT – Beebotte
Originally, the plan was to self-host a script to send a message via XMPP/Jabber when the URL was hit. I currently have a basic bot set-up by way of a Node script connected and listening for messages. Triggering a message using PHP seemed to be a bit of pain, so I turned to MQTT.
It was something I had been meaning to look into for a while and this proved a useful opportunity. Continue reading…
Reading Brandur Leach’s article about Learning From Terminals to Design the Future of User Interfaces I found myself agreeing with many points, though not all. While I don’t agree that terminals are the answer to user interfaces, I was very keen on some of his points, notably:
We should be honest with ourselves and call out design anti-patterns that promote flashiness at the expense of efficiency.
I have found myself increasingly frustrated by bloat, whether in the form of stupidly large web pages that take forever to load while forcing the content to tip-toe around interactive elements, or simple apps that strain a last generation tablet.
I wrote a feature a while back about how I had tried to revive my 2012 Nexus 7 by switching to a different ROM (operating system essentially). I’ve been reasonably pleased with the switch but it’s far from perfect. It’s faster than the native Android ROM, but still a little sluggish.
Now, you could argue that it should be because the device is now more than four years old. In computer terms it’s more than a generation out of date, making it a virtual relic. Two more cycles of Moore’s law have passed since then, meaning recent devices are four times more powerful, in theory.
As I keep arguing though, we long ago passed the point of powerful enough. What all that extra grunt — which few people actually need — is doing is simply making developers lazy. Although it could also be that they’re driven by the new shiny too.
Instead of adding a flashy transition, or a higher definition image, or video to everything, why is no one focusing on speed?
The answer, I suspect, is that they’re all testing on super-high-spec development machines, or latest generation devices. Why spend time debugging a routine or looking for more efficient ways to do things — which often require a lot of creativity and clever-thinking — when you can just throw hardware at the problem?
Why worry about all those landfills pumped full of old devices that can no longer keep up? That’s not their problem. In fact, if you work for a device maker your job is to help move units. If anything, you want to make existing devices obsolete the moment a new one is launched. Slowing it down is one way to do this. Continue reading…
Last year some time I whipped up a simple site based on a premise I’d had knocking around in my head for a while. The aim is simple: send jovial insults to people you know.
I originally registered a domain and hosted it on GitHub pages but as the domain expired, despite the relatively low cost, I was reluctant to waste money on a vanity project. I could have left it hosted with a Github domain, but I had been looking for an excuse to try another platform.
I knew you could bend Tumblr to host more than just the traditional tumblog format with chronological posts and this gave me the opportunity to try it.
Storing your content
The site is fairly simple, largely consisting of a bunch of images. In fact it’s closer to a single page app (SPA) than a proper website. The first task, therefore, was to figure out how to store those images so they were accessible.
As it turns out, you can store static content in relation to a theme on Tumblr, but there’s no easy way to retrieve these. On the original site I used a JSON file to store image names, etc. I would then simply use the paths in the file to retrieve the relevant images. Continue reading…
Let me start by saying that I like the Raspberry Pi, I own four of them. I’m also a big fan of the Foundation’s aims. The title of this piece is pure click-bait.
That said, I happened to be perusing the second-hand listings for computers on eBay recently, in response to a forum post, and was amazed at how much you can get for not a lot of money. The prices were so reasonable they got me thinking.
It must be something about January, as I have written before about the price of second-hand PCs, back in 2013. I’ve also asked where the cheap computers were, because prices seem to stay pretty static for new computers, with very little change in real-world performance.
That means you can pick up a lot of machine for little money. How little? Well cheaper than a Raspberry Pi.
The Cost of Pi
The Raspberry Pi was designed to offer an affordable computer to encourage tinkering and learning, and it does. The Pi Zero retails for around £4 ($5), if you can get hold of one. They go up to about £30 for the most powerful model (the Pi 3 Model B at the time of writing).
That is just for the board though. To actually use it you also need:
- Power supply
- Storage (SD card)
- Keyboard and mouse
For the purposes of this exercise I assumed we were using an existing monitor or TV (as the Pi was designed to). I also decided to ignore the keyboard and mouse as the cost cancels out regardless of which option you choose. Continue reading…
In the middle of last year I was presented with a 4K monitor (an ASUS MX27UQ). I was very pleased with it and the picture quality was a massive step up from the aging LG W3000H running at 2K that had been my main screen for many years. So I was very grateful to Father Christmas when he delivered a second 4K screen (a Dell UP3216Q).
Previously I had been able to get away with unlocking the clock on my existing Radeon HD 5450 card to provide a 4K picture (well, UHD @ 3840×2160). That wasn’t going to cut it to run dual 4K monitors though, so the search was started to find something suitable.
Requirements for running 4K/UHD
Running a single 4K monitor doesn’t require a whole lot, with around 12 Gbit/sec for 3840×2160 @ 60Hz. For 30Hz that drops to about 6 Gbit/sec. Hence why I was able to push that using a cheap card released in 2010. The limiting factor doesn’t tend to be the GPU power, but the connections on the board.
Only HDMI and DisplayPort are able to provide the necessary bandwidth to drive such big screens. A lot of cards come with HDMI, but the bad news is that only those released since 2015 (generally mid-2016) come with HDMI 2.0, which is the first version that supports 60Hz. Instead, you’ll generally get HDMI 1.4, which is limited to 30Hz due to the lack of available bandwidth. Mind you, that’s perfectly usable for general desktop use (in my experience, others appear to disagree).
The other option is DisplayPort, which since version 1.2 (released in 2009) has been able to supply enough bandwidth to drive a high resolution display at a full 60Hz. Finding cards with one DP port is pretty tough, finding one with two is harder still.
There are also options to drive displays using Thunderbolt 3 or Alt-Mode over USB-C, but these are even rarer. Continue reading…