<?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>Forem: oshell</title>
    <description>The latest articles on Forem by oshell (@oshell).</description>
    <link>https://forem.com/oshell</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%2F246752%2Ff14f6bf0-8a75-4843-a5db-5c27db302167.jpg</url>
      <title>Forem: oshell</title>
      <link>https://forem.com/oshell</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/oshell"/>
    <language>en</language>
    <item>
      <title>There Is No Shortage Of Developers</title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Sun, 19 Apr 2020 20:09:41 +0000</pubDate>
      <link>https://forem.com/oshell/there-is-no-shortage-of-developers-27ia</link>
      <guid>https://forem.com/oshell/there-is-no-shortage-of-developers-27ia</guid>
      <description>&lt;p&gt;It is just that the hiring process in most areas and for most companies suck.&lt;/p&gt;

&lt;p&gt;I originally posted this thread on Twitter, but thought it would be worth sharing here too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Original Tweet
&lt;/h2&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--FqWEy7J0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1231208541941379078/sPLOIyHk_normal.jpg" alt="SeriousWebDev profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        SeriousWebDev
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @seriouswebdev
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mL-RlVCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-95c212266bf9a35c02dd777b6d438dfbc5a6a4c1e82708c3ab617b069928387a.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      The hiring process for most developer positions in most companies are ridiculous.&lt;br&gt;&lt;br&gt;A thread about my experiences. &lt;a href="https://t.co/Ucrwz1FfRQ"&gt;twitter.com/bekahhw/status…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:19 PM - 19 Apr 2020
    &lt;/div&gt;

      &lt;div class="ltag__twitter-tweet__quote"&gt;
        &lt;div class="ltag__twitter-tweet__quote__header"&gt;
          &lt;span class="ltag__twitter-tweet__quote__header__name"&gt;
            Bekah Hawrot Weigel
          &lt;/span&gt;
          &lt;a class="comment-mentioned-user" href="https://dev.to/bekahhw"&gt;@bekahhw&lt;/a&gt;

        &lt;/div&gt;
        I mean, I want to have a job, but I refuse to do a 6-8hr coding challenge without pay.
      &lt;/div&gt;

    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1251953688207294465" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1251953688207294465" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1251953688207294465" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      3
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The &lt;a href="https://threadreaderapp.com/thread/1251953688207294465.html"&gt;Thread&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;/1 I was once asked to write a form with validation and error handling. Some fields should be validated async. API + design should be included. All should be tested and documented. They tell me this should be done in around 3 hours. &lt;/p&gt;

&lt;p&gt;/2 I am working on the field for several years and have build many complex spa projects with high traffic. However, given the task I would already assume this would at least take me 8 hours. Even if I could do it in 3 hours, using a whole day would end up with a better result &lt;/p&gt;

&lt;p&gt;/3 since noone can check how much time I actually spend on the task, people who spend more time, will have an advantage. This is why you are basically forced to spend more time on the task &lt;/p&gt;

&lt;p&gt;/4 the companies normally give you a time limit. They themselves however, do not commit to anything. They do not have to answer or if they decline, they do not give you feedback. If you do not get the job you basically spent 8 hours on a useless generic software &lt;/p&gt;

&lt;p&gt;/5 let's say you apply to 10 companies. This means with tasks like that, you would have to spend 80 hours, programming bull shit tasks. For free. &lt;/p&gt;

&lt;p&gt;/6 some companies give you tasks, which could even be real tickets from their asana board. Big red flags, but I see it often. So more generic tasks are better, because you can be sure, they do not steal your code, but you are still wasting your time &lt;/p&gt;

&lt;p&gt;/7 you do all of this and MAYBE you get invited to an interview, where you meet the product manager. If he does not like you, you can go home already. Especially in smaller business, chemistry is really important. So asking somebody to do a 8h task before talking to him is stupid &lt;/p&gt;

&lt;p&gt;/8 that's the halo effect. Within seconds the person will have an opinion about you and this will greatly influence their decision. This also means it would make more sense to have a short meeting first and then give the task. But then again, the company does not value your time &lt;/p&gt;

&lt;p&gt;/9 even after the talk went great and I could answer all of the questions on the white board, I get declined. The companies normally only tell you, they are sorry, but do not tell you why. Because they cannot tell you "you know, we don't like your face" &lt;/p&gt;

&lt;p&gt;/10 once you passed that stage, you are invited to another meeting with the CEO. Maybe you are lucky and he agrees with the interviewer before. &lt;/p&gt;

&lt;p&gt;/11 of course the salary range is 40-80k and they will only tell you what they can pay you, once they setup the final contact. So maybe after 30h of your time you finally have a contact, you have to decline, because they do not pay you enough. &lt;/p&gt;

&lt;p&gt;/12 and I have to go through all of this processes while I have several years of experience, recommendations from previous companies, a github profile with several thousand commits in the last year and while being in the top 5% for all related topics on stackoverflow &lt;/p&gt;

&lt;p&gt;/13 meanwhile you read in the news that there is a shortage of professional developers. Companies are just too stupid to make it attractive for developers to apply. Stop wasting our times. &lt;/p&gt;

