<?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: Georgi Yanev</title>
    <description>The latest articles on DEV Community by Georgi Yanev (@jumpalottahigh).</description>
    <link>https://dev.to/jumpalottahigh</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%2F124023%2F9f985d7d-820b-4d1b-b8b3-779a0be7657b.jpg</url>
      <title>DEV Community: Georgi Yanev</title>
      <link>https://dev.to/jumpalottahigh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jumpalottahigh"/>
    <language>en</language>
    <item>
      <title>Cybersecurity in Smart Homes</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Tue, 04 Jan 2022 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/cybersecurity-in-smart-homes-30m6</link>
      <guid>https://dev.to/jumpalottahigh/cybersecurity-in-smart-homes-30m6</guid>
      <description>&lt;h2&gt;
  
  
  I. Introduction
&lt;/h2&gt;

&lt;p&gt;The term “Smart Home” has quickly become a lot more mainstream and common over the past decade. There are many devices labeled as “smart” by simply having the capability to connect to your local WiFI network and usually provide some form of a remote control, usually via a mobile app for your phone. On the other hand, you could also have a completely autonomously ran system, where the entire home collects data from sensors, builds machine learning models to analyze and learn about the home’s usage and actively applies adjustments - for example warms up certain rooms before your arrival home, turning off lights when no people are in the room and perhaps handling even more complex scenarios. For the sake of this paper we would also consider the simpler connected devices as a smart home, because in the end, especially when it comes down to cybersecurity in smart homes, more often than not the attack vector would be a connected device.&lt;/p&gt;

&lt;p&gt;There are a majority of open source solutions available to manage the devices in a smart home. One such example is Home Assistant[1]. It’s a piece of pretty versatile software allowing you to setup and connect devices, gather data, monitor sensors and also setup interconnections and automations between devices that would otherwise be not possible to integrate.&lt;/p&gt;

&lt;p&gt;Finally, the rise and improvement in capabilities of personal voice activated assistants such as the Google Assistant[2], Amazon Echo (Alexa)[3], Apple’s Siri[4] and their integration into smart speaker devices has also played a significant role in the growth of the smart home sector. The simple voice activation that these devices use allows users to quickly turn on and off lights, and issue other commands in their homes.&lt;/p&gt;

&lt;h2&gt;
  
  
  II. What is a Smart Home?
&lt;/h2&gt;

&lt;p&gt;What really is the definition of a smart home? As mentioned in the introduction, as of the early 2020’s this term’s definition can be still pretty loose. For the sake of this paper we will consider a smart home any home with more than a few smart devices. We do this mainly because the focus here is on the cybersecurity side of things, and not so much in debating whether a simple remote interface for a device makes a home smart. In the end, when it comes down to security, any device with some form of connectivity to the internet and out of the home could be a potential weak link and lead to breaches.&lt;/p&gt;

&lt;p&gt;In their paper Stanislaw Piasecki, Lachlan Urquhart and Professor DerekMcAuley describe a smart home as “a contemporary application of ubiquitous computing that incorporates intelligence into dwellings management for comfort, healthcare, safety, security, and energy conservation”[5].&lt;/p&gt;

&lt;p&gt;In general, my opinion is that a smart home is any home with any type of sensors or IoT devices that provide functionality and value that the homeowner appreciates. This can be subjective, but just to provide some example, it could be anything from providing advanced statistics about the home’s air quality (CO2, other harmful gases), thermostats, human presence detection via motion detection sensors, functionality and ability to toggle on and off lights and other devices via a smartphone, by asking a voice assistant such as Google Home, Alexa or Siri or by utilizing home automation based on data and event triggers.&lt;/p&gt;

&lt;p&gt;Another slightly more complex example would be a smart home automation system such as Home Assistant which can be ran on a Raspberry Pi and is a single place for managing all your smart devices and can provide the capability to do more complex automations such as opening your blinds at sunrise and starting up your coffee machine in the morning based on custom logic and triggers.&lt;/p&gt;

&lt;h2&gt;
  
  
  III. Smart Home case study
&lt;/h2&gt;

&lt;p&gt;In 2016 one of my hobbies was to tinker with various embedded devices, which in turn quickly led me to the world of smart home automation. Starting from smart light bulbs (Philips Hue, Ikea Tradfri, Yeelight), smart outlets, custom made sensors (temperature, humidity, motion sensors), Google Home, Alexa, and running the open source software Home Assistant to consolidate it all and create automations between devices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/9befd05e87e80e0278957b2a5b34ffe8/50322/cybersecurity-in-smart-homes-1.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1A7fIza9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/9befd05e87e80e0278957b2a5b34ffe8/50322/cybersecurity-in-smart-homes-1.png" alt="Home Assistant’s user interface with sensors and switches" title="Home Assistant’s user interface with sensors and switches" width="550" height="306"&gt;&lt;/a&gt;Figure 1. Home Assistant’s user interface with sensors and switches.&lt;/p&gt;

&lt;p&gt;I genuinely enjoyed some of my automations I had set up, some even more so than others, for example, I had a morning coffee automation setup that I ran for literally 1.5 years while I had the smart home setup going. It was great. The sound and the smell of the brewing coffee definitely adds to the morning wake up experience. My smart home configuration is open source and available on GitHub for inspiration and others to learn from [6]. During the time I ran my smart home setup I had no complaints and there was always room to improve, to add new devices and automations. If anything, there hardly ever was enough time to do it all because new projects and ideas kept popping up. Smart home automation projects can be for the most part still very time consuming, expensive in some cases, and not very straightforward to implement.&lt;/p&gt;

&lt;h2&gt;
  
  
  IV. Challenges with IoT devices
&lt;/h2&gt;

&lt;p&gt;Having any smart home being pretty much set up with IoT devices, it’s important to take a look at the current IoT devices market and state. Whether we are talking about a full-fledged smart home, or just a normal everyday home, the fact of the matter is that in most homes some amount of IoT devices are present. With some 7 billion IoT products in 2018 and projected to have up to 21.5 billion products connected to the internet by 2025 [5], this is a very fast growing market and many devices are coming online every day. While some people find some of these devices useful and others do not, it is a trend, it is a reality and it’s happening as we speak.&lt;/p&gt;

&lt;p&gt;As any emerging technology, there have been and still are some challenges with smart devices. One example to point out is with pretty much any Chinese traditional manufacturing company. For example, a company that had manufactured fridges for a long time, might not necessarily have big cybersecurity traditions when it comes down to now producing “smart” fridges that are able to get on your local network and make requests outside of it and now offer potential attackers an easy attack vector to exploit, because of overlooked security.&lt;/p&gt;

&lt;p&gt;These issues could be “on purpose” technically speaking, because the company is trying to save on cost and using cheap and lower quality components, or it could be completely unintentional because security is not a priority for them and they do not have the necessary personnel to test the products and verify that they are secure and safe to use and comply with certain standards. In some cases, this security oversight might simply be due to the lack of experience and simply not being aware of and not considering cybersecurity scenarios. However, whatever the case, it’s a fact that this still happens with many consumer products and companies. Sometimes even bigger companies face similar challenges.&lt;/p&gt;

&lt;p&gt;Another challenge with smart devices is the market fragmentation. Of course on one hand having competition is good, because we want companies to compete with each other which drives further innovation and ideally leads to lowering the cost of consumer products. On the other hand, a heavily fragmented smart home device market and lack of communication standards thereof leads to very poor user experience both when setting up the devices and when simply using them on a day to day basis.&lt;/p&gt;

&lt;p&gt;Luckily, just a couple of years ago many companies that produce smart home devices formed the Matter project [7]. Matter, formerly known as Project CHIP, is focused on creating more connections between devices, simplifying development for manufacturers and increasing compatibility for consumers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/4055cd020998c0b712996ea1f76afb48/3f8f2/cybersecurity-in-smart-homes-2.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tRawv0hi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/4055cd020998c0b712996ea1f76afb48/3f8f2/cybersecurity-in-smart-homes-2.png" alt="Project Matter’s architecture overview" title="Project Matter’s architecture overview" width="517" height="313"&gt;&lt;/a&gt;Figure 2. Project Matter’s architecture overview&lt;/p&gt;

&lt;p&gt;Having solid communication standards that manufacturers could follow goes a long way towards ensuring interoperability as well as improving security of IoT and smart home devices. That is certainly a step in the right direction and is going to alleviate some of the problems with smart home devices. However, as of the time of writing this article, the market is still largely fragmented and many over the counter devices simply lack good user experience, have security issues, or lack options for the user to improve the security of the product themselves. One final challenge with IoT devices I’d like to mention, is really more of a challenge with some end users. Many everyday consumers don’t necessarily have deep cybersecurity training or even just technical know-how to understand certain aspects of how their new smart device functions, or why a particular functionality might be a security concern. Users often don’t even change the default passwords on their modems, let alone a new security camera they bought to monitor the baby at night. At the same time, lists of default passwords are pretty frequent and easily available on the internet and that makes a bad actor’s job quite a bit easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  V. Smart home and IoT device attack vectors
&lt;/h2&gt;

&lt;p&gt;In terms of security, some of the more common issues that we will take a look at in this paper are simply born out of poor security practices by manufacturers or end users. In many cases the security is an overlooked aspect by manufacturers or simply cut down in order to save on cost and keep device prices low. From the end users’ perspective, there’s many times negligence when it comes down to security credentials - ranging from weak or reused passwords, to just leaving the default device password as it comes from the factory without changing it. These dramatically simplify the work a bad actor needs to do in order to gain access to an IoT device. One way to categorize possible IoT attacks is described in Herman Heriadi and Geraldi Catur Pamuji’s paper “Cyber Security in IoT communication (Internet of Things) on Smart Home” [8]. In a nutshell, they specify five types of attacks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Physical attacks. Which is basically literally destroying the hardware. For instance an outdoor mounted security camera.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Side channel attacks. This is utilizing side information to make conclusions and educated guesses about encrypted parts of the system. For instance this could be time attacks, power analysis attacks, interference analysis attacks, electromagnetic attacks, and environmental attacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cryptanalysis attacks. Attacks focused on attempts to crack the encryption, figuring out the encryption key . Some examples include Ciphertext-only attack, a Known-plaintext attack, and a Man-in-the-middle attack.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Software attacks. “These are the primary source of security vulnerabilities in the system. The software attack exploits the vulnerability of implementation in the system via its own communication interface. Such attacks include exploiting buffer overflows and using program Trojan horses, worms or viruses to intentionally inject malicious code into the system.”[8]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Network attacks. Wireless communication systems are vulnerable to network attacks due to the broadcast nature of the transmission medium. There could be passive and active attacks. For example monitoring and eavesdropping, traffic analysis, and camouflage are considered passive attacks. While denial of service attacks, subversion nodes, node corruption, node capture could be considered active attacks.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ransomware among IoT devices is something that has seen growth lately [9]. Ransomware is a kind of malware with the aim of rendering a victim’s computer unusable or inaccessible, and then asking the user to pay a ransom to revert the destructive encryption. Ransomware attack growth rate results show that the number of attacks for Cryptowall and Locky ransomware are notably increasing therefore, these ransomware families are a potential threat to IoT devices. Ransomware attacks can be pretty devastating if the user loses access to their information. As a good practice measure it is recommended to keep back ups of all of your data, and a few copies for redundancy at that. Ideally, you want to always have another copy of your data on site, as well as at least one backup copy off site. Ransomware in the case of a hacked IoT device could also mean not necessarily loss of data or access to data, but it could be a loss of control over a service or the device itself. Being prevented from being able to adjust your thermostat if the weather is too hot or too cold outside is just one example that comes to mind.&lt;/p&gt;

&lt;p&gt;Some network attacks or software level exploits against particularly sensitive devices, such as smart home hubs that may in turn contain IP address maps, lists of all the devices on the network, mac addresses and sometimes even authentication tokens, could be quite devastating. Recommended counter actions are to always practice using long strong passwords, ideally random generated, never re-used between other services and devices. Keep all network ports closed that do not need to be open on your main gateway, use two factor authentication whenever possible, be careful what devices you allow access to your internal smart home network, and run regular checks for intruders on the network. There are many guides and open source projects to help secure your network further, as well as prevent tracking by completely blocking access to third party marketing sites. At the very least the use of a Virtual Private Network (VPN) is also highly encouraged and using firewalls and similar devices to further strengthen the network’s security is also a good idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  VI. Conclusion
&lt;/h2&gt;

&lt;p&gt;In the end, everything in mind, the fact is that as far as smart homes are concerned, it is still very early days and most of the benefits are yet to be discovered and implemented. I firmly believe the smart home can deliver orders of magnitude of value the more sensors and devices are connected and only after we have real AI or Machine Learning based solutions in place, to the extent where the human has to do hardly any adjustments to the home’s systems.&lt;/p&gt;

&lt;p&gt;In a future where a home could be largely sustainably powered by solar, wind, thermal or other renewable energy source, having a smart home making the decisions on when to turn on and off devices, how to optimize their power consumption during different hours and heavy load hours, could be not only immensely beneficial, but also sustainable and economic. This would allow us to only consume energy and water that we actually need and avoid any excess overconsumption.&lt;/p&gt;

&lt;p&gt;I’m sure smart homes could be perhaps considered as a controversial topic by some, and perhaps some purists would never even want to set foot in one. But in the end, whatever your personal preference, there’s a lot of value to be had in smart homes (and definitely even more so when it comes to these smart buildings being a part of smart cities too). The environmental impact could be considerable based on the energy savings across millions of households, the time savings and quality of life improvements could be very significant too. The changes could have a significant impact on saving countless hours for every human, when you no longer have to put cognitive effort into thinking what you should set your thermostat to for the night, or go around the house and flip switches off to turn off all the lights before bed, just to name a couple of simple examples. With AI models monitoring and adjusting house systems, you could have fridges that maintain the perfect temperature in different compartments of the fridge, based on the type of food stored there, or even just adjusting how the temperature is maintained based on the amount of items in the fridge.&lt;/p&gt;

&lt;p&gt;So objectively speaking there’s a lot of benefits to be had from having a smart home, but cybersecurity is and will always be a concern as long as we are talking about anything connected. Cybersecurity should never be an afterthought in this day and age and it’s important that all parties take it seriously - from the manufacturers of the devices to the end users taking them into use. I strongly believe that this will improve in time, as security measures and concerns have already improved since the dawn of the Internet to this day. More and more users become more security conscious, as we move all of our lives online we more and more realise how powerful and important our data is, and so we value and secure our connections and devices better. There’s a lot more everyday people nowadays who know what a VPN’s benefits are and actively use password managers to keep their credentials for different sites safely stored.&lt;/p&gt;

&lt;p&gt;Cybersecurity in smart homes should and will be an increasingly important topic in the near future, especially as homes become more autonomous and capable. It is important that manufacturers now start doing due diligence and improve security implementations across the board. There have to be dedicated security tests for even the simplest of IoT devices and it should never be overlooked. And taking the time to secure our devices is an important step that will prevent a lot of damages and headaches down the road and would allow smart homes to truly deliver the value they are capable of in the long run.&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;[1] Home Assistant [Internet, cited 2021 December] Available from: &lt;a href="https://www.home-assistant.io/"&gt;https://www.home-assistant.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] Wikipedia [Internet, cited 2021 December] Available from: &lt;a href="https://en.wikipedia.org/wiki/Google_Assistant"&gt;https://en.wikipedia.org/wiki/Google_Assistant&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] Wikipedia [Internet, cited 2021 December] Available from: &lt;a href="https://en.wikipedia.org/wiki/Amazon_Alexa"&gt;https://en.wikipedia.org/wiki/Amazon_Alexa&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] Wikipedia [Internet, cited 2021 December] Available from: &lt;a href="https://en.wikipedia.org/wiki/Siri"&gt;https://en.wikipedia.org/wiki/Siri&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] Stanislaw Piasecki, Lachlan Urquhart, Professor DerekMcAuley. Defence against the dark artefacts: Smart home cybercrimes and cybersecurity standards. Computer Law &amp;amp; Security Review, Volume 42, September 2021, 105542&lt;/p&gt;

&lt;p&gt;[6] GitHub [Internet, cited 2021 December] Available from: &lt;a href="https://github.com/jumpalottahigh/YAR-Home-Assistant-Configuration"&gt;https://github.com/jumpalottahigh/YAR-Home-Assistant-Configuration&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] Matter [Internet, cited 2021 December] Available from : &lt;a href="https://buildwithmatter.com/"&gt;https://buildwithmatter.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[8] Heriadi, Herman; Geraldi, Catur Pamuji. Cyber Security in IoT communication (Internet of Things) on Smart Home. IOP Conference Series. Materials Science and Engineering; Bristol Vol. 879, Iss. 1, (Jul 2020).&lt;/p&gt;

&lt;p&gt;[9] Asma Zahra; Munam Ali Shah. IoT based ransomware growth rate evaluation and detection using command and control blacklisting Publisher: IEEE&lt;/p&gt;

</description>
      <category>smarthome</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>My 2020-2021 years in review</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Tue, 28 Dec 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/my-2020-2021-years-in-review-4d2f</link>
      <guid>https://dev.to/jumpalottahigh/my-2020-2021-years-in-review-4d2f</guid>
      <description>&lt;h3&gt;
  
  
  2️⃣0️⃣2️⃣0️⃣
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ❔ But why
&lt;/h4&gt;

&lt;p&gt;I guess this post has to start by addressing the elephant in the room - why did I skip writing a year in review last year at the end of 2020. There’s no super simple answer but at the same time it’s also not immensely complicated, and yes, it does have to do with the COVID-19 pandemic and the lockdown. Additionally, looking at my 2019 year in review, honestly, it would be pretty hard to top that. Like, you have so many special elements in that year - from a trip to my hometown of Plovdiv in Bulgaria, to a job switch and career progression, to delivering talks at events, writing my book and participating in Nanowrimo, producing a ton of content for my FPVtips YouTube channel and drone review articles for my blog, having an amazing vacation time also in Finland, after the Bulgaria trip.&lt;/p&gt;

&lt;p&gt;Just, all of that together set the bar really high. And I’m not someone looking for an excuse or afraid of high bars, but all of this definitely made things more intimidating when it came down to writing an year in review post at the end of 2020, when we had been on lockdown since March 2020, I had barely done anything, besides work, and the whole thing was a huge mind shift if anything, because it was not only me impacted, it was everyone. So looking at the list of goals I had set for myself in 2019 for 2020 most probably failed. Let’s see.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⬜ Major goals:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🎈 Have a fun time with the family. Quality vacations whether in Finland or away.&lt;/li&gt;
&lt;li&gt;💻 Build and work on cool projects. Learn new and get better at current software development skills.&lt;/li&gt;
&lt;li&gt;👨‍🎓 Learn, teach and play around with new things with Anton (Legos, robots, game dev with Unity, RC boats, ??)&lt;/li&gt;
&lt;li&gt;🎥 Release 3 videos per month for FPVTIPS on YouTube&lt;/li&gt;
&lt;li&gt;📝 Produce at least as much content for the blog in 2020 as in 2019 (~ 33k words, ~ 17 posts ballpark)&lt;/li&gt;
&lt;li&gt;📚 Diversify blog content further - articles on CrossFire radios and transmitters, long-range drone setups, Jumper radio, DJI digital FPV system&lt;/li&gt;
&lt;li&gt;🌿 Health. Work out, eating better. More focus on this, please!&lt;/li&gt;
&lt;li&gt;🚁 Fly FPV drones as much as possible 💙&lt;/li&gt;
&lt;li&gt;🏡 Buy a house&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ◻️ Minor goals:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🚤 Do at least 2 fun projects - RC snow glider / RC boat / RC FPV car&lt;/li&gt;
&lt;li&gt;🍿 Watch Avatar 2&lt;/li&gt;
&lt;li&gt;📈 Reach 500 subscribers on the FPVTIPS YouTube channel&lt;/li&gt;
&lt;li&gt;🤞 Watch Space X crewed launches&lt;/li&gt;
&lt;li&gt;📼 Get better and more efficient at video production&lt;/li&gt;
&lt;li&gt;🎤 Improve audio and video capture quality&lt;/li&gt;
&lt;li&gt;🎮 Play some nice new games if any come out&lt;/li&gt;
&lt;li&gt;🧪 Finish testingjavascript.com course&lt;/li&gt;
&lt;li&gt;👨‍🏫 Finish at least 5 courses from leveluptuts.com&lt;/li&gt;
&lt;li&gt;💻 Build our first computer with Anton&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can tell, it’s far from optimal. Now, I’d also like to mention that 2020 was not a complete disaster either. There were parts of it that genuinely went well still, despite the failures in other areas. One positive thing that should 100% be mentioned is about my professional life and my job. When the lockdown hit on March 13th 2020, we were sent home to work 100% remotely from that Friday onwards and the next time we popped by the office briefly was perhaps in the summer one time, and probably a total of 2 or 3 times for the whole of 2020. Remote work was definitely a bit of an adjustment at first but I quickly got used to it and it really worked out well for me. I should mention that my daily commute to work was about 45-55 minutes each way, so by definition this change saved me almost 2 hours per day in commute time alone. On top of that, the first 6 months of the lockdown my son was full time at home with me, which was absolutely amazing and reminded me of the time when Sofia started going back to work in 2017 and I had 1 month at home with Anton before he started going to daycare. Was so much fun. Work wise things not only worked out well, but I was able to work efficiently (in fact I was doing too many hours at first so had to learn to tone it down and do a normal amount of hours). I was working on exciting projects and was learning a lot, mainly React, Redux, TypeScript and Electron at the time.&lt;/p&gt;

&lt;p&gt;Most other bigger goals did not see any big improvements. And for some goals, like for example thank god I didn’t buy a house, and you’ll understand why a bit later. I have to say the thing that makes me the most sad is that I kind of dropped the ball on my growing FPVtips YouTube channel. I’m not going to excuse myself, if I wanted to I would have found a way to keep it going. Was I really a bit more busy? Yes, especially the first 6 months of lockdown as mentioned, yes I was. Could I have still made videos? Most probably yes. We were in lockdown, but I was still able to go out to a field and fly if I wanted to. However, no flying with my buddy was on the horizon for example. Again, not an excuse, but just facts. The thing about the pandemic and the lockout was that it was pretty much unprecedented, at least from the perspective of a 35 year old. So there were and are a lot of subtle things about it.&lt;/p&gt;

&lt;p&gt;The whole first year I’d say the world was kind of adjusting. To some, it was a gift from heaven - the idea to stay at home and not go anywhere and work from there and wow, so cool. To others it was probably horrific - to stay home all the time and not be able to go out, yikes. I’d say I was perhaps more into the first camp than the second. Besides the nearly 2 hours of saved daily commute time, I was also saving up probably 400-500e per month on gas and lunches. So that got reflected in my savings too, definitely not an insignificant amount of money. Add to that the fact that I was able to be at home with my son, even if he’s playing with toys, iPad or on his computer and I’m working, but still, hanging out together, was definitely my favorite. But all in all, diversifying blog content, flying more FPV drones, focus on health and working out just did not happen. To some degree I understand why, as mentioned maybe I could have somehow made it work, but honestly, in the end, I don’t push myself too hard over it; it is what it is. Most of the goals on the minor goal list still got ticked off, since they were mostly fun little things to do here and there.&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣0️⃣2️⃣1️⃣
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🤷‍♂️ More of the same? Not quite
&lt;/h4&gt;

&lt;p&gt;And since there was no year in review last year, then what about the goals for 2021 and what did happen in 2021? Nothing much more special or different really. Most of the stuff carried over as it had been going on from 2020. Working 100% remotely, still decently interesting stuff to work on and learn, a bit more heavy on the managerial focus - managing backlogs more, tasks, product releases, notes, communicating, all on top of the actual app development and taking and acting on feedback. This has been something that I’ve been and am thankful for and one of the things to keep me sane - my job. There have been some very difficult things to work on every so often that feel like banging your head against a wall for a while, until you eventually make it work somehow. And so many learnings of different things. Besides that, in 2021 we’ve been going between lockdown and not being in one, between going to the office once a month for lunch with colleagues and signing new work agreements - going from full remote to 1 day in the office per week. And then back into full remote, because of pandemic restrictions tightening again.&lt;/p&gt;

