tag:blogger.com,1999:blog-90891732164575571972024-03-05T05:58:14.445-06:00Internet of GreyBhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-9089173216457557197.post-86652993639575964282019-02-06T14:24:00.001-06:002019-02-06T14:24:14.301-06:00Managing My Internet of Things with a $5 Digital Ocean VPS and MeshCentral<br />
<br />
I have a lot of tiny Windows and Linux device spread about my lab/offices. I acknowledge my problem with buying a Raspberry Pi every time I go to Micro Center and owning just about every mainstream <a href="https://www.slant.co/topics/1629/~best-single-board-computers" target="_blank">SBC </a>between tinkering and my day job.<br />
<br />
Moving past my personal issues, managing these devices has been a pain in the past, especially when I work from home or am travelling. My solution is to use <a href="https://www.meshcommander.com/meshcentral2" target="_blank">Mesh Central</a>, an <a href="https://github.com/Ylianst/MeshCentral" target="_blank">open source</a> remote management solution written in NodeJS.<br />
<br />
<br />
Things I love about Mesh Central:<br />
<br />
<ul>
<li>It's open source</li>
<li>You can stand up an installation in five minutes if you type fast</li>
<li>Runs on Linux and Windows</li>
<li>Easy to maintain</li>
<li>You don't need Intel vPro/AMT to use it, it includes a software agent</li>
<li>Software agents for Windows, Linux and OSX </li>
<li>The <a href="http://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide-0.2.1.pdf" target="_blank">documentation </a>is fantastic</li>
<li>Features <a href="https://twitter.com/MeshCentral" target="_blank">are being added constantly</a></li>
</ul>
<div>
<br />Here's a quick rundown of what you need to do to get an instance up and working quickly. There are also <a href="https://www.youtube.com/watch?v=dtROYareYRI&list=PLWeHC-v5uwvukqwKOj7CyJbq0iNImhCN0" target="_blank">videos</a> (and the Install Guide linked below) if you want to watch it happen.</div>
<br />
<br />
<ol>
<li>Spin up a $5/month 1GB/25GB Ubuntu 18.04 droplet on Digital Ocean</li>
<li>Follow the <a href="http://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2InstallGuide.pdf" target="_blank">Install Guide</a> (Ubuntu 18.04). I would recommend reading the entire section first because there are some installation variations towards the end that you might want to use (Increased Security Installation) and not have to do the install twice.</li>
<li>Setup Let's Encrypt support for a free SSL certificate (see the <a href="http://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide-0.2.1.pdf" target="_blank">User Guide</a>)</li>
<li>Create an account and login</li>
<li>Create a Mesh</li>
<li>Download the agent and install it on your things</li>
</ol>
<div>
Some variations for slightly modified use-cases:</div>
<div>
<ul>
<li>If you only want to manage things inside your network, it can be installed on a Raspberry Pi!</li>
<li>Since the agent requires a single click to install or can be run once- I use it to provide family tech support</li>
<li>Since most of my IoT development devices are supported, using the included file manager is an easy way of getting new builds over to the device</li>
</ul>
<div>
<br /></div>
<div>
Some Additional Feature Wishes</div>
<div>
<ul>
<li>More embedding/API support (Get a list of devices to integrate it into other stuff I develop/dashboards, let me upload files from my build system)</li>
<li>Android Support</li>
<li>More information about extending the agent</li>
</ul>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHIdmyIb_HenM0XF_XwAkyyersp6XDiTbfraliEdZ2AUIejAgBSYzHzNlEP1J2veRueLNXoEUALMEFSQ_s9N13vXqbmY5T5eRw3k27QObOEaSHbsrkIoYhtTePeWIPNz9l7qZA71w5t9w/s1600/MeshCentral1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1150" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHIdmyIb_HenM0XF_XwAkyyersp6XDiTbfraliEdZ2AUIejAgBSYzHzNlEP1J2veRueLNXoEUALMEFSQ_s9N13vXqbmY5T5eRw3k27QObOEaSHbsrkIoYhtTePeWIPNz9l7qZA71w5t9w/s320/MeshCentral1.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Group your devices and see their status</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPJb77Ufu6vMDEGCoPT3BUDFrTq0p18WE879DdaAiIxxF0GzUZLrQj3B1rfShh_MYVKaKOtJm-NU9o2B2JjxyZgisJjLMgFNYamXkI5zl915sIUSHyUe_ZdpEsfdcwWxx5MomUSYAfIVc/s1600/MeshCentral2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="803" data-original-width="1150" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPJb77Ufu6vMDEGCoPT3BUDFrTq0p18WE879DdaAiIxxF0GzUZLrQj3B1rfShh_MYVKaKOtJm-NU9o2B2JjxyZgisJjLMgFNYamXkI5zl915sIUSHyUe_ZdpEsfdcwWxx5MomUSYAfIVc/s320/MeshCentral2.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Managing a Rasperry Pi A+</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRBIVQQ_3F3CQzfPwd7ObItCAQXxtYJ6zEg4_ia0zJx7foLIkc7w_jMPc7YxZ_UOA8vKJSF8AWW_4NJnKgN0T3NsmaRX4wkl1v_l98o-iK_MVBBgE1oUraSeb3x8EN3A7FlyVkx_Mal9M/s1600/MeshCentral3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="718" data-original-width="1155" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRBIVQQ_3F3CQzfPwd7ObItCAQXxtYJ6zEg4_ia0zJx7foLIkc7w_jMPc7YxZ_UOA8vKJSF8AWW_4NJnKgN0T3NsmaRX4wkl1v_l98o-iK_MVBBgE1oUraSeb3x8EN3A7FlyVkx_Mal9M/s320/MeshCentral3.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Access a shell on a Raspbian device</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS6QIVAXFaTtLpu_beBbnOjhPtCk1CCcaz1xTAcutYWQVRexhxTCrDWITrvD3PDCyEUXqz4_7Vt1lD_2e8p5Mp6gAhGDWBL1V5UCab9HkO_ZyF5LT8YtUvwf6hQ_5g07v8yvVb5eWlSyM/s1600/MeshCentral4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="642" data-original-width="1151" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS6QIVAXFaTtLpu_beBbnOjhPtCk1CCcaz1xTAcutYWQVRexhxTCrDWITrvD3PDCyEUXqz4_7Vt1lD_2e8p5Mp6gAhGDWBL1V5UCab9HkO_ZyF5LT8YtUvwf6hQ_5g07v8yvVb5eWlSyM/s320/MeshCentral4.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Built-In file manager</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJFcRQXRsjZ1Wn9uHH0twBeHmCpYwLLlIWUiQ00lzgEo82fOHB9MfJs-_I-4CQ_WOeTTjYPeIHau_e220-9P18m-lVfS0wNXaL7EuJ9tY4EB9N657jRsSuqsgnMQzWYO-1RUNWyyGKD4/s1600/MeshCentral5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="797" data-original-width="1148" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJFcRQXRsjZ1Wn9uHH0twBeHmCpYwLLlIWUiQ00lzgEo82fOHB9MfJs-_I-4CQ_WOeTTjYPeIHau_e220-9P18m-lVfS0wNXaL7EuJ9tY4EB9N657jRsSuqsgnMQzWYO-1RUNWyyGKD4/s320/MeshCentral5.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Windows Desktop</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1B4NiJZWO2sMlUkoulmBnVJ9uFZu99takCRwxl9Q-4cPdyukgc9hbiUpTjwPbvk5NV2i7OLUZU6SqVhERFVGFtcGxLWNVQHaqwL7k0g2_-v-Vagyyxu5rw5PrPmPKbXE4Q9h75Z8qHA0/s1600/MeshCentral6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="615" data-original-width="1152" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1B4NiJZWO2sMlUkoulmBnVJ9uFZu99takCRwxl9Q-4cPdyukgc9hbiUpTjwPbvk5NV2i7OLUZU6SqVhERFVGFtcGxLWNVQHaqwL7k0g2_-v-Vagyyxu5rw5PrPmPKbXE4Q9h75Z8qHA0/s320/MeshCentral6.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Simple Admin Screen - Running smooth on 1GB RAM</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ6ui1hjJhzBD6H1e9SraxGILll2HzB0-iYeEIdntXHiV3Y55gZhY4Vm8Gv_CODkdtCd8jNVddFPB-y766K1Uo3A4d5-jlZuGDPv1T10k7yAPiD77JPMm3sI8byjR8FjEenO8N44tIhrk/s1600/MeshCentral7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="863" data-original-width="1147" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ6ui1hjJhzBD6H1e9SraxGILll2HzB0-iYeEIdntXHiV3Y55gZhY4Vm8Gv_CODkdtCd8jNVddFPB-y766K1Uo3A4d5-jlZuGDPv1T10k7yAPiD77JPMm3sI8byjR8FjEenO8N44tIhrk/s320/MeshCentral7.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Connect to the hardware KVM on a Intel vPro/AMT system</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8EjM05-zCkI3Ss4C-1HREJVVOOkbozTl1FwaDZO8rsBFtieNGg8Qj2todIzj7AvxFc04b2MD8-H7cbgaSrgf-TzYkP2QxNytN8jL40uhKCyuerYo7ICClNhrXqqG_AFtk4jSl3R9Ok70/s1600/MeshCentral8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="592" data-original-width="1014" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8EjM05-zCkI3Ss4C-1HREJVVOOkbozTl1FwaDZO8rsBFtieNGg8Qj2todIzj7AvxFc04b2MD8-H7cbgaSrgf-TzYkP2QxNytN8jL40uhKCyuerYo7ICClNhrXqqG_AFtk4jSl3R9Ok70/s320/MeshCentral8.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Access the device embedded Intel AMT control website</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtOYAal-kQwtWRoGPUY5gmc8ncx3_CEIQDCV1yM3T9I0uJGo8cbDRGVBuyXCZQ-uJI7mx79N2OLjzfMC3uA_cjfm3Aj8yESO_vleBhPCh9J1PfjwNQfdYBILSIgl-jn-77ifw3PImbb58/s1600/MeshCentral9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1221" data-original-width="1014" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtOYAal-kQwtWRoGPUY5gmc8ncx3_CEIQDCV1yM3T9I0uJGo8cbDRGVBuyXCZQ-uJI7mx79N2OLjzfMC3uA_cjfm3Aj8yESO_vleBhPCh9J1PfjwNQfdYBILSIgl-jn-77ifw3PImbb58/s320/MeshCentral9.jpg" width="265" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
See hardware information</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsfVkRtrevo9lWD8Okl7sufM_fN2Y75FKlm5yYXjSp0_xk1LZtrOMpFAYjfphOC8chGPdnA11NNvcGcYJ_OJ9dhSjAHzm7Yx_ThSZHiqnWkCz54b40wzfJVAhHzBOChlbUAhyphenhyphen9QpZwkxA/s1600/MeshCentral10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="484" data-original-width="1148" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsfVkRtrevo9lWD8Okl7sufM_fN2Y75FKlm5yYXjSp0_xk1LZtrOMpFAYjfphOC8chGPdnA11NNvcGcYJ_OJ9dhSjAHzm7Yx_ThSZHiqnWkCz54b40wzfJVAhHzBOChlbUAhyphenhyphen9QpZwkxA/s320/MeshCentral10.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Download an agent</div>
<div>
<br /></div>
</div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-36894598075775331132018-08-24T10:38:00.000-05:002018-08-24T10:38:05.910-05:00Windows 10 IoT Core - Initiating Recovery Via Recovery Partition<a href="https://nowmicroplayers.com/blog/intro-to-windows-iot-core" target="_blank">Windows 10 IoT Core</a> images can be built to include a <a href="https://docs.microsoft.com/en-us/windows/iot-core/build-your-image/addrecovery" target="_blank">recovery partition</a>. This can be useful for restoring the device to a working state without having the user reimage the device (which can be especially difficult with a <a href="https://developer.qualcomm.com/hardware/dragonboard-410c" target="_blank">Dragonboard 410c</a> or similar Qualcomm Snapdragon 410 based device).<br />
<br />
Our clue for initiating it yourself is <a href="https://github.com/ms-iot/iot-adk-addonkit/blob/master/Common/ProdPackages/Recovery.WinPE/startrecovery.cmd" target="_blank">buried </a>in the <a href="https://github.com/ms-iot/iot-adk-addonkit" target="_blank">iot-adk-addonkit</a> (or bcdedit if you are really bored):<br />
<br />
<blockquote class="tr_bq">
bcdedit /set {bootmgr} bootsequence {a5935ff2-32ba-4617-bf36-5ac314b3f9bf}<br />shutdown /r /t 0</blockquote>
<div>
You can initiate this by using the <a href="https://github.com/Microsoft/Windows-iotcore-samples/blob/55bd183b8fd704b1bce3ffd8f5d6d805b3eec70f/Samples/ExternalProcessLauncher/CS/README.md" target="_blank">Windows.System.ProcessLauncher API</a>.</div>
<div>
<br /></div>
<div>
I've also initiated the process by interrupting power to the device three times in a row during startup. In a perfect world, you would use a companion app or hardware button to initiate a restore as well.</div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-35798778890642331622018-08-23T13:09:00.000-05:002018-08-23T13:09:31.753-05:00Windows Storage Spaces - Setting Up a Mirrored SSD Tier with RAID5 HDD Tier<a href="https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/overview" target="_blank">Storage Spaces</a> is a great improvement over the baseline software RAID functionality built into Windows. The ability to have a SSD cache tier as well as full management via PowerShell only sweeten the deal.<div>
<br /></div>
<div>
I use it on my lab VM host which mostly does compiling of OS images and shuttling files back and forth to work. My existing setup was a mirrored 1TB SSD cache tier with 6 x 3TB HDD tier. I wanted to try keeping the SSD tier mirrored, but move the HDD tier to RAID5.</div>
<div>
<br /></div>
<div>
Long story short, the performance is pretty terrible for what I do, but I wanted to write a blog post for anyone looking to do this for their own purposes. I suspect a larger SSD cache might make a difference, but I'm also certain the performance characteristics are good enough for a fancy Plex server or other less write intensive application.</div>
<div>
<br /></div>
<div>
Here's the PowerShell to set it up (change the size values for your array. You might have to guess a bit):</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<blockquote class="tr_bq">
Get-StorageTier |
Remove-StorageTier #Delete existing tiers if you have tried this 23939 times.</blockquote>
<blockquote class="tr_bq">
New-StorageTier
-StoragePoolFriendlyName StoragePool -FriendlyName SSD_Tier -MediaType SSD
-ResiliencySettingName Mirror</blockquote>
<blockquote class="tr_bq">
New-StorageTier
-StoragePoolFriendlyName StoragePool -FriendlyName HDD_Tier -MediaType HDD
-ResiliencySettingName Parity</blockquote>
<blockquote class="tr_bq">
$ssd_tier =
Get-StorageTier -FriendlyName SSD_Tier</blockquote>
<blockquote class="tr_bq">
$hdd_tier =
Get-StorageTier -FriendlyName HDD_Tier</blockquote>
<blockquote class="tr_bq">
<span style="font-size: 11pt;">New-VirtualDisk
-StoragePoolFriendlyName StoragePool -FriendlyName "VirtualDisk"
-StorageTiers @($ssd_tier,$hdd_tier) -StorageTierSizes 400GB, 13000GB
-WriteCacheSize 50GB</span></blockquote>
</blockquote>
</div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-41202419442342369722018-08-20T22:06:00.002-05:002018-08-20T22:41:57.912-05:00Chome Device Management<br />
I always lose this link to what each setting in the Google Admin Console does:<br />
<br />
<a href="https://support.google.com/chrome/a/answer/1375678?hl=en">https://support.google.com/chrome/a/answer/1375678?hl=en</a><br />
<a href="https://support.google.com/chrome/a/answer/2657289?hl=en">https://support.google.com/chrome/a/answer/2657289?hl=en</a><br />
<br />
I also clearly don't know how to use bookmarks.Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-31118153982720478032018-06-12T14:57:00.002-05:002018-06-12T14:57:51.688-05:00Diving In - Windows 10 IoT Core for Digital Signage - Part 2, Do<br />
<h2 style="text-align: center;">
Diving In - Windows 10 IoT Core for Digital Signage - Part 2, Do</h2>
<br />
In <a href="https://blog.internetofgrey.com/2018/06/diving-in-windows-10-iot-core-for.html" target="_blank">Part 1</a>, we looked at why you might use Windows 10 IoT Core and started exploring the platform.<br />
<br />
There are plenty of <a href="https://www.hackster.io/microsoft/products/windows-10-iot-core" target="_blank">awesome things you could build</a> with an Windows 10 IoT Core device. If this is a hobby, a solution to to internal/personal problem or a point solution at work, you probably don't need to create a commercial device.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuDneYo70cc5h3Y_YypYgxAuDqqCpn7l1LyH1ZbDqfi8uQGvFZI74g8c93x-uviXLoP0MXyNMTj3w-E5jwN0KaByCDHYwiHKFQFOkJ78nJbH_cbmoT-TsYNcv7IQ_UYyrZk_lkADBOx5Y/s1600/yvette-de-wit-118721.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1067" data-original-width="1600" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuDneYo70cc5h3Y_YypYgxAuDqqCpn7l1LyH1ZbDqfi8uQGvFZI74g8c93x-uviXLoP0MXyNMTj3w-E5jwN0KaByCDHYwiHKFQFOkJ78nJbH_cbmoT-TsYNcv7IQ_UYyrZk_lkADBOx5Y/s400/yvette-de-wit-118721.jpg" width="400" /></a></div>
<br />
<br />
However, if you want to bring your solution to market-<br />
<br />
<ol>
<li>Publish your app on the Windows Store. <a href="https://docs.microsoft.com/en-us/windows/iot-core/commercialize-your-device/installingandservicing" target="_blank">Export a package</a></li>
<li>Find a device. Commercial devices tend to be more expensive than a Raspberry Pi, but there are some advantages</li>
<ol>
<li>Warehousing, logistics, assembly and imaging</li>
<li>Warranty and support</li>
<li>Certifications and other material required for some environments/countries</li>
<li>Roadmaps and supply chain predictability</li>
<li>Some OEMs will even build images as part of a hardware partnership</li>
</ol>
<li><a href="https://docs.microsoft.com/en-us/windows-hardware/manufacture/iot/iot-core-manufacturing-guide" target="_blank">Build an image</a>. Ask yourself some questions:</li>
<ol>
<li>What's your risk appetite for updates?</li>
<li>What does the out of box experience look like?</li>
<li>Do you need remote management?</li>
<li>Will the user be able to reimage or recover the OS on the device?</li>
<li>How will settings management be performed?</li>
</ol>
<li>Making products is hard. There's always a million little details, so don't forget to <a href="https://www.reddit.com/r/pics/comments/d3zhx/how_to_draw_an_owl/" target="_blank">draw the rest of the owl</a></li>
</ol>
<div>
Even if I didn't work for an OEM, I would recommend finding an OEM partner that could help shepherd this process and provide pre-existing pieces for as much as possible. The overall point is for you to work on all the pieces that make your solution a unique entry into the market without the hardware/OS/configuration/logistics/cat herding getting in the way.</div>
<br />
<br />
<br />
<br />
<br />Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-46013368697612808662018-06-12T14:56:00.005-05:002018-06-12T14:56:59.278-05:00Diving In - Windows 10 IoT Core for Digital Signage - Part 1, Explore<br />
<h2 style="text-align: center;">
<span style="font-family: inherit;">Diving In - Windows 10 IoT Core for Digital Signage - Part 1, Explore</span></h2>
<div style="text-align: center;">
<span style="font-family: inherit;"><br /></span></div>
<span style="font-family: inherit;">Exploring a new technology stack can be really hard when you are just getting started. However, it isn't unusual to just need a push in the right direction to start. Based on customer questions and some common themes I see in the community, I thought I'd write up a short guide for exploring Windows 10 IoT Core, a lightweight purpose built OS for applications that blend the line between traditional embedded and general purpose computing systems.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<br />
<h4>
<span style="font-family: inherit;">Why Windows 10 IoT Core?</span></h4>
<span style="font-family: inherit;">I've written a lot about </span><a href="https://developer.microsoft.com/en-us/windows/iot" style="font-family: inherit;" target="_blank">Windows 10 IoT Core</a><span style="font-family: inherit;">, </span><a href="https://nowmicroplayers.com/Solutions/IoTPlayer" style="font-family: inherit;" target="_blank">Now Micro IoT Player</a><span style="font-family: inherit;"> and even made a </span><a href="https://www.youtube.com/channel/UCSEYHVPkIOYPN06j2j5MNcw/videos" style="font-family: inherit;" target="_blank">few videos</a><span style="font-family: inherit;"> if you want to get the </span><a href="https://www.youtube.com/watch?v=81dRviZQxs4" style="font-family: inherit;" target="_blank">30 min version</a><span style="font-family: inherit;">.</span><br />
<br />
<ul>
<li>A streamlined, purpose built version of Windows for running UWP apps and easy to cloud enable</li>
<li>Secure by default and regularly patched</li>
<li>Available on supportable, commercial grade hardware</li>
</ul>
<div>
<h4>
<span style="font-family: inherit;">Prerequisites:</span></h4>
</div>
<ol><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtw2RGH2sbhm_ISuHBaQcs4TENj8Vh42QrHuLVwpe5cG6IN54EBw-yQsJ6tkt8DiUfdJBh47F9hOVj5lnmL1L4_lRWVoMYMb5uCS1vbD-hdYNXvlCGA-TVgYCRstp12mQ7-Q-mPaW5jeA/s1600/pineapple-supply-co-244487.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1067" data-original-width="1600" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtw2RGH2sbhm_ISuHBaQcs4TENj8Vh42QrHuLVwpe5cG6IN54EBw-yQsJ6tkt8DiUfdJBh47F9hOVj5lnmL1L4_lRWVoMYMb5uCS1vbD-hdYNXvlCGA-TVgYCRstp12mQ7-Q-mPaW5jeA/s320/pineapple-supply-co-244487.jpg" width="320" /></a>
<li>A UWP app you want to run. Start with a <a href="https://github.com/Microsoft/Windows-iotcore-samples" target="_blank">sample</a> if you don't have a universal app. Or <a href="https://nowmicroplayers.com/Solutions/IoTPlayer" target="_blank">Now Micro Player</a> if you just want to run some HTML5 content.</li>
<li>A device- The Raspberry Pi doesn't have hardware accelerated video, but is a great exploratory device. If you are building a commercial product, be sure to understand your case, certification, display resolution and cost requirements.</li>
<li><a href="https://docs.microsoft.com/en-us/windows/iot-core/connect-your-device/iotdashboard" target="_blank">Windows 10 IoT Core Dashboard</a> - This makes finding your device's IP and some other tasks easier. The Windows 10 IoT Core Dashboard also will download and image SD cards for your Raspberry Pi.</li>
</ol>
<h4>
Things to Explore</h4>
<ol>
<li>Remote PowerShell - PowerShell is my favorite way to automate a job away and there are a t<a href="https://docs.microsoft.com/en-us/windows/iot-core/manage-your-device/commandlineutils" target="_blank">on of commands</a> you can run on the system.</li>
<li>Windows Device Portal - In place of a local GUI, use <a href="https://docs.microsoft.com/en-us/windows/iot-core/manage-your-device/deviceportal" target="_blank">Windows Device Portal</a> to manage the device. The CPU and GPU performance graphs are the best way to figure out if you have enough hardware for the job.</li>
<li>Windows 10 IoT Dashboard - If you have a bunch of devices, this is the easiest way to discover them.</li>
<li>Azure IoT Central - A SaaS management solution for IoT that is a quick setup.</li>
</ol>
<div>
<br /></div>
<div>
<a href="https://blog.internetofgrey.com/2018/06/diving-in-windows-10-iot-core-for_7.html" target="_blank">Part 2 - Commercialization</a></div>
<br />
<br />
<br />
<br />Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-86544962969612841602018-05-31T13:07:00.000-05:002018-05-31T13:07:05.891-05:00Capturing a FFU from a Windows 10 IoT Core DeviceI would not actually recommend configuring a Windows 10 IoT Core system and then capturing it (you should use the <a href="https://github.com/ms-iot/iot-adk-addonkit/blob/master/README.md" target="_blank">provided build system</a>), but if you were trying to capture a demo or replicate a problem, there is a way to <a href="https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/deploy-windows-using-full-flash-update--ffu" target="_blank">capture to a FFU</a> as of Windows 10 1709 or later.<br />
<br />
The basic version is to boot to WinPE and use DISM to capture to an attached USB stick or mapped network drive.<br />
<br />
The addition of the "capture-ffu" switch is where the magic happens:<br />
<br />
<b>DISM.exe /capture-ffu /imagefile=R:\MyDemoImage.ffu /capturedrive=\\.\PhysicalDrive0</b>Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-57966083553440285222018-05-17T17:38:00.002-05:002018-05-30T13:45:49.770-05:00HTTP 502.5 When Deploying ASP.NET Core Site to AWS EBSI recently had a fun time diagnosing a weird deployment error in the following environment:<br />
<br />
<ul>
<li>ASP.NET Core 2.0 site hosted on AWS EBS</li>
<li>VS 2017</li>
<li>IIS 10.0 running on 64-bit Windows Server 2016/1.2.0</li>
</ul>
<div>
After deployment, the site fails to load with a "HTTP Error 502.5 - Process Failure. When retrieving logs from EBS, we see an error when starting the site:</div>
<div>
<span style="background-color: white; color: #242729; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNOFl59TGIydU9uw8cmGZ2zqQB-VG_Z4e1fG_EdTlBxlygtdmZsstJYeDlfhIxKmyWQMSmaKGZvyPvaUwLG6rPcXQKNLKBGkgyRrzmr7Nmx1GSh5rcTci2uL_sIJ_D0RAd3IVZMMRggHA/s1600/HTTP502.5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="459" data-original-width="669" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNOFl59TGIydU9uw8cmGZ2zqQB-VG_Z4e1fG_EdTlBxlygtdmZsstJYeDlfhIxKmyWQMSmaKGZvyPvaUwLG6rPcXQKNLKBGkgyRrzmr7Nmx1GSh5rcTci2uL_sIJ_D0RAd3IVZMMRggHA/s320/HTTP502.5.PNG" width="320" /></a></div>
<span style="background-color: white; color: #242729; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px;"><br /></span></div>
<blockquote class="tr_bq">
<pre style="white-space: pre-wrap; word-wrap: break-word;">Error 0:(0) IIS AspNetCore Module - Application 'MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE' with physical root 'C:\inetpub\AspNetCoreWebApps\app\' failed to start process with commandline 'dotnet .\MYAPP.dll', ErrorCode = '0x80004005 : 8000808c.
</pre>
<div>
<br /></div>
</blockquote>
<br />
In the end, the fix was simple: Downgrade the "Microsoft.AspNetCore.All" nuget package to the last version.<br />
<br />
I believe what is happening here is AWS doesn't have the newest version of the .NET Core runtime and is failing because of it. I believe you could also fix this by installing the correct version of the runtime on the EBS instance or specifying a runtime in the csproj.<br />
<br />
In the past, a new deployment into a fresh EBS application has also fixed the issue, but did not in this instance.<br />
<br />
<b>Addendum</b>: If you are having this issue on your local box, install the <a href="https://www.microsoft.com/net/download/all" target="_blank">version of the SDK</a> that the project requires. You may need to install the 1.0 or 1.1 SDK for example.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-89951899581998570422018-05-15T09:17:00.003-05:002018-05-15T09:18:16.350-05:00Reflections on Microsoft BUILD 2018<br />
I had the pleasure to attend <a href="https://developer.microsoft.com/en-us/events/build/content" target="_blank">Microsoft BUILD</a> this year. There's so much to see and do, it really is an assault on the senses. Despite so much going on and all the <a href="https://arstechnica.com/gadgets/2018/05/build-2018-microsoft-embraces-its-new-platforms-azure-and-microsoft-365/" target="_blank">huge announcements</a>, I never feel like was missing anything because the sessions are recorded and freely available on the web. The greater value is the ability to share videos of sessions I found particularly interesting with those that didn't have the opportunity or time to attend the conference.<br />
<br />
There was a lot of AI/ML on display, from Azure hosted, to things you could host on-box with Azure IoT Edge. It will take a while to digest it all, but I overall love the idea that you can find a way to work with these new technologies on the platform, device and security/risk posture of your choosing.<br />
<br />
Some things I ran across:<br />
<br />
<ul>
<li>A neat <a href="https://github.com/Microsoft/Cognitive-Samples-IntelligentKiosk" target="_blank">demo </a>of Microsoft Cognitive Services</li>
<li><a href="https://github.com/richdizz/Microsoft-Smart-Mirror" target="_blank">Smart Mirror</a> (The author had an insightful <a href="https://channel9.msdn.com/Events/Build/2018/THR2430" target="_blank">Microsoft Graph for IoT Devices</a> demo)</li>
<li><a href="https://www.microsoft.com/en-us/research/publication/seven-properties-highly-secure-devices/" target="_blank">The Seven Properties of Highly Secure Devices</a> </li>
<li><a href="https://developer.microsoft.com/en-us/events/build/content/intelligent-edge-with-windows-ai" target="_blank">Windows IoT: Accelerate the Intelligent Edge with the Windows AI Platform : Build 201</a>8\</li>
</ul>
<br />
<br />
<div>
<br /></div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-66689054050426738072018-05-11T22:34:00.000-05:002018-05-11T22:34:42.925-05:00Adding drivers to Windows 10 IoT Core at Runtime Using Windows Device Portal<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
While I was compiling some Windows 10 IoT Core 1709 images, I made a small typo in an input file that resulted in one of the BSP drivers not being included in the image. Instead of compiling the whole thing immediately, I stumbled upon an easy way to add a driver to a compiled image and make sure I had the correct one.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>Use <a href="https://docs.microsoft.com/en-us/windows-hardware/manufacture/iot/iot-core-adk-addons-command-line-options" target="_blank">inf2cab </a>from the <a href="https://github.com/ms-iot/iot-adk-addonkit" target="_blank">iot-adk-addonkit</a> to create a CAB file: inf2cab c:\temp\driver\driver.inf Driver.MyDevice</li>
<li>Navigate to Windows Device Portal | Windows Update</li>
<li>Select "Choose Files", navigate to the CAB and click Install</li>
<li>Reboot</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifJ9CW09XFp-oO_kwwtEHivJLEgzFFSww6g_eJTKoUndV8_yFTc0v7t1sePyZyf55sQ1zNsUC-kO4GPN5jLfR6c96op7kULt2wRwXodkztDE_9_8ZngcQ8_vuNMfbZNDJVsDzd1GCNPzM/s1600/2018-01-21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="848" data-original-width="942" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifJ9CW09XFp-oO_kwwtEHivJLEgzFFSww6g_eJTKoUndV8_yFTc0v7t1sePyZyf55sQ1zNsUC-kO4GPN5jLfR6c96op7kULt2wRwXodkztDE_9_8ZngcQ8_vuNMfbZNDJVsDzd1GCNPzM/s320/2018-01-21.png" width="320" /></a></div>
<br />
Using this method, it was easy for me to see that I had messed up the input file versus having the incorrect device driver and incorporate a fix into my next set of builds.Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-65807425283131153132018-01-05T10:05:00.001-06:002018-01-05T10:28:22.809-06:00Meltdown and Spectre - Considerations for Digital Signage/IoT/Embedded DevicesI've been following the Meltdown and Spectre news since last week since it was just vague mentions on lkml and speculation on twitter. After receiving some questions, I thought I would provide my take on the impact and practical things to mitigate the issues and plan for the future.<br />
<br />
Some information/background on the vulnerabilities:<br />
<br />
<ul>
<li><a href="https://arstechnica.com/gadgets/2018/01/meltdown-and-spectre-heres-what-intel-apple-microsoft-others-are-doing-about-it/" target="_blank">Ars Technica</a></li>
<li><a href="https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html" target="_blank">Google Project Zero</a></li>
<li><a href="https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/" target="_blank">Mozilla</a></li>
</ul>
<div>
Basically, these attacks allow someone running code on a system to access protected memory contents by using timing differences and speculative execution features in a lot of modern processors.</div>
<div>
<br /></div>
<br />
Digital Signage/IoT/Embedded solutions are somewhat unique in that the application set on on the system is usually well-known and strategically static. These vulnerabilities require the attacker to be able to run code on your system. This means the actual risk is low for systems running the majority of content. The things that change on a solution are typically:<br />
<br />
<ul>
<li>Frequent content changes</li>
<li>Monthly operating system patches</li>
<li>Rare player/CMS updates</li>
</ul>
<br />
<br />
Concrete Things To Do<br />
<br />
<ol>
<li>Turn on automatic patches. The risk of not being patched is far more than the risk of a patch breaking a system. Chaining remote execution vulnerabilities with local privilege escalation vulnerabilities is a lot harder if you actually patch things. Do this first.</li>
<li>Examine your systems for things that run untrusted code. Thankfully most solutions don't let the user navigate to arbitrary web pages or install applications</li>
<li>Look into Application Binary Whitelisting and Write Filters. These technologies can prevent untrusted code from being run on the system and allow you to revert back to a known good configuration with a reboot.</li>
<li>Have a response plan. Do you know who does what and how if you need to mitigate a piece of malware on one or more systems?</li>
</ol>
<div>
Some ruckus has been made about performance impacts recently released patches. Although some workloads can be impacted it is mostly I/O intensive workloads not typically seen in Digital Signage. It is also very important to not rely on synthetic benchmarks but your actual workload when judging the performance impact- synthetic benchmarks are going to give you an unrealistic picture.<br />
<br /></div>
<div>
Overall, the best thing to do right now is to communicate a plan to stakeholders and patch. Ensuring systems are patching automatically now is the best protection against a "weaponized" version of any malware later.</div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-41569036339515503512017-11-29T15:58:00.002-06:002017-11-29T16:11:12.121-06:00Braswell/Cherry Trail BSP for Windows 10 IoT CoreI finally found the BSP for Braswell and Cherry Trail based devices today. It was released in October and builds against 1709 if you follow the instructions here:<br />
<br />
<blockquote class="tr_bq">
<a href="https://docs.microsoft.com/en-us/windows/iot-core/build-your-image/createbsps">https://docs.microsoft.com/en-us/windows/iot-core/build-your-image/createbsps</a></blockquote>
<br />
<span style="font-family: "calibri" , sans-serif; font-size: 11.0pt;">Listed under </span><span style="font-family: "calibri" , sans-serif;"><span style="font-size: 14.6667px;"><span style="white-space: pre;"> </span>"Board Support Package for Intel Atom® Processor Windows* 10 IoT Core 32-bit and 64-bit Platforms" - </span></span><span style="font-family: "calibri" , sans-serif; font-size: 11pt;"> </span><a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.intel.com%2Fcontent%2Fwww%2Fus%2Fen%2Fembedded%2Fproducts%2Fbraswell%2Fsoftware-and-drivers.html&data=02%7C01%7Cbernardc%40nowmicro.com%7Cdf26994d5940410d628f08d53768952b%7Cf8a9903e111f4bab99804ab7dc637d43%7C1%7C0%7C636475844674726673&sdata=y5LHc7Q7zqFt%2F1LbuZhHysqDrSOtT4HpPBGsL27CmjM%3D&reserved=0" style="font-family: Calibri, sans-serif; font-size: 11pt;">https://www.intel.com/content/www/us/en/embedded/products/braswell/software-and-drivers.html</a>Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-40411054627113517372017-11-03T21:02:00.001-05:002017-11-03T21:02:04.149-05:00Simple Webserver for Windows 10 IoT CoreRecently, I needed a small web server for a <a href="http://nowmicro.com/Embedded/MP%2FIoTPlayer" target="_blank">project </a>I was working on. I needed to run it in a UWP background task on Windows 10 IoT Core, so my options were a bit limited.<br />
<br />
The <a href="https://github.com/ms-iot/samples">ms-iot/samples</a> repository has quite a few gems. In particular, the <a href="https://github.com/ms-iot/samples/tree/develop/IoTBlockly">IoTBlocky Sample</a> has a very basic web server called <a href="https://github.com/ms-iot/samples/blob/develop/IoTBlockly/SimpleWebServer/SimpleWebServer.cs">SimpleWebServer</a>. I ended up adding some support for parameters, but otherwise was very happy about how fast I got a web server hosted in my code.<br />
<br />
The one deficiency is the lack of <a href="https://docs.microsoft.com/en-us/windows/uwp/networking/networking-basics" target="_blank">SSL support</a>:<br />
<br />
<div class="lf-text-block lf-block x-hidden-focus" data-lf-anchor-id="87c5ec69d58caafe294dfd4767423273:0" style="background-color: white; color: #222222; font-family: segoe-ui_normal, "Segoe UI", Segoe, "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-size: 16px; margin-top: 1rem; padding-right: 25px !important; position: relative !important;">
</div>
<blockquote class="tr_bq">
A <a data-linktype="external" href="https://msdn.microsoft.com/library/windows/apps/br226882" style="background-color: transparent; color: #0078d7; cursor: pointer; outline: 0px; word-wrap: break-word;"><span class="x-hidden-focus" style="font-family: segoe-ui_bold, "Segoe UI Bold", "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-weight: 700;">StreamSocket</span></a> object can be configured to use SSL/TLS for communications between the client and the server. This support for SSL/TLS is limited to using the <span style="font-family: segoe-ui_bold, "Segoe UI Bold", "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-weight: 700;">StreamSocket</span> object as the client in the SSL/TLS negotiation. You cannot use SSL/TLS with the <span style="font-family: segoe-ui_bold, "Segoe UI Bold", "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-weight: 700;">StreamSocket</span> created by a <a data-linktype="external" href="https://msdn.microsoft.com/library/windows/apps/br226906" style="background-color: transparent; color: #0078d7; cursor: pointer; text-decoration-line: none; word-wrap: break-word;"><span style="font-family: segoe-ui_bold, "Segoe UI Bold", "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-weight: 700;">StreamSocketListener</span></a> when incoming communications are received, because SSL/TLS negotiation as a server is not implemented by the <span style="font-family: segoe-ui_bold, "Segoe UI Bold", "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-weight: 700;">StreamSocket</span> class.</blockquote>
<br />
<div style="color: black; font-family: "Times New Roman"; font-size: medium;">
I was hoping I was incorrect about this, but I haven't found any evidence to the contrary. With .NET Standard 2.0, I hope to find something else I can include instead.</div>
<div>
<br /></div>
<br />
<div class="lf-text-block lf-block x-hidden-focus" data-lf-anchor-id="87c5ec69d58caafe294dfd4767423273:0" style="background-color: white; margin-top: 1rem; padding-right: 25px !important; position: relative !important;">
</div>
<div style="color: #222222; font-family: segoe-ui_normal, "Segoe UI", Segoe, "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-size: 16px;">
<a aria-label="Write a Sidenote" class="fycon-action-view" data-lf-anchor-id="87c5ec69d58caafe294dfd4767423273:0" href="https://www.blogger.com/null" style="background: 0px 0px; border: none; color: #6d7079; cursor: pointer; display: inline-block; font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif; font-size: 11px; font-stretch: normal; height: 13px; line-height: 13px; margin: 0px 0px 0px 6px; opacity: 1; position: relative; user-select: none; word-wrap: break-word;" tabindex="0"><br /></a></div>
<div style="color: #222222; font-family: segoe-ui_normal, "Segoe UI", Segoe, "Segoe WP", "Helvetica Neue", Helvetica, sans-serif; font-size: 16px;">
<a aria-label="Write a Sidenote" class="fycon-action-view" data-lf-anchor-id="87c5ec69d58caafe294dfd4767423273:0" href="https://www.blogger.com/null" style="background: 0px 0px; border: none; color: #6d7079; cursor: pointer; display: inline-block; font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif; font-size: 11px; font-stretch: normal; height: 13px; line-height: 13px; margin: 0px 0px 0px 6px; opacity: 1; position: relative; user-select: none; word-wrap: break-word;" tabindex="0"><br /></a></div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com1tag:blogger.com,1999:blog-9089173216457557197.post-7068677931481289912017-10-25T21:26:00.003-05:002017-10-25T21:26:36.096-05:00Things In My Lab - Raspberry Pi 3 and Windows 10 IoT Core For Digital SignageRecently, I wrote an <a href="http://nowmicro.com/blog/raspberry-pi-3-and-windows-10-iot-core-for-digital-signage" target="_blank">short post</a> on using Windows 10 IoT Core on Raspberry Pi devices for Digital signage. I wanted to detail a little bit more about what hardware I use for testing in the lab.<br />
<br />
I have a <a href="https://www.adafruit.com/product/3187" target="_blank">SmartiPi Touch</a> and Raspberry Pi setup in the home lab, which is really neat for giving demos and quickly testing stuff- as long as I don't need smooth video playback. It is small and also shows what the UI looks like at a lower resolution<br />
<br />
Otherwise, I use our <a href="http://nowmicroplayers.com/Embedded/MP%2FIoTPlayer" target="_blank">Now Micro IoT Player 4k</a>, since I can quickly PXE boot it and reimage for greenfield testing. Prior to that product release, I used a variety of Intel BayTrail based devices, depending on what I was trying to accomplish at the time.<br />
<br />
Overall, the IoT Player 4k is a lot faster and easier to work with when debugging UWP apps, but having a second monitor with me isn't always convenient.<br />
<br />Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com1tag:blogger.com,1999:blog-9089173216457557197.post-8774830959463050602017-10-21T09:51:00.004-05:002017-10-21T09:51:44.490-05:00Adding Non-BSP Drivers to Windows 10 IoT CoreWindows 10 IoT Core has a significantly different way of handling drivers over a traditional Windows OS. In particular, BSP drivers are compiled into the image during <a href="https://docs.microsoft.com/en-us/windows-hardware/manufacture/iot/iot-core-manufacturing-guide" target="_blank">FFU creation</a>.<br />
<br />
If you are <a href="https://social.msdn.microsoft.com/Forums/en-US/a8ab0a56-f89b-4d1b-a9d2-690c78444ce1/windows-iot-core-on-intel-stick-wifi-trouble?forum=WindowsIoT" target="_blank">looking to install Windows 10 IoT Core on a different device</a> than the FFU was built for, you can install drivers at run time on the device. Early on, while trying to find a <a href="http://nowmicroplayers.com/Embedded/MP%2Fiotplayer" target="_blank">commercial Windows 10 IoT Core platform</a>, I did extensive testing with Intel Compute Sticks and can verify that the Wi-Fi module (Intel AC 7265) in the STK1AW32SC can is fully functional after installing a driver.<br />
<br />
Basically, follow these <a href="https://developer.microsoft.com/en-us/windows/iot/samples/driverlab3" target="_blank">steps</a>, but copy the <a href="https://www.intel.com/content/www/us/en/support/articles/000017246/network-and-i-o/wireless-networking.html" target="_blank">driver for the device</a> from Intel. You will need a Windows 10 driver (not Windows 7/8.1) and may need to search through the INFs to find the correct device ID.<br />
<br />
The command itself is simple- <a href="https://docs.microsoft.com/en-us/windows/iot-core/connect-your-device/powershell" target="_blank">Use PowerShell to connect to the device</a>, CD to the directory you copied the files to and run:<br />
<blockquote class="tr_bq">
<pre class="highlight" style="background-color: #f2f2f2; border-radius: 0px; border: 1px solid rgb(230, 230, 230); box-sizing: border-box; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14.6667px; margin-bottom: 20px; margin-top: 20px; overflow: auto; padding: 32px; word-break: break-all; word-wrap: break-word;"><code style="border-radius: 0px; box-sizing: border-box; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13.9333px; padding: 0px; white-space: pre-wrap;">devcon.exe dp_add DRIVERINF.inf </code></pre>
</blockquote>
After rebooting, the device will be functional. So far, I've only used this method for Wi-Fi drivers. I would not expect all drivers to work, especially if they call APIs not available on Windows 10 IoT Core or install additional components.Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-34954004333365126702017-05-01T21:07:00.002-05:002017-05-01T21:07:26.345-05:00Running IoT Background Task On Your Development Machine<br />
At some point, running an <a href="https://developer.microsoft.com/en-us/windows/iot/docs/backgroundapplications" target="_blank">IBackground Task</a> based project just stopped working on my development machines. You can use these on an IoT Core device to provide background service like functionality. In my case, the Now Micro Agent provides <a href="https://docs.microsoft.com/en-us/azure/iot-hub/" target="_blank">Azure IoT Hub</a>, device management and other services on the <a href="http://www.nowmicro.com/Embedded/MP/IoTPlayer" target="_blank">Now Micro IoT Player</a>.<br />
<br />
Turns out, you can enabled debugging these by following some <a href="https://developer.microsoft.com/en-us/windows/iot/docs/embeddedmode" target="_blank">instructions</a>. It does involve needing ICD, but otherwise is a simple fix.<br />
<br />Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-44637992469573105392017-02-18T10:32:00.001-06:002017-02-18T10:32:22.728-06:00Stopping the Windows Device Portal at runtimeIn another of my series of "questions I asked in a forum and didn't really find a good answer to", I was looking for a way to stop the Windows Device Portal.<br />
<br />
In Windows 10 IoT Core, the Windows Device Portal is a build time feature. I wanted the option to possible enable it in a production, locked down, device without having the user reimage the device.<br />
<br />
The Windows Device Portal is hosted in a Windows Service called WebManagement. To stop it, run this command:<br />
<blockquote class="tr_bq">
sc.exe stop WebManagement</blockquote>
Knowing it can be managed via SC, I can set the startup to Manual and only start it when I need it. I also need to enable a user account to login, since I don't actually have an enabled account on my retail build.Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-21010449145755273132017-02-17T15:08:00.000-06:002017-02-17T17:36:53.185-06:00Submitting a Headless App to the Windows StoreI recently ran across an <a href="https://social.msdn.microsoft.com/Forums/en-US/1a380177-2e9c-48ee-994b-240fd22dc502/submitting-a-headless-app-to-the-universal-store?forum=WindowsIoT#30aa125d-2f3b-4055-b990-15279fc7f65f" target="_blank">issue</a> when submitting a headless app for Windows 10 IoT Core to the Windows Store.<br />
<br />
Basically, you have to include a dummy UWP app in the solution so you can pass the automated Store checks. In my case, I was greeted with a nice message:<br />
<br />
<span style="background-color: white; color: #333333; font-family: "segoe ui" , "lucida grande" , "verdana" , "arial" , "helvetica" , sans-serif; font-size: 14px;">"An executable image named '<APPNAME>.winmd could not be found in <C:\Projects\<APPNAME>\obj\x86\Release\ilc\in".</span><br />
<span style="background-color: white; color: #333333; font-family: "segoe ui" , "lucida grande" , "verdana" , "arial" , "helvetica" , sans-serif; font-size: 14px;"><br /></span>
Posting in forums didn't come up with anything, so I ended up opening a support incident, which yielded a simple workaround:<br />
<br />
<div style="background-color: white; border: none; color: #333333; font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 14px; list-style-type: none; margin-bottom: 1em; outline: 0px; padding: 0px;">
Add the EXE to a folder in the solution and it will build (instead of at the root like the <a href="https://developer.microsoft.com/en-us/windows/iot/docs/store" target="_blank">instructions </a>state).</div>
<div style="background-color: white; border: none; color: #333333; font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 14px; list-style-type: none; margin-bottom: 1em; outline: 0px; padding: 0px;">
In the Package.appxmanifest, ensure you specify the folder in the Application node:</div>
<pre class="prettyprint prettyprinted" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #333333; direction: ltr; font-family: inherit; font-size: 14px; list-style-type: none; min-height: 70px; outline: 0px; overflow-x: auto; overflow-y: visible; padding: 2px; word-wrap: normal;"><span class="pln" style="border: 0px; color: black; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;"> </span><span class="tag" style="border: 0px; color: #000088; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;"><Application</span><span class="pln" style="border: 0px; color: black; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;"> </span><span class="atn" style="border: 0px; color: #660066; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">Id</span><span class="pun" style="border: 0px; color: #666600; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">=</span><span class="atv" style="border: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">"App"</span><span class="pln" style="border: 0px; color: black; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;"> </span><span class="atn" style="border: 0px; color: #660066; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">Executable</span><span class="pun" style="border: 0px; color: #666600; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">=</span><span class="atv" style="border: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">"EXE\DummyApp.exe"</span><span class="pln" style="border: 0px; color: black; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;"> </span><span class="atn" style="border: 0px; color: #660066; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">EntryPoint</span><span class="pun" style="border: 0px; color: #666600; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">=</span><span class="atv" style="border: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">"DummyApp.App"</span><span class="tag" style="border: 0px; color: #000088; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;">></span></pre>
<br style="background-color: white; color: #333333; font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 14px;" />
<div style="background-color: white; border: none; color: #333333; font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 14px; list-style-type: none; margin-bottom: 1em; outline: 0px; padding: 0px;">
In my case, the blank UWP app is in a folder named "EXE". I also specified "Copy to Output Directory" as "Copy Always"<br />
<br />
<b>Update</b>: I figured I should post a little bit more context. <a href="https://developer.microsoft.com/en-us/windows/iot/docs/store" target="_blank">This </a>is the guidance for publishing IoT Core apps to the Windows Store to have it update your apps automatically. To submit the app, it must be compiled in Release mode. Release compiles with a checkbox enabled called "<span style="font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;">Compile with .NET Native tool chain", which appears to have a bug when you include an EXE at the root of a project.</span><br />
<span style="font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;">The best part is that the only reason to do all of this is to pass the automated submission checks. </span></div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-59402374709265144012017-02-15T10:25:00.000-06:002017-02-15T13:05:22.712-06:00Windows 10 IoT Enterprise Lockdown SettingsAlternate Title: Learn This Neat Trick to Block Edge Gestures<br />
<br />
If you happened to use Windows Embedded 8.1 Industry on a POS/Digital Signage Player/kiosk, you are probably looking for the same features in Windows 10 IoT Enterprise.<br />
<br />
<a href="https://technet.microsoft.com/en-us/itpro/windows/manage/lockdown-features-windows-10">Most </a>made it over. The biggest change, which I get asked about most, is the Gesture Filter. With the initial release of Windows 10 IoT Enterprise, there was no way of suppressing the side swipe gestures without terminating explorer.exe. With 1607, there is a <a href="https://msdn.microsoft.com/windows/hardware/commercialize/customize/mdm/policy-configuration-service-provider#lockdown-allowedgeswipe">new policy</a> that actually works. It appears that this policy does not work with Windows 10 Home/Pro, which I typically don't mind because they are just not good for embedded devices.<br />
<br />
Since it seems to be hard to find, this is the registry key that corresponds to the policy:<br />
<br />
<div class="MsoNormal">
REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\EdgeUI”
/V AllowEdgeSwipe /T REG_DWORD /D 0 /F</div>
<div class="MsoNormal">
<o:p></o:p></div>
Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com0tag:blogger.com,1999:blog-9089173216457557197.post-21948843101834964162017-02-06T08:31:00.000-06:002017-02-06T08:31:27.945-06:00Deploy a FFU Image using DISMRun the following command to get a list of disks on the system:<br />
<span style="font-family: Courier New, Courier, monospace;"> wmic diskdrive list brief'</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: inherit;">To apply the image to the disk run:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="font-size: 10pt;">DISM /Apply-Image /ImageFile:.\flash.ffu
/ApplyDrive:\\.\PhysicalDrive0 /SkipPlatformCheck</span></span><br />
<br />
Where .\flash.ffu is the FFU in the current directory and PhysicalDrive0 is the drive you identified in via wmic. Be careful, you can reimage your USB boot media using this method without warning.Bhttp://www.blogger.com/profile/02150192212389442347noreply@blogger.com1