&lt;p&gt;/14 here is how it should work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;definite EXACTLY what you need and what is REQUIRED&lt;/li&gt;
&lt;li&gt;define how you seperate junior, intermediate and senior or have a short call where you evaluate&lt;/li&gt;
&lt;li&gt;define EXACTLY what you pay for each level &lt;/li&gt;
&lt;li&gt;have a short MEETING FIRST to check chemistry &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;/15 now people who apply are already better fits. Now check through existing projects and publications and if possible: skip the stupid task &lt;/p&gt;

&lt;p&gt;/16 normally the contacts include a very short notice period for the first months. So why even bother to ask for an extra task? If you still want me to do extra work to prove myself, I expect the company to give me a longer notice period in return. &lt;/p&gt;

&lt;p&gt;Have you had similar experiences? What's your point of view? Let me know in the comments. &lt;/p&gt;

&lt;p&gt;Follow me on Twitter if you like my content. I will share tech related articles and videos over there. &lt;/p&gt;

</description>
      <category>job</category>
      <category>developer</category>
      <category>imho</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Top 7 free iOS Apps to boost your quality of life </title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Fri, 10 Apr 2020 21:36:00 +0000</pubDate>
      <link>https://forem.com/oshell/top-7-free-ios-apps-to-boost-your-quality-of-life-566l</link>
      <guid>https://forem.com/oshell/top-7-free-ios-apps-to-boost-your-quality-of-life-566l</guid>
      <description>&lt;p&gt;Many developers jump into iOS developing because it promises &lt;a href="https://www.hokuapps.com/blogs/ios-vs-android-app-development-which-platform-claims-greater-roi/"&gt;up to 85% more roi than android apps&lt;/a&gt;. Apple user are just willing to pay more. So for most of iOS users it is more normal and natural to pay for apps upfront or for in-app purchases. &lt;/p&gt;

&lt;p&gt;Nevertheless iOS has some pretty damn good free apps (or apps with fair free tiers) too. Here is a list of 7 apps I am using on a day to day basis, which make my life easier and which do not even cost me a penny.&lt;/p&gt;

&lt;h1&gt;
  
  
  1#: Note Taking with &lt;a href="https://bear.app/"&gt;Bear&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--baZ3pVDV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dl2.macupdate.com/images/icons256/58185.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--baZ3pVDV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dl2.macupdate.com/images/icons256/58185.png" alt="bear logo" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2s3bn1LU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bear.app/static/images/header-mac-screenshot%402x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2s3bn1LU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bear.app/static/images/header-mac-screenshot%402x.png" alt="bear preview" width="880" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your quality of life improves as soon as you have your thoughts, ideas and plans organised and made them searchable. I have tested quite some note taking apps and the simplicity and elegance of Bear is what I was looking for, for quite some time. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Editor
&lt;/h2&gt;

&lt;p&gt;You basically have a &lt;strong&gt;Markdown Editor&lt;/strong&gt;, which transforms your text while writing. Dev.to should seriously implement that. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Structure
&lt;/h2&gt;

&lt;p&gt;You can then use &lt;strong&gt;hashtags&lt;/strong&gt; in your notes and each hash tag &lt;strong&gt;becomes its own category&lt;/strong&gt;. This way your notes are easily organised and it is not that linear. You do not have to set up folders and then on each note, think about which folder your note belongs to or if this might change in the future. It is much more related to our way of thinking. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Search
&lt;/h2&gt;

&lt;p&gt;It also has a &lt;strong&gt;good global full text search feature&lt;/strong&gt;. So if you are looking for a beautifully and clever designed note taking app, which makes it easy to make your notes organised and searchable: Bear is the way to go.&lt;/p&gt;

&lt;h1&gt;
  
  
  2#: Cloud Storage with &lt;a href="https://mega.nz/"&gt;Mega&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zCnBd58U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.iconscout.com/icon/free/png-256/mega-282130.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zCnBd58U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.iconscout.com/icon/free/png-256/mega-282130.png" alt="Mega Logo" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c5Epu-Lr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/cx7UAbY.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c5Epu-Lr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/cx7UAbY.png" alt="Mega App Previews" width="880" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bear is good for organising your thoughts, but where to put all the photos, documents and sensible data? You just feel better, if you know your data is safe and accessible from anywhere.&lt;/p&gt;

&lt;p&gt;Our boy &lt;a href="https://en.wikipedia.org/wiki/Kim_Dotcom"&gt;Kim Dotcom&lt;/a&gt; got your back. He published a cloud storage provider called Mega.nz. &lt;strong&gt;If you do not trust Google, Apple and Microsoft to hold your data, Mega is your best bet.&lt;/strong&gt; Not only that - the user interface is the best I have come across. Moreover apple blocks out services like Google Drive for some features like multi upload, likely to promote their own storage service. Mega however does not seem to be affected by this. If you haven't already, you should definitely give it a try.&lt;/p&gt;

&lt;h1&gt;
  
  
  3#: Money Management with &lt;a href="https://www.spendee.com/"&gt;Spendee&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WLoshyd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res-5.cloudinary.com/crunchbase-production/image/upload/c_lpad%2Ch_256%2Cw_256%2Cf_auto%2Cq_auto:eco/v1499893608/dddw2md5gcqsglyjajki.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WLoshyd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res-5.cloudinary.com/crunchbase-production/image/upload/c_lpad%2Ch_256%2Cw_256%2Cf_auto%2Cq_auto:eco/v1499893608/dddw2md5gcqsglyjajki.jpg" alt="Logo Spendee" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j0-E8epU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/9PEbNJq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j0-E8epU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/9PEbNJq.png" alt="Spendee Preview" width="880" height="615"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quality of life also means you have your finances under control. I like to have an app, where I simply deduct all my fixed cost at the first of the month, even if this cost might only come up at the end of the month or even only once a year. This way there are no bad surprises.&lt;/p&gt;