&lt;h4&gt;
  
  
  🎮 💬 Games and online communities
&lt;/h4&gt;

&lt;p&gt;Besides that, I’ve been socializing in the only possible way - online - mainly by playing World of Warcraft Classic with a bunch of folks I’d be happy to call friends. Many wholesome people we’ve been playing together with since late 2019 and being a part of that community makes me so, so happy. One of the reasons why I’ve ended up logging in nearly every evening to play with those folks. To understand why this is important we would need to go back a bit, but long story short, playing games with people has been one of the ways for me to unwind and relax. After moving to Finland and starting school and work at the same time back then, however, I was only playing some MOBAs every so often, and ended up basically only playing Heroes of the Storm matches while watching YouTube educational videos and tutorials. I did that for about 3-4 years, because one of the things I wanted to accomplish at the time was to immerse myself completely in software development stuff and there was just so much to learn in the beginning and I wanted to move quickly. So even when I was “playing” games it really wasn’t the main activity. There are PROs and CONs for each one, but in the end, after constantly pushing yourself to learn more and more and become as good of a developer as you can be by constantly watching, learning, and building things, finally, it was a nice change of pace to play a few games to just relax and be immersed in the game and truly let your brain unwind. Games like The Outer Worlds and Cyberpunk 2077 definitely helped in that regard and provided a relaxing experience while enjoying the story and playthrough of the game…&lt;/p&gt;

&lt;h4&gt;
  
  
  👨‍👩‍👧‍👦 Relationships and “belonging”
&lt;/h4&gt;

&lt;p&gt;I’ve never been an overly materialistic person. In fact, in the past few years I’ve been progressively getting more and more into minimalist living. Like, there’s so much garbage around us we don’t even need. Super unnecessary, leading to waste, pointless spending and clutter. Reason why I’m mentioning this is because I’ve been wondering and thinking a lot about “what does really matter then?” I think everyone has to answer that question for themselves, but for me, it’s relationships with people. At the end of the day, the only thing that matters is how you live your life - what kind of relationships you form with people, how they see you, how you see yourself, how you connect, how you spend time together. It turns out this one is actually pretty big for me. I’ve also been thinking about why spamming memes in Forsen’s Twitch chat felt so much fun all these years ago. Or doing other “group” activities, &lt;strong&gt;being a part of a “community”, doing something together with other people&lt;/strong&gt;. Turns out this sense of belonging somewhere, to a group, hanging out with other people, is also big for me. So it absolutely comes as no surprise why I did go back and log in to play the game, show up for weekly and seasonal events with our guild, as well as other mini communities I’ve become a part of within the game. It was the main and only way to socialize during the pandemic. Mind you, over the years, with a focus on being a parent, and just becoming more introverted by living in Finland for 10 years, I’m not the most outgoing of a person at the moment (subject to change in the near future), so it fits well, and indeed, this online socializing worked out pretty well in my opinion. It has been fun to play with these folks and I appreciate them a lot. We even had some online parties, where we literally laughed our asses off.&lt;/p&gt;

&lt;h4&gt;
  
  
  🏊 What to do? Can swim.
&lt;/h4&gt;

&lt;p&gt;In the summer of 2021 we still could not go anywhere however, so even in vacation time, we pretty much chilled around the town where we live. It was quite a warm part of the summer and the sea water was very swimmable so we did a lot of that, including going to a new nice spot with some cool rocks and pretty chill for swimming overall. Besides that, there’s not been much more to add really. We’ve been having a lot of fun with Anton to build different things and have different adventures in Minecraft, went to some rope climbing activities (looking into signing up for Tennis practice, but more on that in a bit).&lt;/p&gt;

&lt;h4&gt;
  
  
  🎓 Maybe study again?
&lt;/h4&gt;

&lt;p&gt;I did apply, got accepted into and started studying for my Master’s degree with Metropolia. And it has felt really nice to be back in school, albeit with these different conditions with masks and pandemic. We’ve been having 1 in-person and 1 remote day of school each week and that has worked out well in my opinion. For the most part, the school has been going along nicely and I’m confident with completing my Master’s thesis swiftly next year.&lt;/p&gt;

&lt;h4&gt;
  
  
  💔 It’s over now
&lt;/h4&gt;

&lt;p&gt;And finally, a 10 year relationship was kissed goodbye in September of 2021. I could write tens of pages on this topic alone, but this is “year in review” and I’ll keep it short here. In the end what difference do the details make when 1 person does not want to be with the other anymore? Regardless of overthinking or over analysing, if that’s the case, you’re better off finding out about it now, rather than later, and “convincing” or fighting for something like this is pointless. If a person wants to go all the way to not being together anymore, trying to convince them otherwise is a waste of time. One of the things that helps me cope with this is the fact that I’m ok with what I’ve done for the past 10 years and if I could go back in time, I’d do it all again. I wouldn’t change anything and I’m happy for my actions. I grew a lot from a boy who used to be so much more into arguing back in the day to being the one TO ALWAYS &lt;em&gt;try&lt;/em&gt; to calm down the setting and &lt;em&gt;try&lt;/em&gt; to get us to talk constructively about things. However, it does take 2 to tango, and communication is a 2 way street and when that’s not on point from both parties, it just doesn’t go anywhere. And our communication wasn’t on point. I’m sure I could have learnt something more and be even better, but honestly, I’m happy with what I’ve learnt and how I’ve been communicating, and for the most part this has felt as a one sided thing where only 1 person is interested in improving and that just doesn’t work out. It still hurts to lose a person, who in the end, despite her shortcomings, was someone very, very special to me, but I am forced to move on and dwelling on past stuff is just pointless.&lt;/p&gt;

&lt;p&gt;I had a saying / proverb I created myself in my early 20s, which actually and surprisingly, lives up pretty fine after all the years: &lt;strong&gt;“Feeling nostalgic about the past means you’re not creating good enough memories in the present”&lt;/strong&gt;. And it’s true. Focus on your present moment. You have no control over the past and no control over the future, but you can decide how to spend your present, so go for it. Of course, I wanna make sure I don’t sound like some wise-ass because in the end, I’ll admit, this transition has been very hard for me. Loving someone unconditionally despite her shortcomings and having to move on is not an easy task and takes a toll on you. Back in the day, I’d just drink for 2-3 weeks and go out and move on. Now, it’s different; A number of things make this transition extra hard, from where I live, to never having been single in Finland, to having a kid together, meaning you gotta keep seeing the other parent, so this is definitely interesting and something I’ve had no experience with before. In a way regardless of moving on, we’ll also be a family for the rest of our lives, and it’s weird to think about it that way, but in the end our focus is on our kid and making sure he’s as unimpacted as possible. Time will tell how this will all work out.&lt;/p&gt;

&lt;p&gt;So that’s the main reason why I mentioned earlier, thank god I didn’t buy a house. Would have added more crap to deal with in the aftermath of this, and trust me there’s been plenty to deal with as it is. One “funny” thing that I just can’t wrap my mind around is the amount of crap we threw away from home. I mentioned already about being more and more into minimalist living. Honestly, I can’t believe the amount of stuff I’ve thrown out from our home. Since the break up was in September, giving a notice to move out from our apartment takes 3 months, and we moved out after 2 months already, so those 2 months have been preparing the move and during weekends we would clean and package and throw away stuff. I filled up 2 huge trash containers with crap. Plastics, vases, chandeliers, kitchen stuff, never used christmas gifts, it’s honestly crazy. Even now, looking at how much stuff I took with me in this apartment, knowing how much stuff she took to hers and how much stuff we tossed in the garbage, and the 3 trips to recycle metal, wood, and other stuff too. Genuinely insane amounts of crap. Sorry for the rant, I just still don’t get it how it is possible :D&lt;/p&gt;

&lt;p&gt;So I’m writing this now in December 2021, when we’ve been living in the new apartment for 3-4 weeks, and it’s been fine. Time to set the goals for 2022 and set sights on the future, so here we go:&lt;/p&gt;

&lt;h3&gt;
  
  
  ⬜ Major goals:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;💹 Have a net positive situation with Anton and a minimum negative impact from family events on him&lt;/li&gt;
&lt;li&gt;🎾 Sport hobby with Anton (tennis)&lt;/li&gt;
&lt;li&gt;🏋️‍♂️ Do crossfit and lose the gut&lt;/li&gt;
&lt;li&gt;📝 Finish my Master’s degree&lt;/li&gt;
&lt;li&gt;🛂 Get Finnish citizenship&lt;/li&gt;
&lt;li&gt;🤝 Meet genuine and emotionally mature people &amp;lt;3&lt;/li&gt;
&lt;li&gt;👨‍💻 Professional development focus&lt;/li&gt;
&lt;li&gt;😊 Personal development focus&lt;/li&gt;
&lt;li&gt;💶 Diversify income streams&lt;/li&gt;
&lt;li&gt;🎥 Back to YouTube&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ◻️ Minor goals:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🕺 Have fun ;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve been already taking some solid steps towards some of those goals and many of them are actually not something you can accomplish overnight. So definitely slow and steady, baby steps, but consistency is key I guess and we can get it done. And while it’s nice to have super specific items on the list to try and check off, really in the end, things fall into about 2 main categories. One with a focus on Anton - wellbeing, education, spending time together, food, just making sure we do things right and have fun. And two - focus on myself. Improve some general level things with a deeper focus on the future, make sure I take time to relax and have fun as well, and continue learning and developing myself and hopefully, meet someone who appreciates and respects me, just as much as I do them. Here’s to an amazing 2022!&lt;/p&gt;

</description>
      <category>yearinreview</category>
      <category>discuss</category>
      <category>recap</category>
      <category>personal</category>
    </item>
    <item>
      <title>How I got into FPV drones and how you could too</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/how-i-got-into-fpv-drones-and-how-you-could-too-ncj</link>
      <guid>https://dev.to/jumpalottahigh/how-i-got-into-fpv-drones-and-how-you-could-too-ncj</guid>
      <description>&lt;p&gt;FPV stands for First Person View and in the context of FPV drones usually refers to flying a drone for freestyle or racing while viewing the feed from a camera mounted on drone as if you were the pilot. This is what it looks like:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  📖 How I got into FPV
&lt;/h2&gt;

&lt;p&gt;My professional background is in &lt;a href="https://github.com/jumpalottahigh"&gt;software engineering&lt;/a&gt;. That’s my day job, but in 2016 I got interested in smart home devices and smart home automation possibilities in particular. I wanted to go past the simple “use an app on your phone to turn on your Philips Hue lights” which was kind of the highlight of that time period.&lt;/p&gt;

&lt;p&gt;I quickly discovered an open-source project called &lt;a href="https://www.home-assistant.io/"&gt;Home Assistant&lt;/a&gt;, that I really liked and contributed to a little bit. In a nutshell that is a Python project that allows you to run a piece of software called Home Assistant on a Raspberry Pi. This software then allowed you to connect together many different otherwise unrelated smart systems or sensors. Ranging from fetching data from 3rd party APIs like weather information, to controlling your lights, blinds and many more. Most implementations were frictionless and very powerful.&lt;/p&gt;

&lt;p&gt;Some of the things I had set up were, for example, a &lt;a href="https://github.com/jumpalottahigh/YAR-Home-Assistant-Configuration/blob/master/automations/outlets/outlets.yaml"&gt;morning coffee automation&lt;/a&gt; that started brewing my coffee every day at 6:55, or automation where the lights would turn on every day 30 minutes before sunset. Cool stuff.&lt;/p&gt;

&lt;p&gt;I was also using Google Home for voice commands, Amazon’s Alexa for a while, but I always preferred Google Assistant. Sky’s really the limit when it comes down to those systems, there’s so much you could do with Bluetooth, presence sensors such as motion detectors, smart outlets, soil moisture and nutrition sensors and so on.&lt;/p&gt;

&lt;p&gt;Now I’m not going to get into much more detail about Home Assistant, as I want to get to the point and tell you how that brought me to FPV racing drones. If you are curious to learn more, however, I do encourage you to look into Home Assistant or to read my “&lt;a href="https://blog.georgi-yanev.com/smart-home/living-with-smart-home-automation/"&gt;Living with smart home automation for a year&lt;/a&gt;” article on the blog.&lt;/p&gt;

&lt;p&gt;So what has that got to do with FPV racing drones? Well, roughly around July 2017 as I was looking into how to waterproof some electronics for outdoor projects, I stumbled upon a &lt;a href="https://www.youtube.com/watch?v=HOu5hRqSDtU&amp;amp;t=172s"&gt;video by Samm Sheperd&lt;/a&gt; (I was saddened to have found out that he had since passed away. Rest in peace Samm).That video was about conformal coating the electronics on his FPV drone. He then flew around his house like crazy in the middle of winter, snow and all. I still remember what I thought to myself: “ &lt;strong&gt;I gotta have this in my life&lt;/strong&gt; ”. No joke, I was legit so hook, it didn’t make sense. I just knew I had to be doing that. It was mesmerizing.&lt;/p&gt;

&lt;p&gt;This lead to a bit more research on the subject and discovering &lt;a href="https://www.youtube.com/channel/UC3ioIOr3tH6Yz8qzr418R-g"&gt;UAVfutures&lt;/a&gt;, &lt;a href="https://www.youtube.com/user/loraan"&gt;Joshua Bardwell&lt;/a&gt; and &lt;a href="https://www.youtube.com/user/MrSteeledavis"&gt;Mr. Steele&lt;/a&gt;, who (along with Samm) are the people I credit with my getting into FPV. One of the first UAVfutures videos I watched was his 99$ drone build guide, Joshua’s series on actually learning to fly in FPV Freerider, and Mr. Steele’s alien videos convincing me he’s an FPV god from another world and inspiring me to try to achieve 5% of his skill set in my lifetime of flying drones.&lt;/p&gt;

&lt;p&gt;SO, I ended up ordering an Eachine Wizard x220 in August 2017 and I started my FPV adventure. I also &lt;a href="https://blog.georgi-yanev.com/fpv/getting-started-with-fpv-drones/"&gt;started writing about my experience on my blog&lt;/a&gt;. (and mostly really fixing the issues I had and learning along the way).&lt;/p&gt;

&lt;p&gt;I quickly learned how crappy the stock props of the Wizard were, when they shredded on full throttle and my quad fell out of the sky, I got better antennas, modded my box goggles to record DVR and got better at flying and started crashing much less over time. I was also lucky to have a buddy of mine join me in the FPV adventures.&lt;/p&gt;

&lt;p&gt;I’ve loved the experience and all the learnings so far, but I’m sure our hobby can still be pretty intimidating to many beginners, so here’s my message: “ &lt;strong&gt;You don’t have to know it all beforehand. It’s ok to learn at your own pace as you go.&lt;/strong&gt; ”&lt;/p&gt;

&lt;p&gt;Also, worth noting is that many things are so much less intimidating and so much easier nowadays than when I started and that’s a great thing! You can start off with a pre-built model and do modifications and adjustments to it as you go and as you learn. In my case, my Wizard x220 has only kept its original frame, PDB and Flight Controller. Since then, PDBs are now gone, and I have swapped out everything else - receiver, vtx, camera, motors, ESCs have all been changed.&lt;/p&gt;

&lt;p&gt;But yea getting into FPV is just not as smooth as butter just yet. You will need to most of all have that “willing to learn mentality”. That’s what it’s all about. You don’t have to know much to start, you can learn as you go, but you have to be willing to learn. The amount of how much you need to learn as you go, however, I think has gone down over the past few years and is on a downwards trend and will only keep declining as parts and quads keep getting better.&lt;/p&gt;

&lt;p&gt;That being said and while I’m all for lowering the barrier of entry so that more and more people can join the hobby and feel less intimidated at first, I think learning and tinkering with components are a fundamental part of it and are not going anywhere.&lt;/p&gt;

&lt;p&gt;I’m trying to do my part in helping more people take flight and enjoy FPV, mostly because I think it’s an awesome hobby and so much fun. If you’d like to help me and support me and others in doing so, come &lt;a href="https://www.youtube.com/channel/UCCh3SK2EktDdOQkEOTDmSCg/"&gt;visit the FPVtips YouTube channel&lt;/a&gt; and tag along for the ride! We surely appreciate your help!&lt;/p&gt;

&lt;h2&gt;
  
  
  👩‍🎓 How you could get into FPV
&lt;/h2&gt;

&lt;p&gt;So how could you get into FPV? Everyone learns in a different way, but keep in mind time in a simulator is really time well spent. It will save you months of frustration, repairs, money and forever lost quads. On the other hand, if you would like to learn with the real deal, so long as you know what to be careful about, I think that could work out too.&lt;/p&gt;

&lt;p&gt;I did just a little bit of time in a simulator and was itching to try the real thing. I paid attention to how to set up my failsafe, so my quad wouldn’t fly away on me, and I was always careful and very respectful of 5-inch quads and the damage they could do with their props. That’s no joke! Those things’ props can do some real damage, so always stay away. In addition, being thoughtful and careful with your lipo batteries is a must too. Once you know and are aware of those main dangers which are VERY SERIOUS topics, you can have fun for the most part.&lt;/p&gt;

&lt;p&gt;Go to a huge open preferably grassy field and fly. Why grass? Well, I went flying over concrete and gravel on my first flight, crashed a few times, lost a bunch of screws and caused some minor damage to my frame. Then I went flying over grass for a softer impact while I kept learning how not to crash.&lt;/p&gt;

&lt;p&gt;Try and fly low, not too close to yourself and just give it a shot. You will be crashing, try to have those crashes as controlled as possible, try to learn the basics, get familiar with throttle control and then pitch, roll, and yaw. Learn how to be quick on the disarm switch to prevent further ESC or motor damage. Practice some line of sight flights, do some FPV. (I never really got very good at Line of sight as I tend to lose orientation fairly quickly). Don’t get discouraged, it turns out, I’m just better at FPV than at line of sight.&lt;/p&gt;

&lt;p&gt;You do you. I’m not advocating jumping in and flying like crazy without any simulator preparation, but I do understand you’re anxious to try the real thing and don’t want to become a master of the simulator first. Again &lt;strong&gt;I advise for caution and taking this seriously&lt;/strong&gt; , flying far away from people and buildings at first, until you get decent at flying.&lt;/p&gt;

&lt;p&gt;You are also lucky because nowadays there’s a great way to get into FPV without much of the stress that comes with flying a 5-inch drone. That’s micro-drones and toothpicks. Those little quads in many cases fly almost as good as a bigger drone and will deliver an experience that actually translates well to the experience you would get when flying a bigger drone. That’s cool cause your practice on a smaller drone will not be in vain and the muscle memory and the flight control learnings will translate nicely to when you start flying a bigger drone.&lt;/p&gt;

&lt;p&gt;And while I am a fan of flying the real thing, I have to say there are plenty of really cool simulators out there nowadays. My favorite is &lt;a href="https://www.liftoff-game.com/"&gt;Liftoff&lt;/a&gt;, I have that on Steam, and you could also look into &lt;a href="https://thedroneracingleague.com/"&gt;Drone Racing League&lt;/a&gt; or the new &lt;a href="https://dcl.aero/"&gt;Drone Champions League&lt;/a&gt; as well as &lt;a href="https://www.velocidrone.com/"&gt;Velocidrone&lt;/a&gt; and a few others.There are no drone repairs involved or the walk of shame to go get your drone after you crash in the sims. Particularly useful when trying to learn and master new tricks. So I definitely encourage you to try to spend some time in a simulator. Of course, you want to do that with your radio plugged into your computer, instead of some other gamepad or joystick. Again, it’s all about muscle memory.&lt;/p&gt;

&lt;p&gt;But in general, it is a great time to join the hobby of FPV racing and freestyle drones. You can grab a very decent and relatively safe drone for about less than a hundred dollars. A radio for about a 100 or so, some box goggles to get you started, or if you are 60% sure you would commit to the hobby, go for a 250$ pair of goggles that will be good for at least a few years if not longer. Good simulator software, with free trials or free levels, that will be enough to get you started. There’s also plenty of information on specific topics and a handful of YouTube channels highly recommended to follow, in order to stay up to date with what’s going on in the hobby.From then on, it’s all about ripping packs, alone or with some friends, flying different spots and just having fun.&lt;/p&gt;

