<?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: Igor Ilic</title>
    <description>The latest articles on DEV Community by Igor Ilic (@gac).</description>
    <link>https://dev.to/gac</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%2F115931%2F204ca1b1-7e4f-4dca-aa9e-da34c6d06b72.png</url>
      <title>DEV Community: Igor Ilic</title>
      <link>https://dev.to/gac</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gac"/>
    <language>en</language>
    <item>
      <title>Shell script for starting new projects</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Tue, 28 Sep 2021 07:18:17 +0000</pubDate>
      <link>https://dev.to/gac/shell-script-for-starting-new-projects-1n5c</link>
      <guid>https://dev.to/gac/shell-script-for-starting-new-projects-1n5c</guid>
      <description>&lt;p&gt;Recently I realized that I do a lot of repetitive steps when starting a new project. So I started to think if there was a way to automate that process.&lt;/p&gt;

&lt;p&gt;Of course, I could have done this in a lot of different languages such as Python, C, PHP or any other, but I decided I wanted to do this in shell script (bash).&lt;/p&gt;

&lt;p&gt;Now some of you might be asking yourself "But why would you do that in bash?", and my answer to you is why wouldn't I. &lt;/p&gt;

&lt;p&gt;I've done some minor stuff with it before but never really gotten to deep into learning it or truly trying to find out how it all works. I always viewed it as something you would see in movies when they show those "hacking" scenes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/l46C6sdSa5DVSJnLG/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/l46C6sdSa5DVSJnLG/giphy.gif" title="Scene from the Hackerman movie" alt="Man sitting behind a computer and typing on a keyboard"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I always admired people who could write and understood what it does. So I decide the best way to learn it was to get my hands dirty with it. I started by trying to come up with an idea for what the script should do and coming up with some basic concepts, and that is how all of this started. &lt;/p&gt;

&lt;h3&gt;
  
  
  So what are the steps I usually take when starting a new project?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Give the project a name&lt;/li&gt;
&lt;li&gt;Create the project folder&lt;/li&gt;
&lt;li&gt;Initialize the folder as git repository

&lt;ul&gt;
&lt;li&gt;Add git repo url&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Create a database for the project&lt;/li&gt;

&lt;li&gt;Create virtual host setup&lt;/li&gt;

&lt;li&gt;Depending on the language of choice set up additional things, such as:

&lt;ul&gt;
&lt;li&gt;composer&lt;/li&gt;
&lt;li&gt;npm&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;So I started to lookup up documentation and tutorials on creating shell scripts and managed to create one I'm ok with using in my daily work.&lt;/p&gt;

&lt;p&gt;The basic usage of the script:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

create-project.sh &amp;lt;project-name&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or you can use it with arguments:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

create-project.sh &amp;lt;project-name&amp;gt; [-h | -p | -g | -e | -l | -q]


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Explanation of arguments
&lt;/h3&gt;

&lt;p&gt;You can pass all or none of the arguments as they all have predefined default values that will be used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-h or --help&lt;/strong&gt; Is used to display the help text that shows all the arguments and usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p or --path&lt;/strong&gt; Is used to set the path of the project and falls back to the current directory if empty&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-g or --git&lt;/strong&gt;  Is used to specify the git repo url for the project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-q or --quite&lt;/strong&gt; Is used to suppress all output and prompts from the script except for errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-e or --editor&lt;/strong&gt; Is used to set which code editor will be opened once the script has completed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-l or -lang or --language&lt;/strong&gt; Is used to specify in which language the project will be built in so that it can run default setups (such as npm init) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I created this script in hopes of improving my knowledge of shell scripting and to help me with the boring repetitive task I had to do when starting a new project.&lt;/p&gt;

&lt;p&gt;The script is under active development, and I will be making some changes to it as I think of new stuff to add or learn something new. &lt;/p&gt;

&lt;p&gt;If you have any suggestions, feedback or improvements leave a comment or create a pr on GitHub. &lt;/p&gt;