&lt;p&gt;I don't want to connect my bank account with any of my apps for security and privacy reasons. So I just made it a habit of mine to manually enter all my spendings after the fixed costs are taken from my main balance in Spendee. This also makes me more mindful of what I am spending money on. Plus Spendee gives you an &lt;strong&gt;good overview of what you spend your money for&lt;/strong&gt;. It &lt;strong&gt;works completely offline&lt;/strong&gt; and the free version works just fine for me. The Total Number I have in Spendee is the only source of truth, of how much money I have available.&lt;/p&gt;

&lt;h1&gt;
  
  
  4#: Track your &lt;a href="https://apps.apple.com/us/app/habit-daily-tracker/id1445651730"&gt;Habit&lt;/a&gt;(s)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f3-GLQCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/354Kcdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f3-GLQCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/354Kcdy.png" alt="Habit Logo" width="268" height="252"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e2PU1Pzt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/lUkUXIf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e2PU1Pzt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/lUkUXIf.jpg" alt="Habit Preview" width="880" height="615"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simplicity is key. Habit is a &lt;strong&gt;really simple habit tracking app&lt;/strong&gt;. Add your habits and how often you want to perform them and simply check them every time you performed them. The underlying bar will get filled, the more often you performed the task. &lt;strong&gt;Getting it to 100% is quite challenging&lt;/strong&gt; tho. After reading &lt;a href="https://jamesclear.com/atomic-habits"&gt;Atomic Habits&lt;/a&gt;, which I highly recommend anybody, I have the belief that your success and overall quality of life mainly depends on your set of habits. Things that improve your mental health, physical health or influence your longterm success should be somewhat automated things that you do each and every day without thinking about it. Start as small as possible (make it easy) and increase the difficulty of the task a bit every time. Just so it still feels like a no brainer. But most importantly: Do it! And track it with this app.&lt;/p&gt;

&lt;h1&gt;
  
  
  5#: Track your Workouts with &lt;a href="https://www.gymbookapp.com/"&gt;Gymbook&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a__lX8Tg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/S8XmUHR.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a__lX8Tg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/S8XmUHR.jpg" alt="Gymbook Logo" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ufM-wRJ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/I9rOmeY.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ufM-wRJ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/I9rOmeY.png" alt="Gymbook Preview" width="880" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I just mentioned your physical health also plays a big role in your overall quality of life. It is most important that you do any sports in the first place. But if you hit the gym on a regular basis it makes a lot of sense to keep track of at least your biggest exercises to see where you stand. If you reach a plateau, you probably have to change your training routine, change number of reps or weight, the angle or even whole exercises. Using a app like Gymbook helps you to have more analytical approach to your workouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can build your own workout plan&lt;/strong&gt; with this app and &lt;strong&gt;set a timer&lt;/strong&gt; for how long you have between sets. Many people do not even take the lengths of their pauses into consideration, but it plays a big role in your workout.&lt;/p&gt;

&lt;p&gt;Another important aspect, which most people do not recognise, is the &lt;strong&gt;overall volume of your training (how much weight lifted in whole workout)&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;Gymbook gives you a summary at the end of each workout&lt;/strong&gt; with all this information and &lt;strong&gt;statistics&lt;/strong&gt; on how much you improved compared to your last workout.&lt;/p&gt;

&lt;h1&gt;
  
  
  6#: Meditate with &lt;a href="https://www.smilingmind.com.au/"&gt;Smiling Mind&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ojF4Ya6V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/EJDpnN0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ojF4Ya6V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/EJDpnN0.png" alt="Smiling Mind Logo" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gO8FsCDI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/G9MSHx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gO8FsCDI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/G9MSHx5.png" alt="Smiling Mind Preview" width="880" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;People go to the gym and train their physical health, but still most people do not do anything to improve their mental health. But it is just as important. Mediation is probably the most common way to improve your mental health. Many people play it down and say it does not work for them, but you have to stick to it for a while to notice the results. After listening to &lt;a href="https://tim.blog/"&gt;Tim Ferris&lt;/a&gt; for some time it feels like 90% of all his very successful guests describe meditation as one of the most important skills, if not THE most important skill, to learn. So it is time to put the prejudices aside and start practicing meditation.&lt;/p&gt;

&lt;p&gt;There are some really famous meditation apps like Calm, headspace and waking up. But they all have quite expensive premium plans, which probably  stops many people from using it. While these apps are good and have some special strengths, especially when it comes to different voices and updates, meditation does not have to cost you anything. &lt;strong&gt;Smiling Mind is non-profit and 100% free&lt;/strong&gt;. They have lessons for &lt;strong&gt;body scan, better sleep, general mindfulness and even lessons which you could listen to while on you way to work&lt;/strong&gt;. So there is basically no excuse anymore to at least give it a try. I am not saying you will have immediate improvements in your quality of life, but if you stick to it for a while, you will notice you will become more calm, more rational, more grateful and it will be easier for you to set your mind into the state you currently desire.&lt;/p&gt;

