<?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: Stefanos Vardalos</title>
    <description>The latest articles on DEV Community by Stefanos Vardalos (@stefvardalos).</description>
    <link>https://dev.to/stefvardalos</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%2F65244%2Faea90db1-46df-4ed4-9e5f-93ec7dd73f22.jpeg</url>
      <title>DEV Community: Stefanos Vardalos</title>
      <link>https://dev.to/stefvardalos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stefvardalos"/>
    <language>en</language>
    <item>
      <title>Getting through the learning curve of crypto mining</title>
      <dc:creator>Stefanos Vardalos</dc:creator>
      <pubDate>Tue, 21 Sep 2021 10:56:50 +0000</pubDate>
      <link>https://dev.to/stefvardalos/getting-through-the-learning-curve-of-crypto-mining-5c9l</link>
      <guid>https://dev.to/stefvardalos/getting-through-the-learning-curve-of-crypto-mining-5c9l</guid>
      <description>&lt;p&gt;So, lately, I got into the mining hype train, even though I didn't even had a pc tower before(being a Mac user). I had some experience around crypto trading before, but I had no knowledge around the actual mining process, the various terminologies behind it, or the over/under clocking methods and settings.&lt;br&gt;
Although I came rather late to the party, there is a big advantage to that since there are numerous sources for all the information that you need to be up and ready in relative short time. Moreover, the whole process has streamlined a lot and there are options as simple as a few clicks, for those who do not want to invest a lot of time on it or do not care about the tech- engineering behind it.&lt;br&gt;
Having said that, the list below can be seen as a noob-friendly summation of the important stuff you should keep a note, if you want to start such a journey yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mining Pool
&lt;/h2&gt;

&lt;p&gt;This is a group of individual crypto miners that combine their resources in order to increase their chances of finding a block and, eventually, mine the crypto coin. Although you can do without a mining pool and try mining solo, this is outside of the simple-scope we have here. Every pool chooses to mine specific coins, so, one of the important factors to pick one over the other, is the coin you want to mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mining Algorithm
&lt;/h2&gt;

&lt;p&gt;This is the algorithm which runs on the corresponding blockchain. There are various algorithms and every blockchain chooses the one to use, while every miner chooses the one to mine based on his hardware, since different hardware works best on certain algorithms.&lt;/p&gt;

&lt;h2&gt;
  
  
  HashRate
&lt;/h2&gt;

&lt;p&gt;This refers to the computational power your machine provides during the mining process. You want this number to be as high as possible, so you might need to tweak some things in order to get the most out of your hardware. Different hardware will need different settings, based also on the mine algorithm of your choice, so be ready for quite a lot of trial and error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Miner Software
&lt;/h2&gt;

&lt;p&gt;This is the actual software you need to run on your hardware in order for it to become part of the mining process. There are various different ones, and each one can be used to mine specific coins. Furthermore, some of them favor specific hardware vendors, so you should keep this in mind as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coin Wallet
&lt;/h2&gt;

