<?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: Mirosław Farajewicz</title>
    <description>The latest articles on DEV Community by Mirosław Farajewicz (@mfarajewicz).</description>
    <link>https://dev.to/mfarajewicz</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%2F245198%2Ffa886a7c-4b8c-41b5-a11e-eceb67f9a189.png</url>
      <title>DEV Community: Mirosław Farajewicz</title>
      <link>https://dev.to/mfarajewicz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mfarajewicz"/>
    <language>en</language>
    <item>
      <title>10 most useful IDE hotkeys with GIF examples [part II]</title>
      <dc:creator>Mirosław Farajewicz</dc:creator>
      <pubDate>Fri, 13 Dec 2019 13:47:04 +0000</pubDate>
      <link>https://dev.to/mfarajewicz/10-most-useful-ide-hotkeys-with-gif-examples-part-ii-1k73</link>
      <guid>https://dev.to/mfarajewicz/10-most-useful-ide-hotkeys-with-gif-examples-part-ii-1k73</guid>
      <description>&lt;h4&gt;
  
  
  This is the second part of the &lt;a href="https://blog.fill.ly/10-most-useful-ide-hotkeys/"&gt;article&lt;/a&gt; that had a really warm welcome in &lt;a href="https://dev.to/mfarajewicz/10-most-useful-ide-hotkeys-with-gif-examples-2hkf"&gt;dev.to community&lt;/a&gt;. Some of you commented on your favorite hotkeys, some asked about version for different IDEs. First things first, I want to finish with a set of another 10 hotkeys that will make you the master of hotkeys.
&lt;/h4&gt;

&lt;p&gt;During my work as a dev I use all of them every day (or almost every day).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They are solid background for being really prolific in code refactoring.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned in the first part this keymap is based on Netbeans. In most of modern IDEs you can choose this one (definitely in Eclipse, Netbeans and Jetbrains Family of IDEs such as PHPStorm)&lt;/p&gt;

&lt;p&gt;Ok, this is an article for better productivity, let’s not waste time for more theory.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Ctrl + G - Go to Line Number
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3ohBq9c4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/dcM9bARtChYTTL05cnHj51wbwLrjTvBySrE8zW_CCAjbFHKrTbd4jS91iHkGdAJ_gg8BeY_cPh2mw7P_EUQbgB68pGIny4XzX_TPPgC1ztx2pEYAY9fPDHJFQ8VYluOstqWKBOaP" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3ohBq9c4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/dcM9bARtChYTTL05cnHj51wbwLrjTvBySrE8zW_CCAjbFHKrTbd4jS91iHkGdAJ_gg8BeY_cPh2mw7P_EUQbgB68pGIny4XzX_TPPgC1ztx2pEYAY9fPDHJFQ8VYluOstqWKBOaP" alt="ctrl + g gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is pretty self-explanatory. What is cool about this hotkey it works in environments such as Notepad++, Chrome Dev Tools. You can also type a character number after “:” mark. 170:35 means go to 170th line and put cursor on 35th character.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Ctrl + Tab - Show last opened files
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VdO5b8r2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/SvSd91I6Idxe3CUbEwXn5CJ_snB21vd868Xc9uq93-mw3k72ru4RckQ8QrAsjOg5r1Hy6A8ohWRwoO6AoW3NIdNl0qa8vsdElhGFInkre9M-q4vfgHh1RKS5fG9_1k8C6CIqBD1D" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VdO5b8r2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/SvSd91I6Idxe3CUbEwXn5CJ_snB21vd868Xc9uq93-mw3k72ru4RckQ8QrAsjOg5r1Hy6A8ohWRwoO6AoW3NIdNl0qa8vsdElhGFInkre9M-q4vfgHh1RKS5fG9_1k8C6CIqBD1D" alt="ctrl + tab gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This particular hotkey is extremely useful. I think it goes just after the podium of Ctr+C, Ctrl+V and Ctrl+S in daily work. If you’ve never used it, here’s how it works. You press CTRL then holding it for the entire time press Tab. Every Tab stroke is moving selection to the next file from the list. Releasing Ctrl will open the selected file. After using the list is naturally reordered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The guy who first came with this idea in IDE should be rewarded with a Nobel-prize equivalent for UX inventions.&lt;/strong&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Alt + Shift + V - Extract variable
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Th5vBslf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/WkV-wDZ9pM4OMw5gd0GWlmLTCy4xoemITlfLLlARZwK2VxpknVVE19rKBS6fR---zKUUup2HsachI0kDUWofxS2Xucex09m8JNrB991HGjUB5d_QtOmQw7iOLHJPFtFIZbTAQk9L" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Th5vBslf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/WkV-wDZ9pM4OMw5gd0GWlmLTCy4xoemITlfLLlARZwK2VxpknVVE19rKBS6fR---zKUUup2HsachI0kDUWofxS2Xucex09m8JNrB991HGjUB5d_QtOmQw7iOLHJPFtFIZbTAQk9L" alt="alt shift v gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Number 1 hotkey for refactoring. Together with the one presented as next you can un-spaghetti your code very easily. PHpStorm which I’m using detects multiple occurrences of code that should be extracted to a variable and replaces all occurrences.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Alt + Shift + M - Extract method
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--55xjJbKz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/LP881Ma9YNkKRS8VPLl7AEarW56qyOb6xN4SQuuHQ0drrBY1wqasHDDXl8P7HxvsTT6ygwji4JA08cBONsd1FbKBSHSapoYoa40k9l0McBDdC_qJbFIY6PvPr0CkA96sQ3o3yiMa" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--55xjJbKz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/LP881Ma9YNkKRS8VPLl7AEarW56qyOb6xN4SQuuHQ0drrBY1wqasHDDXl8P7HxvsTT6ygwji4JA08cBONsd1FbKBSHSapoYoa40k9l0McBDdC_qJbFIY6PvPr0CkA96sQ3o3yiMa" alt="alt shift + m gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Works extremely smart in modern IDEs - it detects parameters and return value but it also allows you to customize signature. If you have &lt;strong&gt;big blocks of legacy code that are written according to God-Class antipattern&lt;/strong&gt; it’s the perfect moment to learn this shortcut. If there are moments you want to extract some block to separate method, but you are afraid of multiple dependencies (parameters) this hotkey will automatically detect what is needed.  &lt;/p&gt;

