<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tegar Santosa</title>
    <description>The latest articles on DEV Community by Tegar Santosa (@mtegarsantosa).</description>
    <link>https://dev.to/mtegarsantosa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F387593%2Fb3494cd4-b6d7-41d7-8cdd-e5ac105703af.jpeg</url>
      <title>DEV Community: Tegar Santosa</title>
      <link>https://dev.to/mtegarsantosa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mtegarsantosa"/>
    <language>en</language>
    <item>
      <title>SCRUM in nutshell: how startups nowadays establish product 👔</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Tue, 26 Oct 2021 15:57:39 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/scrum-in-nutshell-how-startups-nowadays-establish-product-p73</link>
      <guid>https://dev.to/mtegarsantosa/scrum-in-nutshell-how-startups-nowadays-establish-product-p73</guid>
      <description>&lt;p&gt;SCRUM is being talked a lot. This solves a raised question like how to help startups or companies establish their product in order to be more organized and efficient.&lt;/p&gt;

&lt;p&gt;In this article, I will divide it into 3 big chapter to make an understandable definition about SCRUM itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Foundation (Definition, Framework, and Upheld Value)&lt;/li&gt;
&lt;li&gt;Team (Product Owner, Scrum Master, Development Team)&lt;/li&gt;
&lt;li&gt;Activities (Sprint Planning, Retro, Daily Stand up, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏠 Foundation
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;SCRUM (n): A framework within which people can address complex adaptive problems, while productively and creatively delivering products of highest possible value&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SCRUM exists because of the current challenging field condition and changes in product development.&lt;/p&gt;

&lt;p&gt;To make a comparison, there was Waterfall method. How it works &lt;em&gt;(from top to bottom, from boss assign to team)&lt;/em&gt; was less able to help company to build big product with high quality.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Digital Product is the entire context I'm talking about 🔊.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🏛️ The 3 Support Pillars
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Work Transparency&lt;/strong&gt;&lt;br&gt;
Everything that isn't clear related to task or backlog scopes and expectations needs to be clear because it will affect to final result.&lt;/p&gt;

&lt;p&gt;For instance, let's talk about DOD (Definition of Done), something that should always be in the backlog. It's all about how a condition in a task can be appointed as done. It makes a goal standard for team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Periodically Check-Up&lt;/strong&gt;&lt;br&gt;
All the teams involved in SCRUM will do periodically check-up to monitoring progress those has been done, and also to figure all impediment out as early as possible.&lt;/p&gt;

&lt;p&gt;In SCRUM activities, there is &lt;em&gt;"Daily Stand up"&lt;/em&gt;, where every development team member shares their progress up. More detail about this, will be written on SCRUM Activities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Adaptation to Conditions and Situations&lt;/strong&gt;&lt;br&gt;
If there was an aspect that makes activities not maximal,  there must be readjustment. What I want to say, SCRUM is not stiff. SCRUM is being focus, but also suitable with team's atmosphere.&lt;/p&gt;

&lt;h2&gt;
  
  
  📈 SCRUM's Upheld Value
&lt;/h2&gt;

&lt;p&gt;Commitment, focus, courage, express opinion, and respect each team member.&lt;/p&gt;

&lt;h2&gt;
  
  
  👥 SCRUM Team
&lt;/h2&gt;

&lt;p&gt;SCRUM Team consist of Product Owner, SCRUM Master, and Development (several roles).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Product Owner (PO)&lt;/strong&gt;&lt;br&gt;
A person who has responsibility regarding product's vision, and manage product backlog.&lt;/p&gt;

&lt;p&gt;Usually, PO only consist of one person who determines the direction of product development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Development Team&lt;/strong&gt;&lt;br&gt;
Development consist of several roles. In general, it's consists of developer, designer, and tester. Some companies had copywriter, and UX writer.&lt;/p&gt;

&lt;p&gt;There are a few need to be upheld characters in development team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They work in self-organizing, no one (PO or SCRUM Master) had authority to do technical dictate.&lt;/li&gt;
&lt;li&gt;All roles merged into one team named "Development Team". Need high accountability to reach goal in sprint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. SCRUM Master (SM)&lt;/strong&gt;&lt;br&gt;
A person who has the responsibility of keeping SCRUM values fully operational.&lt;/p&gt;

&lt;p&gt;Responsibilities of SCRUM Master to Product Owner&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help PO to convey product's vision and goal.&lt;/li&gt;
&lt;li&gt;Set up backlog priority.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Responsibilities of SCRUM Master to Development Team&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coaching periodically.&lt;/li&gt;
&lt;li&gt;Access management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Responsibilities of SCRUM Master to Entire Team&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facilitate all event in SCRUM, especially when Sprint Planning and Retrospective.&lt;/li&gt;
&lt;li&gt;Be a middle man between PO and Development.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔄 SCRUM Activites
&lt;/h2&gt;

&lt;p&gt;It's a soul of running SCRUM itself. Let's break them down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Sprint Planning&lt;/strong&gt;&lt;br&gt;
What kind of work in one sprint ahead determined by this session. In this session, PO will determine what backlog products need to be done.&lt;/p&gt;

&lt;p&gt;There also has user stories that explain what the goal of task, and what's the underlying. Every user stories has story point that symbolizes how hard the task is so PO can make a boundary line in order to increase team's productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Sprint Phase&lt;/strong&gt;&lt;br&gt;
After sprint planning, all team take their based on role task. There are 3 board for every task should be put on. &lt;strong&gt;To-Do&lt;/strong&gt;, &lt;strong&gt;In Progress&lt;/strong&gt;, &lt;strong&gt;Done&lt;/strong&gt;. All team do the task independently and expected to move it to based on certain task's status board. In general, the sprint phase is defined as 2 weeks running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Daily Stand Up&lt;/strong&gt;&lt;br&gt;
This is a daily activity to monitor the backlog progress which carried out by all team member. All roles is expected to had a quick meeting by standing, and explain what each does.&lt;/p&gt;

&lt;p&gt;In this session everyone expected to elaborate their update and all impediments can be known as early as possible.&lt;/p&gt;

&lt;p&gt;One of common templates that always being used in daily stand up is these 3 question:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What's you did yesterday? And how's the progress?&lt;/li&gt;
&lt;li&gt;What's your focus today?&lt;/li&gt;
&lt;li&gt;Is there an impediments?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Sprint Review&lt;/strong&gt;&lt;br&gt;
This is what the team did after going through the sprint phase. Sprint Review started by demonstrating everything the team did in last sprint.&lt;/p&gt;

&lt;p&gt;While demonstrating, team will explain if there are some considerations why they did that so they got that result.&lt;/p&gt;

&lt;p&gt;In this session, PO had the authority whether backlog or the work done is good enough to said or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Sprint Retrospectives&lt;/strong&gt;&lt;br&gt;
Retro session is a chance for team to look back the sprint. What is went well and not. Then it gives a chance for the team to convey how to fix it.&lt;/p&gt;

&lt;p&gt;I would say Retrospective is an important session. Because if there are some mistakes or not suit enough in the company, we can stop it and figure the solution out.&lt;/p&gt;

&lt;p&gt;So far, it's actually enough to know SCRUM in short. Last but not least, here some references for you guys who want to deeply swim into this topic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://scrumguides.org/" rel="noopener noreferrer"&gt;SCRUM Official Guide ScrumGuide.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.scrum.org/resources/scrum-guide" rel="noopener noreferrer"&gt;The SCRUM Guide SCRUM.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mountaingoatsoftware.com/agile/scrum/resources" rel="noopener noreferrer"&gt;SCRUM Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agile</category>
      <category>startup</category>
    </item>
    <item>
      <title>delete all &lt;none&gt; image on docker with single command 🖥️</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Sat, 21 Aug 2021 12:14:14 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/delete-all-none-image-on-docker-with-single-command-1dbg</link>
      <guid>https://dev.to/mtegarsantosa/delete-all-none-image-on-docker-with-single-command-1dbg</guid>
      <description>&lt;p&gt;Ciao!&lt;/p&gt;

&lt;p&gt;If docker images being failed to run certain command, &amp;lt;none&amp;gt; images will be generated and it can be very annoying.&lt;/p&gt;

&lt;p&gt;This is how to easy delete it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Delete Container.
&lt;/h4&gt;

&lt;p&gt;If the &amp;lt;none&amp;gt; images were used on container, active or not, you have to delete it first.&lt;/p&gt;

&lt;p&gt;To list all containers, run this command on your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To delete it, run this command. Make sure you delete container with &amp;lt;none&amp;gt; image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;your-container-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Delete All &amp;lt;none&amp;gt; Images.
&lt;/h4&gt;

&lt;p&gt;You can delete all those images just with this single line command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi &lt;span class="si"&gt;$(&lt;/span&gt;docker images | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"^&amp;lt;none&amp;gt;"&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s2"&gt;"{print &lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;}"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Thanks for reading!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>cron job inside docker container 👨‍💻</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Fri, 20 Aug 2021 03:19:13 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/cron-job-inside-docker-container-14pe</link>
      <guid>https://dev.to/mtegarsantosa/cron-job-inside-docker-container-14pe</guid>
      <description>&lt;p&gt;Bonjour!&lt;/p&gt;

&lt;p&gt;In this post i'll show you how is the easy way to run cronjob inside docker container. It's kinda different between running cronjob inside VM or local server with OS. So here it is.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cron file.
&lt;/h4&gt;

&lt;p&gt;This file is used for cron set up. For example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/cron&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* * * * * echo "Hello world" &amp;gt;&amp;gt; /var/log/cron.log 2&amp;gt;&amp;amp;1
# An empty line is required at the end of this file for a valid cron file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Dockerfile set up.
&lt;/h4&gt;

&lt;p&gt;At bottom of your base image on Dockerfile, add these lines.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/Dockerfile&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;cron

&lt;span class="c"&gt;# Copy cron file to the cron.d directory on container&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; cron /etc/cron.d/cron&lt;/span&gt;

&lt;span class="c"&gt;# Give execution access&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;0644 /etc/cron.d/cron

&lt;span class="c"&gt;# Run cron job on cron file&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;crontab /etc/cron.d/cron

&lt;span class="c"&gt;# Create the log file&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;touch&lt;/span&gt; /var/log/cron.log

&lt;span class="c"&gt;# Run the command and record the log&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; cron &amp;amp;&amp;amp; tail -f /var/log/cron.log&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also run the cron as foreground to see the logs. Change the last line at bottom of your Dockerfile to this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/Dockerfile&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run cron as foreground&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["cron", "-f"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Thank you for reading XD!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>cron</category>
      <category>server</category>
    </item>
    <item>
      <title>auto generate subtitle for local video / audio 📃</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Tue, 17 Aug 2021 09:49:25 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/auto-generate-subtitle-for-local-video-audio-2574</link>
      <guid>https://dev.to/mtegarsantosa/auto-generate-subtitle-for-local-video-audio-2574</guid>
      <description>&lt;p&gt;Ni Hao!&lt;/p&gt;

&lt;p&gt;If you wondering how to show subtitle automatically from your local video like you are watching youtube video, or how to show subtitle from your favorite podcast/audio which does not provide subtitle feature, this is it.&lt;/p&gt;

&lt;p&gt;Did you know that our lovely web browser &lt;strong&gt;Google Chrome&lt;/strong&gt; had a features to make us able to recognize text from audio using Google AI? It's already in there and no need to install something like 3rd party. Alright, so watch this step.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open &lt;strong&gt;Chrome&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move your local video to &lt;strong&gt;Chrome&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo1uk1xftrlvot0j23mv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo1uk1xftrlvot0j23mv.png" alt="image" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open &lt;strong&gt;Chrome Settings&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfz4vuzrj1wz5rm4yxk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfz4vuzrj1wz5rm4yxk5.png" alt="image" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll down -&amp;gt; Click Advanced -&amp;gt; On accessibility panel, click Captions. Simple doing, just type &lt;strong&gt;live caption&lt;/strong&gt; on search bar.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sn51vvv8r09nxggfsbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sn51vvv8r09nxggfsbc.png" alt="image" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn on &lt;strong&gt;Live Caption&lt;/strong&gt;. It will download AI Audio to Text if you do this for the first time.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2c22otuuig7rbwgqgpv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2c22otuuig7rbwgqgpv3.png" alt="image" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Back to your video and play it! You can see the subtitle on bottom of screen.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fviup26gvywfyvcpavgaz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fviup26gvywfyvcpavgaz.png" alt="image" width="800" height="610"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can change the language based on your needs.&lt;/p&gt;

&lt;p&gt;This feature will show up everytime Chrome detect audio. Just easily change the switch button if you want to turn this feature off or on.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chrome</category>
    </item>
    <item>
      <title>AI snake game with a* algorithm 🐍</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Sat, 14 Aug 2021 09:18:40 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/ai-snake-game-with-a-algorithm-455k</link>
      <guid>https://dev.to/mtegarsantosa/ai-snake-game-with-a-algorithm-455k</guid>
      <description>&lt;p&gt;Hallo!&lt;/p&gt;

&lt;p&gt;In this post, i want to share my old project (again) haha. It's about implementing a* (a star) algorithm on simple snake game web based using JS.&lt;/p&gt;

&lt;p&gt;For you guys who don't know about what exactly a* algorithm used for, so here it is.&lt;/p&gt;

&lt;p&gt;A Star is shortest route finder algorithm. Yup and of course, used for finding path from one point to other point.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🙍‍♂️: &lt;strong&gt;"Hey, we already have a masterpice pytaghoras to deal with that, isn't it?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ha, here's the thing. A* is more complex than that. It will gives you the shortest and the fast way considering all blocker and obstacle.&lt;/p&gt;

&lt;p&gt;We can see a* is used by maps app to find route from your current place to your destination. We have the road as rule. We don't wanna break through the road, or climb neighbor house, or just walk straight no matter what. That's what we called obstacle.&lt;/p&gt;

&lt;p&gt;Let's take a look on this video. This is how a* works.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_shqwpySsx4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In snake game that i made, the obstacle will be the edge area, and snake body itself. And the destination is, FOOD 🍎.&lt;/p&gt;

&lt;p&gt;I wanna know, how accurate a* is. So i made comparison of me fight with my bot, playing snake. You know the result, i never can beat it 😣. Damn you my creation.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Source Code 🎉
&lt;/h4&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tegarsantosa" rel="noopener noreferrer"&gt;
        tegarsantosa
      &lt;/a&gt; / &lt;a href="https://github.com/tegarsantosa/snake-astar" rel="noopener noreferrer"&gt;
        snake-astar
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🐍 Snake with A* Algorithm
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>javascript</category>
      <category>astar</category>
    </item>
    <item>
      <title>AI: steering wheel console using cardboard 📦🚐</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Sat, 14 Aug 2021 07:55:24 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/steering-wheel-console-using-cardboard-ai-carsimulator-88p</link>
      <guid>https://dev.to/mtegarsantosa/steering-wheel-console-using-cardboard-ai-carsimulator-88p</guid>
      <description>&lt;p&gt;Heyho!&lt;/p&gt;

&lt;p&gt;I wanna share with you guys about my old project that i made in order to learn more about AI, especially, color tracking.&lt;/p&gt;

&lt;p&gt;I try to be more creative by combinate it with car simulator. So here's the result.&lt;/p&gt;

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

&lt;p&gt;This project was created using Python, OpenCV, SocketIO, and &lt;a href="https://github.com/udacity/self-driving-car-sim" rel="noopener noreferrer"&gt;Udacity Self Driving Car Simulator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this post, i'll show you how i made that with non-technical explanation. I'll explain to you all the step and flow in general without code pasted here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BUT....&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I will put the source code at the end of this post. It's free to learn or contribute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ How I Made It&lt;/strong&gt;&lt;br&gt;
Watch these steps casually :)&lt;/p&gt;


&lt;h4&gt;
  
  
  DIY Steering
&lt;/h4&gt;

&lt;p&gt;First, i made my steering wheel from cardboard and put color paper for origin and point.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flu8mf4elqedp5pz6dx67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flu8mf4elqedp5pz6dx67.png" alt="image" width="319" height="294"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Color Detection
&lt;/h4&gt;

&lt;p&gt;Using OpenCV, i created new layer for color detection. I change the layer to HSV format, and gives limit for lower range and upper range.&lt;/p&gt;

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

&lt;p&gt;So, that was what layer's color look like in HSV format. And for For limitation, this is the simple way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If color (in hsv) suitable with range that i set, show white. Otherwise, show nothing (in case, black)"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;So, i need to pointing the centroid area from color that i successfully track on steering wheel (origin &amp;amp; point).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnsymibc5cf2o8rz9kwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnsymibc5cf2o8rz9kwl.png" alt="image" width="418" height="284"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Angle Calculation
&lt;/h4&gt;

&lt;p&gt;When i already have the coordinates of my origin and point color on steering wheel, i can make a calculation for angle easly. This angle is affected by steer spin.&lt;/p&gt;

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

&lt;p&gt;Then, i have to send every number of angle change to Udacity Simulator using Socket. Yes, i sending the value over http method.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6saaboirf5956yppavn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6saaboirf5956yppavn.png" alt="image" width="646" height="322"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  PLAY 🥳
&lt;/h4&gt;

&lt;p&gt;All is setted up. All we need to do is enjoy and get the feel in riding car :)&lt;/p&gt;

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