&lt;p&gt;You can find the whole source for the script on &lt;a href="https://github.com/gigili/create-project" rel="noopener noreferrer"&gt;Github&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you have any questions or feedback regarding this project/post or any other you can reach out to me via &lt;a href="https://twitter.com/Gac_BL" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, &lt;a href="//github@igorilic.net"&gt;E-mail&lt;/a&gt; or using &lt;a href="https://bio.link/igorilic" rel="noopener noreferrer"&gt;other options&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please do note that the script isn't perfect or as modular as I'd like it to be, but for my use case and learning process it was enough. If someone would like to extend it or improve it, PRs are always welcome.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;
        gigili
      &lt;/a&gt; / &lt;a href="https://github.com/gigili/create-project" rel="noopener noreferrer"&gt;
        create-project
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Shell script that helps you when starting a new project by doing repetitive manual task for you
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>shell</category>
      <category>bash</category>
      <category>scripting</category>
    </item>
    <item>
      <title>As a man in tech I stand for EQUALITY</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Sun, 23 May 2021 17:42:17 +0000</pubDate>
      <link>https://dev.to/gac/as-a-man-in-tech-i-stand-for-equality-11o8</link>
      <guid>https://dev.to/gac/as-a-man-in-tech-i-stand-for-equality-11o8</guid>
      <description>&lt;p&gt;The topic that I'm going to cover today is a bit different from what I usually write about, but I felt the need to express my opinion on this subject because even though we are living in 2021 we are still acting like we are in the stone age (and even than it shouldn't have been acceptable).&lt;/p&gt;

&lt;p&gt;Ever since I got into the tech scene back in the 2010 one thing that stood out the most to me was the lack of diversity and equality in this field especially for people that identify as women.&lt;/p&gt;

&lt;p&gt;I follow a lot of great content creators (blog/tutorial writers, video makers, live streamers) — many of whom identify as women — who are exposed to so many inappropriate comments about their looks or their skill levels.&lt;/p&gt;

&lt;p&gt;See just some of countless examples below:&lt;/p&gt;

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

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



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

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



&lt;/p&gt;

&lt;p&gt;Some might find it funny or amusing to leave comments on their posts or in live streams, such as "hey baby" or "you're sexy" which just demotes their value as a person and can seriously &lt;strong&gt;ruin their day&lt;/strong&gt; but also have a long-standing effects and for what? You getting a giggle out of their reaction? Getting to feel "superior"? &lt;strong&gt;STOP&lt;/strong&gt;. You &lt;strong&gt;DO NOT&lt;/strong&gt; have the privilege, or the right to speak that way to anyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are not entitled to flirt with women. You are not entitled to comment on a woman's appearance. You are not entitled to a damn thing. Keep your shitty little comments to yourself.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is to blame for this? Me. I am. I've watched this abuse happen and did nothing. I was the problem. I will not sit idle. I will act. People deserve to be safe.
&lt;/h2&gt;




&lt;h1&gt;
  
  
  Now the hard question: How about you?
&lt;/h1&gt;

</description>
      <category>equality</category>
      <category>tech</category>
      <category>diversity</category>
    </item>
    <item>
      <title>PHP routing library for fast API development</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Fri, 09 Apr 2021 16:07:51 +0000</pubDate>
      <link>https://dev.to/gac/php-routing-library-for-fast-api-development-2j9d</link>
      <guid>https://dev.to/gac/php-routing-library-for-fast-api-development-2j9d</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;
        gigili
      &lt;/a&gt; / &lt;a href="https://github.com/gigili/PHP-routing" rel="noopener noreferrer"&gt;
        PHP-routing
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Custom PHP routing library especially useful for fast API development
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  What it is?
&lt;/h1&gt;

&lt;p&gt;PHP Routing is a custom written routing library that was inspired by the &lt;a href="https://www.slimframework.com/" rel="noopener noreferrer"&gt;Slim framework&lt;/a&gt;. It was written as a small and lightweight alternative to it as I needed to use something with as little overhead as possible (not that Slim has a big foot print, hence the name Slim :D ). The first version of the library was consisting of a single PHP class that was able to handle static and some basic dynamic routes and had a semi working support for adding and using middlewares.&lt;/p&gt;

&lt;p&gt;At first that was more than enough for my use case and the library was left at that, but recently I started rewriting one of my personal projects &lt;a href="https://github.com/gigili/did-you-buy-it-api" rel="noopener noreferrer"&gt;Did You Buy It?&lt;/a&gt; live on my &lt;a href="https://twitch.tv/gacbl/" rel="noopener noreferrer"&gt;Twitch&lt;/a&gt; channel and decided I wanted to use PHP for it, as the original API was developed using Node and Express.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it do?
&lt;/h2&gt;

