<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lee Englestone 💡🧠👨‍💻</title>
    <description>The latest articles on DEV Community by Lee Englestone 💡🧠👨‍💻 (@leeenglestone).</description>
    <link>https://dev.to/leeenglestone</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F282927%2F872187e1-0121-4642-a734-f37988f8c964.jpg</url>
      <title>DEV Community: Lee Englestone 💡🧠👨‍💻</title>
      <link>https://dev.to/leeenglestone</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leeenglestone"/>
    <language>en</language>
    <item>
      <title>My All Time Favourite TV Series List</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Thu, 06 Jan 2022 22:01:15 +0000</pubDate>
      <link>https://dev.to/leeenglestone/my-all-time-favourite-tv-series-list-2n8m</link>
      <guid>https://dev.to/leeenglestone/my-all-time-favourite-tv-series-list-2n8m</guid>
      <description>&lt;p&gt;I've been wanting to list my all time favourite tv series for some time in case someone and is looking for something new to watch (there are some absolute Gems in this list).&lt;/p&gt;

&lt;p&gt;I've stopped short of categorising them by genre, noting the # of series etc but I might do in future..&lt;/p&gt;

&lt;p&gt;If you feel the need to pull this list apart or be negative about it - I'd recommend you take a good look in the mirror. This is solely my opinion, you may have yours.&lt;/p&gt;

&lt;p&gt;These are in ROUGH order - it's quite hard to maintain a rank when it gets so long and adding new items.&lt;/p&gt;