&lt;h4&gt;
  
  
  Source Code 🎉
&lt;/h4&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tegarsantosa" rel="noopener noreferrer"&gt;
        tegarsantosa
      &lt;/a&gt; / &lt;a href="https://github.com/tegarsantosa/ai-steering-sims" rel="noopener noreferrer"&gt;
        ai-steering-sims
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚗 Artificial Intelligence for Steering Simulator
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>easy way to generate SSH keys from VPS 💻</title>
      <dc:creator>Tegar Santosa</dc:creator>
      <pubDate>Tue, 13 Apr 2021 16:58:15 +0000</pubDate>
      <link>https://dev.to/mtegarsantosa/easy-way-to-generate-ssh-keys-from-vps-4l17</link>
      <guid>https://dev.to/mtegarsantosa/easy-way-to-generate-ssh-keys-from-vps-4l17</guid>
      <description>&lt;p&gt;SSH Key is a standart component used for secure remote shell session through less secure network using various cryptography techniques.&lt;/p&gt;

&lt;p&gt;Here's how to generate it from VPS easily.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Login to your VPS.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;ssh-keygen&lt;/code&gt; and enter until end.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4196w3h7t3s0faqs58b1.JPG" alt="SSH Keygen" width="552" height="375"&gt;
&lt;/li&gt;
&lt;li&gt;Check if &lt;code&gt;id_rsa&lt;/code&gt; and &lt;code&gt;id_rsa.pub&lt;/code&gt; on &lt;code&gt;~/.ssh&lt;/code&gt; is created.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sn2txwphj0dsfwohfge.JPG" alt="Check Dot SSH" width="206" height="71"&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;ssh-agent /bin/bash&lt;/code&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkwu068wz4ljhojrzvgl.JPG" alt="SSH Agent" width="318" height="36"&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;ssh-add ~/.ssh/id_rsa&lt;/code&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspyrab1oseyz33zk21db.JPG" alt="SSH Aff" width="440" height="52"&gt;
&lt;/li&gt;
&lt;li&gt;Last thing to do, get ssh key that was created. Run &lt;code&gt;cat ~/.ssh/id_rsa.pub&lt;/code&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4e4sge92h3e2ncwhwln.JPG" alt="Get SSH Key" width="800" height="50"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SSH Key was generated! You can use it on any apps that needs it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One Run Command&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>tutorial</category>
      <category>server</category>
      <category>network</category>
    </item>
  </channel>
</rss>
