<?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 Franck Boullier on Medium]]></title>
        <description><![CDATA[Stories by Franck Boullier on Medium]]></description>
        <link>https://medium.com/@franck.boullier?source=rss-ee72b36cc992------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*nIPLKeTTGjEd_6uYcI-LpQ.png</url>
            <title>Stories by Franck Boullier on Medium</title>
            <link>https://medium.com/@franck.boullier?source=rss-ee72b36cc992------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 28 May 2026 00:14:30 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@franck.boullier/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[Why Would Microsoft Pay 40B USD for TikTok?]]></title>
            <link>https://medium.com/swlh/why-would-microsoft-pay-40b-usd-for-tiktok-224b6ec9486a?source=rss-ee72b36cc992------2</link>
            <guid isPermaLink="false">https://medium.com/p/224b6ec9486a</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[business-strategy]]></category>
            <category><![CDATA[strategy]]></category>
            <dc:creator><![CDATA[Franck Boullier]]></dc:creator>
            <pubDate>Thu, 27 Aug 2020 03:31:55 GMT</pubDate>
            <atom:updated>2020-08-27T18:42:37.069Z</atom:updated>
            <content:encoded><![CDATA[<p>TikTok’s game-changing algorithm for keeping users engaged</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9ubM0q5Higjeh2vg4G1heQ.png" /><figcaption>Discussing the Deal — Shutterstock — by fizkes</figcaption></figure><p>Between 2017 and 2020, TikTok (a subsidiary of China-based ByteDance) built a massively successful video-sharing social network, not only in the US but also in India and other parts of the world.</p><p>On August 6th, 2020, Donald Trump signed an <a href="https://www.whitehouse.gov/presidential-actions/executive-order-addressing-threat-posed-tiktok/">executive order</a> invoking National Security concerns and mandating ByteDance to cease operating TikTok in the US. The deadline to comply: September 15th, 2020.</p><p>TikTok users and advertisers are worried. One of the options discussed to keep TikTok running is that Microsoft acquires TikTok’s US operation.</p><p>The question that puzzles many in that saga is:</p><blockquote>Why would Microsoft want to pay between 35 and 45Billions USD to acquire TikTok?</blockquote><p>That’s because TikTok has built a game-changing recommendation algorithm.</p><p>Microsoft wants the code that makes TikTok… well… tick.</p><h3>TikTok built a leading social network in less than 3 years:</h3><p>How did they get there?</p><p>November 2017. ByteDance, one of the BAT-B (Baidu, Alibaba, Tencent, and ByteDance are the Chinese equivalent of the GAFA — Google, Amazon, Facebook, and Apple), purchased Musical.ly: a lip-syncing app popular with mostly teenage girls in the US.</p><p>The price: 1Billion USD.</p><p>August 2018. ByteDance uses the data generated from Musical.ly to feed the recommendation algorithm they built for <a href="https://www.douyin.com/">Douyin</a>. Douyin, launched on the Chinese market in 2016, is the Chinese version of TikTok.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/136/0*7aWChkWDr8_AKNFL" /><figcaption>The Douyin logo should look familiar to TikTok users</figcaption></figure><p>July 2020. The TikTok app has more than 1 Billion downloads.</p><p>Not only that, but TikTok also became one of the largest and most influential social networks in several countries, including the US (100M+ users) and India (120M+ users before the ban).</p><p>According to <a href="https://www.wired.com/story/tiktok-finally-explains-for-you-algorithm-works/">Wired</a>, TikTok’s “For You” page is now one of the most valuable digital real estate in the world.</p><p>That is NOT an easy feat: remember <a href="https://en.wikipedia.org/wiki/Google%2B">Google+</a> (Google’s fourth attempt at building a social network)? And Microsoft <a href="https://www.theverge.com/2020/6/22/21299032/microsoft-mixer-closing-facebook-gaming-partnership-xcloud-features">just pulled the plug</a> on its latest attempt building a video sharing app: Mixer.</p><p>TikTok managed to crack the code of keeping users engaged:</p><ul><li>74% of TikTok users are active (<a href="https://influencermarketinghub.com/tiktok-stats/">source</a>).</li><li>A TikTok user spends, on average, 52mn per day on the app (<a href="https://sg.oberlo.com/blog/tiktok-statistics">Source</a>).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/755/0*B6rY9LAryEDntfXF" /><figcaption>Source <a href="https://influencermarketinghub.com/tiktok-stats/">Influencer MarketingHub</a> (Jul 2020)</figcaption></figure><h3>The Exploit vs. Explore dilemma:</h3><p>One of the biggest questions for every business is: How can you stay relevant and keep every customer engaged?</p><p>Any company is constantly trying to predict what customers (you) will want next.</p><p>In our age of the Internet and Cloud Computing, companies are doing this by collecting lots of data. Then, they use Machine Learning and Artificial Intelligence to try to make accurate predictions about customer needs.</p><p>At the most basic level, it works like this:</p><ul><li>If you look at many pictures of cute kittens, the machine will learn that you like cute kittens.</li><li>If you click on “like” on these pictures, that’s one more piece of information: that guy really likes kittens!</li><li>The company will try to use these data (<strong>Exploit</strong>) to keep you engaged: it’ll show you more pictures of cute kittens.</li></ul><p>But things are a little more complicated in real life, and you’ll rapidly get bored if you only see cute kittens on your feed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*q_3QZUmz6QtZHvqV" /><figcaption>Old Habits vs Change — Source Shutterstock — by Natasa Adzic</figcaption></figure><p>Because of that, the company will also try to show you some other things you might be interested in; pictures of cute puppies, for example.</p><p>They’ll analyze your reaction to cute puppies and learn more about what you might like next: this is the “<strong>Explore</strong>” strategy.</p><p>This “<strong>Explore</strong>” vs. “<strong>Exploit</strong>” dilemma is not limited to “which picture shall I show?”</p><p>Every day, people and companies are trying something new (<strong>Explore</strong>) with the hope that they’ll get better rewards compared to doing that same thing that they already know works (<strong>Exploit</strong>): Let’s try this new food, this new haircut, let’s read this new book, or pick a different investment strategy.</p><p>We all do this all the time.</p><p>There is a large body of theoretical work to try to find the optimal balance between “<strong>Explore</strong>” and “<strong>Exploit</strong>.” The <a href="https://arxiv.org/pdf/1707.02038.pdf">Thompson Sampling</a> strategy dates back to 1933; the <a href="https://en.wikipedia.org/wiki/Multi-armed_bandit">Multi-armed bandit problem</a> is another well known probabilistic approach to solve that. Russo and Van Roy published a paper in 2016 on <a href="https://www.jmlr.org/papers/volume17/14-087/14-087.pdf">how to apply Thompson sampling to online optimization problems using Information-Theoretic Analysis</a>.</p><p>The bottom line is: finding the right equilibrium between “<strong>Explore</strong>” and “<strong>Exploit</strong>” is hard, and many people are spending enormous amounts of money trying to find the perfect balance between both options.</p><h3>Some of the existing hacks to “<strong>Explore</strong>” better:</h3><p>Facebook, Instagram, Snapchat, all social networks are using your Social Network Graph to try to suggest better content.</p><p>The underlying logic behind that strategy is the following:</p><ul><li>I know that Jack likes kittens.</li><li>I also know that I can’t just show pictures of kittens to Jack, or else he’ll get bored and go somewhere else.</li><li>I know that Jack is a friend of Jill.</li><li>I know that Jill likes puppies.</li><li>Because Jack and Jill are friends, there is a good chance that Jack will like puppies too.</li><li>Let’s show Jack a few pictures of puppies and see if he enjoys these.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2ia3QlfWRUR6Y8uzCklCPw.png" /><figcaption>Connecting the dots — Shutterstock — by Sunward Art</figcaption></figure><p>Amazon and most online stores will use your past purchase history and compare it to the purchase history of people who have bought the same kind of stuff to give you recommendations.</p><p>YouTube does it to suggest videos, Medium to suggest new articles; it’s ubiquitous.</p><p>These approaches need LOTS of data. It usually takes time and many interactions for the machine to give you relevant recommendations.</p><p>But TikTok managed to go viral fast: they seem to have a very efficient way to figure out what people will like using a (comparatively) limited set of data.</p><h3>TikTok’ “Secret Sauce”:</h3><p>As explained in Eugene Wei’s post: <a href="https://www.eugenewei.com/blog/2020/8/3/tiktok-and-the-sorting-hat">TikTok and the Sorting Hat</a>,</p><blockquote>After they plugged Musical.ly, now TikTok, into Bytedance’s back-end algorithm, they doubled the time spent in the app.</blockquote><p>TikTok had become a “frighteningly addictive” app thanks to an “eerily perceptive” algorithm.</p><ul><li>An algorithm that does not need you to follow anyone, in an app that is easy and fun to use.</li><li>An algorithm that adjusts to the user’s evolving tastes in near real-time.</li><li>An algorithm that works at scale, fast, across hundreds of millions of users.</li></ul><p>And the best part is that TikTok’s algorithm seems to be culture agnostic: it was built for Chinese customers but worked as well for US users, Indian users, people in the Middle East, and with apparently minimal to zero customization.</p><p>Borrowing from Eugene’s post again:</p><blockquote>Now imagine that level of hyper-efficient interest matching applied to other opportunities and markets. Personalized TV of the future? Check. Education? Shopping? Job marketplace? What about personalized reading, from books to newsletters to blogs? Music? Podcasts? Yes, yes, yes, please.</blockquote><p>Microsoft’s interest seems to make a lot more sense now.</p><h3>Microsoft is saying as much:</h3><p>The <a href="https://blogs.microsoft.com/blog/2020/08/02/microsoft-to-continue-discussions-on-potential-tiktok-purchase-in-the-united-states/">Microsoft Blog Post</a> commenting on the TikTok acquisition discussion is only eight paragraphs long.</p><p>Here is the gist of what it says:</p><blockquote>[Microsoft] is committed to acquiring TikTok subject to a complete security review.</blockquote><p><strong>Translation</strong>: We’ll have an in-depth and detailed look at the code that ByteDance created for TikTok.</p><blockquote>[Microsoft] would build on the experience TikTok users currently love.</blockquote><p><strong>Translation</strong>: We’ll need the code to make sure that the users are still happy and have at least the same experience they have today.</p><blockquote>Microsoft would ensure that all private data of TikTok’s American users is transferred to and remains in the United States.</blockquote><p><strong>Translation</strong>: Since the data will not leave the US, the algorithm will also have to run on our servers in the US.</p><blockquote>Microsoft would ensure that this data is deleted from servers outside the country after it is transferred.</blockquote><p><strong>Translation</strong>: There is no way that the algorithm that creates the recommendations for users will run anywhere else but on our servers in the US (where the data is). That’s the only option.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hmWWppNkRaphqrNA" /><figcaption>Matching the puzzle pieces — Shutterstock — By Pasuwan</figcaption></figure><h3>Microsoft is cleverly using a once in a lifetime opportunity:</h3><p>Microsoft is still very invested in the consumer space. They have big plans in online gaming with the <a href="https://www.xbox.com/en-SG/xbox-game-streaming/project-xcloud">xCloud initiative</a>.</p><p>Microsoft owns <a href="https://www.linkedin.com/">LinkedIn</a> too. How powerful would LinkedIn become if powered by the ByteDance/TikTok algorithm?</p><p>Donald Trump’s executive order has created a very particular set of circumstances that are unlikely to happen again anytime soon.</p><p>If you were Microsoft and had the opportunity to purchase the source code for Google Search Engine 25 years ago, would you have passed on that?</p><p>Microsoft’s acquisition of TikTok is not a done deal yet, but I’m betting that any agreement will include the TikTok algorithm.</p><p><em>Thanks to </em><a href="https://www.eugenewei.com/info"><em>Eugene Wei</em></a><em>: his article </em><a href="https://www.eugenewei.com/blog/2020/8/3/tiktok-and-the-sorting-hat"><em>TikTok and the Sorting Hat</em></a><em>, is one of the primary sources for this post and a well-informed piece if you want to know more about the TikTok and ByteDance story.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=224b6ec9486a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/swlh/why-would-microsoft-pay-40b-usd-for-tiktok-224b6ec9486a">Why Would Microsoft Pay 40B USD for TikTok?</a> was originally published in <a href="https://medium.com/swlh">The Startup</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[5 reasons why you need explainable AI]]></title>
            <link>https://medium.com/antlerglobal/5-reasons-why-you-need-explainable-ai-929a64ae66ff?source=rss-ee72b36cc992------2</link>
            <guid isPermaLink="false">https://medium.com/p/929a64ae66ff</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[antler-network]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Franck Boullier]]></dc:creator>
            <pubDate>Mon, 03 Aug 2020 07:54:28 GMT</pubDate>
            <atom:updated>2020-08-03T07:54:28.838Z</atom:updated>
            <content:encoded><![CDATA[<p>The scariest thing about Artificial Intelligence is that we never know who the teacher is!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*osxO1Ys17naWTt6q6kSksw.png" /><figcaption>Source Shutterstock — k_yu</figcaption></figure><h3>You can’t ignore Artificial Intelligence:</h3><p>If you’re working on a Tech Startup, AI and Machine Learning are likely parts of your roadmap (and if it’s not, then it should be).</p><p>Artificial Intelligence (AI) is all around us. AI is there when you search for something on the Internet. AI helps us filter spam emails. AI enables Siri or Alexa to understand what we ask.</p><p>AI exists to help us answer questions, and with the answers, we hope that we can make better decisions.</p><p>It sounds good.</p><p>But then why are people like Elon Musk, Bill Gates, or the late Stephen Hawking so worried about AI?</p><p>That’s because there is a genuine risk that we will create some AIs that we won’t understand or, worse, control (hello <a href="https://en.wikipedia.org/wiki/Skynet_(Terminator)">Skynet</a>!).</p><p>AI Explainability is a set of mechanisms that we can use to make sure that a human can understand why a machine has made a specific decision.</p><p>Below are my five reasons why you should always try to build an <a href="https://en.wikipedia.org/wiki/Explainable_artificial_intelligence">Explainable AI</a> whenever you need Artificial Intelligence.</p><h3>Reason 1 — AI will sometimes be wrong:</h3><p>A few years back, it was autocorrect, sometimes embarrassing, sometimes fun, but with limited consequences apart from the awkward moment.</p><p>There is an endless stream of stories about AI failure because of bias, incomplete data, or incorrect models:</p><ul><li>Amazon <a href="https://becominghuman.ai/amazons-sexist-ai-recruiting-tool-how-did-it-go-so-wrong-e3d14816d98e">shut down an AI engine built to facilitate the recruitment</a>: it assumed that male candidates were automatically better.</li><li>Rekognition, a facial recognition software, <a href="https://onezero.medium.com/how-a-2018-research-paper-led-to-amazon-and-ibm-curbing-their-facial-recognition-programs-db9d6cb8a420">matched 28 U.S. Congresspeople to mugshots of convicted criminals</a>.</li><li>Microsoft had to shut down its <a href="https://en.wikipedia.org/wiki/Tay_(bot)">Tay twitter chatbot</a> after only 16 hours because the AI learned to reply with racists and sexually charged comments.</li><li>IBM’s “Watson for Oncology” <a href="https://www.beckershospitalreview.com/artificial-intelligence/ibm-s-watson-recommended-unsafe-and-incorrect-cancer-treatments-stat-report-finds.html">was accused of recommending unsafe treatments</a>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*HzCbKguWAyejFPOR" /><figcaption>Be mindful of AI potential errors — Source — Shutterstock — Andrew Rybalko</figcaption></figure><h3>Reason 2 — How do we know that this is the “right” answer?</h3><p>Some questions have simple answers. We can probably all agree that (in most cases) “2” is the correct answer to the question “1+1=?”.</p><p>But, as the questions get more complicated, things get trickier.</p><p>Even a question like “Is this a cat?”, which seems simple enough, is not that easy to answer.</p><p>The first thing is to agree on the definition of “a cat”: do we consider that a tiger or a lion is a cat or not? And there are many more steps involved after that.</p><p>If the question becomes sophisticated enough, having a universally accepted definition of the “right answer” can get tricky.</p><p>Consider these questions:</p><ul><li>A vs. B: who’s right?</li><li>Will you like this?</li><li>What is happiness?</li></ul><p>There are many questions where there is no clear “right” answer.</p><p>Remember that humans can’t even agree between themselves on the benefits of vaccines, the reality of global warming, or whether the earth is round or not.</p><p>How can they trust that an AIs will be a better solution to get the right answer?</p><h3>Reason 3 — The Teacher has an enormous influence on the AI:</h3><p>All AIs start as little kids first, and they need to learn before they can give the “right” answer (This is a cat, yes/no).</p><p>They learn how to get the right answer from ingesting a lot of data and using Machine Learning algorithms. Then they compare their own response with what the teacher has decided is the “right” answer.</p><p>If the AI gets the answer wrong, it tries again using a different method.</p><p>When enough answers made by the machine match the “right” answers defined by the teacher, we consider that the AI has learned its lesson.</p><p>Class is over, the AI has graduated, and we release it in the wild. The AI will use its newly acquired intelligence to answer the question (Is this a cat?).</p><p>If we expect a machine to get the right answer, we need to properly teach the machine about the “right” and the “wrong” answers.</p><p>With AI today, we never know who the teacher is or what bias the teacher may have introduced in the algorithm or in the data used to teach the machine.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/561/0*6ElzfR1kMXwSnSOM" /><figcaption>Screen capture from Youtube: This is one of the scientists that created <a href="https://youtu.be/E8Ox6H64yu8">Sofia</a>, the first AI that was granted citizenship by the Saudi Arabian government.</figcaption></figure><h3>Reason 4 — AIs are getting better and better:</h3><p>It is a commonly accepted belief in the AI community that, at one point, AI will become more “intelligent” than humans:</p><p>You can think of intelligence as a railway line.</p><p>AI improvement is like a train moving on that line.</p><p>There are many different AIs and each specific Artificial Intelligence is a passenger on that train.</p><p>As the train moves past the different stations on the intelligence line, more AIs are getting out of the train, and more AIs start doing their job (answering questions) in the real world.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/645/0*NhLmtMQOaCz9Hmbl" /><figcaption><em>If you want to know more about the different types of AI and better understand the Artificial Intelligence revolution, read the excellent </em><a href="https://waitbutwhy.com/2015/01/artificial-intelligence-revolution-1.html"><em>Wait But Why post</em></a><em>.</em></figcaption></figure><p>First, we saw <strong>Artificial Narrow Intelligences (ANI) </strong>getting off the train. They focus on one single narrow task: filter spam emails, find the cat in that picture, drive a car.</p><p>Next, we will see <strong>Artificial General Intelligences (AGI)</strong>. The train station where these AIs will “disembark” is the Human Brain’s Capacity station.</p><p>By definition, we human beings cannot move past the “Human Brain’s Capacity” train station on the intelligence railway line. It is the end of the intelligence line for all of us.</p><p>It is different for machines and AIs: they can stay on the intelligence train after that station. These AIs are called <strong>Artificial Super Intelligence (ASI)</strong>.</p><p>By definition, ASIs will be more capable than any human on the “intelligence” front.</p><p>At one point, ASIs will get off the Intelligence train and start answering questions in the real world.</p><p>We want AIs to find the best way to get to “the right answer”.</p><p>There is no reason for an AI to stop trying and learn new ways to get to that “right answer”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*g3MBN5pQrARyau2a" /><figcaption>Source: Shutterstock — Alphaspirit</figcaption></figure><h3>Reason 5 — We all need to trust the process:</h3><p>The AI behind Google Translate <a href="https://www.weforum.org/agenda/2017/02/googles-ai-translation-tool-seems-to-have-invented-its-own-language/">made up its own new language long ago</a>.</p><p>That new language serves a narrow purpose (translate stuff) with maximum efficiency. Still, it’s a language that is “not readable or usable for humans”.</p><p>It’s OK because many people can easily and quickly check the translation and decide if it’s good enough.</p><p>But when the question becomes complex (What is happiness? You will like this?), it is impossible to to find a consensus on a “universally right” or “universally wrong” answer.</p><p>We have to fall back on the next best thing: we need to trust and agree with the decision making process.</p><p>We need to understand the key factors, variables, and the general process that influenced the AI if we want to trust the answer to the question we asked.</p><p>We need to have some understanding of how the AI has reached THIS conclusion.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*binc4HyYYLG846YN" /><figcaption>Source: Shutterstock — Andrey Popov</figcaption></figure><h3>Never forget the importance of the “Why”:</h3><p>Every management guru will tell you that people will trust you more if you can explain WHY you do something.</p><p>It should be the same for AIs:</p><ul><li>AIs are becoming more and more pervasive.</li><li>The questions we ask AIs are becoming more and more complex.</li><li>The line between “right” and “wrong” is becoming harder to establish.</li></ul><p>But most AIs today are still big black boxes.</p><p>We do not understand how an AI “connects the dots” and decides that its answer is the “right” answer to the question we asked.</p><p>It has to change.</p><p>AI Explainability is the key to having AIs we can trust.</p><p>With AI explainability, we can:</p><ul><li>Trust that an AI is giving us the “right” answer.</li><li>Identify and flag the “wrong” answers that AIs WILL give you from time to time.</li><li>Understand the training bias and pitfalls of your AI training models.</li><li>Build more advanced AIs that are capable of giving us the best possible answers.</li><li>Make sure that everybody trusts the process.</li></ul><p>The good news is that AI explainability is gaining traction: Google launched its <a href="https://cloud.google.com/explainable-ai">Explainable AI suite of tools</a> in November 2019. I expect that the other major players in the field will follow suit.</p><p>I believe that companies that use explainable AI will gain a significant competitive advantage soon.</p><p>What do you think?</p><p>Are you using Machine Learning algorithms and AI in your startup?</p><p>Have you considered explainable AIs already?</p><p>I’m Franck Boullier, serial entrepreneur, startup advisor (including <a href="https://medium.com/u/34b972c7a2f9">Antler Team</a>), database architect, developer, PropTech enthusiast, and generally curious about what’s going to happen next. You can reach me on <a href="https://www.linkedin.com/in/franck-boullier-136798/">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=929a64ae66ff" width="1" height="1" alt=""><hr><p><a href="https://medium.com/antlerglobal/5-reasons-why-you-need-explainable-ai-929a64ae66ff">5 reasons why you need explainable AI</a> was originally published in <a href="https://medium.com/antlerglobal">Antler</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I’ve slashed the cost of my DEV environments by 90%]]></title>
            <link>https://itnext.io/how-ive-slashed-the-cost-of-my-dev-environments-by-90-9c1082ad1baf?source=rss-ee72b36cc992------2</link>
            <guid isPermaLink="false">https://medium.com/p/9c1082ad1baf</guid>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <dc:creator><![CDATA[Franck Boullier]]></dc:creator>
            <pubDate>Mon, 20 Jul 2020 08:41:54 GMT</pubDate>
            <atom:updated>2023-12-23T06:05:28.941Z</atom:updated>
            <content:encoded><![CDATA[<h4>A tutorial to create replicable development machines</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lhnMJsxNqhdEkKZBMljFrw.png" /><figcaption>Coding in the Cloud — Shutterstock</figcaption></figure><h3>The Problem:</h3><p>When you’re writing code, you need one or more machines to write and test that code.</p><p>These days, I usually code in Golang for back-end stuff, Node.js, and REACT for front end stuff. It’s easier to develop and test on a Linux machine, but my “day to day” machine runs on Windows.</p><p>Also, the code will eventually be deployed on Linux boxes or as a serverless app.</p><p>Last but not least, I’m not always behind the same computer.</p><ul><li>I have a laptop when I am out in the wild.</li><li>I have another computer in the office.</li><li>These past few months, I’ve been working from home, like a lot of people.</li></ul><h3>The Requirements:</h3><ul><li>I want to have a machine that I can use for writing and testing code.</li><li>The solution should be affordable (I don’t want to buy more hardware).</li><li>I want to use <a href="https://code.visualstudio.com/">Visual Studio Code</a> (my favorite editor) and use all the extensions and components I need.</li><li>I need to be able to be up and running in less than 5 minutes.</li></ul><h3>The Idea:</h3><ul><li>Do NOT rely on my local machine for coding.</li><li>Provision a standard, clean, and pre-configured VM in the cloud each time I need to do some coding.</li><li>Destroy the machine once I’m finished coding, so I don’t pay for resources I don’t need.</li></ul><h3>What exists today (not good enough):</h3><h4>AWS Cloud 9:</h4><p>AWS Cloud 9 is an excellent solution, BUT it can’t run Visual Studio code. It can also be a bit pricey too.</p><h4>SSH extension in Visual Studio Code:</h4><ul><li>You still need to connect to a host machine.</li><li>You can’t use most of the debug tools and components unless you implement some weird/complex configuration.</li></ul><h3>The Solution:</h3><p>I use a Google Cloud Compute Engine instance (a virtual machine) running Ubuntu 22–04 LTS as my DEV server.</p><p>I recommend that you use <a href="https://cloud.google.com/compute/docs/instances/preemptible">Compute Engine preemptible instances</a>:</p><ul><li>They are much cheaper than standard VM (up to 80% less expensive than regular instances).<br>An `<strong>n1-standard-1</strong>` machine, that typically costs 24.27$/month will only cost 7.30$/month as a preemptible machine.</li><li>And since nothing is stored permanently on these machines, it’s OK to disappear after a while.</li></ul><p>I use Google Chrome Remote Access to interact with the DEV server.</p><p>I use a code repository (Github):</p><ul><li>to host the scripts to configure the DEV server. That way, I can have a standard environment each time I need a DEV server.</li><li>to host and manage the code that I create and test on that machine.</li></ul><p>Here are the step by step instructions on how I’m doing this.</p><h3>Pre-requisites:</h3><h4>What you need to have:</h4><ul><li>A Google Cloud Platform account.</li><li>The permission to create Compute Engines instances on your GCP project.</li><li>The Chrome browser installed on your local machine.</li></ul><h4>Connect to your GCP console:</h4><p>Log in to your <a href="https://console.cloud.google.com/">Google Cloud Console</a>.</p><p>Open the Google Cloud Shell terminal: Click on the icon on the top right of your main GCP console page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/117/1*cg-DDHrIc1U_-1AlTLxSag.png" /><figcaption>The button to open Google Cloud Shell</figcaption></figure><p>The cloud shell console opens:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7sXe8dOWJkcinzWEOdEqmg.png" /><figcaption>Google Console with an opened Cloud Shell session</figcaption></figure><h4>Prepare Several Variables:</h4><p>Update all the variables in bracket like that &lt;this-is-a-variable-that-you-should-replace&gt;.</p><pre>PROJECT=&lt;name-of-your-gcp-project&gt;<br>MACHINE_NAME=&lt;a-name-for-your-dev-machine&gt;<br>REGION=&lt;your-gcp-region&gt;<br>ZONE=&lt;a-zone-in-the-gcp-region&gt;<br>STARTUP_SCRIPT=startup.sh<br>MACHINE_TYPE=n1-standard-2<br>UBUNTU_IMAGE=ubuntu-2204-jammy-v20230919<br>IMAGE_PROJECT=ubuntu-os-cloud<br>DISK_SIZE=&lt;the-size-of-the-disk-on-your-machine&gt;</pre><p>Example:</p><pre>PROJECT=tutorial-project-296007<br>MACHINE_NAME=dev-full-stack<br>REGION=asia-southeast1<br>ZONE=asia-southeast1-a<br>STARTUP_SCRIPT=startup.sh<br>MACHINE_TYPE=n1-standard-2<br>UBUNTU_IMAGE=ubuntu-2204-jammy-v20230919<br>IMAGE_PROJECT=ubuntu-os-cloud<br>DISK_SIZE=200GB</pre><h4>Set Project to the correct project:</h4><ul><li>Set Project to the correct project</li><li>Authorize Cloud shell to interact with the project:</li></ul><pre>gcloud config set project $PROJECT</pre><p>We are using the project defined in the variable PROJECT earlier.</p><h4>Reserve a static IP address for that machine:</h4><p>To facilitate connection to and from that DEV machine, we will create a specific IP address that we will attach to that VM.</p><p>It is not absolutely necessary, but having a persistent IP address for your dev machine can be useful.</p><p>Before you run that command, you can edit the values I have highlighted in <strong>bold</strong> and replace these with the values that would work for you.Copy and paste the below code in the GCP Cloud Shell to reserve the IP address:</p><pre>gcloud compute addresses create ${MACHINE_NAME}<strong>-ip</strong> \<br> — project=${PROJECT}\<br> — network-tier=<strong>STANDARD</strong> \<br> — region=${REGION}</pre><p>Let’s break this command down:</p><pre>gcloud compute addresses create ${MACHINE_NAME}<strong>-ip</strong></pre><p>We are creating an IP address named `${MACHINE_NAME}<strong>-ip</strong>`</p><p>This will use the value that you have chosen in the variable MACHINE_NAME earlier. <br>In our example, the IP address will have the name dev-full-stack-ip</p><pre>— project=${PROJECT}</pre><p>We are creating this IP address in the project defined in the variable PROJECT earlier.</p><p>In our example, the project we will use will be tutorial-project-296007</p><ul><li>The project MUST exist.</li><li>If you don’t specify that, the IP address is created in the current project.</li></ul><p><em>See the </em><a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects"><em>Google doc on how to create a project</em></a><em> for more details.</em></p><pre>— region ${REGION}</pre><p>This will use the value that you have chosen in the variable REGION earlier.</p><p>In our example, the region will be asia-southeast1.</p><ul><li>Pick a zone that is close to you.</li><li>You can see the list of available zones on the <a href="https://cloud.google.com/compute/docs/regions-zones#available">Google list of regions and zones</a>.</li></ul><pre> — ip-version IPV4</pre><p>It is an IP v4 address.</p><p><em>You can see a detailed explanation of the different options for reserved IP addresses on the </em><a href="https://cloud.google.com/sdk/gcloud/reference/compute/addresses/create"><em>Google documentation for gcloud compute addresses create</em></a>.</p><h4>Create Firewall rules to access the VM:</h4><p>It’s nice to have the http and https port open on the DEV machine if you need to do some tests on your code.</p><p>The Rule to allow http accesses:</p><pre>gcloud compute firewall-rules create <strong>allow-http</strong> \<br> — project=${PROJECT}\<br> — direction=INGRESS \<br> — network=default \<br> — action=ALLOW \<br> — rules=tcp:80 \<br> — source-ranges=<strong>0.0.0.0/0</strong> \<br> — target-tags=<strong>http-server</strong></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/966/1*FjLe3qONL4KOWqWqPFnC4w.png" /><figcaption>Screenshot of the Google Cloud Shell — Create the http firewall rule</figcaption></figure><p>Let’s break this command down too:</p><pre>gcloud compute firewall-rules create <strong>allow-http</strong></pre><p>We are creating a firewall rule named `<strong>allow-http</strong>`.</p><pre>— project=${PROJECT}</pre><p>We are creating this rule in the project defined in the variable PROJECT earlier. If you don’t specify that, the rule is created in the current project. The project MUST exist.</p><p><em>See the </em><a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects"><em>Google doc on how to create a project</em></a><em> for more details</em>.</p><pre> — direction=INGRESS </pre><p>This rule applies to the incoming traffic.</p><pre> — network=<strong>default</strong> </pre><p>This is a rule for the `<strong>default</strong>` VPC for this project.</p><pre> — action=ALLOW </pre><p>This is a rule to ALLOW access (as opposed to DENY).</p><pre> — rules=tcp:<strong>80</strong> </pre><p>The rule itself is about the TCP port 80 (the standard port for the http protocol).</p><pre> — source-ranges=<strong>0.0.0.0/0</strong> </pre><p>Any machine on the internet can have access.</p><pre> — target-tags=<strong>http-server</strong></pre><p>If a resource in the project has the tag `<strong>http-server</strong>`, this rule will be applied.</p><p><em>You can see a detailed explanation of the different options on the </em><a href="https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/create"><em>Google documentation for gcloud compute firewall-rules create</em></a><em>.</em></p><p>We also want to allow access from secure http connections. The Chrome Remote Desktop we use to connect to the machine needs port 443 open.</p><pre>gcloud compute firewall-rules create <strong>allow-https</strong> \<br> — project=${PROJECT} \<br> — direction=INGRESS \<br> — network=default \<br> — action=ALLOW \<br> — rules=tcp:443 \<br> — source-ranges=<strong>0.0.0.0/0 </strong>\<br> — target-tags=<strong>https-server</strong></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/957/1*TUC4WBa29Nu1NTwtCUrg5Q.png" /><figcaption>Screenshot of the Google Cloud Shell — Create the https firewall rule</figcaption></figure><h3>The short version — Create and access the DEV Server:</h3><p>All the previous steps are only needed once.</p><p>This the short version of the steps to create and access the DEV machine each time you need to do some coding.</p><h4>Create a new DEV machine:</h4><p><em>If you want more details about this step, read the paragraph “The extended version — Create the DEV Server” in this article.</em></p><p>Log in to your <a href="https://console.cloud.google.com/">Google Cloud Console</a> and open the Google Cloud Shell terminal.</p><p>Copy the script you need. You can use my script if you don’t have one: it’s available on Github (legal disclaimer: use at your own risks!).</p><pre>git clone <a href="https://github.com/franck-boullier/utils.git">https://github.com/franck-boullier/utils.git</a></pre><p>and move to the folder where the script is.</p><pre>cd ~/utils/installation</pre><p>Find the reserved IP address that you have created for that VM and store it in a variable.</p><pre><strong>IP_ADDRESS_DEV_MACHINE</strong>=$(gcloud compute addresses list \<br>  --filter=&quot;name:${MACHINE_NAME}-ip AND region:${REGION}&quot; \<br>  --format=&quot;value(address_range())&quot;<br>)</pre><p>The command to create the Virtual Machine:</p><pre>gcloud compute instances create ${MACHINE_NAME} \<br>  --project=${PROJECT} \<br>  --zone=${ZONE} \<br>  --machine-type=${MACHINE_TYPE} \<br>  --preemptible \<br>  --image=${UBUNTU_IMAGE} \<br>  --image-project=${IMAGE_PROJECT} \<br>  --boot-disk-size=${DISK_SIZE} \<br>  --boot-disk-type=pd-standard \<br>  --boot-disk-device-name=${MACHINE_NAME} \<br>  --metadata-from-file startup-script=${STARTUP_SCRIPT} \<br>  --network-tier=STANDARD \<br>  --address=$IP_ADDRESS_DEV_MACHINE \<br>  --subnet=default \<br>  --tags=http-server,https-server</pre><p>You can connect to your newly created DEV machine with SSH on your browser from <a href="https://console.cloud.google.com/compute/instances">the list of your VM instances</a> (make sure you select the correct project).</p><p>Add your user account to the chrome-remote-desktop Linux group on your remote machine.</p><pre>sudo usermod -a -G chrome-remote-desktop $USER</pre><p>and log out</p><pre>logout</pre><h4>To connect to your remote machine:</h4><p><em>If you want more details on how to do this, go to the paragraph “Connect to the remote DEV server” in this post.</em></p><p>Go to the <a href="https://remotedesktop.google.com/headless">Chrome Remote Desktop page to set up access to a new machine</a> and follow the instructions to get the code that you need to allow access to your remote VM.</p><p>Copy the Access code to the remote to your remote VM with the SSH web connection, run that code and provide a six digits PIN where prompted.</p><p>Access the remote VM with <a href="https://remotedesktop.google.com/access">Google Chrome Remote Desktop</a>.</p><p>Start coding!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zhnwNUGJJgHYcQoI7phZ_w.png" /><figcaption>Connected to the Dev Machine — Visual Studio Code is open and working</figcaption></figure><h3>When you’re done — delete the Virtual Machine:</h3><p>After you’ve done working on your code, commit and push to your favorite code repository.</p><p>And delete that DEV machine:</p><p>Log in to your <a href="https://console.cloud.google.com/">Google Cloud Console</a>, and open the Google Cloud Shell terminal.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7sXe8dOWJkcinzWEOdEqmg.png" /><figcaption>Google Console with an opened Cloud Shell session</figcaption></figure><p>The command to delete the machine is:</p><pre>gcloud compute instances delete ${MACHINE_NAME} \<br> — zone=${ZONE}</pre><p>And the result is:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*DUAxvS3kP6LU9jPOMA3BPg.png" /><figcaption>Delete your Development machine once you’re done.</figcaption></figure><h3>The next time you need a DEV environment:</h3><p>Create a new DEV server again.</p><p>Connect to that DEV server using the <a href="https://remotedesktop.google.com/">Chrome Remote Desktop web site</a>.</p><h3>The extended version — Create the DEV Server:</h3><p>This is a more detailed explanation of the previous “short version”.</p><p>The result is the same, but this will help you understand how it works with more details.</p><p>Log in to your <a href="https://console.cloud.google.com/">Google Cloud Console</a> and open the Google Cloud Shell terminal.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7sXe8dOWJkcinzWEOdEqmg.png" /><figcaption>Google Console with an opened Cloud Shell session</figcaption></figure><h4>Get the IP address that you’ve reserved:</h4><p>Verify that you have reserved a fixed IP address that you can use.</p><pre>gcloud compute addresses describe ${MACHINE_NAME}<strong>-ip</strong> \<br> — region=${REGION}</pre><p>The output should be something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/979/1*3DNAqkFH2g9LAWiyBKB-Vw.png" /><figcaption>The details about the reserved IP address for your DEV machine</figcaption></figure><p>We will copy that newly reserved IP address into a local variable `<strong>IP_ADDRESS_DEV_MACHINE</strong>`; this makes the next steps simpler.</p><pre><strong>IP_ADDRESS_DEV_MACHINE</strong>=$(gcloud compute addresses list \<br> — filter=”name:${MACHINE_NAME}-ip AND region:${REGION}&quot; \<br> — format=”value(address_range())”<br> )</pre><p>Check that all went as expected.</p><pre>echo $<strong>IP_ADDRESS_DEV_MACHINE</strong></pre><p>The output should be something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/847/1*A7VbofoZuCco_3L9XEH-Bw.png" /><figcaption>Verify that the IP address is exported in a local variable</figcaption></figure><h4>Get the script to prepare the machine:</h4><p>You can use my script if you don’t have one: it’s available on Github (legal disclaimer: use at your own risks!).</p><pre>git clone <a href="https://github.com/franck-boullier/utils.git">https://github.com/franck-boullier/utils.git</a></pre><p>The script we’ll use for this tutorial installs the following things on the Virtual Machine:</p><ul><li>Xcfe: so you can have a familiar GUI when you log in to the VM.</li><li>Chrome Remote Desktop to access the VM from your computer.</li><li>Firefox: to test the code you’re about to build.</li><li>Chrome: to test the code you’re about to build.</li><li>The Google Cloud SDK so you can interact with the Google Cloud Platform if you need to.</li><li>The AWS CLI so you can interact with the AWS services and resources if you need to.</li><li>Visual Studio Code.</li><li>wget: a useful utility</li><li>python3</li><li>jq: a utility to manipulate JSON objects.</li><li>npm, NodeJS, and yarn: utilities you need to develop with Node JS.</li><li>Flutter: a framework to develop versatile front-ends.</li></ul><h4>Create the New VM machine:</h4><p>Before you run the below command, you can edit the values I have highlighted in <strong>bold</strong> and replace these with the values that would work for you.</p><p>Move to the directory where the installation script has been downloaded.</p><pre>cd ~/utils/installation</pre><p>Create the Virtual Machine:</p><pre>gcloud compute instances create ${MACHINE_NAME} \<br> --project=${PROJECT} \<br> --zone=${ZONE} \<br> --machine-type=${MACHINE_TYPE} \<br> --preemptible \<br> --image=${UBUNTU_IMAGE} \<br> --image-project=${IMAGE_PROJECT} \<br> --boot-disk-size=${DISK_SIZE} \<br> --boot-disk-type=pd-standard \<br> --boot-disk-device-name=${MACHINE_NAME} \<br> --metadata-from-file startup-script=${STARTUP_SCRIPT} \<br> --network-tier=STANDARD \<br> --address=$IP_ADDRESS_DEV_MACHINE \<br> --subnet=default \<br> --tags=http-server,https-server</pre><p>Let’s break this command down:</p><pre>gcloud compute instances create ${MACHINE_NAME}</pre><p>We are creating an instance named using the value that you have placed in the variable MACHINE_NAME</p><pre>— project=${PROJECT}</pre><p>We are creating this rule in the project defined in the variable PROJECT</p><p>The project MUST exist.</p><p>If you don’t specify that, the instance is created in the current project.</p><p><em>See the </em><a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects"><em>Google doc on how to create a project</em></a><em> for more details</em>.</p><pre>— zone=${ZONE}</pre><p>We will deploy the instance in the zone defined in the variable ZONE.</p><p>Make sure that this zone is in the SAME REGION as the region you created the IP address in.</p><pre>— machine-type=${MACHINE_TYPE}</pre><p>The machine is the type defined in the variable MACHINE_TYPE</p><p>You can see the list of possible machines that you can build on the <a href="https://cloud.google.com/compute/docs/machine-types">Google list of possible machine types</a>.</p><pre> — preemptible</pre><p>We’re optimizing for cost. It’s not a problem Google preempts the instance.<br>We’re just going to re-create a new one if that happens.</p><p><em>See the </em><a href="https://cloud.google.com/compute/docs/instances/preemptible"><em>Google doc on preemptible VMs</em></a><em> for more information</em>.</p><pre> — image=${UBUNTU_IMAGE} \<strong><br></strong> — image-project=<strong>ubuntu-os-cloud</strong></pre><p>We’re using the Image defined in the variable UBUNTU_IMAGE from the `<strong>ubuntu-os-cloud</strong>` project.</p><p>Make sure this is a LTS (Long Term Stable) image to minimize issues.</p><p>You can see a list of available images and their associated projects by running the command</p><pre>gcloud compute images list</pre><p>on your GCP Cloud shell.</p><pre> — boot-disk-size=${DISK_SIZE} \<br> — boot-disk-type=<strong>pd-standard</strong> \<br> — boot-disk-device-name=${MACHINE_NAME} \</pre><p>The boot disk is a `<strong>pd-standard</strong>` disk that is using the varialbe DISK_SIZE and will have the same name as the name of the machine.</p><pre> — metadata-from-file startup-script=${STARTUP_SCRIPT}</pre><p>This is the script that will run as part of the installation procedure.</p><p>When a startup script is present, Compute Engine does the following:</p><ul><li>Copies the startup script to a local file in the instance.</li><li>Sets run permissions on the file.</li><li>Runs the file.</li></ul><pre> — network-tier=<strong>STANDARD</strong> </pre><p>We do not need super fast network performance, and we are optimizing for cost here.</p><p>We will use the `<strong>STANDARD</strong>` network tier instead of the `<strong>PREMIUM</strong>` network tier.</p><p><em>See the </em><a href="https://cloud.google.com/network-tiers"><em>Google documentation on Network services tiers</em></a><em> for more information</em>.</p><pre> — address=<strong>$IP_ADDRESS_DEV_MACHINE</strong></pre><p>The IP address for the machine will be the reserved IP address that we have created in the previous step. Here we use the variable that we’ve set earlier instead of a hard coded value.</p><pre> — subnet=default </pre><p>We are using the default subnet for this project for this VM.</p><pre> — tags=<strong>http-server</strong>,<strong>https-server</strong> </pre><p>These are the two tags: `<strong>http-server</strong>` and `<strong>https-server</strong>` that we created when we created the firewall rules in the previous step.</p><p>We’ll use Google Chrome to access that machine so the VM should be accessible via the https protocols.</p><p>I<em>f you want to better understand all the available parameters, you can see a detailed explanation of all the additional options on the </em><a href="https://cloud.google.com/sdk/gcloud/reference/compute/instances/create"><em>Google documentation for gcloud compute instances create</em></a>.</p><p>The VM is ready for us.</p><p>We now need to configure Chrome Remote to access that machine.</p><h3>Setup Chrome Remote Desktop:</h3><p>This part of the tutorial is coming from the <a href="https://cloud.google.com/solutions/chrome-desktop-remote-on-compute-engine#configuring_and_starting_the_chrome_remote_desktop_service">Google documentation on How To Setup Chrome Remote</a>.</p><p>To start the remote desktop server, you need to have an authorization key for the Google account that you want to use to connect to it.</p><p>Go to the <a href="https://console.cloud.google.com/compute/instances">list of your VM instances</a>.</p><p>You should see the newly created VM:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Cg9iMstAgeFGxOLd1hrENA.png" /><figcaption>The list of your VM in that project — Our Instance has been created</figcaption></figure><p>Click on the SSH button to connect to your VM</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/76/1*TJWxMNN0MDabaKz6GmylBQ.png" /><figcaption>Access to an SSH connection in your web browser</figcaption></figure><p>You should see a new browser window opening.</p><p>It’ll look like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t839IK-5PBF3Y62nfd4ZZQ.png" /><figcaption>Connected to the DEV machine with SSH in the browser.</figcaption></figure><h3><strong>Make sure that the startup script is finished:</strong></h3><p>Make yourself a cup of coffee, this can take up to 15mn.</p><p>To verify if the startup script is still running, you can type</p><pre>sudo journalctl -f -o cat</pre><p>This will show you what is currently happening while the machine is configured by the startup.sh script.</p><h3><strong>Configure Chrome Remote:</strong></h3><p>Chrome remote allows you to access the machine with a better UX than the console.</p><p>This:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*j8V0FzYhEcasrezWOxYUrA.png" /></figure><p>Instead of THIS</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t839IK-5PBF3Y62nfd4ZZQ.png" /><figcaption>Connected to the DEV machine with SSH in the browser.</figcaption></figure><p>Add your user account to the chrome-remote-desktop Linux group.</p><pre>sudo usermod -a -G chrome-remote-desktop $USER</pre><p>and log out</p><pre>logout</pre><p>Using the Chrome browser on your local machine, go to the Chrome Remote Desktop setup page. You can <a href="https://remotedesktop.google.com/headless">access that page on this link</a>:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FIxxbH7NfqgrAHbYp36L_g.png" /><figcaption>Set up remote access — Step 1</figcaption></figure><p>Click on “Begin”</p><p>You should now see this page:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aSoCIzyt_v61bLPid2oyqQ.png" /><figcaption>Set up remote access — Step 2</figcaption></figure><p>Click <strong>Next</strong>: there is no need to download or install anything anymore; this has already been done by the script that we specified when we created the VM.</p><p>The next page should be this one:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2FzM9AySlvd_0TJzVDPcvQ.png" /><figcaption>Set up remote access — Step 3</figcaption></figure><p>We use the Debian Linux command (the third block of code) to set up and start the Chrome Remote Desktop service on the VM (remote) instance.</p><p>To link the remote VM and your Google Account, use the authorization code.</p><p>Copy the command</p><p>Reconnect to your instance (the DEV machine) by clicking the <strong>SSH</strong> button again.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Cg9iMstAgeFGxOLd1hrENA.png" /><figcaption>The list of your VM in that project — re-connect to your Instance</figcaption></figure><p>Copy the command to the SSH window that’s connected to your instance, and then run the command.</p><pre>                     <strong>EXAMPLE — DO NOT USE</strong><br>DISPLAY= /opt/google/chrome-remote-desktop/start-host \<br> — code=”4/xxxxxxxxxxxxxxxxxxxxxxxx” \<br> — redirect-url=”https://remotedesktop.google.com/_/oauthredirect&quot; \<br> — name=</pre><p>Make sure to use the code that you’ve copied. Do NOT use the above example.</p><p>Copy the code on the SSH window that just opened:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t839IK-5PBF3Y62nfd4ZZQ.png" /><figcaption>This is where you need to copy the Google Remote Access code</figcaption></figure><p>Do NOT copy that code on the Google Cloud Shell.</p><p>Run the command (click enter).</p><p>You’re prompted to enter a six digits PIN.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*EtFGCMZABAkuKr-Qb-QqYg.png" /><figcaption>Enter a six digits PIN for the instance</figcaption></figure><p>Enter a six digits PIN as requested and confirm it.</p><h4>Troubleshooting 1:</h4><p>When you try to configure the remote connection on the remote VM, if you have an error like</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/650/0*wNB5lF4z9ZUv2hct" /><figcaption>error — chrome remote is not installed</figcaption></figure><p>It’s likely because the installation script is still running.</p><p>Wait for one minute and try again.</p><p>Troubleshooting 2:</p><p>If you receive an error message like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/817/0*uJwrHH4PHggddn4a" /><figcaption>Error message — OAuth error</figcaption></figure><p>The code has likely expired. The code is only valid for a few minutes.</p><p>Click on the Start Over button on the Chrome Remote Desktop setup page and try again.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/211/0*r3leO8Spu1Z6FLC_" /></figure><h3>Connect to the remote DEV server:</h3><p>On your local computer, open Google Chrome and go to the <a href="https://remotedesktop.google.com/">Chrome Remote Desktop web site</a>.</p><p>You should see your remote machine there:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xEyI2qlQ1XCU5HHj" /><figcaption>Chrome Remote Desktop — the machine is accessible</figcaption></figure><p>Click the name of the remote desktop instance.</p><p>When you’re prompted, enter the PIN that you created earlier, and then click the arrow button to connect.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/599/0*_K3ln31H3XJKI8kc" /><figcaption>Enter your PIN to connect to the remote instance</figcaption></figure><p>You’re connected!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*O6nbaICl34IiI9y5" /></figure><h4>Troubleshooting 3:</h4><p>If you see a screen like this when you try to connect to the remote machine:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*VTbXxjkaNtkjhZJZ" /><figcaption>Error when trying to connect to the remote machins</figcaption></figure><p>It’s likely that the installation script is not done yet.</p><p>Click OK.</p><p>Wait one minute and try again.</p><h4>If you had no issues to connect:</h4><p>Accept the default settings</p><p>Go to Application &gt;&gt; Development &gt;&gt; Visual Studio Code</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/566/0*w-Mz0jAOgX29rf_X" /></figure><p>Happy Coding!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*SvmqJios5lO94gzH" /><figcaption>Connected to the Dev Machine — Visual Studio Code is open and working</figcaption></figure><h3>That’s it!</h3><p>In this article, you’ve seen how to create an affordable, standard, and temporary DEV environment hosted in the cloud.</p><p>That environment has the tools you need to code, including Visual Studio Code.</p><p>We’ve also seen how to access this environment from Google Chrome Remote Desktop.</p><p>For this tutorial, I’ve use the Google Cloud Platform. You can use Amazon Web Services and EC2 instances instead if you’re more familiar with AWS.</p><p>And that’s how I reduced the costs of my DEV servers by about 90%: I use ad hoc instances only when I need them!</p><h3>Cleanup:</h3><p>It’s always good to know how to UNDO things…</p><h4>Delete the Reserved IP address:</h4><pre>gcloud compute addresses delete ${MACHINE_NAME}<strong>-ip</strong> \<br> — region=${REGION}</pre><h4>Delete the Firewall rules:</h4><pre>gcloud compute firewall-rules delete <strong>allow-http<br></strong>gcloud compute firewall-rules delete <strong>allow-https</strong></pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9c1082ad1baf" width="1" height="1" alt=""><hr><p><a href="https://itnext.io/how-ive-slashed-the-cost-of-my-dev-environments-by-90-9c1082ad1baf">How I’ve slashed the cost of my DEV environments by 90%</a> was originally published in <a href="https://itnext.io">ITNEXT</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The customer satisfaction equation]]></title>
            <link>https://medium.com/antlerglobal/the-customer-satisfaction-equation-7c448215341c?source=rss-ee72b36cc992------2</link>
            <guid isPermaLink="false">https://medium.com/p/7c448215341c</guid>
            <category><![CDATA[startup-lessons]]></category>
            <category><![CDATA[customer-satisfaction]]></category>
            <category><![CDATA[customer-success]]></category>
            <category><![CDATA[customer-service]]></category>
            <category><![CDATA[antler-network]]></category>
            <dc:creator><![CDATA[Franck Boullier]]></dc:creator>
            <pubDate>Mon, 13 Jul 2020 07:10:44 GMT</pubDate>
            <atom:updated>2020-07-13T10:58:27.199Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/744/1*bBo3GsjeOK3lTXCBfjijlA.png" /><figcaption>The Customer Satisfaction Equation</figcaption></figure><blockquote><em>What is customer satisfaction?</em></blockquote><p>It was a long time ago. I was in class, in an Amphi full of people. The professor had just called me out and asked that seemingly simple question.</p><p>He was an excellent teacher. But at that time though, the first lecture of the day, with about 60 pairs of eyes looking right at me and waiting for my answer, I did NOT like his methods…</p><p>I don’t exactly remember what I said back then. But now, after many years running operations and managing various types of businesses, I think I have a pretty solid answer.</p><h3>Customer satisfaction is relative:</h3><p>If you’re delivering a product or a service to your customer, that customer will judge you based on what he/she EXPECTED to receive.</p><p>Customer Sat is:</p><p>What you <strong>delivered</strong> to your customer</p><p><em>divided by</em></p><p>What you <strong>promised</strong> to your customer.</p><p>Let’s break this down:</p><ul><li>One is when what you’ve delivered is precisely equal to what you promised (good).</li><li>If the customer receives LESS than what he/she expected from you, then your customer satisfaction is below one. You’re not fulfilling your promise to your customers. They will be unhappy (bad).</li><li>If the customer receives MORE than what he/she expected from you, then your customer satisfaction is above one. Excellent? Not so fast… Read on…</li></ul><h3>If customer satisfaction is TOO high, you’re probably doing something wrong:</h3><p>If you are significantly above a “One” result on the Customer Sat equation, then you are delivering much more than what you promised. You’re leaving money on the table. You shouldn’t do that either.</p><p>Maybe your marketing and sales message should be changed.</p><p>Maybe you can work on explaining how good your product or service is so that people are willing to pay the right price for it.</p><h3>How to improve Customer Sat with minimal costs?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6HmzSPWbkWCVq3ry-6c8dA.png" /><figcaption>How Will Your Customer React?</figcaption></figure><p>A lot has been said and written on how you can improve your product or service. That’s the “what you <strong>deliver</strong> to your customer” part. I’m not going to talk about that here.</p><p>The Customer Sat equation helps you realize that you should also focus on the other side: “what you <strong>promised</strong> to your customer.”</p><p>You can usually find a few low hanging fruits on this side of the equation. Pick those out, and you WILL improve how your customers rate their experience.</p><h3>Manage your customer’s expectations:</h3><p>Big promises increase willingness to pay (you can sell at a higher price).</p><p>Big promises also make your life more difficult and can significantly increase your costs.</p><p>Are you a 5-star hotel or a backpacker hostel? Are you a food truck or a 3 Michelin stars restaurant?</p><p>Make sure that you’re crystal clear when you explain the experience that your customer shall expect from you.</p><h3>Everyone should be able to explain your promise to your customers:</h3><p>Not only your customers, anyone in your team needs to understand your promises and obligations to your customer.</p><p>In every organization I was involved with, even in the companies I created, some people were unclear about what we were supposed to deliver to our customers.</p><p>The fastest, cheapest, and most effective way to improve customer satisfaction is to fix these incorrect assumptions first. Marketing, sales, operations, finance, you’re all in it together!</p><p>Don’t assume that your people should know. Ask, check, train them to make sure they know!</p><p>If your people don’t know what your company is supposed to do, your customers will have a bad time.</p><h3>4 tricks to maximize Customer Satisfaction:</h3><h4>1- NEVER let your people write cheques your organization can’t cash:</h4><p>When I was (much) younger, I worked in sales for quite a while. When I had to deal with a customer complaint, I was taking the easy route.</p><blockquote><em>Yes Sir, we will take care of this today.</em></blockquote><p>And then I put a massive amount of pressure on my operation and support teams to make it happen.</p><p>They did not like me…</p><p>Then I moved to operations, and I genuinely hated this kind of person.</p><p>It is your responsibility, as a manager, to make sure that NO ONE “over-promises” in your organization.</p><blockquote><em>“I don’t know yet, let me check and get back to you within the next 2 hours.”</em></blockquote><p>That is a compelling answer which will most likely INCREASE your customer satisfaction score IF you get back to that customer within these 2 hours, and with accurate information.</p><h4>2- Always try to (slightly) under-promise and (slightly) over-deliver:</h4><p>People hate bad surprises and love good ones.</p><p>Imagine that you need to have the windshield on your car replaced. Which is the best scenario from a customer satisfaction perspective?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fOtd68IQtgUmpUe4TNpyDg.png" /><figcaption>Make Sure You Get the Right Answer</figcaption></figure><p><strong>Option 1</strong>: The person at the counter tells you that you’ll have to wait for two hours. One and a half-hour later, the floor supervisor comes back to you with the keys to your car and wishes you a good day.</p><p><strong>Option 2</strong>: The person at the counter tells you that you’ll have to wait for one hour. One and a half-hour later, the floor supervisor comes back to you with the keys to your car and wishes you a good day.</p><p>As a customer, which option would be most satisfying?</p><p>Think of it as a safety buffer too. <a href="https://en.wikipedia.org/wiki/Murphy%27s_law">Murphy</a> said it first. Sh.. WILL happen, and you should always account for that reality.</p><h4>3- Communicate often:</h4><p>We’re living in an age where you can track your pizza delivery order on your mobile phone.</p><p>Accurate and timely communication is one of the most efficient keys to increase customer satisfaction.</p><p>And when something goes wrong, you owe it to your customer to let him/her know what’s happening and tell him when you will fix the problem.</p><h4>4- Get the right tools for your business:</h4><p>Make sure that you have the tools and systems in place to capture and track incidents.</p><p>That’s the best way to make sure that everything is under control (or not).</p><p>That’s how you can measure your performance and identify where and how you can improve.</p><p>The right tool shall enable you to keep track of any incidents and issues.</p><p>Then you can fix these.</p><p>Then you can understand where and when you need to deploy your people to maximize efficiency and productivity.</p><p>A useful incident management tool will also help you learn from all these issues, give you insights to identify and limit recurring problems, and implement long term fixes.</p><p>What do you think? How would you define customer satisfaction? What are your tricks to improve Customer Sat in your business?</p><p><em>Originally published at </em><a href="https://www.linkedin.com/pulse/customer-satisfaction-equation-franck-boullier/"><em>https://www.linkedin.com</em></a><em>.</em></p><p><em>Franck is part of the Antler Network as an advisor. He plays an important role in supporting founders and coaching Antler portfolio startups.</em></p><p><strong><em>About Antler<br></em></strong>Antler is a global early-stage VC enabling and investing in the world’s most exceptional people. Present in 12 locations across 6 continents — Including Singapore, New York, Nairobi, London, Oslo, and more — Antler brings together experienced operators, technologists, and entrepreneurs to build their next companies.<br><strong>Learn more at </strong><a href="https://www.antler.co?utm_source=medium&amp;utm_medium=refferal&amp;utm_campaign=medium"><strong>www.antler.co</strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7c448215341c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/antlerglobal/the-customer-satisfaction-equation-7c448215341c">The customer satisfaction equation</a> was originally published in <a href="https://medium.com/antlerglobal">Antler</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Data is NOT “the new currency”]]></title>
            <link>https://medium.com/@franck.boullier/data-is-not-the-new-currency-2f11baa954bb?source=rss-ee72b36cc992------2</link>
            <guid isPermaLink="false">https://medium.com/p/2f11baa954bb</guid>
            <category><![CDATA[company]]></category>
            <category><![CDATA[strategic-thinking]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[organizational-change]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <dc:creator><![CDATA[Franck Boullier]]></dc:creator>
            <pubDate>Fri, 12 Jun 2020 05:14:29 GMT</pubDate>
            <atom:updated>2020-06-12T05:14:29.515Z</atom:updated>
            <content:encoded><![CDATA[<h4>Data is the new money.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GMcaVIIQgU3EDhkhfHPCpA.png" /></figure><p>“Data is the new currency”: It’s a commonly used saying, but it’s NOT meaningful enough for most people.</p><p>When I explain why Data is so essential, I prefer to say:</p><blockquote>“Data is the new money.”</blockquote><p>It sounds like it’s the same thing, right?</p><p>It’s not.</p><p>When you start thinking about Data the same way you think about money, then many things become much easier to understand and a lot easier to explain.</p><p><strong>Try it: replace the word “money” with the word “Data” in the five statements below and tell me if they help you better understand how we should look at Data:</strong></p><ul><li>When you think about your money, you worry about how much you have, how you store it, how you protect it.</li><li>You worry about who has access, and who is authorized to use your money.</li><li>When you have enough money, that’s when you worry about how to use it, how to make it work for you.</li><li>As an organization, you need to acquire money so you can run your business.</li><li>You know that money comes from several streams, and you know that money is used all across your organization.</li></ul><h3>You need a Chief Data Officer:</h3><p>In your organization, to manage all the things related to money, you have a CFO.</p><p>Here are the things that CFOs are NOT doing:</p><ul><li>They do NOT build the vaults where you keep your money.</li><li>They do NOT manage people who guard and maintain the vaults where you store your money.</li><li>They do NOT lead an army of people to collect and carry your money around safely.</li></ul><p>CFOs and their team work with banks and different experts and advisors to optimize how money flows and how you use it inside your organization.</p><p>For Data? You should do the same!</p><p>In today’s world, you don’t need a Chief Technology Officer anymore; you need a Chief Data Officer.</p><p>You need someone who focuses more on the Data and less on the underlying hardware and other “lower-level” tech layers.</p><h3>The paradigm shift of Cloud Computing:</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bZ5qcRtMBcX22PTcyw32gg.png" /></figure><p>The rise of the Chief Data Officer is possible because we now have sophisticated cloud-based solutions for most of our IT needs.</p><p>In today’s world, your organization can and should leverage Cloud Computing.</p><p>Cloud Computing allows you to spend less time and money to build and manage what you need to collect, store, access, and process your Data.</p><p>You need to spend more time thinking about:</p><ul><li>Who are the best service providers and the best advisors for you?</li><li>How to leverage their expertise and the solution they’re offering?</li><li>How to find the right mix so you can use your Data to make your organization better?</li></ul><h3>Cloud Service Providers are the equivalent of a bank for your Data:</h3><p>You need to look at Cloud Service Providers like you look at banks:</p><ul><li>You should NOT work with just one.</li><li>You know that some are better than others for certain things.</li><li>You should be able to move your business from one to another if you need to.</li></ul><p>And you should also look at System Integrators, and IT experts like you look at financial advisors and financial experts.</p><p>You want to do your homework and partner with the best.</p><p>After all, they help you manage one of your most essential resources!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2f11baa954bb" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>