&lt;h4&gt;
  
  
  Here are some action points on how you may take this further:
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;In no particular order, as mentioned above this is your journey and how you go about it is your own choice depending on what works for you. This is just to provide some concrete next steps if you are interested.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Watch YouTube videos on building and flying FPV drones&lt;/li&gt;
&lt;li&gt;Find a local club and watch in person as others fly (and maybe try yourself)&lt;/li&gt;
&lt;li&gt;Buy a radio transmitter and practice in a simulator (&lt;a href="https://www.liftoff-game.com/"&gt;Liftoff&lt;/a&gt;, &lt;a href="https://www.velocidrone.com/"&gt;Velocidrone&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Buy a micro drone / toothpick class drone (there are some great suggestions below)&lt;/li&gt;
&lt;li&gt;Buy a 5-inch mini drone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enjoy your journey in FPV and happy flying!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re curious to learn more, have a look at &lt;a href="https://blog.georgi-yanev.com/fpv/gear-2019/"&gt;what’s in my FPV backpack and what’s the gear I use and the drones I fly&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>drone</category>
      <category>smarthome</category>
      <category>story</category>
      <category>fpv</category>
    </item>
    <item>
      <title>How to build a Ryzen 3rd gen computer</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/how-to-build-a-ryzen-3rd-gen-computer-49ig</link>
      <guid>https://dev.to/jumpalottahigh/how-to-build-a-ryzen-3rd-gen-computer-49ig</guid>
      <description>&lt;p&gt;Every 4-5 years I build a new computer. It started 20 years ago (in 1999) when my dad and I ordered our custom-built configuration from a computer parts shop in Bulgaria.&lt;/p&gt;

&lt;p&gt;Then, in 2006 I specced and ordered a newer PC, 4 years later in 2010 I got another machine - again specced by me, but built by the company I ordered it from.&lt;/p&gt;

&lt;p&gt;Finally, in 2014, I ordered the parts only and built my computer, which I’m typing this post on. It’s a good machine and it certainly has a few more years in front of it, but for several reasons, it’s time to build a new computer.&lt;/p&gt;

&lt;p&gt;And while my 2014 PC was an Intel-based system with an AMD graphics card, now we’re switching things around and are going to be building an AMD system, Ryzen 3rd gen based, with a GeForce RTX GPU.&lt;/p&gt;

&lt;p&gt;I sourced all the parts from a local, Finnish shop in Helsinki. Black Friday deals helped get a discounted price on some items, but not all.&lt;/p&gt;

&lt;p&gt;Because I got a new monitor in the summer - a 1440p, 144 Hz one, I didn’t need to spend money on that. I also have a mechanical keyboard, decent Logitech mouse and a Corsair headset that I’ll be carrying over to the new PC. So let’s have a look at what we got in terms of components.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/fb30b613d4d30f89b13b311ffce55f82/dd60f/how-to-build-a-computer-1.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3OUBjmQM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/fb30b613d4d30f89b13b311ffce55f82/acf6b/how-to-build-a-computer-1.jpg" alt="The components for the PC build" title="The components for the PC build" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔩 Components
&lt;/h3&gt;

&lt;h4&gt;
  
  
  CPU
&lt;/h4&gt;

&lt;p&gt;As most of the component decisions depend on what CPU you go with, let’s start with that. I’ve been very happy with the Intel i5 I’ve been running for the past 6 years. It’s been performing well for most of the work and gaming I’ve been doing with it. I’m also fortunate to say that while money was not a big limiting factor when pulling off this build, I did try to stay cost-efficient and had a rough budget of 1700 euros for the PC itself.&lt;/p&gt;

&lt;p&gt;Last summer I started a YouTube channel and video editing and rendering have joined gaming and software development as tasks I’d like the computer to be excelling at.&lt;/p&gt;

&lt;p&gt;Coupling that with a nice Black Friday deal on the &lt;a href="https://amzn.to/352MJMu"&gt;Ryzen 7 3800x 8 Core Processor&lt;/a&gt; and the choice was made.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/b412ec9e6e72e7172e9e03b4d9cbca86/dd60f/how-to-build-a-computer-7.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yr9HlKKP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/b412ec9e6e72e7172e9e03b4d9cbca86/acf6b/how-to-build-a-computer-7.jpg" alt="Ryzen 7 3800x CPU" title="Ryzen 7 3800x CPU" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This determined the motherboard, as we need to have an AM4 socket for our Ryzen processor. Here the choice was between a B450 board or a 5 series. If an older B450, you might have to update the BIOS to support a 3rd gen Ryzen processor. I decided to go the slightly pricier and easier route of grabbing an x570 motherboard - &lt;a href="https://amzn.to/2EXJhZ8"&gt;MPG X570 Gaming Plus Motherboard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The other big wins here are the PCIe Gen 4.0 compatibility and the TWO M.2 SSD slots, which I will need based on my storage design.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/958ebd4eeb3ed63851c5fb200cd03d7c/dd60f/how-to-build-a-computer-2.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dzYUXdBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/958ebd4eeb3ed63851c5fb200cd03d7c/acf6b/how-to-build-a-computer-2.jpg" alt="MPG X570 Gaming Plus Motherboard" title="MPG X570 Gaming Plus Motherboard" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a GPU I decided to go for the &lt;a href="https://amzn.to/2Q09gFx"&gt;GeForce RTX 2060 Super&lt;/a&gt;. It’s a good value for money in terms of performance while still not breaking the bank. Ray tracing and 8GB of RAM on it, what’s not to like.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/c3be0486a64936aa2b03ac7d4ae70489/dd60f/how-to-build-a-computer-3.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U4g-uOLX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/c3be0486a64936aa2b03ac7d4ae70489/acf6b/how-to-build-a-computer-3.jpg" alt="GeForce RTX 2060 Super" title="GeForce RTX 2060 Super" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To power a GPU and a CPU like those I went with a &lt;a href="https://amzn.to/2EYUU1Q"&gt;CX750M Corsair power supply&lt;/a&gt;. This is a solid overkill, but I’ve had a similar PSU on my previous system and no issues, so might as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/10bbfccd4214b4c5eb98da5dd9a17a56/dd60f/how-to-build-a-computer-4.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lb0QjGbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/10bbfccd4214b4c5eb98da5dd9a17a56/acf6b/how-to-build-a-computer-4.jpg" alt="CX750M Corsair power supply" title="CX750M Corsair power supply" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And as you might have figured out already, based on my motherboard and power supply choices, I’m going for a “regular” ATX case - &lt;a href="https://amzn.to/2MzBWmC"&gt;Fractal Design Define C&lt;/a&gt;. The nice parts here are the cable management section on the backside of the case, the tempered glass side panel (as I’m planning to have some nice RGB fans), dust filters and is highly configurable.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/55713c1a43aab1a508b27e64bdeec88a/dd60f/how-to-build-a-computer-8.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JgIf6X__--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/55713c1a43aab1a508b27e64bdeec88a/acf6b/how-to-build-a-computer-8.jpg" alt="Fractal Design computer case" title="Fractal Design computer case" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For memory, I grabbed 2 x 16GB &lt;a href="https://amzn.to/2t3zvlw"&gt;Kingston Hyper X Fury DDR4&lt;/a&gt;. For storage I got 2 M.2 SSDs(a &lt;a href="https://amzn.to/37jBL7b"&gt;250GB Kingston&lt;/a&gt; and a &lt;a href="https://amzn.to/2sfEAHz"&gt;500 GB Samsung&lt;/a&gt;) and one &lt;a href="https://amzn.to/2Zx7P4O"&gt;3.5 inch Western Digital hard drive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/f1a853872507ec9884f4086d97a00532/dd60f/how-to-build-a-computer-5.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NndYluQD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/f1a853872507ec9884f4086d97a00532/acf6b/how-to-build-a-computer-5.jpg" alt="how to build a computer 5" title="how to build a computer 5" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, let’s build a computer.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔩 The Build
&lt;/h4&gt;

&lt;p&gt;We’ll start with unpacking the motherboard and placing it on its box. If you have an ESD bracelet (antistatic wrist strap or else) consider wearing it for the duration of the build. Otherwise, you could try grounding yourself by touching some metal like a heat pipe or a radiator for a second. Ideally, you’d like to minimize the risk of shocking any of your new components with static electricity.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/13d7ac66a889ea1b5dc2d33b7be04522/dd60f/how-to-build-a-computer-9.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w7akDLXO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/13d7ac66a889ea1b5dc2d33b7be04522/acf6b/how-to-build-a-computer-9.jpg" alt="Motherboard laying on its box" title="Motherboard laying on its box" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first thing to install is the CPU. Lift the CPU socket retention arm. Then, carefully take the CPU out of the box and while holding it by its sides, place it carefully into the AM4 socket on the motherboard, &lt;strong&gt;such that the small triangle notch on the CPU matches the same on the motherboard&lt;/strong&gt;. It is crucial to get this right and there is ONLY ONE correct orientation.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/d6a160954d06c2644da5c18eb1530183/dd60f/how-to-build-a-computer-10.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--STLVMVMX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/d6a160954d06c2644da5c18eb1530183/acf6b/how-to-build-a-computer-10.jpg" alt="Ryzen 7 3800X CPU" title="Ryzen 7 3800X CPU" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The CPU should fit nice and snug and if you’re sure you’ve done it right, proceed by pulling the retention arm back to lock it in place. Good job, you just installed your CPU!&lt;/p&gt;

&lt;p&gt;Next, let’s add the CPU cooler on top. In my case, mine came with a pre-applied thermal paste that looked good. In your case, you might have to apply the thermal compound yourself straight on top of the CPU. &lt;strong&gt;Do not do both though!&lt;/strong&gt; If the cooler already has thermal paste, just use that. Notice the two metal brackets on the sides - we are going to use those to hold the fan and lock it in place nice and sturdy. For additional instructions, consult your CPU’s or motherboard’s manual.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/2a68422caa208cc0c0872ee0668b526e/dd60f/how-to-build-a-computer-11.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lb78ZWWu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/2a68422caa208cc0c0872ee0668b526e/acf6b/how-to-build-a-computer-11.jpg" alt="Ryzen 7 3800X cooler" title="Ryzen 7 3800X cooler" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now have the CPU and the cooler installed. Way to go! The fan cable gets plugged into a slot on the motherboard usually labeled CPU fan, close to the CPU socket. In my case, it was just above it.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/d28b0b71ed4e7ccc76c76a38e9dd3367/dd60f/how-to-build-a-computer-12.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tI3Bxhxc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/d28b0b71ed4e7ccc76c76a38e9dd3367/acf6b/how-to-build-a-computer-12.jpg" alt="Motherboard with Ryzen 7 3800x installed" title="Motherboard with Ryzen 7 3800x installed" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, let’s add our RAM sticks…&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/c5a7f396b94b51e99712695283b10ce0/dd60f/how-to-build-a-computer-13.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KRhJ4viN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/c5a7f396b94b51e99712695283b10ce0/acf6b/how-to-build-a-computer-13.jpg" alt="2 16GB Kingston RAM sticks" title="2 16GB Kingston RAM sticks" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;… and M.2 SSDs. A 250GB one for Windows and applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/1d85a25e18adee29777082a097cdfb86/dd60f/how-to-build-a-computer-15.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L9ArBUcy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/1d85a25e18adee29777082a097cdfb86/acf6b/how-to-build-a-computer-15.jpg" alt="Kingston 250GB M.2 SSD" title="Kingston 250GB M.2 SSD" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And another 500GB M.2 SSD for games and video editing projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/c499c9684e5ff87bf40aa2a15f51b48e/dd60f/how-to-build-a-computer-16.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VF_gaGgl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/c499c9684e5ff87bf40aa2a15f51b48e/acf6b/how-to-build-a-computer-16.jpg" alt="Samsung 500GB M.2 SSD" title="Samsung 500GB M.2 SSD" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s how I’ve set up the RAM sticks and SSDs. Consult your motherboard manual which channels are optimal when inserting the sticks. For me, the best set up is as it’s shown in the picture below. Installing the M.2 SSDs is as simple as slotting them in and securing them down with a screw on the left side.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/7152e101dbd5cba6e63abe1025aeec54/dd60f/how-to-build-a-computer-17.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9o4xmEOb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/7152e101dbd5cba6e63abe1025aeec54/acf6b/how-to-build-a-computer-17.jpg" alt="Motherboard with CPU, cooler, RAM sticks and M.2 SSDs installed" title="Motherboard with CPU, cooler, RAM sticks and M.2 SSDs installed" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So far, so good. Now, let’s move this party inside the case.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/72ab2599aa1bff600e30436c3cd99a8b/dd60f/how-to-build-a-computer-18.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e-uJFtJB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/72ab2599aa1bff600e30436c3cd99a8b/acf6b/how-to-build-a-computer-18.jpg" alt="Preparing the ATX case" title="Preparing the ATX case" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the case and prep it by laying it on its side. I decided to quickly plug in the power supply unit, as it’s separate from the motherboard, but going to be required in the initial testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/cf7b6e8ea8949f45eed8b1896e3b84e1/dd60f/how-to-build-a-computer-20.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TUu129YW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/cf7b6e8ea8949f45eed8b1896e3b84e1/acf6b/how-to-build-a-computer-20.jpg" alt="Plugged in power supply unit in case" title="Plugged in power supply unit in case" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Secure the power supply unit with the provided screws and make sure to provide the required cables for the motherboard, CPU, and GPU for initial testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/42867091a148d487622adfe2df413165/dd60f/how-to-build-a-computer-21.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mbq8QMJu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/42867091a148d487622adfe2df413165/acf6b/how-to-build-a-computer-21.jpg" alt="Make sure to allow cables from the PSU to the motherboard" title="Make sure to allow cables from the PSU to the motherboard" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now lay the case down flat and install the motherboard I/O shield. Add the 9 standoffs on top of which we’re gonna place the motherboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/e9591a09a1b7afa02ae517e02335deb5/dd60f/how-to-build-a-computer-19.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6OVPgkqG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/e9591a09a1b7afa02ae517e02335deb5/acf6b/how-to-build-a-computer-19.jpg" alt="Case ready to accept motherboard" title="Case ready to accept motherboard" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By holding the CPU cooler slowly and carefully place the motherboard in place over the 9 standoffs and matching the I/O ports into the I/O shield we attached to the case.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/7be2c9a102d703f67772d0d155a6b6d2/dd60f/how-to-build-a-computer-22.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---AGjvlTn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/7be2c9a102d703f67772d0d155a6b6d2/acf6b/how-to-build-a-computer-22.jpg" alt="Motherboard installed in the case" title="Motherboard installed in the case" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Secure the motherboard to the standoffs with the provided screws.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/3d63272669ce54e9ef15a68307fa967e/dd60f/how-to-build-a-computer-23.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vH19Vqwj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/3d63272669ce54e9ef15a68307fa967e/acf6b/how-to-build-a-computer-23.jpg" alt="Motherboard secured with screws to the standoffs in the case" title="Motherboard secured with screws to the standoffs in the case" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plugin the 24-pin motherboard connector from the power supply, as well as the 8-pin CPU connector. You can also install the graphics card in a PCIe slot and plug in another 8-pin into it.&lt;/p&gt;

&lt;p&gt;The fan cables go to headers labeled &lt;code&gt;fan&lt;/code&gt; or &lt;code&gt;system fan&lt;/code&gt;. The case’s USB 3.0 header goes to its slot (consult your motherboard manual), the power button, hard drive activity, and LEDs go in a very specific way to the headers at the bottom right of the motherboard. Look it up in the manual, it’s not very tricky but good to get right!&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/719daa2df3d06b2d05fd28d72b5b5f25/dd60f/how-to-build-a-computer-24.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rE9SuXJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/719daa2df3d06b2d05fd28d72b5b5f25/acf6b/how-to-build-a-computer-24.jpg" alt="Power connectors and graphics card installed" title="Power connectors and graphics card installed" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are ready for the first test! Don’t close the side panels or assemble the system more than you need, in case something is wrong and we have to open it up again. Oh, it seems the stock CPU cooler has an RGB fan, neat!&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/e24dc646dbc01b58469be3a6b36f4b36/dd60f/how-to-build-a-computer-25.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_v1AIbgr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/e24dc646dbc01b58469be3a6b36f4b36/acf6b/how-to-build-a-computer-25.jpg" alt="Successful PC build part 1" title="Successful PC build part 1" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/c6c4cabf412731f9b5265533e8a3a623/dd60f/how-to-build-a-computer-26.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QXxOJQZ9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/c6c4cabf412731f9b5265533e8a3a623/acf6b/how-to-build-a-computer-26.jpg" alt="Successful PC build part 2" title="Successful PC build part 2" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If all works out and the system posts successfully, you can close up all the panels. Install your operating system of choice via a USB drive and enjoy! Do remember to turn on the XMP profile in the bios to enable faster memory speeds.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/69192e1dc5758f51314df8a4a26ce7cc/dd60f/how-to-build-a-computer-27.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tNBLhxWS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/69192e1dc5758f51314df8a4a26ce7cc/acf6b/how-to-build-a-computer-27.jpg" alt="PC case closed" title="PC case closed" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My build continued a bit further a week later when my &lt;a href="https://amzn.to/3623SaC"&gt;Corsair LL120 RGB fans&lt;/a&gt; arrived.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/a65ac5749194f9622f929b36d7aa3fc7/dd60f/how-to-build-a-computer-28.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0Ii-y7cg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/a65ac5749194f9622f929b36d7aa3fc7/acf6b/how-to-build-a-computer-28.jpg" alt="Corsair LL120 RGB fans arrived" title="Corsair LL120 RGB fans arrived" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The set includes quite a few cables, controllers and if you are new to this (like I was) can easily throw you for a loop. Luckily there are many YouTube videos you can lookup on how exactly to connect the fans and their RGB controllers.&lt;/p&gt;

&lt;p&gt;For this setup, we first took off the stock fans that come with the case.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/266c0f4dcd67b3020564a8a4839198af/42837/how-to-build-a-computer-29.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ATXD1MqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/266c0f4dcd67b3020564a8a4839198af/acf6b/how-to-build-a-computer-29.jpg" alt="Case front stock fan" title="Case front stock fan" width="880" height="1174"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/9bdf7480386ce04739a3be4069aa04a8/42837/how-to-build-a-computer-31.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HEupiKIM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/9bdf7480386ce04739a3be4069aa04a8/acf6b/how-to-build-a-computer-31.jpg" alt="Case back stock fan" title="Case back stock fan" width="880" height="1174"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a nutshell, fan power goes to the fan headers on the motherboard, much like any other fan. The RGB headers connect into a controller which you can mount to the inner wall on the back of the case using the provided double-sided sticky tape. This works very well and keeps the mess out of sight.&lt;/p&gt;

&lt;p&gt;You can power the led and fan controllers with a SATA power connector so make sure you have at least one of those coming out of your PSU. In my case, I piggybacked off of the only SATA power cable I had for the hard drive.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/b099c77469ba4e38930ee141ee5e5a8d/dd60f/how-to-build-a-computer-32.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bGPigbIf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/b099c77469ba4e38930ee141ee5e5a8d/acf6b/how-to-build-a-computer-32.jpg" alt="Let there be light in the PC case 1" title="Let there be light in the PC case 1" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I decided on 2 fans front and 1 back for a &lt;code&gt;positive&lt;/code&gt; pressure airflow, where there should be slightly less dust hold up in the case, but the trade-off is the slightly slower exhaust of hot air. I can always change things around if needs be.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/ce5b1a0b2fc524ec3aee4118c95e1a75/dd60f/how-to-build-a-computer-33.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GhNcCa5W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/ce5b1a0b2fc524ec3aee4118c95e1a75/acf6b/how-to-build-a-computer-33.jpg" alt="Let there be light in the PC case 2" title="Let there be light in the PC case 2" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that was the first PC build we did together with Anton! Yay! 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/4a45a65f237ae5b5aa03728bd15b6d0d/dd60f/how-to-build-a-computer-34.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dSMGBNDE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/4a45a65f237ae5b5aa03728bd15b6d0d/acf6b/how-to-build-a-computer-34.jpg" alt="Anton and Georgi's first PC build" title="Anton and Georgi's first PC build" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

</description>
      <category>computer</category>
      <category>hardware</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>End of a decade /2010-2020/</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/end-of-a-decade-2010-2020-3i41</link>
      <guid>https://dev.to/jumpalottahigh/end-of-a-decade-2010-2020-3i41</guid>
      <description>&lt;p&gt;You only get to do those “end of a decade” recaps only so often, so here goes. This post takes a look at the past decade, from the beginning of 2010 to the end of 2019.&lt;/p&gt;

&lt;p&gt;However, to &lt;strong&gt;understand why the first thing I did in 2010 (quitting my job) was important&lt;/strong&gt;, you do need a bit more context and so let’s start with that.&lt;/p&gt;

&lt;h4&gt;
  
  
  [1985 - 2010]
&lt;/h4&gt;

&lt;p&gt;I’m someone who was born in 1985 in (still at the time) communist Bulgaria, graduated high school in 2004 and started university immediately after, just to drop off after 2 years in favor of a job. You can read more about my early job opportunities, adventures and fails &lt;a href="https://blog.georgi-yanev.com/stories/restaurant-job-its-personal/"&gt;here&lt;/a&gt; and &lt;a href="https://blog.georgi-yanev.com/stories/a-smile-in-the-paddlewheel/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To keep things short I’m not going to focus much on the previous decade. I’m only going to mention that the university exchange program to the USA I participated in 2005 and 2006 &lt;strong&gt;was easily one of the most influential things in my life&lt;/strong&gt; that set a course I’ve been on to this day in one way or another.&lt;/p&gt;

&lt;p&gt;On the other hand, I wasn’t ‘feeling’ the degree in economics I was doing, or maybe just Bulgarian universities don’t ‘click’ with me, so I finally dropped out after 2 years in. At the time I got my first permanent, full-time job and focused on that. I started as a waiter in a 4-star hotel in Plovdiv, Bulgaria, called Sankt Peterburg. I had fun, met people, made friends, worked hard, got promoted to shift manager 6 months in and stayed at the job for about 3.5 years. I also picked up World of Warcraft and that was fun for a while. But at the beginning of 2010, I was a manager of a small restaurant (still under the same company), I worked a 9 to 5 and started to feel as if I don’t do something, that’s how my life would just keep going…&lt;/p&gt;

&lt;h4&gt;
  
  
  [2010 - 2020]
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;So I made a change - I quit&lt;/strong&gt;! It was very hard and I felt so guilty handing in my notice, I felt as if I was betraying so many people. While my dad was the main driving force for my trips to the USA earlier, this time my mom was the driving force that sent me to Cyprus.&lt;/p&gt;

&lt;p&gt;When I got there I lived on the other side of the island, she was in Paphos and I was in Ayia Napa, but the inspiration for this plunge came from her. On one hand, I was pretty scared - not in the literal sense, but like in general - shaken, from quitting doing what I was used to do for 3.5 years, just to go elsewhere to look for a job as a waiter and start from the beginning again? Did it make any sense? But either way, we did it - a friend and I. Our humble beginning in Cyprus did not come without challenges. We did not take a whole lot of money with us. Why? No idea. Luckily he had some friends and friends of friends, I had my mom on the other side of the island and worse comes to worst we would just go there?&lt;/p&gt;

&lt;p&gt;After a few hectic first days, getting ripped off by paying sick amounts for rent for 1 week, he finally found a job and so did I. That allowed us to stabilize and after a while, things fell into place.Ayia Napa was an interesting place. That first year my job there is a small hotel as a waiter did not come without challenges, mainly because I had an abusive piece of a shit manager. I stuck it out till he was out of my face when I was able to start working on the pool bar and be away from him.&lt;/p&gt;

&lt;p&gt;Slightly later that summer, I met my wife and the mother of my son. I just didn’t know she would be those things just yet. She was Finnish and as such went back to Finland when her vacation was finished. I was figuring things out and had no idea what I would do next.&lt;/p&gt;

&lt;p&gt;I ended up going back to Bulgaria when the season in Cyprus was over, and given there was no going back to the hotel I worked in Plovdiv, I did another first - went to work at the Bulgarian ski resort of Banko for the winter. I met a lot of people I consider friends, many nice people and did my best at the job.&lt;/p&gt;

&lt;p&gt;Sofi (my wife) came down to Bulgaria to meet me in early &lt;strong&gt;2011&lt;/strong&gt;. Months later I ended up going to Cyprus again for the summer season at the same job. Had more responsibilities, wrote the pool bar menu and had fun. Sofi came down there in June for a week, and then finally in August 2011, she moved to Cyprus. For a month we lived in different apartments until our friends suggested that my roommate would move in with another friend and Sofi and I could live together. And we did. Ever since.&lt;/p&gt;

&lt;p&gt;The end of 2011 was a bit confusing as towards the end of the season in Cyprus, I was wondering what’s next and had ideas about going to the UK or else. In the end, we ended up going to Bulgaria for a while, live in Plovdiv, then went to Bansko together and worked for about 2 months at Kempinski, but after leaving most of our money for electricity bills and rent, figured we might as well not do anything and not have money, rather than work and not have money. So we went back to Plovdiv for the end of the winter in February 2012.&lt;/p&gt;

&lt;p&gt;In March &lt;strong&gt;2012&lt;/strong&gt; we went to Finland together for the first time on a week-long vacation that was a lot of fun. Then in April back to Cyprus for what would end up being the last season. I was in the same hotel there and Sofi got a decent job too. It was fun but now I was hitting another thing - this season life was starting to get too much - too much back and forth. We went through so many plans and options but ended up going back to Bulgaria for a few months after the end of the season in Cyprus. Finally, in December 2012 we moved to Finland.&lt;/p&gt;

&lt;p&gt;This was another bigger and interesting chapter. It also did not come without challenges. I decided to apply for a university and go back to computers and software engineering, which I had done some way back in high school. In January 2013 I applied, in April I did my entrance examinations, in May I found out I was accepted and in August I started studying at Metropolia University of Applied Sciences. That was a big win for me for which I’m happy and grateful!What wasn’t a big win but was a very needed necessity was to work for some money in the meantime. I was lucky to be offered a job by Sofi’s friend Maya in their previous bar workplace. I appreciated this as we needed the money and of course, I did what I had to do, but I despised this place and every second spent on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2013&lt;/strong&gt; was the first year ever I never went back to Bulgaria. We were establishing and building a life for ourselves in Finland for now. There were interesting things to explore about Finnish culture and nature. I met new friends in school, was excited to start studying again, this time something I cared about. I worked the bar job on weekends and was so happy when every weekend was over and I would go back to school on Monday. I did a crap ton of extra studying on the side and building projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2014&lt;/strong&gt; came around, the first year of school was over, things were settling in and in August we went to Bulgaria for a 3 week vacation. It was fun, but it was also funny that in some way I was also looking forward to going back and starting the next school year.&lt;/p&gt;

&lt;p&gt;When &lt;strong&gt;2015&lt;/strong&gt; came, it came with a bang. I was progressing nicely in school, projected to graduate ahead of schedule. I was due to do a work placement in the Autumn semester of 2015, so I needed to get some sort of a job and so we started looking already in February. In April we both quit the bar job we had been doing for a while now (it felt amazing to leave this place!). In May I had an interview and was offered a job that I started on June 8th, 2015 at F-Secure as a trainee for the summer for 3 months. On June 16th, 2015 Sofi told me she was pregnant.&lt;/p&gt;

&lt;p&gt;The rest of the year was mainly focusing on pregnancy and doing what we had to do. Did some preparation for the baby - furniture etc. The work was going fine, I was happy, learning and was able to secure contract extensions.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;2016&lt;/strong&gt; I was supposed to be back to school so I had to go to some classes while working a full-time job. Then in February 2016, our third member of the family came.Becoming a parent and having a child had been easily the biggest highlight of the decade. It’s unbelievably hard to put in words what a life changer it is, and how much it’s worth it every step of the way.&lt;/p&gt;

&lt;p&gt;2016 was also the year when I managed to write my bachelor’s thesis and finally graduate in September 2016. The rest of it was rather calm - work was going well and a lot of focus was going into our son.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;2017&lt;/strong&gt; it was a lot more of the same. Learning and teaching at work, spending time with family and son, picking up some interesting hobbies with smart home automation, writing my blog and towards the end of the year - started to fly FPV racing drones which also changed my life in a few ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2018&lt;/strong&gt; contained an interesting work project, a trip to see my family in Cyprus in September.&lt;/p&gt;

&lt;p&gt;It’s not like things have slowed down since plenty is happening but there are so many moments and memories that are priceless and hard to describe or I simply don’t want to disclose. The idea is that when you have a kid and spend time with them you’ll know what I mean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2019&lt;/strong&gt; has been an amazing year once again, I’m very happy about - from spending family time, to going on the trip to Plovdiv, Bulgaria, to writing more on the blog and starting a YouTube channel. And to changing jobs. After more than 4 years at F-Secure, it was time to move on and to do other things and learn other things. I met a lot of nice people at F-Secure, many of whom I consider friends. Good times.&lt;/p&gt;

&lt;p&gt;If you want to read more about the past 2-3 years, I do write these year-in-review posts in excruciating detail, so go read there more if you must.&lt;/p&gt;

&lt;p&gt;It’s been 10 years. This was the decade when I partied like crazy, the decade when I met my wife, when I went back to school, became a parent, became an engineer, started working as a software developer, flew and reviewed FPV racing drones.A decade. I’m not very happy with James Cameron for not releasing at least one of the upcoming Avatar movies, but I’m looking forward to them finally coming out next year.&lt;/p&gt;

&lt;p&gt;In all seriousness though, it has been an adventure. We, humans, tend to (for the better part) remember the good things and filter out the bad stuff with time. That’s normal. That’s also not to say that those past 10 years came without challenges; in fact, there were plenty. Luckily most of the challenges are somewhat easy to deal with, some are much harder. You just gotta push through and believe. Don’t stop.&lt;/p&gt;

&lt;p&gt;So what’s next? What’s in store for the next decade? Hopefully, we are alive and healthy to see. I’m looking forward to so much more technological and space progress. We need to work hard and bring awareness to real issues with climate change, renewable energy, social media psychological impact on a personal and societal level. As a tech enthusiast, I’m excited, but it’s also clear there are issues we need to solve that humanity had never had before. That’s ok, we can do it. I’m super excited to spend time with my son and do a ton of things. I’m excited about the projects I work on. I’m somewhat itching for adventure so hopefully, we can have some of that too.&lt;/p&gt;

&lt;p&gt;What are you excited about for the next decade?&lt;/p&gt;

</description>
      <category>yearinreview</category>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My 2019 year-in-review</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Sun, 08 Dec 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/my-2019-year-in-review-3l6m</link>
      <guid>https://dev.to/jumpalottahigh/my-2019-year-in-review-3l6m</guid>
      <description>&lt;p&gt;I really love these &lt;a href="https://blog.georgi-yanev.com/learning/goal-review-of-2018-and-goals-for-2019/"&gt;yearly&lt;/a&gt; &lt;a href="https://blog.georgi-yanev.com/learning/recap-of-2017-and-goals-for-2018/"&gt;reflection&lt;/a&gt; posts and I am really looking forward to writing them every year. Not because I want to pat myself on the back or brag over stuff, but really because &lt;strong&gt;they show me in a very clear way what had happened and what had changed in the semi-long run&lt;/strong&gt;.These posts uncover a lot of small details invisible to the naked eye on a daily basis, and it is very important to acknowledge what had gone well and what progress you have made in a specific area. This leads to reduced stress and anxiety levels, less feeling of failure and allows you to take a deep breath and chart out the roadmap for the next year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I encourage you to try this out for yourself and see if it helps you realize how much you have achieved and what to focus on next&lt;/strong&gt;. This post is structured such that topics are grouped, while still maintaining a roughly chronological order of how events transpired throughout the year.&lt;/p&gt;

&lt;p&gt;Let’s do this!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I feel very fortunate and grateful to have a good job I love, interesting hobbies and side business that seems to be doing well. But the single most important thing is my family - my wife and son. They mean everything to me and are the sole inspiration for everything I do. This blog post is dedicated to you - Sofi and Anton.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="///static/caaad976c357e2b96b4084dd607c15e5/74a85/year-in-review-2019-12.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QFxHtKg1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/caaad976c357e2b96b4084dd607c15e5/acf6b/year-in-review-2019-12.jpg" alt="Georgi, Sofi and Anton in Plovdiv Bulgaria" title="Georgi, Sofi and Anton in Plovdiv Bulgaria" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔭 Quick overview
&lt;/h2&gt;

&lt;p&gt;When I think of 2019, these immediately come to mind as the main topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🛫 The trip to my hometown - Plovdiv, Bulgaria&lt;/strong&gt; - for the first time in 5 years and for the first time with my son 💙&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📈 Growth of the blog, collaboration opportunities&lt;/strong&gt; - it has been amazing to have had the chance to produce so much high-quality content and to help people out with their FPV racing and freestyle drone questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📝 Writing a book&lt;/strong&gt; - wrote 13 chapters, &lt;strong&gt;14 000 words&lt;/strong&gt; , kept refining the story, killed ideas, brought in new ideas, but ultimately stuck to the main setting and plot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎥 Starting 2 YouTube channels&lt;/strong&gt; - over &lt;strong&gt;334&lt;/strong&gt; raw flight test videos of test flights of different drones and equipment on my footage dump channel and &lt;strong&gt;80&lt;/strong&gt; subscribers and &lt;strong&gt;20&lt;/strong&gt; high-quality videos on my main FPVTIPS channel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💻 Career growth&lt;/strong&gt; - I gave &lt;a href="https://blog.georgi-yanev.com/learning/jamstack-with-gatsby-and-netlify/"&gt;two talks&lt;/a&gt; at tech meetups, delivered a bunch of workshops at my now previous job, and oh yeah, changed jobs. I also created 2 open source libraries, a lot of closed source stuff, shipped a bunch of projects and learned many new things.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also read more books this year, learned a lot about video editing and production, audio quality, had an amazing summer family vacation in Finland and grabbed an opportunity when one presented itself.&lt;/p&gt;

&lt;p&gt;But how does that overview hold up against the goals I set for myself last year?&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/d0fdadc8873d9242757e455ba7ebcea7/5638a/year-in-review-2019-1.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8kiMqUzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/d0fdadc8873d9242757e455ba7ebcea7/5638a/year-in-review-2019-1.png" alt="A todo list of the goals for 2019 I set for myself back in 2018" title="A todo list of the goals for 2019 I set for myself back in 2018" width="579" height="565"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🚢 Shipping products, teaching and moving on
&lt;/h2&gt;

&lt;p&gt;So at the beginning of the year, because winter in Finland is long and brutal, it’s a great opportunity to do indoors stuff and focus on one’s coding career 😉. I was streaming live coding on Twitch while working on some personal hobby projects and decided I’d give my first talk at a local JavaScript meet up. &lt;strong&gt;I ended up giving &lt;a href="https://blog.georgi-yanev.com/learning/jamstack-with-gatsby-and-netlify/"&gt;two talks&lt;/a&gt;&lt;/strong&gt;. Worked hard on my slides for nearly 2 months (in my free time) and thanks to the topics being closely related to the work we were doing, got a lot of support and great feedback from my manager at the time - Marine, and she really helped me to nail this! Thanks, Marine, I really appreciated the help!&lt;/p&gt;

&lt;p&gt;My single advice to everyone this year is on pro-activity. You have the power to shape your career in many different ways. It might take some time, but with consistency and effort, you can do it. In my case, I’m talking about my career as a software engineer and in particular the example of my work at F-Secure as a web developer.&lt;/p&gt;

&lt;p&gt;I started at the company as a summer trainee and went through a few steps and contract extensions to end up spending a total time of 4 years and 3 months of my life there. I loved it, learned a lot and thaught a lot! This year, on September 13th, was my last at F-Secure.&lt;/p&gt;

&lt;p&gt;I could easily (and probably will) write an entirely separate blog post on lessons learned from my job at F-Secure, so instead, I’ll focus here mostly on the straight to the point conclusions. During my time at F-Secure, I was fortunate enough to have had the support of my direct managers (some more so than others), which helped me to drive initiatives close to my heart that were business impacting. I’ve been involved in several projects I’m very happy to have been a part of, which allowed me to learn more, improve my skills and ship products.&lt;/p&gt;

&lt;p&gt;My last “Hail Mary” at the job was the migration of our campaign web pages to a modern Gatsby + Netlify stack, the development of 2 React open-source libraries of &lt;a href="https://github.com/F-Secure/react-components"&gt;shared componets&lt;/a&gt; and &lt;a href="https://github.com/F-Secure/react-icons"&gt;icons&lt;/a&gt;, and shipping &lt;a href="https://digital-life-test.f-secure.com/en/"&gt;a&lt;/a&gt; &lt;a href="https://data-discovery-portal.f-secure.com/en/"&gt;few&lt;/a&gt; Progressive Web App (PWA) projects. All within less than half a year.&lt;/p&gt;

&lt;h2&gt;
  
  
  👩‍🎓 Never stop learning and the next chapter
&lt;/h2&gt;

&lt;p&gt;I have been approached by many recruiters over the past few years. Some I had decent conversations with, some not so much. Some that knew what they were talking about and some that didn’t. Mostly and mainly I’ve been discarding offers and actively saying I wasn’t looking for a new job at the time.&lt;/p&gt;

&lt;p&gt;But eventually, a time comes to move on to new challenges, learning something new and experiencing something different. And one decent recruiter who I’ve been talking to for a while about different companies eventually called me and told me of this one particular drone company called &lt;a href="https://sharpershape.com/"&gt;Sharper Shape&lt;/a&gt;. Even at a glance, there seemed to be a lot of intersecting interests and areas between them and me, and where I wanted to go in the future, so after a few interview rounds it happened - I finally decided I’d move on, and they ended up hiring me.&lt;/p&gt;

&lt;p&gt;And as a software engineering professional with a drone-related hobby, &lt;strong&gt;I feel very fortunate to work with and learn much more about data, AI, drones, images, metadata, processing, development, maps, sensors, lidar, trajectories, design and architecture of services, apps and utilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And while my specialty is in front end development (for now), I have to admit I enjoy doing some back end development and even working with a well-designed dev-ops setup. I’m dedicated, giving it my all and trying to utilize all learning opportunities while developing something useful and meaningful. Very excited about the times ahead!&lt;/p&gt;

&lt;p&gt;And no, it’s not always easy and I have no intention of painting a fake picture - changing jobs can and will be hard, you will be staring at new code bases for hours, slowly trying to make sense of things, you could even go through many crappy interviews with different companies, but in the end, it’s always worth it and &lt;strong&gt;if you are stuck in a rut, I advise you to take the plunge and move on&lt;/strong&gt; , it will be hard but once you get past it, you will thank yourself.&lt;/p&gt;

&lt;p&gt;Finally, I’m happy to share I ticked off my goal of going to at least 5 tech meetups this year, and not only did I do, but I also spoke at 2 of those. Those are always fun, insightful and inspirational.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛌 Downtime and focus shift is important too
&lt;/h2&gt;

&lt;p&gt;Whether we’re talking about getting good amounts of high-quality sleep or spending time away from work, both are equally important for you to succeed in your professional life. I can not say I’m doing very good on the sleeping front - I average 6.5 to 7 hours a night, and probably could do a bit better. I have also noticed that I function best at 7 - 7.5 hours of sleep per night and I don’t need or want to do more than that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But one thing I’m very happy about is that we had pretty high-quality vacations&lt;/strong&gt;. Both the trip to Plovdiv, Bulgaria in May and the Finnish summer vacation in July. We visited a lot of places, had a ton of fun and enjoyed the time off as best as we could. It was also nice to have some good food, meet friends and relax.&lt;/p&gt;

&lt;p&gt;Lastly but for sure not least, I did manage to keep my &lt;strong&gt;promise of flying much more this year than in 2018&lt;/strong&gt;. I did uphold that and I enjoyed it thoroughly. I went many times flying on my own, as well as with my buddy, testing different quads and gear, just ripping packs! There’s nothing quite like FPV 🚁 💙!&lt;/p&gt;

&lt;p&gt;A thing I had no idea would be happening but somehow did and was quite fun and amazing, that started from Anton watching a YouTube video with a Mickey Mouse game we ended up buying and playing ourselves. This lead to us getting a few more platformers, such as Crash Bandicoot remastered on Steam and a few others. We also played The Curse of Monkey Island and World of Warcraft Classic together (or rather explored) and &lt;strong&gt;hanging out together playing some games had been of such great help during my first month at the new job when it’s easy to feel overwhelmed with new information, technology, and codebases&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And before you start coming at me with the pitchforks, no we don’t only play games all the time, we also build a lot of Legos and work on other projects too :)&lt;/p&gt;