&lt;h2&gt;
  
  
  5. Ctrl + Shift + H - Replace in project
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TfT5khoH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/fijecVW0mlYaW6MygsTYORyvi9P-s4sCOGqouey7v3zZcbyEo4qz4oK-uuDj7oAm4_5C3PrjavlNO7VYoLZ94GcMhra5ikg8B5fkILWVXfL58OVH33LUW75QsQvGD6KfjD6rpl9j" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TfT5khoH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/fijecVW0mlYaW6MygsTYORyvi9P-s4sCOGqouey7v3zZcbyEo4qz4oK-uuDj7oAm4_5C3PrjavlNO7VYoLZ94GcMhra5ikg8B5fkILWVXfL58OVH33LUW75QsQvGD6KfjD6rpl9j" alt="ctrl shift + h gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perhaps this GIF is not an ideal example as it doesn’t show what happens after confirming changes. It was hard to squeeze usage of this hotkey into a few seconds GIF.&lt;/p&gt;

&lt;p&gt;Basically, it’s like Ctrl + H (replace of string) but working in the scope of entire project or selected directory.  &lt;/p&gt;

&lt;h2&gt;
  
  
  6. Ctrl + Shift + I - Optimize imports
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sLBkrjKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/ZPMQD5lUIs3yacMpMZembDCuS17M9vQ85cAcTVg9DkfnwbgjYcpb353oN9atRIZSo2YEP-eou3dMILcMqbZ_tjZnx7WW1j0AXiCJ6L7unfsWApgAv3vAZKFV8CVgd3Uhw2nT2Tjl" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sLBkrjKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/ZPMQD5lUIs3yacMpMZembDCuS17M9vQ85cAcTVg9DkfnwbgjYcpb353oN9atRIZSo2YEP-eou3dMILcMqbZ_tjZnx7WW1j0AXiCJ6L7unfsWApgAv3vAZKFV8CVgd3Uhw2nT2Tjl" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Self-explanatory. Removes all the unnecessary imports. As you probably guess, it works only with languages and frameworks that support imports.  &lt;/p&gt;

&lt;h2&gt;
  
  
  7. Alt + Left/Right arrows - Jumping in code tree
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rXp4-X0o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/uMFjw2g3HcGioEe9x4GXIRAgj_dn0GFkbOT9GcIR8dGCLQCOEPzfI0I4tCC4ErfI_oAQeasKuRh8Nkflk2sFqo7JT180sn_Vwdlacj3NI-3qnRgx_kmL1BTjVfR4mP2fZ0RKWynv" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rXp4-X0o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/uMFjw2g3HcGioEe9x4GXIRAgj_dn0GFkbOT9GcIR8dGCLQCOEPzfI0I4tCC4ErfI_oAQeasKuRh8Nkflk2sFqo7JT180sn_Vwdlacj3NI-3qnRgx_kmL1BTjVfR4mP2fZ0RKWynv" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great shortcut for navigating in complex code-base written with many layers of abstraction. Sometimes you click on method signature to check its code, then you go deeper and deeper. And then you want to go back two levels up. You can return using shortcut #2 or using this hotkey.  &lt;/p&gt;

&lt;h2&gt;
  
  
  8. Ctrl + minus/plus - Collapse / Expand block of code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hLLMBznk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/T2rzDRZxQtqCbypkL2P8Dtqm1pHAU4WrRCz3P9IOK_IdlLmfbfOmHYLFCp9EKzu7p637LkLJVpISpw92EZezsB6Jv_Mx-oFPvQ7m_0ogrWNQNOAKbsTxEiwo_p4vdAb3OJwEnNJC" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hLLMBznk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/T2rzDRZxQtqCbypkL2P8Dtqm1pHAU4WrRCz3P9IOK_IdlLmfbfOmHYLFCp9EKzu7p637LkLJVpISpw92EZezsB6Jv_Mx-oFPvQ7m_0ogrWNQNOAKbsTxEiwo_p4vdAb3OJwEnNJC" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Useful in God-Class files containing 5k lines of code. Also, I tend to use it for huge configuration files written in YAML, JSON or plain PHP.  &lt;/p&gt;

&lt;h2&gt;
  
  
  9. Ctrl + Shift + T - Go to test
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6pPMESP3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/Tf1e445-pxpwKFOtRitJbJfh1SuPp02OSIR--1rOBAiYQayNvv9wWXOuYAVB3z3MMUj23FvIuCj-5LZGznIeDZ3OvtFdTOYCE_C6j_zQgzpRY4OVJgY2J8rVFtdTrRwJpgIN7To1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6pPMESP3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/Tf1e445-pxpwKFOtRitJbJfh1SuPp02OSIR--1rOBAiYQayNvv9wWXOuYAVB3z3MMUj23FvIuCj-5LZGznIeDZ3OvtFdTOYCE_C6j_zQgzpRY4OVJgY2J8rVFtdTrRwJpgIN7To1" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Goes to test file (if exists), prompts to create test file or returns to the tested class file. If you have more than one file matching pattern it will open dialog with possible options. It can be replaced with hotkey #2 (as long as you opened both class file and test file), but anyway it’s good to know it.  &lt;/p&gt;

&lt;h2&gt;
  
  
  10. Alt + Shift + F6 - Run test
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_lfLdpQn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/faREOYDdBuOzBssyDDg_NijejnA8AN875uMSECOXsgzMUZ3dKTyf9XcvPGZwEoM1e8TeghgXK7HzAmZhCUNQuksPMILcDgPgOeC8Wx9NCGQhGUxEk_o2awDqFMp-v9Sw5bcQrr0y" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_lfLdpQn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/faREOYDdBuOzBssyDDg_NijejnA8AN875uMSECOXsgzMUZ3dKTyf9XcvPGZwEoM1e8TeghgXK7HzAmZhCUNQuksPMILcDgPgOeC8Wx9NCGQhGUxEk_o2awDqFMp-v9Sw5bcQrr0y" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Runs test in the current file. If you are the lucky guy working with a codebase that is heavily covered with automated tests you can save some seconds by using this hotkey instead of clicking on a green arrow icon somewhere in the menu of your IDE.  &lt;/p&gt;

&lt;p&gt;So that’s it. Positions 11-20 of my hand-picked set of most useful hotkeys. My proposition for you is to immediately test some of them in your IDE. The longer you keep a non-hotkey way of navigation, the harder it will be to learn this productive habit of using shortcuts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go beyond CTRL + C / CTRL + V&lt;/strong&gt; and learn using some of the #20 starting from this very moment.&lt;/p&gt;

&lt;p&gt;If you liked formula of this tutorial &lt;a href="https://twitter.com/mfarajewicz"&gt;follow me on twitter&lt;/a&gt; to get notifications of other upcoming tutorials. &lt;strong&gt;When it comes to hotkeys I plan to publish a series of “Refactoring patterns on GIF examples”&lt;/strong&gt;. It will illustrate combinations of hotkeys on real-life examples of refactoring.&lt;/p&gt;

