<?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>developer &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/developer/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Tue, 17 Jun 2025 08:40:07 +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>developer &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Google's Abandoned Android Authenticator App]]></title>
		<link>https://shkspr.mobi/blog/2020/02/googles-abandoned-android-authenticator-app/</link>
					<comments>https://shkspr.mobi/blog/2020/02/googles-abandoned-android-authenticator-app/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 27 Feb 2020 13:02:46 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[developer]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=34333</guid>

					<description><![CDATA[The news has just broken that Google&#039;s Authenticator App can have its codes stolen by malware. I doubt Google will ever release a fix for this issue - their 2FA app hasn&#039;t been updated since September 2017.  Update! 3 months after I published this post, Google updated their app    For two-and-a-half years, Google hasn&#039;t touched their 2FA app&#039;s code. Perhaps it is perfect? Perhaps there are no…]]></description>
										<content:encoded><![CDATA[<p>The news has just broken that <a href="https://www.zdnet.com/article/android-malware-can-steal-google-authenticator-2fa-codes/">Google's Authenticator App can have its codes stolen by malware</a>. I doubt Google will ever release a fix for this issue - their 2FA app hasn't been updated since September 2017.</p>

<p><ins datetime="2020-05-07">Update! 3 months after I published this post, <a href="https://www.androidpolice.com/2020/05/07/google-authenticator-gets-its-first-update-in-years-finally-lets-you-transfer-accounts-between-devices-apk-download/">Google updated their app</a></ins></p>

<p><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=en"><img src="https://shkspr.mobi/blog/wp-content/uploads/2020/02/Authenticator.png" alt="The app store shows the app hasn't been updated since September 2017." width="540" height="399" class="aligncenter size-full wp-image-34353"></a></p>

<p>For two-and-a-half years, Google hasn't touched their 2FA app's code. Perhaps it is perfect? Perhaps there are no more UI improvements or security enhancements that can be done? Or, more likely, it joins a long graveyard of Android apps - launched optimistically and then abandoned.</p>

<p>I get it, not every product you release is a winner. And some have to be shuttered gracefully. But Google Authenticator is <em>special</em>. It is trusted to protect users' accounts. Not just Google accounts - thousands of providers specifically recommend it.</p>

<blockquote class="social-embed" id="social-embed-1232973247282581504" 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/kcorrick" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRiABAABXRUJQVlA4IBQBAABwBwCdASowADAAPqlEm0mmI6KhONbYAMAVCWkA0JQK0ut6eVL1qT5nDNbbtENsqQRA51qgaeOvFX/bO/s5b+5+Dii3wAD+zfNSG7o7p26d9ZKGaagJ9Ov5X80PkxXRDqNVWYFbKhynbbfHQ+417YTW31agLwZUMxAdHhzKOyrldTtN7qv6PGuYecn6sduKfVk3call/o8nmuqrcdWIKfD9WXlDzkS85ONC3UPJhDoH6IHMKlm6FPhcfBgsXZcoGSgrQc8H3tsbOcveoqrjItgVkwS2FA6yBhMGuY78pOJ0qSFfTAYuUdIM7+g3XD/uY19eWCfgu4A+zvTKh2xxvm/31vd7UQKn6/z1pzuEtFkKnMsAAAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Kathryn Corrick</p>@kcorrick</div></a><img class="social-embed-logo" alt="" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCmFyaWEtbGFiZWw9IlR3aXR0ZXIiIHJvbGU9ImltZyIKdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoCmQ9Im0wIDBINTEyVjUxMkgwIgpmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzFkOWJmMCIgZD0ibTQ1OCAxNDBxLTIzIDEwLTQ1IDEyIDI1LTE1IDM0LTQzLTI0IDE0LTUwIDE5YTc5IDc5IDAgMDAtMTM1IDcycS0xMDEtNy0xNjMtODNhODAgODAgMCAwMDI0IDEwNnEtMTcgMC0zNi0xMHMtMyA2MiA2NCA3OXEtMTkgNS0zNiAxczE1IDUzIDc0IDU1cS01MCA0MC0xMTcgMzNhMjI0IDIyNCAwIDAwMzQ2LTIwMHEyMy0xNiA0MC00MSIvPjwvc3ZnPg=="></header><section class="social-embed-text" itemprop="articleBody">.<a href="https://twitter.com/Xero">@Xero</a> Thoughts please, as I think the only 2FA offered is Google Authenticator for your service? Should customers be concerned? What do you suggest to ensure customer and account security until this is fixed?<blockquote class="social-embed" id="social-embed-1232952898314592259" 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/SecurityCharlie" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRswBAABXRUJQVlA4IMABAADwCgCdASowADAAPrVKnUsnJCKhqrqtUOAWiUAUu/TJhRvKoYqnYaCc33hQwZNjJVLMd6dobPrQZkhIjE4lgr5Mp9kZGndyXCcbGy8dCLB6MBf5CVQ1P8zQ3udsQOShKAAA/uf7frh4Q0dK8PJpg/mwFTBQvGOMjY5qzxNmug5xA7ZTB679Dn8CENpk0nTWr1nhpRYIBOgh2LD/XAQryYxZIZ+15QefvMbDvcF8Qu4PAlQhdflAnXQya88wlB6tcyfqi0RjrbdZPuadOsoHt5hSL7YKjEZnjOPAZi5CRRN8+XMwLV1zc516edgNLUrVV71LAAp1WDDBLNk3RX/RLt9P0J9X2h25y+15oSw6wK9c/mjF4XW8+D0HcBP01lb3TBDyphGfHLJH9CtTBo0tC0cELzGlK/dYJOeBJvWc4Nw8Ez6JEVSA7a7C3kpeBG9JEe0kRJ6NL6SaixPqjJOYs5Ud1TSHUq837rUUuJyjK5qPpJFVfv2V+SxSjGZVvx4aCmL0k6dCW4qwtPTZ1s3ocIBq5/T3+GCl+VjHyQuH9P18hyUK7BNTk94ZJutm+n6MPvvMmt9Yu0lLkUUPKnj2uAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Charlie Osborne</p>@SecurityCharlie</div></a><img class="social-embed-logo" alt="" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCmFyaWEtbGFiZWw9IlR3aXR0ZXIiIHJvbGU9ImltZyIKdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoCmQ9Im0wIDBINTEyVjUxMkgwIgpmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzFkOWJmMCIgZD0ibTQ1OCAxNDBxLTIzIDEwLTQ1IDEyIDI1LTE1IDM0LTQzLTI0IDE0LTUwIDE5YTc5IDc5IDAgMDAtMTM1IDcycS0xMDEtNy0xNjMtODNhODAgODAgMCAwMDI0IDEwNnEtMTcgMC0zNi0xMHMtMyA2MiA2NCA3OXEtMTkgNS0zNiAxczE1IDUzIDc0IDU1cS01MCA0MC0xMTcgMzNhMjI0IDIyNCAwIDAwMzQ2LTIwMHEyMy0xNiA0MC00MSIvPjwvc3ZnPg=="></header><section class="social-embed-text" itemprop="articleBody">Android malware can steal Google Authenticator 2FA codes <a href="http://dlvr.it/RQr43X">dlvr.it/RQr43X</a> <a href="https://twitter.com/SecurityCharlie/status/1232952898314592259/photo/1">pic.x.com/8fdqpwsdic</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/ERxUIH8U8AAgFm5.png" 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/SecurityCharlie/status/1232952898314592259"><time datetime="2020-02-27T08:57:32.000Z" itemprop="datePublished">08:57 - Thu 27 February 2020</time></a></footer></blockquote></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://web.archive.org/web/20200227103903/https://twitter.com/kcorrick/status/1232973247282581504"><time datetime="2020-02-27T10:18:24.000Z" itemprop="datePublished">10:18 - Thu 27 February 2020</time></a></footer></blockquote>

<p>Sure, you and I know that <em>any</em> OTP app will work. But Google spend a lot of money on branding - and organisations use that to signal trust to their users.</p>

<p>Frankly, Android Authenticator is too important to be neglected like this.</p>

<h2 id="open-source"><a href="https://shkspr.mobi/blog/2020/02/googles-abandoned-android-authenticator-app/#open-source">Open Source</a></h2>

<p>The <a href="https://github.com/google/google-authenticator-android/">Authenticator app <em>is</em> open source</a>. But comes with this delightful disclaimer:</p>

<blockquote><p>While this fork is open source, the official version of the app still remains proprietary. There is no guarantee that the open source repository will receive any changes made upstream (or vice versa).</p></blockquote>

<p>Despite multiple bugs being filed, no one is fixing them.  Occasionally users are told that <a href="https://github.com/google/google-authenticator-android/issues/73#issuecomment-359268595">an internal Google ticket has been raised</a> - and then silence.</p>

<p><a href="https://shkspr.mobi/blog/2019/03/i-have-thirty-one-2fa-codes/">As I mentioned last year</a>, I've switched to <a href="https://github.com/andOTP/andOTP/">andOTP</a>. It's open source, and <em>actively</em> being developed and improved.</p>

<h2 id="final-thoughts"><a href="https://shkspr.mobi/blog/2020/02/googles-abandoned-android-authenticator-app/#final-thoughts">Final thoughts</a></h2>

<p>It's OK to stop developing software. It's OK to decide that your limited resources are best spent elsewhere.</p>

<p>It's <em>not</em> OK to heavily promote an open security standard, convince people to rely on your proprietary app, and then abandon it.</p>

<hr>

<h2 id="bonus-content-for-patreon-subscribers"><a href="https://shkspr.mobi/blog/2020/02/googles-abandoned-android-authenticator-app/#bonus-content-for-patreon-subscribers">Bonus Content For Patreon Subscribers!!!!!</a></h2>

<p>Here's a quick look through all of <a href="https://play.google.com/store/apps/dev?id=5700313618786177705">Google LLC's currently published Android Apps</a>. I've highlighted any which haven't been updated in over 12 months. That seems like an appropriate cut off for abandonment.</p>

<table>
<thead>
<tr>
  <th>App</th>
  <th>Last Update</th>
</tr>
</thead>
<tbody>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.vr.cardboard.apps.designlab">Cardboard Design Lab</a></td>
  <td>2015-05-29</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.apps.hangoutsdialer">Hangouts Dialer</a></td>
  <td>2015-09-02</td>
</tr>
<tr>
  <td><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=en">Authenticator</a></td>
  <td>2017-09-27</td>
</tr>
<tr>
  <td><a href="https://play.google.com/store/apps/details?id=com.google.toontastic">Toontastic 3D</a></td>
  <td>2017-11-02</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.apps.ads.publisher">Google AdSense</a></td>
  <td>2017-12-13</td>
</tr>
<tr>
  <td><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.wallpaper">Wallpapers</a></td>
  <td>2018-01-24</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.apps.inputmethod.hindi">Indic Keyboard</a></td>
  <td>2018-04-19</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.apps.wearable.phone">Wear OS Phone</a></td>
  <td>2018-05-14</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.apps.cloudprint">Cloud Print</a></td>
  <td>2018-05-23</td>
</tr>
<tr>
  <td><a href="https://play.google.com/store/apps/details?id=com.google.android.gm.lite">Gmail Go!</a></td>
  <td>2018-06-06</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.inputmethod.korean">Google Korean Input</a></td>
  <td>2018-06-25</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.spotlightstories">Google Spotlight Stories</a></td>
  <td>2018-11-13</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.inputmethod.pinyin">Pinyin (Chinese) Keyboard</a></td>
  <td>2018-12-12</td>
</tr>
<tr>
  <td><a href="https://web.archive.org/web/20200000000000*/https://play.google.com/store/apps/details?id=com.google.android.inputmethod.japanese">Japanese Keyboard</a></td>
  <td>2019-02-25</td>
</tr>
</tbody>
</table>

<p>I'm sure there are some I've missed - and there are <em>loads</em> more which are coming up for their one-year anniversary.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=34333&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/02/googles-abandoned-android-authenticator-app/feed/</wfw:commentRss>
			<slash:comments>12</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[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>
		<item>
		<title><![CDATA[How Do You Solve A Problem Like BlackBerry]]></title>
		<link>https://shkspr.mobi/blog/2012/06/how-do-you-solve-a-problem-like-blackberry/</link>
					<comments>https://shkspr.mobi/blog/2012/06/how-do-you-solve-a-problem-like-blackberry/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 30 Jun 2012 17:42:55 +0000</pubDate>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[developer]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=6024</guid>

					<description><![CDATA[Recently RIM contact developers asking for feedback on why we were or were not planning on developing for Blackberry 10.  I was paid $50 for my opinion - in Amazon vouchers. I hope this hasn&#039;t comprimised the honesty of my answers.  These are just my thoughts - I can&#039;t claim that they would solve RIM&#039;s problems, but I do think they would be a good way to help reclaim developer mindshare.  What…]]></description>
										<content:encoded><![CDATA[<p>Recently RIM contact developers asking for feedback on why we were or were not planning on developing for Blackberry 10.</p>

<p>I was paid $50 for my opinion - in Amazon vouchers. I hope this hasn't comprimised the honesty of my answers.</p>

<p>These are just my thoughts - I can't claim that they would solve RIM's problems, but I do think they would be a good way to help reclaim developer mindshare.</p>

<h3 id="what-are-the-main-reasons-why-you-are-not-planning-to-develop-applications-for-the-blackberry-10-platform"><a href="https://shkspr.mobi/blog/2012/06/how-do-you-solve-a-problem-like-blackberry/#what-are-the-main-reasons-why-you-are-not-planning-to-develop-applications-for-the-blackberry-10-platform">What are the main reasons why you are not planning to develop applications for the Blackberry 10 platform?</a></h3>

<ol>
<li>Platform won't be available until 2013!</li>
<li>Probably no Linux platform.</li>
<li>Tiny marketshare unless majority of phones are upgradeable.</li>
<li>Can't get any reference hardware / emulators to test on.</li>
<li>Have to learn yet another development language! I know Java, ObjC, JS, C# - I really can't be bothered to learn another. I tried using JavaScript on the PlayBook and it wasn't a great success.</li>
<li>Finally, and I hate saying this because I've had BB's since the the black and white days, will BB10 ever come out? Will there even be a BlackBerry.</li>
</ol>

<h3 id="what-specific-things-could-the-research-in-motion-developer-relations-team-do-or-communicate-that-would-make-you-more-likely-to-develop-applications-for-the-blackberry-10-platform"><a href="https://shkspr.mobi/blog/2012/06/how-do-you-solve-a-problem-like-blackberry/#what-specific-things-could-the-research-in-motion-developer-relations-team-do-or-communicate-that-would-make-you-more-likely-to-develop-applications-for-the-blackberry-10-platform">What specific things could the Research in Motion developer relations team do or communicate that would make you more likely to develop applications for the Blackberry 10 platform?</a></h3>

<ol>
<li>Linux based SDK and toolkit. I'm not buy a Mac or a copy of Windows just for you!</li>
<li>Remove the ridiculous signing requirements. I don't want to have to use your signing server - especially with its atrocious uptime.</li>
<li>Provide high quality, open source programs which we can build on.  I don't want to have to start from scratch.</li>
<li>Developer incentives.  Microsoft are literally paying some developers to develop. Nokia are giving out hardware. Google already have great mindshare and yet still give out thousands of dollars of goods to devs.
Reference hardware would be really useful. Paying me market rate for for several weeks development would be nice. Running competitions is a waste of time.</li>
<li>Turn up at hackdays. I attend - and I'm not exaggerating - 100 developer events a year.  BlackBerry rarely turn up.  When they do, they do a presentation, give hardware out as a prize, and then disappear.  They need to stay, teach people, talk through their concerns, offer prizes for software developed specifically for RIM.</li>
<li>Don't offer money. (I realise this contradicts the above!) Most developers can afford a phone, a kindle, or most prizes. Offer us things we can't buy.  Promotion in the app store, a meeting with your investors, a UI consultation with your best team, business advice from your CEO! The sort of stuff we can't get elsewhere.</li>
<li>FIGHT THE FUCK BACK! Seriously - no one wants to go invest in a platform which looks like it's losing.  I don't know how you do that - but make it convincing!</li>
</ol>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=6024&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2012/06/how-do-you-solve-a-problem-like-blackberry/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
	</channel>
</rss>