&lt;p&gt;This library allows for quick API development with support for both static and dynamic routes. It has support for adding prefixes to routes (ability to group them), add middlewares to be executed before the routes are processed. I'm also working on some new features but if you feel like something is missing or would like to see it implemented do leave feedback on the project.&lt;/p&gt;

&lt;p&gt;A small sample on how to add your own routes:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$routes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Routes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$routes&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello world"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nc"&gt;Routes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// If the request method is not specified the GET method is used by default&lt;/span&gt;

&lt;span class="nv"&gt;$routes&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'/users/{int:userID}/posts/{bool:isPublished}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$userID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nv"&gt;$isPublished&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="c1"&gt;//Do something&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Routes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Routes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$routes&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Why did I build it?
&lt;/h2&gt;

&lt;p&gt;At my day job we needed to develop an API and I've never really tried to build one using vanilla PHP, but instead used frameworks such as &lt;a href="https://codeigniter.com/" rel="noopener noreferrer"&gt;CodeIgniter&lt;/a&gt; or &lt;a href="https://slimframework.com" rel="noopener noreferrer"&gt;Slim&lt;/a&gt; or just a simple file that would mimic the functionality of an API but not be a proper one. Also we had a requirement that we needed to have full control over the code so we were not supposed to use any of the pre built solutions because of that requirement.&lt;/p&gt;

&lt;p&gt;I thought I would look into how to build my own routing library and implement it for our use case. I started of by taking a look at the source code of Slim framework but also just by looking around the web for examples of what other people had done before. One of the video tutorials that really inspired me and I used it as guide while developing this was the one from Codecourse on youtube on how to build your own MVC app.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/OsCTzGASImQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;h2&gt;
  
  
  Where to find it ?
&lt;/h2&gt;

&lt;p&gt;You can find the source code of the library on my &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, but also on the &lt;a href="https://packagist.org/packages/gac/routing" rel="noopener noreferrer"&gt;Packagist&lt;/a&gt; website and use it as a composer package.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;
        gigili
      &lt;/a&gt; / &lt;a href="https://github.com/gigili/PHP-routing" rel="noopener noreferrer"&gt;
        PHP-routing
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Custom PHP routing library especially useful for fast API development
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  Stay in touch
&lt;/h2&gt;

&lt;p&gt;If you want to reach out to me, you can do so on my &lt;a href="https://twitter.com/Gac_BL" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or &lt;a href="https://twitch.tv/gacbl" rel="noopener noreferrer"&gt;Twitch&lt;/a&gt;&lt;/p&gt;

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

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



&lt;/p&gt;

</description>
      <category>php</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I open sourced my first android application</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Thu, 09 Jul 2020 19:19:16 +0000</pubDate>
      <link>https://dev.to/gac/i-open-sourced-my-first-android-application-1nim</link>
      <guid>https://dev.to/gac/i-open-sourced-my-first-android-application-1nim</guid>
      <description>&lt;p&gt;I have recently started to move a lot of my personal stuff from private repos into public ones on my GitHub profile. Always admired people who create, maintain or contribute to open source projects and I wanted to do so for such a long time. And have now decide to publish the source code of the very first android app I have developed. The app was completely rewritten to support and use the latest features of Android, such as using &lt;a href="https://developer.android.com/topic/libraries/architecture/room" rel="noopener noreferrer"&gt;Room&lt;/a&gt;  for the database handling and &lt;a href="https://developer.android.com/kotlin" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt; as the language of choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backstory
&lt;/h3&gt;

&lt;p&gt;When I first started getting into Android development I was wondering what kind of application I should create to help me better learn and understand it all. So one day I was scrolling trough my Facebook's posts and notice one groups name kept popping  up more and more. It was a group someone create that showed all the names and password of WiFi network in my city. The networks were from coffee shops all around town and people were constantly submitting new ones. But one thing that I found wrong with that approach was that you needed to remember all the networks and their passwords or you needed to go online =&amp;gt; go to facebook =&amp;gt; check for network name and password  =&amp;gt; and then connect to network in order to get online. Notice the problem ? &lt;/p&gt;

&lt;p&gt;I started to wonder how I could make all that info available offline and on my phone, but also be able to update them once I actually connect to some network. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://play.google.com/store/apps/details?id=com.gac.banjalukawifi" rel="noopener noreferrer"&gt;Banja Luka WiFi&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;And that is how the idea came to me to create my first Android app that holds all the WiFi networks available in that faceboook group. First I started by collecting all the networks in the posts and comments into a single csv file to import all that information into a database. Once I had a database ready I started working on the API that would allow me to communicate with the web server in order to download all the information from it and then store it in my phone. &lt;/p&gt;