&lt;p&gt;This is the equivalent of your physical wallet, but in the crypto world. Any profit you gain from your mining effort, will be transferred in your wallet periodically and then you will be able to use them as you wish, be it make them fiat money, exchange them for different coins or, transfer them to other wallets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yKLOXq57--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mj8mil1uipuhhqovup80.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yKLOXq57--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mj8mil1uipuhhqovup80.jpg" alt="0*e3QslFblY57H_5nH"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you have set up your hardware and installed all the required software, and your wallet starts to receive your so much welcomed fruits of your effort, the next thing you will want to do is keep an eye on the status of it. Depending on the size of your investment, real time data can be critical for maximising your efforts and reaching that initial ROI faster. But even for smaller rigs, monitoring data and charts are an essential part of the whole process.&lt;br&gt;
Almost all mining pools provide a clean and simple web ui to check your account, but if you mine on more than one pool, then you need to keep track of different websites or even install multiple apps on your phone. For that, &lt;a href="https://minerwatch.app"&gt;MinerWatch &lt;/a&gt; was created, so that you can monitor from a single app your miner-rigs no matter what pool you are in, or which coin you mine at the moment. Initially, the 2Miners pool is the first one integrated with more than 15 coins available, with many more to come in the following releases, along with new clients and much awaited features.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;&lt;a href="https://minerwatch.app"&gt;MinerWatch &lt;/a&gt;- The one answer to monitoring one or multiple mining accounts&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you have a specific request, be it your favorite pool or a different kind of chart that will provide you the insight that you need, please don't hesitate to contact me.&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>crypto</category>
      <category>mining</category>
      <category>product</category>
    </item>
    <item>
      <title>Quarantimer - A timer to get your quarantine into perpective</title>
      <dc:creator>Stefanos Vardalos</dc:creator>
      <pubDate>Mon, 30 Mar 2020 10:58:39 +0000</pubDate>
      <link>https://dev.to/stefvardalos/quarantimer-a-timer-to-get-your-quarantine-into-perpective-4g7a</link>
      <guid>https://dev.to/stefvardalos/quarantimer-a-timer-to-get-your-quarantine-into-perpective-4g7a</guid>
      <description>&lt;p&gt;I always thought that I was prepared for the coming apocalypse. After all, I had thoroughly studied all the important material. I knew what to do in all the possible situations in case a zombie outbreak was to happen, thanks to the very detailed &lt;a href="https://www.amazon.com/Zombie-Survival-Guide-Complete-Protection/dp/1400049628"&gt;Zombie Survival Guide&lt;/a&gt;, or the graphic representation of them in &lt;a href="https://www.imdb.com/title/tt1520211/"&gt;The Walking Dead&lt;/a&gt; and of course the hours of practice I had gone through on &lt;a href="https://store.steampowered.com/app/418370/RESIDENT_EVIL_7_biohazard__BIOHAZARD_7_resident_evil/"&gt;Resident Evil&lt;/a&gt;. I was ready to make the appropriate preparations to survive the riots and the killings on the streets that an anarchy state would bring, like  I saw on the &lt;a href="https://www.imdb.com/title/tt2184339/"&gt;Purge&lt;/a&gt; , or read on the &lt;a href="https://www.amazon.com/Anarchy-Hunger-Games-new-generation/dp/140918384X/"&gt;Anarchy&lt;/a&gt;. From &lt;a href="https://www.imdb.com/title/tt0116629/"&gt;Independence Day&lt;/a&gt; to the &lt;a href="https://www.amazon.co.uk/War-Worlds-H-G-Wells/dp/1604502444"&gt;War of the Worlds&lt;/a&gt;, I knew exactly what to wait from an Alien invasion, where from &lt;a href="https://store.steampowered.com/app/377160/Fallout_4/"&gt;Fallout&lt;/a&gt;and &lt;a href="https://store.steampowered.com/app/397540/Borderlands_3/"&gt;Borderlands&lt;/a&gt; I was prepared on what to wait from the aftermath of the apocalypse. Of course, I had created the appropriate playlists with all the relevant songs, from REM’s &lt;a href="https://www.youtube.com/watch?v=8OyBtMPqpNY"&gt;It's The End Of The World As We Know It&lt;/a&gt; to Muse’s &lt;a href="https://www.youtube.com/watch?v=YFrl01aPPkA"&gt;Apocalypse Please&lt;/a&gt; and from Neurosis’s &lt;a href="https://www.youtube.com/watch?v=jaxNnoKrK9o"&gt;Stones From The Sky&lt;/a&gt; to Godspeed You Black Emperor &lt;a href="https://www.youtube.com/watch?v=V9Ty3YnWN80"&gt;East Hastings&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KLHDwN-r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i5fjnt1xco0zt0vu0cnm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KLHDwN-r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i5fjnt1xco0zt0vu0cnm.jpg" alt="managing expectations"&gt;&lt;/a&gt;&lt;br&gt;