&lt;h1&gt;
  
  
  7#: Stay Up to Date with &lt;a href="https://feedly.com/i/welcome"&gt;Feedly&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JGEcX0bk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/4m6dbbI.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JGEcX0bk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/4m6dbbI.jpg" alt="Feedly Logo" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ix6eiSjH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/03U9KeW.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ix6eiSjH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/03U9KeW.png" alt="Feedly Preview" width="880" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least: Quality of life also means that I have an easy and comfortable way of staying up to date. I do not want to browse 20 different news pages, blogs and other media to get the information I want.&lt;/p&gt;

&lt;p&gt;Feedly is basically like our good old friend RSS feeds, but with a more modern approach. Good bye information overload: Just follow the topics and publishers you are interested in and display the latest news in the format you prefer: Text only, Cards, Magazine, compact or with more space - you name it.&lt;/p&gt;

&lt;p&gt;Anything missing in my list? Let me know in the comments.&lt;/p&gt;

&lt;p&gt;Like this kind of content? Like and follow to help me escape the search algorithms.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>apps</category>
      <category>free</category>
    </item>
    <item>
      <title>How I Ended Up Writing My Own Presentation Software and What I Learned Along the Way</title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Fri, 27 Mar 2020 17:25:51 +0000</pubDate>
      <link>https://forem.com/oshell/how-i-ended-up-writing-my-own-presentation-software-and-what-i-learned-along-the-way-5c90</link>
      <guid>https://forem.com/oshell/how-i-ended-up-writing-my-own-presentation-software-and-what-i-learned-along-the-way-5c90</guid>
      <description>&lt;p&gt;This article gives you an idea of what it looks like to build a production ready software - from the initial idea and concept, to the first prototype and finally the finished product. If you only care about the "lessons learned part" feel free to jump to Most Common Mistakes for Side Projects!. Also you will find a TL;DR section at the end of the article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prolog - Motivation to Build the Software
&lt;/h2&gt;

&lt;p&gt;I am working as a professional software developer for more than 6 years now. Yet, I was not able to create a production ready application on my own. It always starts out with a great idea or a new technology, you want to tinker around with. But sooner or later you stumble across the first problems. Things become difficult and because you are just a lazy person with great ideas, you add the project to the ever growing list of unfinished attempts of building the next big thing. &lt;/p&gt;

&lt;p&gt;Enough!&lt;/p&gt;

&lt;p&gt;I have worked in multi billion dollar companies and was working on high traffic projects for years now. I worked with databases, backend, frontend, design, CI and automation. Everything has prepared me for this very moment: Bringing my first application to production! Oh boy, I am pumped!&lt;/p&gt;

&lt;p&gt;And....you know there is this corona thing going on. So in a silent moment  of inspiration I thought to myself: "Do I stay home, playing video games all day and be the lazy piece of shit, I have been for the last 30 years? Or do I use the time and finally prove to myself, that I can finish things."&lt;/p&gt;

&lt;p&gt;Maybe you are thinking to yourself: "Hey this guy hasn't produced a single production ready software? Why should I care what he thinks?" Well, yeah...you have a point. But don't fall for the Survivorship Fallacy. We tend to look up to very successful people telling their success stories. But while it is really hard to tell what the real reason for their success was, it is often really easy to tell what the reason for a failed product was. By just avoiding these things, you naturally increase you chances of success. So let me tell you: I know how to fail! So you better listen. &lt;/p&gt;

&lt;h2&gt;
  
  
  Concept Phase - What Should I Write?
&lt;/h2&gt;

&lt;p&gt;Now I have the time! I have the skills! I have the motivation!&lt;/p&gt;

&lt;p&gt;But wtf am I going to write? One thing I learned from &lt;a href="https://www.youtube.com/channel/UC4xKdmAXFh4ACyhpiQ_3qBw"&gt;The Techlead&lt;/a&gt; is that your idea does not have to be super original, unless you want to go from &lt;a href="https://en.wikipedia.org/wiki/Zero_to_One"&gt;Zero to One&lt;/a&gt;. But most of the products out there don't do that. I mean, just look at gaming industry. The most successful game at the moment (Fortnite), basically just copied the Battle Royale game PUBG, gave it cartoony style and some building elements, to appeal to a younger audience, and here we are! What I am saying is: It is often safer to copy an existing product and add your own touch, because you can be sure there is a market for it. Your product just needs to be more appealing for a certain segment of the existing market.&lt;/p&gt;

&lt;p&gt;So I remember back in university, a teacher told me "If you call yourself a programmer, you don't use PowerPoint, you program your presentation using web technologies". He had a point. Using CSS and javascript gives you all the flexibility you could wish for. Moreover you can easily share the presentation with the rest of the world. But as the lazy piece of shit I was, the first thing I did was looking for existing frameworks to do all the hard work for me. Just after a little bit of googling I stumbled across &lt;a href="https://github.com/impress/impress.js/"&gt;impress.js&lt;/a&gt;. The guy made a &lt;a href="https://impress.js.org/#/bored"&gt;sample presentation&lt;/a&gt; to showcase the library. I saw it and was amazed. Back in the time we already had tools like &lt;a href="https://prezi.com/"&gt;Prezi&lt;/a&gt;. However with this library I had no limitations and was not forced into a subscription, to present in offline mode. (Really, Prezi?) I don't want to enter a subscription for one feature. And while Prezi presentations seem to be really dynamic, they are nevertheless really linear and creating them takes ages. There is much space for improvement. And these guys had several funding rounds collecting millions of dollars. However, you can easily prototype something like Prezi in a few weeks, is what I thought.&lt;/p&gt;