&lt;p&gt;So I started looking up tutorials and resources on how to create an Android app and what do I need for it. At that moment the most recommended option was Eclipse with a plugin for android app development. So I downloaded it and set it up, started working on the code and got a &lt;code&gt;Hello World&lt;/code&gt; printed on the screen. :)&lt;/p&gt;

&lt;p&gt;Later that year the &lt;a href="https://developer.android.com/studio/" rel="noopener noreferrer"&gt;Android studio&lt;/a&gt; version &lt;a href="https://en.wikipedia.org/wiki/Android_Studio#Version_history" rel="noopener noreferrer"&gt;1.2&lt;/a&gt; was released and I switched to using it as it was more intuitive and had a nicer UI in my opinion. &lt;/p&gt;

&lt;p&gt;After some trial and error I was able to create an app that was able to check if the user was connected to the Internet and than send a request to my API to retrieve all the networks from the database. Once the networks were downloaded, they were stored into an SQLite database and were available to the user even if they were offline. &lt;/p&gt;

&lt;p&gt;The app consists of several screens (&lt;a href="https://developer.android.com/guide/components/fragments" rel="noopener noreferrer"&gt;Fragments&lt;/a&gt;): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List of all the networks inside of a &lt;a href="https://developer.android.com/reference/android/widget/ListView" rel="noopener noreferrer"&gt;ListView&lt;/a&gt; (now using &lt;a href="https://developer.android.com/jetpack/androidx/releases/recyclerview" rel="noopener noreferrer"&gt;RecyclerView&lt;/a&gt;) and a search box that allowed you to search for a network by its name&lt;/li&gt;
&lt;li&gt;Add / edit form that allows you to submit a new network or edit an existing one if the information was outdated (password changed, incorrect address, etc)&lt;/li&gt;
&lt;li&gt;Submit a bug within the app itself or request for a network to be removed from the app DB &lt;/li&gt;
&lt;li&gt;Map showing you the location of all the networks, as that information is being collected in the add/edit form&lt;/li&gt;
&lt;li&gt;About the app screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was also a feature at one point but later it got removed as I wasn't too sure about it, but in short it allowed the app to scan for networks around the user and check if the user is not connected to any network at that moment but found a network around them that matched the name in the database it would try and connect directly to that network without the user having to do anything. When running a test on the streets I was able to stay online while walking trough the main street in my city without any problems. The app would find the first network and connect me to it, once that connection was lost it would look for the next network and connect me to it, and so on as long as it could find a network to connect me to. But once google started to implement some restrictions on networks and background tasks I removed that feature.&lt;/p&gt;

&lt;p&gt;After I had the first version of the app that I was satisfied with I started looking for way to monetize it and decided on using googles &lt;a href="https://admob.google.com/home/" rel="noopener noreferrer"&gt;AdMob&lt;/a&gt; for that. &lt;/p&gt;

&lt;p&gt;The app with the version 3.0 of the source code is available on the &lt;a href="https://play.google.com/store/apps/details?id=com.gac.banjalukawifi" rel="noopener noreferrer"&gt;Google Play store&lt;/a&gt; for anyone to download it and check it out. But the networks listed in the app are for my city only and all new networks that get added have to be manually approved by me in order to prevent spam and some other stuff. I was thinking of creating a new app that could be used by the whole world and would have more features and would show networks based on your current location. But I don't have time for it so I don't know when or if I'll get to that idea. &lt;/p&gt;

&lt;p&gt;Any suggestion, feedback or PRs are welcome. If you wish to help out, but not sure what to do, might I suggest by adding a translation for your own language to the app. Or maybe try and optimize some code as there is legacy code that just got ported to the new version as I didn't want to rewrite the whole app from scratch as it would take too much time. &lt;/p&gt;