What I had never imagined thought is how much fuzz would have happened around the toilet paper. We might not live in situations quite like anything mentioned on any of the above materials, but we sure live some strange times. Here in Greece we are two weeks into the quarantine now, as in many other countries as well, which does not seem likely to change any time soon. So, we thought about creating a small project to use some of that newly found but so unpleasant free time. &lt;a href="https://www.quarantimer.com/"&gt;Quarantimer&lt;/a&gt; aims on giving all of you that are in quarantine a sense of time, keep reminding you that it actually hasn’t passed more than some days (although it already feels like months) and give a new perspective on your empty calendars. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i1iv2BPi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mwraby6qgd9rxz19jqui.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i1iv2BPi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mwraby6qgd9rxz19jqui.jpg" alt="let's hope we don't need more"&gt;&lt;/a&gt;&lt;br&gt;
The app was build with Angular. It is hosted on AWS and served through CloudFront’s CDN. Obviously, even during quarantine, there is no time for data entry, so some scrapers where build using NodeJS and Cheerio. After all, it seems like that although some zombie killing knowledge will not help a lot during this crisis, the ability to devour pop culture will help us while we &lt;a href="https://www.youtube.com/watch?v=MeJzHSxRq40"&gt;wait for all of this to blow over&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--No7YTkfF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g9p9yeop05lltoh6ulix.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--No7YTkfF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g9p9yeop05lltoh6ulix.jpg" alt="have a nice cold pint"&gt;&lt;/a&gt;&lt;br&gt;
Happy Quarantine&lt;br&gt;&lt;br&gt;
Stay Home, Stay Safe.&lt;br&gt;&lt;br&gt;
#StayAtHome #WashYourHands #StopTheSpread #InThisTogether&lt;/p&gt;

</description>
      <category>quarantine</category>
      <category>angular</category>
      <category>node</category>
      <category>apocalypse</category>
    </item>
    <item>
      <title>MacBook : Dev Setup</title>
      <dc:creator>Stefanos Vardalos</dc:creator>
      <pubDate>Mon, 12 Nov 2018 15:31:52 +0000</pubDate>
      <link>https://dev.to/stefvardalos/macbook--dev-setup-351j</link>
      <guid>https://dev.to/stefvardalos/macbook--dev-setup-351j</guid>
      <description>&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%2F2rmivrhh2w38jju1it33.jpg" 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%2F2rmivrhh2w38jju1it33.jpg" alt="MacBook Readt" width="800" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been using mostly linux for many years now but, I just got a new Macbook Pro (2018). I had moderate previous experience with macOS before but I never had one of these machines as my main gear. After my initial "wow" moments with its screen and some "wtf" moments with its (lack of) ports, I started migrating my enviroment and searching for whatever I had to install to make this beast my own. Below is a step by step guide of this procedure which covers almost all my needs as a Java / Javascript Developer, although most parts can be valuable to most people as well.&lt;/p&gt;




&lt;h1&gt;
  
  
  The missing package manager
&lt;/h1&gt;

&lt;p&gt;Before everything else, we should install Homebrew, the missing package manager for MacOS. Homebrew is mainly used for installing packages and command line utilities but, it can also be used to install normal non-open source applications.This will help a lot with the installation of all the remaining software and packages you will need and also maintaining them ( removing , cleaning dependencies etc ). To do that, open a terminal and run the below command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;≈/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just follow some on screen instructions and after that is finished, move over to the good stuff.&lt;/p&gt;

&lt;h1&gt;
  
  
  Terminal on steroids
&lt;/h1&gt;