&lt;h2&gt;
  
  
  📖 My book writing adventure
&lt;/h2&gt;

&lt;p&gt;So I’ve been &lt;a href="https://blog.georgi-yanev.com/learning/writing-a-book/"&gt;preparing for my book&lt;/a&gt; writing adventure during this year’s &lt;a href="https://nanowrimo.org/"&gt;NaNoWriMo&lt;/a&gt; and &lt;strong&gt;I … failed? Or did I?&lt;/strong&gt; Let me elaborate. The goal of the event is simple - write 50 000 words during November. And I failed because I didn’t write 50 000 words. I wrote 4 000 and stopped. Now I can go on to explain that I got sick, on top of doing extra hours at a new job (which is a cognitive demand on another level in and of itself), but the fact is that had I wanted to, I could have pushed through and done it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I made a conscious decision to stop.&lt;/strong&gt; Not because I was lazy, not because I couldn’t have done it, but because &lt;strong&gt;I believe that it’s ok to drop things when you decide it’s good for you in the long term, and to prioritize other things&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can’t plan everything in life and this year for me was a perfect example why.&lt;/strong&gt; And that’s ok. That makes things a bit more fun too. &lt;strong&gt;I love planning and having a rough idea of where I wanna go, but how I get there and what I go through, I want that to be partially a surprise, an adventure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Stay mentally sane and don’t push yourselves over the limit. It’s ok to drop things and re-prioritize as you go along.&lt;/p&gt;

&lt;p&gt;If you’re wondering what’s next for my book writing project, &lt;strong&gt;I’m happy to say I haven’t dropped it at all&lt;/strong&gt;. I will continue working on it, write weekly and go at a slower pace but consistently. I love how the stories and characters are taking shape in my head now that I’ve kept thinking about the main plot, setting, and characters for roughly a year.&lt;/p&gt;

&lt;p&gt;The whole project so far has been a big learning opportunity on its own. Learning how to be ok to remove characters, plot ideas that would not make sense in the big picture, no matter how cool on their own. Learning from Brandon Sanderson’s writing class, the amazing Writing Excuses podcast!I also read more books this year as a function of wanting to write one. In particular, I enjoyed &lt;a href="https://www.amazon.com/Supermarket-Bobby-Hall/dp/1982127139"&gt;Logic’s Supermarket&lt;/a&gt; because he’s a hip hop artist and this was his first book. It was so interesting to analyze and see how he had tackled different parts of the story. Enjoyable as a read and enjoyable to learn from.&lt;/p&gt;

&lt;p&gt;I think I was aware I would not become a writer in a year, not even in two years, but I have started the journey and I’m enjoying myself and looking forward to writing more.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚁 FPVTIPS. Growth, drones, blog, YouTube
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--riuIyJxb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/49f492705406f43622a20176482ffe83/year-in-review-2019-7.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--riuIyJxb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/49f492705406f43622a20176482ffe83/year-in-review-2019-7.svg" alt="FPVTIPS logo" width="880" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This has been one of the things that had made me the happiest this year! It’s something I’m very passionate about that had been growing both organically and supported by me in many ways. I also think I took the right decisions when they came up.&lt;/p&gt;

&lt;p&gt;So, looking at last year’s list, it seems I wanted to go participate in a drone race (I actually had the chance but was not able to this summer), fly more FPV drones (definitely did that!) and grow fpvtips.com ( &lt;strong&gt;I did that too in a different, better and unexpected way&lt;/strong&gt; ).&lt;/p&gt;

&lt;p&gt;I started this blog in August 2017 and published my &lt;a href="https://blog.georgi-yanev.com/fpv/getting-started-with-fpv-drones/"&gt;first FPV drones related article&lt;/a&gt; shortly after on September 18th, 2017. Please don’t judge it too much, as I have learned a lot about producing content since and have improved the quality and quantity of my posts by a mile. I’ve gone from casually sharing a thought or two, to writing posts with a reading time of 18-24 minutes, in-depth guides and tips with a lot of (and better) pictures, YouTube videos and more.&lt;/p&gt;

&lt;p&gt;I’ve loved and enjoyed putting together all of these posts and sharing what I know with the community. And this brings us to one of the most impactful things that happened to the blog - in January this year I got an email from Banggood about a potential collaboration.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Banggood is a huge Chinese online shop that also has fairly popular drones and FPV gear line up. I would assume the 2 biggest reasons for many people to purchase from there are: low prices and free shipping. Especially when you are building a drone from scratch and when learning, it’s a very good option, as your initial investment will be quite low. The downsides are that shipping could take anywhere from 2-3 weeks to over a month in some cases (although they are mitigating this by opening warehouses in the US and Europe) and that depending on your experience customer service satisfaction can vary. I have never had any issues with customer service, or with getting refunds for poor quality items, but I have heard of people who have had a bad experience and in the spirit of full disclosure, as always, I call things for what they are. But indeed, I have not had any issues.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And so it began - in February they sent me the first review model and in March I &lt;a href="https://blog.georgi-yanev.com/fpv/unbox-review-setup-eachine-trashcan/"&gt;published my first review of the Eachine Trashcan micro drone&lt;/a&gt; as a fruit of that collaboration. &lt;strong&gt;These types of collaborations are a win, win, win situation for the business, the blog and the readers&lt;/strong&gt;. The business gets customers they otherwise wouldn’t, the blog gets to produce helpful content, the users get to learn more about the products before buying. This additional commitment also makes it harder for me to procrastinate and not publish content, which is a well-received extra motivator.&lt;/p&gt;

&lt;p&gt;And that particular article had done very well; in fact, it easily is one of the biggest reasons for the blog’s growth this year with over 5.7k page views for the past 9 months, and a whopping 2k more than the next most popular article. I call those unicorns 🦄.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/4d1e006aa9e233b99e290b5c83bf484d/650af/year-in-review-2019-2.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzcbjsZi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/4d1e006aa9e233b99e290b5c83bf484d/650af/year-in-review-2019-2.png" alt="top 10 pageviews of blog.georgi-yanev.com for the past 9 months" title="top 10 pageviews of blog.georgi-yanev.com for the past 9 months" width="782" height="778"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is the monthly / weekly / daily active users report since the start of the blog, a little over two years ago. You can easily see how releasing more content has impacted the blog.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/cf2d8c771294e996fd5c4fc90d1951fd/530d4/year-in-review-2019-11.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ivk7BiPa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/cf2d8c771294e996fd5c4fc90d1951fd/530d4/year-in-review-2019-11.png" alt="Monthly active users report since the beginning of the blog" title="Monthly active users report since the beginning of the blog" width="485" height="391"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To illustrate better the kind of content explosion I’m talking about, let’s briefly compare the content stats for 2018 vs 2019.&lt;/p&gt;

&lt;p&gt;If we compare the stats for 2018 vs 2019, we have 10 vs 17 posts and &lt;code&gt;5500&lt;/code&gt; words vs &lt;code&gt;32404&lt;/code&gt; words. The word count increase alone is &lt;code&gt;589 %&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here’s a breakdown by the word count of all FPV drone-related content released in 2018 on this blog:&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/33834ddbe4c4a79e001f21a899d29372/1fbb4/year-in-review-2019-8.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pB1BMHj4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/33834ddbe4c4a79e001f21a899d29372/1fbb4/year-in-review-2019-8.png" alt="FPV drone articles by word count for 2018 released on blog.georgi-yanev.com" title="FPV drone articles by word count for 2018 released on blog.georgi-yanev.com" width="623" height="394"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is the content release in 2019:&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/278532a9e543958a26766cb31978c202/cfa3f/year-in-review-2019-9.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fos1zi8o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/278532a9e543958a26766cb31978c202/d3820/year-in-review-2019-9.png" alt="FPV drone articles by word count for 2019 released on blog.georgi-yanev.com" title="FPV drone articles by word count for 2019 released on blog.georgi-yanev.com" width="880" height="545"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In general, I’ve been writing much lengthier and in-depth posts with time to read in minutes anywhere from 1 to 21 minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/d45f3aba9794c22dd23e4f75ad39270a/2523e/year-in-review-2019-10.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SZb03R40--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/d45f3aba9794c22dd23e4f75ad39270a/2523e/year-in-review-2019-10.png" alt="Table of all FPV drone content released in 2019 on the blog" title="Table of all FPV drone content released in 2019 on the blog" width="765" height="405"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And getting items to review has directly fueled this and helped me to produce more and higher quality content, but &lt;strong&gt;really the biggest validator has been the people reading that content&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I really appreciate it and thank you for taking the time to read my reviews and guides, and I hope they are useful to you and you find what you came for. &lt;strong&gt;I would also like to thank SO MUCH all of my early supporters&lt;/strong&gt; (and there has been a lot of you, which makes me feel honored). All the people who subscribed to the newsletter or the YouTube channel, or follow on social media; all the people who bothered to leave comments, suggestions, and constructive feedback! That feedback has been implemented into the way I make the videos and as such, you have direct input and influence on how and where the YouTube channel goes!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’m trying to and hoping to provide as much value as possible while keeping things interesting and informative. I haven’t mentioned this so far, but putting together those blog posts with a reading time of ~ 15-20 minutes, takes a LOT of work. On average about 6 - 10 hours per post, depending on the amount of research and verification required. The actual drone and gear testing and evaluation takes much, much longer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initially I had no aspirations to do YouTube&lt;/strong&gt;. I created the &lt;a href="https://www.youtube.com/channel/UC2gwYMcfb0Oz_fl9W1uTV2Q"&gt;Georgi FPV YouTube channel&lt;/a&gt; mostly as a way for me to back up and put out there tons of raw flight footage.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/50329841b0e8321e6dd81ff43daa6680/84805/year-in-review-2019-3.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2YoXEnut--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/50329841b0e8321e6dd81ff43daa6680/d3820/year-in-review-2019-3.png" alt="Georgi FPV YouTube channel video playlists" title="Georgi FPV YouTube channel video playlists" width="880" height="545"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But, as I’ve released a total of over 321 videos since I started this adventure in roughly early March, I got a lot of practice, I refined my uploading, tagging, content management skills and dipped my toes into the YouTube platform - an experience I would end up appreciating and needing soon enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And so finally, this led to the announcement of the &lt;a href="https://www.youtube.com/channel/UCCh3SK2EktDdOQkEOTDmSCg"&gt;FPVTIPS YouTube channel&lt;/a&gt;&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/436647fe097eb304ff967ea644a3d627/396d6/year-in-review-2019-4.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ou2R_ZLo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/436647fe097eb304ff967ea644a3d627/d3820/year-in-review-2019-4.png" alt="Announcing the FPVTIPS YouTube channel" title="Announcing the FPVTIPS YouTube channel" width="880" height="566"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve had a lot of fun producing content for the channel. Video editing and production are hard, especially at first. This may have been one of my biggest learnings this year - video editing, production, sound, transitions, rendering, storage, voice-overs, writing scripts and so much more. It has been fun, it has been challenging. &lt;strong&gt;I wish I were able to produce at least 1 video per week, but that hadn’t been possible so far&lt;/strong&gt;. So I try to focus on quality and learning instead of quantity for now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It has been so cool to see so many people subscribe over the past few months! Words can’t describe how much I thank you and I appreciate that!&lt;/strong&gt; This is so much more important than you may realize because this and your comments act as a validator, that there is an audience for the content I produce, which in turn keeps me going! Thank you :)&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/4e6b67bf782de4f6058e4e3d0aeb48dc/7dadb/year-in-review-2019-5.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4hq3_VZo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/4e6b67bf782de4f6058e4e3d0aeb48dc/acf6b/year-in-review-2019-5.jpg" alt="Videos of the FPVTIPS YouTube channel" title="Videos of the FPVTIPS YouTube channel" width="880" height="765"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have such a long list of ideas and projects in the backlog for the channel, but only so much time. I do believe there will be a lot of interesting topics, however, and if you made it this far, I guess I can tease a few of the things that may be coming to the channel soon: snow gliding RC hovercraft, FPV racing cars, in-depth guide on battery charging and storage, and maybe even RC boats and submarines in the summer of 2020. &lt;a href="https://www.youtube.com/channel/UCCh3SK2EktDdOQkEOTDmSCg"&gt;📺 Go subscribe&lt;/a&gt; and stick around to get notified when those videos come out.&lt;/p&gt;