&lt;p&gt;Impress.js is amazing, but creating presentations with it is just a pain in the ass. Took way too long. So my first idea was to simply fork this library and add an editor to it. But lots of the codebase was spaghetti code and documentation was just as bad. The main logic was contained in a file with maybe 300 lines. So I decided it is probably easier for me to simply look into the DOM to see what's happening and reverse-engineer the presentation logic and go from there. However, the project was created in 2011 and when I first started this, SPA where in really early stages. So I tried my best building something usable with jQuery, but the code simply became unmaintainable too fast. On the one hand I was not experienced enough and on the other hand keeping the DOM and objects in sync was really difficult and hard to debug. As you might have guessed, I stopped working on it and added it to my list of unfinished projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I just could not handle the scope of the project&lt;/strong&gt;. It was only years later, I felt experienced enough to pick this project up again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prototype - Let's Build It!
&lt;/h2&gt;

&lt;p&gt;Now after working with SPAs in professional environments for some years I feel quite confident I could finish the project now. So after a couple days of coding I had a prototype looking something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eUK8XFp3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/EASVe9k.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eUK8XFp3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/EASVe9k.gif" alt="prototype"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This already looked quite promising. &lt;strong&gt;I used React and Redux to do this, because at the time it was the hot topic&lt;/strong&gt;. State-management became quite complex real quick, because each slide should be an object and elements within a slide should also be objects. So I end up with deeply nested state, which is a mess to update, or I have to flatten the state and use ID references. I used redux to make it manageable at all, but I almost stopped working on it just because I really do not like redux. I tried switching to Mobx, because it appeared much more natural to me, but since my project was bootstrapped with react-create-app, I ran into issues with decorators. Mobx basically needs adjustments to the webpack config and I would have to eject the project, which I wanted to avoid. While not using decorators would have been fine with me, the documentation back then was mainly based around decorators. Overall it just made me sick, I would have to read through documentations of 3-4 different libraries. I just wanted to have a deeply integrated state management solution and wanted to have a "one fits everything" framework, which helps me getting this done. At this point I almost stopped, because the development experience was just too frustrating. I decided to re-write my app using Vuejs. While I would normally not recommend re-writing anything, the project was still in early stages and I knew that Vue has a deeply integrated state management solution (Vuex) and several other benefits. It came to the market later and was able to learn from all the mistakes angular and react did. And all the things like state management, routing, cli, typescript ect. are developed by the core team and are opt-in. So you can integrate them as soon as you need to. I do not regret this decision. It feels so much more natural to me to develop applications in Vue and my code-base is now highly maintainable, even when coming back to it after months.&lt;/p&gt;

&lt;p&gt;After roughly 50 hours development time the prototype looks already quite promising. Although this was almost what I intended it to be, there were so many things missing: Register/Login, Uploading Images, Embedding Videos, Charts. But then &lt;strong&gt;I noticed I am just blowing up the scope&lt;/strong&gt;. I could wrap the application as it is in an electron wrapper, to run it offline. I won't need servers, I won't need authentication, I won't need image hosting. And the idea is to run presentations offline anyway. You do not want to be dependent on high speed internet, when giving a really important talk. Also I do not need videos or charts for my prototype. As long as I can add text, images and some symbols, it's fine. So after moving my application into electron and skipping some features, this is what it looked like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Azpp8ELJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/n1urMy0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Azpp8ELJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/n1urMy0.gif" alt="presentation software prototype"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tool is already production ready and I am currently working on a release. However, I struggled a lot along the way and had many moments, when I just stopped working on it or wanted to give up, but over the course of many years and many failed projects I learned some valuable lessons, which finally helped me to get this project done. Moreover, there are still few things, I wish I put more attention to. Here is a list of the most common mistakes you should avoid doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most Common Mistakes for Side Projects!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Massive Scope
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I just could not handle the scope of the project&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's begin with the number one Mistake for side projects. Scope is too big. As mentioned earlier, I started the project and was just overwhelmed by the complexity of keeping DOM and objects in sync. I was not prepared at this point. I was able to pick up the project again years later, but you are better off choosing a project where you already know, you are capable of finishing it. &lt;/p&gt;

&lt;h3&gt;
  
  
  Play with fancy technology and add fancy features
&lt;/h3&gt;

&lt;p&gt;This is kind of related to the first Mistake. In the beginning you should keep it simple. Most people don't really get what MVP means. In this case it helped me to reverse my thinking like this: You will not have the perfect product, when there is nothing more to add, but when there is nothing left to remove.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I do not need videos or charts for my prototype. As long as I can add text, images and some symbols, it's fine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Think about what your product/software should do and then remove everything that is not absolutely necessary for it to work.&lt;/p&gt;

&lt;p&gt;Too often you end up just trying out some new and fancy tool, just for the purpose of doing so. This is just wasting your time, when you really want to get to production ready state.&lt;/p&gt;

