<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>alexa &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/alexa/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Sun, 24 Aug 2025 09:40:24 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>alexa &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Why doesn't Alexa know that homonyms aren't homophones?]]></title>
		<link>https://shkspr.mobi/blog/2023/06/why-doesnt-alexa-know-that-homonyms-arent-homophones/</link>
					<comments>https://shkspr.mobi/blog/2023/06/why-doesnt-alexa-know-that-homonyms-arent-homophones/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 04 Jun 2023 11:34:21 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[alexa]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45889</guid>

					<description><![CDATA[As we head unto an AI dominated future, the Turing test will probably become less like a Voight-Kampff test and more like a warzone Shibboleth.  Yesterday, I asked the Alexa to set a timer.  &#34;What do you want to name your timer?&#34; She It asked. &#34;Bow,&#34; I replied. &#34;Bow timer set,&#34; it said.  Except… that isn&#039;t quite right. I wanted a timer for my bāo buns (包). That&#039;s pronounced  /baʊ/ - as in to bow o…]]></description>
										<content:encoded><![CDATA[<p>As we head unto an AI dominated future, the Turing test will probably become less like a Voight-Kampff test and more like a <a href="https://www.languageonthemove.com/pronunciation-a-matter-of-life-and-death/">warzone Shibboleth</a>.</p>

<p>Yesterday, I asked the Alexa to set a timer.</p>

<p>"What do you want to name your timer?" <del>She</del> It asked.
"Bow," I replied.
"Bow timer set," it said.</p>

<p>Except… that isn't quite right. I wanted a timer for my <em>bāo</em> buns (包). That's pronounced  /baʊ/ - as in to bow one's head.</p>

<p>So Alexa translated my speech to text and stored it as "bow".</p>

<p>When it came to read back the word, it pronounced it as /bō/ - as in a bow and arrow.</p>

<p>And there was much confusion.</p>

<p>I've ranted before about <a href="https://shkspr.mobi/blog/2022/06/why-does-alexa-speak-to-me-in-german/">Alexa's complete lack of common sense</a> and its inability to handle any form of nuance. The ability to store the original pronunciation of a homonym isn't even AI - it's barely even a database!</p>

<p>A common trope in World War 2 movies is that enemy soldiers are unable to pronounce normal English words like "Loughborough", or "Worcestershire sauce", or "Mr. Cholmondley-Warner".</p>

<p>Will it be so with AI?</p>

<p>Perhaps we will find ourselves being quizzed by an interlocutor that demand we prove our humanity by assessing whether words rhyme?</p>

<p>An arms race, to be sure. But one the machines show no signs of winning. Yet.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=45889&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/06/why-doesnt-alexa-know-that-homonyms-arent-homophones/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Zeno's Paradox and Why Modern Technology is Rubbish]]></title>
		<link>https://shkspr.mobi/blog/2022/12/zenos-paradox-and-why-modern-technology-is-rubbish/</link>
					<comments>https://shkspr.mobi/blog/2022/12/zenos-paradox-and-why-modern-technology-is-rubbish/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 24 Dec 2022 12:34:51 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[metaverse]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44210</guid>

					<description><![CDATA[Amazon Alexa is losing billions of dollars.  Self Driving Cars are losing billions of dollars.  The Metaverse is losing billions of dollars.  Are we about to witness the biggest crash in technological progress?  I&#039;m particularly fond of the Rule of Credibility which states:  The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the …]]></description>
										<content:encoded><![CDATA[<p>Amazon Alexa is losing billions of dollars.</p>

<p>Self Driving Cars are losing billions of dollars.</p>

<p>The Metaverse is losing billions of dollars.</p>

<p>Are we about to witness the biggest crash in technological progress?</p>

<p>I'm particularly fond of the <a href="https://dl.acm.org/doi/10.1145/4284.315122">Rule of Credibility</a> which states:</p>

<blockquote><p>The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time.</p></blockquote>

<p>How true is that! If you've worked on any project, you know how easy it is to get most of the way there. And how difficult it is to get <em>all</em> of the way there.</p>

<p>If you remember your classics, you'll be acquainted with one of Zeno's paradoxes - the <a href="https://plato.stanford.edu/entries/paradox-zeno/#Dich">Dichotomy</a>. Briefly stated, in order to reach a goal, you have to first get halfway there. In order to get halfway there, you must first get a quarter of the way there. To get to a quarter, you need to get to an eighth. And so on <i lang="la">ad infinitum</i>. Thus, it is logically impossible to reach your destination.</p>

<p>I kinda feel like that with some of today's tech products.</p>

<p>It's relatively simple to get a microphone that understands 90% of what you say. But to get to the last 10% means making ever-smaller incremental improvements until, years later, it's still not really worth using.</p>

<p>We've had semi-autonomous vehicles for years. But they're still stuck in that last 90% trap. Manufacturers can keep throwing children in front of them to see if the cars know to brake - but the reliability is still suspect.</p>

<p>VR has been going since the 1960s. Meta have successfully strapped an Android phone to a pair of lenses and called it the Metaverse. That's 90% of the way there!</p>

<p>There's an old joke about Zeno's paradox:</p>

<blockquote><p>A university organised a dance for its students.  All the men were to line up on one wall of a dance hall, and an equal number of women were to line up on the opposite wall<sup id="fnref:heteronormative"><a href="https://shkspr.mobi/blog/2022/12/zenos-paradox-and-why-modern-technology-is-rubbish/#fn:heteronormative" class="footnote-ref" title="Feel free to substitute with something a little less heteronormative." role="doc-noteref">0</a></sup>. The men were told to walk towards the women at a pace of a half the distance separating them every minute.</p>

<p>The mathematicians started weeping - saying that they would never get to meet.</p>

<p>The physicists looked glum - knowing they would only get to meet when time equals infinity.</p>

<p>The engineering students broke into a smile - because within a few minutes they would be close enough for all practical purposes.</p></blockquote>

<p>And it feels like that's where we are today. Alexa is <em>mostly</em> practical - but not as good as a human butler. Self-driving cars are <em>mostly</em> practical - as long as you're in an area where they've been adequately trained. The Metaverse <em>mostly</em> works - but no one really cares.</p>

<p>There's a distinction between working, working well enough, and working well.</p>

<p>But it gets exponentially harder with each step.</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:heteronormative">
<p>Feel free to substitute with something a little less heteronormative.&nbsp;<a href="https://shkspr.mobi/blog/2022/12/zenos-paradox-and-why-modern-technology-is-rubbish/#fnref:heteronormative" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44210&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/12/zenos-paradox-and-why-modern-technology-is-rubbish/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Why does Alexa speak to me in German?]]></title>
		<link>https://shkspr.mobi/blog/2022/06/why-does-alexa-speak-to-me-in-german/</link>
					<comments>https://shkspr.mobi/blog/2022/06/why-does-alexa-speak-to-me-in-german/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 18 Jun 2022 11:34:35 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Mary Robinette Kowal]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=42752</guid>

					<description><![CDATA[I speak English. My Amazon account is set to English. My Alexa listens to my English commands and replies in English.  Except for new book notifications.  I saw a pulsing yellow light on the dot. I&#039;ve memorised all of the various signs and portents the accurs&#039;d device can summon up, so I asked it (in English) what notifications it had for me.  It replied, naturally, in German.  I couldn&#039;t grab an …]]></description>
										<content:encoded><![CDATA[<p>I speak English. My Amazon account is set to English. My Alexa listens to my English commands and replies in English.</p>

<p>Except for new book notifications.</p>

<p>I saw a pulsing yellow light on the dot. I've memorised all of the various signs and portents the accurs'd device can summon up, so I asked it (in English) what notifications it had for me.  It replied, naturally, in German.</p>

<p>I couldn't grab an audio recording in time, and I've no idea which command invokes a repetition. But the Alexa app contains a handy history of every utterance to spew forth from its speaker.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/05/german1.jpeg" alt="Screenshot which says &quot;1 new notification from Amazon shopping: ‘Ein Autor, dem Sie auf Amazon folgen, Mary Robinette Kowal, hat ein neues Buch mit dem Namen Die Berechnung der Sterne: Roman veröffentlicht.’&quot;" width="680" height="510" class="aligncenter size-full wp-image-42753">

<p>To be clear, my IP address shows that I am in the UK. I have never bough German lager from Amazon. I've never watched <i lang="de">Das Boot</i> on Amazon Prime. I haven't even asked Alexa to play the soundtrack to Cabaret!</p>

<p>Whatever. Eine Kline Glitche um Der Matrix.</p>

<p>And then, a few weeks later, it happened again!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/05/German-2.jpg" alt="Screenshot of an Alexa notification.  Amazon Follow: New Book Release.  Amazon Follow updates via Alexa.   Want to add Die Galaxie und das Licht darin by Becky Chambers to your Amazon wish list?" width="680" height="511" class="aligncenter size-full wp-image-42755">

<p><i lang="de">Was ist das? Ein großer Haufen Schweinescheiße!</i></p>

<p>To be even clearer - neither of the authors are German. I stopped learning German when I was 14. My <i lang="de">liebe Frau</i> happens to have German A-Level but she swears blind that she only uses it to speak with Hans, our <i lang="de">flaschenspüler</i> - and never in front of Alexa.</p>

<p>So what gives?</p>

<p>As far as I can tell, neither of these authors has a <strong>new</strong> book out. But a German translation of their work has been published. Amazon knows I follow these authors and, because Amazon are <i lang="de">Kapitalistische Warzenschweinficker</i>, will gently encourage me to by more of their works.  Ordinarily, that might be useful. But as I don't speak the language, it's all a bit pointless.</p>

<p>For some reason, this only seems to happen with German translations. No idea why.</p>

<p>It seems that Amazon's prowess in deep-artificial-learning-neural-technobabble doesn't actually extend to anything useful - like making sure it doesn't read out garbled multilingual sentences.</p>

<p>What a bunch of <i lang="de">Kartoffelköpfe!</i></p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=42752&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/06/why-does-alexa-speak-to-me-in-german/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Alexa Standard English]]></title>
		<link>https://shkspr.mobi/blog/2022/01/alexa-standard-english/</link>
					<comments>https://shkspr.mobi/blog/2022/01/alexa-standard-english/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 15 Jan 2022 12:34:26 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[voice]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=41476</guid>

					<description><![CDATA[&#34;Alexa… timer for fifteen minutes.&#34;  The problem with the English language is that it is full of homophones, or semi-homophones. 15 and 50 sound basically the same. Humans have a hard time distinguishing them. So there&#039;s no wonder that voice assistants also have difficulty.  Recently, I&#039;ve noticed that my wife and I have adopted a very specific accent when talking to our Alexa. Certain constants a…]]></description>
										<content:encoded><![CDATA[<p>"Alexa… timer for <em>fif</em>tee<strong>n</strong> minutes."</p>

<p>The problem with the English language is that it is <em>full</em> of homophones, or semi-homophones. 15 and 50 sound basically the same. Humans have a hard time distinguishing them. So there's no wonder that voice assistants also have difficulty.</p>

<p>Recently, I've noticed that my wife and I have adopted a very specific accent when talking to our Alexa. Certain constants are emphasised, phonemes are executed with precision, and pauses between words subtly lengthened - all to ensure the artificial "intelligence" can catch our drift.</p>

<p>"Alexa… turn <em>on</em> the <em>down</em>stairs… light<strong>s</strong>."</p>

<p>A <a href="https://shkspr.mobi/blog/2012/02/tropo-voicemail-transcription-service/">decade ago</a> I noticed that some voice to text services worked better if I spoke with a generic American accent, rather than my delightful British accent. It seems things haven't got much better in the intervening years. Maybe voice communications are just too hard a problem to solve? They require such massive amounts of context and symbolic awareness that computers simply aren't there yet.</p>

<p>So we adapt. We adapt our speech to better fit our tools. Just like <a href="https://www.romper.com/p/toddlers-who-adopt-peppa-pigs-accent-are-totally-bingly-bongly-normal-say-experts-15915675">American toddlers adopt British accents from watching Peppa Pig</a>, children around the world will grow up learning that you have to speak clearly in order to be understood by humdrum machines.</p>

<p>No human would speak to another human like this, would they?</p>

<video width="320" height="240" autoplay="" loop="" muted="">
  <source src="https://shkspr.mobi/blog/wp-content/uploads/2022/01/tea.mp4" type="video/mp4">
  Your browser does not support the video tag.
</video>

<p>Somehow, we've internalised the idea that the way computers listen to us is <em>fundamentally</em> different from the way that humans listen to us.</p>

<p>Perhaps this is the answer - we need to adopt a specific mode of speaking. Lest we mistake robots for people.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=41476&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/01/alexa-standard-english/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Alexa leaks your private wishlists]]></title>
		<link>https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/</link>
					<comments>https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 18 Sep 2021 11:56:33 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[ux]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=40258</guid>

					<description><![CDATA[This morning, my wife noticed that Alexa was insistently flashing its little blue lights.  &#34;Alexa... Notifications?&#34;  &#34;You have one notification. An item on your wishlist has dropped in price. The … is now only £…&#34;  And that&#039;s how my wife found out what I planned to get her for her birthday!  What happened to cause this? I maintain several Amazon Wishlists® of things I want to buy. One of those is…]]></description>
										<content:encoded><![CDATA[<p>This morning, my wife noticed that Alexa was insistently flashing its little blue lights.</p>

<p>"Alexa... Notifications?"</p>

<p>"You have <code>one</code> notification. An item on your wishlist has <code>dropped</code> in price. The <code>…</code> is now only <code>£…</code>"</p>

<p>And that's how my wife found out what I planned to get her for her birthday!</p>

<p>What happened to cause this? I maintain several Amazon Wishlists® of things I want to buy. One of those is for presents I might want to buy my wife - and it is set to <em>private</em>. If you want to buy <em>me</em> a present, you can <a href="https://www.amazon.co.uk/hz/wishlist/ls/13GFCFR2B2IX4?type=wishlist&amp;linkCode=sl2&amp;tag=shksprblogwish-21">view my public wishlist</a>. But my private ones are private to me.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/09/List-of-wishlists.png" alt="A list of Wishlists. Liz's presents is marked as private." width="375" height="368" class="aligncenter size-full wp-image-40269">

<p>If you go to edit your wishlist's privacy settings, you'll see this small disclaimer:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/09/Manage-your-lists.png" alt="People who access your list will see your recipient name. If you have an Alexa-enabled device, Alexa may alert you when there is a deal for items in your list. Notification Preferences. " width="622" height="187" class="aligncenter size-full wp-image-40261">

<p>Going over to <a href="https://www.amazon.co.uk/alexashopping/notification"></a><a href="https://www.amazon.co.uk/alexashopping/notification">https://www.amazon.co.uk/alexashopping/notification</a> there's this toggle switch.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/09/Recommendations.png" alt=" Recommendations and deals  Receive personalised recommendations and deals based on your shopping activity." width="960" height="401" class="aligncenter size-full wp-image-40260">

<p>So, there's <strong>no way</strong> to switch off notifications from private lists. You have to switch them off for everything.</p>

<p>In this case, the harm was minimal. I'll have to find something else as a surprise gift.  But imagine if I had a "private" wishlist for something embarrassing or upsetting? I don't remember ever switching on the option for my Alexa to announce to my entire household that there is a price-drop on my weird fetish.</p>

<p>I've written before about <a href="https://shkspr.mobi/blog/2015/08/anti-social-app-design/">anti-social app design</a>.  The tech bros working on apps often don't consider that people have families. And that they live with people that they want to keep secrets from.</p>

<p>According to the <a href="http://www.ons.gov.uk/ons/rel/family-demography/families-and-households/2014/families-and-households-in-the-uk--2014.html#tab-Household-size">UK's Office of National Statistics</a> - only 28% of households contain a single occupant.  The majority of people <em>live with other people</em>.</p>

<h2 id="what-to-do-next"><a href="https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#what-to-do-next">What to do next</a></h2>

<p>If you use private wishlists, and have an Alexa, you have a few of options.</p>

<ol>
<li>Stop using Amazon's wishlists, and keep a separate list elsewhere.</li>
<li>Turn off <em>all</em> <a href="https://www.amazon.co.uk/alexashopping/notification">price drop notifications</a>.</li>
<li>Write a ranty blog post and hope a product manage at Amazon takes notice.</li>
</ol>

<h2 id="pre-empting-your-comments"><a href="https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#pre-empting-your-comments">Pre-empting Your Comments</a></h2>

<p>Before responding to this post, please consider the following:</p>

<h3 id="why-didnt-you-read-the-disclaimer"><a href="https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#why-didnt-you-read-the-disclaimer">"Why didn't you read the disclaimer?"</a></h3>

<p>I set up this wishlist long before the Alexa was invented. The disclaimer didn't exist then.</p>

<h3 id="you-should-have-gone-through-every-single-option-and-made-sure-you-were-happy"><a href="https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#you-should-have-gone-through-every-single-option-and-made-sure-you-were-happy">"You should have gone through every single option and made sure you were happy!"</a></h3>

<p>That's unrealistic. Options should be set to preserve privacy by default. Asking the user to go through dozens of different pages of options to prevent their privacy being violated is an unreasonable burden.</p>

<h3 id="this-is-your-fault-for-being-tied-in-to-amazons-ecosystem"><a href="https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#this-is-your-fault-for-being-tied-in-to-amazons-ecosystem">"This is your fault for being tied in to Amazon's ecosystem!"</a></h3>

<p>Possibly.</p>

<h3 id="jeff-bezos-is-always-listening-to-you1111"><a href="https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/#jeff-bezos-is-always-listening-to-you1111">jEfF BeZoS Is aLwAyS LiStEnInG To yOu!!1!!!!111!</a></h3>

<p>As long as he gives me cheap same-day delivery, IDGAF.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=40258&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/09/alexa-leaks-your-private-wishlists/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Book Review: The Computer’s Voice - From Star Trek to Siri by Liz W. Faber ★★☆☆☆]]></title>
		<link>https://shkspr.mobi/blog/2021/06/book-review-the-computers-voice-from-star-trek-to-siri-by-liz-w-faber/</link>
					<comments>https://shkspr.mobi/blog/2021/06/book-review-the-computers-voice-from-star-trek-to-siri-by-liz-w-faber/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 01 Jun 2021 11:32:25 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[feminism]]></category>
		<category><![CDATA[Sci Fi]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=39127</guid>

					<description><![CDATA[A deconstruction of gender through the voices of Siri, HAL 9000, and other computers that talk  Considering Star Trek, 2001: A Space Odyssey, Her, and more, Liz W. Faber explores contentious questions around gender: its fundamental constructedness, the rigidity of the gender binary, and culturally situated attitudes on male and female embodiment. Going beyond current scholarship on robots and…]]></description>
										<content:encoded><![CDATA[<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/05/Computers-Voice.jpeg" alt="A circuit board embossed with a vocal wave form." width="193" height="300" class="alignleft size-full wp-image-39128">

<blockquote><p>A deconstruction of gender through the voices of Siri, HAL 9000, and other computers that talk</p>

<p>Considering Star Trek, 2001: A Space Odyssey, Her, and more, Liz W. Faber explores contentious questions around gender: its fundamental constructedness, the rigidity of the gender binary, and culturally situated attitudes on male and female embodiment. Going beyond current scholarship on robots and AI to focus on voice-interactive computers, The Computer’s Voice breaks new ground in questions surrounding media, technology, and gender.</p></blockquote>

<p>I did not care for this book. I think I'm too stupid to have understood it properly.  I thought this was going to be about <em>why</em> the current crop of domestic-droids have (mostly) female coded voices. Perhaps looking at the seismic shift from the attitudes of German drivers who once <a href="https://www.sciencedirect.com/science/article/abs/pii/S1071581906000851">rejected a female voice giving them GPS directions</a> to the near universal acceptance of audible gynoids.</p>

<p>Instead, it's a media studies book which focuses exclusively on American TV and film.  I'm not fully versed in modern critical theory, so lots of it went completely over my head. I can appreciate that people might interpret the female-voiced starship Enterprise as a pastel-coloured womb, and the male-voiced HAL9000 as a cold and sterile phallus.  But the stuff about phallic-mothers castrating their Oedipal offspring in a Freudian-frenzy was alien to me.</p>

<p>A large portion of the book is simply reciting the plot of slightly obscure movies. There is some slight analysis of what having a female- or male- voiced computer <em>might</em> tell us about the psyche. But it doesn't go in to any depth. Some of the over-analysis seems a little far fetched to me. Is Picard really regressing inside his mother when he enters the holodeck? Does HAL cutting a life-support cable represent a father snipping his child's umbilical cord? Maybe, but it's all a bit wishy-washy. You can read anything you like into invented symbolism. Sometimes a cigar is just a cigar, and sometimes the colour red is for danger - not for representing the ship's uterine lining.</p>

<p>I suppose I was expecting more of a rigorous analysis of whether the media has influenced the way in which humans expect their robots to behave. Given the wealth of movies and TV shows with speaking-machines, it felt limited to focus on so few examples. I get that Star Trek and 2001 cast a long shadow over everything - but there's so much more to synthetic voices than them.</p>

<p>There was also nothing about the history of <a href="https://en.wiktionary.org/wiki/acousmatic">acousmatic</a> voices. The very earliest ones were male-ish - if only by virtue of being low pitched.</p>

<iframe title="VODER (1939) - Early Speech Synthesizer" width="620" height="465" src="https://www.youtube.com/embed/0rAyrmm7vv0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Is the only difference between male and female voices their pitch? When did the female voice become preferred for recorded announcements? What does constantly barking orders to a disembodied female servant do to your psychology?  None of these questions are answered.</p>

<p>It is obvious that I was expecting a different book. Either a history of vocal-interactions with machines, or a look at how speaking to machines (and having them speak back) affects us. Perhaps even what the implications are for modern feminism. Instead, it's a limited psychoanalysis of an interesting modern phenomenon.</p>

<p>I'm sure the book is great, if you already understand and accept the theories that it is based on - but it was wasted on me.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=39127&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/06/book-review-the-computers-voice-from-star-trek-to-siri-by-liz-w-faber/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA["Alexa? Which bins do I need to take out?" - Reverse engineering the Bexley Council bin collection API]]></title>
		<link>https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/</link>
					<comments>https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 25 Nov 2019 07:46:50 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[Smart Home]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=32975</guid>

					<description><![CDATA[A few years ago I wrote an Alexa skill to see what bin day it was. The skill only worked with my local council - Oxford.  I&#039;ve since moved house and wanted to recreate the service for my new council - Bexley.  Demo   Terence Eden is on Mastodon  @edent  Replying to @edent @AgileAppsGroup Success! Blog post coming soon for my Alexa powered bin day thing. pic.x.com/eCoHMii0nI  ❤️ 3💬 3🔁 007:58 - Mon …]]></description>
										<content:encoded><![CDATA[<p>A few years ago I wrote <a href="https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/">an Alexa skill to see what bin day it was</a>. The skill only worked with my local council - Oxford.</p>

<p>I've since moved house and wanted to recreate the service for my new council - Bexley.</p>

<h2 id="demo"><a href="https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/#demo">Demo</a></h2>

<blockquote class="social-embed" id="social-embed-1183653333392855041" lang=""><header class="social-embed-header"><a href="https://twitter.com/edent" class="social-embed-user"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt=""><div class="social-embed-user-names"> <p class="social-embed-user-names-name">Terence Eden is on Mastodon </p> @edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"> </header> <section class="social-embed-text"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/1183401213175521286">Replying to @edent</a></small> <a href="https://twitter.com/AgileAppsGroup">@AgileAppsGroup</a> Success! Blog post coming soon for my Alexa powered bin day thing. <a href="https://x.com/edent/status/1183653333392855041/video/1">pic.x.com/eCoHMii0nI</a><div class="social-embed-media-grid"><video class="social-embed-video" controls="" src="https://video.twimg.com/ext_tw_video/1183653146851270658/pu/vid/1280x720/tmyNVKjaJNuEWap2.mp4?tag=10" poster="data:image/webp;base64,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" width="550"></video></div></section> <hr class="social-embed-hr"> <footer class="social-embed-footer"><a href=""><span aria-label="3 likes" class="social-embed-meta">❤️ 3</span><span aria-label="3 replies" class="social-embed-meta">💬 3</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="{tweet_date}">07:58 - Mon 14 October 2019</time></a> </footer></blockquote>

<p>Brilliant, eh?</p>

<h2 id="the-api"><a href="https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/#the-api">The API</a></h2>

<p>Bexley Council don't publish an API.  I initially thought about scraping their <a href="https://web.archive.org/web/20200616184740/https://mybexley.bexley.gov.uk/service/Missed_bin_collections">bin collection day web-form</a> but I couldn't work out the calls the site made.</p>

<p>But Bexley have an app! Well, they use <a href="https://web.archive.org/web/20200924204929/https://play.google.com/store/apps/details?id=com.contender.athome.android">the @HOME app</a> along with a bunch of councils.  The app is... not very good. And it isn't particularly secure. Which is good news for me, as I was able to intercept all the traffic between it and its server!</p>

<h3 id="the-api-call"><a href="https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/#the-api-call">The API Call</a></h3>

<p>You need to register an email address along with your home address.  You pass that as your username.  If you know a resident's email address, you can probably find out their bin collection day. I don't know if that's a GDPR thing or not...</p>

<p><code>curl --header "X-email: whatever@example.com" "https://services.athomeapp.net/ServiceData/GetUserRoundJson"</code></p>

<p>The app also passes <code>--header "X-country: gb" --header "X-udprn: 1234567"</code> - that last one is your <a href="https://www.experian.co.uk/business/glossary/udprn/">UDPRN</a> a sort of standard reference for addresses. You don't need to supply them though.</p>

<h3 id="the-response"><a href="https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/#the-response">The Response</a></h3>

<p>You get back JSON about when your bins are going to be collected. I've not yet seen how it handles bank holidays.  I've redacted any person information.</p>

<pre><code class="language-json">{
    "email": "whatever@example.com",
    "udprn": "",
    "managed": true,
    "userrounds": [{
        "roundid": "1234",
        "collectionday": "Fri",
        "containerid": "abcd",
        "collectioninterval": "Every 2 week",
        "containerdescription": "Chargeable garden waste bin",
        "containername": "Chargeable garden waste bin",
        "nextcollectiondates": [{
            "day": "18",
            "month": "10",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "18 10 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "1",
            "month": "11",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "01 11 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "15",
            "month": "11",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "15 11 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "29",
            "month": "11",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "29 11 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "13",
            "month": "12",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "13 12 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "27",
            "month": "12",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "27 12 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }],
        "containeritems": null,
        "roundbitmask": 0,
        "selected": true
    }, {
        "roundid": "2345",
        "collectionday": "Fri",
        "containerid": "xyz",
        "collectioninterval": "Every week",
        "containerdescription": "Food recycling box",
        "containername": "Food recycling box",
        "nextcollectiondates": [{
            "day": "18",
            "month": "10",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "18 10 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }],
        "containeritems": null,
        "roundbitmask": 0,
        "selected": true
    }, {
        "roundid": "987654",
        "collectionday": "Fri",
        "containerid": "qwerty",
        "collectioninterval": "Every week",
        "containerdescription": "Glass box",
        "containername": "Glass box",
        "nextcollectiondates": [{
            "day": "18",
            "month": "10",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "18 10 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }],
        "containeritems": null,
        "roundbitmask": 0,
        "selected": true
    }, {
        "roundid": "asdf",
        "collectionday": "Fri",
        "containerid": "zxcvb",
        "collectioninterval": "Every week",
        "containerdescription": "Paper &amp; Cardboard",
        "containername": "Paper &amp; Cardboard",
        "nextcollectiondates": [{
            "day": "18",
            "month": "10",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "18 10 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }],
        "containeritems": null,
        "roundbitmask": 0,
        "selected": true
    }, {
        "roundid": "poiuyt",
        "collectionday": "Fri",
        "containerid": "lkjhg",
        "collectioninterval": "Every week",
        "containerdescription": "Plastic and Cans",
        "containername": "Plastic and Cans",
        "nextcollectiondates": [{
            "day": "18",
            "month": "10",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "18 10 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }],
        "containeritems": null,
        "roundbitmask": 0,
        "selected": true
    }, {
        "roundid": "qazwsx",
        "collectionday": "Fri",
        "containerid": "wsxedc",
        "collectioninterval": "Every 2 week",
        "containerdescription": "Waste wheeled bin",
        "containername": "Waste wheeled bin",
        "nextcollectiondates": [{
            "day": "25",
            "month": "10",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "25 10 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "8",
            "month": "11",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "08 11 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "22",
            "month": "11",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "22 11 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "6",
            "month": "12",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "06 12 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }, {
            "day": "20",
            "month": "12",
            "year": "2019",
            "hours": "0",
            "mins": "0",
            "datestring": "20 12 2019 12:00",
            "isaltered": false,
            "alteredmessage": null,
            "weeknumber": 0
        }],
        "containeritems": null,
        "roundbitmask": 0,
        "selected": true
    }]
}
</code></pre>

<p>Yeah, not the greatest scrap of JSON I've seen. And a datestring of <code>18 10 2019 12:00</code> is particularly painful.</p>

<p>But, you know what? It gets the job done.  I was able to parse through it to get what bin day it is.</p>

<h2 id="building-the-skill"><a href="https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/#building-the-skill">Building the skill</a></h2>

<p>I've written <a href="https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/">a quick guide to self-hosting an Alexa skill</a>.</p>

<p>I can't release this to the public because it uses personal information. And I don't want to be responsible for storing your email address or physical address.</p>

<p>The <a href="https://gitlab.com/edent/bexley-bins-alexa-skill">crappy source code is on GitLab</a>. Enjoy!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=32975&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/11/alexa-which-bins-do-i-need-to-take-out-reverse-engineering-the-bexley-council-bin-collection-api/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		<enclosure url="https://video.twimg.com/ext_tw_video/1183653146851270658/pu/vid/1280x720/tmyNVKjaJNuEWap2.mp4?tag=10" length="1078967" type="video/mp4" />

			</item>
		<item>
		<title><![CDATA[Quick and Dirty Self-Hosted Alexa Skills (2019)]]></title>
		<link>https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/</link>
					<comments>https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 05 Sep 2019 06:50:44 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[skill]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=32631</guid>

					<description><![CDATA[I hate creating Alexa skills. What should be a 3-click process inevitably ends up requiring trips to multiple websites, to set up weird parameters, and reading outdated tutorials for obsolete libraries.  So this is how to create a self-hosted Skill, using PHP. It runs on your own server and doesn&#039;t require any interaction.  The Skill  At a basic level, all your website has to do is spit out a…]]></description>
										<content:encoded><![CDATA[<p>I hate creating Alexa skills. What should be a 3-click process inevitably ends up requiring trips to multiple websites, to set up weird parameters, and reading outdated tutorials for obsolete libraries.</p>

<p>So this is how to create a self-hosted Skill, using PHP. It runs on your own server and doesn't require any interaction.</p>

<h2 id="the-skill"><a href="https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/#the-skill">The Skill</a></h2>

<p>At a basic level, all your website has to do is spit out <a href="https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#standard-response-to-canfulfillintentrequest-launchrequest-or-intentrequest-example">a piece of JSON for Alexa</a> to read out.</p>

<pre><code class="language-php">//   Set the correct header for JSON data
header('Content-Type: application/json');
//   Set the response
$response = [
  "response" =&gt; [
    "outputSpeech" =&gt; [
      "type" =&gt; "PlainText",
      "text" =&gt; "I'm a little teapot"
    ]
  ]
];
echo json_encode($response);
</code></pre>

<p>That's it.</p>

<p>This is perfect for when you have a simple query - "Yo! Alexa! Bus time?" - one question, no parameters.</p>

<p>OK, you can make <a href="https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-a-web-service.html#verify-request-sent-by-alexa">sure that the request genuinely came from Alexa</a>, and do all sorts of certificate checks. But why bother? Totally unnecessary for a personal skill.</p>

<p>Obviously, you can do some programming make the text say <code>$whatever</code>.</p>

<p>That was easy, right?</p>

<h2 id="the-amazon-side"><a href="https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/#the-amazon-side">The Amazon Side</a></h2>

<p>OK kid, this is where it gets complicated.</p>

<p>For this you will need an Amazon developer account. Getting one is beyond the scope of this tutorial.</p>

<p>Go to <a href="https://developer.amazon.com/alexa/console/ask"></a><a href="https://developer.amazon.com/alexa/console/ask">https://developer.amazon.com/alexa/console/ask</a></p>

<p>Click the "Create Skill" button.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console.png" alt="The button on a website." width="775" height="248" class="aligncenter size-full wp-image-32632"></p>

<p>Give your skill a name. It defaults to USA! USA! USA! English - even though Amazon knows your location and the location of your Echo. If you think AI is hard, that ain't nothing compared to localisation.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console1.png" alt="Create a new skill screen." width="477" height="300" class="aligncenter size-full wp-image-32633">

<p>You need to select a Custom skill and to "Provision your own endpoint".</p>

<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console2.png" alt="" width="280" height="197" class="aligncenter size-medium wp-image-32635"><img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console3.png" alt="" width="280" height="218" class="aligncenter size-full wp-image-32634"></p>

<p>If you try to use AWS Lambdas you'll be in for a world of pain. Don't even bother - they are a nightmare for a beginner to use.</p>

<p>Now scroll <em>all the way</em> back to the top of the website to click the "Create Skill" button. You'd think that after filling in a form, the "next" button would be at the bottom. But that's too easy. If you think AI is hard, that ain't nothing compared to designing an easy to use form.</p>

<p>We're going to choose the "Start From Scratch" template.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console4.png" alt="" width="745" height="325" class="aligncenter size-full wp-image-32636">
This has nothing to do with the Scratch programming language. Which is a shame, because Scratch is a great language and well designed for complex voice interaction models.</p>

<p>Before doing anything else, set up your "endpoint".  This is the website where you uploaded your PHP file.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console5.png" alt="" width="937" height="356" class="aligncenter size-full wp-image-32637">
Your website needs to support https - you may need to change the certificate type on this page if Amazon has difficulties with it.
Hit "Save Endpoints" - again, it is at the top of the screen. Because people naturally work from the bottom of the form to the top of the form.</p>

<p>Next up, we need a default intent. It doesn't really matter what you put in here. This is not a complex skill which can take multiple routes. We just want something to happen whenever it is launched.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console6.png" alt="" width="693" height="224" class="aligncenter size-full wp-image-32638"></p>

<p>Because Alexa isn't really an AI - we have to give lots of "sample" utterances. So, if you want bus times, you might add "next bus", "buses", "when is my bus" - and every variation you can think of.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console7.png" alt="" width="1090" height="281" class="aligncenter size-full wp-image-32639">
Now hit "Build Model" at the top. Once that's done, go to test.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/08/Screenshot_2019-08-22-Alexa-Developer-Console8.png" alt="" width="1110" height="137" class="aligncenter size-full wp-image-32640">
Set the dropdown to "Development".</p>

<p>That's it! You're finally done!  You can test the skill by either typing "whatever" into the text box, or by saying "Alexa! Whatever."</p>

<p>Alexa will read out whatever is in your PHP script.</p>

<p>I wish it were easier. Why can't I just say "When I ask <em>this</em> question, reply with the data from <em>that</em> website."  Sites like IFTTT and Zapier make it so easy to create services - I wish there was a Voice Assistant which was easy to make skills for.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=32631&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Alexa Skills - get custom slot names using Flask-Ask]]></title>
		<link>https://shkspr.mobi/blog/2019/06/alexa-skills-get-custom-slot-names-using-flask-ask/</link>
					<comments>https://shkspr.mobi/blog/2019/06/alexa-skills-get-custom-slot-names-using-flask-ask/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 17 Jun 2019 07:22:32 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[hackday]]></category>
		<category><![CDATA[nhshd]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=32311</guid>

					<description><![CDATA[Amazon encourages developers to use Flask-Ask - the handy Python library for working with Alexa. Sadly, the project has been abandoned. They no longer take pull requests, you can&#039;t raise bugs against it, and the documentation is incomplete.  So this is how I solved an annoying problem - how to get the name of a custom slot.  Here&#039;s the code, with a fuller explanation afterwards.  from flask…]]></description>
										<content:encoded><![CDATA[<p>Amazon encourages developers to use <a href="https://github.com/johnwheeler/flask-ask">Flask-Ask</a> - the handy Python library for working with Alexa. Sadly, <a href="https://twitter.com/_johnwheeler/status/1131728459028238337">the project has been abandoned</a>. They no longer take pull requests, you can't raise bugs against it, and the documentation is incomplete.</p>

<p>So this is how I solved an annoying problem - how to get the name of a custom slot.</p>

<p>Here's the code, with a fuller explanation afterwards.</p>

<pre><code class="language-python">from flask import Flask, render_template, request
from flask_ask import Ask, statement, question, session
app = Flask(__name__)
ask = Ask(app, '/')

@ask.intent("YourIntentName")
def your_intent_name():
    content = request.get_json()
    name = content['request']['intent']['slots']['YOUR_SLOT_NAME']['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['name']
</code></pre>

<p>Yeuch! What's going on?</p>

<p>Alexa lets us define custom slot names - these can be associated with any spoken text. For example, I might want the slot name "car" to be sent whether the user says "car" or "automobile" or "vehicle" or any other synonym.</p>

<p>In my case, I want to send my API the ID Code of a hospital.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/06/Alexa-Skills-Page.png" alt="Alexa Skills Page." width="1006" height="760" class="aligncenter size-full wp-image-32312">

<p>If the user says "John Radcliff" or "Oxford" or "John Radcliff Hospital" - then my API should receive the ID <code>RTH08</code>.  It can then use that ID in a separate API call.</p>

<p>Here's the JSON that Alexa sends our API (I've truncated it for ease of reading).</p>

<pre><code class="language-JSON">{
    "request": {
        "type": "IntentRequest",
        "requestId": "amzn1.echo-api.request.1234",
        "timestamp": "2019-06-17T06:54:52Z",
        "locale": "en-GB",
        "intent": {
            "name": "CarPark",
            "confirmationStatus": "NONE",
            "slots": {
                "hospital": {
                    "name": "hospital",
                    "value": "John radcliff",
                    "resolutions": {
                        "resolutionsPerAuthority": [
                            {
                                "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.1234.hospitals",
                                "status": {
                                    "code": "ER_SUCCESS_MATCH"
                                },
                                "values": [
                                    {
                                        "value": {
                                            "name": "RTH08",
                                            "id": "abc123"
                                        }
                                    }
                                ]
                            }
                        ]
                    },
                }
            }
        }
    }
}
</code></pre>

<p>A bit verbose, but easy enough to parse.</p>

<p>I've <a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/">moaned before about Alexa skill development</a> - but it is getting worse.  As you can see from the above screenshot, the development website's contrast isn't great - which makes building a skill physically painful.</p>

<p>Add to that the outdated tutorials, the weird terminology, the multiple sites to use, broken links, and abandoned libraries... It's hard to feel enthusiastic about building more skills.</p>

<p>Amazon have gone down the classic route of <a href="https://web.archive.org/web/20190922125800/https://developer.amazon.com/de/en-gb/alexa-skills-kit/alexa-developer-skill-promotion">paying developers to build for their platform</a>. But I don't think that's enough.</p>

<p><a href="https://developer.amazon.com/de/en-gb/alexa-skills-kit/alexa-developer-skill-promotion"><img src="https://shkspr.mobi/blog/wp-content/uploads/2019/06/Screenshot_2019-06-17-https-developer-amazon-com.png" alt="     Publish your very first, new Alexa skill during the promotion period and earn an Amazon Smart Plug.     Publish three new Alexa skills during the promotion period, where one of them is used by at least 150 unique users within the first 30 days after being approved by Amazon for publication, and earn a €50 (GBP for UK) Amazon Online Store voucher.     Add the Alexa Presentation Language to one of your skills (newly published or updated) during the promotion period and reach at least 150 unique users per month for one month, and you will earn an Amazon Echo Show.     (Only for Developers residing in Germany, Austria, United Kingdom, Ireland): Add in-skill purchasing to your skill (newly published or updated) during the promotion period and reach at least 150 unique users per month and over €10/£10 in revenue per month for one month, and you will earn a voucher for the AWS Certified Alexa Skill Builder exam fee." width="722" height="293" class="aligncenter size-full wp-image-32317"></a></p>

<p>The Alexa team need to work on the developer experience. A GUI like NODE-RED could be used to help build skills <em>in one place</em>. Why is it so complicated to deploy and test skills? Where are the official libraries which "just work"?</p>

<p>I honestly believe that one of the things holding back voice assistants from their full potential is the poor developer experience.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=32311&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/06/alexa-skills-get-custom-slot-names-using-flask-ask/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Building an Alexa-Powered Electric Blanket]]></title>
		<link>https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/</link>
					<comments>https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 28 Nov 2018 12:38:27 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[Smart Home]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=30814</guid>

					<description><![CDATA[One evening, my wife turned to me in bed and said, &#34;Winter is coming...&#34;  Well, what she actually said was &#34;Get your frozen feet away from me, you cold-blooded monster!&#34;  The only way to save our marriage?  HOOK OUR BED UP TO THE INTERNET!  I couldn&#039;t find an electric blanket with IoT connectivity - so I built my own.  Why?  As a person with cold feet, I want to yell at my robot servant to…]]></description>
										<content:encoded><![CDATA[<p>One evening, my wife turned to me in bed and said, "Winter is coming..."</p>

<p>Well, what she actually said was "Get your frozen feet away from me, you cold-blooded monster!"</p>

<p>The only way to save our marriage?  HOOK OUR BED UP TO THE INTERNET!</p>

<p>I couldn't find an electric blanket with IoT connectivity - so I built my own.</p>

<h2 id="why"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#why">Why?</a></h2>

<p>As a person with cold feet, I want to yell at my robot servant to pre-heat the bed, so that it is toasty warm by the time I've finished my evening ablutions.</p>

<h2 id="the-blanket"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#the-blanket">The Blanket</a></h2>

<p>The key was finding a blanket with dual-controls, which <em>also</em> could turn on from the plug socket.  Lots of blankets have a separate control unit.  I found this one which started heating as soon as it received power from the plug.</p>

<p><a href="https://amzn.to/3BVrH9j"><img src="https://images-na.ssl-images-amazon.com/images/I/71r1-j95wVL._SL600_.jpg" width="600" height="360" alt="An electric blanket." class="aligncenter size-medium"></a></p>

<p>I'm sure there are many different models available. Choose whichever one suits your needs, but make sure it defaults to "on".</p>

<p>Cost: <a href="https://amzn.to/3BVrH9j">£70 from Amazon</a></p>

<h2 id="the-plug"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#the-plug">The Plug</a></h2>

<p>My side of the bed is controlled by a <a href="https://shkspr.mobi/blog/2018/08/review-meross-smart-plugs-and-surge-protector/">Meross smart plug</a>.
<a href="https://amzn.to/2Mb5Ori"><img src="https://shkspr.mobi/blog/wp-content/uploads/2018/08/Plug-socket.jpg" alt="Pair of plug sockets." width="640" height="386" class="aligncenter size-full wp-image-30151"></a></p>

<p>Pretty simple. Plug in, use the app to configure the WiFi. Done.  It can now be controlled by a smartphone.</p>

<p>Cost: <a href="https://amzn.to/2Mb5Ori">£15 on Amazon</a></p>

<h2 id="the-other-plug"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#the-other-plug">The Other Plug</a></h2>

<p>I had a <a href="https://shkspr.mobi/blog/2017/05/review-sonoff-s20-wifi-plug/">Sonoff S20 smart plug</a> laying around.  It's an older model - but still works.</p>

<p><a href="https://shkspr.mobi/blog/2017/05/review-sonoff-s20-wifi-plug/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2017/05/Sonoff-S20.jpg" alt="A schematic of a smart plug." width="1024" height="677" class="aligncenter size-full wp-image-27051"></a></p>

<p>Again, use the app to configure. Only takes a few minutes.</p>

<p>Cost: <a href="https://amzn.to/2TQMQGB">£10 on Amazon</a></p>

<h2 id="alexa"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#alexa">Alexa</a></h2>

<p>Configuring an <a href="https://shkspr.mobi/blog/2017/06/alexa-powered-smarthome-control-for-sonoff/">Alexa for a smarthome used to be a pain</a> - but it is much improved.  Once the "Skills" are installed for your plug sockets, the individual smart things can be renamed and configured.  Still takes a little bit of time, but fairly simple.</p>

<p>I've set up a group called "Electric Blanket".  It contains both plugs.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/11/Electric-blanket-in-Alexa.png" alt="Electric blanket showing in Alexa's settings screen." width="270" height="526" class="aligncenter size-full wp-image-30816"></p>

<p>I've given a unique name to each side of the blanket.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/11/Separate-switches.png" alt="Alexa settings screen showing Terry's bed and Liz's bed." width="540" height="542" class="aligncenter size-full wp-image-30815">

<p>For some reason, Alexa thinks the Meross is a switch and the Sonoff is a plug. What's the difference? Who knows!</p>

<p>I can say "Alexa, switch on the electric blanket" or "switch on Liz's side of the bed."  But that's about the limit.</p>

<p>Cost: <a href="https://amzn.to/2QnSUHV">£25 on Amazon</a></p>

<h2 id="in-action"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#in-action">In Action</a></h2>

<p>It works!</p>

<iframe title="Alexa Powered Electric Blanket" width="620" height="349" src="https://www.youtube.com/embed/G1opkwpR9yw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<h2 id="it-doesnt-quite-work"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#it-doesnt-quite-work">It doesn't quite work</a></h2>

<p>There are some flaws in my plan.</p>

<p>Alexa doesn't recognise voices. So I can't say "Turn on <em>my</em> side of the bed" and my wife can't say "turn on <em>his</em> side of the bed."  As I've said before, voice interfaces are like the command-line. There's no room for error.</p>

<p>Secondly, the electric blanket automatically shuts off after an hour - but the plug socket stays live.  In order to turn on the blanket again, I need to turn it off first.  There is no way to tell Alexa to switch on a socket for an hour and then switch it off.  So there are two possible solutions:</p>

<ol>
<li>Set up a schedule in the plug's app to automatically turn off the plug at, say, 10 AM.</li>
<li>Every time we want to use the blanket, tell Alexa to turn it off first.</li>
</ol>

<p>Neither of those are particularly satisfactory.</p>

<p>There's also the minor risk that attackers could break through my firewall and burn down my house. <code>WONTFIX</code>.</p>

<h2 id="conclusion"><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/#conclusion">Conclusion</a></h2>

<p>For around £100 you can self-built an IoT heated blanket.  It mostly works. This will save your marriage, 100% guaranteed.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=30814&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Knowledge Illusions]]></title>
		<link>https://shkspr.mobi/blog/2018/04/knowledge-illusions/</link>
					<comments>https://shkspr.mobi/blog/2018/04/knowledge-illusions/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 29 Apr 2018 10:32:07 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=29528</guid>

					<description><![CDATA[Optical Illusions trick your brain into seeing something that isn&#039;t there. Whether it is spirals which don&#039;t exist, movements which don&#039;t occur, or faces in curved lines - our optic centres are trivially easy to fool.    Humans are not alone in this cognitive deficiency. Other animals are also conned into believing something which isn&#039;t true.    This tomfoolery is not restricted to animals -…]]></description>
										<content:encoded><![CDATA[<p>Optical Illusions trick your brain into seeing something that isn't there. Whether it is spirals which don't exist, movements which don't occur, or faces in curved lines - our optic centres are trivially easy to fool.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/04/rotating-snake-illusion.png" alt="An optical illusion - it looks like the image is moving. It isn't." width="800" height="599" class="aligncenter size-full wp-image-29556">

<p>Humans are not alone in this cognitive deficiency. Other animals are also conned into believing something which isn't true.</p>

<iframe title="My cat can see the rotating snake illusion!" width="620" height="349" src="https://www.youtube.com/embed/CcXXQ6GCUb8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>This tomfoolery is not restricted to animals - computers can also be mesmerised.</p>

<ul>
<li>I've written before about <a href="https://shkspr.mobi/blog/2014/06/pareidolia-and-computer-vision/">AI suffering from Pareidolia</a>.</li>
<li><a href="https://cvdazzle.com/">Specially crafted make-up</a> can be used to induce Prosopagnosia.</li>
<li><a href="https://www.theverge.com/2017/9/7/16265906/ultrasound-hack-siri-alexa-google">Infrasound</a> can be an effective way to cause auditory psychosis in machines.</li>
</ul>

<p>But there is something more insidious than that to consider. If you understand where an AI derives its information, you can cause a "Knowledge Illusion" - make it think it knows something, even though it is false.</p>

<p>This isn't quite the notion of influencing an AI while it is still young and seeing those false beliefs propagate forwards - but about subtly corrupting the source of data which an AI relies on for instant learning.</p>

<p>Here's an example. Which actors have played Doctor Who? If you're a fan of the series, you might be able to reel off all of them (bonus points for remembering Peter Cushing!) but if you're not... How would you find out? What sources would you trust? How would you corroborate the information?</p>

<p>Let's see what Amazon's Alexa thinks the answer is.</p>

<iframe title="Who does Alexa think plays Doctor Who?" width="620" height="465" src="https://www.youtube.com/embed/kxGwTihRWq0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Look, I love Tim Roth - he's an incredible actor. Would he make a good Doctor Who? Maybe - but it's a role that has eluded him.  And yet Alexa is convinced he once played the part.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/04/Alexa-Screenshot-Doctor-Who-fs8.png" alt="Screenshot of the Alexa app. She thinks Tim Roth played Doctor Who." width="540" height="589" class="aligncenter size-full wp-image-29560">

<p>What is causing this knowledge illusion?  What seemingly authoritative source is corrupting the data?</p>

<p>Googling "Tim Roth Doctor Who" brings up a few stories from the last couple of years which indicate that he might once have been in the running for the part.  Wikipedia doesn't list him in their page about the show. So where is this illusion coming from?</p>

<p>I <em>think</em> the answer is IMDb's listing for the actor.  Nestled halfway down the page is this:</p>

<p><a href="https://www.imdb.com/name/nm0000619/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2018/04/Tim-Roth-Doctor-Who-fs8.png" alt="The IMDB page for Tim Roth. He has a minor credit for playing the character of Doctor Who in an episode of the comedy show &quot;Robot Chicken&quot;." width="703" height="279" class="aligncenter size-full wp-image-29559"></a></p>

<p>Tim once played <em>the voice of</em> Doctor Who in a comedy skit on Robot Chicken. That's it. A single episode.</p>

<p>I assume that Alexa searches the IMDb API for the character name and picks out the top hits.  For some reason, Tim Roth is there but William Hartnell isn't.</p>

<p>And there we have it. A dodgy response from an API call to a lightly moderated service induces false memories in our artificial intelligence.  There's no corroboration and no sanity checking. Alexa's intelligence is just an illusion.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=29528&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/04/knowledge-illusions/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Solar Battery and Alexa - in 30 lines of code]]></title>
		<link>https://shkspr.mobi/blog/2017/11/solar-battery-and-alexa-in-30-lines-of-code/</link>
					<comments>https://shkspr.mobi/blog/2017/11/solar-battery-and-alexa-in-30-lines-of-code/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 04 Nov 2017 10:38:49 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[solar]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=28636</guid>

					<description><![CDATA[Amazon Alexa is a fun little bit of kit. But it can be tricky getting it to work with all your smart devices.  Not every company has an Alexa skill - just like not every company has an app.  Using Flask-Ask it is possible to bring Alexa smarts to a range of previously mute devices.  Alexa coding works on &#34;intents&#34; - the following is a simple intent. That is, you can only ask the skill one…]]></description>
										<content:encoded><![CDATA[<iframe title="Moixa Battery and Amazon Echo" width="620" height="349" src="https://www.youtube.com/embed/RpQqaFPbxsA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Amazon Alexa is a fun little bit of kit. But it can be tricky getting it to work with all your smart devices.  Not every company has an Alexa skill - just like not every company has an app.</p>

<p>Using <a href="https://github.com/johnwheeler/flask-ask">Flask-Ask</a> it is possible to bring Alexa smarts to a range of previously mute devices.</p>

<p>Alexa coding works on "intents" - the following is a simple intent. That is, you can only ask the skill one thing.  No state is maintained, no multiple commands to get right, no complexity.  This gets information from a single source and speaks it.</p>

<h2 id="code"><a href="https://shkspr.mobi/blog/2017/11/solar-battery-and-alexa-in-30-lines-of-code/#code">Code</a></h2>

<p>The basic Python is pretty simple and can be adapted to query almost any basic JSON API.  Let me walk you through it.</p>

<p>All the boilerplate needed to set up the skill:</p>

<pre>import logging
from operator import itemgetter

import requests
from flask import Flask
from flask_ask import Ask, statement

app = Flask(__name__)
ask = Ask(app, '/')
logger = logging.getLogger()

@ask.launch
def launch():
    return stats()
</pre>

<p>The API that you want to call. This is a basic JSON API which doesn't require authentication.</p>

<pre>ENDPOINT = "https://example.com/api/maslow.json"
</pre>

<p>Here's the main part of the Skill.  When the intent is triggered, call the API.  Get the data and format it for speech.  If there was an error, tell the user.</p>

<p>Make sure that the name of the intent is <em>identical</em> to the one you set up in the Alexa Developer console.</p>

<pre>@ask.intent("BatteryIntent")
def stats():
    r = requests.get(ENDPOINT)
    data = r.json()

    if r.status_code == 200:
        percent = data['battery/amphours']
        speech = "Your Moixa battery is at " + str(int(round(percent))) + " percent capacity right now."
    else:
        speech = "There was a problem connecting to the battery."

    logger.info('speech = {}'.format(speech))
    return statement(speech)
</pre>

<p>Short and easy.</p>

<h2 id="deploying"><a href="https://shkspr.mobi/blog/2017/11/solar-battery-and-alexa-in-30-lines-of-code/#deploying">Deploying</a></h2>

<p>Again, Amazon don't make it easy to deploy Alexa skills - here's <a href="https://developer.amazon.com/blogs/alexa/post/8e8ad73a-99e9-4c0f-a7b3-60f92287b0bf/new-alexa-tutorial-deploy-flask-ask-skills-to-aws-lambda-with-zappa">a guide to getting started using Zappa</a>.</p>

<p>Remember, Alexa is <em>not</em> AI. You must painstakingly type in all the "utterances" that you think your users might say to activate the skill.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/09/Alexa-Utterances-fs8.png" alt="A list of phrases used to activate the device" width="820" height="311" class="aligncenter size-full wp-image-28639">

<h2 id="problems"><a href="https://shkspr.mobi/blog/2017/11/solar-battery-and-alexa-in-30-lines-of-code/#problems">Problems</a></h2>

<p>There is one major problem with retrofitting Alexa skills.</p>

<p>Lots of Internet connected devices have no ability to log in remotely - and certainly don't have the OAuth systems that Amazon demands.  Alexa has no ability to directly connect to IP addresses on its own subnets.</p>

<p>This means most skills will need hard-coded credentials - and a way to traverse into your network.</p>

<p>In short, this means means they can't be shared on the Amazon store.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=28636&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/11/solar-battery-and-alexa-in-30-lines-of-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Alexa - what bin day is it?]]></title>
		<link>https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/</link>
					<comments>https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 04 Jul 2017 11:05:02 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[council]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[oxford]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=25465</guid>

					<description><![CDATA[Bin day is the most magical time of the week! Children of all ages cry &#34;Which bins is it?! Oh! Which bins?&#34;    Is today recycling day? Or green waste day? Or humble landfill day? Should my food caddy go out? Gosh! Who can keep track?  I mean, obviously I could look at my calendar. Or sign up for free SMS alert. Or use push notifications in their app. But where&#039;s the fun in that?  &#34;Alexa...&#34;   …]]></description>
										<content:encoded><![CDATA[<p>Bin day is the most magical time of the week! Children of all ages cry "Which bins is it?! Oh! Which bins?"</p>

<p><a href="https://www.flickr.com/photos/dave-goodman/3609172860/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2017/07/Row-of-recycling-bins.jpg" alt="Row of recycling bins - photo by  Dave Goodman" width="1024" height="480" class="aligncenter size-full wp-image-25468"></a></p>

<p>Is today recycling day? Or green waste day? Or humble landfill day? Should my food caddy go out? Gosh! Who can keep track?  I mean, obviously I could look at my calendar. Or <a href="https://www.oxford.gov.uk/info/20250/bins/162/bin_collection_reminders">sign up for free SMS alert</a>. Or use push notifications in <a href="https://play.google.com/store/apps/details?id=com.cloud9technologies.oxford">their app</a>. But where's the fun in that?</p>

<p>"<a href="https://amzn.to/2tLmlJ3">Alexa</a>..."</p>

<video width="640" height="360" controls="" src="https://shkspr.mobi/blog/wp-content/uploads/2017/07/Oxford-Bins-97dQbkuQtUM.mp4">

<p>The code I've written uses Oxford City Council's civic data APIs - which will deal with bank holidays and other issues.</p>

<p>I've written before on <a href="https://shkspr.mobi/blog/2017/07/uk-flood-forecast-on-amazon-alexa/">how to build a Flash Briefing skill</a>.  You just need to host a scrap of JSON somewhere. In this case:</p>

<pre><code>{
  "uid": "https://example.com/bins/",
  "updateDate": "2017-07-04T00:00:00+01:00",
  "titleText": "Bins",
  "mainText": "Today's bin collection is Green Refuse Bins and Food Caddies",
  "redirectionUrl": "https://www.oxford.gov.uk/homepage/154/find_your_bin_collection_day"
}
</code></pre>

<h2 id="why-im-not-releasing-this-skill-to-the-public"><a href="https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/#why-im-not-releasing-this-skill-to-the-public">Why I'm not releasing this skill to the public</a></h2>

<p>There's no <em>official</em> API yet.  I am using some... errr... "borrowed" credentials I found inside the official <a href="https://play.google.com/store/apps/details?id=com.cloud9technologies.oxford">Oxford City Council app</a>.  I'm chatting to someone at the council to see if there's a more official route I can take.</p>

<p><ins datetime="2017-07-05T14:03:52+00:00">Update! I'm delighted to say that there <em>is</em> an <strong>open</strong> API! Details at the end.</ins></p>

<p>Secondly, I'm afraid of handling personal data. The bins API requires a home's UPRN - <a href="https://www.ordnancesurvey.co.uk/about/news/2015/uprn-release-sharing-location-data.html">Unique Property Reference Number</a>.  Most people don't know their number, which means I'd need to integrate address lookup into the system. That would mean I would know which of my neighbours has purchased an Amazon Echo.</p>

<p>I'd also have to store that data, process it, and generally have to comply with data protection laws.  Which is a bit of a faff for a five-minute project.</p>

<h2 id="code"><a href="https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/#code">Code</a></h2>

<p>If you have access to the API, you can run this PHP code and set up your own Alexa skill.</p>

<p>For postcode to UPRN lookups:</p>

<pre><code>https://apps.cloud9technologies.com/oxford/citizenmobile/openapi/addresses?postcode=OX1%203HZ
</code></pre>

<p>For bin lookups (last value is the UPRN):</p>

<pre><code>https://apps.cloud9technologies.com/oxford/citizenmobile/openapi/wastecollections/200004675068
</code></pre>

<p><strong>WARNING</strong> this really is a scrap of code that I threw together early on a Tuesday morning. No guarantees of style, substance, or efficacy.  Released under the <a href="https://opensource.org/licenses/MIT">MIT License</a></p>

<pre><code>&lt;?php

$wasteURL = "https://apps.cloud9technologies.com/oxford/citizenmobile/openapi/wastecollections/";
$uprn = "";

//  Get the data
$data = file_get_contents($wasteURL . $uprn);

//  Data is in JSON
$json = json_decode($data, true);

//  Strip out unneeded elements
unset($json["WasteCollectionDates"]["UPRN"]);

//  An array to hold the collection information
$collections = array ();

//  Loop through the array
//  Store the data as timestamp=&gt;bins
foreach ($json["WasteCollectionDates"] as $key =&gt; $value) {
    $details =  $value["ContainerDescription"];
    $date = strtotime($value["CollectionDate"]);
    if ($collections[$date] != null)
    {
        //  Multiple bins can be collected each day
        $details = " and " . $details;
    }

    //  Ignore empty elements
    if ($date != null)
    {
        $collections[$date] .= $details;
    }
}

//  Date order the array
ksort($collections);
//  Place pointer at the start of array
reset($collections);

//  The array key is a UNIX timestamp
$first_date = key($collections);
$first_bins = $collections[$first_date];

//  Is the next bin collection today, tomorrow, or further in the future?
//  https://stackoverflow.com/a/25623230/1127699
$today = new DateTime(); // This object represents current date/time

$today-&gt;setTime( 0, 0, 0 ); // reset time part, to prevent partial comparison

//  Get the timezone as the bins API doesn't return it
$timezone = $today-&gt;getTimezone();

//  What is the date of the next bin collection?
$match_date = DateTime::createFromFormat("U", $first_date);
//  Set the timezone based on the local time
$match_date-&gt;setTimezone($timezone);
$match_date-&gt;setTime( 0, 0, 0 ); // reset time part, to prevent partial comparison

$diff = $today-&gt;diff( $match_date );
$diffDays = (integer)$diff-&gt;format( "%R%a" ); // Extract days count in interval

$headline = "";

switch( $diffDays ) {
    case 0:
        $headline = "Today's bin collection is " . $first_bins;
        break;
    case +1:
        $headline = "Tomorrow's bin collection is " . $first_bins;
        break;
    default:
        $headline = "The next bin collection is " . $first_bins . " on ". $match_date-&gt;format('l');
}

//  Set the correct header for JSON data
header('Content-Type: application/json');
?&gt;{
  "uid": "https://example.com/bins/",
  "updateDate": "&lt;?php echo $today-&gt;format(DateTime::ATOM); ?&gt;",
  "titleText": "Bins",
  "mainText": "&lt;?php echo $headline; ?&gt;",
  "redirectionUrl": "https://www.oxford.gov.uk/homepage/154/find_your_bin_collection_day"
}
</code></pre>

<h2 id="thanks"><a href="https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/#thanks">Thanks!</a></h2>

<p>If you've enjoyed this post, please leave a comment or you can <a href="https://www.amazon.co.uk/gp/registry/wishlist/ref=cm_wl_search_1?ie=UTF8&amp;cid=A327FR3Q472EBX&amp;tag=shksprblogwish-21">get me something from my Amazon wishlist</a></p>
</video><img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=25465&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/07/alexa-what-bin-day-is-it/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[UK Flood Forecast on Amazon Alexa]]></title>
		<link>https://shkspr.mobi/blog/2017/07/uk-flood-forecast-on-amazon-alexa/</link>
					<comments>https://shkspr.mobi/blog/2017/07/uk-flood-forecast-on-amazon-alexa/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 03 Jul 2017 11:26:15 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Open Data]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=25456</guid>

					<description><![CDATA[You can now get the UK&#039;s flood forecast as part of your Flash Briefing on Amazon&#039;s Alexa.        I&#039;ve tried previously to create an interactive Alexa skill - it did not go well.  This time, I thought I&#039;d create an easier skill - a Flash Briefing.  You ask Alexa for your daily news report and it reads out items that you&#039;ve configured - news, weather, traffic, that sort of thing.  For a basic…]]></description>
										<content:encoded><![CDATA[<p>You can now get the <a href="https://www.amazon.co.uk/dp/B073NQC1PS/">UK's flood forecast as part of your Flash Briefing on Amazon's Alexa</a>.</p>

<video width="640" height="360" controls="">
  <source src="https://shkspr.mobi/blog/wp-content/uploads/2017/07/UK-Flood-Forecast-on-Amazon-Alexa-VNuprGcdea8.mp4" type="video/mp4">
</video>

<p>I've tried previously to create an interactive Alexa skill - <a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/">it did not go well</a>.  This time, I thought I'd create an easier skill - a Flash Briefing.  You ask Alexa for your daily news report and it reads out items that you've configured - news, weather, traffic, that sort of thing.</p>

<p>For a basic skill, all you need is a tiny scrap of JSON.  In this case:</p>

<pre><code>{
  "uid": "https://example.com/flood/index.php",
  "updateDate": "2017-07-02T09:30:00Z",
  "titleText": "UK Flood Forecast",
  "mainText": "The overall flood risk is VERY LOW for the next five days. Minor surface water flooding impacts are possible, but not expected, on Thursday.",
  "redirectionUrl": "https://flood-warning-information.service.gov.uk/"
}
</code></pre>

<p>If you can dynamically generate something like that, and host it on a website, you can make a skill.</p>

<p>Following the <a href="https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/steps-to-create-a-flash-briefing-skill">Amazon</a> <a href="https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/flash-briefing-skill-api-feed-reference">process</a> is <a href="https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/tips-for-creating-a-great-flash-briefing-skill">slightly</a> <a href="https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/understanding-the-flash-briefing-skill-api">tedious</a> - especially when it gives you errors like this.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/07/Amazon-Alexa-error.jpg" alt="An error message just says &quot;There is an error parsing the feed&quot;" width="672" height="170" class="aligncenter size-full wp-image-25457">

<p>Pro Tip - tell your users why and where something has failed. They can't be expected to magically guess what the problem is.</p>

<p>You can beta test a skill before it goes live.  The submission and review process was painless - took about 12 hours on a weekend.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/07/Amazon-skill-submission.jpg" alt="A skill submission form" width="605" height="207" class="aligncenter size-full wp-image-25458">

<h2 id="voice-interfaces-for-government"><a href="https://shkspr.mobi/blog/2017/07/uk-flood-forecast-on-amazon-alexa/#voice-interfaces-for-government">Voice Interfaces For Government</a></h2>

<p>(My thoughts - not <a href="https://shkspr.mobi/blog/2016/11/newvember-new-job/">my employer</a>'s)</p>

<p>This is an <em>unofficial</em> service that I've built using the <a href="https://environment.data.gov.uk/flood-monitoring/doc/reference">Open Data produced by my friends at the environment agency</a>.</p>

<p>In an ideal world, you wouldn't need to create specific skills like this. Nor would you have to create a specially formatted file for every voice assistant out there.  Websites would be full of semantic markup and intelligent assistants would be easily able to work out when the council offices were open, which bus routes were delayed, and what the flood risk was.</p>

<p>We're not there yet.</p>

<p>There is a <em>huge</em> industry push towards voice interfaces.  Is it incumbent on Government to create services like this, or is it enough to create APIs and let others build things?</p>

<p>There's a <a href="https://gds.blog.gov.uk/2013/03/12/were-not-appy-not-appy-at-all/">long-standing moratorium on the UK Government creating mobile apps</a> - we can't waste money developing for a dozen different platforms, keeping them updated, reacting to changing requirements from store owners.</p>

<p>Is the same true for voice interfaces?  Siri, Cortana, Alexa, whatever Google's one is called, Bixby, and a dozen more round the corner. Each needing a different configuration to get them to vocalise your news. Each needing you to sign up to yet-another developer agreement.</p>

<p>My job is looking at open standards. We're too early in this industry to converge on one-standard-to-rule-them all. But if Voice is The Future™, we all need to think about how we make it as easy to deploy interactive speech services as possible.</p>

<p>Voice feels like it <em>could</em> be something - but only if it is open to all.</p>

<hr>

<p>You can install the <a href="https://www.amazon.co.uk/dp/B073NQC1PS/">UK's flood forecast on Amazon's Alexa</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=25456&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/07/uk-flood-forecast-on-amazon-alexa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Alexa powered smarthome control for Sonoff]]></title>
		<link>https://shkspr.mobi/blog/2017/06/alexa-powered-smarthome-control-for-sonoff/</link>
					<comments>https://shkspr.mobi/blog/2017/06/alexa-powered-smarthome-control-for-sonoff/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 06 Jun 2017 11:27:52 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[power]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[sonoff]]></category>
		<category><![CDATA[sponsored]]></category>
		<category><![CDATA[wifi]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=25304</guid>

					<description><![CDATA[I&#039;ve been sent a couple of Sonoff smarthome gadgets. You can read my review of the S20 WiFi plug socket and the POW in line power controller.  Here&#039;s a video of me controlling them from my Amazon Alexa:              The latency seems a little slow - hard to tell if that&#039;s Amazon only relying on US data centres for Alexa skills, or the connection to my home. Once set up, it works well. Oh... but…]]></description>
										<content:encoded><![CDATA[<p>I've been sent a couple of Sonoff smarthome gadgets. You can read my review of the <a href="https://shkspr.mobi/blog/2017/05/review-sonoff-s20-wifi-plug/">S20 WiFi plug</a> socket and the <a href="https://shkspr.mobi/blog/2017/05/review-sonoff-pow-wifi-power-switch-and-monitoring/">POW in line power controller</a>.</p>

<p>Here's a video of me controlling them from my Amazon Alexa:</p>

<video controls="on" poster="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelinkposter.jpg">
   <source src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelink.webm" type="video/webm">
   <source src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelink.mp4" type="video/mp4">
<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelinkposter.jpg" alt="A desktop fan, a lamp, and an Amazon Alexa sit on a kitchen table" width="1920" height="1080" class="aligncenter size-full wp-image-25308">
</video>

<p>The latency seems a little slow - hard to tell if that's Amazon only relying on US data centres for Alexa skills, or the connection to my home. Once set up, it works well. Oh... but the set up experience...</p>

<h2 id="set-up"><a href="https://shkspr.mobi/blog/2017/06/alexa-powered-smarthome-control-for-sonoff/#set-up">Set Up</a></h2>

<p>I'll be honest - configuring a smarthome for voice control is still a pain in the arse.  This is <em>mostly</em> Amazon's fault - but it doesn't help that all the kit I use has non-standard interfaces.</p>

<p>Here's the long journey I took to install the skill, configure it, and finally use it.</p>

<ol>
<li><a href="https://www.itead.cc/blog/ewelink-works-with-alexa-tutorial">Read the eWeLink tutorial</a> on setting up Alexa.</li>
<li>I'll assume you've already set up your Alexa, connected it to the WiFi, and configured the app.</li>
<li>In the Amazon app, go to Settings.</li>
<li>Select Skills</li>
<li>Search for eWeLink (not Sonoff!)</li>
<li>Select "eWeLink <strong>Smart Home</strong> Fan".<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelink-skills.png" alt="" width="360" height="580" class="aligncenter size-full wp-image-25315">The "fan" refers to the fact that this is <em>not</em> an official app, not that it only controls fans.</li>
<li>Enable the skill.<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelink-enable.png" alt="" width="360" height="580" class="aligncenter size-full wp-image-25314"></li>
<li>This takes you to the web browser which then redirects to the "coolkit" site.<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelink-login.png" alt="" width="360" height="580" class="aligncenter size-full wp-image-25317">Usually I would tell you to be wary of putting your password into a random site - but this is, apparently, the same company as eWeLink and Sonoff. Confusing, isn't it?</li>
<li>Log in with your email address and password and you're eventually redirected back to Amazon
<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/ewelink-successful-link.png" alt="" width="360" height="580" class="aligncenter size-full wp-image-25316"></li>
<li>Close the browser and return to the Alexa app.</li>
<li>Ignore the fact that it is still asking you to enable the skill, exit this page and go back to the home screen of the app.</li>
<li>Go to menu, Smart Home. Then click on the Smart Home Skills.<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/Alexa-skills.png" alt="" width="360" height="331" class="aligncenter size-full wp-image-25313"></li>
<li>Click on the EweLink skill.<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/Alexa-enable-skills.png" alt="" width="360" height="345" class="aligncenter size-full wp-image-25312"></li>
<li>That just gives you reviews. Because Amazon don't bother with usability testing their apps.</li>
<li>Go back and click on the <em>icon</em> for eWeLink.</li>
<li>Now "Manage Devices in Smart Home".<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/Alexa-more-skills.png" alt="" width="360" height="313" class="aligncenter size-full wp-image-25311"></li>
<li>Oh, we're back here again! <img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/Alexa-skills.png" alt="" width="360" height="331" class="aligncenter size-full wp-image-25313"> Select "Devices"</li>
<li>Scroll all the way to the bottom and select "Discover".<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/Alexa-bottom.png" alt="" width="360" height="245" class="aligncenter size-full wp-image-25325"></li>
<li>Wait. And marvel at how crap Philips Hue must be to need extra support text.<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/06/Alexa-Discover.png" alt="" width="360" height="580" class="aligncenter size-full wp-image-25310"></li>
<li>Hopefully the new eWeLink devices will be displayed.</li>
<li>You can exit the app and use voice control.</li>
</ol>

<p>Bloody hell! No normal person is going to bother going through that many steps, are they?</p>

<p>Oh, and that's not even the worst part! When I first set up the lamp, it wouldn't work. Why? Because I already had an Alexa group called "lamp".  There's no feedback in the app - and it's impossible to rename device in Alexa. The Echo just pathetically says that there's a problem - but not how to solve it. So you have to delete the devices, rename them in the eWeLink app, then re-add them.</p>

<p>Alexa is a UX disaster. If you deviate a millimetre from the happy path, you'll be lost in the woods without hope.</p>

<p><a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/">This is not the future</a>.</p>

<hr>

<h3 id="kit-used-in-this-demo"><a href="https://shkspr.mobi/blog/2017/06/alexa-powered-smarthome-control-for-sonoff/#kit-used-in-this-demo">Kit used in this demo</a></h3>

<ul>
<li><a href="https://shkspr.mobi/blog/2017/05/review-sonoff-pow-wifi-power-switch-and-monitoring/">Sonoff POW review</a> - <a href="https://amzn.to/2s6GkOi">buy it</a>.</li>
<li><a href="https://shkspr.mobi/blog/2017/05/review-sonoff-s20-wifi-plug/">Sonoff S20 WiFi plug</a> - <a href="https://amzn.to/2q6GU17">buy it</a></li>
<li><a href="https://shkspr.mobi/blog/2017/05/internet-connected-lightswitches-redux/">WisQo smart lightswitches</a> - <a href="https://amzn.to/2piX0CD">buy them</a></li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=25304&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/06/alexa-powered-smarthome-control-for-sonoff/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Amazon Alexa and Solar Panels]]></title>
		<link>https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/</link>
					<comments>https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 03 May 2017 17:54:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[alexa]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[solar]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=25136</guid>

					<description><![CDATA[I can now query my solar panels via my Alexa Amazon Dot Echo thingie (why so many names?).  https://shkspr.mobi/blog/wp-content/uploads/2017/05/VID_20170501_161804.webm  I flatter myself as a reasonably competent techie and programmer, but fuck me AWS Lambdas and Alexa skills are a right pile of shite!  Sorry if that sounds a bit harsh, but they&#039;re a pain in the arse to get anything done.  I…]]></description>
										<content:encoded><![CDATA[<p>I can now query my solar panels via my Alexa Amazon Dot Echo thingie (why so many names?).</p>

<p></p><div style="width: 620px;" class="wp-video"><video class="wp-video-shortcode" id="video-25136-2" width="620" height="349" preload="metadata" controls="controls"><source type="video/webm" src="https://shkspr.mobi/blog/wp-content/uploads/2017/05/VID_20170501_161804.webm?_=2"><a href="https://shkspr.mobi/blog/wp-content/uploads/2017/05/VID_20170501_161804.webm">https://shkspr.mobi/blog/wp-content/uploads/2017/05/VID_20170501_161804.webm</a></video></div><p></p>

<p>I flatter myself as a reasonably competent techie and programmer, but fuck me AWS Lambdas and Alexa skills are a right pile of shite!  Sorry if that sounds a bit harsh, but they're a pain in the arse to get anything done.</p>

<p>I wanted something simple.  When I say "Solar Panels", call this API, then say this phrase.  That's the kind of thing which <em>should</em> take 5 minutes in something like IFTTT.  Instead, it took around two hours of following out-of-date official tutorials, and whinging on Twitter, before I got my basic service up and running.</p>

<p>A quick bit of preparatory searching on Alta Vista 2.0 and I'd got incredibly frustrated.</p>

<blockquote class="social-embed" id="social-embed-858917427081613312" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Does anyone have an EASY tutorial for Alexa skills?<br>As in, not 27 steps where step 5 just says "install node" &amp; 26 says "see other tutorial"</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/858917427081613312"><span aria-label="6 likes" class="social-embed-meta">❤️ 6</span><span aria-label="9 replies" class="social-embed-meta">💬 9</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2017-05-01T05:34:07.000Z" itemprop="datePublished">05:34 - Mon 01 May 2017</time></a></footer></blockquote>

<p>I ended up following this "easy" <a href="https://web.archive.org/web/20170516010425/https://developer.amazon.com/alexa-skills-kit/alexa-skill-quick-start-tutorial"><strong>30</strong> step guide to develop a basic skill</a>.</p>

<p>It's not so bad, but it does reveal Amazon's contempt for developers. Several of the steps contained errors, it involves multiple logins, random clicks, and a bunch of copy &amp; pasting. Dull and complex.</p>

<blockquote class="social-embed" id="social-embed-859030859717935104" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-859029576810467328" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/859028437171920898">Replying to @edent</a></small>Brilliant! AWS picked up the wrong address from my Amazon UK account. How?<br>It also wouldn't copy across my credit card details! Why?</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/859029576810467328"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2017-05-01T12:59:45.000Z" itemprop="datePublished">12:59 - Mon 01 May 2017</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/859029576810467328">Replying to @edent</a></small>The cloud is everywhere!<br>The cloud is nowhere!<br>The cloud loves you!<br>The cloud knows all!<br>The cloud only works in specific US locations! <a href="https://twitter.com/edent/status/859030859717935104/photo/1">pic.x.com/15dibbda0v</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/C-vkA2oWsAEK2iW.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="" src="data:image/webp;base64,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"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/859030859717935104"><span aria-label="2 likes" class="social-embed-meta">❤️ 2</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2017-05-01T13:04:51.000Z" itemprop="datePublished">13:04 - Mon 01 May 2017</time></a></footer></blockquote>

<p>A frustrating and ultimately unsatisfying experience.  I ended up using StackOverflow to correct errors in my code because the documentation was so woefully lacking.</p>

<h2 id="the-code"><a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/#the-code">The Code</a></h2>

<p>The Python is convoluted, but manageable.  When it hears the trigger phrase it opens a JSON API, extracts a result, then speaks it.  It's mostly scaffolding.  This is based on the example code. I've removed the comments.</p>

<pre><code class="language-python">from __future__ import print_function
import json, requests

# --------------- Helpers that build all of the responses ----------------------
def build_speechlet_response(title, output, reprompt_text, should_end_session):
    return {
        'outputSpeech': {
            'type': 'PlainText',
            'text': output
        },
        'card': {
            'type': 'Simple',
            'title': "SessionSpeechlet - " + title,
            'content': "SessionSpeechlet - " + output
        },
        'reprompt': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': reprompt_text
            }
        },
        'shouldEndSession': should_end_session
    }


def build_response(session_attributes, speechlet_response):
    return {
        'version': '1.0',
        'sessionAttributes': session_attributes,
        'response': speechlet_response
    }

# --------------- Functions that control the skill's behavior ------------------
def get_welcome_response():
    API_url = 'https://example.com/'
    response = requests.get(url=API_url)
    data = json.loads(response.text)
    watts = data['Body']['Data']['PAC']['Values']['Result']
    session_attributes = {}
    card_title = "Welcome"
    speech_output = "Your Solar Panels are generating " + str(watts) + " watts right now."
    reprompt_text = ""
    should_end_session = True
    return build_response(session_attributes, build_speechlet_response(
        card_title, speech_output, reprompt_text, should_end_session))

def handle_session_end_request():
    card_title = "Session Ended"
    speech_output = "May your day be sunny and bright! "
    should_end_session = True
    return build_response({}, build_speechlet_response(
        card_title, speech_output, None, should_end_session))

# --------------- Events ------------------
def on_session_started(session_started_request, session):
    print("on_session_started requestId=" + session_started_request['requestId']
          + ", sessionId=" + session['sessionId'])

def on_launch(launch_request, session):
    print("on_launch requestId=" + launch_request['requestId'] +
          ", sessionId=" + session['sessionId'])
    return get_welcome_response()

def on_intent(intent_request, session):
    print("on_intent requestId=" + intent_request['requestId'] +
          ", sessionId=" + session['sessionId'])
    intent = intent_request['intent']
    intent_name = intent_request['intent']['name']

def on_session_ended(session_ended_request, session):
    print("on_session_ended requestId=" + session_ended_request['requestId'] +
          ", sessionId=" + session['sessionId'])

# --------------- Main handler ------------------
def lambda_handler(event, context):
    print("event.session.application.applicationId=" +
          event['session']['application']['applicationId'])
    if event['session']['new']:
        on_session_started({'requestId': event['request']['requestId']},
                           event['session'])
    if event['request']['type'] == "LaunchRequest":
        return on_launch(event['request'], event['session'])
    elif event['request']['type'] == "IntentRequest":
        return on_intent(event['request'], event['session'])
    elif event['request']['type'] == "SessionEndedRequest":
        return on_session_ended(event['request'], event['session'])
</code></pre>

<h2 id="this-is-not-ai"><a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/#this-is-not-ai">This is <em>not</em> AI</a></h2>

<p>I kinda thought that Amazon would hear "solar panels" and work out the rest of the query using fancy neural network magic. Nothing could be further from the truth. The developer has to manually code <em>every single possible permutation</em> of the phrase that they expect to hear.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/05/Favourite-Colour-fs8.png" alt="A listing of every possible subject object verb combination" width="447" height="552" class="aligncenter size-full wp-image-25142">

<p>This isn't AI. Voice interfaces are the command line. But you don't get tab-to-complete.</p>

<p>Amazon allow you to test your code by typing rather than speaking. I spent a frustrating 10 minutes trying to work out why my example code didn't work. Want to know why? I was typing "favo<em>u</em>rite" rather than the American spelling.  Big Data my shiny metal arse.</p>

<h2 id="why-not-iftt"><a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/#why-not-iftt">Why not IFTT?</a></h2>

<p>So, there <em>is</em> an official <a href="https://web.archive.org/web/20200924202817/https://twitter.com/sammachin/status/859125475498758145?ref_src=twsrc%5Etfw">If-This-Then-That channel for Alexa</a>.</p>

<p>But like most IFTTT services, it isn't well supported by the company. It works with a few blessed services, but you can't bring in your own APIs, nor define your own responses.</p>

<p>It is barely tested and has all sorts of weird restrictions.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/05/ifttt-fs8.png" alt="The If-This-Then-That service only works with lower case characters" width="619" height="619" class="aligncenter size-full wp-image-25140">

<p>Here's a tip, gang, if your service can't cope with upper-case characters that means it isn't ready to release to the public.</p>

<p>The founder of <a href="https://web.archive.org/web/20170523171047/https://www.sayspring.com/">SaySpring</a> recommended their easy to use product:</p>

<blockquote class="social-embed" id="social-embed-859054476904337409" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-859043746339594241" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/gigastacey" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRlADAABXRUJQVlA4IEQDAADQDQCdASowADAAPp08l0mloyIhON24ALATiWYArDlBUx5jD4XwIsDpL8iXwdoH1jRZ8gRwK4CVA9zi3S0coa0ploY2areO6WE46I8rPKIM/OE2rdXgLXkGd0uru4/fMN6Y5mi/ZBstslpPD3gKpGdpYz813lefEADifa9F10+PnHfgtFZKYyIHvW0FmeFES+oJ4Qc8Q0LIKsMlbm/y/IpfU6AbPmHpY1zWMdGzqKw99FiSeKQW8hO0R8h4yxUzy9JfBMtpwhhJUc2Db6qWOyHlxMUIFhg1XXrfUYkd/qMYW+Ls/LJ/ABqzZG3J8mnHGL56dKYoeGPtvbJ4kM83uN8aiq1doFvAbTzxEtaaXWCyITBNdw53HGo26osDMNIqnXPJ5ZqjwoosWEdWfSzn9hS0OHVIiu7y8XI8aDwYqWiAWTY1A2zghoRMYgTpW0Hm4C1D+Jr+R5rDCOydAM1OmvUhXooApGan+kupwEnbbuYZwjR0WPpUZKyE2r520F30hDSASfnqmxMSadSKSk1EJ4SB59Vfc8zZMVQMAKllmjJIj+H/+wWjWxM5xGWUPLEncdigw5DiRxvj7OgAuLKoBo6o8555QAaSm5GE+CR7ekgiYh3Mpd+5crwPfrNf+FnsO9vyU80FBit3gonL202lXJNpRschNO1Y7FIc4ZGrBBg6VLfVQmLEZttxL2J40O/vdmys1jKljvyLMe+5lp+h2WRIRXNmM0DCwiK+p6rsCfguIhzky+mf+9hfdAdx6JIQzqwV2F61wecQk/8WwdM61XJKFQea+T7xfGsrtl08AZWlMiPMsC/EhQM46WxjxTkk1X9jyY2iqMvL+k3D7eUPjh61l6A1Rui/yAL0nT9zJafuLame0c5Y5VqkPm2k5sq50FD7UIruznMI7YtgwD6vYzumuo4iyJY4A4qlmzhzvGL/FvHafWgdm0U5gHQ9JdiH5MUV1HMkgqcdEekjpo6nN7O+uFxnSzsXPoH8tw6BLKiYGm2I8CzWQvqJH2nF4qkzRxzYsNjU4ovMkTLi4oK6evM9U9q7C6pt8sUEqYOnIa8PdFdxXA8WbsMUIz3F49BdQeQrfornplSWQ1c3NkHMpGldovAAAA==" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Stacey Higginbotham</p>@gigastacey</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">This entire thread is killing me. Especially in light of Amazon's press about Alexa being easy as it's competitive differentiator. <a href="https://twitter.com/edent/status/858917427081613312">x.com/edent/status/8…</a><blockquote class="social-embed" id="social-embed-858917427081613312" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Does anyone have an EASY tutorial for Alexa skills?<br>As in, not 27 steps where step 5 just says "install node" &amp; 26 says "see other tutorial"</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/858917427081613312"><span aria-label="6 likes" class="social-embed-meta">❤️ 6</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="2 reposts" class="social-embed-meta">🔁 2</span><time datetime="2017-05-01T05:34:07.000Z" itemprop="datePublished">05:34 - Mon 01 May 2017</time></a></footer></blockquote></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/gigastacey/status/859043746339594241"><span aria-label="9 likes" class="social-embed-meta">❤️ 9</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2017-05-01T13:56:04.000Z" itemprop="datePublished">13:56 - Mon 01 May 2017</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/markcwebster" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRpwBAABXRUJQVlA4IJABAADQCACdASowADAAPrVSoUwnJKMiKrqpWOAWiWMAvYvpTpE0oxKFFbfOKbL7g8/p8A0yW2mmKyA1ySWdqZq6H6D4L8tRngldkqu8wfvRVVhAAP79KxzVbbMzJ5YOdRAOTJD/ybRvphypI2oAAitSpNYhSreqY0Fkevh7gTNlIppWZXAP2Vdtbh+QAnfhjps4Y4p0XSJ6pOJrapwoc6BTIk430bgVwMxI/o2qZ6RyEFcT+rdpITL5Ni7Uh8Eqkd0nibJXaP5FH5a2Hy54EMf6opv2ywVckCwpMt7vcuSh8cbPewgYT7AIDw5W96ebEznExkjw+tjxb/J7XEAdYkezuO7o/c0FNd+ec3X3m3cAyjXsFCfj+2nQn1XLHUspTMmzS+SKzFJynkT+VQpvVdIqmLn1WixZBwNv0jmMe7EY8surbPbWlkWOMzQPNRCNmnYIFSWKJcc39PQF7pjSJH7Yy9QXAxNibAsWbAYDBIq4HPH5Af8NCHvkNpFXtqxpTUA9bAGtXIdMzkYAm3xMi/QiMAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Mark C. Webster</p>@markcwebster</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/gigastacey/status/859043746339594241">Replying to @gigastacey</a></small><a href="https://twitter.com/gigastacey">@gigastacey</a> <a href="https://twitter.com/edent">@edent</a> this is what we're working on at <a href="https://twitter.com/sayspring">@sayspring</a>. We're just getting started, but take a look.</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/markcwebster/status/859054476904337409"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2017-05-01T14:38:42.000Z" itemprop="datePublished">14:38 - Mon 01 May 2017</time></a></footer></blockquote>

<p>Sadly, it's only available to US customers.</p>

<h2 id="driving-me-dotty"><a href="https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/#driving-me-dotty">Driving me dotty</a></h2>

<p>I reluctantly got a Dot because I thought it would be a nifty way to control <a href="https://shkspr.mobi/blog/2017/05/internet-connected-lightswitches-redux/">my new Internet connected light switches</a>.</p>

<p>Most Alexa skills require you to have the sort of lifestyle where you are regularly <em>desperate</em> to know what the weather is like at a specific airport. Or have a life which is intimately tied to the range of Amazon-only services.</p>

<p>Taking a look through what developers have released, it's an obvious conclusion that most developers have better things to do that spend time battling with Amazon's inadequate developer experience.</p>

<p>Oh, and there's the requisite "fart apps" and other high quality services;.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/05/Alexa-Fart-fs8.png" alt="You can ask your Alexa to Fart. Three different apps provide this service." width="1009" height="566" class="aligncenter size-full wp-image-25145">

<p>The future may be voice interfaces - but Amazon aren't leading the way there.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=25136&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/05/amazon-alexa-and-solar-panels/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2017/05/VID_20170501_161804.webm" length="4644693" type="video/webm" />

			</item>
	</channel>
</rss>