&lt;p&gt;I use terminal a lot during my daily work so this was the first part I tried to upgrade. After some searching i found iTerm2 which covers all the features I was used to with my previous terminals ( tilix on Linux, cmder on Windows ). You can download it from its official &lt;a href="https://www.iterm2.com/index.html" rel="noopener noreferrer"&gt;page&lt;/a&gt; or, use homebrew that we previously installed :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew cask install iterm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the install there are countless things you can tinker on this app but with some more steps we will get a lot more. Next we should change the default unix shell of MacOS from Bash to Z shell. There are various pros to this move like better auto-completion and command history. Zsh comes installed on MacOS but it is better to install its latest version so, type this on your terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that check your version :&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;at the time of writing this, it should be zsh 5.6.2&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Next make zsh the default unix shell :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chsh -s $(which zsh)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can either live with just the zsh or we can install a framework that will bring along many new plugins and themes for our shell. There are various choices here but the one I got in the end is &lt;a href="https://github.com/robbyrussell/oh-my-zsh" rel="noopener noreferrer"&gt;&lt;em&gt;oh my zsh&lt;/em&gt;&lt;/a&gt;. To install it just type :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can enable whichever plugin we want from the various that the &lt;a href="https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins" rel="noopener noreferrer"&gt;framework bring along&lt;/a&gt; or new ones found online. To enable the plugins you like, you have to edit your .zshrc file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vi ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There you must find the plugins array and add the ones that you want.&lt;/p&gt;

&lt;p&gt;*some notable mentions here, zsh-syntax-highlighting and zsh-autosuggestions *&lt;/p&gt;

&lt;p&gt;Lastly, we should install a prefered theme for iTerm2. Easiest solution would be &lt;a href="https://draculatheme.com/" rel="noopener noreferrer"&gt;dracula&lt;/a&gt; which can be applied on most other apps/editors as well, although i went with &lt;a href="https://github.com/MartinSeeler/iterm2-material-design" rel="noopener noreferrer"&gt;Material Colors&lt;/a&gt;. Just download the preffered one and apply it through the Preferences page of iTerm2.&lt;/p&gt;

&lt;h1&gt;
  
  
  Brew up your Dev stack
&lt;/h1&gt;

&lt;p&gt;Now that we have our terminal set up, we can start installing all the required applications. Most of the work below can either be done through Homebrew or by downloading everything from their respective websites. There is one other thing that especially developers will need and that is the need to keep multiple versions of SDK's installed on your machine. Homebrew by default installs the latest one and, for some packages there &lt;em&gt;might&lt;/em&gt; be some older versions, but that is not the normal case. For that firstly we will install another tool, the &lt;a href="https://sdkman.io" rel="noopener noreferrer"&gt;SDKMAN!&lt;/a&gt;. Go on your terminal, type the below command and follow the on-screen instructions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl -s "https://get.sdkman.io" | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A list follows with some pretty basic installs that I, and most of us, will have to do.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Java SDK
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sdk install java
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  gradle
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sdk install gradle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  mysql
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  mongodb
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install mongodb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  elasticsearch
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install elasticsearch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, before we move over to actual applications, NodeJS is also required. For this we need the nvm tool to be able to install and change into multiple Node version. Either install the tool itself with :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or install the &lt;a href="https://github.com/lukechilds/zsh-nvm" rel="noopener noreferrer"&gt;zsh-nvm&lt;/a&gt; which will take care of easily upgrading nvm later on. After nvm's installations just install (latest or specific verions) node by typing :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm install node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which will install latest nodeJS and acompany npm.&lt;/p&gt;

&lt;p&gt;Now, lets finish this up with some tools and required editors of choice. I needed the MySQL Workbench, Docker, GitKraken as my git GUI client, PostMan for API Testing, Android Studio for Android Development, Toolbox by Jetbrains which will handle WebStorm for Javascript projects and IntelliJ for Java projects. Furthermore I usually also use SublimeText or Visual Studio Code for simpler things. All the above can be installed with Homebrew so you could just type :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew cask install \
    mysqlworkbench \
    docker \
    gitkraken \
    postman \
    android-studio \
    jetbrains-toolbox \
    sublime-text \
    visual-studio-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After some time everything will be downloaded and installed, ready to use.&lt;/p&gt;

