<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Joao Alves</title>
    <link>https://joaoalves.dev/</link>
    <description>Recent content on Joao Alves</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <lastBuildDate>Sat, 14 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://joaoalves.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Prompt-Driven Product - When Code Isn&#39;t The Hard Part</title>
      <link>https://joaoalves.dev/posts/prompt-driven-product/when-code-isnt-the-hard-part/</link>
      <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/prompt-driven-product/when-code-isnt-the-hard-part/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/prompt-driven-product/when-code-isnt-the-hard-part/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Turns out there was more to talk about in this journey. Not that surprising I guess 😅. Today I&amp;rsquo;ll go through one aspect that isn’t talked about as much, and where these tools clearly still struggle. At least based on this specific experience.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-pre-launch-reality-&#34;&gt;The pre-launch reality 🛠️&lt;/h2&gt;&#xA;&lt;p&gt;Producing code is one thing, and these agentic tools, especially Claude Code, are awesome. Guiding you through setting things up in a portal is a whole different game.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prompt-Driven Product - What Worked, What Didn&#39;t</title>
      <link>https://joaoalves.dev/posts/prompt-driven-product/what-worked-what-didnt/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/prompt-driven-product/what-worked-what-didnt/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/prompt-driven-product/what-worked-what-didnt/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;First, an apology. It has been almost six months since the &lt;a href=&#34;https://joaoalves.dev/posts/prompt-driven-product/setting-up-the-developer-environment&#34;&gt;last article&lt;/a&gt; in the series. If you were following along and expecting more, sorry about the silence.&lt;/p&gt;&#xA;&lt;p&gt;To be honest, a lot happened during that period. Work, personal life, and growing frustration with the project itself. Motivation dropped quite a bit as a result. More on that below.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-happened-&#34;&gt;What happened? 🧩&lt;/h2&gt;&#xA;&lt;p&gt;I did actually start implementing the app using the strategy I described earlier, working mostly through an LLM chat and copy-pasting code back and forth into the IDE.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prompt-Driven Product - Setting Up The Developer Environment</title>
      <link>https://joaoalves.dev/posts/prompt-driven-product/setting-up-the-developer-environment/</link>
      <pubDate>Tue, 08 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/prompt-driven-product/setting-up-the-developer-environment/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/prompt-driven-product/setting-up-the-developer-environment/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In my &lt;a href=&#34;https://joaoalves.dev/posts/prompt-driven-product/from-idea-to-plan&#34;&gt;last article&lt;/a&gt;, we transformed the raw app idea into a more detailed plan. With that plan in hand, it was time to build. But to do that, I first needed to properly set up my full developer environment. As mentioned before, I had been using &lt;a href=&#34;https://zapp.run/&#34;&gt;Zapp!&lt;/a&gt; as a quick cloud IDE for my tests.&lt;/p&gt;&#xA;&lt;p&gt;For someone like me, with my background in engineering, I had some of the setup and am generally comfortable with downloading the right tooling. But terminal commands are like history in school, you stop talking about it and using it, and it vanishes from your brain.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prompt-Driven Product - From Idea to Plan</title>
      <link>https://joaoalves.dev/posts/prompt-driven-product/from-idea-to-plan/</link>
      <pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/prompt-driven-product/from-idea-to-plan/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/prompt-driven-product/from-idea-to-plan/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In my &lt;a href=&#34;https://joaoalves.dev/posts/prompt-driven-product/interviewing-gemini-pro-for-the-job&#34;&gt;previous article&lt;/a&gt;, we saw how I put Gemini Pro through its paces, essentially &amp;ldquo;interviewing&amp;rdquo; it to see if it could be my AI partner for this project. With its capabilities validated (mostly! 😅), it was time to start the real work: transforming my raw idea of an app into a more concrete product vision and plan. This article will cover how we fleshed out the &amp;ldquo;what&amp;rdquo; and &amp;ldquo;why&amp;rdquo; of our Water Reminder App.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prompt-Driven Product - &#34;Interviewing&#34; Gemini Pro for the Job</title>
      <link>https://joaoalves.dev/posts/prompt-driven-product/interviewing-gemini-pro-for-the-job/</link>
      <pubDate>Tue, 24 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/prompt-driven-product/interviewing-gemini-pro-for-the-job/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/prompt-driven-product/interviewing-gemini-pro-for-the-job/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&#34;https://joaoalves.dev/posts/prompt-driven-product/an-experimental-journey&#34;&gt;first article&lt;/a&gt;, I laid out the goal for this series: building an entire cross-platform app with AI generating most of the code. Before diving into it though, there was a critical step. I needed to know if Gemini Pro was up to the task.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-the-skepticism-&#34;&gt;Why the Skepticism? 🤨&lt;/h2&gt;&#xA;&lt;p&gt;As mentioned previously, I leverage LLMs extensively in my daily work and personal life. I use them for brainstorming, reasoning through problems, and to help with generating content. It is a very powerful tool in those domains.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prompt-Driven Product - An Experimental Journey</title>
      <link>https://joaoalves.dev/posts/prompt-driven-product/an-experimental-journey/</link>
      <pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/prompt-driven-product/an-experimental-journey/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/prompt-driven-product/an-experimental-journey/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s been a while since my last &lt;em&gt;#buildinpublic&lt;/em&gt; article collection, so it&amp;rsquo;s time for a new adventure! It all starts with a simple question: &lt;em&gt;What if you could build a fully functional, cross-platform app, end-to-end, with an AI writing most of the code?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this article series I will try to do exactly that and you’re invited along for the experiment. I will document the process of creating a Water Reminder App with AI as my primary development, product and UX partner.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lacking confidence at work? Run a marathon! 🏃</title>
      <link>https://joaoalves.dev/posts/lacking-confidence-at-work-run-a-marathon/</link>
      <pubDate>Thu, 10 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/lacking-confidence-at-work-run-a-marathon/</guid>
      <description>&lt;p&gt;This was posted originally on my LinkedIn account, you can read it &lt;a href=&#34;https://www.linkedin.com/posts/joaocarlosalves_lacking-confidence-at-work-run-a-marathon-activity-7316126274886762496-0Mfu&#34;&gt;there&lt;/a&gt; as well if you want.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This post is not me bragging about having ran a marathon. OK, maybe a little 😅&lt;/p&gt;&#xA;&lt;p&gt;But really, it’s about something unexpected I got from the process. Not from the race itself, but from the journey to it, in particular, the training.&lt;/p&gt;&#xA;&lt;p&gt;People say the hardest part of a marathon is the training block. Not sure I agree 100% after the suffer fest I had after the 30km mark on Sunday! 😵&lt;/p&gt;</description>
    </item>
    <item>
      <title>Performance Season - To LLM or Not To LLM?</title>
      <link>https://joaoalves.dev/posts/performance-season-to-llm-or-not-to-llm/</link>
      <pubDate>Mon, 10 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/performance-season-to-llm-or-not-to-llm/</guid>
      <description>&lt;p&gt;This article was originally posted on my LinkedIn account, you can read it &lt;a href=&#34;https://www.linkedin.com/pulse/performance-season-llm-joao-alves-vskqf/?trackingId=AndWDOXgxIySCHM4OpJetA%3D%3D&#34;&gt;there&lt;/a&gt; as well if you want.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/performance-season-to-llm-or-not-to-llm/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;100-to-llm-but&#34;&gt;100% to LLM. BUT…&lt;/h2&gt;&#xA;&lt;p&gt;The short answer is to definitely leverage an LLM to support you during this process. But it&amp;rsquo;s important to use it for the right reasons and the right outcomes. Don’t mistake it for a shortcut. Use it as a tool to refine your ideas, analyse data, and structure your thinking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://joaoalves.dev/about/</link>
      <pubDate>Thu, 14 Jul 2022 11:37:58 +0530</pubDate>
      <guid>https://joaoalves.dev/about/</guid>
      <description>&lt;p&gt;Hi there 👋 My name is João, and I&amp;rsquo;m an Engineering Manager at Indeed Flex. My journey into the world of computing began quite some time ago in Portugal though, where I completed my Master&amp;rsquo;s in Computer Science. I started my career in 2009 as a Software Engineer, spending five years developing Air Traffic Management Systems using Java and C at NAV Portugal.&lt;/p&gt;&#xA;&lt;p&gt;In 2014, I made the move to London, shifting my focus to Android development after playing with the platform and releasing a personal app. This marked my entry into the mobile space, which has been the core of my professional life ever since.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goodbye UK, Hello again Portugal</title>
      <link>https://joaoalves.dev/posts/goodbye-uk-hello-portugal/</link>
      <pubDate>Sat, 24 Jul 2021 07:50:50 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/goodbye-uk-hello-portugal/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/goodbye-uk-hello-portugal/images/1.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today&amp;rsquo;s post is all about personal updates, in case the title wasn&amp;rsquo;t obvious enough 😁. Let me shed some background on the whole process though. Big decisions that will have a big impact on my career and also our family personal lives.&lt;/p&gt;&#xA;&lt;p&gt;For those unfamiliar with my story, I moved to the UK with my wife back in 2014. We went on the lookout for better career opportunities, a better financial situation and new life experiences. At the time, it was a required move as those were not easily achieved in Portugal. Looking back, and despite the fact we&amp;rsquo;re making a return now, I can easily say it was one of the best decisions I have ever made in my life.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leading with Context vs Leading with Control</title>
      <link>https://joaoalves.dev/posts/leading-with-context/</link>
      <pubDate>Wed, 14 Apr 2021 11:16:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/leading-with-context/</guid>
      <description>&lt;p&gt;Netflix&amp;rsquo;s new book &lt;a href=&#34;https://www.norulesrules.com/&#34;&gt;No Rules Rules&lt;/a&gt; was quite an interesting listen and opened another topic for me to think about and explore. I wrote last month about &lt;a href=&#34;../why-compensation-is-broken/&#34;&gt;Compensation&lt;/a&gt; but in this article, I&amp;rsquo;ll focus on the differences between Leading with Control and Leading with Context.&lt;/p&gt;&#xA;&lt;h2 id=&#34;trust&#34;&gt;Trust&lt;/h2&gt;&#xA;&lt;p&gt;I could replace Context with Trust in the article title and all would still make sense so let me start with that. There&amp;rsquo;s only a possible reason for us to lead with control, and that is if we don&amp;rsquo;t trust the people around us to be successful at what they do. It&amp;rsquo;s our job as managers, leaders, mentors, colleagues to set everyone around us for success. How do we do that? By helping them when needed, by giving them all the &lt;strong&gt;context&lt;/strong&gt; they need to do their job well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Compensation Is Broken</title>
      <link>https://joaoalves.dev/posts/why-compensation-is-broken/</link>
      <pubDate>Sun, 14 Mar 2021 10:16:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/why-compensation-is-broken/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m currently listening to Netflix&amp;rsquo;s new book &lt;a href=&#34;https://www.norulesrules.com/&#34;&gt;No Rules Rules&lt;/a&gt; and finding it quite interesting. But there was a particular chapter that led me to write this post. The title of the chapter is &lt;code&gt;Pay Top of Personal Market&lt;/code&gt; and it&amp;rsquo;s pretty self-explanatory.&lt;/p&gt;&#xA;&lt;p&gt;But a TLDR would be something like: If you want to keep your best talent and all they bring to the table, you have to pay them top of their market.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Furlough schemes - solution or problem?</title>
      <link>https://joaoalves.dev/posts/furloughs-solution-or-problem/</link>
      <pubDate>Wed, 03 Jun 2020 10:16:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/furloughs-solution-or-problem/</guid>
      <description>&lt;p&gt;This piece was originally posted in Portuguese at &lt;a href=&#34;https://opinioes.online/post/junho2020-esquemas/&#34;&gt;Opinioes&lt;/a&gt; - a Portuguese website with opinion articles on technology subjects. I decided to translate it and post it here in English as well.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Furloughs and other hour reduction schemes have never been talked about as much as during this Covid-19 crisis. Government programs having them as a base and with shared costs, for sure helped that spread happening. These programs contributed to making furlough schemes more attractive for any business. At the same time, something that would have been seen as a negative started to be seen with different eyes during this. Furlough schemes became a support mechanism so people are able to keep their job after the crisis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Predictable codebases - a silent retention killer</title>
      <link>https://joaoalves.dev/posts/predictable-codebases/</link>
      <pubDate>Sun, 24 May 2020 10:16:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/predictable-codebases/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/predictable-codebases/images/1.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;This tweet from my friend &lt;a href=&#34;https://twitter.com/igorwojda&#34;&gt;Igor Wojda&lt;/a&gt; triggered this article. What he said is true but for some reason, I immediately thought about this in a different way. Retention. I&amp;rsquo;m a manager now 😁&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;Part of what makes programming exciting and difficult is that most of the time we’re doing things we’ve never done before 👨‍🏫&lt;/p&gt;&amp;mdash; Igor Wojda 🤖 (@igorwojda) &lt;a href=&#34;https://twitter.com/igorwojda/status/1264449088675815426?ref_src=twsrc%5Etfw&#34;&gt;May 24, 2020&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;p&gt;This is one of the reasons why even in a company with great culture and people, it can still be hard to hold to some talent. Regular and exciting work is crucial to keep people. If we can&amp;rsquo;t offer it on a regular basis to savvy engineers they will start looking for alternatives.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Medium to my blog - migrating the content</title>
      <link>https://joaoalves.dev/posts/from-medium-to-my-blog/migrating-the-content/</link>
      <pubDate>Sat, 04 Apr 2020 16:10:12 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/from-medium-to-my-blog/migrating-the-content/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/from-medium-to-my-blog/migrating-the-content/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the final article of the series, we&amp;rsquo;re going to look into how I migrated my Medium content to the website and what were the main pain points of the migration.&lt;/p&gt;&#xA;&lt;p&gt;If you want to read about why I decided to create this website, you can read the &lt;a href=&#34;https://joaoalves.dev/posts/from-medium-to-my-blog/the-why&#34;&gt;first article&lt;/a&gt; on this small series. And if you want to know more about how I created the website you can read the &lt;a href=&#34;https://joaoalves.dev/posts/from-medium-to-my-blog/creating-the-website&#34;&gt;second article&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leading people through Covid-19</title>
      <link>https://joaoalves.dev/posts/leading-people-through-covid-19/</link>
      <pubDate>Sat, 28 Mar 2020 18:16:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/leading-people-through-covid-19/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/leading-people-through-covid-19/images/1.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve seen several articles out there with great tips on how to best work from home. For engineers on how to manage their day and make the most out of it, how to stay productive and so on. And for managers to keep their teams going strong, engaged and delivering through this time. All of that advice is great and I&amp;rsquo;m sure many people, as I do, appreciate everyone that decided to write and share their experiences. Thank you 🙏.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Medium to my blog - creating the website</title>
      <link>https://joaoalves.dev/posts/from-medium-to-my-blog/creating-the-website/</link>
      <pubDate>Sat, 28 Mar 2020 09:11:12 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/from-medium-to-my-blog/creating-the-website/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/from-medium-to-my-blog/creating-the-website/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;As the name indicates, in this article I&amp;rsquo;m going through the process of how I created this website. I&amp;rsquo;ll explain which choices I made in terms of stack and also go through some important points I found along the way.&lt;/p&gt;&#xA;&lt;h3 id=&#34;picking-up-the-stack&#34;&gt;Picking up the stack&lt;/h3&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start with the technology stack. I looked into different things in the past and read a few guides on how to move from Medium to a personal blog. I remember reading guides for Wordpress, Ghost and many other things. But as explained in the &lt;a href=&#34;https://joaoalves.dev/posts/from-medium-to-my-blog/the-why&#34;&gt;first article&lt;/a&gt;, after a couple of recent chats with colleagues, my choice was reduced to the 2 stacks below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Medium to my blog - the why</title>
      <link>https://joaoalves.dev/posts/from-medium-to-my-blog/the-why/</link>
      <pubDate>Fri, 20 Mar 2020 09:12:12 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/from-medium-to-my-blog/the-why/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/from-medium-to-my-blog/the-why/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi everyone 👋 in this article I&amp;rsquo;m going to share why I decided to create a new personal website and in the process move all my Medium content here as well.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s just be clear, it was not about Medium&amp;rsquo;s business model. While I think a lot of people (me included) can agree that as a platform, it might not be going in a great direction, it is not the reason I&amp;rsquo;m moving away from it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pull Request review etiquette</title>
      <link>https://joaoalves.dev/posts/pull-request-review-etiquette/</link>
      <pubDate>Mon, 10 Feb 2020 07:01:01 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/pull-request-review-etiquette/</guid>
      <description>&lt;p&gt;This article was originally posted on the &lt;a href=&#34;https://medium.com/babylon-engineering&#34;&gt;Babylon Engineering&lt;/a&gt; blog, you can read it &lt;a href=&#34;https://medium.com/babylon-engineering/pull-request-review-etiquette-2101d36d4818&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The importance of onboarding people well</title>
      <link>https://joaoalves.dev/posts/importance-of-onboarding-people-well/</link>
      <pubDate>Mon, 09 Dec 2019 07:16:01 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/importance-of-onboarding-people-well/</guid>
      <description>&lt;p&gt;This article was originally posted on the &lt;a href=&#34;https://medium.com/babylon-engineering&#34;&gt;Babylon Engineering&lt;/a&gt; blog, you can read it &lt;a href=&#34;https://medium.com/babylon-engineering/the-importance-of-onboarding-people-well-86d5e61dd246&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimalism in Software Engineering — tidy that calendar</title>
      <link>https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar/</link>
      <pubDate>Tue, 26 Mar 2019 10:20:52 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — an introduction&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that workplace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that desktop&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that calendar&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hello and welcome to the last article on the series. Today we’re going through some tips around calendar management and how to handle people at the workplace as well. We’re starting with something we all love, or maybe not 😃&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimalism in Software Engineering — tidy that desktop</title>
      <link>https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop/</link>
      <pubDate>Tue, 19 Mar 2019 16:01:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — an introduction&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that workplace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that desktop&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that calendar&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hi everyone, welcome to article number 3 on this minimalism series on software engineering. Today I’m going to explore the changes I made on my machine and workflow to reduce the number of distractions during work time. After spending some time thinking about it, I realised how our machines can literally be considered distractions black holes if we don’t put some effort in managing how we use them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimalism in Software Engineering — tidy that workplace</title>
      <link>https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace/</link>
      <pubDate>Tue, 12 Mar 2019 19:57:42 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — an introduction&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that workplace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that desktop&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that calendar&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hi everyone, welcome to article number 2 on this minimalism series on software engineering. After a quick introduction on the last article, today I’ll share the changes I made on my physical workspace, namely my desks, and how it helped me do to my work better.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimalism in Software Engineering — an introduction</title>
      <link>https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction/</link>
      <pubDate>Wed, 06 Mar 2019 20:12:12 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/an-introduction&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — an introduction&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-workplace&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that workplace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-desktop&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that desktop&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/minimalism-in-software-engineering/tidy-that-calendar&#34;&gt;&lt;strong&gt;Minimalism in Software Engineering — tidy that calendar&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;whats-minimalism-and-how-can-it-help-us-become-more-efficient-at-our-job-as-software-engineers&#34;&gt;What’s minimalism and how can it help us become more efficient at our job as software engineers?&lt;/h3&gt;&#xA;&lt;p&gt;Well, minimalism is about living a better life with less stuff. The core idea is that by having fewer things and therefore less clutter in your home, you can focus on the really important things. How can we transfer that to our work life? The answer is in the word focus, and that’s what I’m going to try and share in this new series of articles, but first a quick introduction on how I got so interested in minimalism and hopefully, how you can too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Firebase Android Playground — Cloud Messaging</title>
      <link>https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging/</link>
      <pubDate>Fri, 07 Dec 2018 08:26:00 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/setting-up&#34;&gt;&lt;strong&gt;Firebase Android Playground — setting up and Analytics&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/authentication&#34;&gt;&lt;strong&gt;Firebase Android Playground — Authentication&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/realtime-database&#34;&gt;&lt;strong&gt;Firebase Android Playground — Realtime Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging&#34;&gt;&lt;strong&gt;Firebase Android Playground — Cloud Messaging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hello everyone, welcome to article number 4 and last one on this Firebase Android Playground series. Today we’re going to look into Firebase Cloud Messaging and how we can use it to send messages to our app and trigger local notifications with them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Firebase Android Playground — Realtime Database</title>
      <link>https://joaoalves.dev/posts/firebase-android-playground/realtime-database/</link>
      <pubDate>Thu, 22 Nov 2018 10:03:42 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/firebase-android-playground/realtime-database/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/firebase-android-playground/realtime-database/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/setting-up&#34;&gt;&lt;strong&gt;Firebase Android Playground — setting up and Analytics&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/authentication&#34;&gt;&lt;strong&gt;Firebase Android Playground — Authentication&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/realtime-database&#34;&gt;&lt;strong&gt;Firebase Android Playground — Realtime Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging&#34;&gt;&lt;strong&gt;Firebase Android Playground — Cloud Messaging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hello everyone, welcome to article number 3 on the series. In the last article, we setup our authentication system so we’re now ready to use Firebase Realtime Database to build a realtime database for our app.&lt;/p&gt;&#xA;&lt;h4 id=&#34;what-is-firebase-realtime-database&#34;&gt;What is Firebase Realtime Database&lt;/h4&gt;&#xA;&lt;p&gt;The Firebase Realtime Database is basically a cloud hosted database stored in JSON format, it offers automatic offline support and it’s synchronised in realtime with every connected client. Let’s see what that means in more detail:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Firebase Android Playground — Authentication</title>
      <link>https://joaoalves.dev/posts/firebase-android-playground/authentication/</link>
      <pubDate>Thu, 08 Nov 2018 10:19:22 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/firebase-android-playground/authentication/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/firebase-android-playground/authentication/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/setting-up&#34;&gt;&lt;strong&gt;Firebase Android Playground — setting up and Analytics&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://proandroiddev.com/firebase-android-playground-authentication-a46c457ffa31&#34;&gt;&lt;strong&gt;Firebase Android Playground — Authentication&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/realtime-database&#34;&gt;&lt;strong&gt;Firebase Android Playground — Realtime Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging&#34;&gt;&lt;strong&gt;Firebase Android Playground — Cloud Messaging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hello there, welcome to article number 2 on the series. In the last article we did the initial setup of the project and added Analytics to it by logging some test events. In this one, we’ll look into Firebase Authentication and see how easy it is to authenticate your users in several different ways with the help of the available SDKs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Firebase Android Playground — setting up and Analytics</title>
      <link>https://joaoalves.dev/posts/firebase-android-playground/setting-up/</link>
      <pubDate>Tue, 23 Oct 2018 21:28:10 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/firebase-android-playground/setting-up/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/firebase-android-playground/setting-up/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;index&#34;&gt;Index:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/setting-up&#34;&gt;&lt;strong&gt;Firebase Android Playground — setting up and Analytics&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/authentication&#34;&gt;&lt;strong&gt;Firebase Android Playground — Authentication&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/realtime-database&#34;&gt;&lt;strong&gt;Firebase Android Playground — Realtime Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://joaoalves.dev/posts/firebase-android-playground/cloud-messaging&#34;&gt;&lt;strong&gt;Firebase Android Playground — Cloud Messaging&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hello everyone, welcome to my latest article. Guess what, I decided to write a new series 😀. Haven’t used most of Firebase features and definitely didn’t set it up from scratch in any app, so thought that this would be a nice way to do it and share the experience at the same time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playing with Navigation Architecture Components</title>
      <link>https://joaoalves.dev/posts/playing-with-navigation-architecture-components/</link>
      <pubDate>Sat, 29 Sep 2018 21:14:21 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/playing-with-navigation-architecture-components/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/playing-with-navigation-architecture-components/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hello there everyone, welcome to my latest article. Today we’re going to play around with the new Navigation Architecture Components. Ok, maybe not so new 😃 but since it’s almost reaching it’s first stable release feels like a good time to write about it.&lt;/p&gt;&#xA;&lt;p&gt;This article won’t be part of a series so I created a sample project just for it on GitHub, there’s a link at the bottom of the article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing UI Tests with Espresso and Kakao</title>
      <link>https://joaoalves.dev/posts/writing-ui-tests-with-espresso-and-kakao/</link>
      <pubDate>Wed, 29 Aug 2018 05:33:46 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/writing-ui-tests-with-espresso-and-kakao/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/writing-ui-tests-with-espresso-and-kakao/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi everyone, after completing 2 series of articles, I think now I’m going to write some individual ones for a change. The goal of an article every 2 weeks for 2018 remains, so expect more. But let’s jump into today’s one.&lt;/p&gt;&#xA;&lt;p&gt;In the last article of my &lt;a href=&#34;https://medium.com/@jcmsalves/london-tube-status-app-ui-tests-and-going-live-7b9ca16c4c7a&#34;&gt;London Tube Status Series&lt;/a&gt;, I showed a very simple UI test for the main screen of the app using Espresso and Kakao. It was not very detailed, so I decided to write a bit more about it, hence this article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin Playground — finish line</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-finish-line/</link>
      <pubDate>Wed, 09 May 2018 15:14:05 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-finish-line/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-finish-line/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi everyone. Welcome to article number 12 and last one of the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;Kotlin Playground Series&lt;/a&gt;. We got to the finish line. This is one doesn’t have any relevant content, it’s just a good bye and thanks for sticking around and reading all the articles and providing really nice feedback.&lt;/p&gt;&#xA;&lt;p&gt;But I said my goal for 2018 was to write an article every 2 weeks so I have to stick to it, right? This one doesn’t really count, so today I also published the first article on my new series — &lt;a href=&#34;https://medium.com/@jcmsalves/london-tube-status-app-setting-up-d96149d0504b&#34;&gt;London Tube Status App&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin try-with-resources — use</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-trywithresources-use/</link>
      <pubDate>Thu, 26 Apr 2018 14:46:01 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-trywithresources-use/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-trywithresources-use/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi there everyone, welcome to number 11 in the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;Kotlin Playground Series&lt;/a&gt;. We’ll continue with standard functions, today will look at just one so it shouldn’t get too long.&lt;/p&gt;&#xA;&lt;p&gt;We’re going to look into how to manage resources in Kotlin or in other words more common, how to handle try-with-resources. Let’s look at a couple of Java examples first to see what I’m talking about:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;readFirstLine&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;throws&lt;/span&gt; FileNotFoundException {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    BufferedReader reader &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; BufferedReader(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; FileReader(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;test.file&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; reader.&lt;span style=&#34;color:#a6e22e&#34;&gt;readLine&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt; (IOException e) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        e.&lt;span style=&#34;color:#a6e22e&#34;&gt;printStackTrace&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;finally&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            reader.&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt; (IOException e) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            e.&lt;span style=&#34;color:#a6e22e&#34;&gt;printStackTrace&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That looks familiar, right? I’m sure you had to write something similar to this at some point and you would agree it’s a bit of a boring task to write all that boilerplate. And worse than that, how many times did you forget to call that &lt;code&gt;close()&lt;/code&gt; function in the &lt;code&gt;finally&lt;/code&gt; block?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin runtime checks — require and check</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-runtime-checks-require-and-check/</link>
      <pubDate>Wed, 11 Apr 2018 13:31:02 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-runtime-checks-require-and-check/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-runtime-checks-require-and-check/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hey everyone, and welcome to article number 10 on the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;Kotlin Playground Series&lt;/a&gt;. Last time we looked into a few Kotlin standard functions that are very common (let, apply, run, with and also). Today we’ll be looking into another couple of standard functions that are not as popular, maybe because we don’t do these things as often but we definitely should.&lt;/p&gt;&#xA;&lt;p&gt;The title mentions runtime checks, so what do I mean by that? Let’s see, have you ever written some code like this in Java?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin standard functions — just another guide</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-standard-functions-just-another-guide/</link>
      <pubDate>Wed, 28 Mar 2018 18:14:38 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-standard-functions-just-another-guide/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-standard-functions-just-another-guide/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hello everyone and welcome to article number 9 in the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt;. Today we’re going to look at something that maybe should have come up after the syntax articles or so, but better late than never.&lt;/p&gt;&#xA;&lt;p&gt;I guess I was using some of these without really knowing or paying attention to the real difference between them but last week someone asked me the difference and I was like hmm… so here we are.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin backend? Yes it’s possible</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-backend-yes-its-possible/</link>
      <pubDate>Wed, 14 Mar 2018 18:53:52 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-backend-yes-its-possible/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-backend-yes-its-possible/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi everyone, welcome to article number 7 in the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt;, today we’re going to look at something different. We all know how powerful Kotlin is as a language and keep reading that you can build a full stack solution with it so why not give it a try and build a simple backend to test those claims.&lt;/p&gt;&#xA;&lt;p&gt;Recently at work, I needed to test my network layer before the backend APIs were actually implemented. The quickest way I found to do this was to actually create a GitHub &lt;code&gt;gist&lt;/code&gt; with the desired Json response and then use that &lt;code&gt;gist&lt;/code&gt; raw URL in my Retrofit service rather than the real API URL. This works fine but it’s not ideal as you can imagine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin Static Analysis — why and how?</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-static-analysis-why-and-how/</link>
      <pubDate>Mon, 26 Feb 2018 20:22:14 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-static-analysis-why-and-how/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-static-analysis-why-and-how/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hello everyone, welcome to article number 7 of the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt;. Before we jump into other examples, I think it would be nice to check the quality of the code I wrote so far to support the previous articles. So today we’ll be looking into ways of performing some static analysis on Kotlin code.&lt;/p&gt;&#xA;&lt;p&gt;For Java code, Checkstyle and Lint are probably the most used tools but what about in Kotlin, how can we check if our code is respecting guidelines and conventions? And how we can scan the project for potential bugs? Lint you can also use for Kotlin but be aware that there’s an open issue at the moment regarding false positives with unused resources (&lt;a href=&#34;https://youtrack.jetbrains.com/issue/KT-12499#comment=27-2334737&#34;&gt;here&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin Sealed Classes — enums with swag</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-sealed-classes-enums-with-swag/</link>
      <pubDate>Fri, 16 Feb 2018 15:39:09 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-sealed-classes-enums-with-swag/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-sealed-classes-enums-with-swag/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi there everyone, welcome to article number 6 on the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt;. Today we’ll be looking at Kotlin Sealed classes and how they can take enums to a completely different level and add them some swag. Let’s start with a basic enum in Java and see how it looks in Kotlin:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;enum&lt;/span&gt; BasicScreenStateJava {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ERROR,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    LOADING,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DATA&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;enum&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BasicScreenState&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ERROR,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    LOADING,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DATA&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pretty simple and pretty similar right? Enums are already pretty concise in Java so Kotlin doesn’t save us any boilerplate with these. Regarding functionality, they’re also very simple as there’s not much we can do with them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parcelable in Kotlin? Here comes Parcelize</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/parcelable-in-kotlin-here-comes-parcelize/</link>
      <pubDate>Tue, 30 Jan 2018 18:50:08 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/parcelable-in-kotlin-here-comes-parcelize/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/parcelable-in-kotlin-here-comes-parcelize/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hey everyone, welcome to article number 5 in the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt; where we’re going to look into how to handle Parcelables in Kotlin. In the previous article we looked into data classes and today we’re going to see how we can have our data classes implementing the Parcelable interface.&lt;/p&gt;&#xA;&lt;p&gt;The most basic use case for using Parcelable is when we need to pass a model from one activity to another. When passing primitive types is pretty straight forward but when we want to pass our own objects we need to do something to them:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin data classes — enough boilerplate</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-data-classes-enough-boilerplate/</link>
      <pubDate>Mon, 15 Jan 2018 21:52:40 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-data-classes-enough-boilerplate/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-data-classes-enough-boilerplate/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi everyone, we already looked into some differences between Kotlin and Java syntaxes in the previous 2 articles of the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt;. Today we’ll look into Kotlin data classes and how concise they are compared to POJOs (Plain Old Java Objects) and how much boilerplate we can get rid of by moving to Kotlin data classes.&lt;/p&gt;&#xA;&lt;p&gt;First, let’s take a look at a simple POJO representing a Person with 4 properties (name, age, email and phone):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin Syntax Part II — when did this switch happen?</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-ii-when-did-this-switch-happen/</link>
      <pubDate>Wed, 03 Jan 2018 16:33:06 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-ii-when-did-this-switch-happen/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-ii-when-did-this-switch-happen/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hey everyone, hope you had an amazing Christmas and an awesome new year’s eve. Welcome to article number 3 of the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt; and the first one of 2018. In the previous &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-i-why-am-i-excluded&#34;&gt;article&lt;/a&gt; we went through some of the Kotlin Base Syntax, today is part II of the syntax mini-series, and we’ll look into a few more examples of Kotlin syntax in action.&lt;/p&gt;&#xA;&lt;p&gt;To recap, in the previous article we talked about Classes, Functions, Variables, Nullability and about the poor semi-colon operator almost not being needed anymore.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin Syntax Part I — why am I excluded?</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-i-why-am-i-excluded/</link>
      <pubDate>Wed, 20 Dec 2017 08:45:12 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-i-why-am-i-excluded/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-syntax-part-i-why-am-i-excluded/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi everyone again, welcome to article number on 2 of the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;Kotlin Playground Series&lt;/a&gt;. There wasn’t that much code in the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/android-and-kotlinbasic-hello-world&#34;&gt;previous article&lt;/a&gt; but if you read it, you probably saw some new syntax that you’re not familiar with if coming from Java.&lt;/p&gt;&#xA;&lt;p&gt;In this and following article I’ll cover some of Kotlin base syntax as I believe it’s important before we jump into other examples. But enough talk and let’s look at some Kotlin code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android and Kotlin — basic Hello World</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/android-and-kotlinbasic-hello-world/</link>
      <pubDate>Wed, 06 Dec 2017 09:11:22 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/android-and-kotlinbasic-hello-world/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/android-and-kotlinbasic-hello-world/images/1.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here we go everyone, first article in the &lt;a href=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index&#34;&gt;series&lt;/a&gt;. Let’s start this Android Kotlin journey, and what better place than the starting point right? This article will cover the creation of a very simple Hello World Android Project with Kotlin.&lt;/p&gt;&#xA;&lt;p&gt;This will be very similar to create a base Android project with Java just clicking a couple of different buttons and getting a Kotlin project instead in the end.&lt;/p&gt;&#xA;&lt;p&gt;In order to use Kotlin properly, we should use Android Studio 3. It works with lower versions but you need to add a plugin. AS3 has full support and it’s now in stable release so you should probably use it anyway. You can download the latest version here:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kotlin Playground</title>
      <link>https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index/</link>
      <pubDate>Wed, 06 Dec 2017 09:10:52 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://joaoalves.dev/posts/kotlin-playground/kotlin-playground-index/images/1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ok Kotlin finally time to play a little. This is the start of my active journey with Kotlin actually doing something with it for Android. After a lot of articles read, a lot of videos watched and also going through some books now it’s time to actually build something with it.&lt;/p&gt;&#xA;&lt;p&gt;The plan is to make a series of articles sharing my journey in trying stuff with Kotlin and Android. I think the ultimate goal might be to get a nice template project or a set of useful samples out of this, that anyone can easily pick up later and benefit from.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Operation code cleaning: Event tracking with clean architecture</title>
      <link>https://joaoalves.dev/posts/operation-code-cleaning-event-tracking-with-clean-architecture/</link>
      <pubDate>Wed, 28 Jun 2017 15:13:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/operation-code-cleaning-event-tracking-with-clean-architecture/</guid>
      <description>&lt;p&gt;This article was originally posted on the &lt;a href=&#34;https://medium.com/babylon-engineering&#34;&gt;Babylon Engineering&lt;/a&gt; blog, you can read it &lt;a href=&#34;https://medium.com/babylon-engineering/operation-code-cleaning-event-tracking-with-clean-architecture-a0093f663b03&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android Bottom Navigation</title>
      <link>https://joaoalves.dev/posts/android-bottom-navigation/</link>
      <pubDate>Tue, 15 Nov 2016 10:16:43 +0000</pubDate>
      <guid>https://joaoalves.dev/posts/android-bottom-navigation/</guid>
      <description>&lt;p&gt;This article was originally posted on the &lt;a href=&#34;https://engineering.nodesagency.com&#34;&gt;Nodes Engineering&lt;/a&gt; blog, you can read it &lt;a href=&#34;https://engineering.nodesagency.com/categories/android/2016/11/15/Android-bottom-navigation&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