&lt;p&gt;Also, I think about creating “20 most popular hotkeys” with a keymap different than the Netbeans one.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>6 GitHub Repos For Instant Knowledge Boost</title>
      <dc:creator>Mirosław Farajewicz</dc:creator>
      <pubDate>Thu, 28 Nov 2019 15:12:38 +0000</pubDate>
      <link>https://dev.to/mfarajewicz/6-github-repos-for-instant-knowledge-boost-3mo0</link>
      <guid>https://dev.to/mfarajewicz/6-github-repos-for-instant-knowledge-boost-3mo0</guid>
      <description>&lt;h4&gt;
  
  
  Github is not only a place for storing our code and sharing libraries with other developers. Thanks to powerful Markdown syntax it’s possible to create sort of wiki pages. There are thousands of great resources in the Github - some of them are so big that recommending them is pointless.
&lt;/h4&gt;

&lt;p&gt;Saying “Heh, checkout Awesome-List repo*” is like saying “Hey, there is this awesome website where you find anything, it’s called Google”&lt;/p&gt;

&lt;p&gt;That’s why I would like to focus on smaller and more single-subject repositories.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;* Awesome-list is the biggest list of links and resources for developers&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Effective Engineer Notes [4 min read]
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a6f" rel="noopener noreferrer"&gt;https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a6f&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2Fz8qPnmjcqxSrbjV27ekZ1HacYOvqt8cIlfUhENaIb5qKEPZ3Zpms3RAqte3wIRpVhe16dokY_3k7h1ywU2USukQBUY-4j0FTQ8LbsBDWafCM6dc81pO_aPx6qqxfpRCETZO4raPP" 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%2Flh3.googleusercontent.com%2Fz8qPnmjcqxSrbjV27ekZ1HacYOvqt8cIlfUhENaIb5qKEPZ3Zpms3RAqte3wIRpVhe16dokY_3k7h1ywU2USukQBUY-4j0FTQ8LbsBDWafCM6dc81pO_aPx6qqxfpRCETZO4raPP" alt="Effective egineer notes"&gt;&lt;/a&gt;&lt;br&gt;
This small repository is like a single article or checklist for software developers who want to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve speed of the dev process&lt;/li&gt;
&lt;li&gt;Learn quicker by improving learning habits&lt;/li&gt;
&lt;li&gt;Be more focused and productive while coding
Except focusing on being more effective it gives you some hints on how to be a better software engineer. Most of the tips are highly inspired by knowledge spread by software architect guru &lt;a href="https://martinfowler.com/" rel="noopener noreferrer"&gt;Martin Fowler&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Great things that should be highlighted from this repo are for sure: &lt;a href="https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a6f#invest-in-iteration-speed" rel="noopener noreferrer"&gt;Invest in Iteration Speed&lt;/a&gt; and &lt;a href="https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a6f#fail-fast" rel="noopener noreferrer"&gt;Fail Fast&lt;/a&gt; sections.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also at the bottom, there is a bunch of other resources, but I did not get familiar with those yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Interview Handbook [1 day read]
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/yangshun/tech-interview-handbook" rel="noopener noreferrer"&gt;https://github.com/yangshun/tech-interview-handbook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2FwUWfwcG7ItBhSomMKK1k0pohpErAlnE218HLcf6YzRHdZIGeuzMiRjv71YPaLCZb5FuVSjjeRBdvnWeAR5eV14YuxsoCPBg8Efck5nkqda4EFbY1ZPZD7ZT7yoQ2TFDxslhz6_UN" 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%2Flh6.googleusercontent.com%2FwUWfwcG7ItBhSomMKK1k0pohpErAlnE218HLcf6YzRHdZIGeuzMiRjv71YPaLCZb5FuVSjjeRBdvnWeAR5eV14YuxsoCPBg8Efck5nkqda4EFbY1ZPZD7ZT7yoQ2TFDxslhz6_UN" alt="Tech interview handbook"&gt;&lt;/a&gt;&lt;br&gt;
Great resource for any developer who struggles with passing through interview process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://yangshun.github.io/tech-interview-handbook/algorithms/algorithms-introduction" rel="noopener noreferrer"&gt;Algorithms&lt;/a&gt; section is cool packed piece of knowledge we all learn at first year at any university but then we forget it till we graduate and look for a first job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part of &lt;a href="https://yangshun.github.io/tech-interview-handbook/during-coding-interview" rel="noopener noreferrer"&gt;During the Code Interview&lt;/a&gt; is also a must.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Big List of Naughty Strings [not for reading I guess]
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/minimaxir/big-list-of-naughty-strings" rel="noopener noreferrer"&gt;https://github.com/minimaxir/big-list-of-naughty-strings&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FSw3mnK-2WJwDB8d81yHGsBQ2VJ-BdNrawH-tK28LB7EvDfW0JoMlfssq0jJY8eF_UhVvyhlNRcvAs2D5L1PV9oldMYUKC96Hy2SS-U7LzoJcmW7drdfmmSCvRBoLKIp0dg6mreRs" 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%2Flh3.googleusercontent.com%2FSw3mnK-2WJwDB8d81yHGsBQ2VJ-BdNrawH-tK28LB7EvDfW0JoMlfssq0jJY8eF_UhVvyhlNRcvAs2D5L1PV9oldMYUKC96Hy2SS-U7LzoJcmW7drdfmmSCvRBoLKIp0dg6mreRs" alt="big list of naughty strings"&gt;&lt;/a&gt;&lt;br&gt;
Inside the repository, there is a file blns.txt. It contains a long list of strings that you may use while testing user inputs in your app.&lt;/p&gt;

&lt;p&gt;If you have a unit test with a data provider specified it may be pretty quick to implement a part of the list for the most crucial part of your app.&lt;/p&gt;