&lt;h1&gt;
  
  
  Required Generics
&lt;/h1&gt;

&lt;p&gt;Lastly, I made a list of some generic applications that will be needed during daily use, based on personal choice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew cask install \
    gimp \
    skype \
    viber \
    slack \
    google-chrome \
    microsoft-office \
    spotify \
    vlc \
    evernote \
    the-unarchiver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fezfdes1oh0fdossbwjpw.jpg" 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%2Fezfdes1oh0fdossbwjpw.jpg" alt="MacBook Readt" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After all these are done installing, I felt like my new and powerfull MacBook is ready to replace my old Dell as my daily driver. Many of these would not apply to anyone but following brew / cask installs it should be a breeze to set up a new machine and have it ready to use in no time.&lt;/p&gt;

</description>
      <category>macbook</category>
      <category>macos</category>
      <category>laptop</category>
      <category>developer</category>
    </item>
    <item>
      <title>CookList : From idea to project to finished app</title>
      <dc:creator>Stefanos Vardalos</dc:creator>
      <pubDate>Mon, 17 Sep 2018 07:21:00 +0000</pubDate>
      <link>https://dev.to/stefvardalos/cooklist--from-idea-to-project-to-finished-app-31o0</link>
      <guid>https://dev.to/stefvardalos/cooklist--from-idea-to-project-to-finished-app-31o0</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uqykvrzk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/appidea.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uqykvrzk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/appidea.jpg" alt="Idea from a need"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Turning an idea to side project to finished app
&lt;/h1&gt;

&lt;p&gt;Every developer should try to have some time to work on a side project, either to improve his development skills, or to feed his creativity hunger. That can be tough having a full time job but, the beauty of the side project is that you can work on it on your own pace. The first step is to find an idea that you would want to work on. It can be anything but it will help a lot with the procrastination that will eventually come, if it is something close to your own interests.&lt;br&gt;
Also, keep in mind to try and experiment with new technologies during the development as it will help you advance your career but also keep it interesting till the end.&lt;/p&gt;

&lt;p&gt;When you got the initial idea, the next hard step is to actually start working on it. Even if you actually start the process (which for the most ideas you will not) there is a big chance you will abandon the project relatively soon. But, there will be ideas worth pursuing and having fun trying to finish them. One of those ideas is the CookList app.&lt;/p&gt;

&lt;h1&gt;
  
  
  Idea from daily use
&lt;/h1&gt;

&lt;p&gt;I was searching for a side project to work on but anything i started was quickly abandoned either by lose of interest or by pure laziness. Some ideas that i had were either too complicated or required a lot of work (not easily done alone). I tried to find something relative to my daily routine. One of my biggest interest is in music so, I tried to find something relative to that. I am also a regular Spotify user so, when i searched online and found out that they have an API to work with their data, I instantly started studying it to derive a plan for an application.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BroNNb9i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/ideabook.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BroNNb9i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/ideabook.jpg" alt="Idea from a need"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;em&gt;Dont be afraid to actually write down your thoughts, it helps&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;After some research on Spotify's great and &lt;strong&gt;really&lt;/strong&gt; well documented API i came up with the root of an idea, for an app that will help users to create playlists and discover new music, based on their liked artists. What i did right after that is to look online for similar projects, to draw inspiration and find new things to add. There were some applications that really close to what i had first envisioned and others that provided some quality ideas in the end. Notably, the ones most important are these :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.music-map.com"&gt;Music-Map&lt;/a&gt; is a web app that finds bands that a user will probably like depending on his favorite band. It is part of a bigger discovery system called &lt;a href="http://www.gnod.com/"&gt;Gnod&lt;/a&gt; or Global Network of Discovery.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://everynoise.com"&gt;everynoise&lt;/a&gt; is a great project that tracks and analyzes data from Spotify to generate a scatter-plot of all the music genres.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://playlists.net"&gt;playlists&lt;/a&gt; is a very well known app that generates a playlist on Spotify based on a single artist/group that the user will provide. You can also search and listen other people's playlists.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.musicroamer.com"&gt;Musicroamer&lt;/a&gt; is a web app that visualizes the relations of the artists you like, generating a graph starting by a single group/artist that the user will provide, using data from last.fm.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All the above projects gave me inspiration and helped me to fine-tune my idea and create something similar but also unique. The key difference of this idea is that the user will create a list of artists, starting with one that he will provide and following with related to that one and to his subsequent selections. This list will serve as the "recipe" for playlists as he, and other users later on, will be able to create playlists with random tracks from those artists. Furthermore, informations about the artists picks and also the tracks of the playlists will be visualized accordingly. And so, the journey to build CookList began (got it? because it creates "recipes"...ha).&lt;/p&gt;

