Jekyll2022-07-03T10:14:59+00:00https://blog.gabrielmajeri.ro/feed.xmlGabriel’s BlogWriting never really gets old
Gabriel MajeriHow to share SSH credentials between Windows and a WSL 2 distro2022-01-21T00:00:00+00:002022-01-21T00:00:00+00:00https://blog.gabrielmajeri.ro/2022/01/21/how-to-share-ssh-credentials-between-windows-and-wsl-2<p>The <a href="https://docs.microsoft.com/en-us/windows/wsl/about">Windows Subsystem for Linux</a> is a convenient solution for people who want to use Linux development tools on Windows machines. However, since it’s implemented as an operating system running within a <a href="https://docs.microsoft.com/en-us/windows/wsl/compare-versions">lightweight virtual machine</a> within another operating system, it’s sometimes inconvenient to synchronize your tools and settings between Windows and Linux.</p>
<p>This article describes an elegant solution for keeping in sync your SSH keys and configuration files. It goes through and details some of the answers presented on the <a href="https://superuser.com/q/1183176/585210">corresponding question</a> on the Super User Stack Exchange, before presenting the one I’ve come up with.</p>
<!-- more -->
<h2 id="copying-the-files-over">Copying the files over</h2>
<p>Let’s first look at the “official” solution for sharing your SSH config/keys between Windows and your WSL distro. <a href="https://devblogs.microsoft.com/commandline/sharing-ssh-keys-between-windows-and-wsl-2/">This article</a> on the Microsoft blog gives indications on how to copy the SSH config/keys directory over to Linux and then change the permissions appropriately. This is also <a href="https://superuser.com/a/1183228/585210">the accepted answer</a> on the Super User question mentioned above.</p>
<p>To copy all of your SSH keys/config files from Windows to the WSL distro, you can use <code class="language-plaintext highlighter-rouge">cp</code>:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cp</span> <span class="nt">--recursive</span> /mnt/c/Users/<your Windows username>/.ssh/ ~/
</code></pre></div></div>
<p>And don’t forget to update the corresponding <a href="https://unix.stackexchange.com/a/257648">file permissions</a>:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">chmod </span>700 ~/.ssh/
<span class="nb">chmod </span>600 ~/.ssh/<span class="k">*</span>
</code></pre></div></div>
<p>While this works and is a quick fix, the disadvantage is that <strong>changes to your SSH config or to your keys will not be automatically reflected across OSes</strong>. You’d have to remember to copy the files again or manually make changes in both places each time you need to modify them.</p>
<h2 id="using-mounts">Using mounts</h2>
<p>Keeping in spirit with the programmer’s basic tenet, <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">don’t repeat yourself</a>, a smarter solution is to use <a href="https://en.wikipedia.org/wiki/Mount_(computing)">directory mounts</a> to allow Linux apps to access the corresponding Windows directory directly.</p>
<h3 id="mounting-the-c-drive-with-linux-metadata-support">Mounting the <code class="language-plaintext highlighter-rouge">C:</code> drive with Linux metadata support</h3>
<p>All of your Windows drives are implicitly available in WSL under the <code class="language-plaintext highlighter-rouge">/mnt</code> directory, mounted using the <a href="https://docs.microsoft.com/ro-ro/archive/blogs/wsl/wsl-file-system-support#drvfs">DrvFs driver</a>. If you check out this directory, you will see entries such as <code class="language-plaintext highlighter-rouge">/mnt/c</code>, <code class="language-plaintext highlighter-rouge">/mnt/d</code> etc., which allow you to access the <code class="language-plaintext highlighter-rouge">C:</code>, <code class="language-plaintext highlighter-rouge">D:</code> drives.</p>
<p>You might think it’s enough to create a <a href="https://en.wikipedia.org/wiki/Symbolic_link">symbolic link</a> from <code class="language-plaintext highlighter-rouge">/mnt/c/Users/your-username/.ssh</code> to <code class="language-plaintext highlighter-rouge">~/.ssh</code>, but you’ll run into issues with the permissions. Turns out that, by default, WSL mounts those Windows drives with all permissions given to all users, which is a security risk the SSH client will not accept. Furthermore, any <code class="language-plaintext highlighter-rouge">chmod</code> changes you perform on folders within the mounted drives will be ineffective.</p>
<p>The trick, as described by user @plwalsh88 in <a href="https://superuser.com/a/1676775/585210">this answer</a>, is to first enable <a href="https://devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/">the <code class="language-plaintext highlighter-rouge">metadata</code> option</a> on the DrvFs mounts. This will make the file system able to track and remember the Linux-specific permissions, even though they are set on files from a Windows drive.</p>
<p>To do this, create or update the <code class="language-plaintext highlighter-rouge">/etc/wsl.conf</code> file and change the automounting options to the ones recommended in the answer:</p>
<div class="language-ini highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">[automount]</span>
<span class="py">options</span> <span class="p">=</span> <span class="s">"metadata,umask=022,fmask=111"</span>
</code></pre></div></div>
<p>After saving the modifications, exit the terminal and <a href="https://superuser.com/a/1347725/585210">restart your WSL distro</a>. Then proceed to creating a symlink:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">ln</span> <span class="nt">--symbolic</span> /mnt/c/Users/<your Windows username>/.ssh/ ~/.ssh/
</code></pre></div></div>
<p>And updating the file permissions, just like in the solution described above:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">chmod </span>700 ~/.ssh/
<span class="nb">chmod </span>600 ~/.ssh/<span class="k">*</span>
</code></pre></div></div>
<p>Note, however, that this is a change in the default WSL 2 configuration and might incur some overhead or cause compatibility issues. There’s also a risk that Windows programs editing your might remove the associated Linux permission metadata.</p>
<h3 id="directly-mounting-the-ssh-directory-using-fstab">Directly mounting the <code class="language-plaintext highlighter-rouge">.ssh</code> directory using <code class="language-plaintext highlighter-rouge">fstab</code></h3>
<p>It would be nice if we could make the minimal amount of changes to get the <code class="language-plaintext highlighter-rouge">.ssh</code> directory to be available directly in Linux. There’s a way to do this using the DrvFs file system driver, combined with Linux’s built-in <code class="language-plaintext highlighter-rouge">fstab</code> config file. <sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup></p>
<p><a href="https://www.redhat.com/sysadmin/etc-fstab"><code class="language-plaintext highlighter-rouge">fstab</code></a>, short for file system table, is a configuration file used by the startup process to determine which file systems need to be automatically mounted where. This is how Linux knows where to find your root file system, or the swap partition, and so on.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>C:\Users\<your Windows username>\.ssh\ /home/<your Linux username>/.ssh drvfs rw,noatime,uid=1000,gid=1000,case=off,umask=0077,fmask=0177 0 0
</code></pre></div></div>
<p>The first argument must be the Windows-specific path to the folder you want to mount in WSL. The second argument indicates the target mount location.</p>
<p>The third argument is a bunch of flags, passed directly to DrvFs:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">rw</code> indicates we want to be able to read and write the mounted directory. Change this to <code class="language-plaintext highlighter-rouge">ro</code> if you don’t want to allow Linux tools to edit your SSH config files.</li>
<li><a href="https://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap6sec73.html"><code class="language-plaintext highlighter-rouge">noatime</code></a> disables the updating/tracking of file access times, a feature which isn’t so useful in modern times.</li>
<li>The <code class="language-plaintext highlighter-rouge">uid</code> and <code class="language-plaintext highlighter-rouge">gid</code> flags indicate it should be mounted as being owned by your user’s ID (change these if your user’s ID aren’t <code class="language-plaintext highlighter-rouge">1000</code>, the default on most distros. Find your IDs by running the <code class="language-plaintext highlighter-rouge">id</code> command).</li>
<li>The <code class="language-plaintext highlighter-rouge">case</code> option indicates that newly created subdirectories inside the mounted directory <a href="https://devblogs.microsoft.com/commandline/improved-per-directory-case-sensitivity-support-in-wsl/">shouldn’t be considered case sensitive</a> (which isn’t the case for Windows folders).</li>
<li>The last two mount flags ensure the directory’s permissions are as restricted as possible.</li>
</ul>
<p>The remaining <code class="language-plaintext highlighter-rouge">fstab</code> parameters aren’t relevant for our use case.</p>
<p>This will make Linux automatically mount the indicated folder at the target location whenever the distro is started. You just have to <a href="https://superuser.com/a/1347725/585210">restart your WSL distro</a> and everything will work as expected.</p>
<h2 id="conclusion">Conclusion</h2>
<p>There are usually many ways to achieve the same desired outcome. This post shows that by investigating the problem, understanding how things work and thinking creatively, we can find the solution which best fits our needs.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>Shameless self promotion: this is based <a href="https://superuser.com/a/1700535/585210">my own answer</a> to the Super User question above. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Gabriel MajeriThe Windows Subsystem for Linux is a convenient solution for people who want to use Linux development tools on Windows machines. However, since it’s implemented as an operating system running within a lightweight virtual machine within another operating system, it’s sometimes inconvenient to synchronize your tools and settings between Windows and Linux. This article describes an elegant solution for keeping in sync your SSH keys and configuration files. It goes through and details some of the answers presented on the corresponding question on the Super User Stack Exchange, before presenting the one I’ve come up with.On leadership2021-01-24T00:00:00+00:002021-01-24T00:00:00+00:00https://blog.gabrielmajeri.ro/2021/01/24/on-leadership<p>Leadership is a word thrown around a lot these days, but what is it actually about? Why is it such a desirable skill? I try to review the current understanding of this term and provide some practical advice on how anyone can become a leader.</p>
<!-- more -->
<p>A bit of background: I’ve been the director of the Design & PR department for a year at <a href="https://asmi.ro/">my faculty’s student association</a>, and then switched domains to become director of Fundraising. This article contains a distilled version of what I’ve learned in the past year-and-a-half of leadership positions, with references included where appropriate. All mistakes in the text are mine.</p>
<h2 id="leaders-have-emotional-intelligence">Leaders have emotional intelligence</h2>
<p>I’ll start off the list with the one essential quality good leaders have: <strong>emotional intelligence</strong><sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>. As you might imagine, leadership involves a lot of <strong>interactions</strong> with other people. Both on the small scale, such as smiling to others<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup> or having a friendly chit-chat with your colleagues<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>, or on a larger scale, such as holding a meeting which follows its agenda<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">4</a></sup> and starts and finishes on time<sup id="fnref:5" role="doc-noteref"><a href="#fn:5" class="footnote" rel="footnote">5</a></sup>.</p>
<p>If you want a definitive, scientific source on why emotional intelligence is so important in leading others, I’d recommend <a href="https://hbr.org/2001/12/primal-leadership-the-hidden-driver-of-great-performance">this Harvard Business Review article</a> on “primal leadership”. It describes how the mood of the leaders can ripple down and affect the performance of all their direct <strong>and</strong> indirect subordinates<sup id="fnref:6" role="doc-noteref"><a href="#fn:6" class="footnote" rel="footnote">6</a></sup>.</p>
<h3 id="leaders-are-empathetic">Leaders are empathetic</h3>
<p>One skill which helps leaders (and not only) is <strong>empathy</strong>, the ability to pick up on subtle cues in other people’s speech, appearance or behavior, in order to understand their internal emotional state.</p>
<p>It’s easy to see why such an ability is useful: you need to first understand other people’s mood before you can act to improve it or to collaborate with them. You don’t want to tell somebody who’s had a bad day even more bad news; you could save them for the next day, when they could take them better. And if you feel a colleague’s pretty calm and positive, it might be easier to start a talk about some business objective.</p>
<p>How do you develop your empathy? It takes time and effort and a lot of practice, but a scientifically validated way is <a href="https://www.theatlantic.com/health/archive/2015/07/mindfulness-meditation-empathy-compassion/398867/">through mindfulness meditation</a>. In short: the neural pathways for <em>empathy</em> are pretty much the same as the ones for <em>compassion</em><sup id="fnref:7" role="doc-noteref"><a href="#fn:7" class="footnote" rel="footnote">7</a></sup>. While I don’t know a specific exercise for <em>empathy</em>, there are plenty of meditations for practicing <em>compassion</em>. So by increasing your compassion, you can also improve your empathy.</p>
<h3 id="leaders-are-excellent-listeners">Leaders are excellent listeners</h3>
<p>Another important skill is <strong>being a good listener</strong>. In fact, I’d say paying attention when others are talking is a precondition to being able to empathize with them.</p>
<p>What are the four basic skills of language we are taught in school? Well, it’s reading, writing, listening and speaking. But… how many of us are actually <strong>taught</strong> to <em>listen</em>?</p>
<ul>
<li>You’re given books to read to increase your <strong>reading</strong> comprehension.</li>
<li>You have to write letters and essays to develop your <strong>writing</strong>.</li>
<li>You have to communicate your thoughts to others all the time, through <strong>speaking</strong>.</li>
<li>How often do you practice <strong>listening</strong>?</li>
</ul>
<p><a href="https://www.futurelearn.com/info/courses/mindfulness-life/0/steps/34473">This blog post</a> is a good article to start on improving your active listening skill. I’d also recommend FutureLearn’s <a href="https://www.futurelearn.com/courses/mindfulness-wellbeing-performance">course on mindfulness</a>, as taught by two professors from Monash University.</p>
<h3 id="leaders-are-negotiators">Leaders are negotiators</h3>
<p>Usually, when a conflict arises at the workplace, the involved parties will bring their complaints to their superiors. As a leader, it’s likely you’ll have to mediate both <strong>explicit</strong> conflicts (when two people disagree on a choice and come to you for a decision) as well as <strong>implicit</strong> ones (e.g. those two people who never get along and you have to always calm them down or don’t put them to work together).</p>
<p>There’s a lot written on the art of negotiation, but a very good start which will get you far is to understand and apply <a href="https://www.pon.harvard.edu/daily/negotiation-skills-daily/principled-negotiation-focus-interests-create-value/">principled negotiation</a> (a technique developed by some very smart people at Harvard). And if negotiations fail, there’s a whole field of study called <a href="https://en.wikipedia.org/wiki/Conflict_management">conflict management</a> which tries to mitigate the negative effects of such a scenario.</p>
<p>No matter how you approach it, the other emotional intelligence skills are also essential. Empathy will help you sense the mood of the people involved, and active listening will help you understand each side’s perspective.</p>
<h2 id="leaders-are-informed">Leaders are informed</h2>
<p>Emotional intelligence will get you far in dealing with others, but you’ll also need some rational intelligence to back up your choices and decisions. Simply put, the best leaders are <em>smart</em><sup id="fnref:8" role="doc-noteref"><a href="#fn:8" class="footnote" rel="footnote">8</a></sup>.</p>
<p>As a leader, you’ll have to improve at two things:</p>
<ul>
<li><strong>tactics</strong>: How to best perform the ongoing activities of your work.</li>
<li><strong>strategy</strong>: How to plan your activities over a longer period of time to get better outcomes with less pain.</li>
</ul>
<p>Some concrete examples from my experience as Director of Fundraising:</p>
<ul>
<li>Choosing a timeline for the Fundraising process or selecting which companies we want to invite to our event are <strong>strategic</strong> choices.</li>
<li>Figuring out a way to get an answer from a company who doesn’t respond to our emails is a <strong>tactical</strong> problem.</li>
</ul>
<p>It’s unlikely you’ll be good at these things when you first start out. You’ll quickly develop <strong>tactics</strong> as you or your team tries to do things and fails, and this know-how will help you avoid mistakes in the future. When it comes to <strong>strategy</strong>, you just have to reflect on longer periods of time: after a few months of decision-making, your experience will help you see which were good and which were bad (<strong>feedback</strong> also helps a lot in this case).</p>
<p>Leadership is a skill; it can be learned, developed, and passed on. But you should also increase your <strong>know-how</strong> of the domain you’re active in. For example, when I became the director of the Design & PR department, I barely knew the basics of graphics design and online communication; but by the end, I could train people and offer them advice (I learned from my own mistakes, but also from the mistakes of the other volunteers). Same goes for Fundraising; in time, I learned how to write convincing emails, negotiate deals and prepare contracts, and now I could easily pass on these skills to others.</p>
<h2 id="leaders-have-vision">Leaders have vision</h2>
<h3 id="what-is-vision">What is vision?</h3>
<p>First, let me clarify a bit what I understand through “vision”, since it’s an overloaded term which gets thrown around a lot nowadays.</p>
<p>Whenever you do <em>something</em> in life, you almost always do it in two distinct phases:</p>
<ul>
<li>you think about what you want to do (planning)</li>
<li>you go ahead and do it (execution)</li>
</ul>
<p>Just think about these examples:</p>
<ul>
<li>Maybe you ate an omelet this morning? It means you first thought about having an omelet (perhaps your appetite helped), then you went about actually making it.</li>
<li>Maybe you painted your room? You first thought that you didn’t like the current color and that it would look better in another one, and then you painted it.</li>
</ul>
<p>In both cases, the first step (when you think about what you want to do, and what outcome you want to achieve) is what’s understood by <em>having a vision</em><sup id="fnref:9" role="doc-noteref"><a href="#fn:9" class="footnote" rel="footnote">9</a></sup>.</p>
<p>The word <a href="https://en.wiktionary.org/wiki/vision#English">vision</a> itself has a pretty simple meaning at base: the ability to see. But in this context, vision is about “seeing” how you’d like things to unfold in your imagination.</p>
<h3 id="why-do-leaders-need-a-vision">Why do leaders need a vision?</h3>
<p>Quite simple: because people will often come to you and ask what they’re supposed to do. If you have a clear understanding of how you’d like a project to end up, and what outcomes you want to achieve, then you can share this <em>vision</em> with them and it should be clear <em>how</em> they can actually help you.</p>
<p>Of course, once you know where you want to get, there are usually multiple ways to get there. How you develop and implement the best plan of action is a different topic from leadership (it mostly falls under <a href="https://en.wikipedia.org/wiki/Management">management</a>).</p>
<h3 id="how-to-develop-a-vision">How to develop a vision</h3>
<p>This is quite an open-ended question.</p>
<ul>
<li>If you’ve ever dreamt of something, then you had a <em>vision</em> (even if for a brief moment).</li>
<li>If you ever got an idea of how you can improve a product or a project, you had <em>vision</em>.</li>
<li>If you thought you could improve society with a simple change, you had <em>vision</em>.</li>
</ul>
<p>I find it easier to sketch my vision on the long term by <strong>reviewing</strong> what I’m currently doing, thinking about <strong>why</strong> am I doing what I’m doing (e.g. why am I working for this organization or that one, what’s its mission), what my <strong>current objectives and priorities</strong> are, etc. Reflective thought really helps!</p>
<p>Research studies have also shown that <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7395604/">mindfulness helps foster creativity</a>.</p>
<h2 id="conclusions">Conclusions</h2>
<p><strong>You don’t need anything to start being a leader.</strong> When I got elected as the department director for Design & PR, it was quite an exciting but also scary moment. It’s normal to experience <a href="https://en.wikipedia.org/wiki/Impostor_syndrome">the impostor syndrome</a> in such a situation, your mind filled with thoughts that “you’re not good enough” and that “you’ll fail”. The best thing to do is to <strong>acknowledge</strong> such thoughts and then move on to solving problems as they appear. Think thoughts such as <em>“it doesn’t matter if I’m the worst ever at my job”</em> or <em>“I’m doing my best”</em><sup id="fnref:10" role="doc-noteref"><a href="#fn:10" class="footnote" rel="footnote">10</a></sup>.</p>
<p>One common feedback I received is that I didn’t smile at all during the first meetings I held; people felt like I didn’t really like what I was doing or that I was forced to be there. Or I’ve been told I spoke like a robot, with a monotonous tone. I’ve since worked on smiling more often and improved my non-verbal communication skills. It wasn’t the end of my career, it was just a minor setback I’ve since resolved.</p>
<p>I hope this article has been helpful and provided you with some actionable steps on how to improve your leadership skills. It will be a long journey, but it’s up to you to make it pleasant. And remember, the world wants you to succeed; most people will forgive your past mistakes, and will be very happy to see you improve 😁</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>For those unfamiliar with the term, you could get an overview by skimming <a href="https://en.wikipedia.org/wiki/Emotional_intelligence">the corresponding Wikipedia article</a>, although I’d recommend reading Daniel Goleman’s <a href="https://www.goodreads.com/book/show/13532420-emotional-intelligence">book on this subject</a>. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>Besides the <a href="https://www.nbcnews.com/better/health/smiling-can-trick-your-brain-happiness-boost-your-health-ncna822591">advantages for your own mental health</a>, smiling also improves how others feel and react to what you’re saying or doing. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>These conversations help people bond and discover new things about one another; but it’s really important to <em>listen mindfully</em> (see the sections below) if you want to get the most out of your social interactions. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p>I don’t generally like meetings. You have to disrupt everybody’s schedule for some underspecified reason, and they’re usually big time wasters. That being said, good communication is <em>essential</em> to a project’s and organization’s success. It’s just that you really need to think out and plan a meeting to make it worth the time. <a href="#fnref:4" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:5" role="doc-endnote">
<p>Sticking to the time allocated for an activity is more within the discipline of time management; I will not cover it here, since it deserves an article on its own. <a href="#fnref:5" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:6" role="doc-endnote">
<p>I learned about this concept, and a few other useful tips and tricks on how to be a better leader, from the <a href="https://www.coursera.org/learn/emotional-intelligence-leadership">Inspiring Leadership through Emotional Intelligence course</a>, available for free on Coursera. <a href="#fnref:6" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:7" role="doc-endnote">
<p>I’ve first heard about this connection from Dr. Rick Hanson’s book <a href="https://www.rickhanson.net/books/buddhas-brain/">Buddha’s Brain</a>. <a href="#fnref:7" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:8" role="doc-endnote">
<p>Don’t worry if you don’t consider yourself an intelligent person - the only thing that matters is to be open to learning new things. And if you don’t like learning, then why are you reading this article 🤔? <a href="#fnref:8" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:9" role="doc-endnote">
<p>For more on this topic I can recommend Stephen Covey’s <a href="https://www.franklincovey.com/the-7-habits/">The 7 Habits of Highly Effective People</a>. The second habit, “Begin With the End in Mind”, is precisely about how to start with a vision and proceed from there. <a href="#fnref:9" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:10" role="doc-endnote">
<p>Such thought patterns arise out of <a href="https://self-compassion.org/">self-compassion</a>, another thing you can develop through meditation. <a href="#fnref:10" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Gabriel MajeriLeadership is a word thrown around a lot these days, but what is it actually about? Why is it such a desirable skill? I try to review the current understanding of this term and provide some practical advice on how anyone can become a leader.Adding symbol stripping to Cargo2020-05-31T00:00:00+00:002020-05-31T00:00:00+00:00https://blog.gabrielmajeri.ro/2020/05/31/adding-symbol-stripping-to-cargo<p>My pull request adding a new Cargo option to strip symbols from binaries was recently merged. I wanted to share the story of how this contribution came to be, as well as provide some tips for prospective contributors.</p>
<!-- more -->
<h2 id="find-something-to-work-on">Find something to work on</h2>
<p>I was browsing the Cargo issue tracker, looking through issues from <a href="https://github.com/rust-lang/cargo/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc">oldest to newest</a>. I picked up this triaging strategy from contributing to <a href="https://github.com/gfx-rs/gfx/">gfx-rs</a>.</p>
<p>Older issues could be classified as:</p>
<ul>
<li><strong>outdated/no longer applicable</strong>: leave a comment asking the maintainers if the issue is still relevant or should be closed.</li>
<li><strong>not very clear</strong>: if the issue description is terse, or there’s not a lot of discussion around it, or you’re just not completely sure what the issue is about, it’s best to leave a comment asking for clarifications.</li>
<li><strong>lacks an actionable item</strong>: this happens especially when you’re not very familiar with the project or the concepts involved, you could leave a comment asking what exactly should be done. Someone might even take some time to give you step-by-step instructions.</li>
<li><strong>has a proposed solution</strong>: these are the best when just starting out. They might not be labeled as <em>good first issue</em>, but they shouldn’t be too hard to make some progress on.</li>
</ul>
<p>The last scenario was the case of the symbol stripping issue I started to work on. Somebody left a <a href="https://github.com/rust-lang/cargo/issues/3483#issuecomment-431209957">quick workaround</a> in a comment: just add the <code class="language-plaintext highlighter-rouge">-s</code> flag to the linker. This works only on platforms which use <code class="language-plaintext highlighter-rouge">gcc</code> for linking, but it’s a start.</p>
<h2 id="get-ready">Get ready</h2>
<p>Before you can start working on the issue you picked, you need to get a local development environment set up, then compile and run the tests. Cargo’s <a href="https://github.com/rust-lang/cargo/">README</a> is a good starting point. They also have some <a href="https://github.com/rust-lang/cargo/blob/master/CONTRIBUTING.md">contributing instructions</a>, and a high-level <a href="https://github.com/rust-lang/cargo/blob/master/ARCHITECTURE.md">overview</a> of the code.</p>
<h2 id="first-attempt">First attempt</h2>
<p>I wanted to add support for a <code class="language-plaintext highlighter-rouge">strip = true</code> option in <code class="language-plaintext highlighter-rouge">Cargo.toml</code>, which would pass the hard-coded <code class="language-plaintext highlighter-rouge">-s</code> flag to the linker. With the help of <a href="https://github.com/BurntSushi/ripgrep">ripgrep</a>, I was able to find the structures for parsing and storing the Toml data, and even some lines similar to what I needed. A few copy & pastes later, I had a pull request <a href="https://github.com/rust-lang/cargo/pull/8191">submitted</a>.</p>
<p><a href="https://github.com/alexcrichton">Alex Crichton</a> helpfully <a href="https://github.com/rust-lang/cargo/pull/8191#issuecomment-622427985">suggested</a> that support should be first added as a compiler flag to <code class="language-plaintext highlighter-rouge">rustc</code>, since it has more information about the target and the linker. Cargo could then just pass the right flag.</p>
<p>So that’s what I did. I opened an <a href="https://github.com/rust-lang/rust/issues/71757">issue</a> on <a href="https://github.com/rust-lang/rust/">rust-lang/rust</a> to discuss this with the compiler team.</p>
<h2 id="help-from-others">Help from others</h2>
<p>At this point, I was getting ready to clone and build the Rust compiler locally. Procrastinating for a few days meant this feature <a href="https://github.com/rust-lang/rust/pull/71825">was implemented</a> by <a href="https://github.com/contrun">contrun</a> (thanks!).</p>
<p>Important point to remember when trying to solve an issue: you’re not alone! There are plenty of maintainers, reviewers and contributors, and each of them can help you in a different way.</p>
<h2 id="second-attempt">Second attempt</h2>
<p>After a nightly with the compiler changes got released, I brushed off my old code and opened a <a href="https://github.com/rust-lang/cargo/pull/8246">new pull request</a>. With helpful feedback from <a href="https://github.com/josephlr">Joseph Richey</a> and Alex Crichton, I fixed a bug and added a few tests. The commits were soon merged into <code class="language-plaintext highlighter-rouge">master</code>!</p>
<p>I’ve also <a href="https://github.com/rust-lang/cargo/issues/3483#issuecomment-631395566">added a comment</a> describing the fix back on the original issue, in case somebody stumbles across it on Google and wants to know how to strip symbols from their binaries.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Wikipedia puts it best: <a href="https://en.wikipedia.org/wiki/Wikipedia:Be_bold">be bold</a>! Don’t be afraid to contribute to open source projects, no matter how complicated they might seem. Especially when you use such an empowering language as Rust. And there are always people who can point you in the right direction if anything goes wrong.</p>
<p>Big or small, every contribution is appreciated 🙂 Small improvements compound over time, leading to great software.</p>Gabriel MajeriMy pull request adding a new Cargo option to strip symbols from binaries was recently merged. I wanted to share the story of how this contribution came to be, as well as provide some tips for prospective contributors.Think before you code2020-05-10T00:00:00+00:002020-05-10T00:00:00+00:00https://blog.gabrielmajeri.ro/2020/05/10/think-before-you-code<p>I used to be the biggest opponent of designing your app ahead-of-time. I was a firm believer the only right way to build great software was to get on the keyboard and just start writing it. As Linus Torvalds put it, “Talk is cheap. Show me the code”.<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup></p>
<!-- more -->
<p>It seemed to me that a lot of organisations where wasting their time with endless user stories, kanban boards and pointless requirements. I could’ve implemented half the features in the time it takes them to prepare their next Agile sprint.<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup></p>
<p>I was going through the <a href="https://www.coursera.org/learn/learning-how-to-learn">Learning How To Learn</a> free online course when suddenly things started to click. I began to see the huge importance of thinking ahead and designing your product before rushing in to code it.</p>
<p>In the course they introduce the concepts of a <em>diffuse</em> mode, where we are creative and easily create new connections, and a <em>focused</em> mode, activated when we need to solve a problem or draw on already known concepts and patterns.</p>
<p>Here are some things you definitely <strong>don’t</strong> want to do while coding:</p>
<ul>
<li>
<p>Don’t choose data structures while coding. Prefer thinking about your data flow first. If you think beforehand what data you need and how you will store and process it, you will avoid hassle later on. You don’t want to store all that important data in JSON files when you needed a relational database, and you don’t want to fire up MongoDB to store two or three values.</p>
</li>
<li>
<p>Don’t pick frameworks or libraries while coding. When in problem solving mode, you focus on what you perceive gets your problem solved fastest, even if you could be more creative and come with a better solution.</p>
</li>
</ul>
<p>A lot of great programmers recommend first envisioning what your code should do (how its API should be) and then flushing out the required functions.<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup></p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>You can find the <a href="https://www.goodreads.com/quotes/437173-talk-is-cheap-show-me-the-code">quote</a> on GoodReads <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>Paul Graham <a href="http://paulgraham.com/wealth.html">wrote</a> about this before; it’s of no surprise that small teams or individual hackers are able to code up a product much faster than a big corporation. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>Also known as <a href="https://www.pcmag.com/encyclopedia/term/top-down-programming">top-down programming</a> <a href="#fnref:3" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Gabriel MajeriI used to be the biggest opponent of designing your app ahead-of-time. I was a firm believer the only right way to build great software was to get on the keyboard and just start writing it. As Linus Torvalds put it, “Talk is cheap. Show me the code”.1 You can find the quote on GoodReads ↩The advantages of being calm2019-11-16T00:00:00+00:002019-11-16T00:00:00+00:00https://blog.gabrielmajeri.ro/2019/11/16/the-advantages-of-being-calm<p>The modern world provides us with the information we need at our fingertips, and we are more connected than ever. But our busy schedules, constant notifications and the <a href="https://en.wikipedia.org/wiki/Fear_of_missing_out">fear of missing</a> out brought along <strong>stress</strong>. This eats us from inside, and the worst part is we realize how affected we are by it when it’s too late, after having already lost a lot of time.</p>
<p>I wrote this post to reflect on how stress was affecting me and how I learned to be more carefree and enjoy life. I hope that others will draw upon my experiences and learn not to worry so much.</p>
<!-- more -->
<h2 id="the-manifestations-of-stress">The Manifestations of Stress</h2>
<p>The first part to solving any problem is admitting it exists. Psychological stress manifests itself in many forms, but it is characterized by you <strong>being worried about future events</strong> or <strong>regretting past decisions</strong>, over which you have no power.</p>
<p>If you think that you have too much work to do today and you’ll never finish it, you are certain you will fail in your current endeavor, or you feel you’re too busy and don’t have time for yourself, then you already are in a state of worry.</p>
<p>And being worried inevitably slows down your progress in solving all of these issues.</p>
<h2 id="the-energy-consumption-of-stress">The Energy Consumption of Stress</h2>
<p>What started me off in the quest for understanding stress was tiredness.</p>
<p>I might <strong>sleep for 6 hours</strong>. I wake up a bit tired and <strong>in a few hours</strong> I will be falling asleep with my eyes wide open. Then I <strong>sleep for 10 hours</strong>. I feel much more energetic when I wake up but <strong>after about the same amount of time</strong> I will be completely drained of energy.</p>
<p>To make an analogy for the problem, imagine charging your phone’s battery to 30% or 80% respectively, and then observing <strong>your battery lasts just as long</strong> in both cases. I do not deny it’s <em>healthier for the battery to be charged more fully</em>, but if you end up draining it really quickly maybe you should investigate whether there is a power leak.</p>
<p>Let’s look at psychologist’s Jordan Peterson’s definition of stress, as given in his book <em>12 Rules for Life</em><sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>:</p>
<blockquote>
<p>Unfortunately, that physical hyper-response, that constant alertness, <strong>burns up a lot of precious energy and physical resources</strong>. This response is really what everyone calls <strong>stress</strong> […]</p>
</blockquote>
<p>(emphasis mine)</p>
<p>While worry seems to exist purely in your mind, the physical consequences are undeniable. It can negatively affect your health and shorten your life. Not to mention that being stressed increases your chance of making silly mistakes or omitting important details.</p>
<h2 id="stop-worrying-start-living">Stop worrying, start living</h2>
<p>So far I’ve only looked at the downsides of being stressed, but I haven’t talked about how one can free themselves from its shackles. The truth is there is no easy solution or magical medicine; you have to actively fight it in your brain.</p>
<p>Let me describe my metamorphosis into a much calmer person. A few weeks ago I reached a point where my busy schedule and pressure from all the accumulated work made me feel like I was going to fail. In fact, at that moment everything was going quite well, and failure only existed in my mind. I stopped thinking about messing up, and just <strong>focused on doing the best I could do in that very moment</strong>. Nothing bad happened, and everything sorted itself out in time.</p>
<p>This way of reasoning will help you if you are nervous about a job interview, even though you prepared for it; or a hard exam, even though you studied a lot for it. The world isn’t going to end, no matter the outcome of that stressing event. You should simply concentrate on doing your best.</p>
<p>Dale Carnegie mentions in his book <em>How to Stop Worrying and Start Living</em>: focus on <strong>living today to the best of your ability, without worrying about how tomorrow will be or how yesterday was</strong>. Instead of thinking about how many tasks you have on your to-do list, try to pick one of them (preferably the one you can finish the fastest) and do it. The positive feedback loop that comes from solving that task will give you the motivation needed to solve the next one, and this resonance will push you through the day.</p>
<p>Various religions and philosophies around the world also debated this issue.</p>
<p>Buddhism tells us that the desire of physical or spiritual things is the source of all unhappiness. Give up on wanting stuff, and you will achieve blissfulness.</p>
<p>As part of meditation, some people practice <strong>mindfulness</strong>, when they try to pay attention to what they are currently feeling. Mindfulness isn’t just about observing all your thoughts as they come and go. It’s about consciously <strong>giving up on them</strong>. It’s about realizing that you will feel various emotions throughout your life, and that’s fine.</p>
<p>Taoism encourages us to adopt the <a href="https://en.wikipedia.org/wiki/Wu_wei">wu wei</a>, action through inaction, the path of least stress<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>. It tells us to work on improving what we can change, and not worry about what we cannot.</p>
<p>Imagine that life is like a river, and you want to swim across.</p>
<ul>
<li>Those that flow freely with the river will be taken downstream, and never reach the other side.</li>
<li>Those that swim too hard against the current will tire themselves out and eventually drown.</li>
<li>Only those that strike a balance, who use just enough effort, will reach the other side.</li>
</ul>
<p>Taoism teaches us that <strong>balance in all our actions</strong> is the only solution to surviving our agitated lives.</p>
<h2 id="closing-words">Closing words</h2>
<p>I hope my experience with stress can be a lesson for other people. It’s amazing how much better you can live when you begin to understand yourself. From a programmer’s viewpoint: <em>you need to understand the problem before you can start debugging it</em>. And when it comes to worry, the moment you ask yourself why you are worried is the moment you realize there is no reason to fret.</p>
<p>Remember: <strong>the past is the past</strong>. <strong>The future has yet to come</strong>. Focus on what you can change and improve in your life. And what you can’t change shouldn’t worry you.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>Although the book is not specifically on this subject, the first chapter does deal with the issue of stress, including the chemical changes happening in your brain <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p><a href="https://www.youtube.com/watch?v=JtGtqmC5wU4">This video</a> provides a simple introduction to taoism with easy-to-understand analogies. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Gabriel MajeriThe modern world provides us with the information we need at our fingertips, and we are more connected than ever. But our busy schedules, constant notifications and the fear of missing out brought along stress. This eats us from inside, and the worst part is we realize how affected we are by it when it’s too late, after having already lost a lot of time. I wrote this post to reflect on how stress was affecting me and how I learned to be more carefree and enjoy life. I hope that others will draw upon my experiences and learn not to worry so much.How to become an open source developer2019-09-29T00:00:00+00:002019-09-29T00:00:00+00:00https://blog.gabrielmajeri.ro/2019/09/29/how-to-become-an-open-source-developer<p>Do you want to be an open source software developer? To send <em>pull requests</em> and <em>solve issues</em> or <em>review code</em> on <a href="https://github.com/">GitHub</a>? Are you looking to add some <em>practical experience</em> to your CV while writing code for the benefit of all? Then I can help you get started. And the best part about open source development is <strong>the community you become a part of</strong>.</p>
<p>This article describes how to choose the projects you contribute to, how to start contributing and how to become an active developer.</p>
<!-- more -->
<p>I’ve added links in this article to most technologies and keywords I mention. In your learning journey, if you ever encounter something you don’t understand you <strong>shouldn’t be afraid to use Google or StackOverflow</strong> to learn more about it.</p>
<h2 id="how-to-choose-a-project">How to Choose a Project</h2>
<p>Once you’ve decided you are ready to contribute to an open source project, you should decide on which project to contribute to and what issue to fix. My most important point is to <strong>choose a project you are really passionate about</strong>.</p>
<p>Don’t worry if <strong>you are not familiar with the programming language or technologies involved</strong> in the project. You’re not expected to know all the frameworks and languages mentioned in a tag line. But try picking a project you find <em>cool</em> to start with. If you care about good looking websites developed with clean code, try <strong>contributing to <a href="https://github.com/facebook/react">React</a></strong>, a project which uses <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript">modern JavaScript</a> and <a href="https://www.freecodecamp.org/news/functional-reactive-programming-frp-imperative-vs-declarative-vs-reactive-style-84878272c77f/">functional reactive programming</a>. Or how about <strong>contributing to <a href="https://github.com/servo/servo">Servo</a></strong>, the new and upcoming browser engine behind <a href="https://www.mozilla.org/en-US/firefox/">Firefox</a>, written in <a href="https://www.rust-lang.org/">Rust</a>.</p>
<p>That being said, you should balance your passion for an idea with the difficulty associated with contributing to the project. <strong>The maintainers should make it easy to contribute</strong>. If a certain project makes you feel unwelcome, then avoid it. For example, old-school open source projects which still use <a href="https://www.sback.it/publications/msr2013.pdf">mailing lists</a> and <a href="https://git.zx2c4.com/cgit/">cgit</a> instead of moving to something like <a href="https://about.gitlab.com/">GitLab</a> or <a href="https://www.phacility.com/">Phabricator</a>, deserve the lack of new/young contributors they have. Times change, and while I understand the supporters of mailing lists, <strong>I prefer having an interface</strong> to send my pull requests instead of preparing and mailing patches. I did <a href="https://lists.freedesktop.org/archives/mesa-dev/2018-August/203644.html">once</a> send a contribution to a mailing list and the experience sucks. Gmail with 2FA isn’t very easy to configure as a Git mail client either.</p>
<h2 id="getting-your-feet-wet">Getting Your Feet Wet</h2>
<p>Start by <strong>fetching the project’s source code</strong>. Nowadays almost everybody uses <a href="https://www.git-scm.com/">Git</a>, but if they use something like <a href="https://subversion.apache.org/">Subversion</a> or <a href="https://www.mercurial-scm.org/">Mercurial</a> it should be just as simple. It goes without saying that a project lacking any sort of version control is a <strong>big red flag</strong>. If the project is hosted on some platform like Bitbucket or GitHub, you should also <strong>fork the original repository</strong> and clone your fork locally. This implies getting a bit acquainted with the Git workflow, including things like <em>commits</em>, <em>branches</em> and <em>merging</em>. This is a whole subject in itself, but the <a href="https://git-scm.com/book/ro/v1">Pro Git book</a> or this <a href="https://github.com/firstcontributions/first-contributions">first contributions guide</a> will help get you on your feet. Sadly, there’s no getting around not using Git; familiarity with a version control system is a required skill, just like the ability to work in a team.</p>
<p>Then you should try <strong>building the code</strong> (if it’s written in a compiled language) and <strong>run all the tests</strong>. The project you’re working on has automated tests, doesn’t it? Most repos you’ll find have a <code class="language-plaintext highlighter-rouge">CONTRIBUTING.md</code> (or similar) file which describes the steps you need to take, and you can always raise an issue with the maintainers if building doesn’t work (it’s their responsibility to keep the code compilable, and if anything goes wrong they’re probably more familiar with the build system than you are).</p>
<p>And the final step to actually contributing is to <strong>pick an issue</strong> and fix it. It’s better not to send random pull requests, but to fix an existing bug or implement a much-requested feature. As for how to actually solve the issue, <strong>read the issue’s description</strong>. But if you seem to be making no progress, try asking for clearer instructions on the issue page or asking on a project’s chat. You’ll always find someone more experienced who can help you when you’re stuck.</p>
<p>In parallel with all the above steps you should try becoming familiar with a project’s layout. <strong>Code is the single source of truth</strong> for a computer program, so you have no excuse not to understand it. Reading all of the source files of a big project would take ages and not help you much; focus on determining where are the files you need to modify to fix the issue, as well as where to add new tests.</p>
<p>After you’re done, write a nice commit description and send the pull request to the original project. You will probably undergo <strong>your first code review</strong>. Do not worry too much about negative comments or feel personally attacked; feedback is important and you should see this as an opportunity to improve the quality of your code.</p>
<h2 id="become-a-part-of-the-community">Become a Part of the Community</h2>
<p>Once your first PR gets accepted, you should <em>already</em> start thinking about your second contribution. Undoubtedly you have a busy schedule and work to do, but you’ll see that <strong>putting aside a few minutes every day</strong> or every few days can nevertheless make you pretty active.</p>
<p>To avoid burnout, try to <strong>diversify your contributions</strong>. Don’t get stuck in a single tech stack or one organization. Find what dependencies a project has and contribute to those. If you’ve only sent improvements to <strong>libraries</strong>, try finding an open source <strong>application</strong> to work on. You should also try <strong>writing documentation</strong>, <strong>helping new users</strong> by being active on a project’s <a href="https://discordapp.com/">Discord</a>/<a href="https://zulipchat.com/">Zulip</a> channel and so on. The possibilities for making a positive change are <em>endless</em>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I hope that the last few paragraphs gave you an idea of what being an OSS developer implies. It’s quite different from the software development process taking place in most companies, but seeing how your contributions fit into the larger picture to build a wonderful project is the best feeling in the world.</p>
<p>I’ll close by recalling Wikipedia’s <a href="https://en.wikipedia.org/wiki/Wikipedia:Be_bold">advice for new editors</a>: <strong>be bold</strong>. Just because it’s the first time you’re contributing to a certain project (or the first time in general), you shouldn’t be afraid to tackle more difficult issues such as adding new features or fixing crashes. Adding tests or improving the documentation is appreciated, but you have to gain the courage to take on more challenging tasks as well.</p>Gabriel MajeriDo you want to be an open source software developer? To send pull requests and solve issues or review code on GitHub? Are you looking to add some practical experience to your CV while writing code for the benefit of all? Then I can help you get started. And the best part about open source development is the community you become a part of. This article describes how to choose the projects you contribute to, how to start contributing and how to become an active developer.How to learn Japanese online2019-09-22T00:00:00+00:002019-09-22T00:00:00+00:00https://blog.gabrielmajeri.ro/2019/09/22/how-to-learn-japanese-online<p>日本語はすごい!This blog post describes the freely-available resources I consider to be the most helpful when learning Japanese. Each site comes with a description, detailing how long should you stick with it and when it’s the time to move to the next one.</p>
<!-- more -->
<p>While I’m certain that taking Japanese lessons has its advantages, I believe with a bit of time you can learn everything online. And unlike those boring textbooks you might have used for learning Japanese offline, these sites have on practical and interactive content. They teach you <em>real Japanese</em>, describing when and how to use both formal and informal forms.</p>
<h2 id="online-resources">Online Resources</h2>
<p>The entries in this list are sorted by the order in which they will become helpful to you. You are nevertheless welcome to explore them all from the start.</p>
<h3 id="jisho">Jisho</h3>
<p><em>Jisho</em> (辞書) means <em>dictionary</em> in Japanese. <a href="https://jisho.org/">Jisho</a> is also the best free online dictionary there is for Japanese. The first thing you should do when you encounter a sentence you don’t understand is to look up the individual words on Jisho. Even if it’s spoken language, you can break it into components and search them phonetically. Alternatively, if you have some unknown kanji characters you can search them based on the component <a href="https://en.wikipedia.org/wiki/List_of_kanji_radicals_by_stroke_count">radicals</a> or <a href="https://jisho.org/#handwriting">draw them</a> (it helps if you learn about <a href="https://en.wikipedia.org/wiki/Stroke_order#General_guidelines">stroking order</a> first to get better results).</p>
<p>Some features to look out for in Jisho:</p>
<ul>
<li>
<p>Clicking on any kanji opens <a href="https://jisho.org/search/%E4%BA%BA%20%23kanji">a separate page</a> with a longer description, kun’- and on’yomi readings, and <strong>animated handwriting instructions</strong>.</p>
</li>
<li>
<p>If you search for any word, on the sidebar you will see <strong>example sentences</strong> provided by the <a href="https://tatoeba.org/eng/">Tatoeba</a> project.</p>
</li>
</ul>
<p>While looking words up in a dictionary is fun, you’ll probably want a more structured way to learn and track your progress, which leads us to the next resource.</p>
<h3 id="duolingo">Duolingo</h3>
<p>For those of us living under a rock, <a href="https://www.duolingo.com/">Duolingo</a> is the leading online platform for learning foreign languages. It’s also free, forever (albeit ad supported). They provide their own curriculum where each individual lesson covers one topic, while teaching you some new words or some new grammar. They don’t have any special system for practicing hiragana/katakana, save for some illustrated <a href="https://tinycards.duolingo.com/decks/v9Cv1Ky/hiragana-sound-mnemonics">flashcards</a>. These afre <strong>pretty good</strong> though, since the images on the cards are a good <a href="https://en.wikipedia.org/wiki/Mnemonic">mnemonic</a>.</p>
<p>The primary advantage of Duolingo is that it provides <strong>a way to measure your progress</strong>. Other resources might provide a few “exercises” after the main article, but they’re usually trivial or have the answer written <em>right next to the question</em>. Since we only learn from our mistakes, we need a grading system to tell us when we’re wrong. Annoying as it is, you have to learn to work together with that green owl 🦉.</p>
<p><strong>Don’t get stuck too much on Duolingo</strong>. You will keep coming back to it to, but it fails short on teaching you how to handle more complicated real-world situations. The most practical sentence Duolingo will teach you is “I want sushi” or “Where is the bathroom?”, which brings us to the next resource…</p>
<h3 id="that-japanese-man-yuta">That Japanese Man, Yuta</h3>
<p>When you learn a new language, even while making good progress you’d be surprised by how many simple sentences you <em>don’t</em> know how to say. You’ll see people saying “いいね” in YouTube comments and won’t know this is the equivalent of “like”. You’ll find that you don’t know how to say “you’re nice” to some other person. That’s because the examples on the previously mentioned sites are artificial, usually created to be simple and showcase one aspect of the language.</p>
<p>The best way to learn idiomatic Japanese phrases is from <a href="http://www.yutaaoki.com/blog/about-me">Yuta Aoki</a>. He’s a blogger, writter and also has a <a href="https://www.youtube.com/user/YPlusShow">YouTube channel</a> where he talks to random Japanese people about various topics. His videos are how I first found out about him. He offers a free Japanese course you can sign up for (he’ll email you new videos weekly).</p>
<p>He also offers some paid courses, but I can’t talk about their quality; his free lessons are good enough for me. Sadly, while he still regularly produces and sends out videos, his videos are <strong>short</strong> (about 5 minutes) and he talks about <strong>only 4–5 words</strong> in each of them. There’s just too much of Japanese to cover and Yuta is falling behind. But who knows, perhaps by the time you’re reading this, there will be a lot of new content.</p>
<p>You’ll know you’re ready to move on to the next resource when you want to learn more about Japanese grammar or when you’ve exhausted Yuta’s content.</p>
<h3 id="tae-kims-guide">Tae Kim’s Guide</h3>
<p>Once you start getting a feel for how to put together 私 and は you’ll want to understand why you did that and how all these nouns and particles and verbs fall in together. This is where <a href="http://www.guidetojapanese.org/learn/">Tae Kim’s Complete Guide to Learning Japanese</a> comes in.</p>
<p>Don’t worry if you don’t like grammar — this is not one of those boring books on all possible uses of Japanese particles. It is filled with <strong>practical examples</strong>, and focuses on understanding <em>why</em> you would use a certain word form over another given some context. Since it’s so well structured I also use it as a <strong>quick reference</strong>.</p>
<h3 id="kanjidamage">KANJIDAMAGE</h3>
<p>The most honest and straightforward site, which does a terrific job of helping you learn kanji, is <a href="http://www.kanjidamage.com/">KANJIDAMAGE</a>. I’m going to let their description do the work: it says that their site is the place <em>where you can learn 1,700 kanji using Yo Mama jokes</em>. WaniKani can’t beat that.</p>
<p>I can’t say I’ve been learning a lot of kanji lately (mostly out of personal laziness), but what I did learn on KANJIDAMAGE stuck with me. They have articles <em>how to learn kanji more efficiently</em>. They don’t only provide you with mnemonics, but they also break down the meanings of the kanji. And to top it off, it’s all free.</p>
<h3 id="nihongo-e-na">Nihongo-e-na</h3>
<p>At this point I will also mention the <a href="https://nihongo-e-na.com/eng/">NIHONGO eな</a> portal. It contains links to many free online resources. I’ve already listed a lot of good sites for learning Japanese <em>in general</em>, but if there is some specific category you want a tool for (e.g. vocabulary, listening), you should check this site out.</p>
<h2 id="general-tips">General Tips</h2>
<p>Here are some tips I found out on my own and would’ve loved to know when I started my journey.</p>
<h3 id="dont-get-stuck-in-writing-systems">Don’t Get Stuck in Writing Systems</h3>
<p>Ask anyone who tried to learn Japanese and gave up and they’ll undoubtedly complain about how the Japanese have three different writing systems: hiragana (ひらがな), katakana (カタカナ) and kanji (漢字); and how the last one is the hardest, since you have to learn thousands of complicated Chinese characters to be able to read books or signposts in Japanese.</p>
<p>The one thing which slowed me down at the start (and actually made me give up a few times) was that I wanted to perfectly know hiragana and katakana and perhaps a few kanji before starting to learn any vocabulary / grammar. This approach is wrong; you should combine learning to read Japanese characters with learning words, basic grammar rules and pronounciation.</p>
<p>Learning to read and write Japanese is a long journey, yet very rewarding at all times. Begin by at least learning all the vowels. Start reading <a href="https://crunchynihongo.com/hiragana-reading-practice/">simple stories written in hiragana</a>, even if you don’t understand all of the kana. Practice writing on a sheet of paper or use a <a href="https://play.google.com/store/apps/details?id=com.jernung.writeit.jpn&hl=en_US">mobile app</a>.</p>
<p>Kanji have multiple readings, multiple meanings, and it’s the especially simple-looking ones that have many subtleties. There’s no need to learn all the possible meanings of 本. If you know how it’s written and pronounced in 日本<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>, then that’s a start. You can always come back later and expand on the meanings of known kanji.</p>
<h3 id="consume-japanese-culture">Consume Japanese Culture</h3>
<p>For many people Japanese culture is the reason they started learning Japanese. But I think there are plenty of other motives to learn Japanese, if for no other reason that it’s a beautiful language (yet difficult to learn<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>). Here’s a big reveal: I didn’t watch anime when I was younger. Shameful, I know, but I’m catching up on them now.</p>
<p>If you’re into them, reading manga or watching anime is one good way of exposing yourself to a lot of (usually informal) Japanese. Just be careful what sort of words you learn from them. Remember, you <em>don’t</em> want to sound like an annoying teenager or use foul words.</p>
<p>I also recommend listening to Japanese music: <a href="https://www.youtube.com/watch?v=4t__wczfpRI&list=PLTGXZPSNXuQF0TugWpvhWbOAAKmyl4xVQ">Naruto openings</a>, <a href="#tae-kims-guide">Tae Kim</a>’s <a href="https://www.youtube.com/watch?list=PLQvfmNZqUFLKcvF8-BfyLYLqk0dgibePo&v=y1PVllv8cCE">featured music</a>, or if you’re feeling adventurous, YouTube’s <a href="https://charts.youtube.com/charts/TrendingVideos/jp">Japan trending music videos</a>.</p>
<p>But it’s not enough to lazily watch TV to learn a language. I am asking you to actively and critically analyze the Japanese content you are watching. Try to write down unknown words you hear in animes phonetically and then look them up in a dictionary. Write down and remember song lyrics, then interpret and translate them into English.</p>
<h2 id="conclusion">Conclusion</h2>
<p>It’s the journey that counts — not the destination. When it comes to learning foreign languages, there’s <em>no final destination</em> anyway, just deeper and deeper understandings of the language.</p>
<p>Do you just want to say “hello” to some Japanese friends? Do you want to read manga? Do you want to live in Japan? Do you want to write <a href="https://en.wikipedia.org/wiki/Haiku">haikus</a> and read <a href="https://en.wikipedia.org/wiki/The_Tale_of_Genji">The Tale of Genji</a>? Do you want to teach Japanese as a distinguished teacher at some university?</p>
<p>No matter your objective, if you’re willing to, <strong>you can learn Japanese</strong>. And remember, <a href="https://en.wiktionary.org/wiki/a_journey_of_a_thousand_miles_begins_with_a_single_step">a journey of a thousand miles begins with a single step</a>.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>pronounced <em>Nihon</em> or <em>Nippon</em>, meaning <em>Japan</em> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>according to the <a href="https://www.effectivelanguagelearning.com/language-guide/language-difficulty">Language Difficulty Ranking</a>, Japanese is a Category V language, requiring <strong>over 2200 hours</strong> of practice for a native English speaker; Japanese even has an asterisk to indicate it’s <em>even harder</em> than the others in the same category <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Gabriel Majeri日本語はすごい!This blog post describes the freely-available resources I consider to be the most helpful when learning Japanese. Each site comes with a description, detailing how long should you stick with it and when it’s the time to move to the next one.The value of humility2019-09-15T00:00:00+00:002019-09-15T00:00:00+00:00https://blog.gabrielmajeri.ro/2019/09/15/the-value-of-humility<p>A few months ago, I went to a <a href="https://myconnector.ro/details/uipath-tech-evenings-challenges-of-building-scalable-products/159">tech evening</a> about building scalable products. The welcome speech was delivered by <a href="https://www.linkedin.com/in/danieldines/">Daniel Dines</a>, CEO and founder of <a href="https://www.uipath.com/">UiPath</a>.</p>
<p>Daniel presented a short bit of his life story: how he started as a programmer in Romania, the path to becoming a programmer for Microsoft, and how he came up with the idea for his startup. While I will not bore you with the details of his talk (you can find a full recording <a href="https://soundcloud.com/user-183251561/daniel-dines-uipath-tech-evenings-bucharest-11072019">here</a>), there is one <strong>key idea</strong> which sticked with me: how important it is to be <strong>humble</strong>.</p>
<!-- more -->
<h2 id="on-the-notion-of-humility">On the Notion of Humility</h2>
<p>Cambridge Dictionary <a href="https://dictionary.cambridge.org/dictionary/english/humility">provides</a> a concise definition<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> of humility: <strong>the quality of not being proud because you are aware of your bad qualities</strong>. Humility is the wisdom you are entrusted with once you realize how much there is left to learn. It is what made Socrates affirm that the only thing <a href="https://en.wikipedia.org/wiki/I_know_that_I_know_nothing">he knows is that he knows nothing</a> when the Oracle of Delphi named him the wisest man in Ancient Greece.</p>
<h2 id="humility-as-a-core-value">Humility as a Core Value</h2>
<p>Daniel not only described how important humility was in his own career and personal life, but also how important it was in building his company. He realized that a startup culture with too many rules would be annoying for his employees, so he decided to focus on 1-2 core values which would guide all other decisions.</p>
<p>And UiPath’s core value was <em>humility</em>. When their competitors would be <em>too good</em> to work with smaller firms, they would be eager to help. When their competitors made their software usable only by expert programmers, they provided excellent documentation, and tried to make it understandable even for non-technical people.</p>
<p>And it worked. Despite the fierce competition and existing solutions, they prevailed. With a valuation of over $7 billion, UiPath is now one of the biggest companies in the <a href="https://en.wikipedia.org/wiki/Robotic_process_automation">RPA</a> industry.</p>
<h2 id="ego-is-the-enemy">Ego is the Enemy</h2>
<p>Fast-forward a few more months, when <a href="https://www.youtube.com/channel/UCTP1PGV-piW-tsUYXlHmvGw">Cristi Dascălu</a>, a Romanian YouTuber <a href="https://www.youtube.com/watch?v=tljsFKsrpOA">recommended</a> his top 3 must-read books. One of the books on the list was <strong>Ego is the Enemy</strong>, written by American author <a href="https://ryanholiday.net/">Ryan Holiday</a>.</p>
<p>Just by looking at the title, it’s clear that this book echoes Daniel Dines’ belief that being humble is essential to living a long and fulfilling life and achieving your professional objectives. For me, the primary take-away from the book is understanding all the possible ways in which arrogance can destroy your dreams.</p>
<p>When I finished reading, I looked back at all my failures and realized how much has ego affected me. I also looked at my successes and noticed how, by keeping myself grounded in reality, I could focus clearly on the target.</p>
<h2 id="the-advantages-of-humility">The Advantages of Humility</h2>
<p>All of those successful people made it because they understood the value of humility. In this section I list some of the main characteristics of being humble and keeping your ego in check.</p>
<h3 id="humility-is-not-dreaming-about-the-future">Humility is Not Dreaming About The Future</h3>
<p>You go out for a beer with some friends, and after talking about <em>what actually happened</em> in the past week, you start talking about what’s going to happen in a few years. You discuss where you’ll go on holiday after you <em>somehow</em> invent the next big thing, or how you’ll split the money after you win some sort of contest. We’ve all had moments like that, but sadly just <em>dreaming</em> about how you’ll one day have success <strong>won’t make it happen</strong>. The more you live in a dream, the harder it is to be objective about your current status; you lose direction and stop listening to feedback.</p>
<p>I am not encouraging you not to follow your dreams or to give up. All I am saying is spending a lot of time letting your imagination run wild will not get closer to your goals. My favorite quote<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup> from Linus Torvalds:</p>
<blockquote>
<p>I’m perfectly happy with all the people who are walking around and just staring at the clouds and looking at the stars and saying, “I want to go there.” But I’m looking at the ground, and I want to fix the pothole that’s right in front of me before I fall in.</p>
</blockquote>
<p>Linus wrote <a href="https://www.kernel.org/">software</a> that shaped the modern world. But he did so without personal ambitions or wild dreams about becoming rich.</p>
<h3 id="humility-is-always-learning">Humility is Always Learning</h3>
<p>As your ego starts to grow, you become more and more confident in your abilities. If you’re just starting out and you’re overconfident, it’s called the <a href="https://en.wikipedia.org/wiki/Dunning-Kruger_effect">Dunning-Kruger effect</a>. But there is no name for when you’re already experienced in a domain, but fail to realize there is always more to learn.</p>
<p>It’s always important to have the <strong>student mindset</strong>, where you approach every new situation with a willingness to learn and improve yourself. No matter how much you already know, you can always find a new approach or perspective to an existing problem.</p>
<p>To give an example from personal experience: after all these years as a programmer, I still use Google to find how to solve simple problems I <em>already know how to solve</em>. Over time, new solutions get invented, or existing ones get improved, and I regularly discover new and better ways to do things I already knew how to do.</p>
<h3 id="humility-is-working-together-with-others">Humility is Working Together With Others</h3>
<p>Perhaps the greatest downside of egotism is that it makes it hard for us to <strong>connect with others</strong>. If you believe yourself to be unstoppable, you won’t realize you <em>need</em> others to grow. While other people also have busy lives and their own interests, you will be surprised at how eager they are to help you. And <strong>reciprocation</strong> is also important. Whenever you go out of your way and <em>help somebody</em> who is doing worse than you, remember how <em>you’ve been helped</em> by those who are better off.</p>
<h2 id="conclusions">Conclusions</h2>
<p>All the advice in this article can be summarized as: <strong>Be humble.</strong> Keeping this in mind will help you always learn new things, benefit from new opportunities or just make new friends. And always stick to your dreams, you will make it eventually.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>Daniel pointed out that in Romanian, the direct translation of humility, <em>umilință</em>, has <a href="https://dexonline.ro/definitie/umilin%C8%9B%C4%83">negative connotations</a>, suggesting that you feel inferior to someone else. It’s an unfortunate evolution of a word’s meaning. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>From the TED talk <a href="https://www.ted.com/talks/linus_torvalds_the_mind_behind_linux">Linus Torvalds: The mind behind Linux</a> <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Gabriel MajeriA few months ago, I went to a tech evening about building scalable products. The welcome speech was delivered by Daniel Dines, CEO and founder of UiPath. Daniel presented a short bit of his life story: how he started as a programmer in Romania, the path to becoming a programmer for Microsoft, and how he came up with the idea for his startup. While I will not bore you with the details of his talk (you can find a full recording here), there is one key idea which sticked with me: how important it is to be humble.Organize your life2019-09-08T00:00:00+00:002019-09-08T00:00:00+00:00https://blog.gabrielmajeri.ro/2019/09/08/organize-your-life<p>Feel like you’re falling behind your daily schedule? Do you wish you had more hours in a day? Each of us gets (more or less) the same amount of time to live; it’s within our power to organize our priorities and spend as much time as possible doing what matters.</p>
<!-- more -->
<p>This post describes the <strong>free digital tools</strong> I use to organize my daily activity and long-term plans. It’s critical to use the right tool for the right problem, therefore I also describe my <strong>workflows</strong>.</p>
<p><strong>Disclaimer</strong>: I make no profit from recommending these sites.</p>
<h2 id="why-digital-tools">Why digital tools?</h2>
<p><em><a href="#calendar">Skip this section</a> if you’re convinced of the benefits of using software tools</em></p>
<p>Perhaps you’re old school and think post-it notes on the fridge are superior. Perhaps you don’t trust these companies with their dubious privacy policies.</p>
<p>But nobody has perfect memory, and no amount of physical reminders will help you if your mind is distracted by some other upcoming event. Humans evolved survival instincts, so we’re pretty good at determining <em>when</em> we should eat (we feel hungry), but far too often we get the feeling we forgot to do something but we can’t remember what.</p>
<p>If you <em>can</em> afford to pay a personal assistant to follow you around and remind you of your your meetings or which bills you have to pay, then good for you. If not, don’t risk forgetting your friend’s birthday or that deadline coming up next week — it’s safer to get an automated reminder on your phone.</p>
<h2 id="calendar">Calendar</h2>
<p>First and foremost, start using one of the many free <strong>calendar</strong> apps.</p>
<p>I chose <strong>Google Calendar</strong> since it’s tightly integrated with my Android phone and it also has a <a href="https://calendar.google.com/">web interface</a> I can access from any computer. It also integrates well with mail software (for example, if I get an email about an event from <a href="https://www.meetup.com/">Meetup</a> I can add it to my calendar with a click).</p>
<p>No matter which app you use, here is some general advice:</p>
<ul>
<li>
<p><strong>Mark down events early, even if you don’t know the exact date/location.</strong> The primary objective is to avoid scheduling something else on top of your existing plans.</p>
<p>For example, when I plan to leave on holiday I place an approximate event over several days so I can easily spot it in <strong>Calendar</strong> when planning other events.</p>
</li>
<li>
<p><strong>Don’t set up reminders for things which you ought to do daily.</strong> When I started working out I set up <strong>Calendar</strong> to remind me to exercise for 10 minutes every day. I got used to delaying or just ignoring the notifications. Eventually I realized my phone wasn’t going to provide the motivation I needed. Instead, you have to force yourself to do these task every day and they will become routine.</p>
<p>Just like you don’t need a reminder to brush your teeth, you shouldn’t need a reminder to exercise. You want to develop a habit.</p>
</li>
</ul>
<p>Having a well-organized calendar is the first step to budgeting your time and helps you stay on top of future events.</p>
<h2 id="trello">Trello</h2>
<p><a href="https://trello.com/">Trello</a> is my primary tool for organizing large projects or just keeping my thoughts together.</p>
<p>It has a huge amount of features and integrations, but I only use its basic functionality: storing links or creating checklists (checklists are <em>so</em> satisfying).</p>
<p>The gist of <strong>Trello</strong> is that you have <strong>boards</strong>, which are pretty large and usually focus on one specific theme/project. In these boards you have <strong>lists</strong> (usually one per topic), which are named columns of <strong>cards</strong>. Each card has a short title and a longer description, and can have <strong>documents</strong>, <strong>links</strong> and <strong>checklists</strong> attached to it. Cards can be easily shuffled around if you feel they don’t fit in their original list.</p>
<p>Some of my use cases:</p>
<ul>
<li>
<p>Grouping interesting links and resources by topic on different boards.</p>
</li>
<li>
<p>Me and my friends (who also play guitar) have a shared board where we put links to various songs’ chords and tabs or awesome guitar tutorials.</p>
</li>
<li>
<p>Started learning to cook (eating out is expensive), and I have a board with three lists: recipes I’ve tried and are tasty, recipes I’ve tried but would rather not eat again, and recipes I haven’t yet tried (but look promising).</p>
<p>This kind of segmentation of lists into tasks which are done / which are being done / which haven’t been started yet is inspired from <a href="https://en.wikipedia.org/wiki/Kanban_board">Kanban boards</a>.</p>
</li>
</ul>
<p>When starting out, you could use a board for each project you are planning. If you’re a student, you can use a board to keep all your course notes or useful links related to school. As you use Trello more you will start getting a feel for how general or specific you want your boards to be.</p>
<h2 id="google-keep">Google Keep</h2>
<p>While <strong>Trello</strong> is great for those times when you have the possibility to plan ahead, sometimes you don’t feel like creating a new board just to write down a grocery list. <strong>Keep</strong> is a simple note-taking app with a <a href="https://play.google.com/store/apps/details?id=com.google.android.keep">mobile app</a> and a <a href="https://keep.google.com/">web interface</a>.</p>
<p>One mistake I made when I first started using <strong>Keep</strong> a few years ago is that I took too many notes and started getting lost in them. While <strong>Trello</strong> scales well if you have complex projects, <strong>Keep</strong> simply wasn’t designed for that kind of data. Avoid having more than a dozen (active) notes or you risk getting lost in them.</p>
<h2 id="spreadsheets">Spreadsheets</h2>
<p>It’s easy to <a href="https://www.youtube.com/watch?v=UBX2QQHlQ_I">make fun of Excel</a>, but don’t underestimate the simplicity and power of <strong>spreadsheet software</strong>.</p>
<p><a href="https://www.google.com/sheets/about/">Google Sheets</a> is my go-to choice — it’s free and syncs all your documents with the cloud. For those who prefer a Microsoft product, there is also <a href="https://office.live.com/start/Excel.aspx">Excel Online</a>.</p>
<p>Sheets can be useful for <strong>budgeting</strong>. While lacking in automatic features, this system is very simple to set up and maintain. You can easily move your data onto another platform later if you want to.</p>
<p>You might be tempted to fill out cells manually, or compute averages by hand; but as you start getting used to the available formulas and macros, you will improve your efficiency. And the next time you have to do some accounting you will fill out the sheets like a pro.</p>
<p>Most tools also have the ability to create beautiful charts. Once you start accumulating some data, try gaining insights from your patterns.</p>
<p><strong>Tip</strong>: take a while to familiarize yourself with the various graphics you can draw. Humans intuition is pretty bad with numbers, but we’re quite good at interpreting bar charts.</p>
<h2 id="goodreads">GoodReads</h2>
<p>If you also like reading (e-)books, then <a href="https://www.goodreads.com/">GoodReads</a> has got you covered. Their site is the equivalent of a digital bookshelf where you can track books you’ve already read, are currently reading, or want to read in the future.</p>
<p>On top of this, it’s also very good at recommending new books if you’re looking for something to read.</p>
<h2 id="other-ways-to-organize-your-life">Other ways to organize your life</h2>
<p>The tools listed above are quite general and should help any sort of living organism who wants to get a hold on their life’s schedule.</p>
<h3 id="start-a-blog-or-keep-a-journal">Start a blog (or keep a journal)</h3>
<p>I knew <strong>blogging</strong> was about creating content and sharing it with the world, but I never though it could be beneficial for the writers themselves (I’m not talking about making profits here).</p>
<p>Writing down your thoughts forces you to maintain clarity. It forces you to think back on the decisions you took. It’s a great way to remember what you did over the years.</p>
<p>If you don’t feel like sanitizing your thoughts and posting them publicly, at least start a private <strong>journal</strong> where you write down your activities and thoughts.</p>
<h3 id="keep-your-cv-up-to-date">Keep your CV up-to-date</h3>
<p>You never know when a new opportunity for a job might arise, and if you need to take a few days off to clean up and update your <strong>CV</strong> you could miss out on that offer.</p>
<p>As soon as you get a certification in anything, add it to your <strong>CV</strong>. As early as the first day at the job, add the new workplace to your <strong>CV</strong>. And if you don’t feel like firing up Word or a LaTeX editor, at least update your <a href="https://www.linkedin.com/">LinkedIn</a>.</p>
<p>Your CV gets updated only if <em>you</em> improve it. Make it a habit to regularly clean it up and remove old, unimportant achievements.</p>
<h3 id="issue-trackers">Issue trackers</h3>
<p><strong>Note</strong>: this is more useful for those working in the IT industry.</p>
<p>If you’ve got any sort of project on <a href="https://github.com/">GitHub</a>, <a href="https://bitbucket.org/">Bitbucket</a>, <a href="https://gitlab.com/">GitLab</a>, or any other VCS hosting solution, then you really ought to use the integrated issue management system.</p>
<p>I once tried organizing my ideas for a programming project using Trello, and I quickly discovered the pain of lacking integration with the platform on which you’re developing and hosting the code.</p>
<p>The whole point of the Git flow is that you write down stories/ideas in <strong>issues</strong>, and then you close them by merging pull requests. As your project grows, new ideas show up as old features get implemented.</p>
<p>Remember that <strong>issues</strong> are meant for discussion and as future references for people who want to request the same feature. They help ease the mental burden on the maintainers, and make it easy for new contributors to do useful work.</p>Gabriel MajeriFeel like you’re falling behind your daily schedule? Do you wish you had more hours in a day? Each of us gets (more or less) the same amount of time to live; it’s within our power to organize our priorities and spend as much time as possible doing what matters.