&lt;p&gt;The most important part of the list itself?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definitely #Script Injection part - starts around line 320.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Free Programming Books [your entire life]
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/EbookFoundation/free-programming-books" rel="noopener noreferrer"&gt;https://github.com/EbookFoundation/free-programming-books&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2FM0ewC6rARHVa5Yr177xABtj-xD4f24ySgAU9nkBue8HnrK_XLyP6Prp8OrH7cIQ1cOjqbMZdPKGQQAhpuaX8JxqxiE8VpVSRLXvKVAXTtzD8daBQmggPt55TzDwjnUkZUMPODzEd" 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%2Flh5.googleusercontent.com%2FM0ewC6rARHVa5Yr177xABtj-xD4f24ySgAU9nkBue8HnrK_XLyP6Prp8OrH7cIQ1cOjqbMZdPKGQQAhpuaX8JxqxiE8VpVSRLXvKVAXTtzD8daBQmggPt55TzDwjnUkZUMPODzEd" alt="free programming books"&gt;&lt;/a&gt;&lt;br&gt;
Well this repo is a little exception from what I wrote in the introduction. It’s huge. If you were to read everything there one life would be not enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free for dev [30 min read]
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ripienaar/free-for-dev" rel="noopener noreferrer"&gt;https://github.com/ripienaar/free-for-dev&lt;/a&gt; or just &lt;a href="https://free-for.dev/#/" rel="noopener noreferrer"&gt;https://free-for.dev/#/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh4.googleusercontent.com%2FXrtWM3WxkOa6DWD5XxP0YtJHqjDcN4MVNQaWxHBz4-gC_WB_3-4NXJL8MnHCxDSYY02TK1s6ohIjzyiFHhnsCX01326zhj4jwZLx6byg7tCNtqy0YNQ_jC-CMzEKX6KYE8jVJAd7" 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%2Flh4.googleusercontent.com%2FXrtWM3WxkOa6DWD5XxP0YtJHqjDcN4MVNQaWxHBz4-gC_WB_3-4NXJL8MnHCxDSYY02TK1s6ohIjzyiFHhnsCX01326zhj4jwZLx6byg7tCNtqy0YNQ_jC-CMzEKX6KYE8jVJAd7" alt="free for dev"&gt;&lt;/a&gt;&lt;br&gt;
This is a list of tools that you may use in your daily work. &lt;strong&gt;Requirement for tools on that list is having some kind of free plan&lt;/strong&gt;. You may be sure that if you don’t have enterprise needs you’ll find free apps here. The cool thing is that it’s focused on typical dev applications, so there is just one section for app like Jira or Trello - which normally are listed on any “X best tools for developers”.&lt;/p&gt;

&lt;p&gt;Sections you need to discover: &lt;a href="https://free-for.dev/#/?id=miscellaneous" rel="noopener noreferrer"&gt;Miscellaneous&lt;/a&gt; as it contains completely random things you may even know that exists. Also &lt;a href="https://free-for.dev/#/?id=apis-data-and-ml" rel="noopener noreferrer"&gt;Api &amp;amp; Data&lt;/a&gt; part is great.&lt;/p&gt;

&lt;h3&gt;
  
  
  You Don’t Need [few hours read]
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/you-dont-need/You-Dont-Need.com" rel="noopener noreferrer"&gt;https://github.com/you-dont-need/You-Dont-Need.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2FTTIfG4o7LKpdUUfklUa164-iHBAqqBXJfbyqsKzRYXk3lvcD1-kyxNFu0ooyrbFsF5Bf55I7F8fPxjii2MV2KrtKRdarwBiHdNa4J4RHMNS3rL_OeufKbVlX2fgwuiNFw7kF5BOu" 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%2Flh6.googleusercontent.com%2FTTIfG4o7LKpdUUfklUa164-iHBAqqBXJfbyqsKzRYXk3lvcD1-kyxNFu0ooyrbFsF5Bf55I7F8fPxjii2MV2KrtKRdarwBiHdNa4J4RHMNS3rL_OeufKbVlX2fgwuiNFw7kF5BOu" alt="you dont need"&gt;&lt;/a&gt;&lt;br&gt;
Great repository that gathers different articles written in a “You don’t need X” way. This is mostly set of tips why developers these days over-engineer apps. &lt;strong&gt;Especially in JS ecosystem world people tend to use frameworks and tools because there is a hype for them&lt;/strong&gt; not because of real need.&lt;/p&gt;

&lt;p&gt;I would say this reading is a must.&lt;/p&gt;

&lt;p&gt;You should start with &lt;a href="https://medium.freecodecamp.com/you-might-not-need-to-transpile-your-javascript-4d5e0a438ca" rel="noopener noreferrer"&gt;You Don’t Need to Transpile Your JavaScript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading my list. I hope you not only bookmark those repos - bookmarking is easy. But I truly hope you’ll read and use some of them. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The power of those repos lies in the fact that most of them are created by programmers from the passion&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;They are not yet another marketing product to promote some famous dev company.&lt;/p&gt;

&lt;p&gt;What are your famous wiki-repos? Comment bellow. And yep we all know &lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;Amesome Repo&lt;/a&gt; :)&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/mfarajewicz" rel="noopener noreferrer"&gt;Twitter at @mfarajewicz&lt;/a&gt; to stay up-to-date with my publications.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>career</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Error-logging Patterns and Practices</title>
      <dc:creator>Mirosław Farajewicz</dc:creator>
      <pubDate>Wed, 27 Nov 2019 12:36:52 +0000</pubDate>
      <link>https://dev.to/mfarajewicz/error-logging-patterns-and-practices-2mmo</link>
      <guid>https://dev.to/mfarajewicz/error-logging-patterns-and-practices-2mmo</guid>
      <description>&lt;h5&gt;
  
  
  This article is an extension of what I wrote in &lt;a href="https://dev.to/mfarajewicz/5-tips-you-can-t-afford-to-miss-as-a-dev-rookie-h2e"&gt;5 tips for dev rookies&lt;/a&gt;. The idea behind the original article was to overly describe important concepts that you can improve in your work.
&lt;/h5&gt;

&lt;p&gt;I wanted to deliberate a bit more about logging, so I decided to create a separate article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should I care about logs?
&lt;/h2&gt;

&lt;p&gt;With broken logs you would be walking alone in the dark when searching for a bug. What’s more, with logging mechanism not implemented at all you won’t even know that there is a bug.&lt;/p&gt;

&lt;p&gt;With logs, you can simply start the day with a mug of coffee and check what errors happened during the last few hours in the night. If these are known issues then you won’t appreciate it so much**. However, if something new and unexpected occurs you may be sure that a well-formed stack trace with a meaningful error message will make you think “I got you, you little fu**&amp;amp;”.&lt;/p&gt;

&lt;p&gt;With logs, you can easily find what happened on your customer’s account without a bigger interviewing session.&lt;/p&gt;

&lt;p&gt;How you can tell that there is something wrong with logging in your application? Well, it can be broken in many different ways.&lt;/p&gt;

&lt;p&gt;I won’t dig this topic so deep to debate which logging library or log processing pipeline is the best (well processing pipelines are not very junior dev topic). I would like to discuss a few more basic and overall concepts.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;** Which means that they either should be fixed or you log things that perhaps should be omitted?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand your framework
&lt;/h2&gt;

&lt;p&gt;Most of the modern frameworks (at least the backend ones) have built-in functionality of logging. While logging information and warning messages are self-explanatory, dealing with errors can have different scenarios and many developers just omit this knowledge and follow approach “ok I will use any method for logging and it will be fine”. Well, it won’t be fine. What’s worse by using logging methods in the wrong way you are turning logs into garbage.&lt;/p&gt;