&lt;p&gt;The full source code can be found here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;
        gigili
      &lt;/a&gt; / &lt;a href="https://github.com/gigili/banja-luka-wifi" rel="noopener noreferrer"&gt;
        banja-luka-wifi
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Android application that holds WiFi password all around the city of Banja Luka 
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.gac.banjalukawifi&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="Get it on Google Play" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fplay.google.com%2Fintl%2Fen_us%2Fbadges%2Fstatic%2Fimages%2Fbadges%2Fen_badge_web_generic.png"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>opensource</category>
      <category>kotlin</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Selling apps to non IT people</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Mon, 25 May 2020 07:48:37 +0000</pubDate>
      <link>https://dev.to/gac/building-apps-for-non-it-people-3h9p</link>
      <guid>https://dev.to/gac/building-apps-for-non-it-people-3h9p</guid>
      <description>&lt;p&gt;Recently a college and I attended a great conference where we met with a couple of people we new from before and were asked if we wanted to do a small talk on their conference. At first we weren't so sure about it but kept the idea in our minds. &lt;/p&gt;

&lt;p&gt;So I came up with an idea about doing a small talk on how to present (sell), develop and maintain applications in a world of people with background in economics (as that is the filed I'm currently working in, banking/insurance to be more specific). &lt;/p&gt;

&lt;p&gt;The biggest problem we are running into is how to present the new idea for the apps to the client in order for them to understand the value and benefits of using our apps instead of doing things in their current way.&lt;/p&gt;

&lt;p&gt;As most if not all of them don't understand the IT world and it is hard for them to see the value in a fully automated system meant to speed things up and keep to process as clean and smooth as possible when explained in the technical terms. &lt;/p&gt;

&lt;p&gt;So we devised a plan on how we can make things easier for us to present the client what we want to develop and why they should care about it. &lt;/p&gt;

&lt;h3&gt;
  
  
  First step:
&lt;/h3&gt;

&lt;p&gt;Probably the most boring part of the process is creating the documentation explaining what the app will cover and the logic flow of the app. How the app will help/improve their current workflow and remove most if not all current problems they have in doing things the old way (by hand, paper, email etc).&lt;/p&gt;

&lt;p&gt;One thing we discovered in this process is that people are often scared of the change and just want to keep doing things in the same way they have for a while as it easier than having to learn/master a new system. But what helped us with this step was having full diagrams of how the entire process would work in the new app and what steps it would remove from their old work flow and let them focus on other more important things or just give them some free time. &lt;/p&gt;

&lt;h3&gt;
  
  
  Second step:
&lt;/h3&gt;

&lt;p&gt;Create a small proof of concept app that demonstrates all the logic and workflow described in the documentation to help them visually understand more about what you are talking. As they tend to understand things if they can see the forms, buttons and all the new shiny things :)&lt;/p&gt;

&lt;p&gt;But make sure not to go fully overboard with the PoC app like it was being released into production after the first showing. It should only have the most basic of options and be able to demonstrate how it would all work once fully developed. This way you have something to show them and also in case they decide not to go for the app you haven't invested a lot of time or energy into building it. &lt;/p&gt;

&lt;h3&gt;
  
  
  Third step:
&lt;/h3&gt;

&lt;p&gt;Propose a budget and a timeline required for your project (always try to leave some room for last minute changes and testing), sometimes even going on a bit of lower price as to make sure they accept the project but than make up for it in the maintenance fees and upgrades. It helps to have a really good contract that clearly describes the limitations of what can and can't be done during the development faze and how any new features would affect the timeline and/or cost of the whole project. &lt;/p&gt;

&lt;h3&gt;
  
  
  Fourth step:
&lt;/h3&gt;

&lt;p&gt;Develop a fully working app that they can test and later use with everything described in the documentation. &lt;/p&gt;

&lt;p&gt;And even if this might seem a like simple 4 step program it is not as easy as it sounds, since this whole process can last anywhere between few weeks to several months and having to deal with many and sometimes long meetings, emails, phone calls to discuss all of this. And during that time you should keep trying to improve their understanding of the application you are trying to make.&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>Need help / suggestions on a project</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Mon, 05 Aug 2019 19:58:04 +0000</pubDate>
      <link>https://dev.to/gac/need-help-suggestions-on-a-project-1pe3</link>
      <guid>https://dev.to/gac/need-help-suggestions-on-a-project-1pe3</guid>
      <description>&lt;p&gt;So for the past few days I have been developing a simple web base app to allow waiters at my brothers bar to manage tables and tabs for guests. &lt;/p&gt;

&lt;p&gt;I have everything setup and ready to be pushed to beta testings.&lt;/p&gt;

&lt;p&gt;But one thing that keeps bugging me is the way I currently have the bars layout setup in the app. &lt;/p&gt;