&lt;p&gt;You may find there are some glaringly obvious omissions from this list - It's probably just because I haven't watched them (i'm not claiming to be a TV series expert).&lt;/p&gt;

&lt;p&gt;I hope you find the list useful. I will probably continue to alter and update it over time.&lt;/p&gt;

&lt;p&gt;** = A lesser known (but awesome series)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Witcher&lt;/li&gt;
&lt;li&gt;Mandalorian&lt;/li&gt;
&lt;li&gt;Ragnarok*&lt;/li&gt;
&lt;li&gt;Loki&lt;/li&gt;
&lt;li&gt;The 100&lt;/li&gt;
&lt;li&gt;The Expanse&lt;/li&gt;
&lt;li&gt;Boba Fett&lt;/li&gt;
&lt;li&gt;Babylon 5&lt;/li&gt;
&lt;li&gt;Person of Interest*&lt;/li&gt;
&lt;li&gt;Star Gate&lt;/li&gt;
&lt;li&gt;Arrow&lt;/li&gt;
&lt;li&gt;Revolution&lt;/li&gt;
&lt;li&gt;Star Gate Atlantis&lt;/li&gt;
&lt;li&gt;Agents of S.H.I.E.L.D&lt;/li&gt;
&lt;li&gt;Battlestar Galactica&lt;/li&gt;
&lt;li&gt;Big Bang Theory&lt;/li&gt;
&lt;li&gt;Travelers*&lt;/li&gt;
&lt;li&gt;Salvation*&lt;/li&gt;
&lt;li&gt;Star Trek Discovery&lt;/li&gt;
&lt;li&gt;Ascension*&lt;/li&gt;
&lt;li&gt;Stranger Things&lt;/li&gt;
&lt;li&gt;Lost In Space&lt;/li&gt;
&lt;li&gt;Eureka&lt;/li&gt;
&lt;li&gt;Warehouse 13&lt;/li&gt;
&lt;li&gt;Terra Nova*&lt;/li&gt;
&lt;li&gt;Falcon and the Winter Soldier&lt;/li&gt;
&lt;li&gt;Star Trek Lower Decks&lt;/li&gt;
&lt;li&gt;Caprica&lt;/li&gt;
&lt;li&gt;Picard&lt;/li&gt;
&lt;li&gt;Another Life&lt;/li&gt;
&lt;li&gt;The Umbrella Academy&lt;/li&gt;
&lt;li&gt;The Man in the High Castle&lt;/li&gt;
&lt;li&gt;Cobra Kai&lt;/li&gt;
&lt;li&gt;Vigil&lt;/li&gt;
&lt;li&gt;Pine Gap&lt;/li&gt;
&lt;li&gt;Smallville&lt;/li&gt;
&lt;li&gt;Stargate Universe&lt;/li&gt;
&lt;li&gt;Homeland&lt;/li&gt;
&lt;li&gt;The Flash&lt;/li&gt;
&lt;li&gt;4400&lt;/li&gt;
&lt;li&gt;Fringe&lt;/li&gt;
&lt;li&gt;Heroes&lt;/li&gt;
&lt;li&gt;Firefly&lt;/li&gt;
&lt;li&gt;Hawkeye&lt;/li&gt;
&lt;li&gt;Andromeda&lt;/li&gt;
&lt;li&gt;Travels with My Father&lt;/li&gt;
&lt;li&gt;Helix&lt;/li&gt;
&lt;li&gt;Defiance*&lt;/li&gt;
&lt;li&gt;Space Force&lt;/li&gt;
&lt;li&gt;Luke Cage&lt;/li&gt;
&lt;li&gt;Marco Polo&lt;/li&gt;
&lt;li&gt;Elementary&lt;/li&gt;
&lt;li&gt;Sherlock&lt;/li&gt;
&lt;li&gt;Scorpion*&lt;/li&gt;
&lt;li&gt;Mr Robot&lt;/li&gt;
&lt;li&gt;The IT Crowd&lt;/li&gt;
&lt;li&gt;Star Wars Clone Wars&lt;/li&gt;
&lt;li&gt;Star Wars Rebels&lt;/li&gt;
&lt;li&gt;Farscape&lt;/li&gt;
&lt;li&gt;Defenders&lt;/li&gt;
&lt;li&gt;Daredevil&lt;/li&gt;
&lt;li&gt;Away&lt;/li&gt;
&lt;li&gt;Suits&lt;/li&gt;
&lt;li&gt;Breaking Bad&lt;/li&gt;
&lt;li&gt;Sanctuary&lt;/li&gt;
&lt;li&gt;The Walking Dead&lt;/li&gt;
&lt;li&gt;Jessica Jones&lt;/li&gt;
&lt;li&gt;The OA&lt;/li&gt;
&lt;li&gt;Tiger King&lt;/li&gt;
&lt;li&gt;Iron Fist&lt;/li&gt;
&lt;li&gt;You&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Introducing TechCommunityCalendar.com</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Tue, 04 Jan 2022 14:34:13 +0000</pubDate>
      <link>https://dev.to/leeenglestone/introducing-techcommunitycalendarcom-263p</link>
      <guid>https://dev.to/leeenglestone/introducing-techcommunitycalendarcom-263p</guid>
      <description>&lt;p&gt;I've been in DevRel for a couple of months now and something that struck me was the lack of a central place to go to find a calendar of events in the tech community. Don't get me wrong, there are a few places that list &lt;em&gt;some&lt;/em&gt; types of events but I wanted somewhere that listed the following..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conferences &lt;/li&gt;
&lt;li&gt;Hackathons &lt;/li&gt;
&lt;li&gt;Call for papers&lt;/li&gt;
&lt;li&gt;Meetups&lt;/li&gt;
&lt;li&gt;and Online website events &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in one place!&lt;/p&gt;

&lt;p&gt;So I set about creating one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.TechCommunityCalendar.com"&gt;www.TechCommunityCalendar.com&lt;/a&gt; is designed to be a central location where events that the tech community may be interested in can be listed and viewed.&lt;/p&gt;

&lt;p&gt;It is quite crude at the moment, but I am a big believer of getting your V1 live to start getting feedback from users to incrementally improve it.&lt;/p&gt;

&lt;p&gt;Think it could be better? It will shortly be opensource on GitHub so that you can help improve it yourself.&lt;/p&gt;

&lt;p&gt;Many thanks to &lt;a href="https://www.avanade.com"&gt;Avanade&lt;/a&gt; for helping support the project. Without their commitment to giving back to the technical community, I don't think this would have been possible and i'm proud that this is one of the first initiatives i've been involved with since becoming DevRel Lead @ Avanade.&lt;/p&gt;

&lt;p&gt;Follow me on Twitter for more information on this project and others like it &lt;a href="https://twitter.com/LeeEnglestone"&gt;@LeeEnglestone&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C6czd0pH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jx78sy0vho3m9zym224n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C6czd0pH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jx78sy0vho3m9zym224n.png" alt="Tech Community Calendar" width="880" height="918"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>community</category>
      <category>devrel</category>
      <category>opensource</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>In pursuit of an even playing field</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Mon, 06 Dec 2021 12:22:42 +0000</pubDate>
      <link>https://dev.to/leeenglestone/in-pursuit-of-an-even-playing-field-3jcd</link>
      <guid>https://dev.to/leeenglestone/in-pursuit-of-an-even-playing-field-3jcd</guid>
      <description>&lt;p&gt;This post is overdue, and for that I apologise. The fact that I have been putting this off and not prioritising it, is perhaps in some small way indicative of the problem.&lt;/p&gt;

&lt;p&gt;Because there is a problem. Whether we want to admit it or discuss it is another matter.&lt;/p&gt;

&lt;p&gt;The problem is that women are not yet treated the same as men in tech. In fact, in many cases they are treated down right despicably and it is up to everyone, (especially men) to acknowledge this and address it.&lt;/p&gt;

&lt;p&gt;This post is in part dedicated to the work by Salma and &lt;a href="//unbreak.tech"&gt;unbreak.tech&lt;/a&gt; whose aim is to highlight and bring about change.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1450370452363296768-896" src="https://platform.twitter.com/embed/Tweet.html?id=1450370452363296768"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1450370452363296768-896');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1450370452363296768&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;There are a number of things that we can do.. so I thought I would just list a few that I think are important (in no particular order).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Equal pay for women&lt;/li&gt;
&lt;li&gt;Gender bias awareness and training (especially in recruitment)&lt;/li&gt;
&lt;li&gt;Improve female speaker ratios at conferences&lt;/li&gt;
&lt;li&gt;Increase female attendance at tech conferences&lt;/li&gt;
&lt;li&gt;Don't assume women are less technical than male colleagues around them&lt;/li&gt;
&lt;li&gt;Don't assume women at tech conferences are non technical&lt;/li&gt;
&lt;li&gt;Don't explain things to women that they may already know&lt;/li&gt;
&lt;li&gt;Reduce female drop out of STEM subjects at early ages&lt;/li&gt;
&lt;li&gt;Support groups encouraging women in tech&lt;/li&gt;
&lt;li&gt;Support women in tech&lt;/li&gt;
&lt;li&gt;Speak up when we see something wrong&lt;/li&gt;
&lt;li&gt;Consider what we say and how we act can be interpreted i.e. "hi guys"&lt;/li&gt;
&lt;li&gt;Help women feel safe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(I may update this list)&lt;/p&gt;

&lt;p&gt;But I'd really like to take the opportunity to highlight that the many female colleagues that I have had the honour of working with, have been/are absolutely amazing (you know who you are), and I dare say better (on average) than their male colleagues.&lt;/p&gt;

&lt;p&gt;I'd also like to challenge anyone of my male peers who's initial thoughts are "yeah but..". You need to get yourself to a place where you acknowledge that there is a problem.&lt;/p&gt;

&lt;p&gt;In my opinion, it is similar to white people having a problem with the "black lives matter" message and insisting on using a "black lives matter too" or "all lives matter" instead.. of course they do! but the original phrase is to help raise awareness of the particular problem and I can completely understand why variations on it detract from the original message/problem. &lt;a href="https://theconversation.com/why-is-it-so-offensive-to-say-all-lives-matter-153188" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For me the most important thing that men can do is admit there is a problem and after that, as I've listed, there are various ways to help to get towards a place where women are treated equally in tech. (I don't have all the answers before someone asks me how we get there).&lt;/p&gt;

&lt;p&gt;Slightly selfishly as I write this I realise that I am thinking about the world I want my 8yo daughter to live in and my 5yo son to be aware of and help towards creating. &lt;/p&gt;

&lt;p&gt;What kind of future do you want future generations to live in?&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

&lt;p&gt;(Photo by Elena Mozhvilo, from Unsplash)&lt;/p&gt;