&lt;p&gt;Also it is very tempting to add more and more features during development phase, because you have this shiny nice looking product in your head. But once you throw your product on the market, you probably realise, that the users are only using 10-20% of your features or the problem is you do not find users in the first place. &lt;/p&gt;

&lt;p&gt;Focusing on only what is really essential to your product not only means you are more likely to finish your project - it also means you will get user feedback much faster and can start iterating on that feedback.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I used React and Redux to do this, because at the time it was the hot topic&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Last but not least, you should stick to technology you already know. You coded 3 years with javascript? Maybe use Ionic for your app, instead of learning swift and being stuck in the tutorial hell. I used react and redux, because it was the hot topic at this point. But Vue and Vuex just feels more natural to me, so it is much more likely I finish the project using it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding on the couch or on the go
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Things become difficult [..] you are just a lazy person with great ideas. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't try to develop on your couch or laying in your bed. Even worse... for a long time I thought I could work while traveling. I failed hard trying this. Maybe it works for some persons, but I cannot imagine anyone working really effectively on the go. You have to create an environment, where it is obvious you have to work. Optimal case is a quiet place, with a desk, a really good chair and at least one additional 22 - 27 inch screen connected to your PC/Laptop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding it, because it sounds cool
&lt;/h3&gt;

&lt;p&gt;You will most likely have to invest many many hours into the project. "Cool" just won't be enough. You need to be really passionate about the thing you are building. Otherwise there is just no way you will put in the hours needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Not having a USP
&lt;/h3&gt;

&lt;p&gt;USP stands for unique selling point. As I mentioned it is fine to just copy a product and add your own touch. But you also need to separate yourself from other products on the market with something that really creates value. Just another design won't be enough.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I don't want to enter a subscription for one feature. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For me it was just seeing that existing options force you into a subscription model. So my USP can be as simple as: No subscription. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While Prezi presentations seem to be really dynamic, they are nevertheless really linear and creating them takes ages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another thing I noticed is that all the presentation tools have a linear way of presentation. Slide 1 to Slide 2 to Slide 3. However with my software I wanted to have a more interactive approach to presentations, where you can talk to your audience and then decide in which direction you want to go. Moreover presentations are theme based. You can switch between themes with a single click.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Only seek for what is necessary (MVP)&lt;/li&gt;
&lt;li&gt;Create an environment which makes it easy to be productive&lt;/li&gt;
&lt;li&gt;Stick to technology you know and you are comfortable with&lt;/li&gt;
&lt;li&gt;Write tools for things you are passionate about&lt;/li&gt;
&lt;li&gt;Create your product around a marketing strategy (USPs) and communities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope you enjoyed the read. &lt;/p&gt;

&lt;p&gt;How is you experience with side projects? What are your tips to finally get shit done? Let me know in the comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>electron</category>
      <category>vue</category>
      <category>project</category>
    </item>
    <item>
      <title>React State Management: When To Use Redux And What Are The Alternatives</title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Thu, 19 Mar 2020 18:21:54 +0000</pubDate>
      <link>https://forem.com/oshell/react-state-management-when-to-use-redux-and-what-are-the-alternatives-bbf</link>
      <guid>https://forem.com/oshell/react-state-management-when-to-use-redux-and-what-are-the-alternatives-bbf</guid>
      <description>&lt;p&gt;When writing applications with react you will soon reach a point where you pass down callback functions as props two or three levels, to change the parents state. For most projects you will need a third party solution for global state management, so you can directly access and modify state from any component in your app, without passing callbacks down the DOM.&lt;/p&gt;

&lt;p&gt;Redux has somewhat become the industry standard. However, it includes quite some boilerplate for every simple state change. Although I have to admit the situation feels better now with the introduction of hooks, it is still hard for beginners to wrap their head around the concepts. During the learning experience the question comes up: Why would we do it like this? Isn't there a simpler way? There actually is. More on that later.&lt;/p&gt;

&lt;p&gt;I don't want to bash redux here. It is industry leader for a reason and has its strengths. But once you have worked with Vue and Vuex, most people realise it just feels much more intuitive. This is just one of the reasons why vue is growing so rapidly and just recently got more stars than react on github.&lt;/p&gt;

&lt;p&gt;So before we go over some of the alternatives, let's first take a step back and have a look at what redux does and what it is good for.&lt;/p&gt;

&lt;h1&gt;
  
  
  When To Use Redux
&lt;/h1&gt;

&lt;p&gt;Redux is a global state management solution for frontend applications based around the idea of reducers. Reducers are pure functions, which take the previous state and action object, containing a type and an payload, to mutate the state. The action objects are also pure functions. This is already one thing, where many newcomers are scratching their heads.&lt;/p&gt;

&lt;p&gt;Without going more into detail here, this approach has two main advantages.&lt;/p&gt;

&lt;h2&gt;
  
  
  First: Global State Becomes Testable
&lt;/h2&gt;

&lt;p&gt;You can now test your state completely isolated from your components. You import the reducer and the action into your test file. Since they are pure functions they have no dependencies whatsoever. You can than define a initial state object and pass it to the reducer, together with an action object. This way you can verify that a certain action mutates the state correctly without ever mounting a component. Since the state logic is tested already, all you have to do in the components, is to ensure that certain actions trigger the dispatch function with the correct action object. The dispatch function does not really have to executed and can be mocked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Second: Global State Becomes Easy To Debug
&lt;/h2&gt;