&lt;p&gt;What I have done is created a &lt;code&gt;svg &amp;lt;rect&amp;gt;&lt;/code&gt; shapes and hard coded them in the view file *&lt;strong&gt;&lt;em&gt;sigh&lt;/em&gt;&lt;/strong&gt;*. Which we all know is a terrible practice especially if there is a change in the bars layout.&lt;/p&gt;

&lt;p&gt;This is how it looks in the app at the moment:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nWu8AdHW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/kxoyc9zy2uvesbc4emwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nWu8AdHW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/kxoyc9zy2uvesbc4emwb.png" alt="" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this is how it looks in the code:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GhMVNVUb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/pm891ltsdl7x4iwtpqkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GhMVNVUb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/pm891ltsdl7x4iwtpqkf.png" alt="" width="652" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what I would like to hear from this community is, how you would try and do this so that I can allow maybe an admin to alter this layout if they want it to look a bit different. Maybe add some other config options to it. Because at the moment it doesn't look that good and is not dynamic at all. I was thinking maybe using the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; and then store / load that data from a db. But was not able to find a good tutorial for it online. &lt;/p&gt;

&lt;p&gt;All I was able to find was how to like store stuff from a canvas to png file. &lt;/p&gt;

&lt;p&gt;Is there a way to accomplish this without having to implement a complicated library or have a 3rd party service embedded in the app ?&lt;/p&gt;

&lt;p&gt;If needed, these are the project specs:&lt;br&gt;
    - Langues: PHP, jQuery&lt;br&gt;
    - Database: MySQL &lt;/p&gt;

&lt;p&gt;I didn't use any frameworks for this project. &lt;/p&gt;

&lt;p&gt;Thanks for any feedback / help. :)&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>help</category>
      <category>webdev</category>
      <category>php</category>
    </item>
    <item>
      <title>What is your daily source of information?</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Tue, 11 Jun 2019 06:54:14 +0000</pubDate>
      <link>https://dev.to/gac/what-is-your-daily-source-of-information-4o0b</link>
      <guid>https://dev.to/gac/what-is-your-daily-source-of-information-4o0b</guid>
      <description>&lt;p&gt;So just a few days ago I deactivated most of my social media accounts and now only use Twitter (but trying to lower the usage of it as well). So one thing I noticed is that when ever I'm bored or have any free time I will take my phone and try to open either fb or twitter to scroll trough to just kill the time.&lt;/p&gt;

&lt;p&gt;So as you can image that isn't very productive nor does it help me in any way. &lt;/p&gt;

&lt;p&gt;So I wanted to hear from you guys what are some of your favorite websites you like to visit to catch up on the latest news (preferably tech stuff), educational sites, podcasts and any other sites/apps you like to use to try and get the latest information and/or improve your knowledge and skills ?&lt;/p&gt;

&lt;p&gt;If you are also signed up for some newsletter that you actually wanted to receive please do include them in your comments. Or any other link you think someone might find useful.&lt;/p&gt;

&lt;p&gt;Since I was spending so much time on social media I thought I always knew what was happening but that was far from reality. So I decided to change some old (bad) habits and try and work on my self more.  &lt;/p&gt;

&lt;p&gt;These are some of the sites I visit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Twitter&lt;/li&gt;
&lt;li&gt;Dev.to&lt;/li&gt;
&lt;li&gt;Devrant&lt;/li&gt;
&lt;li&gt;TheHackerNews.com&lt;/li&gt;
&lt;li&gt;My local newspaper (which has low to almost no interesting content about IT)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you all :)&lt;/p&gt;




&lt;p&gt;&lt;sup&gt;&lt;a href="https://wikieducator.org/INFOSEEK"&gt;Image source: wikieducator&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>programming</category>
      <category>news</category>
    </item>
    <item>
      <title>Cloudflare dns update - Free alternative to ddns?</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Wed, 19 Dec 2018 09:36:16 +0000</pubDate>
      <link>https://dev.to/gac/cloudflare-dns-update---free-alternative-to-ddns-437c</link>
      <guid>https://dev.to/gac/cloudflare-dns-update---free-alternative-to-ddns-437c</guid>
      <description>&lt;p&gt;So recently I setup myself a little web server at home so I could mess around with it and have a place where I could store and later show the projects to friends and/or clients. But I was facing a problem with my little idea: &lt;strong&gt;&lt;em&gt;I have a dynamic IP at home&lt;/em&gt;&lt;/strong&gt;. So I started looking around for solutions and I remembered the &lt;a href="https://dyn.com/dns/" rel="noopener noreferrer"&gt;DynDNS&lt;/a&gt; and that they &lt;strong&gt;had&lt;/strong&gt; a free version of their dynamic dns plan (sadly that is not the case anymore). So I looked for an alternative and found the &lt;a href="https://noip.com" rel="noopener noreferrer"&gt;NoIP&lt;/a&gt;. They have a free plan which gives you an ability to pick your hostname with one of their free domains (ex yourname.ddns.net).&lt;/p&gt;