</description>
      <category>womenintech</category>
    </item>
    <item>
      <title>Building IsChristmasTree with CustomVision.ai</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Mon, 29 Nov 2021 10:10:31 +0000</pubDate>
      <link>https://dev.to/leeenglestone/building-ischristmastree-with-customvisionai-3447</link>
      <guid>https://dev.to/leeenglestone/building-ischristmastree-with-customvisionai-3447</guid>
      <description>&lt;p&gt;This article is part of this years &lt;a href="https://www.csadvent.christmas/"&gt;C# Christmas Advent Calendar&lt;/a&gt;. Go check it out (after you have read this).&lt;/p&gt;

&lt;p&gt;Having scratched an itch and &lt;a href="https://dev.to/leeenglestone/training-an-image-classification-model-to-identify-goodies-and-baddies-using-ml-net-5ba"&gt;played around with ML.NET to generate an image classification model&lt;/a&gt; offline/locally to create &lt;a href="https://goodyorbaddy.com"&gt;GoodyOrBaddy.com&lt;/a&gt; I wanted to see how easy it would be to create an image classification model using CustomVision.ai online.&lt;/p&gt;

&lt;p&gt;This time, continuing my belief that it is better to create a use case that interests you, (and because i'm starting to get in the festive mood) I wanted to see if I create a model that can discern between images of Christmas Trees and images of Regular Trees.&lt;/p&gt;

&lt;p&gt;I had never used &lt;a href="https://www.customvision.ai/"&gt;CustomVision.ai&lt;/a&gt; before so this was as good as use case as any to try it out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I am not an expert in AI/ML or Data Science, this is an experiment/side project.&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR;
&lt;/h1&gt;

&lt;p&gt;If you just want to &lt;strong&gt;watch&lt;/strong&gt; the end-to-end process of me training the model then testing it and consuming it from Postman and a website, rather than read about the process.. see this video I created on YouTube (and don't forget to subscribe).&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zb0aA_5I0AE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the training images
&lt;/h2&gt;

&lt;p&gt;I decided to start with obtaining 20 images of Christmas trees and 20 images of regular trees, assuming that the training tool would make me provide more images for the training sets. (Spoiler: It didn't).&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the test images
&lt;/h2&gt;

&lt;p&gt;It is important to mention that non of the test images were used in the training data sets. I also decided to gather some 'interesting/unusual' edge case images of Christmas trees to see if I could trick the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create the project
&lt;/h2&gt;

&lt;p&gt;Head on over to CustomVision.ai and create the project. You will need to provide a Name for your project and choose which online resource you want to use.&lt;/p&gt;

&lt;p&gt;For this example I used &lt;br&gt;
&lt;strong&gt;Project Types:&lt;/strong&gt; Classification&lt;br&gt;
&lt;strong&gt;Classification Types:&lt;/strong&gt; Multiclass&lt;br&gt;
&lt;strong&gt;Domains:&lt;/strong&gt; General (compact) [S1]&lt;br&gt;
&lt;strong&gt;Export Capabilities:&lt;/strong&gt; Basic platforms&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R90jlhFm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrq8vbtxcq3bdzpbke5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R90jlhFm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrq8vbtxcq3bdzpbke5c.png" alt="Create new project" width="880" height="800"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2: Upload &amp;amp; tag the images
&lt;/h2&gt;

&lt;p&gt;After you have created the project, you need to upload each set of training images. When you do this it will ask you to provide a tag for these images. I found this process super slick.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QO3TIahb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86zitb427clnsl7aifdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QO3TIahb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86zitb427clnsl7aifdu.png" alt="ImageUpload" width="880" height="981"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Train the model
&lt;/h2&gt;

&lt;p&gt;Once you have created your two sets of labelled images, you'll need to go ahead and train the model by pressing the green Train button at the top of the scree. (I usually select Quick Training).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5N0pleOs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r056wlqub756dil6diuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5N0pleOs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r056wlqub756dil6diuv.png" alt="Choose Training Type" width="880" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uh4iBhDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8iou40uvsjs7kf3m9ozr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uh4iBhDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8iou40uvsjs7kf3m9ozr.png" alt="Trained Model Result" width="880" height="605"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4: Test the model
&lt;/h2&gt;

&lt;p&gt;You should now have a model ready for us to test, so go ahead and press the Quick Test button at the top of the screen, and either provide a url to an online image or (as I prefer), browse and upload a local file to test. The model should analyse the image and show the results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W-R6Zoyo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5hsm94lg96oedpm3fsrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W-R6Zoyo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5hsm94lg96oedpm3fsrz.png" alt="Test the model" width="880" height="593"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 5: Publish the model
&lt;/h2&gt;

&lt;p&gt;After you have tested the model, before you can start consuming it elsewhere, you will need to hit the Publish button on the Performance tab at the top of the screen. You will now be able to get the public endpoint url for your image classification prediction API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xccjnfTL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gpf6fgap1dlqaj6eow0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xccjnfTL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gpf6fgap1dlqaj6eow0.png" alt="Prediction API Endpoint" width="880" height="457"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 6: Call endpoint with Postman
&lt;/h2&gt;

&lt;p&gt;We now have an endpoint that we can call, so let's do that with Postman. Provide it with the endpoint url, key and application type. Then provide an image as the body, execute and check the returning information.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v3f8k57p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/22f1oqrduwcjyjhp1qzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v3f8k57p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/22f1oqrduwcjyjhp1qzo.png" alt="Postman" width="880" height="669"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 7: Hook into website
&lt;/h2&gt;

&lt;p&gt;Now that we have confirmed that the endpoint can be called, an image passed to it, and a result returned, let's hook it up&lt;/p&gt;

&lt;p&gt;So this code is on GitHub if you want to go and check it out and try it locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var openFile = function (file) {
            var input = file.target;

            var reader = new FileReader();
            reader.onload = function () {
                var dataURL = reader.result;

                $('#output').attr('src', dataURL).fadeIn();

                var parts = dataURL.split(';base64,');
                var contentType = parts[0].split(':')[1];
                var raw = window.atob(parts[1]);
                var rawLength = raw.length;

                var uInt8Array = new Uint8Array(rawLength);

                for (var i = 0; i &amp;lt; rawLength; ++i) {
                    uInt8Array[i] = raw.charCodeAt(i);
                }

                var imgContent = new Blob([uInt8Array], { type: contentType });

                $.ajax({
                    url: "PROVIDE_YOUR_OWN_PREDICTION_API_URL",
                    beforeSend: function (xhrObj) {

                        xhrObj.setRequestHeader("Prediction-Key", "PROVIDE_YOUR_OWN_PREDICTION_KEY");
                        xhrObj.setRequestHeader("Content-Type", "application/octet-stream");

                        $('#isChristmasTree').fadeOut();
                        $('#isRegularTree').fadeOut();
                    },
                    type: "POST",

                    data: imgContent,
                    processData: false
                })
                    .done(function (data) {

                        console.log(data);

                        var prediction1Name = data.predictions[0].tagName;
                        var prediction2Name = data.predictions[1].tagName;

                        var prediction1Probability = data.predictions[0].probability * 100;
                        var prediction2Probability = data.predictions[1].probability * 100;

                        if (prediction1Probability &amp;gt; 0.50 &amp;amp;&amp;amp; prediction1Name === "ChristmasTree") {
                            $('#isChristmasTree').html('IsChristmasTree! (' + prediction1Probability.toFixed(2) + '%)').fadeIn();
                        }
                        else {
                            $('#isRegularTree').html('IsRegularTree! (' + prediction1Probability.toFixed(2) + '%)').fadeIn();
                        }
                    })
                    .fail(function () {
                        alert("error");
                    });
            };

            reader.readAsDataURL(input.files[0]);
        };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kif8sMcW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lk0ez6j432q6vh4brvcy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kif8sMcW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lk0ez6j432q6vh4brvcy.png" alt="IsChristmasTree.com" width="880" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;I was very surprised by how accurate the model is considering I only trained it with 20 images of regular trees, 20 images of Christmas trees and threw some fairly difficult edge cases at it.&lt;/p&gt;

&lt;p&gt;I recommend you experiment with this yourself. What will you create? How about a Flag or Biscuit image classifier?&lt;/p&gt;

&lt;p&gt;I'd readily implement CustomVision.ai into a production / live project from what I've seen when experimenting with it.&lt;/p&gt;

&lt;p&gt;If you want to hear about similar interesting projects, follow me on &lt;a href="https://twitter.com/leeenglestone"&gt;Twitter&lt;/a&gt; and &lt;a href="https://youtube.com/leeenglestone"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy Holidays!&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>azure</category>
    </item>
    <item>
      <title>Space Trash TrackAR - NASA Space Apps Challenge 2021</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Wed, 06 Oct 2021 06:25:43 +0000</pubDate>
      <link>https://dev.to/leeenglestone/space-trash-trackar-nasa-space-apps-challenge-2021-2fgj</link>
      <guid>https://dev.to/leeenglestone/space-trash-trackar-nasa-space-apps-challenge-2021-2fgj</guid>
      <description>&lt;p&gt;This weekend I took part in this years &lt;a href="https://www.spaceappschallenge.org/"&gt;NASA Space Apps Challenge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For those unfamiliar with it, I suggest you check it out as it is one of the largest annual online hackathons in the world.&lt;/p&gt;

&lt;p&gt;NASA set out 28 different challenges for entrants covering all manner of earth and space science topics.&lt;/p&gt;

&lt;p&gt;The challenge I decided to tackle was called &lt;a href="https://2021.spaceappschallenge.org/challenges/statements/mapping-space-trash-in-real-time/details"&gt;Mapping Space Trash In Real Time&lt;/a&gt;. I took one of the datasets they were providing &lt;a href="https://celestrak.com/"&gt;Celestrak&lt;/a&gt; and plotted over 5,000 items orbiting the earth in Augmented Reality.&lt;/p&gt;

&lt;p&gt;My first stumbling block was realising that whilst orbit height of items was shown in a datatable, the underlying data in csv format did not include height so needed to be calculated from the other available variables. I also needed to break out my Trigonometry to work out the X &amp;amp; Y coordinates of an item around a circular orbit using the right ascension angle (or so I thought).&lt;/p&gt;

&lt;p&gt;After plotting the positions of the items in orbits, I set to work adding additional functionality including&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tap item to show more information&lt;/li&gt;
&lt;li&gt;Add a circle (very thin torus) to denote the items orbit path&lt;/li&gt;
&lt;li&gt;Speed up/down buttons&lt;/li&gt;
&lt;li&gt;Zoom in/out with pinching gesture&lt;/li&gt;
&lt;li&gt;Rotating everything with pinching gesture&lt;/li&gt;
&lt;li&gt;Double tap screen to hide/show UI buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My main regret from the project was not using the correct method for determining satellite position. I had incorrectly assumed I could use inclination and right ascension to calculate an items position but was incorrect. If I were to fix my mistake I would use an off the purpose built satellite code library.&lt;/p&gt;

&lt;p&gt;My 30 second project submission video can be seen here.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/mKms8GQgVO0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;While a 2 minute more detailed video can be seen here.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/hUVkCZpuHdc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I have put the (questionable) &lt;a href="https://github.com/leeenglestone/SpaceTrashTrackAR"&gt;code on GitHub&lt;/a&gt;. TBH. I've not even tidied it up yet.&lt;/p&gt;

&lt;p&gt;Almost all of the techniques used in the project are detailed in my book &lt;a href="https://amzn.to/3A8GHtz"&gt;.NET Developer's Guide to Augmented Reality in iOS&lt;/a&gt; and on my website &lt;a href="https://xamarinarkit.com"&gt;XamarinArkit.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I continue to believe that Hackathons are one of the best ways to scratch an itch or experiment with a new technology and learn something new. &lt;/p&gt;

&lt;p&gt;If you haven't entered a hackathon before, I suggest you try it. And if you do, here are some &lt;a href="https://hackathontips.com"&gt;Hackathon Tips&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>hackathon</category>
      <category>space</category>
      <category>augmentedreality</category>
      <category>arkit</category>
    </item>
    <item>
      <title>Training an image classification model to identify goodies and baddies using ML.NET</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Tue, 08 Jun 2021 19:12:13 +0000</pubDate>
      <link>https://dev.to/leeenglestone/training-an-image-classification-model-to-identify-goodies-and-baddies-using-ml-net-5ba</link>
      <guid>https://dev.to/leeenglestone/training-an-image-classification-model-to-identify-goodies-and-baddies-using-ml-net-5ba</guid>
      <description>&lt;p&gt;TLDR; I created an image classification model to determine whether an image is of a goody or a baddy using images of good and bad cartoon characters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you spent your childhood anything like me, you will have watched a lot of cartoon shows ranging from well known shows like the Teenage Mutant Ninja Turtles and Transformers to lesser known series such as Visionaries and Mask. You learn at an early age to determine who is a baddy and who is a goody just by their appearance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Premise
&lt;/h2&gt;

&lt;p&gt;I have wanted to play around with the Machine Learning capability in ML.NET and its ability to create image classification models for a while now. I had previously seen such examples where machine learning models were trained and created to identify things like species of plant to breed of dog from an image. I wanted to see if I could create one to identify good or bad cartoon characters based on their appearance. Something simple and not too ambitious.&lt;/p&gt;

&lt;p&gt;My premise is that, most people at a glance are able to determine if a cartoon character is good or evil solely by their appearance, I wanted to see if I could create a machine learning model to do the same.&lt;/p&gt;

&lt;p&gt;But first i'd need some images..&lt;/p&gt;

&lt;h2&gt;
  
  
  Building and Training the Model
&lt;/h2&gt;

&lt;p&gt;So I set about downloading a lot of images of cartoon characters that are known to be good or bad and put them in separate folders named wait for it.. "good" and "bad". This would be my training data.&lt;/p&gt;

&lt;p&gt;I then found a few code samples that handled image classification scenarios such as determining whether an image of a surface contained a crack or not. I extended these code samples to suit my purposes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/image-classification-api-transfer-learning" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/image-classification-api-transfer-learning&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bias
&lt;/h2&gt;

&lt;p&gt;Unconscious bias is something that I always try and be conscious of every day in every situation.&lt;/p&gt;

&lt;p&gt;I am not a data scientist, but I am aware of the problem of bias in machine learning datasets. For example, regarding the images that I have scoured the internet to include in my training images.. what if I unintentionally chose more good women than bad, or always chose smiling goodies and dark images of baddies?&lt;/p&gt;

&lt;p&gt;I quickly realised that in a perfect world, for my experiment to be better, it would have to choose images in a lot more random manner than my manual curation.&lt;/p&gt;

&lt;p&gt;That said, this is a throw away experiment, not a scientific paper so let's continue..&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems Encountered
&lt;/h2&gt;

&lt;p&gt;So I downloaded a bunch of images of goodies and baddies, and ran the same model training/creation sample code that I found online but was hitting a roadblock..&lt;/p&gt;

&lt;p&gt;It just didn't seem to work! The code was populating the training set, the validation set but the test set was always empty and resulted in a empty sequence exception later on in the code..&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IDataView trainSet = trainSplit.TrainSet;
//var trainSetPreview = trainSet.Preview();

IDataView validationSet = validationTestSplit.TrainSet;
//var validationSetPreview = validationSet.Preview();

IDataView testSet = validationTestSplit.TestSet;
//var testSetPreview = testSet.Preview(); // Empty when there aren't sufficient images!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I then realised that the machine learning model (ImageClassificationTrainer.Architecture.ResnetV2101) expects the images in dimensions of 224px x 224px so spent a LOT of time cropping and resizing images, resulting in 70 images of goodies and 70 images of baddies.&lt;/p&gt;

&lt;p&gt;But it still didn't seem to work. Same error..&lt;/p&gt;

&lt;p&gt;Then, out of desperation, I wondered if the number of training images I was supplying was insufficient so I copied and pasted them all, creating a ..- copy.jpg version of each. Thereby doubling the number of training images (but had no idea of how this would effect the model).&lt;/p&gt;

&lt;p&gt;I ran the code again and voila! this time it worked. It would seem that there is a minimum number of images needed before a useful model can be created?&lt;/p&gt;

&lt;p&gt;I'm pretty sure that my workaround isn't a valid real world solution for training a model with a sufficient number of images, however for the purpose of being able to proceed.. I continued. I managed to create the model and save it to a .zip file for use later on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the Model
&lt;/h2&gt;

&lt;p&gt;So here are the results of the first 6 test images I ran through the model (no these images weren't part of the training images).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxa96qjvoq6tw42lkrq60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxa96qjvoq6tw42lkrq60.png" alt="Test images"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Baddy 1&lt;br&gt;
Expected: Bad&lt;br&gt;
Result: Bad&lt;/p&gt;

&lt;p&gt;Baddy 2&lt;br&gt;
Expected: Bad&lt;br&gt;
Result: Bad&lt;/p&gt;

&lt;p&gt;Baddy 3&lt;br&gt;
Expected: Bad&lt;br&gt;
Result: Bad&lt;/p&gt;

&lt;p&gt;Goody 1&lt;br&gt;
Expected: Good&lt;br&gt;
Result: Good&lt;/p&gt;

&lt;p&gt;Goody 2&lt;br&gt;
Expected: Good&lt;br&gt;
Result: Good&lt;/p&gt;

&lt;p&gt;Goody 3&lt;br&gt;
Expected: Good&lt;br&gt;
Result: Good&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So I guess it kind of works!? Success!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm sure there are a lot more tests you could do to put the model through its paces but for the purpose of my little experiment, I am happy with the result.&lt;/p&gt;

&lt;p&gt;I now have an image classification model that can determine whether a cartoon character is likely to be a goody or a baddy.&lt;/p&gt;

&lt;h2&gt;
  
  
  GoodyOrBaddy.com
&lt;/h2&gt;

&lt;p&gt;oh, also I may have fed my domain registration habit and registered GoodyOrBaddy.com to put up a web UI front end for uploading and testing images of goodies and baddies. This isn't live yet and wont be in the near future (other priorities!).&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;As I have said, I am not a data scientist or machine learning expert, however this has been one of my more enjoyable experiences experimenting with some very powerful technology and starting to learn ML.NET and machine learning.&lt;/p&gt;

&lt;p&gt;I'd love to hear feedback (positive criticism) as to how I could have better approached the experiment. I've quickly made the &lt;a href="https://github.com/leeenglestone/GoodyOrBaddy" rel="noopener noreferrer"&gt;code, training and test images available on GitHub&lt;/a&gt; in case anyone wants to play around with this in the same way I have.&lt;/p&gt;

&lt;p&gt;It does make me wonder how many other use cases, this image machine learning image classification functionality could be used in..&lt;/p&gt;

&lt;p&gt;Thanks for reading, and if you have enjoyed, please share!&lt;/p&gt;

&lt;p&gt;Follow me on Twitter (&lt;a href="https://twitter.com/leeenglestone" rel="noopener noreferrer"&gt;@LeeEnglestone&lt;/a&gt;) to see my future experiments.&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

&lt;h1&gt;
  
  
  Update
&lt;/h1&gt;

&lt;p&gt;I now have now published &lt;a href="//GoodyOrBaddy.com"&gt;https://www.GoodOrBaddy.com&lt;/a&gt; which calls the trained model which is hosted in an Azure Function. The model isn't 100% accurate but pretty accurate. Perhaps further training is required.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>My AR book is now on Amazon!</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Sat, 20 Mar 2021 16:22:35 +0000</pubDate>
      <link>https://dev.to/leeenglestone/my-ar-book-is-now-on-amazon-50pj</link>
      <guid>https://dev.to/leeenglestone/my-ar-book-is-now-on-amazon-50pj</guid>
      <description>&lt;p&gt;As my wife would say, "it's no 50 Shades.." but i'm proud to say i've successfully managed to write my first book and get it published.&lt;/p&gt;

&lt;p&gt;Coming from a technical background, you probably wont be surprised to hear it is a technical book and a rather niche one at that exploring Augmented Reality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AJzs_ZjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnoyaba2c3p1dgndm20o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AJzs_ZjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnoyaba2c3p1dgndm20o.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full disclosure: This may have been photoshopped. I am yet to receive my invitation to appear on This Morning to talk about my book.&lt;/p&gt;

&lt;p&gt;Writing doesn't come naturally to me, however having a passion for technology, creativity and innovation does, so when I saw an opportunity to write a book guiding other developers into the world of AR, it became a fun side project and welcome distraction from the pandemic.&lt;/p&gt;

&lt;p&gt;It is now available to buy (or be nosey) on Amazon &lt;a href="https://amzn.to/38Z9vKd"&gt;https://amzn.to/38Z9vKd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It being my first book, I don't look forward to the unavoidable negative reviews. Everyone is a critic i'm told.  It's a good job I have thick skin.&lt;/p&gt;

&lt;p&gt;What kind of things do I discuss in the book? Well, it's showing developers how to create Augmented Reality experiences like this.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/T8JGhrqe1ek"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2q2kadwvfHA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Which will become more prevalent in the near future.&lt;/p&gt;

&lt;p&gt;I don't think it is going to shoot to the top of any category best seller list on Amazon, or become rich from the royalties but i'm sure it will help anyone wanting to get started in this area.&lt;/p&gt;

&lt;p&gt;What's next? Well, considering the project took 9 months and all the writing happened in the evening after I put the kids to bed.. I think i'll take a break from writing for a while.&lt;/p&gt;

&lt;p&gt;My next big project (I always need a project) might be a Masters or MBA in 2022.&lt;/p&gt;

&lt;p&gt;A quick word of advise to anyone thinking that something like writing a book is an insurmountable challenge..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are capable of more than you think&lt;/li&gt;
&lt;li&gt;Been putting something off because the time isn't right? Just start&lt;/li&gt;
&lt;li&gt;Follow your passions and what gets you excited&lt;/li&gt;
&lt;li&gt;Always have goals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>writing</category>
      <category>augmentedreality</category>
      <category>book</category>
      <category>arkit</category>
    </item>
    <item>
      <title>Augmented Reality Advent Calendar</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Tue, 22 Dec 2020 20:25:04 +0000</pubDate>
      <link>https://dev.to/leeenglestone/augmented-reality-advent-calendar-3p4k</link>
      <guid>https://dev.to/leeenglestone/augmented-reality-advent-calendar-3p4k</guid>
      <description>&lt;p&gt;For this years &lt;a href="https://festivetechcalendar.com/"&gt;Festive Tech Calendar&lt;/a&gt; (23rd December), for a "bit of fun" I attempted to create an Augmented Reality Advent Calendar. &lt;/p&gt;

&lt;p&gt;I initially thought I would place it on a detected surface, then I decided to &lt;em&gt;use my head&lt;/em&gt; and go in a slightly different direction.. below is a video showing the result. &lt;/p&gt;

&lt;p&gt;It isn't quite finished as you'll be able to tell. But it is.. unique and you get the idea.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/jlRHFWKseIc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you want to learn a bit more about how to use C# and Xamarin to create iOS Augmented Reality experiences, you can check out my website &lt;a href="https://xamarinarkit.com/"&gt;XamarinArkit.com&lt;/a&gt; and my upcoming book on Amazon &lt;a href="https://www.amazon.co.uk/gp/product/1484267699?pf_rd_r=QRH8ZFGQRQYNZ7F4XQCT&amp;amp;pf_rd_p=6e878984-68d5-4fd2-b7b3-7bc79d9c8b60&amp;amp;pd_rd_r=7519fec3-749f-407d-97fe-966463decd20&amp;amp;pd_rd_w=XJ7Xl&amp;amp;pd_rd_wg=358Cr&amp;amp;ref_=pd_gw_unk"&gt;.NET Developer's Guide to Augmented Reality in iOS&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>augmentedreality</category>
      <category>ar</category>
      <category>arkit</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Augmented Reality for .NET Developers on iOS</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Sat, 05 Dec 2020 20:25:18 +0000</pubDate>
      <link>https://dev.to/leeenglestone/augmented-reality-for-net-developers-on-ios-8j3</link>
      <guid>https://dev.to/leeenglestone/augmented-reality-for-net-developers-on-ios-8j3</guid>
      <description>&lt;p&gt;So for this years contribution to the &lt;a href="https://www.csadvent.christmas/"&gt;C# Advent Calendar&lt;/a&gt;, I thought I would give the gift of knowledge.&lt;/p&gt;

&lt;p&gt;What I want to share is the little known secret that is.. just how easy it is for .NET developers to create Augmented Reality for iOS devices like iPhone and iPad using C#.&lt;/p&gt;

&lt;p&gt;This has largely made possible because of the amazing people working on Xamarin, whom ported Apples Augmented Reality framework ARKit to .NET so that we can use it in conjunction with Visual Studio for Mac and write lovely C# to create some interesting AR experiences and deploy them to our iOS devices.&lt;/p&gt;

&lt;p&gt;Here are just a few examples of the Augmented Reality functionality built into the feature rich ARKit and SceneKit all of which are achievable using C# and .NET.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plane Detection
&lt;/h2&gt;

&lt;p&gt;Plane detection is important as it can help us find the limits of our environment. Planes provide good point of reference on which to place other virtual items.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/BEbXRObarE8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Image Recognition
&lt;/h2&gt;

&lt;p&gt;Something that works very smoothly in ARKit is image recognition, when detecting a pre-defined image, we can respond to that event and use the detected images location to add other items to the detected image as can be seen below with my business card and a few transparent pngs. Simple.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3b9hID1rKtc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Face Tracking
&lt;/h2&gt;

&lt;p&gt;ARKit can track up to 3 different faces in a scene. It is possible to add other virtual items to the scene in relation to the detected face for example hats, classes etc.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/1IiTKmQcRS0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Facial Expression Detection
&lt;/h2&gt;

&lt;p&gt;ARkit is able to identify the movements of a surprisingly large number of facial features (how else to you think those animojis work), something that we can respond to when detected as the video shows below where I am simply changing the colour of the facial mesh depending on the detected expression.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8rmYqcm5EjI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Body Tracking
&lt;/h2&gt;

&lt;p&gt;Using ARKit we can track the presence and orientation of a body in the scene. ARKit is able to tell us the the position of the tracked bodies major joints in 3D space and infer from those the location of minor joints as can be seen in the following video.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VxM1RMlYdAo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Object Detection
&lt;/h2&gt;

&lt;p&gt;Similar to Image recognition, in ARKit it is possible to scan and record the features of a 3D object, then have your app detect the presence of that scanned item in your environment at a later date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lighting and Shadows
&lt;/h2&gt;

&lt;p&gt;Lighting and shadows are important if we are to help make our virtual objects look as realistic as possible. Our brains use light to infer a great deal about our environments. Don't believe me? turn out the lights and tell me about the environment around you. We can add virtual lighting and shadows to our scenes. Bad virtual lighting can make our virtual items look fake and conversely good virtual lighting can make them look more real as can be seen below.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/un1qRHMhh6U"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Touch Gestures and Interactions
&lt;/h2&gt;

&lt;p&gt;We can take touch gestures on our screen such as tap, pinch, rotate and pan and translate them to do something to the virtual objects in the scene that our fingers are touching on the screen. AR would be pretty boring if we couldn't interact with virtual items we place into the scene.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/H90cHXbbpbM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Animations
&lt;/h2&gt;

&lt;p&gt;Animations are incredibly important to make our AR experiences pop and show movement. Below you can see an AR periodic table animated into place and respond to screen touches. A bit of opacity also makes things cooler. It's just a general rule, I find.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/T8JGhrqe1ek"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Physics
&lt;/h2&gt;

&lt;p&gt;SceneKit provides us with a Physics engine we can play with. Below you can see how we can give our virtual items solid mesh and have look to be effected by gravity.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/x8Cyovgfqh0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Video &amp;amp; Sound
&lt;/h2&gt;

&lt;p&gt;You can add virtual video and sound to your AR scene. Below you can see a video played at the location of a detected image.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dPiu1qwTShk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  3D Models
&lt;/h2&gt;

&lt;p&gt;We can take 3D models such as .dae, .obj and .scn formats and place them in the scene. You can even create your own in Blender and export them to those supported formats. Below you can see a 3D model placed on the location of a detected image.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8ciwBK_Mhac"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Combining Functionality
&lt;/h2&gt;

&lt;p&gt;The best AR experiences are achieved when you combine a few of the aforementioned features together as can be seen below.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/iJvbqAT68SA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/aNpqDCWorLQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;And sometimes it is fun to just mess around and see what kind of experience you can make..&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/S5xDa8u9PA0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Again, all the above were achieved just using .NET, C# and Visual Studio for Mac to leverage Apples ARKit and SceneKit frameworks.&lt;/p&gt;

&lt;p&gt;If this has peaked your interest, know that &lt;a href="https://www.linkedin.com/pulse/so-i-am-writing-book-augmented-reality-net-developers-lee/"&gt;I am writing a book on the topic&lt;/a&gt; with APress, which will hopefully be completed and published in the new year and I have a dedicated website &lt;a href="https://XamarinArkit.com"&gt;XamarinArkit.com&lt;/a&gt; where I share code samples and approaches on how to leverage the functionality discussed to creating interesting AR experiences.&lt;/p&gt;

&lt;p&gt;In order to help share these amazing capabilities with my fellow .NET developers, I've given a &lt;a href="https://www.youtube.com/watch?v=pSiLlBfDniI"&gt;few talks to .NET User groups&lt;/a&gt; on the topic and hope to do more in future.&lt;/p&gt;

&lt;p&gt;What is most important though is imagination, with Augmented Reality, you really are only limited by your imagination. It provides an in immersive interactive canvas like we've never had before. You can see why AR is being used in an increasing number of industries.&lt;/p&gt;

&lt;p&gt;If you want to see more examples, make sure you follow me on &lt;a href="https://twitter.com/leeenglestone"&gt;Twitter&lt;/a&gt; and &lt;a href="https://youtube.com/leeenglestone"&gt;YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>augmentedreality</category>
      <category>dotnet</category>
      <category>csharp</category>
      <category>arkit</category>
    </item>
    <item>
      <title>Augmented Reality 3D Photo Sphere in Xamarin, .NET and ARKit - Explained</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Fri, 20 Mar 2020 22:18:55 +0000</pubDate>
      <link>https://dev.to/leeenglestone/augmented-reality-3d-photo-sphere-in-xamarin-net-and-arkit-explained-3pck</link>
      <guid>https://dev.to/leeenglestone/augmented-reality-3d-photo-sphere-in-xamarin-net-and-arkit-explained-3pck</guid>
      <description>&lt;p&gt;A few people have asked how I achieved the Augmented Reality 3D Photo Sphere effect in Xamarin, .NET and ARKit so I have recorded a short explainer video and code walkthrough. Enjoy! &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rYy1khb7zII"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>xamarin</category>
      <category>arkit</category>
      <category>augmentedreality</category>
    </item>
    <item>
      <title>Augmented Reality 3D Photo Surround using Xamarin, ARKit C# and .NET</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Wed, 18 Mar 2020 15:19:11 +0000</pubDate>
      <link>https://dev.to/leeenglestone/augmented-reality-3d-photo-surround-using-xamarin-arkit-c-and-net-5fk7</link>
      <guid>https://dev.to/leeenglestone/augmented-reality-3d-photo-surround-using-xamarin-arkit-c-and-net-5fk7</guid>
      <description>&lt;p&gt;Last night I created an augmented reality 3D photo gallery sphere concept in Xamarin, ArKit and .NET that has been on my mind for a while.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2q2kadwvfHA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;It currently calls the Unsplash API with the search term "cats" but there is no reason it can't show images from any search term.&lt;/p&gt;

&lt;p&gt;First I create 7 rows of 2d planes and give them a SCNLookAtConstraint so that it they all look at a central invisible node that I create at the WorldOrigin (center).&lt;/p&gt;

&lt;p&gt;var lookConstraint = SCNLookAtConstraint.Create(centerNode);&lt;/p&gt;

&lt;p&gt;lookConstraint.GimbalLockEnabled = true;&lt;/p&gt;

&lt;p&gt;imagePlaneNode.Constraints = new SCNConstraint[] { lookConstraint };&lt;/p&gt;

&lt;p&gt;I then call the Unsplash API and after retrieving search results, iterate through the 2d planes and give them a material which are the returned images. I make the call to the Unsplash API in a separate thread from the UI thread, but after retrieving the API result have to then update nodes on the UI thread.*&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I don't know if this is the right way of doing this sort of thing, but it works for me.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Task.Run(async () =&amp;gt;&lt;br&gt;
{&lt;br&gt;
   var imageUrls = await GetUrlsFromUnSplashApi(searchTerm, sides * rows);&lt;/p&gt;

&lt;p&gt;int x = 0;&lt;/p&gt;

&lt;p&gt;foreach(var imageUrl in imageUrls)&lt;br&gt;
   {&lt;br&gt;
        var taskA = LoadImage(imageUrl);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    await taskA.ContinueWith(cw =&amp;gt;
    {
        var image = cw.Result;
        uiImages.Add(image);

        BeginInvokeOnMainThread(() =&amp;gt;
        {
            if (x &amp;lt; (sides*rows))
            {
                imagePlaneNodes[x].UpdateImage(image);
                x++;
            }
        });
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;Future improvements I may consider is the ability to select an image to make it change position and scale. I may also experiment with calling other APIs such as the Facebook or a news API.&lt;/p&gt;

&lt;p&gt;I will share the code on XamarinArkit.com with my other Xamarin Arkit learnings and proof of concepts and may also record a short explanatory video walking through and explaining the code.&lt;/p&gt;

&lt;p&gt;Want to keep up to date with what I am working on? Follow me on Twitter &lt;a class="mentioned-user" href="https://dev.to/leeenglestone"&gt;@leeenglestone&lt;/a&gt;
.&lt;/p&gt;

&lt;p&gt;What search terms would you use to be surround by images of?&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>augmentedreality</category>
      <category>arkit</category>
      <category>xamarin</category>
    </item>
    <item>
      <title>Google Analytics Augmented Reality Proof of Concept</title>
      <dc:creator>Lee Englestone 💡🧠👨‍💻</dc:creator>
      <pubDate>Fri, 06 Mar 2020 07:56:31 +0000</pubDate>
      <link>https://dev.to/leeenglestone/google-analytics-augmented-reality-proof-of-concept-2k0d</link>
      <guid>https://dev.to/leeenglestone/google-analytics-augmented-reality-proof-of-concept-2k0d</guid>
      <description>&lt;p&gt;So every now and then as I learn how to do more things in Augmented Reality using Xamarin, ARKit, C# and .NET and document them on XamarinArkit.com, I like to put the skills together and do little proof of concepts. The last one I did was around Augmented Reality and business cards.&lt;/p&gt;

&lt;h1&gt;
  
  
  AR Google Analytics Dashboard
&lt;/h1&gt;

&lt;p&gt;This time, I thought I would show what I would like Google Analytics to be like in Augmented Reality. Using Analytics from a website of mine as an example (VisualStudioTips.co.uk), I combine some of the information within Google Analytics into a single view.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/B_COYfFLMK8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Note that these are static images (hence the proof of concept), but there is no reason why you couldn't use the Google Analytics API to dynamically get and display this information.&lt;/p&gt;

&lt;p&gt;The code for this proof of concept will shortly be on XamarinArkit.com.&lt;/p&gt;

&lt;p&gt;Hopefully this gives you a taste of what the imminent future holds when AR glasses become mainstream and we are no longer designing traditional interfaces for 'little black screens'.&lt;/p&gt;

&lt;p&gt;If you want to keep up to date with future Augmented Reality experiments you can follow me on twitter at &lt;a class="mentioned-user" href="https://dev.to/leeenglestone"&gt;@leeenglestone&lt;/a&gt;
.&lt;/p&gt;

&lt;p&gt;-- Lee&lt;/p&gt;

</description>
      <category>augmentedality</category>
      <category>arkit</category>
      <category>xamarin</category>
    </item>
  </channel>
</rss>