&lt;p&gt;Alternatively you can follow FPVTIPS on social media: &lt;a href="https://twitter.com/fpvtips"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.instagram.com/fpvtips/"&gt;Instagram&lt;/a&gt; or &lt;a href="https://www.facebook.com/fpvtips/"&gt;Facebook&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m looking forward to putting a lot more effort into the FPVTIPS YouTube channel in 2020. Hopefully working on creative ideas, improving the video and audio quality and do some giveaways.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/37378f1bae7d18a48fb537c24388a14c/74a85/year-in-review-2019-6.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DQTwqsXV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/37378f1bae7d18a48fb537c24388a14c/acf6b/year-in-review-2019-6.jpg" alt="New Yeti blue microphone" title="New Yeti blue microphone" width="880" height="1173"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Goals for 2020
&lt;/h2&gt;

&lt;p&gt;So 2020 is just around the corner - a new year, a new decade. What would be my goals in 2020? I think the most important things going forward would remain largely the same - family, software engineering career, FPV drones - flying, testing, releasing content for the blog and YouTube.&lt;/p&gt;

&lt;p&gt;I like having quantifiable goals whenever possible because it’s a bit easier to validate whether those were completed or not.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⬜ Major goals:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🎈 Have a fun time with the family. Quality vacations whether in Finland or away.&lt;/li&gt;
&lt;li&gt;💻 Build and work on cool projects. Learn new and get better at current software development skills.&lt;/li&gt;
&lt;li&gt;👨‍🎓 Learn, teach and play around with new things with Anton (Legos, robots, game dev with Unity, RC boats, ??)&lt;/li&gt;
&lt;li&gt;🎥 Release 3 videos per month for FPVTIPS on YouTube&lt;/li&gt;
&lt;li&gt;📝 Produce at least as much content for the blog in 2020 as in 2019 (~ 33k words, ~ 17 posts ballpark)&lt;/li&gt;
&lt;li&gt;📚 Diversify blog content further - articles on CrossFire radios and transmitters, long-range drone setups, Jumper radio, DJI digital FPV system&lt;/li&gt;
&lt;li&gt;🌿 Health. Work out, eating better. More focus on this, please!&lt;/li&gt;
&lt;li&gt;🚁 Fly FPV drones as much as possible 💙&lt;/li&gt;
&lt;li&gt;🏡 Buy a house&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ◻️ Minor goals:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🚤 Do at least 2 fun projects - RC snow glider / RC boat / RC FPV car&lt;/li&gt;
&lt;li&gt;🍿 Watch Avatar 2&lt;/li&gt;
&lt;li&gt;📈 Reach 500 subscribers on the FPVTIPS YouTube channel&lt;/li&gt;
&lt;li&gt;🤞 Watch Space X crewed launches&lt;/li&gt;
&lt;li&gt;📼 Get better and more efficient at video production&lt;/li&gt;
&lt;li&gt;🎤 Improve audio and video capture quality&lt;/li&gt;
&lt;li&gt;🎮 Play some nice new games if any come out&lt;/li&gt;
&lt;li&gt;🧪 Finish testingjavascript.com course&lt;/li&gt;
&lt;li&gt;👨‍🏫 Finish at least 5 courses from leveluptuts.com&lt;/li&gt;
&lt;li&gt;💻 Build our first computer with Anton&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  It’s a wrap!
&lt;/h2&gt;

&lt;p&gt;I prefer leaving those posts on a high note, but I’d also like to take a moment to mention those no longer around us. You are always with us and in our hearts and we miss you! It’s good to remember every once in a while.&lt;/p&gt;

&lt;p&gt;It’s also good to take a moment and appreciate those around us for what and who they are because they shape and define who and what we become.&lt;/p&gt;

&lt;p&gt;I’m looking forward to so many things in 2020 and I hope you too. Cheers, and enjoy! See you back here in one year.&lt;/p&gt;

</description>
      <category>yearinreview</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to publish a PWA on the Google Play store</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Sun, 30 Jun 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/how-to-publish-a-pwa-on-the-google-play-store-2bid</link>
      <guid>https://dev.to/jumpalottahigh/how-to-publish-a-pwa-on-the-google-play-store-2bid</guid>
      <description>&lt;p&gt;If you are into web development you might have heard the term &lt;a href="https://codelabs.developers.google.com/codelabs/your-first-pwapp/#0" rel="noopener noreferrer"&gt;Progressive Web App (PWA)&lt;/a&gt;. It has been floating around for quite a while now and is definitely no longer considered novelty. In fact, many big publications and sites have implemented the features required to be considered a PWA. This blog post does not aim to make you familiar with PWAs or to sell you on the idea, but I’d like to take a paragraph to at least demystify the core idea of what we are talking about before we get into how you could actually publish such an application on the Google Play store.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are familiar with PWAs or don’t care about the ‘why’, skip straight to publishing a PWA on Google Play.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you just want to see the end result - &lt;a href="https://play.google.com/store/apps/details?id=com.fpvtips&amp;amp;hl=en" rel="noopener noreferrer"&gt;fpvtips in Google Play&lt;/a&gt;. Based on the PWA at - &lt;a href="https://www.fpvtips.com" rel="noopener noreferrer"&gt;www.fpvtips.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Progressive Web Apps
&lt;/h3&gt;

&lt;p&gt;What are the benefits of having a PWA? Many. Ranging from overall site performance improvement, the ability to serve content while the user is offline, secure content via HTTPS, the capability to install the app on many devices, including &lt;a href="https://developers.google.com/web/progressive-web-apps/desktop" rel="noopener noreferrer"&gt;support for desktop installs&lt;/a&gt; landing recently.&lt;/p&gt;

&lt;p&gt;In a nutshell, a PWA has to have a manifest file and a service worker (and &lt;a href="https://developers.google.com/web/progressive-web-apps/checklist" rel="noopener noreferrer"&gt;many other things, here’s the full checklist&lt;/a&gt;). The manifest file (called &lt;code&gt;manifest.webmanifest&lt;/code&gt;) describes a number of app details, such as different logo assets, theme color, background color, app name, etc. You can &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Manifest" rel="noopener noreferrer"&gt;read more about the manifest file here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And here’s how the manifest file looks for my PWA - &lt;a href="https://www.fpvtips.com" rel="noopener noreferrer"&gt;www.fpvtips.com&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fpvtips.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"short_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FPVtips"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"start_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"background_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#ffffff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"theme_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#1960a0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"display"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"minimal-ui"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-48x48.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"48x48"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-72x72.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"72x72"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-96x96.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"96x96"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-144x144.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"144x144"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-192x192.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192x192"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-256x256.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"256x256"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-384x384.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"384x384"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/icon-512x512.png?v=3b3221797eeeddae218baf403c63f18d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"512x512"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Service workers are essentially scripts that allow you to support offline experiences on the web. If a user has no internet connection and they try to access a route on your app, they’d normally hit issues and get no content. What service workers do, is they install themselves on the first visit, and they can on subsequent visits serve content themselves, by intercepting the request, before it gets to the network. I’m oversimplifying and there are a number of strategies you could apply, and in general, at least for me, service workers can get very complicated, very quickly. I guess I’m just a regular developer and not a ninja/rockstar developer 😉. You can &lt;a href="https://developers.google.com/web/fundamentals/primers/service-workers/" rel="noopener noreferrer"&gt;read more about service workers&lt;/a&gt; on the Google developers fundamentals site.&lt;/p&gt;

&lt;p&gt;Luckily, there is a project that can help you to set up a service worker much easier than writing the whole functionality from scratch yourself. Check out &lt;a href="https://developers.google.com/web/tools/workbox/" rel="noopener noreferrer"&gt;Workbox&lt;/a&gt; if that’s the approach you’d like to take.&lt;/p&gt;

&lt;p&gt;Even luckier is the fact that a number of modern web frameworks support creating PWAs for you, so you don’t have to do much manually. That’s really slick!There are projects in React land such as &lt;a href="https://www.gatsbyjs.org/docs/progressive-web-app/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; and &lt;a href="https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app" rel="noopener noreferrer"&gt;Create React App&lt;/a&gt; (to name a couple), that make it trivial to get up and running with a fresh new PWA. If I remember correctly, the Vue CLI tooling also allows you to create a PWA with ease.&lt;/p&gt;

&lt;p&gt;Which brings me to my project and wraps up the PWA introduction. I’m running &lt;a href="https://www.fpvtips.com" rel="noopener noreferrer"&gt;www.fpvtips.com&lt;/a&gt; as a PWA, built with &lt;a href="https://www.gatsbyjs.org/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;. The source code of my project is open and available at &lt;a href="https://github.com/jumpalottahigh/fpvtips" rel="noopener noreferrer"&gt;https://github.com/jumpalottahigh/fpvtips&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I absolutely love building things with Gatsby, because it allows me to use React, GraphQL, deploys performance first built experiences, creates PWAs for breakfast and it's a joy to build things with.&lt;/strong&gt; You can read more about why &lt;a href="https://blog.georgi-yanev.com/learning/jamstack-with-gatsby-and-netlify/" rel="noopener noreferrer"&gt;I love the JAMstack, Gatsby and Netlify here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, you are following along and you have a basic PWA setup using Gatsby. You ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx gatsby new my-pwa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then you enabled the offline plugin in &lt;code&gt;gatsby-config.js&lt;/code&gt; by uncommenting it. Yes, that is really all it takes 💜. Bonus points for running &lt;code&gt;gatsby build&lt;/code&gt; and dragging and dropping the output folder called &lt;code&gt;public&lt;/code&gt; to &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;, effectively getting it up and running live on the internet in literally seconds. Crazy, right? And they say web dev is hard in 2019.&lt;/p&gt;

&lt;p&gt;Now onto the good stuff. For a while now, you could package up a site inside a web view and deploy that hybrid app to the Google Play store. However, if the user has no internet connection, you are out of luck. Now, there is a better way to do it, not requiring any web view shenanigans. Enter, &lt;a href="https://developers.google.com/web/updates/2019/02/using-twa" rel="noopener noreferrer"&gt;Trusted Web Activity (TWA)&lt;/a&gt;. I’m not gonna get into a lot of details, read up on it if you are curious to know more.&lt;/p&gt;

&lt;p&gt;Suffice it to say, I stumbled upon this &lt;a href="https://medium.com/@svenbudak/this-twa-stuff-rocks-finally-i-got-my-pwa-on-google-play-store-b92fe8dae31f" rel="noopener noreferrer"&gt;article by Sven Budak&lt;/a&gt; and this &lt;a href="https://fireship.io/lessons/pwa-to-play-store/" rel="noopener noreferrer"&gt;video by Fireship.io&lt;/a&gt; that detail how to use a TWA to set up a PWA for publishing to Google Play.&lt;/p&gt;

&lt;p&gt;But before we dive into my experience of setting up the approach outlined by Sven in his article (and a number of changes since then that I had to add), do &lt;strong&gt;be aware that there is an even easier way of getting this done by using a service called &lt;a href="https://pwa2apk.com/" rel="noopener noreferrer"&gt;pwa2apk&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let’s ship a PWA to Google Play
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;First, go grab a copy of &lt;a href="https://developer.android.com/studio/" rel="noopener noreferrer"&gt;Android Studio&lt;/a&gt; and install it on your computer alongside any packages it wants to download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go &lt;a href="https://play.google.com/apps/publish/signup/" rel="noopener noreferrer"&gt;pay Google $25 for the right to be called a Google Android Developer&lt;/a&gt; :).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone this repository - &lt;a href="https://github.com/GoogleChromeLabs/svgomg-twa" rel="noopener noreferrer"&gt;https://github.com/GoogleChromeLabs/svgomg-twa&lt;/a&gt;. This is the real star of the show. This boilerplate is fully setup so we don’t have to do anything except for changing a few strings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open that project in Android Studio, find the file &lt;code&gt;app/src/build.gradle&lt;/code&gt; and edit the following bits based on your project:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def twaManifest = [
    applicationId: 'com.fpvtips',
    hostName: 'fpvtips.com', // The domain being opened in the TWA.
    launchUrl: '/', // The start path for the TWA. Must be relative to the domain.
    name: 'FPVTIPS', // The name shown on the Android Launcher.
    themeColor: '#1960a0', // The color used for the status bar.
    backgroundColor: '#ffffff', // The color used for the splash screen background.
    enableNotifications: false // Set to true to enable notification delegation
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="/static/c4aa500fd1568ba2bcd90ae08c9f4688/23205/how-to-publish-a-pwa-on-google-play-1.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fc4aa500fd1568ba2bcd90ae08c9f4688%2F53327%2Fhow-to-publish-a-pwa-on-google-play-1.png" title="" alt="Android Studio build.gradle file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Create a signed build apk.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/c263e7bcb0b8480bf9f4baa6065ad462/23205/how-to-publish-a-pwa-on-google-play-2.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fc263e7bcb0b8480bf9f4baa6065ad462%2F53327%2Fhow-to-publish-a-pwa-on-google-play-2.png" title="" alt="Android Studio generate apk menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first time you will have to create a new key store.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/ef3410fc0353a089a6a3f5d828bc426a/250c6/how-to-publish-a-pwa-on-google-play-3.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fef3410fc0353a089a6a3f5d828bc426a%2F250c6%2Fhow-to-publish-a-pwa-on-google-play-3.png" title="" alt="Android Studio new key store dialog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in all the details and remember the password for later, we will need it in a second.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/a52a8930b931ede9f95751b330252aea/98bb9/how-to-publish-a-pwa-on-google-play-4.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fa52a8930b931ede9f95751b330252aea%2F98bb9%2Fhow-to-publish-a-pwa-on-google-play-4.png" title="" alt="Android Studio new key store dialog details filled in"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run this in a terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;keytool &lt;span class="nt"&gt;-list&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-keystore&lt;/span&gt; PATH_TO_YOUR_KEYSTORE &lt;span class="nt"&gt;-alias&lt;/span&gt; KEYSTORE_ALIAS &lt;span class="nt"&gt;-storepass&lt;/span&gt; YOUR_PASSWORD &lt;span class="nt"&gt;-keypass&lt;/span&gt; YOUR_PASSWORD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For me, a number of things went wrong at this point. If you get a message that &lt;code&gt;keytool is not recognized&lt;/code&gt;, you might have to add Java to your path, or if you are lazy (like me), just envoke keytool from the bin directory of your Java installation, or alternatively, just change directory to the /bin/ directory under your Java installation and run it from there.&lt;/p&gt;

&lt;p&gt;This is how I ran my command (I have only redacted my password away, but you get the idea):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;C:/Program&lt;span class="se"&gt;\ &lt;/span&gt;Files/Java/jre1.8.0_211/bin/
 ./keytool &lt;span class="nt"&gt;-list&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-keystore&lt;/span&gt; D:/Program&lt;span class="se"&gt;\ &lt;/span&gt;Files/Android/Android&lt;span class="se"&gt;\ &lt;/span&gt;Studio/fpvtips-keystore &lt;span class="nt"&gt;-alias&lt;/span&gt; key0 &lt;span class="nt"&gt;-storepass&lt;/span&gt; MY_PASSWORD &lt;span class="nt"&gt;-keypass&lt;/span&gt; MY_PASSWORD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If all goes well you will get a &lt;code&gt;SHA256&lt;/code&gt; which you need to copy for the next step. Beware of treacherous spaces in front of the string when you copy it.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/c80404ab5d8388beb89f585d62c3fd51/b87cb/how-to-publish-a-pwa-on-google-play-5.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fc80404ab5d8388beb89f585d62c3fd51%2Fb87cb%2Fhow-to-publish-a-pwa-on-google-play-5.png" title="" alt="running keytool in the command line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Go to &lt;a href="https://developers.google.com/digital-asset-links/tools/generator" rel="noopener noreferrer"&gt;Google Digital Asset Links&lt;/a&gt; and use their Statement List Generator and Tester tool. Fill in the information. Paste in the &lt;code&gt;SHA256&lt;/code&gt;, and hit &lt;code&gt;Generate Statement&lt;/code&gt;. Copy the output JSON.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/e2eb9d51efbfb57bcb025ebf7d4df1ab/442b3/how-to-publish-a-pwa-on-google-play-6.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fe2eb9d51efbfb57bcb025ebf7d4df1ab%2F53327%2Fhow-to-publish-a-pwa-on-google-play-6.png" title="" alt="Google Digital Asset Links, Statement List Generator and Tester tool"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Create a file at the root of your site under a directory called &lt;code&gt;.well-known&lt;/code&gt;, with a filename &lt;code&gt;assetlinks.json&lt;/code&gt;. Paste the JSON from the previous step into that file. Publish this file so that it is live. In the case of Gatsby, you would create the directory and the file under a directory called &lt;code&gt;static&lt;/code&gt;. This gets copied over to the root of the site in production.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/c96c7b8976d305d2218832bccb8dc268/b3818/how-to-publish-a-pwa-on-google-play-7.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fc96c7b8976d305d2218832bccb8dc268%2Fb3818%2Fhow-to-publish-a-pwa-on-google-play-7.png" title="" alt="Generated assetlinks.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Build a signed apk again and locate the file under &lt;code&gt;/app/release/app-release.apk&lt;/code&gt; or something similar.&lt;/p&gt;

&lt;p&gt;9.Create a new app in &lt;a href="https://play.google.com/apps/publish/" rel="noopener noreferrer"&gt;Google Play by going to the console&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/266d7036f1b34fb9403fffb59daabad2/c3783/how-to-publish-a-pwa-on-google-play-8.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F266d7036f1b34fb9403fffb59daabad2%2Fc3783%2Fhow-to-publish-a-pwa-on-google-play-8.png" title="" alt="create a new app in Google Play"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.Upload your APK file by going to &lt;code&gt;App releases&lt;/code&gt; and dragging and dropping the APK in the drop zone.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/2a419d31182b5e42d3bd4346e64e25ca/d2046/how-to-publish-a-pwa-on-google-play-9.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F2a419d31182b5e42d3bd4346e64e25ca%2F53327%2Fhow-to-publish-a-pwa-on-google-play-9.png" title="" alt="drag and drop app apk into Google Play console releases"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Fill in all required information and wait a bit for a review.&lt;/p&gt;

&lt;p&gt;It is from that App releases tab where you will eventually be able to release a test version or a production version of your app. I went straight for production. Whatever the case, you have to fill in a bunch of information, that actually takes less time than you would imagine at first, but it is still a bit cumbersome.&lt;/p&gt;

&lt;p&gt;A good indicator is the gray check mark icons that become green as soon as you have finished a section.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/e73fb3ac3258bbbef575a655e581c171/5155a/how-to-publish-a-pwa-on-google-play-10.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fe73fb3ac3258bbbef575a655e581c171%2F5155a%2Fhow-to-publish-a-pwa-on-google-play-10.png" title="" alt="Google Playlist of gray checkmarks to be completed before publishing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have completed everything, in some cases, you might have to wait a few minutes (for me it was under an hour) for a review, before your app is made available in the Google Play store.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/d4148df3fc112802b13c78c56f102c8b/33fe4/how-to-publish-a-pwa-on-google-play-11.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fd4148df3fc112802b13c78c56f102c8b%2F53327%2Fhow-to-publish-a-pwa-on-google-play-11.png" title="" alt="Google Play additional app review pending"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need to generate a lot of images quickly (you kind of need to), you can lean on this amazing tool - &lt;a href="https://romannurik.github.io/AndroidAssetStudio/index.html" rel="noopener noreferrer"&gt;Android Asset Studio&lt;/a&gt;.If you want to resolve the warning you get in the Google Play Console about asset optimization, make a new build but select App Bundle instead of an APK. That will create an optimized package.&lt;/p&gt;

&lt;p&gt;That’s all :) Congrats! You shipped a PWA to the Google Play store! Big up! If you’d like to connect, follow me on &lt;a href="https://twitter.com/jumpalottahigh" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://github.com/jumpalottahigh" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>android</category>
      <category>gatsby</category>
      <category>react</category>
    </item>
    <item>
      <title>JAMstack with Gatsby and Netlify</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Wed, 27 Mar 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/jamstack-with-gatsby-and-netlify-l3a</link>
      <guid>https://dev.to/jumpalottahigh/jamstack-with-gatsby-and-netlify-l3a</guid>
      <description>&lt;p&gt;This post is based on a talk I gave at &lt;a href="https://www.meetup.com/frontendfinland/events/258866782/" rel="noopener noreferrer"&gt;Frontend Finland 2019&lt;/a&gt; and at &lt;a href="https://twitter.com/helsinkijs" rel="noopener noreferrer"&gt;HelsinkiJS March 2019&lt;/a&gt; called: &lt;strong&gt;“JAMstack with Gatsby and Netlify”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/1b72efd01e626d5a46bd72aedad21008/3da90/jamstack-with-gatsby-and-netlify-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F1b72efd01e626d5a46bd72aedad21008%2F3da90%2Fjamstack-with-gatsby-and-netlify-1.jpg" title="" alt="Georgi presenting at Frontend Finland 2019"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🕳 Intro and why
&lt;/h2&gt;

&lt;p&gt;I’d like to share some thoughts about the &lt;a href="https://jamstack.org" rel="noopener noreferrer"&gt;JAMstack&lt;/a&gt;. And in particular - the JAMstack with &lt;a href="https://www.gatsbyjs.org/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; and &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;. I work as a &lt;a href="https://blog.georgi-yanev.com/learning/how-i-got-into-software-development/" rel="noopener noreferrer"&gt;web developer&lt;/a&gt; at F-Secure and I am convinced that performance on the web matters. &lt;a href="https://web30.web.cern.ch/" rel="noopener noreferrer"&gt;The web just had its 30th birthday&lt;/a&gt; and it’s our job to build performing and high-quality experiences.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/17de2f600c6ccccc98312534a2dd6488/7821d/jamstack-with-gatsby-and-netlify-0.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F17de2f600c6ccccc98312534a2dd6488%2F913e9%2Fjamstack-with-gatsby-and-netlify-0.jpg" title="" alt="Georgi's business card"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oh yeah, and I love flying FPV drones.&lt;/p&gt;

&lt;p&gt;So, let’s get to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  🥞 What is the JAMstack?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/f71b1b285c1d5cce3cf5c73514474711/61917/jamstack-with-gatsby-and-netlify-2.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Ff71b1b285c1d5cce3cf5c73514474711%2F913e9%2Fjamstack-with-gatsby-and-netlify-2.jpg" title="" alt="image of JAMstack description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Credit: jamstack.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;JAM&lt;/code&gt; acronym stands for &lt;code&gt;J&lt;/code&gt; avascript, &lt;code&gt;A&lt;/code&gt; PIs, &lt;code&gt;M&lt;/code&gt; arkup.&lt;/p&gt;