&lt;h1&gt;
  
  
  App Development
&lt;/h1&gt;

&lt;p&gt;Next up you have to pick the stack you want to work with. On the Front-End part, i was arguing between picking React (with i have only played around a little with some tutorials/small projects) or Angular (which is my main framework at work) and i ended up picking Angular because i wanted to checkout Teradata's Covalent UI Platform. On the Back-End part I played around with the idea of a Spring-Boot application but i ended up with a NodeJS along with Express Framework instead as it would have been much more suitable for the application needs. As for database I went with the safe choice of MongoDB.&lt;/p&gt;

&lt;p&gt;I started implementing my backend service creating simple endpoints that i knew later on will transform into the actual application features. Another useful point that can be made here is that you don't have to make everything from scratch. Search and reuse what others have created and try to build upon them. What came as a great help at that point is a very nice NodeJS wrapper for the Spotify's API from &lt;a href="https://github.com/thelinmichael/spotify-web-api-node"&gt;thelinmichael&lt;/a&gt;. Using that I started creating endpoints that were searching for artists, then getting related artists, then getting tracks for a specific artist etc. Once I had the very basic logic written in endpoints, i knew i could start implementing a simple accompanying UI.&lt;/p&gt;

&lt;p&gt;The UI part of the applications is a regular Angular 6 app but as i said i wanted to use Covalent UI Platform with it. The first iterations of the applications were build solely on Covalent's UI style but the outcome wasn't quite to my liking. Although it was handy that i could use all the powerful components of Covalent's Platform, the aesthetics of it were too much like a dashboard instead of an app. Although i kept to my initial decision for some time, in the end i removed most of Covalent and went on to transform a beautiful HTML5+CSS3 theme from &lt;a href="https://html5up.net/"&gt;html5up&lt;/a&gt; into Angular code. Moreover, i wanted to be able to create a couple of visualizations that will enrich the data i could get from Spotify's endpoints. For that purpose i chose the powerful &lt;a href="https://ecomfe.github.io/echarts-doc/public/en/index.html"&gt;Echarts&lt;/a&gt; library with which i could build beautiful charts and diagrams for the purposes of the application. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yThu0tbg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/developcoffee.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yThu0tbg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/developcoffee.jpg" alt="real development"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;em&gt;Coffee, the real power of the developer&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The development went on to finish up the core functionality of the idea. The required steps could be summed up into the below :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A user should be able to type and search for an artist&lt;/li&gt;
&lt;li&gt;Related artists of the searched one would be available for selection&lt;/li&gt;
&lt;li&gt;Every subsequent selection would trigger a new request for related artists (populating the initial list with the new/unique ones)&lt;/li&gt;
&lt;li&gt;Creating a pool of popular songs from the selected artists and randomly picking a subset of those.&lt;/li&gt;
&lt;li&gt;If the user wants to save the resulting playlist to his Spotify, authorize him by loging in to Spotify and getting a required access token.&lt;/li&gt;
&lt;li&gt;Create the playlist on user's profile and add the required tracks.&lt;/li&gt;
&lt;li&gt;Save on MongoDB the created recipe and the resulting playlist.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the initial rounds of development other ideas came up as well, like :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;response caching ( &lt;a href="https://www.npmjs.com/package/node-cache"&gt;node-cache&lt;/a&gt;  is a very powerful library for that ).&lt;/li&gt;
&lt;li&gt;storing track's features on MongoDB for created playlists so users could see recipe's graphs without logging in.&lt;/li&gt;
&lt;li&gt;storing and re-using user's refresh token instead of requiring logging in every time&lt;/li&gt;
&lt;li&gt;Tag filtering based on genres.&lt;/li&gt;
&lt;li&gt;Utilize &lt;a href="https://unsplash.com"&gt;Unsplash's&lt;/a&gt;  API ( along with their own unsplash-js library ) to download a random image to set as playlist's cover.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  App Deployment
&lt;/h1&gt;

