<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nathan Glover on Medium]]></title>
        <description><![CDATA[Stories by Nathan Glover on Medium]]></description>
        <link>https://medium.com/@t04glovern?source=rss-7908256fae34------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*EoZvzYqRipPMSbc_.</url>
            <title>Stories by Nathan Glover on Medium</title>
            <link>https://medium.com/@t04glovern?source=rss-7908256fae34------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 16:55:46 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@t04glovern/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Teaching Online — The mostly Positive journey so far]]></title>
            <link>https://medium.com/@t04glovern/teaching-online-the-mostly-positive-journey-so-far-2e69e6d9a419?source=rss-7908256fae34------2</link>
            <guid isPermaLink="false">https://medium.com/p/2e69e6d9a419</guid>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[udemy]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[dartlang]]></category>
            <dc:creator><![CDATA[Nathan Glover]]></dc:creator>
            <pubDate>Mon, 07 May 2018 12:54:59 GMT</pubDate>
            <atom:updated>2018-05-07T12:54:59.384Z</atom:updated>
            <content:encoded><![CDATA[<p>Two months ago I made the decision that I wanted to start teaching online. The journey I am on is still a very active one, but I really want to share my experiences with it over the last 60 days or so as I believe it’ll share some insights on some of the common mistakes that I believe people might make.</p><h3>Month 1: Course 1</h3><h4>Step 1 — Leap of Faith</h4><p>It was a normal day in the office at work, I recall I was trying to explained to some co-workers how <strong>Blockchain</strong> could be used in more ways then just as a currency. It annoyed me that I couldn’t summarise my knowledge of the topic concisely enough to make my argument valid.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P8vWZpTdHIcBCt2fFV5Q6g.jpeg" /><figcaption>Credit:<a href="https://unsplash.com/photos/VnGac-kUflg"> Gabriel Matula</a></figcaption></figure><p>I remember blurting out that I would just put together a learning session for the team on how Blockchain technology could be used in a practical way. I don’t think people took much notice, but in my mind I was screaming…</p><p>What have I done!</p><blockquote><strong>I’d committed out loud that I was GOING to make a short course</strong>.</blockquote><p>I remember sitting at home that night stressing about what I was going to teach, how I was going to structure it and what needed to be taught; and that’s when I decided to check out some online courses to see how they were teaching things.</p><p>That’s when I found Udemy.</p><p>Immediately I saw more value in producing a short online course and then giving it away for free to my co-workers, as it gave me an interesting challenge. It meant that I didn’t have to stand up and present something in front of actual people and I could just talk to a camera.</p><h4>Step 2 — Find your Niche</h4><p>At this point in time, the category for <strong>Smart Contracts / Ethereum / Blockchain Development</strong> were pretty lacking in terms of available courses. There was one other big course on Smart Contract development that seemed to have everything under the sun:</p><ul><li><strong>Awesome Course introduction video</strong> (really neat animation and effects)</li><li><strong>Introduction to the Toolchains</strong> needed to get started</li><li><strong>Introduction to the Technology</strong> in general</li><li><strong>Introduction to the Language</strong> used to write the smart contracts</li><li>A <strong>very simple demo application</strong></li></ul><blockquote>Cool… Awesome… Now what?</blockquote><p>That’s when it hit me, sure there was a course on how to get started with some really basic examples; however while these learnings are really important for some, it doesn’t really help new developers to this landscape make anything that is worthy of use in the real world.</p><p>A quote came to mind</p><blockquote>Learn Programming Patterns, Not Programming Languages</blockquote><p>This basically means that learning a Language is always interesting and useful to a point, but at some point you have to apply that language to a problem that is completely unique to that language; and you will fall flat on your face.</p><p>Really what I immediately decided I wanted to do, was to teach the technology in a VERY hands on and raw way.</p><p>What I didn’t realise at the time as that this is <strong>a very risky game to play</strong>, especially in a land where not everyone is looking for this kind of course.</p><h4>Step 3 — Fail Fast, Fix Later</h4><p>I spent a good week or so designing how I wanted the course to me structured; I spent entire days just thinking about what things I wanted to teach, and in what order I wanted to explain them.</p><blockquote>I felt like I was being productive</blockquote><p>I felt good about what I was getting through, It seemed like I was making a lot of progress, I mean I had all these great Ideas down on paper and I had this amazing fantasy in my mind about how it was all going to come out when I started filming.</p><p><em>I wasn’t ready to start filming though, Noooooo Nooooo way was I ready, maybe next week I will film the Introduction… ohh but wait I should film the introduction last because I don’t know if I’ll change things, Oh maybe I’ll film it at the start and then If I change it I’ll re-film it, but then…</em></p><blockquote>STOP</blockquote><p>By the end of the second week I realise I had fallen into a pitfall of building my own barriers around why I couldn’t just get on with producing videos.</p><p>It was worse because I knew that I was going it to. I would go to bed telling myself I’d done so much, but then toss and turn from feeling guilty that I’d wasted 4 hours making a new Course Image.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vYBiu3ZmZT2raSWONM5LuA.jpeg" /><figcaption>Credits: <a href="https://unsplash.com/photos/4qGbMEZb56c">Thomas William</a></figcaption></figure><p>I decided one afternoon that I just needed to cut the crap and get started; even if the videos weren’t perfect, at least maybe I wouldn’t feel so guilty.</p><blockquote>I started filming.</blockquote><p>5 hours later and I’d finished a draft cut of my <strong>ENTIRE</strong> course.</p><blockquote>I slept soundly that night</blockquote><p>The overall quality of the videos were no where near the Wes Anderson masterpiece I’d initially envisioned. But at-least it was more or less out of the way.</p><p>I submitted my course for review, and it was approved pretty quickly; however there was a note from Udemy with feedback that the audio was a little Quiet and that you could sometimes hear noises in the background.</p><blockquote><strong>Note:</strong> I recently went back and re-mixed ALL the audio for my videos removing background noise and added annotations to complicated sections. I did this after I launched the course when I had a couple people mention that it was a little hard to hear in places.</blockquote><h4><strong>Step 4 — What Now?</strong></h4><p>I launched the course and I felt great! Over the moon! The next day at work I handed out a bunch of free coupons to my co-workers and told them they should check it out if they wanted to learn more.</p><p>I kept checking that Instructor page, hitting F5; but nothing really changed. I didn’t get any new students, even from the free coupons. Not only that but most of the people who I did get to sign up didn’t sit through the any of the content at all. I didn’t really expect anyone to, but I sorta hoped that I was going to see at least some student flow through from Udemy’s store front.</p><blockquote>Nothing</blockquote><p>I read a bunch of comments from threads that I could relate to on the private Instructor page on facebook that Udemy runs, and realised that self promotion is pretty much necessary to get courses off the ground.</p><p>I was part of about 20+ discord groups that all revolved around Ethereum games, I can’t remember why I joined half of them but it seemed like a really good place to start looking for potential students.</p><p>Before I went around posting links however; I wanted to develop some more detailed graphics to catch the attention of people. Because the Udemy course guidelines didn’t allow for text, I had to develop something else.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*XrqHOIBrAADmtqRtRwg5yA.png" /><figcaption><strong>My First Advertisement</strong></figcaption></figure><p>The first advert turned out to be not super successful overall, it did lead to some sales; however I have a feeling that most people only bought the course because of the text block I had accompanying the image.</p><p>Over the next 3 weeks I changed up my visual strategies and eventually began advertising on <strong>Reddit</strong>, which has been probably the most successful out of the major advertising platforms out there.</p><p><a href="https://www.udemy.com/cryptodoggies">Smart Contract Development: CryptoDoggies Token Game</a></p><h3>Month 2: Course: 2</h3><p>The development of my second course <a href="https://www.udemy.com/flutter-development">The Complete Flutter and Firebase Developer Course</a> went a lot better in terms of productivity. I don’t want to repeat myself, so I’ll summarise the key things I picked up during the production.</p><h4>Co-instructor</h4><p>I worked with a Co-instructor this time around which was really helpful for developing more content, and also having someone to proof read the things I was delivering was great.</p><h4>Advertising</h4><p>I went WAY too hard on advertising early on, I was only just breaking even because there are only two major courses that teach Flutter on Udemy at the moment. I was making most of the revenue from Affiliates and Udemy advertising.</p><p>After about a week I cut back to just Reddit ads.</p><h4>Promotions</h4><p>I wish I’d started promoting much earlier on in the courses life, after about a week and a half a I started giving out Free coupons to a couple facebook groups I was part of specifically focused on the subject matter I was teaching.</p><p>The feedback and responses I got from this were fantastic! A lot of positive vibes overall and heaps of constructive feedback.</p><h4>Source Code</h4><p>This time around I didn’t skimp on source code as course material. I provided code chunks for each individual video.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8NcLay4P0ntMhWzDJ4ZCOQ.png" /></figure><p>The students could download that lessons source code and pick up from anywhere in the course without having to go back through videos to find what they missed.</p><p>Unfortunately I have noticed that a good number of students don’t seem to use this resource nearly enough, and I still get a fair number of “This code isn’t working for me” Q/A’s where its a simple syntax issue where code hasn’t been copied in correctly.</p><h4>Misc Resources</h4><p>I spent HOURS making up supplementary materials for literally every video in the course. It allows people to follow up from the slide presentations and they help me when I’m teaching content to remember which parts come next</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*T4cMJdC8jha9UNIsXop_LQ.png" /></figure><p>Scripts don’t work for me at all, and I’ve found the slide methods make the videos seem a lot more natural for me which the added benefit of being an excellent resource for my students.</p><h4>YouTube Promotions</h4><p>As part of our ongoing content, we produced part of our course for YouTube as well which allowed us to potentially draw in some interest for Flutter by targeting the main language it uses.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLUsqXNfbLYixE5ZDOA3xNjZS-SolHjHZs&amp;url=https%3A%2F%2Fwww.youtube.com%2Fplaylist%3Flist%3DPLUsqXNfbLYixE5ZDOA3xNjZS-SolHjHZs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FVn_jFIraq40%2Fhqdefault.jpg%3Fsqp%3D-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ%3D%3D%26rs%3DAOn4CLCoO2z4h2Nd88nM-_SmuL4VF73Grg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="853" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c2dbb5c24ac35bb82978b26ce9639753/href">https://medium.com/media/c2dbb5c24ac35bb82978b26ce9639753/href</a></iframe><p>It’s still too early to say that its working, but at the very least it’s providing a service to the overall community!</p><h4>Now What: Part 2</h4><p>We’re still delivering content to the course in a steady manner, We’ve taken on a lot of feedback and the originally 4 section course is already nearly 7 seconds now; going from the original 4.5 hours to nearly 7.</p><p>We’d like to continue to improve as we go rather then making another one for other pieces of information, we’ll see how long we can add videos while still keeping the content logically ordered.</p><p><a href="https://www.udemy.com/flutter-development">The Complete Flutter and Firebase Developer Course</a></p><h3>Summary</h3><p>Overall the experience has been fantastic, I’m definitely sleeping less because of the amount of time I have to put in after hours to produce good content, but it makes me happy to do it.</p><p>I’m currently working on my next course, which I’ve just finished writing all my slides and material.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2e69e6d9a419" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CatBox — Cat Adoption App in Flutter]]></title>
            <link>https://medium.com/@t04glovern/catbox-cat-adoption-app-in-flutter-de017f19cd57?source=rss-7908256fae34------2</link>
            <guid isPermaLink="false">https://medium.com/p/de017f19cd57</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[dartlang]]></category>
            <category><![CDATA[firebase]]></category>
            <dc:creator><![CDATA[Nathan Glover]]></dc:creator>
            <pubDate>Thu, 19 Apr 2018 13:45:25 GMT</pubDate>
            <atom:updated>2018-04-19T16:34:31.074Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8x2DjeLssOnsUAebS_t3qQ.png" /></figure><p>About a month ago I heard from a friend about a great new mobile development framework that promised to simplify and streamline the process of pumping out iOS and Android native applications using a unified code base.</p><p><a href="http://flutter.io/"><strong>Flutter</strong></a> is Google’s newly beta released Native mobile development framework. Its biggest appeal to be was quite honestly the fact that its primarily written in Dart. It makes use of this connection with dart by also utilising a wonderful external packing tool <a href="https://pub.dartlang.org/packages/"><strong>pub</strong></a><strong>.</strong></p><h4>CatBox Adoptions</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3uPSLutR7hEnTl80GdHyzw.jpeg" /><figcaption><a href="https://github.com/t04glovern/catbox">https://github.com/t04glovern/catbox</a></figcaption></figure><p>CatBox is an application that I wrote with my good friend <a href="https://github.com/SilentByte">Rico Beti</a>, and is based on the <a href="https://github.com/CodemateLtd/FlutterMates">FlutterMates</a> template which I found in the <a href="https://github.com/Solido/awesome-flutter">awesome-flutter</a> repo.</p><p>Our goals were to make use of as much of the <strong>“Standard”</strong> Flutter stack as we could, this meant we wanted to integrate nicely with <a href="https://firebase.google.com/">Firebase</a> and try to build our app to be serverless.</p><p>The final project implements:</p><ol><li><strong>Firebase Authentication</strong>, specifically Google Sign-in</li><li><strong>Cloud Firestore</strong>, NoSQL database for our cats</li><li><strong>Firebase Storage</strong>, hot file storage for the cat images</li><li><strong>Firebase Functions</strong>, handles a couple of our Firestore queries for us safely.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BqK6EzI78en2-1gTrjXeaA.png" /></figure><p>Check out our codebase, It contains everything you need to deploy it yourself, including all the Firebase configuration files that use <strong>firebase-cli</strong> to deploy!</p><h4>Flutter and Firebase Developer Course</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*QuiCMZvgBW6ZWYCGsYDKhg.png" /></figure><p>On top of the base repository, we also developed our very own <a href="https://www.udemy.com/flutter-development">Udemy</a> course where we go over the entire projects implementation + cover the general setup and beginners guide to Flutter Development.</p><p>We wanted to make a course that didn’t just create mini apps, but more so we wanted to be able to teach what we’ve learnt so far, and continue to build on the course as we continue to grow the CatBox application, which is currently <a href="https://play.google.com/store/apps/details?id=com.nathanglover.catbox">Live on the Play Store</a></p><p>Use the coupon code <a href="https://www.udemy.com/flutter-development/?couponCode=MEDIUM2018">MEDIUM2018</a> to get the course at a 88% discount.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=de017f19cd57" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[KittyCoin Club — What’s Happening?]]></title>
            <link>https://medium.com/@t04glovern/kittycoin-club-whats-happening-7c3f109cda02?source=rss-7908256fae34------2</link>
            <guid isPermaLink="false">https://medium.com/p/7c3f109cda02</guid>
            <category><![CDATA[dapps]]></category>
            <category><![CDATA[solidity]]></category>
            <category><![CDATA[udemy]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <dc:creator><![CDATA[Nathan Glover]]></dc:creator>
            <pubDate>Thu, 22 Mar 2018 14:31:45 GMT</pubDate>
            <atom:updated>2018-03-22T14:34:46.826Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/750/1*slwoAmy-tdCVe_w5EIXMxA.jpeg" /></figure><p>It’s been over a month since I updated the KittyCoin Club repo and I think I owe some kind of explanation for people who might not follow what I get up to on other social platforms <a href="http://twitter.com/nathangloverAUS">*cough*</a>.</p><p>Near the end of January I realised I’d fallen into a development pit where I would be pushing small, and arguably pointless changes to the repository. Unfortunately my basic knowledge about JavaScript, Bootstrap and web development in general was proving to be a hurdle that I didn’t have the enthusiasm to overcome.</p><p>So I pivoted to something new for a while!</p><h4>CryptoDoggies Udemy Course</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/709/1*A_B2Kxvi5UV1L9OUH9b2AQ.png" /><figcaption>Smart Contract Development: <strong>CryptoDoggies Token Game</strong> (<a href="http://learn.cryptodoggies.store/">http://learn.cryptodoggies.store/</a>)</figcaption></figure><p>I created an online course that was designed as a way to force me to learn the practices I’d picked up over the previous month and apply them to a fresh and simple <strong>ÐApp</strong> (Distributed Application).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/270/1*G7Ewpqf3wsxEwmRs9HYTnQ.png" /></figure><p>One of the side effects of doing this course, was I ported my existing <a href="https://github.com/ponderware/mooncatparser">copy-cat implementation</a> of the Kitty image generator over to a Doggy; and I actually learnt how the base code works and created a new version <a href="https://github.com/t04glovern/doggy-id-parser">t04glovern/doggy-id-parser</a></p><p>The site itself is extremely similar in a lot of ways to KittyCoin Club, however I optimised the way I was dealing with Bootstrap cards and cleaned up a lot of the JavaScript that I was using; making it more readable and less verbose duplication.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IZOak1bfacb1ovjPgbJXgQ.png" /><figcaption><strong>CryptoDoggies</strong> (<a href="http://cryptodoggies.store/">http://cryptodoggies.store</a>)</figcaption></figure><p>The idea behind the application is fairly simple, and just implements ERC721 token standards in order to create and store these unique little collectable doggies; whose price increase each time someone buys it off you.</p><h3>ÐAppster</h3><p><a href="https://dappster.space/">ÐAppster</a> is a fork of an existing card based advertising platform called <a href="https://willdn.github.io/weicards/">WeiCards</a>. What ÐAppster tries to achieve is to create a place where people can purchase a digital billboard; that once own they have complete control over what is advertised on it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/967/1*kiw1UKFKq6nq6SAvKbIN-g.png" /><figcaption><strong>ÐAppster</strong> advertising cards (<a href="https://dappster.space/">https://dappster.space</a>)</figcaption></figure><p>When a card is purchased the owner can do <strong>one</strong> of <strong>three</strong> things</p><ol><li><strong>Sell</strong>: the card can be put up for sale to anyone looking to buy for a price specified by the owner</li><li><strong>Lease</strong>: The card can be rented out for a set period of time at a fixed rate</li><li><strong>Advertise</strong>: The card can be used to advertise both an Image and a URL link to a website.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*dlJrm6mdKrlqj94Gzdr-4w.png" /><figcaption><strong>ÐAppster</strong> card example</figcaption></figure><h4>KittyCoin Club?</h4><p>Good news! I haven’t forgotten about the smart contract idea that started it all, and It’s now back to be the main focus of my attention. I really did just need a creative break to explore what else was out there; and deploy some other interesting ideas to mainnet.</p><p>Over the next week I’ll be taking a large portion of my CryptoDoggies learning and porting it back into KittyCoin Club, along with changing up how I deal with the KittyCoin tokens.</p><h4>Links</h4><ul><li>Smart Contract Development: CryptoDoggies Token Game: <a href="https://www.udemy.com/cryptodoggies">https://www.udemy.com/cryptodoggies</a></li><li>CryptoDoggies code: <a href="https://github.com/t04glovern/cryptodoggies">https://github.com/t04glovern/cryptodoggies</a></li><li>CryptoDoggies ID Parser: <a href="https://github.com/t04glovern/doggy-id-parser">https://github.com/t04glovern/doggy-id-parser</a></li><li>ÐAppster: <a href="https://dappster.space/">https://dappster.space</a></li><li>ÐAppster code: <a href="https://github.com/t04glovern/dappster">https://github.com/t04glovern/dappster</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7c3f109cda02" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[KittyCoin Club — DevUpdate 2]]></title>
            <link>https://medium.com/@t04glovern/kittycoin-club-devupdate-2-4a544a413a19?source=rss-7908256fae34------2</link>
            <guid isPermaLink="false">https://medium.com/p/4a544a413a19</guid>
            <category><![CDATA[testing]]></category>
            <category><![CDATA[dapps]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[solidity]]></category>
            <dc:creator><![CDATA[Nathan Glover]]></dc:creator>
            <pubDate>Tue, 13 Feb 2018 15:21:08 GMT</pubDate>
            <atom:updated>2018-02-13T15:26:23.997Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qn-bqMvLS0Mfey1j2q_0eQ.png" /></figure><p>Another week down and a lot of progress has been made. This week brought a major overhaul around how I do unit testing, which had some fantastic benefits around cleaning up some critical bugs. There was also some progress made on the front end connection to the backend data for each of the primary data structures.</p><h4>Unit Tests &amp; Coverage</h4><p>In order to correctly unit test some of the more complex chain of events that take place in my DApp, I needed to restructure the way my unit tests were called, and move away from instantiating a new instance of the contract before each test (I was using beforeEach() ).</p><p>The new method, which I borrowed from <a href="https://github.com/ponderware/MoonCatRescue-Contract/tree/master/test">MoonCatRescue</a>, stores a generic interface for each test case and accepts account[x] style arguments so allow for more repetitive function calls to be carried out without sacrificing too much readability</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rRWOO-ljuj2yHWBJUbxtPQ.png" /><figcaption>Unit Test to verify trust enable function on a given address</figcaption></figure><p>The code block above for example, will allow me to test a variety of different scenarios and confirm whether the scenario should succeed, or fail by simply passing a expect to fail argument when necessary.</p><pre><em>// account[1] should not be able to give trust status to account[2]</em></pre><pre><strong>checkCanApplyTrustToAccount(2, 1, &#39;expect to fail&#39;);</strong></pre><pre><em>// account[1] should not be able to give trust status to themselves</em></pre><pre><strong>checkCanApplyTrustToAccount(1, 1, &#39;expect to fail&#39;);</strong></pre><pre><em>// account[0] should be able to give trust[0] to account[1]</em></pre><pre><strong>checkCanApplyTrustToAccount(1, 0);</strong></pre><pre><em>// account[0] should be able to give trust[1] to themselves</em></pre><pre><strong>checkCanApplyTrustToAccount(0, 0);</strong></pre><p>This new scheme of testing resulted in an awesome bump in code coverage, and has really enabled me to work a lot faster without worrying about creating too much technical debt.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g9OUZ1pqLckO4yf91rHR-g.png" /><figcaption>Code Coverage bump up to 59%</figcaption></figure><h4>Font End Communication</h4><p>The second change is around how it communicate to the frontend application using the web3 library. Prior to this week I was pulling from a function that just listed the identifiers for the various data structures; this week I managed to get the actual data from the testnet displayed in the console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/610/1*tAykynj6h31LOZhGhXssLQ.png" /></figure><p>This is a pretty major step forward, as it shows that all my contract logic is working perfectly, and is ready to be displayed in more useful ways this coming week.</p><p>I’m at the point where I can nicely test all the functionality from the frontend directly; be it creating trust, adding kitties or making donations! All that’s missing now is the UI elements updating based on blockchain changes.</p><h4>MetaMask Redirects</h4><p>I have a redirect page for people who don’t have MetaMask enabled when they first arrive at the site</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/824/1*beoLZiI7Fa6Os5Mj955YRw.png" /></figure><p>I still have to clean up some of the logic so that after connecting to the correct network the page auto redirects back to home without requiring a manual refresh.</p><h4>Trust/Foster Overflow Bug</h4><p>Had an awesome win around removing a logical bug in the Trust/Foster amount overflow calculation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l-Gz5gcZvJwZ6RH2t015OQ.png" /><figcaption>Old</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cHqxk8uFq0dX3NfvQrRFXQ.png" /><figcaption>New</figcaption></figure><p>I won’t get into the details, but I didn’t think about how I was calculating the trust amount and had some odd cases where the Unit tests would work, which made me believe I didn’t have broken logic.</p><p><strong>Plans for this week</strong></p><ul><li>Implement ERC721 tokens underneath KittyCoin’s</li><li>Get code coverage over 75%</li><li>Replace the temporary kitty cards with the Sprites generated from the <a href="https://github.com/fluffycatware/kittycoin-id-parser">kittycoin-id-parser</a> library.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4a544a413a19" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[KittyCoin Club — DevUpdate 1]]></title>
            <link>https://medium.com/@t04glovern/kittycoin-club-devupdate-1-322164456dfe?source=rss-7908256fae34------2</link>
            <guid isPermaLink="false">https://medium.com/p/322164456dfe</guid>
            <category><![CDATA[unit-testing]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[dapps]]></category>
            <category><![CDATA[solidity]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <dc:creator><![CDATA[Nathan Glover]]></dc:creator>
            <pubDate>Sun, 04 Feb 2018 15:36:42 GMT</pubDate>
            <atom:updated>2018-02-04T15:36:42.042Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OfTidwYxiAQkHbiHaXYIrg.png" /></figure><p>This week felt rather unproductive in terms of visible deliverables for the platform, so I figure I should start updating the progress made on KittyCoin Club each week to keep me motivated to kick goals.</p><h4>Unit Tests</h4><p>The main focus this week was Unit testing and to iron out as much of the technical debt as I could now, so that I don’t end up with monster problems in the future. I could also argue that the Unit tests will help me move faster developing now, as It’ll allow me to test new ideas more quickly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*HAU3ZGTuD_COj9cZphEP0g.png" /></figure><p>I’m currently testing the major functionality of the contract in three main tests; this code can be viewed <a href="https://github.com/fluffycatware/kittycoin-club/blob/master/test/KittyCoinClubTests.js#L44">here</a>. I had to learn quite about about how JavaScript <strong>async</strong>, <strong>await</strong> and <strong>promises</strong> work; which gave me such a massive headache while I developed.</p><h4>Interface Additions</h4><p>The next piece of rather large work that I crushed was a more interactive interface on <a href="http://kittycoin.club/">http://kittycoin.club</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qqbCKtqfN32Fh85ChKVuGw.png" /></figure><p>You can now, granted you are registered as a trust; create kitties to be put up for donation. This is coupled with another small form that allows the contract owner, and eventually other trusted users to add new trust addresses.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q3kF8jXy3XcNewHB8Z0xUw.png" /></figure><p>The next step for the interface is to replace the existing Kitty images with new Kitties that are added to the contract. I actually finished a lot of these backend functions as well, however they are not fully linked to the frontend quite yet.</p><h4>Better Issue Visibility</h4><p>The final thing I would like to mention is that the project now has much better issue visibility. I’ve integrated <a href="https://snyk.io/">https://snyk.io</a> and <a href="https://codeclimate.com/">https://codeclimate.com</a> which perform both security/vulnerability scans on the static code, and also analyse the code maintainability (takes into account duplication, code coverage and code smells).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/791/1*FqR17HU11Ovz6s6hpH3iPA.png" /></figure><p>All this information is available as badges on the repo’s README, so problems are brought into the light rather then ignored.</p><h4>Final Notes</h4><ol><li>We’re now featured on <a href="https://www.stateofthedapps.com/dapps/kittycoin-club">State of The Dapps</a> 😻</li><li>This weekend was the first time I had my contract saving and loading data, and making payable transactions to the development blockchain (which is really really exciting, as it took a lot to get everything coded safely).</li><li>SafeMaths &amp; other zeppelin-solidity offical libraries are now referenced in the code, meaning I’ll be more likely to integrate future changes from those projects.</li><li>I’ve learnt SO much about JavaScripts testing frameworks, and also web3 transactions and contract communication. It’s really cool!</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=322164456dfe" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[KittyCoin Club — Introduction]]></title>
            <link>https://medium.com/@t04glovern/kittycoin-club-introduction-73ba33c6aaf0?source=rss-7908256fae34------2</link>
            <guid isPermaLink="false">https://medium.com/p/73ba33c6aaf0</guid>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[dapps]]></category>
            <category><![CDATA[open-source-software]]></category>
            <dc:creator><![CDATA[Nathan Glover]]></dc:creator>
            <pubDate>Mon, 29 Jan 2018 15:39:08 GMT</pubDate>
            <atom:updated>2018-01-30T13:48:36.404Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aHWeltXLkbJddMaMp2lTIw.png" /></figure><p>When I decided a few weeks ago that I wanted to build a DApp (Distributed App) I made a conscious decision to bite off more then I could chew. The reasoning for this was that I didn’t want to create <a href="https://www.stateofthedapps.com/tagged/gambling/">yet another gambling app </a>like a lot of DApp’s are doing currently.</p><p>Along with this I’d also begun working on a small home project to help my partner and I track and publish the cats we were currently fostering for our local animal rescue.</p><p>I decided I would merge these two semi-different things into one (hopefully) helpful platform that would use the <a href="https://www.ethereum.org/">Ethereum</a> smart contract system to organise and incentivise donations to both Foster Carers and Animal rescue organisations.</p><p>KittyCoin Club’s site is currently “Live” at <a href="http://kittycoin.club/">http://kittycoin.club/</a>. However the contract is still actively under development and I’m hoping to finish up deployment in the next week or so.</p><p>The components of how KittyCoin Club functions can be vaguely outlined in the diagram below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x3Ds_FYdm3HBhuDJVp4kQg.png" /><figcaption>KittyCoin Club components</figcaption></figure><h4>Trusts</h4><p>Trusts are the organisations that are already registered as charities under their local governing system. The trusts initially need to be added through the contract Owner (myself), which understandably goes against the decentralised nature of the DApp. I’ll try to justify though, and say that simply opening up the platform to anyone to add animals to generate donations simply will not work without some form of governance. I’m closely watching the work that <a href="https://giveth.io/">https://giveth.io/</a> is doing, as I believe a public governing body will eventually be the format this DApp will abide to.</p><h4>Kitty</h4><p>Kitties in actual fact are entities that can be donated to, and can only be setup by verified trusts. A Kitty will take a variety of unique traits that define what it looks like, the idea being that I can eventually implement a sprite/palette swapper to visualize the kitties on the DApp’s page. Currently I’m using a centralised asset store for each image that links to a kitties ID. I’ve looked into the cost of storing images, or even image hashes on the contract but the pricing is ludicrous! I’ve also played around with some simple sprite palette generation on some kitty images.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/210/1*b2IYKlvPGV-adlQsnM_e0w.png" /></figure><p>The repo <a href="https://github.com/fluffycatware/kittycoin-id-parser">kittycoin-id-parser</a> allows me to turn a series of small 8-bit images into a huge assortment of unique kitties defined entirely by a unique ID.</p><p>I’d really like to apply this simple concept to the fully fledged kitty designer and allow trusts to store accurate depictions of kitties they put up for donation in the smart contract via the trait ID.</p><h4>Donation</h4><p>Donations are applied to Kitties and take two arguments from a donator. The first is a total Ethereum amount they want to donate, this amount is out of a total defined by the trust as a target donation limit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/374/1*sGUi6KJZYOrz-_QxASXWeQ.png" /><figcaption>Donation Card Example</figcaption></figure><p>The next argument is the percentage of the donation that should go to a foster carer vs the trust. I should explain that the main reason for this entire platform is to alleviate the financial strain that foster carers usually bare when looking after kittens and cat in-between homes. Usually they don’t get much in terms of financial support from the animal rescues, which isn’t the fault of anyone other then the fact that it is logistically very difficult to manage financing foster carers (and in most cases they’re doing it out of the kindness of their hearts).</p><p>So in reality the donation limit is primarily there to stop a foster carer from getting too high a sum from donations. When a limit is reached, and additional donations go straight to the trust in charge of the kitties donations.</p><h4>KittyCoin</h4><p>KittyCoin’s are the tokens of this platform. They are meant to incentives the donations that are put through the system, as they are unique and structured to be collectable. The coins themselves have a highly unique seed that is used to define a plethora of traits the coin exhibits. I don’t want the Tokens to be the primary reason people use this platform, however I also understand that some kind of reward would be welcomed, and the KittyCoin’s are both a nice token of proof that you’ve done something nice, and also the collectable and rare nature of some coins will encourage more people to donate to collect.</p><p>I won’t give away too many secrets just yet, but I will say that you should watch this space closely 😻</p><h4>Summary &amp; Links</h4><p>To wrap things up, I’ll leave you with some links to the project so far.</p><p><strong>Main DApp Repo</strong>: <a href="https://github.com/fluffycatware/kittycoin-club">https://github.com/fluffycatware/kittycoin-club</a></p><p><strong>Main DApp Site</strong>: <a href="http://kittycoin.club/">http://kittycoin.club/</a></p><p><strong>FluffyCat Tech Site</strong>: <a href="http://fluffycat.tech/">http://fluffycat.tech/</a> (this is the overarching org site for all future endeavours around blockchain for the greater good)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=73ba33c6aaf0" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>