&lt;p&gt;It’s a term coined by &lt;a href="https://twitter.com/biilmann" rel="noopener noreferrer"&gt;Mathias Biilmann&lt;/a&gt; from Netlify and has been making rounds for the past few years. Let’s destructure the acronym.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;const { J } = JAM&lt;/code&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;“Any dynamic programming during the request/response cycle is handled by JavaScript, running entirely on the client. This could be any frontend framework, library, or even vanilla JavaScript.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;jamstack.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think the key takeaways here are &lt;strong&gt;running entirely on the client&lt;/strong&gt; and &lt;strong&gt;any framework, library or VanillaJS&lt;/strong&gt;. Cool, so pretty loose definition, which is great.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;const { A } = JAM&lt;/code&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;“All server-side processes or database actions are abstracted into reusable APIs, accessed over HTTPS with JavaScript. These can be custom-built or leverage third-party services.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;jamstack.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’d like to bring your attention here to the &lt;strong&gt;reusable APIs over HTTPS with JavaScript&lt;/strong&gt; and &lt;strong&gt;custom-built or third-party services&lt;/strong&gt;. Good definition, nothing groundbreaking, pretty simple.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;const { M } = JAM&lt;/code&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;“Templated markup should be prebuilt at deploy time, usually using a site generator for content sites, or a build tool for web apps.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;jamstack.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The markup part talks about &lt;strong&gt;prebuilt markup at deploy time&lt;/strong&gt;. Some tooling required, ok cool.&lt;/p&gt;

&lt;p&gt;Here are &lt;a href="https://jamstack.org/examples/" rel="noopener noreferrer"&gt;several example jamstack sites featured on jamstack.org/examples&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/2d09dcaf17d9367765bb75ca0ab9ea5b/7fa22/jamstack-with-gatsby-and-netlify-3.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F2d09dcaf17d9367765bb75ca0ab9ea5b%2F913e9%2Fjamstack-with-gatsby-and-netlify-3.jpg" title="" alt="Example jamstack sites featured on https://jamstack.org/examples/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again the interesting thing to note is that you could opt-in for any framework or library and still ship a JAMstack site. It’s interesting to also note the fact that many of the examples use headless CMS’s to pull in content.&lt;/p&gt;

&lt;p&gt;Here’s the part I personally like the most about the JAMstack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/33d1a3754974f5fd1990d9ce9c636b7a/06895/jamstack-with-gatsby-and-netlify-4.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F33d1a3754974f5fd1990d9ce9c636b7a%2F1bee4%2Fjamstack-with-gatsby-and-netlify-4.png" title="" alt="Core ideas of the JAMstack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  📈 Better Performance
&lt;/h4&gt;

&lt;p&gt;The biggest performance benefit with the JAMstack approach comes from the fact that we are serving prebuilt HTML from the CDN edge.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔐 Higher Security
&lt;/h4&gt;

&lt;p&gt;Less server side processes = less attack surface.&lt;/p&gt;

&lt;h4&gt;
  
  
  💵 Cheaper and Easier Scaling
&lt;/h4&gt;

&lt;p&gt;As a rule of thumb scaling is easy and efficient for static files and that’s what we are ultimately deploying.&lt;/p&gt;

&lt;h4&gt;
  
  
  😍 Better Developer Experience
&lt;/h4&gt;

&lt;p&gt;With a JAMstack approach, there are fewer things to maintain and it’s usually faster to deploy, so developers are happy.&lt;/p&gt;

&lt;h4&gt;
  
  
  Disclaimer
&lt;/h4&gt;

&lt;p&gt;While here I aim to focus more on the benefits of the JAMstack, it is worth noting that the JAMstack approach is not a silver bullet and it is not the answer to all problems. In engineering, it is a good idea to consider the trade-offs and choose the right approach for your project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineering is all about making the right trade-offs based on your requirements&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just a month ago &lt;a href="https://twitter.com/_developit" rel="noopener noreferrer"&gt;Jason Miller&lt;/a&gt; and &lt;a href="https://twitter.com/addyosmani" rel="noopener noreferrer"&gt;Addy Osmani&lt;/a&gt; from the Google Chrome team put together an &lt;a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web" rel="noopener noreferrer"&gt;article on when to use SSR and a comparison on many different rendering strategies&lt;/a&gt;.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;The article makes for an interesting read and in particular, this table is worth spending some time on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/6f592ffba7b652d4d8104eff9ec9e19a/7f95c/jamstack-with-gatsby-and-netlify-5.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F6f592ffba7b652d4d8104eff9ec9e19a%2F1bee4%2Fjamstack-with-gatsby-and-netlify-5.png" title="" alt="Comparison of different rendering strategies"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Credit: &lt;a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web" rel="noopener noreferrer"&gt;https://developers.google.com/web/updates/2019/02/rendering-on-the-web&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Finally, another resource worth checking out is the JAMstack video on the Google Chrome Developers YouTube channel by &lt;a href="https://twitter.com/DasSurma" rel="noopener noreferrer"&gt;Surma&lt;/a&gt; and &lt;a href="https://twitter.com/jaffathecake" rel="noopener noreferrer"&gt;Jake Archibald&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fjamstack-with-gatsby-and-netlify-6-50b3f93d034be3b993615e298e9633dc.svg" class="article-body-image-wrapper"&gt;&lt;img alt="Netlify logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fjamstack-with-gatsby-and-netlify-6-50b3f93d034be3b993615e298e9633dc.svg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next sections on different &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; features might come across a bit as fanboyish, and that’s because they largely are. I’m not even sorry, because everything I have outlined below has been my personal experience and for the better part everything has been outstanding.&lt;/p&gt;

&lt;h4&gt;
  
  
  😍 Dev Experience
&lt;/h4&gt;

&lt;p&gt;If you are active on Twitter and following any Frontend or Full stack people chances are you might have heard people praise Netlify for what it is, and rightfully so. In fact, I do so myself frequently. It’s because they are awesome, the product is great, and the developer experience score is over 9000.&lt;/p&gt;

&lt;h4&gt;
  
  
  💵 Free tier
&lt;/h4&gt;

&lt;p&gt;You can get started with the free tier in a matter of seconds and you will probably not outgrow it any time soon.&lt;/p&gt;

&lt;h4&gt;
  
  
  📦 Application Delivery Network (ADN)
&lt;/h4&gt;

&lt;p&gt;CDN for apps. Netlify comes with a powerful CDN for applications and static sites with plenty of edge nodes.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔁 Continuous Deployment
&lt;/h4&gt;

&lt;p&gt;If your project has a repository in GitHub, GitLab or Bitbucket, it’s a matter of a few clicks to link that repository to Netlify. This enables you to publish on merges or pushes to the &lt;code&gt;master&lt;/code&gt; branch of your repository, for example. Very easy to set up with no hassle, very powerful feature.&lt;/p&gt;

&lt;h4&gt;
  
  
  📑 SSL Certificates
&lt;/h4&gt;

&lt;p&gt;Netlify provides a free of charge SSL certificate for your project by utilizing the open source Let’s Encrypt project. This is important because in 2019 SSL and https are not only highly recommended they are almost a requirement. That provides better security for your users, is required for HTTP/2 and some new TLDs (like &lt;code&gt;.dev&lt;/code&gt;) and is good for SEO. The best part about it - Netlify automatically renews the certificates for you, so you don’t have to do anything!&lt;/p&gt;

&lt;h4&gt;
  
  
  📝 Custom Domains
&lt;/h4&gt;

&lt;p&gt;Here the developer experience comes first again, as it is just SO easy to set up a custom domain for your site. With a few clicks, you are good to go. The flow is very smooth. You can also rename the default subdomain where Netlify hosts your project by default, and redirect that to your custom domain. Very cool.&lt;/p&gt;

&lt;h4&gt;
  
  
  🚀 Auto previews for PRs
&lt;/h4&gt;

&lt;p&gt;When you open a pull request against the master branch of your repository, Netlify will automatically build a preview of that pull request. That’s super awesome! Again, no configuration required, apart from having a project linked to a GitHub repository. That’s pretty neat to be always able to check quickly how the changes from a PR look before you have merged it.&lt;/p&gt;

&lt;h4&gt;
  
  
  ƒ Netlify Functions
&lt;/h4&gt;

&lt;p&gt;AWS lambdas simplified. This is really nice to have in case you ever need to do a bit more with Node.js. You don’t have to use it if you don’t want to, but the feature is there which is neat.&lt;/p&gt;

&lt;h4&gt;
  
  
  🆔 Netlify Identity
&lt;/h4&gt;

&lt;p&gt;Provides authentication. A way to manage sign-ups, logins. Could be cool for things like the Netlify CMS or creating some sort of gated content like dashboards, personal account pages and more.&lt;/p&gt;

&lt;h4&gt;
  
  
  📅 Netlify Forms
&lt;/h4&gt;

&lt;p&gt;Get data from a form right into the Netlify app by only adding a &lt;code&gt;netlify&lt;/code&gt; attribute to a form. This could be very cool and quite useful you if don’t want to go over setting up something more complicated and you need to ship something now, or you are prototyping.&lt;/p&gt;

&lt;h4&gt;
  
  
  🙌 Deploy a site by dragging and dropping
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fjamstack-with-gatsby-and-netlify-7-986cd0438c37f9bc938e113bf783a397.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fjamstack-with-gatsby-and-netlify-7-986cd0438c37f9bc938e113bf783a397.gif" alt="Gif that shows how to deploy a simple hello world site on Netlify by dragging and dropping"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above is a 30-second deploy demo that gets your site on the internet at a netlify.com subdomain (that you can rename or set up your own custom domain) and an SSL certificate. It’s bonkers 🤯.&lt;/p&gt;

&lt;h4&gt;
  
  
  👍 Deploy from a repository
&lt;/h4&gt;

&lt;p&gt;But as I mentioned the true power of Netlify comes from connecting it straight to a repository, when you can reap the benefits of auto deploys, deploy previews and other nice things.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fjamstack-with-gatsby-and-netlify-8-405dc67cbefba905fd9f2f6cd334d0d2.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fjamstack-with-gatsby-and-netlify-8-405dc67cbefba905fd9f2f6cd334d0d2.svg" alt="Gatsby logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.gatsbyjs.org/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; is many times introduced as a React based static site generator (which it is) but it also doesn’t do it justice, because maybe some people miss the fact that Gatsby also rehydrates into a full-fledged React app during runtime.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔥 Blazing fast
&lt;/h4&gt;

&lt;p&gt;One of the most important points is that Gatsby is engineered for performance from the ground up. A default project setup with Gatsby starts off with Lighthouse scores of 100 across Performance, Accessibility, Best Practices, and SEO and can be configured in seconds to deploy as a &lt;a href="https://developers.google.com/web/progressive-web-apps/" rel="noopener noreferrer"&gt;Progressive Web App&lt;/a&gt; (PWA).&lt;/p&gt;

&lt;h4&gt;
  
  
  🛠 Tooling
&lt;/h4&gt;

&lt;p&gt;Gatsby comes with all the modern tools configured and setup for you. You get &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;, &lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt;, &lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;, &lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; and so much more.&lt;/p&gt;

&lt;h4&gt;
  
  
  📀 Your data from any source
&lt;/h4&gt;

&lt;p&gt;Gatsby creates GraphQL types of data from any source so that you can query it in a similar way across your app. The data can be sourced from headless CMS’s, third-party APIs, local file system and more. Some headless CMS options worth mentioning and trying out are: &lt;a href="https://www.contentful.com/" rel="noopener noreferrer"&gt;Contentful&lt;/a&gt;, &lt;a href="https://www.sanity.io/" rel="noopener noreferrer"&gt;Sanity&lt;/a&gt;, &lt;a href="https://www.datocms.com/" rel="noopener noreferrer"&gt;DatoCMS&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  📦 Deploy Anywhere
&lt;/h4&gt;

&lt;p&gt;Because Gatsby compiles your project into static files (HTML, CSS, JS, JSON) you can deploy the output anywhere you could deploy static assets. For example: &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;, &lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;AWS S3&lt;/a&gt;, &lt;a href="https://zeit.co/now" rel="noopener noreferrer"&gt;Now&lt;/a&gt;, &lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt; and more.&lt;/p&gt;

&lt;h4&gt;
  
  
  🅿W🅰
&lt;/h4&gt;

&lt;p&gt;You can create a PWA in seconds by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npx gatsby new my-pwa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then enabling the &lt;code&gt;gatsby-plugin-offline&lt;/code&gt; in &lt;code&gt;gatsby-config.js&lt;/code&gt; by uncommenting it.&lt;/p&gt;

&lt;h4&gt;
  
  
  👩‍💻 DX
&lt;/h4&gt;

&lt;p&gt;The developer experience is pretty solid. There many helpful warning and error messages with actionable information available right in your terminal should any issues arise while you are developing.&lt;/p&gt;

&lt;p&gt;Because Gatsby uses Webpack under the hood, you get Hot Module Replacement (HMR) and previewing changes while developing is nearly instant as soon as you save the file.&lt;/p&gt;

&lt;p&gt;Except for booting up your project on &lt;code&gt;localhost:8000&lt;/code&gt;, Gatsby also gives you a GraphiQL instance at &lt;code&gt;localhost:8000/___graphql&lt;/code&gt; where you can live query your data and prototype GraphQL queries, as well as just explore the shape of your data. Very useful!&lt;/p&gt;

&lt;h4&gt;
  
  
  🔄 Rich ecosystem
&lt;/h4&gt;

&lt;p&gt;There are plenty of resources to get you started. More than 700 plugins and plenty of starters that are just an &lt;code&gt;npx gatsby new [GITHUB REPO URL]&lt;/code&gt; away.&lt;/p&gt;

&lt;h4&gt;
  
  
  💜 Amazing community
&lt;/h4&gt;

&lt;p&gt;The community around Gatsby is comprised of many people passionate about the future of the project, willing to help each other out. There are a LOT of articles out there on complete stacks, solving a particular problem, or just using a specific data source. That makes it easy to find an example when you need one.&lt;/p&gt;

&lt;p&gt;There is a &lt;a href="https://gatsby.app/discord" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; channel, &lt;a href="https://spectrum.chat/gatsby-js" rel="noopener noreferrer"&gt;Spectrum&lt;/a&gt; community and following &lt;a href="https://twitter.com/gatsbyjs" rel="noopener noreferrer"&gt;Gatsby on Twitter&lt;/a&gt; is probably a good idea, as the main account tweets and retweets many useful resources.&lt;/p&gt;

&lt;p&gt;In fact, some people might be so passionate, as to have claimed that a Gatsby project can get a Lighthouse performance score of 70+ while running at CDN edge on a &lt;em&gt;TOASTER&lt;/em&gt;.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;Here’s how the Lighthouse scores of the default Gatsby starter look, for illustration purposes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/c644ba05afac5ed217069133ce98f914/8ee63/jamstack-with-gatsby-and-netlify-9.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fc644ba05afac5ed217069133ce98f914%2F61009%2Fjamstack-with-gatsby-and-netlify-9.png" title="" alt="image of Gatsby default starter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 #Perfmatters
&lt;/h3&gt;

&lt;p&gt;Here’s where I take a small tangent on a topic I care deeply about - web performance.&lt;/p&gt;

&lt;p&gt;There are many reasons to care about performance, but at the end of the day, it’s Your users and Your business on the line.&lt;/p&gt;

&lt;p&gt;Performance, speed, user satisfaction all translate to real money. There are also SEO benefits for fast sites as of July 2018 as page speed is now a part of the page ranking algorithm.&lt;/p&gt;

&lt;p&gt;Having a fast, performing site is a good way to distinguish yourself from your competition. Users are impatient nowadays, and slow sites lead to increased bounce rates.&lt;/p&gt;

&lt;p&gt;Finally, as we welcome the next 1 billion users on the internet, it’s good to be aware that they might be coming online from places where bandwidth is expensive and connections could be flaky.&lt;/p&gt;

&lt;p&gt;Now that the Web had its 30th birthday, let’s be nice and build quality experiences!&lt;/p&gt;

&lt;h4&gt;
  
  
  What can Gatsby do about that?
&lt;/h4&gt;

&lt;p&gt;Well, as I mentioned already, Gatsby is engineered for performance from the ground up. There are many things that Gatsby does right and manages for you. From how resources are loaded to optimize for the &lt;a href="https://developers.google.com/web/fundamentals/performance/critical-rendering-path/" rel="noopener noreferrer"&gt;critical rendering path (CRP)&lt;/a&gt;, to how resources are prefetched and preloaded for routes the user might hit next.&lt;/p&gt;

&lt;p&gt;But I’d like to talk about the &lt;code&gt;gatsby-image&lt;/code&gt; component. Opting-in to use that for your images, is a great way to grab some of those high impact low effort low hanging fruit.&lt;/p&gt;

&lt;p&gt;Depending on what your app is like, images could make up for a big portion of all the resources you serve to users. In some cases, it could be up north of 70%. Now, admittedly, byte for byte JavaScript has a higher cost than images, because it also undergoes parsing and execution after downloading, but Gatsby manages that for you, and images are still very important to handle right.&lt;/p&gt;

&lt;p&gt;At the very least I suggest you use &lt;a href="https://squoosh.app/" rel="noopener noreferrer"&gt;squoosh.app&lt;/a&gt; to resize and optimize your original assets.&lt;/p&gt;

&lt;p&gt;What &lt;code&gt;gatsby-image&lt;/code&gt; does for you is it provides you with a highly optimized lazy loading image component. Images not in the viewport during page load are not going to be downloaded. In their place, you could opt-in for a low-quality base64 encoded image placeholder, that gets replaces with the original high-quality image as soon as the user scrolls that asset in the viewport. Gatsby provides you a blur up effect or a traced SVG effect if that’s what you choose how to handle the low-quality placeholder.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;gatsby-image&lt;/code&gt; component also has a &lt;code&gt;srcset&lt;/code&gt; attribute where different size images are specified based on viewport width to avoid serving extra large assets to devices that couldn’t use up the full size of the image.&lt;/p&gt;

&lt;p&gt;Finally, the component serves &lt;code&gt;webp&lt;/code&gt; images to browsers that can handle that. There is always a fallback for &lt;code&gt;jpeg&lt;/code&gt; or &lt;code&gt;png&lt;/code&gt;, but serving &lt;code&gt;webp&lt;/code&gt; can help a lot because the file size is usually significantly smaller with a visibly similar quality as &lt;code&gt;jpeg&lt;/code&gt; or &lt;code&gt;png&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try out React and GraphQL for the first time
&lt;/h3&gt;

&lt;p&gt;Whether you are a seasoned veteran or a newcomer to the &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt; and &lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; world, it is easy to get started with those technologies when using Gatsby. I think it’s worth mentioning that because you don’t need a whole lot of prior knowledge to get started here. You can write your first React component or a GraphQL query today with Gatsby.&lt;/p&gt;

&lt;p&gt;And because Gatsby is using React under the hood, that means you could pull up any React package from &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;npm&lt;/a&gt;. Yay 🎉!&lt;/p&gt;

&lt;h3&gt;
  
  
  How does Gatsby work in a nutshell?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/8626cb70182f831275a076d68b18b807/85ea0/jamstack-with-gatsby-and-netlify-10.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F8626cb70182f831275a076d68b18b807%2F1bee4%2Fjamstack-with-gatsby-and-netlify-10.png" title="" alt="image of Gatsby architecture, holistic overview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Image from gatsbyjs.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quite straightforward. We have our data sources at the top. Those could be anything from headless CMS’s to local JSON or YAML files, to 3rd party APIs and others.&lt;/p&gt;

&lt;p&gt;Gatsby pulls those in and generates GraphQL types for you that you can query against. &lt;code&gt;localhost:8000/___graphql&lt;/code&gt; is your friend when you want to explore the data.&lt;/p&gt;

&lt;p&gt;Then, bring in the data to your components using GraphQL queries, which makes said data available as a &lt;code&gt;data&lt;/code&gt; prop on your components. Use it to build your components.&lt;/p&gt;

&lt;p&gt;When you run &lt;code&gt;gatsby build&lt;/code&gt;, Gatsby will create a production build in the &lt;code&gt;public&lt;/code&gt; directory at the root. Use that to deploy the assets to any static web host (Netlify, AWS, Now, GitHub pages, etc).&lt;/p&gt;

&lt;h3&gt;
  
  
  How to get started?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  CLI
&lt;/h4&gt;

&lt;p&gt;To get started from the command line run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npx gatsby new my-site
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will set up for you the default Gatsby starter project.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://codesandbox.io/" rel="noopener noreferrer"&gt;CodeSandbox.io&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;You can try out Gatsby right in CodeSandbox. Create a new sandbox and select Gatsby from the server templates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/90ce7e2919fd60ca99acda2e87cd532f/57193/jamstack-with-gatsby-and-netlify-11.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F90ce7e2919fd60ca99acda2e87cd532f%2F57193%2Fjamstack-with-gatsby-and-netlify-11.png" title="" alt="image of codesandbox starters"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  By deploying to Netlify
&lt;/h4&gt;

&lt;p&gt;Use the green deploy to Netlify button, available on many starter repositories to instantly deploy a version of that project to Netlify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/5ca96315f909940022f12568c60eea2f/cffb5/jamstack-with-gatsby-and-netlify-12.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F5ca96315f909940022f12568c60eea2f%2Fcffb5%2Fjamstack-with-gatsby-and-netlify-12.png" title="" alt="image of netlify deploy button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, pass a Gatsby starter repository to the &lt;code&gt;repository&lt;/code&gt; parameter as seen below:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://app.netlify.com/start/deploy?repository=https://github.com/gatsbyjs/gatsby-starter-default&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Sources
&lt;/h3&gt;

&lt;p&gt;One of the nice things about Gatsby is the fact that you could pipe in data from many different data sources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/116ec4717227e37c9e915a4162c0f1bb/6cf75/jamstack-with-gatsby-and-netlify-13.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F116ec4717227e37c9e915a4162c0f1bb%2F913e9%2Fjamstack-with-gatsby-and-netlify-13.jpg" title="" alt="image of some data sources you could use with Gatsby"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whatever the source - local file system or a headless CMS, the data is available to query in GraphiQL. Try it for yourself right now!&lt;/p&gt;

&lt;p&gt;In this example project, we have data coming in from JSON files as seen on the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/288e4fd3aad3c6e97beb8ffa78dd83ac/d3555/jamstack-with-gatsby-and-netlify-14.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F288e4fd3aad3c6e97beb8ffa78dd83ac%2F913e9%2Fjamstack-with-gatsby-and-netlify-14.jpg" title="" alt="image of project structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, in the editor below type in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  allPagesJson
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and press the play button to execute the query. GraphiQL will fill in some extra subfields for you, namely &lt;code&gt;edges&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt; and &lt;code&gt;id&lt;/code&gt;. In the right pane, you see the data that comes back from your query. Try it out!&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/k3201jy9jo?initialpath=/___graphql"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Let’s add also &lt;code&gt;path&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;body&lt;/code&gt; each on a separate line below &lt;code&gt;id&lt;/code&gt;. Click play and see how data for those fields come back as well. Awesome! Congrats on trying out your first GraphQL query!&lt;/p&gt;