&lt;p&gt;Some libraries log errors using a method like error(message) and it produces entry with your log with that message, timestamp and log level.&lt;/p&gt;

&lt;p&gt;Some have separate method for logging exception object such as &lt;code&gt;logException(Exception e)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;which usually takes an exception message and combines it with a stack trace and then puts that as an error entry to your log.&lt;/p&gt;

&lt;p&gt;It’s also popular to have one method such as error, but with the possibility to add context or exception object - then the method extracts stack trace and builds proper error message on top of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spend 2 minutes on reading documentation in the #logging section of your framework or logging library.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code-level mistakes
&lt;/h2&gt;

&lt;p&gt;There are many basic code-level mistakes when using the logging mechanism in our app. Most common are those when dealing with exceptions.&lt;/p&gt;

&lt;p&gt;For the sake of example let’s assume our app is a web scraper extracting data from some job board. We want to get details of each job extracted from the main page of our target job portal. We are requesting pages using abstract &lt;code&gt;HttpClient&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Before we start let’s imagine a little mind experiment. For each situation - imagine what your co-worker would see in the log on the next day morning when he starts his day in the office, assuming that some error occurred in the piece of code written by you.&lt;/p&gt;

&lt;p&gt;Not logging exceptions at all. I’ve seen this way too many times in codebases.&lt;br&gt;
&lt;code&gt;try { httpClient.get(url) } catch (e) { }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ND9V4Nsv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/GOPmwU66M2Gq4jMZsVuvJPxN-kSvmaLejiKiku3f4Gz3xibOfl-Zs_rwZmGTocUrQk6rhbAsOBESmpxzgbhvlwdunVY3Kd5yI_qFQUnFRFWCT561lK0iv9mCcMzhc3GyAp0cgJEw" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ND9V4Nsv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/GOPmwU66M2Gq4jMZsVuvJPxN-kSvmaLejiKiku3f4Gz3xibOfl-Zs_rwZmGTocUrQk6rhbAsOBESmpxzgbhvlwdunVY3Kd5yI_qFQUnFRFWCT561lK0iv9mCcMzhc3GyAp0cgJEw" alt="Do you think logging is a game?"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Assume that your app scraping was supposed to scrap 2 thousand URLs and failed on yetanotherjobboard.io/junior-web-dev.&lt;/p&gt;

&lt;p&gt;Monday, morning. Your coworker is enjoying his first coffee - while checking logs to learn what happened during the night. What would he see in logs?&lt;/p&gt;

&lt;p&gt;Nothing, blank.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You don’t even know that during the night some of the URLs were not parsed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fixing logging, in this case, is obvious. Assuming that your &lt;code&gt;logException&lt;/code&gt; method deals properly with logging exception and does not commit any of the next mistakes it would like like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try { httpClient.get(url) } catch (e) { logger.logException(e); }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This example assumes that &lt;code&gt;logException&lt;/code&gt; method saves every important piece of information. Otherwise, we need to separately save exception and information about it. See the next examples&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Logging without adding details about what went wrong.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Try {

httpClient.get(url)

} catch (e) {

logger.logException(e);

logger.logError(‘Was not able to parse URL’);

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That’s better than problem 1) because at least we know something unexpected happened but still missing a crucial part of the problem. It’s also an example of what I mentioned in “Understand your framework” section. We have two separate methods - one for logging exception itself, and second if we want to save entry with our own error message.&lt;/p&gt;

&lt;p&gt;What would your team-mate see at the morning after parser failed to process one of the URLs?&lt;/p&gt;

&lt;p&gt;Stacktrace with line of code of you HttpClient failing.&lt;/p&gt;

&lt;p&gt;Plus next log would be info “Was not able to parse URL”.&lt;/p&gt;

&lt;p&gt;Cool but if you are to fix your parser then you &lt;strong&gt;need to know what URL was not parsed&lt;/strong&gt;. You would like to enter this URL in the browser or curl it in the command-line to manually check why it’s failing.&lt;/p&gt;