&lt;p&gt;When all the above were finished and i was quite satisfied with the outcome, i decided to freeze the new features and go on with the deployment of the application. I searched online to check what my options were for serving a NodeJS application and, although during development i was experimenting with Heroku, eventually i ended up picking Google Cloud which offers a great free trial were you get to spend up to 300$ on your first year, more than enough for at least the tests i wanted to run. Most importantly, as i had previous experience with AWS infrastructure, i wanted to check Google Cloud as well, were i had limited experience mostly with Google AppEngine. From then on, i started studying about Docker and Kubernetes where i had very little knowledge and after a while i could build a docker image of my application, upload it to Google's Container Registry and through Kubernetes deploy it into a cluster, using gcloud cli tool.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n4j2v1CO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/containers.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n4j2v1CO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/containers.jpg" alt="docker with gcloud"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;em&gt;Not that kind of containers&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Last step was to make the application truly public. So, i went over to &lt;a href="https://www.godaddy.com/"&gt;GoDaddy&lt;/a&gt; and bought a brand new .app domain and after some struggles ( .app domains enforce https, something i didn't know at first and resulted in some weird situations ) &lt;a href="https://cooklist.app"&gt;CookList&lt;/a&gt; was up and running for anyone to see and use.&lt;/p&gt;

&lt;h1&gt;
  
  
  Future Improvements
&lt;/h1&gt;

&lt;p&gt;There are many more ideas and features that can be built into this project. The most obvious and missing one for a web app of the 21st century is the social integration like facebook sharing etc. Other than that, the next big feature on the core mechanism is to be able (upon user request with specific option flag) to mix along tracks from artists/groups that you didn't pick but you will most probably like. Another one is to be able to find related recipes (based on the artists that you picked) and also be able to filter the recipes on artists just like you can do now based on genres. Some other form of visualization or other way of using the track's feature data might be a good idea as well. Last but not least, this app can become a mobile application as well, either using a framework like NativeScript or by building it up from scratch for Android and Iphone.&lt;/p&gt;

&lt;h1&gt;
  
  
  Sum Up
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oMbE78UT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/cassette.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oMbE78UT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://stefvardalos.github.io/img/posts/cooklist/cassette.jpeg" alt="only real playlist"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;em&gt;The only real Playlist&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;All this work took me almost 2 months, based on Github's commit history although, most of that time i had limited job done during week days as most of my commits are during weekends. During that time I learned to use a new UI Platform, further develop my skills on NodeJS and MongoDB and, familiarize myself and learn to use Docker and basic functions of Kubernetes along with Google Cloud Infrastructure. On top of that, in the end my work was materialized into a working app with which i am quite happy and i see myself coming back to it and implement more things either from my ideas or from user's requests. &lt;br&gt;
So, I strongly suggest everyone to do the same. Pick your next side project, start it up either by yourself or in a team of friends, develop features, learn new things and most importantly, have fun doing it. If all the above are there then you will benefit a lot from the process and if you get to the finish line, then you will also have something working and available for anyone to see.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>spotify</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