&lt;p&gt;Here is the final query for illustration purposes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  allPagesJson {
    edges {
      node {
        id
        path
        title
        body
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep in mind, &lt;code&gt;CTRL&lt;/code&gt; + &lt;code&gt;Space&lt;/code&gt; is your friend here. It invokes the autocompletion which is handy for remembering what fields you wanted to fetch.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔁 Ecosystem
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Plugins
&lt;/h4&gt;

&lt;p&gt;There are &lt;a href="https://www.gatsbyjs.org/plugins/" rel="noopener noreferrer"&gt;more than 700 plugins&lt;/a&gt; (at least the ones listed on the official site) for Gatsby, which is a lot. Those plugins are chunks of reusable functionality you can bring into your projects by installing them and configuring them in &lt;code&gt;gatsby-config.js&lt;/code&gt;. I’m not even going to get into the examples, just search for what you have in mind and chances are it exists. If it does not, then maybe that’s a good opportunity to write a plugin yourself and share it with the community. The tutorial on &lt;a href="https://www.gatsbyjs.org/docs/source-plugin-tutorial/" rel="noopener noreferrer"&gt;how to create a source plugin&lt;/a&gt; is a great place to start.&lt;/p&gt;

&lt;p&gt;Some plugins enable a certain type of functionality, like create a sitemap, RSS feed or add Google Analytics to your site. Others are the so-called &lt;strong&gt;source&lt;/strong&gt; plugins that deal with fetching data. Yet another type is the &lt;strong&gt;transformer&lt;/strong&gt; plugins that, well… transform data. For instance from JSON or YAML in your local file system to types you can query from within Gatsby.&lt;/p&gt;

&lt;p&gt;It’s also worth mentioning that you could also create local plugins, right within your project. This enables you to create custom private plugins if you have a use case for that (for example an internal company API).&lt;/p&gt;

&lt;h4&gt;
  
  
  Starters
&lt;/h4&gt;

&lt;p&gt;While plugins are more about bringing in chunks of functionality as you need it, &lt;a href="https://www.gatsbyjs.org/starters/?v=2" rel="noopener noreferrer"&gt;starters are a more well-rounded solution&lt;/a&gt;. A starter is a complete project starting boilerplate based on a specific use case, functionality or a data source.&lt;/p&gt;

&lt;p&gt;For example, if you’d like to get started very quickly and you know your project will use data from &lt;a href="https://www.contentful.com/" rel="noopener noreferrer"&gt;Contentful&lt;/a&gt; and will be deployed to &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; you can start right away with a starter configured for that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npx gatsby new https://github.com/ryanwiemer/gatsby-starter-gcn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are starters for &lt;a href="https://www.gatsbyjs.org/starters/?c=Blog&amp;amp;v=2" rel="noopener noreferrer"&gt;blogging&lt;/a&gt;, with &lt;a href="https://www.gatsbyjs.org/starters/?c=SEO&amp;amp;v=2" rel="noopener noreferrer"&gt;SEO emphasis&lt;/a&gt;, for &lt;a href="https://www.gatsbyjs.org/starters/?c=PWA&amp;amp;v=2" rel="noopener noreferrer"&gt;PWAs&lt;/a&gt;, depending on your choice of a &lt;a href="https://www.gatsbyjs.org/starters/?c=Styling%3ACSS-in-JS&amp;amp;v=2" rel="noopener noreferrer"&gt;styling solution&lt;/a&gt; and more.&lt;/p&gt;

&lt;p&gt;Overall starters are great. There is only one minor potential shortcoming. Right now, if you wanted to pull in updates from the starter you are using as it gets improved over time, you can’t really do that, as your project is completely detached from the starter after the initial setup. The Gatsby team is working on a feature that might change that - &lt;a href="https://www.youtube.com/watch?v=PS2784YfPpw" rel="noopener noreferrer"&gt;THEMES&lt;/a&gt;. That could be really powerful.&lt;/p&gt;

&lt;h4&gt;
  
  
  Showcase
&lt;/h4&gt;

&lt;p&gt;The &lt;a href="https://www.gatsbyjs.org/showcase/" rel="noopener noreferrer"&gt;showcase page on gatsbyjs.org&lt;/a&gt; has a lot of interesting examples for you to check out if you need inspiration and ideas. Or why not &lt;a href="https://www.gatsbyjs.org/contributing/site-showcase-submissions/" rel="noopener noreferrer"&gt;submit your own projects to share them with the community&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  So, what can you build with Gatsby?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Landing pages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/89579ad7dbbba43f4ab9ee79e0672f06/c2d0e/jamstack-with-gatsby-and-netlify-15.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F89579ad7dbbba43f4ab9ee79e0672f06%2F1bee4%2Fjamstack-with-gatsby-and-netlify-15.png" title="" alt="image of justdoit.nike.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;justdoit.nike.com&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Image heavy sites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/95cab71ad921451c635084846dab5cad/a2c09/jamstack-with-gatsby-and-netlify-16.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F95cab71ad921451c635084846dab5cad%2F913e9%2Fjamstack-with-gatsby-and-netlify-16.jpg" title="" alt="image of kirstennoelle.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;kirstennoelle.com&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You could build gorgeous projects with a lot of “heavy” high-quality images and still be very performant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data visualization heavy apps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/2a97074c4a36428360e0546d0a6c8b93/a2c09/jamstack-with-gatsby-and-netlify-17.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F2a97074c4a36428360e0546d0a6c8b93%2F913e9%2Fjamstack-with-gatsby-and-netlify-17.jpg" title="" alt="image of 2018.stateofjs.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;2018.stateofjs.com&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/5ee8d5e0a4ae3c58cd124807409d37f8/65025/jamstack-with-gatsby-and-netlify-18.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F5ee8d5e0a4ae3c58cd124807409d37f8%2F913e9%2Fjamstack-with-gatsby-and-netlify-18.jpg" title="" alt="image of store.gatsbyjs.org"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;store.gatsbyjs.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Blog&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/3d05de4abac1e0801713309aadafd7f6/e3a52/jamstack-with-gatsby-and-netlify-19.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F3d05de4abac1e0801713309aadafd7f6%2F913e9%2Fjamstack-with-gatsby-and-netlify-19.jpg" title="" alt="image of airbnb.io"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;airbnb.io&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Documentation sites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/e0475e7c8bea43f1138de25e388d44ae/0fbfa/jamstack-with-gatsby-and-netlify-20.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fe0475e7c8bea43f1138de25e388d44ae%2F1bee4%2Fjamstack-with-gatsby-and-netlify-20.png" title="" alt="image of reactjs.org"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;reactjs.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  My projects
&lt;/h3&gt;

&lt;p&gt;Some of the things I’ve built with Gatsby are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;georgiyanev.dev&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/e6a9708eb1dd639351e52783c210e7eb/6cf22/jamstack-with-gatsby-and-netlify-21.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fe6a9708eb1dd639351e52783c210e7eb%2F913e9%2Fjamstack-with-gatsby-and-netlify-21.jpg" title="" alt="screenshot of this blog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Gatsby, Netlify, Markdown, Styled Components, Sitemap, RSS feed&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;fpvtips.com&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/96ff2075f09ed1119dc211f2cc9c4b6b/350c2/jamstack-with-gatsby-and-netlify-22.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F96ff2075f09ed1119dc211f2cc9c4b6b%2F913e9%2Fjamstack-with-gatsby-and-netlify-22.jpg" title="" alt="screenshot of fpvtips.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Gatsby, Contentful, Netlify, Google Maps, Open Weather Map, Material UI, Markdown, JSON&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;baehrbg.com&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/1e2a8abc64764ebecf597c7631e26b50/6cf22/jamstack-with-gatsby-and-netlify-23.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F1e2a8abc64764ebecf597c7631e26b50%2F913e9%2Fjamstack-with-gatsby-and-netlify-23.jpg" title="" alt="screenshot of baehrbg.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Gatsby, Contentful, Netlify, React Reveal, React Icons&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I had a lot of fun building these projects. And the fact that they are deployed from Netlify has saved me a TON of time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In fact, I think there is a direct correlation between the time that has passed since I started using Netlify and the number of projects I have deployed and maintain.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The former is also very important, as there have been so many times I needed to fix a typo, squash a bug, and all I had to do was commit my fix to the repository. Netlify took care of the rest, deploying my site automatically!&lt;/p&gt;

&lt;p&gt;All my projects are open source and available on GitHub at &lt;a href="https://github.com/jumpalottahigh" rel="noopener noreferrer"&gt;https://github.com/jumpalottahigh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/bb0277c53e0c395327fb86b8a9f9b5f9/92f32/jamstack-with-gatsby-and-netlify-24.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2Fbb0277c53e0c395327fb86b8a9f9b5f9%2F1bee4%2Fjamstack-with-gatsby-and-netlify-24.png" title="" alt="image of Georgi's GitHub profile"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👩‍🎓 If you want to learn more…
&lt;/h3&gt;

&lt;p&gt;Depending on what works for you, you might prefer to learn by doing, from videos or by reading. Whatever the case, I do recommend doing the official &lt;a href="https://www.gatsbyjs.org/tutorial/" rel="noopener noreferrer"&gt;Gatsby tutorial&lt;/a&gt; and peeking in the &lt;a href="https://www.gatsbyjs.org/docs/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; whenever you need to. Additionally, there are many projects out there, including many Gatsby starters, that you can learn from by example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contribute and get swag
&lt;/h3&gt;

&lt;p&gt;Gatsby is open source and as such is happy to &lt;a href="https://www.gatsbyjs.org/contributing/" rel="noopener noreferrer"&gt;accept your contributions&lt;/a&gt;. This is also a great way to learn and why not grab some sweet, sweet swag while at it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.georgi-yanev.com/static/7c6894a382f46f5db1b6a2f4e3d5b9bb/1bee4/jamstack-with-gatsby-and-netlify-25.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.georgi-yanev.com%2Fstatic%2F7c6894a382f46f5db1b6a2f4e3d5b9bb%2F1bee4%2Fjamstack-with-gatsby-and-netlify-25.png" title="" alt="image of contributing to Gatsby and get swag"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔚 Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope I managed to get you excited to build something with Gatsby and Netlify. That’s what it boils down to in the end. I had a lot of fun, and I felt very productive using these technologies. They literally helped me SHIP. That’s why I wanted to share my experience and hopefully excite you to build something today too.&lt;/p&gt;

&lt;p&gt;Additionally, I hope I managed to drive home the &lt;strong&gt;performance matters&lt;/strong&gt; point. It’s up to all of us to build the web for tomorrow today. How we do that matters and shipping fast, high-quality experiences should not be underestimated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go have fun building things with Gatsby and Netlify!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>jamstack</category>
      <category>gatsby</category>
      <category>netlify</category>
    </item>
    <item>
      <title>How to publish a package on NPM</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/how-to-publish-a-package-on-npm-816</link>
      <guid>https://dev.to/jumpalottahigh/how-to-publish-a-package-on-npm-816</guid>
      <description>&lt;p&gt;A couple of weeks ago I created and published &lt;a href="https://www.npmjs.com/package/react-toggle-emoji"&gt;my first node package on NPM&lt;/a&gt; and it was a lot of fun. Much to my surprise, it was much easier than I thought.&lt;/p&gt;

&lt;p&gt;There are at least a few &lt;a href="https://github.com/sindresorhus/node-module-boilerplate"&gt;boilerplate&lt;/a&gt; and &lt;a href="https://github.com/kentcdodds/generator-kcd-oss"&gt;scaffolding tools&lt;/a&gt; to help you get started, and while they probably are the way to go, because they come with all the tooling, tests and hooks, here’s a simple example of actually publishing a node package. There are plenty of guides on how to do it, including &lt;a href="https://docs.npmjs.com/creating-node-js-modules"&gt;this article&lt;/a&gt; right on npm’s docs, but here’s one way on how to get a minimum setup going on.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔁 Make a new repository on GitHub
&lt;/h3&gt;

&lt;p&gt;Create a new repository and clone it locally on your machine. Then change directory into it and open the folder with your favorite editor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/jumpalottahigh/how-to-publish-to-npm
&lt;span class="nb"&gt;cd &lt;/span&gt;how-to-publish-to-npm/
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✨ Run npm init
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also pass &lt;code&gt;-y&lt;/code&gt; to auto say yes to every question in the initializer. I’d say you probably want to review the information, so maybe go slower. Because we just want to see how things work, the defaults will suffice.&lt;/p&gt;

&lt;p&gt;Check your &lt;code&gt;package.json&lt;/code&gt; and make sure that the &lt;code&gt;main&lt;/code&gt; key points to your entry point for the module. For now, let’s make it point to &lt;code&gt;index.js&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Write the module
&lt;/h3&gt;

&lt;p&gt;Create index.js,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;… and let’s export a simple function called &lt;code&gt;sum&lt;/code&gt;, that adds two numbers together and returns the result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📢 Publish the package
&lt;/h3&gt;

&lt;p&gt;Stage, commit and push all your changes to the remote repository on GitHub.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Export a sum function"&lt;/span&gt;
git push origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, you need to login to npm, so run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you have gone through the flow, you are ready to publish your package using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it, it’s indeed that easy! Go to &lt;a href="https://www.npmjs.com/"&gt;npmjs.com&lt;/a&gt; and search for your newly published package by the name you gave it.&lt;/p&gt;

&lt;h3&gt;
  
  
  🍴 Consume the module
&lt;/h3&gt;

&lt;p&gt;Last but not least, let’s try it out. In your favorite project of choice install the package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i how-to-publish-to-npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then use it in code as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Importing the module using a named import&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;how-to-publish-to-npm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;// 18&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🆙 Upgrading the package
&lt;/h3&gt;

&lt;p&gt;Say you make some changes to your function and want to release a new version. You can use &lt;code&gt;npm version&lt;/code&gt; to bump the package version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm version major &lt;span class="c"&gt;# 1.0.0&lt;/span&gt;
npm version minor &lt;span class="c"&gt;# 0.1.0&lt;/span&gt;
npm version patch &lt;span class="c"&gt;# 0.0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read more about &lt;a href="https://docs.npmjs.com/cli/version.html"&gt;bumping a package version&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then you can release the package again with the new version, running &lt;code&gt;npm publish&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌯 Wrap up
&lt;/h3&gt;

&lt;p&gt;That’s all of it! Congrats 🎉! It is really not as complicated as one may think (or at least I did). I hope this inspires you to author your own modules and to share them with the Node community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also, please don’t ship modules like that to production.&lt;/strong&gt; For the sake of creating a proof of concept (PoC) and just getting something out there, we heavily overlooked testing and continuous integration. There’s nothing stopping you from starting small and bringing in all the bells and whistles when you need them or starting with a generated project. You do you!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>npm</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Goal review for 2018 and a look into 2019 🎉</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Sun, 09 Dec 2018 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/goal-review-for-2018-and-a-look-into-2019--43b8</link>
      <guid>https://dev.to/jumpalottahigh/goal-review-for-2018-and-a-look-into-2019--43b8</guid>
      <description>&lt;p&gt;It’s that time of the year again, and what a year it has been! Strap yourselves in, this is gonna be a long one!&lt;/p&gt;

&lt;p&gt;I really enjoy these &lt;a href="https://blog.georgi-yanev.com/learning/recap-of-2017-and-goals-for-2018/"&gt;reflection posts&lt;/a&gt;. They shed a lot of light on what happened in the past 12 months. If anything, I think we should all reflect even more frequently, because it helps you build clarity and see how you have improved against yourself from the previous year. And this is important. While there’s nothing particularly wrong with looking up to other people in your industry, it might not be the best guiding point to compare against those same people.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Always compare yourself, against your past self!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So these are some of the items I set as goals for myself last year, and this is their progress:&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/842d5b1a86ff4c1ee5366fc168b05b3c/92b20/goal-review-of-2018-and-goals-for-2019-1.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--asQMrEzI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/842d5b1a86ff4c1ee5366fc168b05b3c/1b588/goal-review-of-2018-and-goals-for-2019-1.png" alt="List of goals for 2018 and their status" width="590" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am happy to report that I achieved most of my goals, dropped a few as a result of a conscious decision and might move a few into the future.&lt;/p&gt;

&lt;p&gt;So, in general, 2018 has been a great year! I am very happy with the outcome in so many ways, with plenty of learning opportunities, a lot of fun and family time!&lt;/p&gt;

&lt;h3&gt;
  
  
  🌤️ General
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;In 2018 the weather in Finland had been amazing!!!&lt;/strong&gt; Ranging all the way from early May thru October, it has been mostly very warm and nice, with plenty of daylight and sunshine. Pure awesome! And the reason why this is so special, is because it is a bit rare, most summers tend to be rainy and on the colder side. 2018 weather 11/10.&lt;/p&gt;

&lt;p&gt;We also &lt;a href="https://www.instagram.com/p/BnoWjBWhAEF/"&gt;had our first vacation&lt;/a&gt; since Anton was born and went on to visit my family in Cyprus in September. Perfect time to be there, as temperatures in Finland started to drop, but in Cyprus it was stil in the 30s (C) during the day. We had a great time!&lt;/p&gt;

&lt;p&gt;Now let’s rewind and back up a little bit.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎓 Completing the Google Developer Challenge: Udacity Mobile Web Specialist Nano degree
&lt;/h3&gt;

&lt;p&gt;So in the early 2018, the most notable things for me were the absolutely spectacular launch of the Space X Falcon Heavy rocket that took its &lt;a href="https://www.whereisroadster.com/"&gt;Starman&lt;/a&gt; payload into orbit past Mars, and my participation in the Google Scholarship Challenge for a Mobile Web Specialist Nanodegree with Udacity. What a mountful! The Space X launch was a memory for life for me, just &lt;a href="https://twitter.com/jumpalottahigh/status/961116348825862144"&gt;watching the two side boosters land simultaneously side by side&lt;/a&gt; rendered me speechless. And I’m happy to report that after a lot of hard work I made it to the end and &lt;a href="https://confirm.udacity.com/KSG5UP2N"&gt;completed and graduated&lt;/a&gt; from the Udacity Mobile Web Specialist nanodegree. I learnt a lot and practiced &lt;strong&gt;delivering top quality web experiences using advanced web technologies and performance strategies. And loved it!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D3ydUKOv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/goal-review-of-2018-and-goals-for-2019-2-fd613e1d77ab4fe956a57d13c61d62f8.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D3ydUKOv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/goal-review-of-2018-and-goals-for-2019-2-fd613e1d77ab4fe956a57d13c61d62f8.svg" alt="Certificate of completion of the Google Developer Challenge: Udacity Mobile Web Specialist Nano degree" width="880" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the whole nano degree there was plenty of getting your hands dirty with anything from writing your own &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"&gt;service workers&lt;/a&gt; and using IndexDB, to optimizing images, to how you think of what the minimum required assets for your app are (critical rendering path), accessibility, measuring and monitoring performance and so much more. Man, &lt;strong&gt;I thrive on this stuff&lt;/strong&gt; , which is why I’m so happy to have participated in the program and completed it 💜. The final project implementation is also open source and available at: &lt;a href="https://github.com/jumpalottahigh/mws-restaurant-stage-1"&gt;https://github.com/jumpalottahigh/mws-restaurant-stage-1&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 Truly International
&lt;/h3&gt;

&lt;p&gt;A thing definitely worth mentioning is that I had the opportunity and pleasure to be working on a project with a truly international team. &lt;strong&gt;15 people from 11 different countries&lt;/strong&gt;. And what a ride that was! I am very grateful, I learnt a lot and I tried to contribute back and share knowledge myself! I learnt a lot about how scrum and agile processes work as well as sprints and software releases to name a few.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/e616c201fb15cc4c7830dbccd6dd6962/1cef5/goal-review-of-2018-and-goals-for-2019-3.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OAVkHlSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/e616c201fb15cc4c7830dbccd6dd6962/7fd8e/goal-review-of-2018-and-goals-for-2019-3.jpg" alt="A map with pins on the locations of my team mates" width="590" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We had people from: &lt;strong&gt;Bulgaria, Finland, Sweden, Danmark, Netherlands, Germany, France, Venezuela, India, Kenya, Thailand&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚁 Building a drone and flying FPV
&lt;/h3&gt;

&lt;p&gt;In the beginning of 2018 I wanted to build my own drone (I love &lt;a href="https://www.instagram.com/p/BqUPyt7l1al/"&gt;flying FPV racing drones&lt;/a&gt;) and in the end of the winter season I started doing so. That &lt;strong&gt;took MUCH longer than I expected&lt;/strong&gt; , and even though I was not in a hurry and started sourcing the parts in February, I did not complete the build until May. It also did not go without issues and I learnt a lot from the project. Definitely have no regrets! The whole build process is also &lt;a href="https://blog.georgi-yanev.com/fpv/build-a-quad/"&gt;documented in this blog post&lt;/a&gt;. And this is what the finished build looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/139ccc21c47211fa8421cec0a84f6966/32a33/goal-review-of-2018-and-goals-for-2019-4.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0MNbrD4b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/139ccc21c47211fa8421cec0a84f6966/7fd8e/goal-review-of-2018-and-goals-for-2019-4.jpg" alt="Completed drone build" width="590" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During 2018 is when this blog started receiving more visitors for its FPV drones articles. Over the past year it has gone from &lt;strong&gt;~ 300 to ~ 1.1k monthly active users&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/a815aa72fd8f4cc29295c58adf894ae8/98101/goal-review-of-2018-and-goals-for-2019-5.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0FuMKNPs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/a815aa72fd8f4cc29295c58adf894ae8/98101/goal-review-of-2018-and-goals-for-2019-5.png" alt="blog.georgi-yanev.com active users growth graph" width="435" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am very pleased with the result as this was one of the goals I set for myself last year. It is amazing that my articles help people with their builds, upgrades and other FPV related issues. &lt;strong&gt;Awesome! Glad to help!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another goal I had set for myself last year that I’m happy to have achieved was to do a lot more flying of FPV drones in 2018 and I am happy to report that I landed this goal.&lt;/p&gt;

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

&lt;p&gt;Moreover, I started &lt;a href="https://www.youtube.com/watch?v=aASDUpVy3zM&amp;amp;list=PLxuusHIzi2UoSYK9fHSvJF_fUiVeo35ka"&gt;uploading HD footage&lt;/a&gt; on YouTube. And while the previous link contains a list of videos with music, most of the other flights were &lt;a href="https://www.youtube.com/watch?v=398BDc5mvuA&amp;amp;list=PLxuusHIzi2UoB9ZQtiS0k4DnouIQtWCat"&gt;uploaded raw, with no edits&lt;/a&gt;. A thing I’d like to improve upon for next year, though, is my down time due to broken drones. Even with 2 quads I still had about 1-2 months of total downtime due to not having a drone to fly. Lesson learnt.&lt;/p&gt;

&lt;h3&gt;
  
  
  👨‍💻️ Double down on React and Vanilla JS
&lt;/h3&gt;

&lt;p&gt;I love JavaScript but mostly in its vanilla form and in React projects. In 2018 I wanted to improve drastically my skills with a modern framework and &lt;strong&gt;I decided to finally double down on &lt;a href="https://reactjs.org"&gt;React&lt;/a&gt;&lt;/strong&gt;. I had been too indecisive about this for too long, and man, does it feel great when you have finally made the decision and cleared that out of the way!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One of the main reasons for this decision was &lt;a href="https://www.gatsbyjs.org"&gt;Gatsby&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This blog and so many of my other projects are React projects using Gatsby. Gatsby is an awesome static site generator, built for speed and performance, has plenty of plugins, big community and a great developer experience. In short, it is a joy to built things with and the outcome is always incredible.&lt;/p&gt;

&lt;p&gt;This mental model change has also helped me to start going to meetups and I went to 3 in 2018 (although I wish I went to more). I went to &lt;a href="https://twitter.com/helsinkijs"&gt;HelsinkiJS&lt;/a&gt; in January and in December and once to &lt;a href="https://twitter.com/reacthelsinki"&gt;React Helsinki&lt;/a&gt; in August. It was a great experience and I’m looking forward to giving a talk at one of those events next year!&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Shipping, branding and streaming
&lt;/h3&gt;

&lt;p&gt;I spent a decent amount of time branding and shipping products and collaborating on projects. There is actually so much to learn from a product launch, trying to reach an audience on different platforms and social media. Not my main passion (web dev is 💜), but good to know if you want to launch products.&lt;/p&gt;

&lt;p&gt;My worth a mention plug here is for a &lt;strong&gt;project I launched on my 33rd birthday&lt;/strong&gt; in November:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.fpvtips.com"&gt;fpvtips.com&lt;/a&gt;&lt;/strong&gt; - a project that aims to help FPV pilots share their flying spots with the rest of the community and ultimately help people fly together.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Liquid error: internal&lt;/p&gt;

&lt;p&gt;While I am not abandoning this blog in any form or way, I definitely feel like I’m deep enough into the hobby and I can share so much more, however I also wanted to create a modern platform that helps people get into the hobby, learn more and share experiences. I am &lt;strong&gt;hyped to have worked hard on fpvtips and shipped the core functionality within about 2 months of development&lt;/strong&gt; and can’t wait to add more information and get more people on the platform during this winter season as well as in 2019!&lt;/p&gt;

&lt;p&gt;I also worked on a number of other small and big projects and collabs. Here are some worthy mentions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Helped with the initial build and setup of &lt;a href="https://playeverland.com"&gt;playeverland.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Built and setup &lt;a href="https://www.baehrbg.com"&gt;baehrbg.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a couple of smaller projects I built for fun while streaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtube-screenshot.netlify.com"&gt;youtube-screenshot.netlify.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://streamer-screen.netlify.com"&gt;streamer-screen.netlify.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And speaking of streaming, a couple of months ago I &lt;a href="https://www.twitch.tv/jumpalottahigh"&gt;started streaming web development on Twitch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/0bb145e3153088404ea0734fea2e169c/c86da/goal-review-of-2018-and-goals-for-2019-7.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SCcR8M7y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/0bb145e3153088404ea0734fea2e169c/7fd8e/goal-review-of-2018-and-goals-for-2019-7.jpg" alt="streaming web dev on Twitch" width="590" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don’t have a lot of active followers yet and as such I am &lt;strong&gt;mostly talking to myself&lt;/strong&gt; during the streams (for now), but I am getting the hang of it, I am learning a lot about the setup, OBS, streaming management in general and how to talk in an educational, descriptive manner about what I’m doing. I had wanted to try streaming for a while now, and I am happy I finally gave it a shot. It’s fun to do it, it helps me massively with concentration on only one task at a time, reduces procrastination and I am genuinely curious to see where this goes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking ahead into 2019
&lt;/h2&gt;

&lt;p&gt;One thing I’d like to try for the 2019 goal list is to add quantizable items to make it easier to measure the progress. Those are gonna be minimum values and anything extra achieved is very welcomed but not required.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⬜ Major goals:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;📈 Grow fpvtips.com&lt;/strong&gt; to over 1k monthly active users&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🚀 Launch 2 new products&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎥 Produce&lt;/strong&gt; educational content for YouTube / Egghead.io (1 tutorial / series)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📝 Write a book&lt;/strong&gt; during &lt;a href="https://nanowrimo.org/"&gt;#NaNoWriMo&lt;/a&gt; in November 2019&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💬 Speak&lt;/strong&gt; at HelsinkiJS / ReactHelsinki&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📡 Stream consistently&lt;/strong&gt; on Twitch / YouTube (once a week)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🛫 Go to &lt;a href="https://plovdiv2019.eu/en"&gt;Plovdiv, Bulgaria&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🚁 Fly even more FPV&lt;/strong&gt; with close to no downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ◻️ Minor goals:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Go to 5 meetups (HelsinkiJS and ReactHelsinki combined)&lt;/li&gt;
&lt;li&gt;Participate in a micro or mini quad FPV race&lt;/li&gt;
&lt;li&gt;Learn more about testing JavaScript (Cypress and other tools)&lt;/li&gt;
&lt;li&gt;Mentorship: give or receive&lt;/li&gt;
&lt;li&gt;Trip to Lapland in the winter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also plenty of space things I’m excited about, coming in 2019. I am excited about the upcoming tests leading to an actual flight of the Space X Crew Dragon space craft! To add to that, in 2019 we should see a few more Falcon Heavy launches and let’s hope that &lt;a href="https://twitter.com/FairingCatcher"&gt;Mr.Steven&lt;/a&gt; finally catches a fairing from space 🎣. On top of that, InSight just arrived on Mars, OSIRIS-REx arrived at Bennu and New Horizons is about to arrive at an object in the Kuiper Belt in January 2019.&lt;/p&gt;

&lt;h4&gt;
  
  
  🏁 Wrapping it up
&lt;/h4&gt;

&lt;p&gt;If you actually read through all of this, kudos to you! I hope you are as inspired to complete your goals in 2019 as I am. Let’s come back here in a year and recap. Good luck and enjoy!&lt;/p&gt;

&lt;h4&gt;
  
  
  Here’s to a great 2019! 🍾🎉
&lt;/h4&gt;

</description>
      <category>career</category>
      <category>yearinreview</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Solving problems using 3D printing</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Sat, 20 Oct 2018 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/solving-problems-using-3d-printing-5afe</link>
      <guid>https://dev.to/jumpalottahigh/solving-problems-using-3d-printing-5afe</guid>
      <description>&lt;p&gt;Recently I had a very minor issue, however perfect candidate to be solved using 3D printing. I’m fairly new to 3D printing, only got my printer a couple of weeks ago and I do have some 3D modelling experience (mainly from working on hobby / school game projects, such as &lt;a href="https://blog.georgi-yanev.com/eternal-archives/game-dev-videos/"&gt;Maze Crawler&lt;/a&gt; or &lt;a href="https://blog.georgi-yanev.com/eternal-archives/game-dev-videos/"&gt;Rollin’ Shark&lt;/a&gt; from a few years ago). I use the awesome open source software &lt;a href="https://www.blender.org/"&gt;Blender&lt;/a&gt; for my 3D modelling. So obviously, not a guru, but very eager to learn, I dove right in.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❓ The problem
&lt;/h3&gt;

&lt;p&gt;So, my son has these IKEA boxes where he keeps his toys. They have gotten so much use over the past few years that are somewhat dangly and loose. A couple of times the bottom plate came out and the box folded in. And that has been more and more of an issue with all 4 boxes.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/2236c720e9ecc1e6527e95ea9d5ec87d/9c5b7/solving-problems-using-3d-printing-1.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S4Aeizub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/2236c720e9ecc1e6527e95ea9d5ec87d/acf6b/solving-problems-using-3d-printing-1.jpg" alt="Picture of IKEA box" title="Picture of IKEA box" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That bottom plate, that kind of also keeps the whole box together, if it is nicely fastened, is supported on the side edges, and then held in place with 2 of those brackets.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/729b9231d49b0d4166f6398da7acd216/9c5b7/solving-problems-using-3d-printing-2.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qxiCE2TN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/729b9231d49b0d4166f6398da7acd216/acf6b/solving-problems-using-3d-printing-2.jpg" alt="Bottom of IKEA box" title="Bottom of IKEA box" width="880" height="901"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/796904a4143516cc2c668e5fd6d77803/9c5b7/solving-problems-using-3d-printing-3.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bAdCN_D---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/796904a4143516cc2c668e5fd6d77803/acf6b/solving-problems-using-3d-printing-3.jpg" alt="Bracket from the side" title="Bracket from the side" width="880" height="602"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/921618a82c1ce17d14c5f1e7ea097458/9c5b7/solving-problems-using-3d-printing-4.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BIzccI8x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/921618a82c1ce17d14c5f1e7ea097458/acf6b/solving-problems-using-3d-printing-4.jpg" alt="Bracket from top down" title="Bracket from top down" width="880" height="571"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The brackets were always a bit short to begin with, but got the job done so far, until the boxes got too loose. If only we could have just a bit longer bracket. &lt;em&gt;Enter, 3D printing!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👨🏼‍🎨️ Prototyping
&lt;/h3&gt;

&lt;p&gt;Being such an awesome candidate for a 3D printed solution, I broke this down quickly. Here’s what I imagined I needed to do:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Measure the current bracket with a caliper
&lt;/h4&gt;

&lt;p&gt;&lt;a href="///static/e4fca9513d47b3d9daabc938b77759e7/9c5b7/solving-problems-using-3d-printing-5.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2VBmtXNw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/e4fca9513d47b3d9daabc938b77759e7/acf6b/solving-problems-using-3d-printing-5.jpg" alt="Measuring with a caliper 1" title="Measuring with a caliper 1" width="880" height="642"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/b993caff33786eb610e79e5683903683/9c5b7/solving-problems-using-3d-printing-6.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VRa-hR8p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/b993caff33786eb610e79e5683903683/acf6b/solving-problems-using-3d-printing-6.jpg" alt="Measuring with a caliper 2" title="Measuring with a caliper 2" width="880" height="578"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Make a 3D model in Blender and then extend the longer part on the X axis by ~ 33%
&lt;/h4&gt;

&lt;p&gt;&lt;a href="///static/3999b7499d17479ca26c6b507dd88431/cb8e1/solving-problems-using-3d-printing-7.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fzHgdYs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/3999b7499d17479ca26c6b507dd88431/d3820/solving-problems-using-3d-printing-7.png" alt="3D model in Blender" title="3D model in Blender" width="880" height="476"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/d561c9a9283aa2aece87594df5f0aa18/cb8e1/solving-problems-using-3d-printing-8.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s-npcHZD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/d561c9a9283aa2aece87594df5f0aa18/d3820/solving-problems-using-3d-printing-8.png" alt="3D model in Blender with a cylinder through" title="3D model in Blender with a cylinder through" width="880" height="476"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/5046e4ef7604283b6036f235744524e2/cb8e1/solving-problems-using-3d-printing-9.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TOkiveAX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/5046e4ef7604283b6036f235744524e2/d3820/solving-problems-using-3d-printing-9.png" alt="3D model in Blender with a circle shaped hole cutout" title="3D model in Blender with a circle shaped hole cutout" width="880" height="476"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Export as &lt;code&gt;.STL&lt;/code&gt; file and open in a slicer program (&lt;a href="https://ultimaker.com/en/products/ultimaker-cura-software"&gt;Cura&lt;/a&gt;)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="///static/418db159f456f1e82c906cd963734df1/83649/solving-problems-using-3d-printing-10.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Icdzhsfb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/418db159f456f1e82c906cd963734df1/d3820/solving-problems-using-3d-printing-10.png" alt="Configuring the 3D print in Cura" title="Configuring the 3D print in Cura" width="880" height="477"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Print
&lt;/h4&gt;

&lt;p&gt;&lt;a href="///static/bdc1f557cf863ac74e7bdd6b09cdf25a/9c5b7/solving-problems-using-3d-printing-11.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XLMsqSnH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/bdc1f557cf863ac74e7bdd6b09cdf25a/acf6b/solving-problems-using-3d-printing-11.jpg" alt="The final 3D printed bracket" title="The final 3D printed bracket" width="880" height="492"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The print was quick, about 10 mins, with very good quality.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Test the fitting
&lt;/h4&gt;

&lt;p&gt;&lt;a href="///static/604f56bb328160825bc13d00daf5a7de/9c5b7/solving-problems-using-3d-printing-12.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Edf3Gsqx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/604f56bb328160825bc13d00daf5a7de/acf6b/solving-problems-using-3d-printing-12.jpg" alt="Testing the 3D print in the IKEA box" title="Testing the 3D print in the IKEA box" width="880" height="957"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Honestly, I was actually a bit surprised I got it completely right on the first try, I thought it would take a couple of iterations. The bracket fit perfectly and was definitely holding the bottom panel of the box much better than the stock options.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔩 Manufacturing
&lt;/h3&gt;

&lt;p&gt;So, naturally, I went to Cura and multiplied the item, so I could print 7 more of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/3620a3801410bb6e21e4cb19ed250585/83649/solving-problems-using-3d-printing-13.png"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--abWdYzt1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/3620a3801410bb6e21e4cb19ed250585/d3820/solving-problems-using-3d-printing-13.png" alt="Multiply item in Cura" title="Multiply item in Cura" width="880" height="477"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/7fc55dae989659daef9484ba791d1110/9c5b7/solving-problems-using-3d-printing-14.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t8inU3tC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/7fc55dae989659daef9484ba791d1110/acf6b/solving-problems-using-3d-printing-14.jpg" alt="Printing 7 items at the same time" title="Printing 7 items at the same time" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/9f51ddecc77d61095bcc053dc9814976/9c5b7/solving-problems-using-3d-printing-15.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JFTaNAcs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/9f51ddecc77d61095bcc053dc9814976/acf6b/solving-problems-using-3d-printing-15.jpg" alt="3D printer touch screen" title="3D printer touch screen" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only 45 mins to finish the 7 prints.&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/ce8ae66d946f731619a847b73cacc7a6/9c5b7/solving-problems-using-3d-printing-16.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yd2MSR32--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/ce8ae66d946f731619a847b73cacc7a6/acf6b/solving-problems-using-3d-printing-16.jpg" alt="Half way through the print" title="Half way through the print" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Half way through&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/e797993f2ad77befc67d0223008f99fb/9c5b7/solving-problems-using-3d-printing-17.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--elad9bWz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/e797993f2ad77befc67d0223008f99fb/acf6b/solving-problems-using-3d-printing-17.jpg" alt="Print done" title="Print done" width="880" height="660"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ready!&lt;/p&gt;

&lt;p&gt;&lt;a href="///static/d5d1a4e3693ca56aa4f576cc1aed97a3/9c5b7/solving-problems-using-3d-printing-18.jpg"&gt;&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D08Al860--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.georgi-yanev.com/static/d5d1a4e3693ca56aa4f576cc1aed97a3/acf6b/solving-problems-using-3d-printing-18.jpg" alt="7 3D printed brackets" title="7 3D printed brackets" width="880" height="523"&gt;&lt;br&gt;
      &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One last task remained - to replace the brackets on all boxes.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏁 In conclusion
&lt;/h3&gt;

&lt;p&gt;I am aware I didn’t resolve some major world issue, however, the amount of satisfaction you get from being able to solve a problem using 3D printing and software is substantial. Can only image a bright future for this technology and can only bet that soon it will be a part of every home.&lt;/p&gt;

</description>
      <category>3dprinting</category>
      <category>project</category>
      <category>blender</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How I got into software development</title>
      <dc:creator>Georgi Yanev</dc:creator>
      <pubDate>Sun, 21 Jan 2018 00:00:00 +0000</pubDate>
      <link>https://dev.to/jumpalottahigh/how-i-got-into-software-development-228</link>
      <guid>https://dev.to/jumpalottahigh/how-i-got-into-software-development-228</guid>
      <description>&lt;p&gt;There’s this funny thing about life, you never know where it’s gonna take you. Whatever the ups and downs, in the end always remember that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Life is a journey, not a destination&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I was growing up I was fiddling a lot with computers and not just to play StarCraft, Warcraft and Diablo but I also &lt;strong&gt;really enjoyed building things&lt;/strong&gt;. Among some of the ones “worth” mentioning are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.georgi-yanev.com/eternal-archives/starcraft-encyclopedia/"&gt;StarCraft Encyclopedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.georgi-yanev.com/eternal-archives/my-first-site-and-programs/"&gt;First site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.georgi-yanev.com/eternal-archives/my-first-site-and-programs/"&gt;Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.georgi-yanev.com/eternal-archives/fiction/sargeras-tomb/"&gt;Writing Warcraft fan fiction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.georgi-yanev.com/eternal-archives/music/"&gt;Making hip hop music&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My high school graduation choice to apply for a degree in economics in university would send me on a small 10 year long trip going through different experiences, countries and jobs and &lt;strong&gt;ultimately leading me back to programming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Back here I feel at home and happy. I love learning and building things. I could not stress it enough how much crucial I think &lt;strong&gt;lifelong education&lt;/strong&gt; is and is going to only become even more so with the rise of AI. I also believe that when you are studying something you &lt;strong&gt;want to&lt;/strong&gt; learn, it goes smooth, quick and is many times a very enjoyable process.&lt;/p&gt;

&lt;h3&gt;
  
  
  The journey
&lt;/h3&gt;

&lt;h5&gt;
  
  
  2000 - 2005 [background]
&lt;/h5&gt;

&lt;p&gt;So in the year 2000 (i was 15) I was mainly going through high school, learning english extensively in school and programming which wasn’t very practical in school and didn’t catch my interest as much as building and writing things on my own at home. I wrote a few programs with C++ (including my SIE - &lt;a href="https://blog.georgi-yanev.com/sie.exe"&gt;StarCraft Interactive Encyclopedia&lt;/a&gt;). Created a few personal websites, even wrote some fan fiction and hip hop songs and beats.&lt;/p&gt;

&lt;p&gt;My decision out of high school was to study economics. Something I eventually dropped out of by my own choice. I did put in the work, I did the exams and given my degree of choice (International Economics Relations) was among the most popular degrees in the University of Plovdiv in Bulgaria at the time, I do take &lt;strong&gt;pride in ranking on 2nd place of all applicants&lt;/strong&gt; and being accepted. I started my university degree studies in 2004 and boy was I in for a treat. A whole lot of &lt;strong&gt;dry book learning and zero practical stuff&lt;/strong&gt; really threw me off… Still I persisted for a couple of years.&lt;/p&gt;




&lt;h5&gt;
  
  
  2005 - 2010 [mind shift and stalemate]
&lt;/h5&gt;

&lt;p&gt;The single best thing about university was that I was eligible to apply for a &lt;strong&gt;J-1 Visa to the USA&lt;/strong&gt; and go on a student exchange program which allowed me to work legally 4 months and then travel the fifth month. I did take that opportunity twice during the summers of 2005 and 2006. I can never stress it enough how thankful I am that my dad supported me and pushed me to go travel and see the world.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If I ever had a completely mindset altering moment in my life then those summers in the USA were it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those were also the days when I was quite certain I was done with that economics degree.&lt;/p&gt;

&lt;p&gt;The next step was even stranger. Coming back to Bulgaria in the autumn of 2006 I started working as a waiter in a hotel. 6 months later I was promoted to be a shift manager and for the next 3,5 years I led my team on countless weddings and banquet events.&lt;/p&gt;

&lt;p&gt;It was a period of stale, regular life and for some time it was actually fun. The pay wasn’t too bad, regular yearly vacations were a thing and although there was a lot of work, there was also time to relax. Plus, who really needs sleep in their early 20s anyway. I had free time, I started playing World of Warcraft in 2007 and met a bunch of friends I still keep in touch till today.&lt;/p&gt;

&lt;p&gt;And in 2010 I had enough of this life style. I actually started to be afraid of things continuing on like this forever and ever and so changes had to be made…&lt;/p&gt;




&lt;h5&gt;
  
  
  2010 - 2015 [revival]
&lt;/h5&gt;

&lt;p&gt;In the summer of 2010 I went to work in Cyprus in Ayia Napa. My mom was the source of inspiration for this one as she was living in Paphos (other side of the island).&lt;/p&gt;

&lt;p&gt;The first summer did not come without difficulties, I had a crappy shift manager that wanted to get me quit real hard, but never managed. Eventually I got to work in the pool bar and things got a bit more chill with my colleague there.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;That’s where I met my girlfriend and the mother of my son. I just didn’t know it yet.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From 2010’s summer in Cyprus to 2010’s winter in Bansko, Bulgaria’s ski slopes and then back again for 2011’s summer in Cyprus.&lt;/p&gt;

&lt;p&gt;While I met my to-be-girlfriend again in Bulgaria in the winter, she did come again to Cyprus in 2011 and ultimately quit her job in Finland, sold her car and moved down south. We got together and started living together in September 2011 in Cyprus.&lt;/p&gt;

&lt;p&gt;After that we lived together in Bulgaria for the winter of 2011 / 2012, then a whole summer again in Cyprus, then back to Bulgaria in 2012 and then … Then we had enough of this whole repetitive season lifestyle and while there were certainly other travel plans (to go to the UK or Norway) we settled on going to Finland for a while and so &lt;strong&gt;in December 2012 we moved to Finland&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That was a critical time to make a choice. Out of pretty much nowhere I &lt;strong&gt;decided to study for a Bachelor of Engineering in IT, so I applied, did my exams and got accepted&lt;/strong&gt; and started studying in August 2013.&lt;/p&gt;

&lt;p&gt;The time in Finland especially at first wasn’t without challenges. While people are mostly nice and a lot of people know english, this was the first time I encountered a cultural shock (which I hadn’t felt as much in Cyprus or the USA for example). It is certainly much more challenging to change your life to live in such a cold and dark country compared to anything I knew before, but also really not THAT hard and totally doable(with completely amazing and inspiring summer and unbelievable sunsets - I guess everything in nature is balance).&lt;/p&gt;

&lt;p&gt;I did have to put up with a crappy bar job I hated and work on weekends when my school buddies were relaxing, but you do what you gotta do. Stay focused and carry on. &lt;strong&gt;Working on my side projects gave me the strength I needed&lt;/strong&gt; and the belief that those challenges were only temporary.&lt;/p&gt;

&lt;p&gt;I met cool friends in school and we did projects together and played games. I &lt;strong&gt;watched my first Google I/O in 2013&lt;/strong&gt; and it got me inspired to a whole new level.&lt;/p&gt;

&lt;p&gt;Going back to school and dealing with software topics and in the practical way that things are done in Finnish engineering schools felt amazing. It was good to be home. I started taking extra classes (both from school and third party services), took a class for 3rd year students in my first semester. I was determined and on a streak. And it was fun!&lt;/p&gt;

&lt;p&gt;After a lot of hard work and learning and 10-15 applications with no response, &lt;strong&gt;I finally got an interview and soon after the job as a Web Developer trainee in F-Secure in June 2015&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Coincidentally I learnt the &lt;strong&gt;biggest news in my life 1 week after I had started work - my girlfriend was pregnant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;July 8th after smoking for over 10 years I quit for good&lt;/strong&gt; (till this day and hopefully beyond).&lt;/p&gt;




&lt;h5&gt;
  
  
  2015 - 2018 [not the end, only the beginning]
&lt;/h5&gt;

&lt;p&gt;That was a wild and transforming time, but boy was it exciting. Going to work was amazing - I learnt so much so quick. I really &lt;strong&gt;put in the work and my efforts were accelerated by my team&lt;/strong&gt;. Even though I started on a 3 month summer contract I got offered an extension of another 3 months, then another 6 months, then another 6 months and soon after a full-time permanent contract.&lt;/p&gt;

&lt;p&gt;In the meantime, 2016 was active to say the least with my highest ever (without even feeling too burnt-out) being about 2 months after my son was born, &lt;strong&gt;here we were with a baby, new parents, I was writing my thesis, graduating 1 year ahead of schedule, working a full time job&lt;/strong&gt;. &lt;strong&gt;Could have never done any of this without my girlfriends support and can never be thankful enough&lt;/strong&gt;. At the same time I did bust my butt off and did put in the work and when you do something you love, it just happens.&lt;/p&gt;

&lt;p&gt;2017 was a year of taking a deep breath. No, I did not stop learning all the time at my crazy rates, but I actually got into 2 hobbies which along side me spending plenty of time with my son, provided some distraction from coding. I started my &lt;a href="https://blog.georgi-yanev.com/smart-home/living-with-smart-home-automation"&gt;smart home automation project&lt;/a&gt; which was a lot of fun and helped me learn a lot about embedded electronics, ESP8266, MQTT, Raspberry Pi, Arduino and much more.&lt;/p&gt;

&lt;p&gt;Towards the end of the year I also started flying FPV drones with my buddy from school. Flying FPV is a ton of fun and it was my gateway to creating a blog and &lt;a href="https://blog.georgi-yanev.com/fpv/build-a-quad/"&gt;writing about it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This was also the year I started to get into Open Source and the year when things started to click quicker for me. I’m sure we are all going to improve and get better and better if we put in the work but it does feel nice to actually finally &lt;strong&gt;feel&lt;/strong&gt; the change. Many times looking at a brand new software project I don’t feel completely lost anymore. I find out the different bits and pieces and figure things out much quicker. I have a lot more to learn, but it does feel good to start understanding things quicker at this point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m also proud and happy to have participated in this Google Developer Challenge&lt;/strong&gt; and looking forward to many more challenges in the future.&lt;/p&gt;

&lt;p&gt;In 2018 I’m looking forward to keep on learning and doing the things I love.&lt;/p&gt;

&lt;h3&gt;
  
  
  In conclusion
&lt;/h3&gt;

&lt;p&gt;If you take anything from this story, consider this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can do anything you set your mind to&lt;/li&gt;
&lt;li&gt;Consistency is everything&lt;/li&gt;
&lt;li&gt;Put in the work&lt;/li&gt;
&lt;li&gt;Adopt a growth mindset and create strong habits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You can do anything you set your mind to. You just gotta put in the work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t get discouraged by the size of your goal. Break it down into manageable chunks and focus on one at a time. Building habits goes a long way and embracing a truly growth mindset lifestyle helps to keep going and constantly learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find your passion. It will give you purpose. If you have purpose, you have everything. This applies not only as a career advice but also in life in general.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dedicated to Sofi and Anton ❤️&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>origin</category>
      <category>webdev</category>
      <category>learn</category>
    </item>
  </channel>
</rss>