&lt;p&gt;Since all your state mutations pass through a reducer and the passed action object contains information about what has to be changed and how, it is easy to track state changes. If you would mutate state directly and at some point wonder, why the state looks like it looks, you will have a hard time debugging, since the change could come from anywhere. With redux, you can move the debugger or logger into the reducer and observe each and every action of the state.&lt;/p&gt;

&lt;p&gt;So redux definitely has it's advantages and especially shines in large scale projects where many programmers work on the same codebase and where we have big, deeply nested states. &lt;/p&gt;

&lt;h1&gt;
  
  
  When Not To Use Redux
&lt;/h1&gt;

&lt;p&gt;Still, having to add an action function, modify the reducer and then connecting the component to toggle a boolean value, just does not feel natural and especially for small scale projects and prototypes probably is just overkill. But also for large scale projects there are alternatives. Let's have a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternative: &lt;a href="https://github.com/CharlesStover/reactn"&gt;Reactn&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;ReactN is a extension of React that includes global state management. It treats global state as if it were built into React itself -- without the boilerplate of third party libraries.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Damn that sounds amazing. Initializing the global state works as follows:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;With reactn you can simply refer to &lt;code&gt;this.global&lt;/code&gt; instead of &lt;code&gt;this.state&lt;/code&gt; and &lt;code&gt;this.setGlobal&lt;/code&gt; instead of &lt;code&gt;this.setState&lt;/code&gt; and you are done. &lt;code&gt;setGlobal&lt;/code&gt; can even handle async data.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Using hooks? No Problem.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;For most people this approach should be much easier to handle, since it mirrors reacts default behaviour.&lt;/p&gt;

&lt;p&gt;With reactn you can even use redux developer tools. Depending on your state, your app probably re-renders too often. But even then you can make use of &lt;code&gt;withGlobals&lt;/code&gt; HOC and fallback to a redux like approach, similar to &lt;code&gt;mapStateToProps&lt;/code&gt;. But you can do it where and when it is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternative: &lt;a href="https://github.com/lostpebble/pullstate"&gt;Pullstate&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Pullstate has similar syntax. However, it has no support for class components. It only delivers a third party hook for global state management. &lt;/p&gt;

&lt;h3&gt;
  
  
  Initializing Global State
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;You can define as many stores as you want and they would be completely seperate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reading Global State
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;To access values from the state, you call &lt;code&gt;useState&lt;/code&gt; on your imported store and pass a reducer function as callback. The &lt;code&gt;s&lt;/code&gt; here is the complete store and you simply return the value, you want to access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mutate Global State
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Alternative &lt;a href="https://mobx.js.org/README.html"&gt;Mobx&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;How could I not mention Mobx here? The previous libraries where quite small and you do not know for sure for how long they are maintained. However, they also have quite small footprint and for most projects they will speed up initial development time a lot. However, if you want an actively maintained third party state management library, which is ready for large scale production apps and still want to avoid using redux, mobx is one of very few options.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;So with Mobx you basically depend on other third party libs, like &lt;code&gt;mobx-react-lite&lt;/code&gt;, similar to 'react-redux'. You have to wrap your components in a &lt;code&gt;observer&lt;/code&gt; function and use &lt;code&gt;useObservable&lt;/code&gt; to initialise. Afterwards you can modify the store directly to trigger re-renders. To make it global you would have to define the store outside of the components and pass it into it via props.&lt;/p&gt;

</description>
      <category>react</category>
      <category>redux</category>
      <category>statemanagement</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Boost Your Productivity in VSCode with 16 shortcuts</title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Sat, 14 Mar 2020 21:19:22 +0000</pubDate>
      <link>https://forem.com/oshell/boost-your-productivity-in-vscode-with-16-shortcuts-92h</link>
      <guid>https://forem.com/oshell/boost-your-productivity-in-vscode-with-16-shortcuts-92h</guid>
      <description>&lt;p&gt;When you code on a regular basis or even code for a living, it makes a lot of sense to get familiar with your IDE, and its shortcuts. Even better: customise your IDE to your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential Shortcuts
&lt;/h2&gt;

&lt;p&gt;To work effectively with any IDE, there are a few things you want to be able to do, without leaving the keyboard. In this article we will go over the most essential shortcuts for search, navigation and editing files. &lt;/p&gt;

&lt;p&gt;Since default shortcuts are different on Windows and Mac, I will give you the &lt;code&gt;Command&lt;/code&gt; name and my recommended shortcut in a nice formatted table, which you can use as cheat sheet. &lt;code&gt;modifier&lt;/code&gt; in this context just means you could use anything like &lt;code&gt;alt&lt;/code&gt;, &lt;code&gt;ctrl&lt;/code&gt;, &lt;code&gt;opt&lt;/code&gt;. You can search the commands under &lt;code&gt;Settings &amp;gt; Keyboard Shortcuts&lt;/code&gt; and assign new &lt;code&gt;Keybinding&lt;/code&gt; by double clicking. Furthermore I made some sample gifs, showing how it looks in action linked under each table.&lt;/p&gt;