&lt;p&gt;This was a great find but unfortunately for me it had an clause in their free plan that meant I had to click on a link in my email and go trough the verification process to confirm that I'm still using my hostname and that it shouldn't be removed. I wasn't able to automate this process as it had several steps in it and a google recaptcha to make sure I wasn't using a script or a bot to do this for me.&lt;/p&gt;

&lt;p&gt;So I started looking around for other options while keeping the NoIP hostname alive to allow me to access the server from the outside world. One other alternative I found was using my friends servers and domain to establish a ssh tunnel via autossh and have a port forwarding setup so that I could access it. This was also nice but it had some downsides to it. One was that I had to use my friends domain and ports that he would allow me to use so that they don't conflict with ports he is using. &lt;/p&gt;

&lt;p&gt;So again we set it all up and I used it for a while to see how things would go and everything was nice (I still use some parts of it, for security) but for the most part I found an alternative. I remembered that my own domain was being routed trough the &lt;a href="https://cloudflare.com" rel="noopener noreferrer"&gt;CloudFlare&lt;/a&gt; and that I saw links to some API documentation. So I logged in to my account and found the documentation and started to read it. Quickly found the documentation for the dns zones and how to get a list of them and how to update a specific zone. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Now came the fun part&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I opened up nano (don't judge me :) ) on my server and started writing and googling on how to do stuff in shell/bash (not much experience before this). One of the first things I had to lookup was how to get my public IP and store it to a variable. &lt;/p&gt;

&lt;p&gt;A big help in this was a &lt;a href="https://www.cyberciti.biz/" rel="noopener noreferrer"&gt;nixCraft&lt;/a&gt; site and a thank you to &lt;a href="https://twitter.com/nixcraft" rel="noopener noreferrer"&gt;@nixCraft&lt;/a&gt; for writing such awesome and easy to understand tutorials you are the RMVP :)&lt;/p&gt;

&lt;p&gt;After that I started to look around for ways to get the information from CloudFlare and used &lt;a href="https://www.getpostman.com/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; and its awesome feature to generate code from your request. I stored the output of the call into a variable and than used &lt;a href="https://stedolan.github.io/jq/" rel="noopener noreferrer"&gt;jq&lt;/a&gt; to parse the JSON output into 2 other variables. One was for storing the result from the success response and the other one was for storing the error message. &lt;/p&gt;

&lt;p&gt;After that I looked up how to send email with the shell and looked at &lt;a href="https://www.cyberciti.biz/faq/linux-unix-bash-ksh-csh-sendingfiles-mail-attachments/" rel="noopener noreferrer"&gt;mail&lt;/a&gt; command. It was nice but in order to send it to the real world I needed something else (or at least I didn't know how to configure it to do this). So I settled with &lt;a href="https://www.cyberciti.biz/tips/linux-use-gmail-as-a-smarthost.html" rel="noopener noreferrer"&gt;sSMTP&lt;/a&gt; which allowed me to send emails to myself if there was a problem with updating the DNS record. &lt;/p&gt;

&lt;p&gt;You can checkout the full source code on my github:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gigili" rel="noopener noreferrer"&gt;
        gigili
      &lt;/a&gt; / &lt;a href="https://github.com/gigili/Cloudflare-dns-update" rel="noopener noreferrer"&gt;
        Cloudflare-dns-update
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Allows me to update my CloudFlare dns record so that I can have access to my server with a dynamic IP
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Cloudflare dns update&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/gigili/Cloudflare-dns-update#contributors-" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d319ea9b47fbfa41e3336926df5bdae31bf2d6b01b7fd120d064cb86b5f506f3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f616c6c5f636f6e7472696275746f72732d312d6f72616e67652e7376673f7374796c653d666c61742d737175617265" alt="All Contributors"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Allows me to update my Cloudflare dns record so that I can have access to my server with a dynamic IP&lt;/p&gt;
&lt;p&gt;Since I have a dynamic IP at home, but have setup myself with a little web server I needed a way to have nice domain to access it and not worry about the IP changes. There are many great options out there such as ddns or noip, but why pay for something or go trough the trouble of confirming your account should you choose the free version when you can try and learn something new and create your own script that would mimic the actions of those clients :)&lt;/p&gt;
&lt;p&gt;Also the good thing about this is that you can use it for any of your domains / sub domains hosted trough Cloudflare and not having to pick one of those free domains.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basic knowledge of…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/gigili/Cloudflare-dns-update" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>dns</category>
      <category>shell</category>
      <category>webdev</category>
      <category>cloudflare</category>
    </item>
    <item>
      <title>Personal projects! Yes or No ?</title>
      <dc:creator>Igor Ilic</dc:creator>
      <pubDate>Fri, 14 Dec 2018 12:44:47 +0000</pubDate>
      <link>https://dev.to/gac/personal-projects-yes-or-no--586</link>
      <guid>https://dev.to/gac/personal-projects-yes-or-no--586</guid>
      <description>&lt;p&gt;As a programmer I like to try out new programming languages and technologies. That is how most of us find our selfs a new side project to thinker with between our day jobs and lives. Like many of us, I also had many side projects which were never even finished or saw a light of day, but that doesn't mean I stopped working or looking for new ones. And from there is how I got into amateur mobile development for android.&lt;/p&gt;