&lt;p&gt;Fixing this case would make this code like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Try {

httpClient.get(url)

} catch (e) {

logger.logException(e);

logger.logError(‘Was not able to parse url ’ + url);

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Logging exceptions only as error messages. No stack trace logged, which is the same if not more important than a meaningful error message.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Try {

httpClient.get(url)

} catch (e) {

logger.logError(‘Was not able to parse url ’ + url);

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This example mostly depends on the implementation of &lt;code&gt;logError&lt;/code&gt; message but I assume it only logs passed message + marks an entry as ERROR.&lt;/p&gt;

&lt;p&gt;In a situation like this you would like to know:&lt;/p&gt;

&lt;p&gt;What URL failed - checked&lt;br&gt;
Why it failed - not checked. It may be because the parsed website had a temporary glitch, and we got some 500 response. Our HTTP client could have timeout-ed because of internet problems on our side. Or our parser could have been banned?&lt;br&gt;
Fixing depends on the rest of the code and classes you have, but probably it will be something like this. Stack trace (logging exception itself) will be an answer to our questions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Try {

httpClient.get(url)

} catch (e) {

logger.logError(‘Was not able to parse url ’ + url);

logger.logException(e);

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Being command-line log ninja
&lt;/h2&gt;

&lt;p&gt;Also at the end, I would like to mention one thing which is a way of dealing with logs. Learn to view them in a handy way. Especially if you are comfy Windows user and have to read logs directly on the Linux machine.&lt;/p&gt;

&lt;p&gt;If you are this type of user that first looks for GUI equivalent of every app, and you have to check some logs directly in the command line or DB console you may feel a bit lost. Test those commands for reading logs in Linux terminal:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tail -f -n 200 /var/logs/nginx.log&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And make them a habit.&lt;/p&gt;

&lt;p&gt;Also adding parameter &lt;code&gt;-F&lt;/code&gt; for continuously displaying new lines is helpful&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6bMhoQx6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/T6kOIjzZVF919hk1zo-pJv_dBGdInmuZhIci8z-fe-4eQ3lMT3lV93PzZmwePEJ3d432r-0SX780POiHosDARt83a0Qr7FJZLj1v92ZaqLFUrkGZDOx95A7iPm1jrVkam61Bi2qF" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6bMhoQx6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/T6kOIjzZVF919hk1zo-pJv_dBGdInmuZhIci8z-fe-4eQ3lMT3lV93PzZmwePEJ3d432r-0SX780POiHosDARt83a0Qr7FJZLj1v92ZaqLFUrkGZDOx95A7iPm1jrVkam61Bi2qF" alt="Gif showing tail command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have to deal with logs in MySQL console you may find useful SQL switch &lt;code&gt;\G&lt;/code&gt; - it makes better display of multi-row columns making log from this format:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Z9gawiO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/QrlcZ0O3Pk_n2SattKrSzzPsBICVLm2wK4ReJgzYWKU5L06qnMRGq-2lezKjvphXpMvlQtK3Oh9mce-aWEifkwfvlaHaXoQ6eFYDDyffIE8dPtez5fJBKxaY-PAhCEENH9qKA6qm" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Z9gawiO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/QrlcZ0O3Pk_n2SattKrSzzPsBICVLm2wK4ReJgzYWKU5L06qnMRGq-2lezKjvphXpMvlQtK3Oh9mce-aWEifkwfvlaHaXoQ6eFYDDyffIE8dPtez5fJBKxaY-PAhCEENH9qKA6qm" alt="mysql commands for better logs experience"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn how to quickly transform machine-friendly timestamps into readable formats eg. SQL's &lt;code&gt;from_unixtime(col)&lt;/code&gt; is a good start. Also, &lt;code&gt;substr&lt;/code&gt; function allows to quickly retrieve part of long data for analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combination of &lt;code&gt;from_unixtime&lt;/code&gt; and &lt;code&gt;substr&lt;/code&gt; is a simple yet powerful&lt;/strong&gt; way to find your way through logs jungle.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xvoudZeE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/fH18Nuum0WHxwztroVMf5CDJ7R7NMgydfGmb8R7h63crVouxWx1rPrV3l6_gGudOQFaXjb_FBVQG19ElChUxWOBDEICepa4WC2yS--8jF9r2yfmM7EFEolTzjRBYlvX3Q2s6jtFl" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xvoudZeE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/fH18Nuum0WHxwztroVMf5CDJ7R7NMgydfGmb8R7h63crVouxWx1rPrV3l6_gGudOQFaXjb_FBVQG19ElChUxWOBDEICepa4WC2yS--8jF9r2yfmM7EFEolTzjRBYlvX3Q2s6jtFl" alt="mysql from_unixtime and substr"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select substr(LOG_COL, 1, 40), from_unixtime(TIME_COL) as date from LOGTABLE order by id desc limit 10;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Show last 10 logs with readable human time and extracted beginning of log message&lt;/p&gt;

&lt;p&gt;Also if you are interested in different time frame you can use DATE_SUB and DATE_ADD methods&lt;/p&gt;

&lt;p&gt;Such as&lt;/p&gt;

&lt;p&gt;&lt;code&gt;select substr(LOG_COL, 1, 40), from_unixtime(TIME_COL) as date from LOGTABLE where from_unixtime(TIME_COL) &amp;gt; '2019-08-24' AND from_unixtime(TIME_COL) &amp;lt; '2019-08-26';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Those commands won’t make you ninja yet&lt;/strong&gt;, but they are a good foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;This is just the beginning of a broad topic of logging. When you get familiar with all the concepts presented in this article you can dig deeper.&lt;/p&gt;

&lt;p&gt;Subject such as configuring and using a logging pipeline is what you should learn further. Of course, it’s out of the scope of tutorial for beginners like this. However, using tools such as &lt;strong&gt;Logstash and Kibana&lt;/strong&gt; can boost the quality of your app as it helps you better monitor and alert on anything unexpected happening in the app.&lt;/p&gt;

&lt;p&gt;If you like this article get familiar with &lt;a href="https://dev.to/mfarajewicz/5-tips-you-can-t-afford-to-miss-as-a-dev-rookie-h2e"&gt;5 tips for dev rookies&lt;/a&gt; - I will soon write another elaboration on the “Feedback loop” subject.&lt;/p&gt;

&lt;p&gt;Also, follow me on &lt;a href="https://twitter.com/mfarajewicz"&gt;twitter&lt;/a&gt; if you want to stay up-to-date with all my articles.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>5 Tips You Can’t Afford to Miss as a Dev Rookie</title>
      <dc:creator>Mirosław Farajewicz</dc:creator>
      <pubDate>Tue, 12 Nov 2019 14:04:03 +0000</pubDate>
      <link>https://dev.to/mfarajewicz/5-tips-you-can-t-afford-to-miss-as-a-dev-rookie-h2e</link>
      <guid>https://dev.to/mfarajewicz/5-tips-you-can-t-afford-to-miss-as-a-dev-rookie-h2e</guid>
      <description>&lt;p&gt;If you’ve just started, or you are about to start a career in programming, you probably read many “Tips for beginners”. This is yet another article in that subject. So what is different? I won’t give you a single piece of advice on things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which languages or frameworks it is best to learn right now&lt;/li&gt;
&lt;li&gt;how to stay motivated coach-like mentorship&lt;/li&gt;
&lt;li&gt;how to go through recruitment process&lt;/li&gt;
&lt;li&gt;I won’t also debate on whether it’s better to pay for a Bootcamp or enroll to online course.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will actually address this article to people that already know how to code but perhaps miss some direction on what to devote time when self-learning.&lt;/p&gt;

&lt;p&gt;I recently asked myself what was important to me as a developer for the first 2-3 years when learning curve was extremely steep and what habits introduced at the early stage of my development career made strong background for following years.&lt;/p&gt;

&lt;p&gt;So going straight to the point, here are my tips.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gh1KDy-l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.fill.ly/content/images/2019/11/kobu-agency-67L18R4tW_w-unsplash-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gh1KDy-l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.fill.ly/content/images/2019/11/kobu-agency-67L18R4tW_w-unsplash-1.jpg" alt="Junior dev waving to his family seconds before his first release"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Junior dev waving to his family seconds before his first release&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Concepts and programming principles are important
&lt;/h1&gt;

&lt;p&gt;Together with learning technologies, languages and frameworks do not forget to learn concepts and principles of programming. You won’t be good software engineer if you know 4 different modern JS frameworks, you consider learning fifth but at the same time lack knowledge on principles like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SOLID&lt;/li&gt;
&lt;li&gt;STUPID,&lt;/li&gt;
&lt;li&gt;YAGNI,&lt;/li&gt;
&lt;li&gt;KISS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And other magically abbreviated principles. It’s like knowing a lot of words in foreign language without grammar skills.&lt;/p&gt;

&lt;p&gt;Code smells, anti-patterns and refactoring techniques are also an important concept. Majority of them are pretty straightforward so you can learn them without bigger trouble.&lt;/p&gt;

&lt;p&gt;All of them help you create a &lt;strong&gt;cleaner and more robust code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazing resource: &lt;a href="https://refactoring.guru/refactoring/catalog"&gt;https://refactoring.guru/refactoring/catalog&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Dive into code review world
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--shWPz_DJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://blog.fill.ly/content/images/2019/11/codereview.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--shWPz_DJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://blog.fill.ly/content/images/2019/11/codereview.gif" alt="What it's like being a junior developer in a code review"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;What it's like being a junior developer in a code review&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Good code review is the best way to learn. Period.&lt;/p&gt;

&lt;p&gt;If I had one superpower I would make all the people collaboratively review work of their coworkers - whether they are programmers, architects, politics or office-clerks.&lt;/p&gt;

&lt;p&gt;There is no better way to spot errors you make, learn how to fix them and how to avoid them.&lt;/p&gt;

&lt;p&gt;And there is no better way to learn what mistakes are done by other developers. and what it means to our mental health to read crappy code.&lt;/p&gt;

&lt;p&gt;It’s improving our discipline by making us feel twice responsible for our code - we sign it with our name when asking for a Pull Request. And we’ll have to confront other people ready to roast every line of code we produced.&lt;/p&gt;

&lt;p&gt;Don’t be afraid of reviewing code written by more experienced people. Even if you are a developer for a short time. You still may find readability issues, provoke discussion and deliver insights from the perspective of a person not so fluent in reading code (this is valuable).&lt;/p&gt;

&lt;p&gt;If you look for a job and have few offers - ask about their code reviewing culture - think twice before accepting offers from those not performing any code review or performing it in a poor way.&lt;/p&gt;

&lt;h1&gt;
  
  
  Logs should be your main point of focus
&lt;/h1&gt;

&lt;p&gt;Logs allow you to sleep better. They will make you more confident about tracking every unexpected behavior in the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logs + automated tests are awesome duo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tests cover everything in the code you expect to happen. Also, they assure you other people don’t break this solid foundation. Properly configured logs, on the other hand, will show you that your app or some feature crashed in a way you did not plan.&lt;/p&gt;

&lt;p&gt;Overall concepts in having entire logging ecosystem healthy would be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log things properly on the level of code and exceptions handling&lt;/li&gt;
&lt;li&gt;Keep logs as clean as possible&lt;/li&gt;
&lt;li&gt;Automate alerting when number of logs is bigger than expected (this goes beyond the typical junior developer skillset)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When it comes to point 1)&lt;/p&gt;

&lt;p&gt;What you need to achieve with logs firstly is to understanding how your framework or logging library works. You want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;not log unnecessary things - you always should look towards uncluttering logs&lt;/li&gt;
&lt;li&gt;log important stuff the way &lt;strong&gt;crucial part of information are stored&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have this understanding try to fix all the places in your code where logging of exception is broken. With moderately small codebase and modern IDE it’s quite easy to search for every occurrence of "catch(" in the code. And for each occurrence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure exception is logged.&lt;/li&gt;
&lt;li&gt;Make sure it’s stack trace is logged.&lt;/li&gt;
&lt;li&gt;Make sure all the important params are logged.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ok, you have it.&lt;/p&gt;

&lt;p&gt;Now last step to become Not-so-Junior Log Ninja is to learn to handle logs in terminal. For the most of your time, you’ll have this comfort to use some web UI. However knowing how to deal with logs in the command-line is an important skill.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Learn favorite commands to view last X lines of log file&lt;/li&gt;
&lt;li&gt;Get familiar with continuous log viewing&lt;/li&gt;
&lt;li&gt;Learn how to grep&lt;/li&gt;
&lt;li&gt;For logs in SQL database learn” \G switch” to be able to view them in a more handy way&lt;/li&gt;
&lt;li&gt;Learn how to quickly transform machine-friendly timestamps into readable formats eg. SQL's "from_unixtime(col)" is a good start
Learn how to filter logs basing on date using eg. "WHERE logtime BETWEEN DATE_SUB(NOW(), INTERVAL 4 HOUR) AND DATE_SUB(NOW(), INTERVAL 2 HOUR)" to get logs saved in certain 2h window.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Learning what NOT to do &amp;gt; learning what to do
&lt;/h1&gt;

&lt;p&gt;Yep, you’ve read correctly. There is a distinctive difference &lt;strong&gt;between learning patterns and anti-patterns.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ll give you an example from my personal life. When I was at school I played chess a bit. I wanted to be better so I started to read books and tried to implement solutions from the books.&lt;/p&gt;

&lt;p&gt;It didn’t work out though. To tell you the truth, it was a spectacular disaster.&lt;/p&gt;

&lt;p&gt;I was using solutions I did not understand. I mean I understood more-less ideas behind each opening or defense but I was missing the bigger picture. Plus for each of them I was so focused on following the set of steps I played like a little monkey.&lt;/p&gt;

&lt;p&gt;The result was I playing worse than before I had started to read those books. Shortly after I was not so psyched about chess and stopped playing.&lt;/p&gt;

&lt;p&gt;This one tip is pretty personal and some people may not agree with it. It probably comes from how I learn things and perhaps it may not work for every other person.&lt;/p&gt;

&lt;p&gt;In learning concepts and principles pay more attention to anti-patterns: what not to do, and what to avoid. In contrary following patterns is doing things in compliance with set of rules.&lt;/p&gt;

&lt;p&gt;Following anti-patterns &lt;strong&gt;will always make your code slightly less crappy.&lt;/strong&gt; Depending on the set of anti-patterns and how compliant you are with them - your code will be more or less improved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But it will be improved.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whereas following patterns can make you produce code that is even worse spaghetti than before. It happens if you do not understand the bigger picture of used pattern itself or try to implement them too much when not needed (a.k.a over engineering).&lt;/p&gt;

&lt;h1&gt;
  
  
  Minimize low-level feedback loop
&lt;/h1&gt;

&lt;p&gt;Feedback loop is extremely broad and overall term. It may be related to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how startups collects feedback from marketing actions they perform&lt;/li&gt;
&lt;li&gt;how information flows in IT organization between different members of the team or different departments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it also may define a set of low-level actions you perform as a developer.&lt;/p&gt;

&lt;p&gt;Feedback loop means all the necessary steps to reproduce certain behavior starting from scratch to point when you get feedback - either code is working or not.&lt;/p&gt;

&lt;p&gt;Ideally, unit tests should be your feedback and rescue mechanism. But as this article is addressed to junior developers - I assume some of you may not know how to write automated tests.&lt;/p&gt;

&lt;p&gt;Learn to minimize feedback loop when figuring out why things are not working.&lt;/p&gt;

&lt;p&gt;The ideal situation is to try split longer sequences of work into short ones - &lt;strong&gt;making clear save point&lt;/strong&gt; where you know you can always start from.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I hope that I inspired you to improve something in your work. I wish you all the best in learning and getting better as a developer.&lt;/p&gt;

&lt;p&gt;As the last tip I allow myself for tiny work-life balance mentorship: have some life except programming and your job. You’ll be useless for your company when over-worked.. and missing soft skills such as talking to other people.&lt;/p&gt;

&lt;p&gt;If you liked this article follow me on twitter or subscribe to my blog to be up-to-date with everything I publish.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>career</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>10 most useful IDE hotkeys with GIF examples</title>
      <dc:creator>Mirosław Farajewicz</dc:creator>
      <pubDate>Tue, 29 Oct 2019 12:39:48 +0000</pubDate>
      <link>https://dev.to/mfarajewicz/10-most-useful-ide-hotkeys-with-gif-examples-2hkf</link>
      <guid>https://dev.to/mfarajewicz/10-most-useful-ide-hotkeys-with-gif-examples-2hkf</guid>
      <description>&lt;p&gt;Do you know what percentage of people do not use Ctrl+F when searching text on pages?&lt;/p&gt;

&lt;p&gt;Me neither.&lt;/p&gt;

&lt;p&gt;But the closest estimation done by Mozilla &amp;amp; TestPilot says that it ranges between 81% and 90%. The number is pretty shocking to me, but if you think a bit about it - it makes sense. Not all of us work in IT. There are many older people who don’t know that they can “search on webpage” not to mention about using a hotkey for it.&lt;/p&gt;

&lt;p&gt;For each of you crushing serious programming challenges every day, there is certain number of uncles and aunties who uses internet mainly for checking recipe for friday’s dinner. 81%-90% sounds not so shocking after having some second thoughts.&lt;/p&gt;

&lt;p&gt;Anyway, I’m curious how those statistics look when only IT-related people were examined.&lt;/p&gt;

&lt;h1&gt;
  
  
  IT loves productivity. Productivity loves hotkeys.
&lt;/h1&gt;

&lt;p&gt;What is surprising many developers did not develop habit of using hotkeys. I know some really good programmers who simply struggle learning them. It’s like developing every habit - you have to put some effort at the beginning, but once you get used to it - it pays off.&lt;/p&gt;

&lt;p&gt;For me the Aha-moment for using hotkeys was my first job in office as a developer. Guys who were sitting next to me were extremely helpful. They gave me many tips on more productive usage of my IDE. Without that help I would probably stumble upon the wall of huge and enigmatic keymap in Netbeans which was my main IDE back in the days.&lt;/p&gt;

&lt;p&gt;It's not possible to create one universal hotkey tutorial - there are few keymaps out there - most popular are based on Eclipse and Netbeans.&lt;/p&gt;

&lt;p&gt;I will review Netbeans’ ones. For the sake of simplicity I named the keys using Windows naming. If you are a Mac user just press CMD instead of CTRL.&lt;/p&gt;

&lt;p&gt;Here is my list.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Alt + Shift + Up/Down arrows
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fmoving-code-line.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fmoving-code-line.gif" alt="Moving mode line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Used for moving current line of code up or down. When we have selected block of text it naturally moves the entire block.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Ctrl + Shift + Up/Down arrows
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fcoping-line-of-code.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fcoping-line-of-code.gif" alt="Copying line of code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Duplicates current line of code. In Jetbrains’ IDEs: IntelliJ or PHPStorm it only copies current line below. In Netbeans however it’s possible to copy line up - there is a slight difference in where is your cursor after using the hotkey.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Ctrl + J
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fextend-selection.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fextend-selection.gif" alt="Extend selection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Netbeans’ keymap described as “Extend selection” which may be confusing. As you see on the GIF I don’t have anything selected at the beginning so “Extending” this selection is misleading. Selects the entire word / name.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Shift + Alt + O
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fopening-by-file-name.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fopening-by-file-name.gif" alt="Opening by file name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opens “Open file by name” popup. What is interesting typing name of file using only first letters of camel-cased segments helps quickly opening files with complex name.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ctrl + Shift + 1
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fnavigate-in-tree.gif" alt="Navigate in directory tree"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Find current file in directory tree and expand this particular tree branch. Jetbrains products add ability to automatically reflects opened file in directory tree. Personally I do not use this feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Alt + Shift + F
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fformatting-code.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fformatting-code.gif" alt="Formatting code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This hotkey formats current file. Or if we have active selection, formats only selected piece of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Ctrl + E
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fline-removal.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fline-removal.gif" alt="Line removal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Removes current line of code. Works also for selection.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Ctrl + /
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fcomment-line.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fcomment-line.gif" alt="Commenting line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comment / uncomment current line of code&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Ctrl + Alt + Left / right arrow
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fselecting-word-segments.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Fselecting-word-segments.gif" alt="Selecting words segments"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecting consecutive word / expression fragments. If it’s CamelCased name - particular fragments will be selected. If it’s entire expression then adjacent operators and arguments will be selected step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Ctrl + R
&lt;/h2&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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Frename.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.fill.ly%2Fcontent%2Fimages%2F2019%2F10%2Frename.gif" alt="Rename"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rename current element (method, variable, class etc). Replaces automatically all other occurences.&lt;/p&gt;

&lt;h1&gt;
  
  
  More hotkeys please
&lt;/h1&gt;

&lt;p&gt;So that’s part one of my favourite IDE hotkeys selection. In next episode of this article I will present few shortcuts mostly related to code generation and dealing with automated tests.&lt;/p&gt;

&lt;p&gt;I hope that by writing this article I will encourage at least one person to go more towards mouseless navigation.&lt;/p&gt;

&lt;p&gt;If you like the form of this article follow me or visit my &lt;a href="https://blog.fill.ly" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sources: &lt;a href="https://blog.mozilla.org/metrics/2011/08/25/do-90-of-people-not-use-ctrlf/" rel="noopener noreferrer"&gt;https://blog.mozilla.org/metrics/2011/08/25/do-90-of-people-not-use-ctrlf/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Can I ask for filling a little survey for web devs?</title>
      <dc:creator>Mirosław Farajewicz</dc:creator>
      <pubDate>Thu, 24 Oct 2019 14:04:52 +0000</pubDate>
      <link>https://dev.to/mfarajewicz/can-i-ask-for-filling-a-little-survey-for-web-devs-2o9e</link>
      <guid>https://dev.to/mfarajewicz/can-i-ask-for-filling-a-little-survey-for-web-devs-2o9e</guid>
      <description>&lt;p&gt;I'm writing an article for my first blog post and would like to know what are standards and practices in other IT companies: &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSeWeWJuGt2Qb05qlCdP5nTnAVJ8DojHvAzEpFvbBO8NcVhKXQ/viewform"&gt;https://docs.google.com/forms/d/e/1FAIpQLSeWeWJuGt2Qb05qlCdP5nTnAVJ8DojHvAzEpFvbBO8NcVhKXQ/viewform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

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