&lt;p&gt;You can also watch this short video and use the tables for later reference.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Search
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Recommended Shortcut&lt;/th&gt;
&lt;th&gt;How to remember&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Go to File...&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;p&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;search &lt;strong&gt;p&lt;/strong&gt;roject file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search: Find in Files&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;shift&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;f&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;search &lt;strong&gt;f&lt;/strong&gt;iles in project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Find&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+ &lt;strong&gt;&lt;code&gt;f&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;search in &lt;strong&gt;f&lt;/strong&gt;ile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go to Symbol in File...&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+ &lt;strong&gt;&lt;code&gt;s&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Go to &lt;strong&gt;s&lt;/strong&gt;ymbol&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The commands above help you quickly find a certain function in your code. If you know which file it is in, use &lt;code&gt;modifier&lt;/code&gt; + &lt;code&gt;p&lt;/code&gt; and jump to the file, then use symbol search &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;s&lt;/code&gt; to jump to the function. If you do not know the file, search the whole project with &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;shift&lt;/code&gt;+&lt;code&gt;f&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://imgur.com/UiVr1Q0.gif"&gt;See VSCode Search in Action&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Navigation
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Recommended Shortcut&lt;/th&gt;
&lt;th&gt;How to remember&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;View: Quick Open View&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;1&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Open View in &lt;strong&gt;1st&lt;/strong&gt; Panel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View: Open Previous Editor&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;q&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;sidestepping left with WASD controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View: Open Next Editor&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;e&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;sidestepping right with WASD controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View: Close Editor&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;r&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;r&lt;/strong&gt;emove current editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View: Move Editor into &lt;code&gt;directon&lt;/code&gt; Group&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;m&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;arrow key&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;m&lt;/strong&gt;ove current editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View: Focus Editor into &lt;code&gt;directon&lt;/code&gt; Group&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;f&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;arrow key&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;f&lt;/strong&gt;ocus editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View: Toggle Integrated Terminal&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;t&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;focus &lt;strong&gt;t&lt;/strong&gt;erminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go to Line...&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;L&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Go to &lt;strong&gt;L&lt;/strong&gt;ine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cursorWordEndRight/cursorWordStartLeft&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;Arrow Key&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://imgur.com/6SQo4If"&gt;See VSCode Navigation in Action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the above commands you can quickly focus any of the side bars with &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;1&lt;/code&gt; and jump back to editing by opening a file or using &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;f&lt;/code&gt; &lt;code&gt;Arrow Key&lt;/code&gt; to focus one of the Editor Groups again. You split the editor view by using &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;m&lt;/code&gt; &lt;code&gt;Arrow Key&lt;/code&gt; and move focus between editors using &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;f&lt;/code&gt; &lt;code&gt;Arrow Key&lt;/code&gt;. Within each editor you can jump between open files using &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;q&lt;/code&gt; and &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;e&lt;/code&gt;.  You can then use previously mentioned symbol search or &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;L&lt;/code&gt; to jump to a certain line. Within any line you move the cursor using &lt;code&gt;cursorWordEndRight/cursorWordStartLeft&lt;/code&gt;. Using &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;t&lt;/code&gt; you can focus the terminal to run your application or run any test commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Editing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Recommended Shortcut&lt;/th&gt;
&lt;th&gt;How to remember&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Add Selection To Next Find Match&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;strong&gt;&lt;code&gt;n&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;select &lt;strong&gt;n&lt;/strong&gt;ext occurrence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move Line Down/Up&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;Arrow Key&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expand/Shrink Selection&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;modifier&lt;/code&gt;+ &lt;code&gt;shift&lt;/code&gt; &lt;strong&gt;&lt;code&gt;Arrow Key&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://imgur.com/6XPH5jM"&gt;See VSCode Editing in Action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;modifier&lt;/code&gt;+&lt;code&gt;n&lt;/code&gt; helps you with refactoring and multi-cursor editing. With &lt;code&gt;Move Line Down/Up&lt;/code&gt; you can move certain lines or complete code blocks. The &lt;code&gt;Expand/Shrink Selection&lt;/code&gt; is quite smart and helps you selecting complete codes of block, before moving/replacing them.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Testing Function Components with Hooks Using Enzyme</title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Tue, 19 Nov 2019 19:23:18 +0000</pubDate>
      <link>https://forem.com/oshell/testing-function-components-with-hooks-using-enzyme-25bg</link>
      <guid>https://forem.com/oshell/testing-function-components-with-hooks-using-enzyme-25bg</guid>
      <description>&lt;p&gt;&lt;a href="https://link.medium.com/AHwXRtiAK1"&gt;https://link.medium.com/AHwXRtiAK1&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>testing</category>
      <category>javascript</category>
      <category>jest</category>
    </item>
    <item>
      <title>Fast, maintainable and scalable frontends</title>
      <dc:creator>oshell</dc:creator>
      <pubDate>Thu, 10 Oct 2019 22:08:06 +0000</pubDate>
      <link>https://forem.com/oshell/fast-maintainable-and-scalable-frontends-50e7</link>
      <guid>https://forem.com/oshell/fast-maintainable-and-scalable-frontends-50e7</guid>
      <description>&lt;p&gt;A few month ago I wrote an article about this topic, the things you have to think about and possible options to consider. Gives you guidance on what tech to choose and why. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://link.medium.com/zacbePznG0"&gt;https://link.medium.com/zacbePznG0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>angular</category>
      <category>react</category>
      <category>jquery</category>
    </item>
  </channel>
</rss>