&lt;p&gt;Like most I always fell great when starting a new personal project as I know I don't have a strict deadline or client that will change his/her mind mid project and make me do it all over, and even if I did that to myself I would still enjoy it as I would think of it as a new project and not a rework of the old one. And the best part about those projects is that I can do them when ever and how ever I feel like it. But the said truth about most of our side projects is that sooner or later they just die and get left on some external hard drive or a privet repository. In some rear cases one might get completed and live to see the light of day, and form some they will prove to be more profitable then their current job or will just be published but without much activity on it. &lt;/p&gt;

&lt;p&gt;One good example of this is my mobile app called &lt;a href="https://play.google.com/store/apps/details?id=com.gac.banjalukawifi"&gt;Banja Luka WiFi&lt;/a&gt;. I created it  out of boredom and sheer desire to see if I can actually do it. And this is the actual story behind it:&lt;/p&gt;

&lt;p&gt;One day I was lying in my bed and looking at a facebook group that was starting to grow in popularity. The point of it was to hold WiFi password of coffee shops around my town so people could connect to them without having to go in and order something to be able to get a password from the waiter. But than I realized as good of an idea that is, it has its flows, such as that in order for me to connect to a certain network I would need to remember all those passwords or go online and check posts in that group to be able to connect to network so I can go online (see the flaw ?). So I thought it would be fun to try and create a mobile app which would have a remote server that stores all those networks and a user to have a mobile app which will connect to that server once it is online and store all those passwords locally on the users device and allow the user to search for a certain password if he / she needs it. &lt;/p&gt;

&lt;p&gt;And that is how I started learning java and mobile development and published my first mobile app. But I also have a lot of projects which were never finished and most likely they never will be even tho they were fun and seemed like they could be useful to someone else rather than just me. &lt;/p&gt;

&lt;p&gt;But also I've read stories from other developer who actually took their side project and turned it into a full time job and even developed full businesses around them (take Facebook for example, but there are more). And even tho at first most of us would think that these side projects won't do much or would live long enough for someone to actually use them, that can all change overnight and they could become the next big thing everyone is using or talking about. Or that might not happen but your project still gets to see the light of day and some people find it useful. &lt;/p&gt;

&lt;p&gt;Whatever the case might be, the conclusion of my story is that side projects should always have a YES as an answer if someone asks are you doing any. So they help you keep your olds skill sharp but also help you learn new things if you diced to do them in a new programming language, but also help you to relax and take your mind off of your daily problems and struggles at work (See &lt;a href="https://clientsfromhell.net/"&gt;CFH.net&lt;/a&gt; or &lt;a href="https://devrant.com/stories"&gt;DevRent&lt;/a&gt; for some laughs and true stories).&lt;/p&gt;

&lt;p&gt;I've decided to move my blog from my personal website to here as I think it just might find a better audience :)&lt;/p&gt;

&lt;p&gt;So I'll be migrating those few posts I have there on to here, and try to come up with new ones. I hope you will like it, and if you have any questions/suggestions please fell free to let me know &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>personalprojects</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
