<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Stacey</title>
    <description>The latest articles on Forem by Stacey (@staceypyee).</description>
    <link>https://forem.com/staceypyee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F61412%2F0ace7b05-e414-400b-bc52-fb4dc3a6b3d8.jpg</url>
      <title>Forem: Stacey</title>
      <link>https://forem.com/staceypyee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/staceypyee"/>
    <language>en</language>
    <item>
      <title>Say “Hi Ventura, Bye old iOS Simulators”!</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Sat, 10 Jun 2023 02:29:41 +0000</pubDate>
      <link>https://forem.com/staceypyee/say-hi-ventura-bye-old-ios-simulators-520</link>
      <guid>https://forem.com/staceypyee/say-hi-ventura-bye-old-ios-simulators-520</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TLDR: Stay in Monterey with Xcode 14.2 if you want iOS 12 simulators.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I moved to another M1 machine with Ventura lately.&lt;/p&gt;

&lt;p&gt;My files and Xcode settings were migrating fine with &lt;strong&gt;Migration Assistant&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Xcode 14.2 on Monterey
&lt;/h4&gt;

&lt;p&gt;I’m still working on an iOS project which supporting iOS 12 still (Yea~).&lt;/p&gt;

&lt;p&gt;Still manage to get the project running well on iOS 12.4 simulator with Xcode 14.2 and OS Monterey.&lt;/p&gt;

&lt;h4&gt;
  
  
  Xcode 14.2 on Ventura
&lt;/h4&gt;

&lt;p&gt;Trying to add older simulators back to the Xcode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0XGuqjoJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2Aw5hQQYdwAA4n16bQlsUC_A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0XGuqjoJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2Aw5hQQYdwAA4n16bQlsUC_A.png" alt="" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looks fine, since I have iOS 12.4 simulators installed earlier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BjYh0Nmq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2AOSxa5kQrmMeMuerE5oeJtg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BjYh0Nmq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2AOSxa5kQrmMeMuerE5oeJtg.png" alt="" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whoops!!! NO LUCK&lt;/p&gt;

&lt;p&gt;Not being listed anymore.&lt;/p&gt;

&lt;p&gt;Tapping on “Download more simulator runtimes” will return to the list again, with iOS 12.4 as installed.&lt;/p&gt;

&lt;h3&gt;
  
  
  GOOD BYE FRIEND
&lt;/h3&gt;

&lt;p&gt;The oldest friend that can keep me sailing is iOS 13.7&lt;/p&gt;

&lt;p&gt;So long iOS 13.6 and below.&lt;/p&gt;

&lt;p&gt;If you still need them, just stay in &lt;strong&gt;OS Monterey.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to get iOS 13.7 Simulators on Xcode 14 with Ventura
&lt;/h3&gt;

&lt;p&gt;If you need to keep iOS 13.7 with you,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open an Intel based Xcode (Xcode 13 and below) via Terminal
&lt;a href="https://dev.to/staceypyee/how-can-i-run-xcode-125x-on-monterey-search-record-25o-temp-slug-3020781"&gt;https://medium.com/@staceypyee/how-can-i-run-xcode-12-5-x-on-monterey-search-record-7e2878efcd49&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download iOS 13.7 simulators&lt;/li&gt;
&lt;li&gt;You will be able to see the iOS 13.7 options available to you in Xcode 14 again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’m still working on an iOS project which supporting iOS 12 still (Yea~).&lt;/p&gt;

&lt;p&gt;Still manage to get the project running well on iOS 12.4 simulator with Xcode 14.2 and OS Monterey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/75142619/how-to-use-ios12-simulator-in-xcode-14"&gt;How to use iOS12 simulator in XCode 14?&lt;/a&gt;&lt;/p&gt;

</description>
      <category>monterey</category>
      <category>iosappdevelopment</category>
      <category>m1</category>
      <category>xcode14</category>
    </item>
    <item>
      <title>How can I run Xcode 12.5.x on Monterey? (Search record)</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Fri, 22 Jul 2022 08:33:42 +0000</pubDate>
      <link>https://forem.com/staceypyee/how-can-i-run-xcode-125x-on-monterey-search-record-1h97</link>
      <guid>https://forem.com/staceypyee/how-can-i-run-xcode-125x-on-monterey-search-record-1h97</guid>
      <description>&lt;p&gt;This is just a note from my search record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original Post:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/69994916/how-can-i-run-xcode-12-5-1-on-monterey"&gt;How can I run Xcode 12.5.1 on Monterey?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I updated to Xcode 13 so that I can run the code on my actual device. However, there is some issues with my unit testings in Xcode 13, thus installing Xcode 12.5.x for easier compilation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Working Solution: (Copied from the best workable answer in Stackoverflow)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The solution is very simple. If you have the older version downloaded in your Applications folder for example, lets say 12.5.1 version, you just need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Terminal&lt;/li&gt;
&lt;li&gt;Open Applications folder in Finder&lt;/li&gt;
&lt;li&gt;Drag the Xcode app into Terminal so it gets its path&lt;/li&gt;
&lt;li&gt;Then add this next to it: /Contents/MacOS/Xcode, so the full command will be something like /Applications/Xcode-12.5.1.app/Contents/MacOS/Xcode&lt;/li&gt;
&lt;li&gt;Press enter to run the command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now you should be able to run it. You will note that when you open this version of Xcode, the Terminal will open too, but don’t close Terminal because it will close the Xcode too.&lt;/p&gt;

</description>
      <category>xcode</category>
      <category>monterey</category>
      <category>xcode13</category>
      <category>xcode12</category>
    </item>
    <item>
      <title>Improving Remote Working (aka WFH) Experience</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Fri, 08 Apr 2022 17:15:01 +0000</pubDate>
      <link>https://forem.com/staceypyee/improving-remote-working-aka-wfh-experience-1hjp</link>
      <guid>https://forem.com/staceypyee/improving-remote-working-aka-wfh-experience-1hjp</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AqTNzYXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/8000/0%2ALCFDu1UA1FyiZ7hu" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AqTNzYXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/8000/0%2ALCFDu1UA1FyiZ7hu" alt="Photo by [Jason Strull](https://unsplash.com/@jasonstrull?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)" width="880" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Highlights of this passage: &lt;strong&gt;Actual challenges in reality, Suggestions on improving our remote working experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You may jump straight to those sections if you just want to read those points.&lt;/p&gt;

&lt;p&gt;It has always been &lt;strong&gt;my dream&lt;/strong&gt; to work remotely since I joined the tech field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ltdvMm6m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/7776/0%2AhnXCiYxTKj6c9l7I" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ltdvMm6m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/7776/0%2AhnXCiYxTKj6c9l7I" alt="Photo by [Sonja Langford](https://unsplash.com/@sonjalangford?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Time = Loyalty? Time = Quality Work?
&lt;/h2&gt;

&lt;p&gt;I don’t believe that selling my precious time to a company will show my loyalty and good quality of work. Clocking in and out on time (or OT is an even better idea to some people), staying at the same place, pretending that I’m occupied with jobs even when I have completed my work. These just don’t make sense to me, &lt;strong&gt;AT ALL&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Imaginations and Dreams
&lt;/h2&gt;

&lt;p&gt;I think &lt;strong&gt;a cozy environment can help to stimulate ideas&lt;/strong&gt;. Thus, I don’t really like sticking to a place for too long, especially when brainstorming is needed. I would dream of cafe hopping, working from different environments from now and then.&lt;/p&gt;

&lt;p&gt;There is a saying “&lt;strong&gt;the best travel mode is to live with local people”&lt;/strong&gt;, then you will be able to experience their actual lives and cultures. Wow, sounds cool, right? I even dream of renting a place with good internet connectivity in any of my interested cities, working in the daytime and experiencing life like a local after work (or whichever timing which suits the timezone), just like any digital nomad would do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote: Office Not Required
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://basecamp.com/books/remote"&gt;&lt;strong&gt;REMOTE: Office Not Required&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I came to this book and it is just like gospel to me!&lt;/p&gt;

&lt;h2&gt;
  
  
  Pandemic Strikes Malaysia
&lt;/h2&gt;

&lt;p&gt;Just before I could take any actions, Covid-19 strikes and the whole world is impacted. In 2020, Movement Control Order (MCO) was declared in Malaysia, and just like most of the countries in the world, we were on lockdown. Just a few days before MCO was declared, my company had already declared that we will be working from home until further notice.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;“my dreams have finally come true”&lt;/strong&gt;. My company still practises work from home(WFH) or hybrid mode even after MCO was lifted. &lt;/p&gt;

&lt;h2&gt;
  
  
  My Sharing
&lt;/h2&gt;

&lt;p&gt;I’m &lt;strong&gt;not going to focus on the pros and cons of working remotely&lt;/strong&gt; here, as there is a handful of information available online. I’m just going to share about &lt;strong&gt;my WFH experience for the past 2 years and my two cents&lt;/strong&gt; towards this working mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Excitements
&lt;/h2&gt;

&lt;p&gt;I was truly excited at the very beginning. Wow! we can finally&lt;br&gt;
a. save up commute time (super bad jam in KL)&lt;br&gt;
b. sleep better (my company emphasizes work life balance, of course)&lt;br&gt;
c. work according to our perfect timing (the best performance timing differs)&lt;br&gt;
d. have more quality time for family and overselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actual challenges in reality
&lt;/h2&gt;

&lt;p&gt;After a week or two, I started to face challenges at work.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. My task was delayed as I couldn’t get enough responses from team member(s) on time&lt;/strong&gt;.
&lt;/h3&gt;

&lt;p&gt;This is totally understandable as some members were involved in multiple projects.&lt;/p&gt;

&lt;p&gt;When we are &lt;strong&gt;working physically in an office&lt;/strong&gt;, we can easily tell if one is really busy with something, going for a break or we can just simply walk to our colleagues and ask for a quick confirmation whenever there is a chance.&lt;/p&gt;

&lt;p&gt;We can hardly know their availability precisely when working remotely. Regardless of the urgency of our enquiries, quick answer or so, &lt;strong&gt;all we can do is just to WAIT&lt;/strong&gt;. Waiting for a response online or waiting for others to answer a phone call. As it turns out, I have to &lt;strong&gt;re-adjust my time to complete the task on time.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Miscommunication and spending too much time communicating.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Of course, we know that &lt;strong&gt;video or conference calls could be the most straightforward solution to reduce miscommunication&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, internet connectivity can be unstable and causes poor video calls sometimes. Besides, some colleagues, especially those who are involved in multiple projects can hardly spare extra time for any video call as their schedules are already packed with scheduled calls and meetups.&lt;/p&gt;

&lt;p&gt;Therefore &lt;strong&gt;writing could be the best option left&lt;/strong&gt;. Team members can just read and reply to you when they are available.&lt;/p&gt;

&lt;p&gt;There was one experience when I needed some technical help and a second opinion from my team. So I spent time writing up the question, double checking it and posting it. Instead of getting an answer, I received even more questions from the team. Spending time answering their clarifications and waiting for their next responses has eaten up so much time! Eventually, I couldn’t get the help on time as the delivery time had reached. I was a little discouraged.&lt;/p&gt;

&lt;p&gt;After a few months or nearly a year working from home, I started to&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Get bored as there is less interaction between colleagues.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When working physically in the office, we can just simply grab some snacks, walk around and chat with anyone in the pantry or at their seats. We can even go for lunch together!&lt;/p&gt;

&lt;p&gt;We can only interact more closely with those who work on the same project when it comes to working remotely.&lt;/p&gt;

&lt;p&gt;As it turns out, I realised that I don’t even know most of the new joiners. Less fun, less joy.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Start practising an unhealthy lifestyle unconsciously.
&lt;/h3&gt;

&lt;p&gt;With some scenarios mentioned above, I ended up having longer working hour unconsciously.&lt;/p&gt;

&lt;p&gt;I spent more time on communications: reading and writing messages, understanding and clarifying requirements, attending sprint plannings, daily stand-ups, backlog grooming, retrospective, and some extra technical discussions online. It could be &lt;strong&gt;even more tiring as everything has to be done online via video calls or any communication application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Furthermore, working as a mobile application developer, my programming tasks &lt;strong&gt;can only be completed on a computer.&lt;/strong&gt; As you can imagine, I could have been &lt;strong&gt;keeping the same posture, staring at the same screen, typing and clicking at the same spot, with a high level of concentration for long hours.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, the entire communication or meeting process can take up the whole working day. In order to deliver my work within the given time frame, I somehow tend to put in extra time to work.&lt;/p&gt;

&lt;p&gt;Unlike those days when we are working physically in the office, there is an office closure time. Everyone must leave the office and travel home physically and that’s the end of our working day.&lt;/p&gt;

&lt;p&gt;But now, &lt;strong&gt;there is no clear cut of time&lt;/strong&gt;. Moreover, we cannot travel anywhere during lockdowns. Unless we force ourselves to do so, most of us tend to continue working even after working hours.&lt;/p&gt;

&lt;p&gt;I believe you can imagine &lt;strong&gt;what the outcomes are after practising this for more than one year.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it just your company? Is your company really that bad?
&lt;/h2&gt;

&lt;p&gt;Hey, please don’t get me wrong. &lt;strong&gt;I’m not complaining about my company.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In fact, as a tech company, remote working mode and flexible clock in time already exist since I first joined the company. As long as we are responsive and able to deliver our work with quality on time, the management does not really bother about the process.&lt;/p&gt;

&lt;p&gt;However, I believe this is the &lt;strong&gt;first ever experience for the whole company to switch to 100% remote working mode&lt;/strong&gt; in such a short notice period. Just note that not everyone, including myself, do not have prior experience of working remotely.&lt;/p&gt;

&lt;p&gt;So it is normal and it is &lt;strong&gt;a good chance for us to grow&lt;/strong&gt; and get used to it.&lt;/p&gt;

&lt;p&gt;We are definitely having a better experience compared to 2 years ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working remotely, aka WFH = Employee is lazy
&lt;/h2&gt;

&lt;p&gt;I once saw a post from a local media agency, asking everyone to share their opinions on &lt;strong&gt;working from home&lt;/strong&gt; in a social media post.&lt;/p&gt;

&lt;p&gt;To my surprise, I saw an employer’s comment, which sounds something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Working from home is just an excuse for the employees to be lazy. Working from home means doing nothing at home, but I need to pay them. They literally do nothing, so can I just not pay them?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Woah! I just can’t believe what I have just read!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This leads to the next phenomena in reality&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Companies and teams are not remote working friendly and refuse to change.
&lt;/h3&gt;

&lt;p&gt;Some companies or shops just cannot operate as usual as too many processes are still in &lt;strong&gt;manual methods, bound to a specific person or departments.&lt;/strong&gt; Too many &lt;strong&gt;documents are only accessible in their physical company or shops.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When MCO is declared, they can hardly survive.&lt;/p&gt;

&lt;p&gt;As a result, some traditional businesses or companies that failed to change cannot survive after the lockdowns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suggestions on improving our remote working experience
&lt;/h2&gt;

&lt;p&gt;So if you really wish to improve the quality of your remote working experience, here are my 2 cents:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Company / Team Level:&lt;/em&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Get your company or team ready for remote working — State task requirements clearly and make it accessible online
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier in the last item under actual challenges, some companies are not ready for remote working.&lt;/p&gt;

&lt;p&gt;Make good use of the technology, &lt;strong&gt;get the documents available and accessible online&lt;/strong&gt;. You may consider using systems like Google Workspace or Microsoft Sharepoint. Try out some project management tools available in the market. Some software did offer free access with limited access, purchase only if you need further support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For text communication purposes&lt;/strong&gt;, you may try tools like Slack, Discord and more. Most of these applications are available on desktop and phone. Not only that, the chat can be put into thread. Users can easily find the chat record and refer to a specific topic easily within a chat or topic thread.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Organise online or offline activities for your team members
&lt;/h2&gt;

&lt;p&gt;To keep a good relationship among the team members, you may organise activities such as Townhall, online quiz games like Jackbox Party and so on. Lately, there are even softwares with virtual office like Gather.&lt;/p&gt;

&lt;p&gt;It is even better if your team can meet physically sometimes. Organise trips, sports activities, team lunches and small gatherings.&lt;/p&gt;

&lt;p&gt;Keep everyone connected!&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Set a mutual time slot for technical help or discussions
&lt;/h2&gt;

&lt;p&gt;Besides daily stand ups and other rituals to get the progress updates and planning, you may set &lt;strong&gt;an agreeable time slot for ad hoc discussion&lt;/strong&gt;. Unless there is something very urgent on the plate, everyone MUST attend it.&lt;/p&gt;

&lt;p&gt;The whole idea is to &lt;strong&gt;pre-book everyone’s time&lt;/strong&gt; regardless of your time zone, working practice or working hours.&lt;/p&gt;

&lt;p&gt;For example, the programming team may set a 1 hour slot at 2pm (GMT+8) each day. It could be 3pm for one of your team members who is working from Korea.&lt;/p&gt;

&lt;p&gt;When everyone meets online at the agreed time, each can &lt;strong&gt;take turns to voice their issues&lt;/strong&gt;. If there are more than one issues, &lt;strong&gt;team members can decide which issue to be prioritised&lt;/strong&gt; within that hour or they can &lt;strong&gt;arrange for another time for the remaining issues&lt;/strong&gt;. If there is no issue from anyone, the team may dismiss earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Individual Level
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Improve writing skills&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Please don’t get me wrong, &lt;strong&gt;it is not about the language proficiency level.&lt;/strong&gt; You need not be excellent at a language, as long as it is understandable, you are good.&lt;/p&gt;

&lt;p&gt;Here are some tips:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;a. Know your audience —&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Avoid jargon&lt;/strong&gt; if they are not from your field, for instance avoid technical terms when you are communicating with a business team. Use Layman’s terms instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand one’s behaviour and adjust your communication accordingly&lt;/strong&gt;. Some people are born to be fast readers. They enjoy reading and are able to read and understand long passages in just a blink of an eye. On the other hand, reading can be a disaster to certain people. Some can understand better with illustrations and sketches. Try to look for a better approach, you may see the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;b. Provide enough context —&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Give clear and sufficient context to the receiver in your writing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt; : You are trying to ask for help (technical or programming questions)from someone in your company, who is not working on the same project with you.&lt;/p&gt;

&lt;p&gt;Before jumping straight to your questions, &lt;strong&gt;please explain briefly&lt;/strong&gt; on&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;i. Your goal or what you are trying to achieve:&lt;/strong&gt; Give some background or the project requirements related to your question), &lt;br&gt;
&lt;strong&gt;ii. Your blocker or issue&lt;/strong&gt;, &lt;br&gt;
&lt;strong&gt;iii. Your attempts&lt;/strong&gt;: What solutions you have tried and outcomes of the attempt(attach with screenshots or error logs if necessary).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This will save everyone’s time.&lt;/strong&gt; Less clarification is needed and you can get the answers other than those possible ways that you have tried on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;c. KISS — Keep It Simple and Short&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine that you have a packed schedule and you have spare 30 mins to address an issue. Someone wrote you a 3 page long message. For sure, you will not prioritise this issue as you won’t be able to solve it in 30mins time.&lt;/p&gt;

&lt;p&gt;We need to &lt;strong&gt;find a balance for not being long winded and not being too brief with no context&lt;/strong&gt; till no one can understand what is going on without further clarifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Expect delays and plan ahead&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Do expect delays on responses. Plan ahead if you know that it is urgent. &lt;strong&gt;Give a dateline with enough buffer time for others to respond.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you need to approach certain people, you may check their schedule beforehand. Say if your company is using Google Calendar, check their schedule.&lt;/p&gt;

&lt;p&gt;If a discussion session is needed, propose a discussion time slot with the discussion items. So that they can go through and prepare accordingly before the meetup.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Prepare your working environment
&lt;/h2&gt;

&lt;p&gt;Every individual is unique.&lt;/p&gt;

&lt;p&gt;Some people &lt;strong&gt;can only concentrate after performing certain rituals&lt;/strong&gt; like dressing up or making themselves a cup of good coffee or tea. If this is you, get yourself dressed up even if you are working from home! Go make yourself a good coffee!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a working environment for yourself.&lt;/strong&gt; Some may have their own dedicated room or dedicated desk. Some prefer to work in a cafe or co-working space. Some need background music to concentrate.&lt;/p&gt;

&lt;p&gt;If you are staying with your family, you may &lt;strong&gt;discuss your working hours with your family members&lt;/strong&gt;. So that you can stay concentrated without disturb.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Get a good internet package and stay connected.
&lt;/h2&gt;

&lt;p&gt;Imagine you are having a video call with your team members and you keep disconnecting during a presentation due to unstable internet connections, you are wasting everyone’s time.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Be responsive and responsible
&lt;/h2&gt;

&lt;p&gt;We are all adults. After all, &lt;strong&gt;everything is based on trust.&lt;/strong&gt; Be responsive to emails and messages during working hour (or any minimum mutual working hour at least). Read and respond to messages.&lt;/p&gt;

&lt;p&gt;If you know there is an internet service interruption beforehand, proceed to a nearby cafe or stay connected with your phone data plan. Inform your team at least and arrange accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Set a cut off time.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Working is not the only reason that we live for.&lt;/strong&gt; We have families and pastime interests. If you have a tendency of overworking, set an alarm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leave your working desk and go get some life.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Work life balance.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Beware of your sitting posture and working behaviour
&lt;/h2&gt;

&lt;p&gt;After working from home for a year, I always have a headache and it is getting severe. From the symptoms that I had, &lt;strong&gt;I thought it could be migraine&lt;/strong&gt;. Eventually, I decided to seek medical aid.&lt;/p&gt;

&lt;p&gt;Long story short, I went for physiotherapy sessions. My condition improved significantly after a few sessions and daily exercises. So here are are some tips:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;a. Get a good chair, table and tools that supports a good posture:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rkyL4WkU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2A3abft5332YzM21F4bgbjDw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rkyL4WkU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2A3abft5332YzM21F4bgbjDw.jpeg" alt="Image Source: [https://www.cmd-ltd.com/advice-centre/ergonomics/ergonomic-office-posture/](https://www.cmd-ltd.com/advice-centre/ergonomics/ergonomic-office-posture/)" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good doesn’t mean that it must be expensive. Some expensive ergonomic chairs don’t really come with good back support. Get a chair that can &lt;strong&gt;support your back with no further bending&lt;/strong&gt;. If there are wheels on the chair, &lt;strong&gt;make sure that it is stable and not moving too much&lt;/strong&gt; so that your sitting posture can be maintained.&lt;/p&gt;

&lt;p&gt;When we are typing or using a mouse, &lt;strong&gt;make sure that&lt;/strong&gt; &lt;strong&gt;our elbow and wrist are supported&lt;/strong&gt;. The elbow should be in L shape to the supported chair handle or desk. Our wrist should be in a comfortable position. We will bend our wrist when the mouse or keyboard is too high or too low. Eventually, this position will cause numbness and pain.To achieve this, you may get a chair or table with adjustable height. You can also get a &lt;a href="https://www.ikea.com/my/en/p/barberget-pull-out-keyboard-shelf-80494941/"&gt;keyboard tray&lt;/a&gt; according to your condition.&lt;/p&gt;

&lt;p&gt;Next, try to &lt;strong&gt;keep our eyes straight&lt;/strong&gt;. You may adjust your monitor height. As an app developer, I bought a table phone holder as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_R-igweN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ANbujcYM96BjQ_NDAPbnGNw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_R-igweN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ANbujcYM96BjQ_NDAPbnGNw.jpeg" alt="Image Source: [https://www.baseus.com.cn/product/baseus-telescopic-desktop-phone-holder-for-tablet-pad-desktop-holder-stand-for-cell-phone-table-holder-mobile-phone-stand-mount.html](https://www.baseus.com.cn/product/baseus-telescopic-desktop-phone-holder-for-tablet-pad-desktop-holder-stand-for-cell-phone-table-holder-mobile-phone-stand-mount.html)" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get a foot rest if necessary. If your leg is hanging in the air, please get a footer. Some people may get swollen legs after hanging in the air for too long.&lt;/p&gt;

&lt;p&gt;b. &lt;strong&gt;Move around and do some stretching every 30mins to 1 hour&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I know this sounds like &lt;strong&gt;&lt;em&gt;Mission Impossible&lt;/em&gt;&lt;/strong&gt; to us whenever we are so focused on work. However, please bear in mind that moving and exercise is human’s nature by default. &lt;strong&gt;Lack of exercise is one of the major root causes of many modern lifestyle diseases.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Believe me, a &lt;strong&gt;15 mins stretching per day&lt;/strong&gt; at the end of the day ease my neck and stiff shoulders effectively. Of course, you can do more.&lt;/p&gt;

&lt;p&gt;I actually saw &lt;strong&gt;more and more people having the side effects of a bad posture and unhealthy working lifestyle&lt;/strong&gt; lately. If you realise, at least in Malaysia, more and more chiropractic and physiotherapy centres have been set up in the past 5 years.&lt;/p&gt;

&lt;p&gt;Move your body before it is too late!&lt;/p&gt;

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

&lt;p&gt;There is no perfect working mode. There are pros and cons for every working mode. It is important for us to prepare ourselves to adapt to each scenario.&lt;/p&gt;

&lt;p&gt;Feel free to share your thoughts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Side Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today is my first day of working from the office by schedule after working remotely for 2 years plus. Malaysia has reopened our borders starting 1 April 2022. We will be in hybrid mode from now on.&lt;/p&gt;

&lt;p&gt;Haha! I have been writing this since last Sunday to prepare myself mentally for today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cheers!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Happy exploring and stay safe!&lt;/p&gt;

</description>
      <category>workfromhome</category>
      <category>workremotely</category>
      <category>worklifebalance</category>
      <category>remote</category>
    </item>
    <item>
      <title>Add Google Calendar in Notion</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Fri, 04 Mar 2022 18:25:20 +0000</pubDate>
      <link>https://forem.com/staceypyee/add-google-calendar-in-notion-37dn</link>
      <guid>https://forem.com/staceypyee/add-google-calendar-in-notion-37dn</guid>
      <description>&lt;p&gt;Most of us would like to save our time by reusing the same calendar. So that we just need to add or edit event at a place and get everything synced.&lt;/p&gt;

&lt;p&gt;Based on the official tutorial from Notion, it can be achieved with the following steps as mentioned as followed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/Embed-Google-Calendar-f1dd42e7071d495ca6764d03c1d2972e"&gt;Embed Google Calendar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jpg-Cx1W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AQY7uDWj6vZhtjYdi" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jpg-Cx1W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AQY7uDWj6vZhtjYdi" alt="" width="880" height="586"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by Hello I'm Nik on Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hmm, unfortunately this is the &lt;strong&gt;limitation&lt;/strong&gt;. The pre-requisite for the above to work — you have to compromise and make the calendar as  &lt;strong&gt;public&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That being said, anyone with the calendar link will be able to see all your event details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Question:
&lt;/h3&gt;

&lt;p&gt;What if the data is so &lt;strong&gt;important&lt;/strong&gt; to me that I only want to keep it  &lt;strong&gt;private&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;After researching, this is the best option I have gotten thus far.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indify.co/"&gt;Indify - Notion Widgets&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to add Google Calendar with Indify?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Sign up or with your intended email.&lt;/li&gt;
&lt;li&gt;After sign up or login successfully, you should be able to view the widgets available to you. &lt;strong&gt;Choose Google Calendar.&lt;/strong&gt; Give a title to your widget.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jEF0cuB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFbSwkq-NQ057sebH0ikadQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jEF0cuB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFbSwkq-NQ057sebH0ikadQ.png" alt="" width="880" height="517"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Screenshot of Calendar widget&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your intended calendar in *&lt;em&gt;Select Calendar *&lt;/em&gt; field.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6yKRn0sP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Au7rkoAFe6Rm4wEwgozCnKw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6yKRn0sP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Au7rkoAFe6Rm4wEwgozCnKw.png" alt="Screenshot of Indify Calendar widget" width="880" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P/S:&lt;/strong&gt; For free user, you can only select one calendar for a widget, with other usage limitations. Upgrade to Pro if you wish to unlocked those features.The most useful feature might be adding multiple calendar from your account.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Copy the link&lt;/strong&gt; of your Google Calendar widget.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proceed back to Notion, and &lt;strong&gt;create embed&lt;/strong&gt; in your desired Notion page.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s all folks~&lt;/p&gt;

&lt;p&gt;Happy Exploring&lt;/p&gt;

</description>
      <category>indify</category>
      <category>notion</category>
      <category>googlecalendar</category>
    </item>
    <item>
      <title>Installing Cocoapods on M1 Macbook Air, Big Sur</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Sat, 28 Aug 2021 18:07:47 +0000</pubDate>
      <link>https://forem.com/staceypyee/installing-cocoapods-on-m1-macbook-air-big-sur-h0l</link>
      <guid>https://forem.com/staceypyee/installing-cocoapods-on-m1-macbook-air-big-sur-h0l</guid>
      <description>&lt;p&gt;I have just gotten the new device around 2 weeks ago.&lt;/p&gt;

&lt;p&gt;As a mobile developer, I try to compile my Xcode project after installing &lt;a href="https://cocoapods.org/" rel="noopener noreferrer"&gt;Cocoapods&lt;/a&gt; with &lt;code&gt;sudo gem install cocoapods&lt;/code&gt; to the device.&lt;/p&gt;

&lt;p&gt;To my surprise, &lt;code&gt;pod install&lt;/code&gt; does not work as expected this time.&lt;/p&gt;

&lt;h1&gt;
  
  
  Errors
&lt;/h1&gt;

&lt;p&gt;I ended up seeing something as such&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LoadError — dlopen(/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.0/lib/ffi_c.bundle, 0x0009): missing compatible arch in /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.0/lib/ffi_c.bundle — /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.0/lib/ffi_c.bundle
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require’
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require’
/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.0/lib/ffi.rb:6:in
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Solutions Available:
&lt;/h1&gt;

&lt;p&gt;I have found &lt;strong&gt;3 solutions&lt;/strong&gt; through the internet so far.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Open your Terminal under Rosetta and run &lt;code&gt;sudo gem install ffi&lt;/code&gt; in terminal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoh1c040n94ygqddntbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoh1c040n94ygqddntbx.png" alt="Open Finder &amp;gt; Applications &amp;gt; Utilities &amp;gt; Terminal &amp;gt; Right Click &amp;gt; Get Info &amp;gt; Open Using Rosetta"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Open Finder &amp;gt; Applications &amp;gt; Utilities &amp;gt; Terminal &amp;gt; Right Click &amp;gt; Get Info &amp;gt; Open Using Rosetta&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Run these lines&lt;br&gt;
&lt;code&gt;sudo arch -x86_64 gem install ffi&lt;/code&gt;&lt;br&gt;
&lt;code&gt;arch -x86_64 pod install&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Install Cocoapods with Homebrew.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  My Pick
&lt;/h1&gt;

&lt;p&gt;I tested out for &lt;strong&gt;option 2&lt;/strong&gt; as I’m not too familiar with &lt;a href="https://support.apple.com/en-my/HT211861" rel="noopener noreferrer"&gt;Rosetta&lt;/a&gt; at first.&lt;/p&gt;

&lt;p&gt;It works.&lt;/p&gt;

&lt;p&gt;I eventually decided to give &lt;strong&gt;option 3&lt;/strong&gt; a try ,which is to &lt;strong&gt;install Cocoapods from Homebrew.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why?
&lt;/h1&gt;

&lt;p&gt;As more and more developer tools start to support M1 natively, I would go for a native option, unless there isn’t any better option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnvibnio2rbomnxerh4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnvibnio2rbomnxerh4g.png" alt="https://formulae.brew.sh/formula/cocoapods"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As it turns out, Apple Silicon (Big Sur) is supported with &lt;strong&gt;stable&lt;/strong&gt; version!&lt;/p&gt;

&lt;h1&gt;
  
  
  Finale
&lt;/h1&gt;

&lt;p&gt;In my opinion, &lt;em&gt;option 3&lt;/em&gt; is the cleanest solution thus far!&lt;/p&gt;

&lt;p&gt;It works perfectly fine.&lt;/p&gt;

&lt;p&gt;Happy exploring!&lt;/p&gt;

</description>
      <category>m1mac</category>
      <category>xcode</category>
      <category>cocoapods</category>
      <category>homebrew</category>
    </item>
    <item>
      <title>A Pragmatic Philosophy of a Programmer</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Mon, 23 Mar 2020 05:00:25 +0000</pubDate>
      <link>https://forem.com/staceypyee/a-pragmatic-philosophy-of-a-programmer-7ki</link>
      <guid>https://forem.com/staceypyee/a-pragmatic-philosophy-of-a-programmer-7ki</guid>
      <description>&lt;p&gt;Programming is somewhat similar to our life journey. There is no absolute answer for every situation. We learn and grow by time and experiences.&lt;br&gt;
Take a step back from packed schedules and deadlines, rethink what is truly essential for us. That is how philosophy comes into play.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It’s your life —&lt;br&gt;
With the convenience brought by technology, we can decide how we work, how we live. To a certain extent, who we want to be. As a programmer, care about your craft. Think about what legacy you would like to leave behind. It’s all about your life and your personal growth. Our crafts reflect who we are. Be proactive!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The cat ate my source code —&lt;br&gt;
单丝不成线，独木不成林&lt;br&gt;
(A single thread can’t make a cord nor a single tree a forest. — Chinese Proverb)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No one can succeed without a team.&lt;br&gt;
It is so obvious that one man show is definitely not a good idea if we would like to succeed.&lt;br&gt;
No one is perfect and no one has all knowledge with oneself. We need to work in a team. Be frank, admit our weakness, putting our strength together. Trust is the simplest yet crucial element to bond everyone in a team. Create an environment where you can say your mind, present your ideas comfortably.&lt;br&gt;
Don’t blame each other or give lame excuses when things go wrong. Provide workable and reasonable solutions instead. Take our responsibilities, be reliable and trustworthy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Software Entropy —&lt;br&gt;
Just imagine that we are a group of people sailing in the same boat when we work on the same project. A leak on a boat which is similar to wrong decisions or code made in a project (aka software rot or technical debt), leads everyone into danger.&lt;br&gt;
It is our responsibility to fix it. Do not keep broken windows unrepaired even if the deadline is near. If it is not a serious one, flag it at least and fix it later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stone soup and boiled frogs —&lt;br&gt;
Most of us tend to stay in our comfort zones in most of the time, without realizing that changes can help us to improve. Think out of the box and aware with the situations around. Be a catalyst for changes. Talk wisely and make changes gradually. We will grow and share the fruits one day.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good Enough Software —&lt;br&gt;
画蛇添足 (Draw legs on snake) ~ Chinese Idiom&lt;br&gt;
&lt;a href="https://www.chinesereadersguild.com/chinese-idiom-story-hua-she-tian-zu/"&gt;https://www.chinesereadersguild.com/chinese-idiom-story-hua-she-tian-zu/&lt;/a&gt;&lt;br&gt;
Meaning: Ruining a thing by adding something unnecessary&lt;br&gt;
Identify the expectation based on timeline and the resources given. Give the best for programmers, end users and future code maintainers. Nothing is always perfect. We need to know when to stop. Do not kill the good programme with over refinement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your Knowledge Portfolio —&lt;br&gt;
An investment in knowledge always pays the best interest. ~ Benjamin Franklin&lt;br&gt;
Don’t put all your eggs in one basket ~ Idiom&lt;br&gt;
Invest regularly with diversities. Grab opportunities to learn under different environments. Learn a new language, try to understand the reason one paradigm is being introduced. It may enlighten you to think out of the box. Read technical and non technical books. Try to be skeptical and analyze what you have heard or read about.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Communications —&lt;br&gt;
A great idea without effective communications is like an orphan. Know your audience, listen to and involve them in the conversations. Choose the right moment and be clear on what you are trying to convey. Keep a good documentation for reference.&lt;br&gt;
Please bear in mind that becoming a pragmatic programmer is a process. It takes time and persistence to bear fruits.&lt;br&gt;
Happy exploring!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;P/S: A review from The Pragmatic Programmer, 20th Anniversary Edition&lt;/p&gt;

</description>
      <category>programming</category>
      <category>pragmaticprogramming</category>
      <category>coding</category>
      <category>lifelessons</category>
    </item>
    <item>
      <title>Main Ingredients for Starting a New Android Native Project (Checklist)</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Thu, 10 Jan 2019 07:12:12 +0000</pubDate>
      <link>https://forem.com/staceypyee/main-ingredients-for-starting-a-new-android-native-project-checklist-4bll</link>
      <guid>https://forem.com/staceypyee/main-ingredients-for-starting-a-new-android-native-project-checklist-4bll</guid>
      <description>&lt;p&gt;[Initial publish date: 20 Sept 2018]&lt;/p&gt;

&lt;p&gt;P/S: This post has been delayed from time to time. It’s better to have an ugly baby at first, to be edited from time to time&lt;/p&gt;

&lt;p&gt;You may jump to *&lt;em&gt;Fundamental / Basic of Android App *&lt;/em&gt; straight&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--orzPGJgr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A6GY_k3x00WokOiYPxUdyOA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--orzPGJgr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A6GY_k3x00WokOiYPxUdyOA.jpeg" alt=""&gt;&lt;/a&gt;Nasi Lemak, famous all-time cuisine (breakfast, lunch or even dinner) for Malaysian&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Nasi_lemak"&gt;&lt;strong&gt;&lt;em&gt;Nasi lemak&lt;/em&gt;&lt;/strong&gt; (literally means oily or fatty rice in Malay language)&lt;/a&gt;*, a well-known all-time &lt;a href="https://en.wikipedia.org/wiki/Malaysian_cuisine"&gt;Malaysian cuisine&lt;/a&gt; with &lt;strong&gt;price ranged from RM2&lt;/strong&gt; (You probably can get it with a lower price at &lt;em&gt;kampung, which means&lt;/em&gt; village in Malay language) &lt;strong&gt;to RM80 per serving&lt;/strong&gt; , based on its ingredients, specialities and the location of selling it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Nasi_lemak"&gt;Nasi lemak - Wikipedia&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Basic Ingredients of Nasi Lemak
&lt;/h4&gt;

&lt;p&gt;In order for a dish to be called as &lt;strong&gt;&lt;em&gt;Nasi Lemak&lt;/em&gt;&lt;/strong&gt; , it &lt;strong&gt;MUST&lt;/strong&gt; consists of :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fragrance rice cooked with coconut milk and Pandan leaves&lt;/li&gt;
&lt;li&gt;Cucumber slices&lt;/li&gt;
&lt;li&gt;Egg&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Anchovies_as_food#Uses"&gt;Ikan bilis&lt;/a&gt; (which means anchovies in Malay language)&lt;/li&gt;
&lt;li&gt;Fried peanut&lt;/li&gt;
&lt;li&gt;Sambal (Chili paste, normally with different recipes)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://en.wikipedia.org/wiki/Nasi_lemak#Variations"&gt;Variation of Nasi Lemak&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Nasi Lemak&lt;/em&gt;&lt;/strong&gt; is mentioned as a traditional Malay dish. As a result of the historical &lt;a href="https://en.wikipedia.org/wiki/Demographics_of_Malaysia#Non-Bumiputras"&gt;migrations&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Malaysia#History"&gt;colonisations&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Demographics_of_Malaysia"&gt;multiracial and multicultural&lt;/a&gt; environment of Malaysia, &lt;strong&gt;&lt;em&gt;Nasi Lemak&lt;/em&gt;&lt;/strong&gt; now comes in many &lt;a href="https://en.wikipedia.org/wiki/Nasi_lemak#Variations"&gt;variations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LdMi-ZKm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A2rUpEaNGfbCWId_lKQjhfQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LdMi-ZKm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A2rUpEaNGfbCWId_lKQjhfQ.jpeg" alt=""&gt;&lt;/a&gt;Photo source: &lt;a href="http://amazingalorsetar.com/en/food/restaurant/nasi-lemak-ong-1"&gt;&lt;/a&gt;&lt;a href="http://amazingalorsetar.com/en/food/restaurant/nasi-lemak-ong-1"&gt;http://amazingalorsetar.com/en/food/restaurant/nasi-lemak-ong-1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the &lt;strong&gt;&lt;em&gt;Nasi Lemak&lt;/em&gt;&lt;/strong&gt; stalls come with their very own Sambal recipes, specialities or additional dishes for the customer to add on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Customer can always choose to add&lt;/em&gt;&lt;/strong&gt; chicken, fish, beef, mutton, seafood, sotong (squid in Malay language)&lt;/p&gt;

&lt;p&gt;and EVEN…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;LOBSTER!!&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;to their very basic&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Nasi Lemak.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The price varies depending on customer’s selection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--94O3MezN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AGDg_Xrnb42FAKr68jcGl3g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--94O3MezN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AGDg_Xrnb42FAKr68jcGl3g.jpeg" alt=""&gt;&lt;/a&gt;Nasi Lemak Lobster, photo from &lt;a href="https://www.misstamchiak.com/lawa-bintang/"&gt;&lt;/a&gt;&lt;a href="https://www.misstamchiak.com/lawa-bintang/"&gt;https://www.misstamchiak.com/lawa-bintang/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W0jzD-p0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A6mdi7UUAMamZWrdB." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W0jzD-p0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A6mdi7UUAMamZWrdB." alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@benkolde?utm_source=medium&amp;amp;utm_medium=referral"&gt;Ben Kolde&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Similarly, building an Android app from stretch is like cooking &lt;strong&gt;&lt;em&gt;Nasi Lemak&lt;/em&gt;&lt;/strong&gt; with the &lt;strong&gt;&lt;em&gt;basic ingredients&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A developer can always customise and add features to the app to make it special and unique.&lt;/p&gt;

&lt;p&gt;Let’s take a look on &lt;strong&gt;what we shall take into considerations&lt;/strong&gt; while &lt;strong&gt;building an Andorid app from scratch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XBk1b-Pe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AyVgLDZ1OkOnxjdqs." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XBk1b-Pe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AyVgLDZ1OkOnxjdqs." alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@firmbee?utm_source=medium&amp;amp;utm_medium=referral"&gt;William Iven&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fundamental / Basic of Android App
&lt;/h3&gt;

&lt;h4&gt;
  
  
  (A) App Settings
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Programming language selection&lt;/strong&gt;
&lt;a href="https://kotlinlang.org/"&gt;Kotlin&lt;/a&gt;* or Java?
Personally, I would prefer to have &lt;strong&gt;&lt;em&gt;Kotlin. Why? let’s see my post posted earlier&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://dev.to/staceypyee/the-road-not-taken--kotlin-or-java--38j8"&gt;The Road Not Taken? — Kotlin or Java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P/S: * Developer can make a decision based on project timeline, familiarity to the language, further technical supports from third party (eg: client SDK)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Package name and app name&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Build target and backward compatibility&lt;/li&gt;
&lt;li&gt;Gradle (configuration and dependencies)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screen Orientation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backward compatibility (Android X)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;(B) View / Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Style&lt;/li&gt;
&lt;li&gt;Icons and Assets (Prototype), icons, font,
color code: primary, accent…..&lt;/li&gt;
&lt;li&gt;Data binding&lt;/li&gt;
&lt;li&gt;Placeholder&lt;/li&gt;
&lt;li&gt;Keyboard interaction&lt;/li&gt;
&lt;li&gt;Input Validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;(C) App Flow / Navigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How would these affects the code architecture&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drawer Navigation&lt;/li&gt;
&lt;li&gt;Bottom Navigation&lt;/li&gt;
&lt;li&gt;Up Navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;(D) Internet Connections&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offline state — What to be displayed and how shall we handle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;(E) Default Error Messages (Error and Exceptions)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(F) Analytics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crashlytics/ Fabric&lt;/li&gt;
&lt;li&gt;Google Analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(G) Third- party libraries&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Photo loading library&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(H) Design Pattern and App Architecture&lt;/p&gt;

&lt;p&gt;Life cycle (low memory etc)&lt;/p&gt;

&lt;p&gt;Architecture/ Skeleton&lt;/p&gt;

&lt;p&gt;MVC&lt;/p&gt;

&lt;p&gt;Activity / Fragment&lt;/p&gt;

&lt;h3&gt;
  
  
  Add - Ons
&lt;/h3&gt;

&lt;p&gt;(1) &lt;strong&gt;API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API call (Postman/ Paws)&lt;/li&gt;
&lt;li&gt;Mock data&lt;/li&gt;
&lt;li&gt;* API written by third party/client — Are the values and return value legit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(2) Data Storage Option&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OrmLite&lt;/li&gt;
&lt;li&gt;greenDao&lt;/li&gt;
&lt;li&gt;LiveRoom etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(3) Other features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication (Facebook etc)&lt;/li&gt;
&lt;li&gt;Push Notifications&lt;/li&gt;
&lt;li&gt;Location based feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EgFdoM3C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A1yplJq_Im1gocsf8." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EgFdoM3C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A1yplJq_Im1gocsf8." alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@jonko?utm_source=medium&amp;amp;utm_medium=referral"&gt;Jonathan Körner&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rome was not built in a day&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is always okay to have an ugly baby at first, and we build, improve, beautify on top of that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Happy exploring!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>androiddev</category>
      <category>malaysia</category>
      <category>androidappdevelopm</category>
    </item>
    <item>
      <title>The Road Not Taken? — Kotlin or Java</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Fri, 16 Mar 2018 04:46:41 +0000</pubDate>
      <link>https://forem.com/staceypyee/the-road-not-taken--kotlin-or-java--38j8</link>
      <guid>https://forem.com/staceypyee/the-road-not-taken--kotlin-or-java--38j8</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AABWR9P8aFAbIAfPZ." class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AABWR9P8aFAbIAfPZ."&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@jontyson?utm_source=medium&amp;amp;utm_medium=referral" rel="noopener noreferrer"&gt;Jon Tyson&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first &lt;strong&gt;one-million dollar question&lt;/strong&gt; that comes to every &lt;strong&gt;Android developer&lt;/strong&gt; while starting a &lt;strong&gt;new projec&lt;/strong&gt; t would be&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7y6dztwaci1uxytq1c7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7y6dztwaci1uxytq1c7.png"&gt;&lt;/a&gt;To be or not to be? &lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; or not &lt;strong&gt;Kotlin&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;There are tons of articles out there for the reasons of picking up &lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt;. Here is one of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://code.tutsplus.com/articles/java-vs-kotlin-should-you-be-using-kotlin-for-android-development--cms-27846" rel="noopener noreferrer"&gt;Java vs. Kotlin: Should You Be Using Kotlin for Android Development?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Personally, I would prefer to have  &lt;strong&gt;&lt;em&gt;Kotlin.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WHY?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; is interchangeable with Java, cleaner, more readable and &lt;a href="https://kotlinlang.org/docs/reference/null-safety.html" rel="noopener noreferrer"&gt;&lt;strong&gt;“null- safety”&lt;/strong&gt;&lt;/a&gt; feature of &lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; helps developer to &lt;strong&gt;think thoroughly before hitting NPE&lt;/strong&gt; (Null Pointer Exception).&lt;/p&gt;

&lt;p&gt;Furthermore, &lt;strong&gt;Android announced to support &lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; since May 2017!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html" rel="noopener noreferrer"&gt;Android Announces Support for Kotlin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also see the effort of &lt;strong&gt;Android team on improving Kotlin Development in Android Studio&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://android-developers.googleblog.com/2018/02/introducing-android-ktx-even-sweeter.html" rel="noopener noreferrer"&gt;Introducing Android KTX: Even Sweeter Kotlin Development for Android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not only that, Android team has actually used &lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; while announcing new features in their latest video!&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; tutorials can be found easily online!&lt;/p&gt;

&lt;p&gt;Since &lt;strong&gt;&lt;em&gt;Kotlin&lt;/em&gt;&lt;/strong&gt; is interchangeable with Java, developers can continue to proceed with Java anytime.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P/S: * Developer can make a decision based on project timeline, familiarity to the language, further technical supports from third party (eg: client SDK)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Happy exploring!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>androidappdevelopm</category>
      <category>androiddev</category>
      <category>java</category>
    </item>
    <item>
      <title>New Attempt on GitHub Pages!</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Thu, 08 Mar 2018 05:48:33 +0000</pubDate>
      <link>https://forem.com/staceypyee/new-attempt-on-github-pages--6go</link>
      <guid>https://forem.com/staceypyee/new-attempt-on-github-pages--6go</guid>
      <description>&lt;p&gt;Life is about adventures and explorations!&lt;/p&gt;

&lt;p&gt;JENG JENG~&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fOInFpft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/387/1%2AYKUkn4pXb2NmVAFHS5mtQw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fOInFpft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/387/1%2AYKUkn4pXb2NmVAFHS5mtQw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What I did?
&lt;/h3&gt;

&lt;p&gt;As usual, register fo an account, and get your email verified.&lt;/p&gt;

&lt;p&gt;Next, follow this step by step&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Step 1: Create a repository with the naming format as indicated.&lt;/em&gt;&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AosEi--t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ATRHCHuuX-hLeX5trZHzv6Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AosEi--t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ATRHCHuuX-hLeX5trZHzv6Q.png" alt=""&gt;&lt;/a&gt;Step 1 from Github pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rXKvYoh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALh4nTvPTNqG7H6teyP9VqQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rXKvYoh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALh4nTvPTNqG7H6teyP9VqQ.png" alt=""&gt;&lt;/a&gt;Warning: Do change your user name or organisation name with dash!&lt;/p&gt;

&lt;p&gt;If you need to make a change on the name, do visit &lt;a href="https://help.github.com/articles/changing-your-github-username/"&gt;https://help.github.com/articles/changing-your-github-username/&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Step 2 — 4 : Follow Step 2- 4 as mentioned in&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://pages.github.com/"&gt;https://pages.github.com/&lt;/a&gt;.
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Clone your repository, create and push your initial page content with the Git client you are familiar with. I used GitX.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;ALRIGHT! STEP 5! Hold your breath!&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F5PKQcVX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AZsapO39h7Jv7YlVUfv1xfw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F5PKQcVX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AZsapO39h7Jv7YlVUfv1xfw.png" alt=""&gt;&lt;/a&gt;Note: Change the path to the username that you set. For my case, &lt;a href="https://syaceypyee.github.io"&gt;https://syaceypyee.github.io&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3…2…1! Tada!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E7IernCT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/1%2AxUVT5xRA4nNXvC0IzaAIhQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E7IernCT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/1%2AxUVT5xRA4nNXvC0IzaAIhQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ORZ…&lt;/p&gt;

&lt;p&gt;&lt;a href="http://knowyourmeme.com/memes/orz"&gt;orz&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  OH NO!! What went wrong?!!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jvxGELtt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWivm-dBDbk3VN8SmI8n-BQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jvxGELtt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWivm-dBDbk3VN8SmI8n-BQ.png" alt=""&gt;&lt;/a&gt;No more clues&lt;/p&gt;

&lt;p&gt;I did a search on line and found&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/20895543/my-new-github-page-isnt-showing-up"&gt;My new Github page isn't showing up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically you can ignore the comments until the last one!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mc2aETat--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/821/1%2AmZ4rId8nxhqtSJ-spH60rw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mc2aETat--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/821/1%2AmZ4rId8nxhqtSJ-spH60rw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_config.yml is the key!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step to overcome!
&lt;/h3&gt;

&lt;p&gt;So I went back to my repo and go for Settings&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H1YJrXtR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ANCx6wcGum8AL1aft6r7x2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H1YJrXtR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ANCx6wcGum8AL1aft6r7x2w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scroll down further until you reach “GitHub Pages” session, select a theme!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--suC1j-j9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/794/1%2A-mSGGXNVIS9KrfU1IGnNTw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--suC1j-j9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/794/1%2A-mSGGXNVIS9KrfU1IGnNTw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And now&lt;/p&gt;

&lt;h3&gt;
  
  
  3…2…1…
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fOInFpft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/387/1%2AYKUkn4pXb2NmVAFHS5mtQw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fOInFpft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/387/1%2AYKUkn4pXb2NmVAFHS5mtQw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will eventually found… _config.yml inside your repo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ie2xQWo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APfx7Wj-8YlGtNVDJZEC73Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ie2xQWo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APfx7Wj-8YlGtNVDJZEC73Q.png" alt=""&gt;&lt;/a&gt;Here is our friend!&lt;/p&gt;

&lt;p&gt;P/S: I used to use Blogger.com as my testing playground for HTML learning.&lt;/p&gt;

&lt;p&gt;The purpose of this attempt is to setup a place for me to jot down my learning progress. Yea, we need to jot and SHARE~&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Do not bury what you have experience in the past.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s see what we can do with this. Do share your insights, better options or channel for sharing, if you have any. :)&lt;/p&gt;

&lt;p&gt;Happy exploring!&lt;/p&gt;

&lt;p&gt;Resources: Github, Stack Overflow&lt;/p&gt;

</description>
      <category>post</category>
      <category>githubpages</category>
      <category>github</category>
      <category>jekyll</category>
    </item>
    <item>
      <title>Revealing the magic of Creating iOS Alike Segmented Control with Image in Android (Kotlin) — Part 1</title>
      <dc:creator>Stacey</dc:creator>
      <pubDate>Sat, 04 Nov 2017 21:19:22 +0000</pubDate>
      <link>https://forem.com/staceypyee/revealing-the-magic-of-creating-ios-alike-segmented-control-with-image-in-android-kotlin--part-1--14hi</link>
      <guid>https://forem.com/staceypyee/revealing-the-magic-of-creating-ios-alike-segmented-control-with-image-in-android-kotlin--part-1--14hi</guid>
      <description>&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; There are three LED statuses for a user to choose from, i.e off, blinking and on. Led status is updated based on user’s selection. A selected status will be shown with blue background with a white-coloured icon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F640%2F1%2AP4_O-_pqw_hUpRQiLswghQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F640%2F1%2AP4_O-_pqw_hUpRQiLswghQ.gif"&gt;&lt;/a&gt;There are three led states(off, blinking, on) for a user to choose from. Led state is set as “Off” by default.&lt;/p&gt;

&lt;p&gt;In iOS, we can achieve this by using &lt;a href="https://developer.apple.com/ios/human-interface-guidelines/controls/segmented-controls/" rel="noopener noreferrer"&gt;Segmented Control&lt;/a&gt;. What about Android?&lt;/p&gt;

&lt;p&gt;First thought in mind is &lt;strong&gt;Button&lt;/strong&gt;  view.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://developer.android.com/reference/android/widget/Button.html" rel="noopener noreferrer"&gt;Button&lt;/a&gt; or &lt;a href="https://developer.android.com/reference/android/widget/ImageButton.html" rel="noopener noreferrer"&gt;ImageButton&lt;/a&gt;?
&lt;/h3&gt;

&lt;p&gt;Based on &lt;a href="https://developer.android.com/guide/topics/ui/controls/button.html" rel="noopener noreferrer"&gt;Android Developers official API guide for Input controls&lt;/a&gt;, ImageButton would be the best option for this scenario.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The image on the surface of the button is defined either by the android:src attribute in the &amp;lt;ImageButton&amp;gt; XML element or by the &lt;a href="https://developer.android.com/reference/android/widget/ImageView.html#setImageResource(int)" rel="noopener noreferrer"&gt;setImageResource(int)&lt;/a&gt; method.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As describe in the API guide, we can also &lt;a href="https://developer.android.com/guide/topics/ui/controls/button.html#CustomBackground" rel="noopener noreferrer"&gt;custom&lt;/a&gt; the image button background by defining a different image for each state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;p&gt;*In this example, @color/colorPrimary is set to #0077c8, which is described as “blue” in this passage&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Step 1: XML layout&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Three image buttons are placed in a horizontal oriented LinearLayout.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AmjemFXPV20gnKkqLHmX0jg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AmjemFXPV20gnKkqLHmX0jg.png"&gt;&lt;/a&gt;Layout for the led button states.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Surface Image&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The surface image for the button is defined with a selector file which contains led images with two different states: selected and not selected.&lt;/p&gt;

&lt;p&gt;For eg, in drawable/selector_led_status_off (surface image for “Off” button)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Aov1RTJaXuqqfz89zCK1p3Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Aov1RTJaXuqqfz89zCK1p3Q.png"&gt;&lt;/a&gt;When the off button is selected, drawable/ic_led_off_selected (white-coloured off icon) will be displayed, else drawable/ic_led_off_normal (blue-coloured off icon) will be displayed&lt;/p&gt;

&lt;p&gt;*P/S: Blinking and on button implement the same rules for selector as above with different sets of icon assets&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Background Attribute&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;android:background&lt;/em&gt; attribute in the &lt;em&gt;&amp;lt;ImageButton&amp;gt;&lt;/em&gt; XML element is used to defined the background colour based on the user’s selected state. The selected image button for this example is blue in colour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;(i) Background Attribute with a Solid Colour&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For normal implementation, the selector for background colour can be set by simply implementing&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A16DclZIhvtAa0a-Ma86Liw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A16DclZIhvtAa0a-Ma86Liw.png"&gt;&lt;/a&gt;drawable/selector_background_colour.xml&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F640%2F1%2Auj5rGOCDn0JmErw0X-SuRg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F640%2F1%2Auj5rGOCDn0JmErw0X-SuRg.gif"&gt;&lt;/a&gt;Results by using drawable/selector_background_colour.xml in android:background attribute&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;(ii)Background Attribute with a Rectangular Coloured Border&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, the image button is wrapped with a blue coloured border in this example. Thus this implementation needs a layer-list &lt;strong&gt;with 2 shape items&lt;/strong&gt;. The first layer draws the border, where as the second layer is the background colour of the button. In another words, two rectangles were drawn. One rectangle (background colour) is drawn on top of the other rectangle (border).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AethXORoYar7F0MbCHZqpTw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AethXORoYar7F0MbCHZqpTw.png"&gt;&lt;/a&gt;drawable/selector_middle_button_state.xml: Blue-coloured bordered background&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F640%2F1%2AeA4qnDa1lVxCXyAYTh9kgw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F640%2F1%2AeA4qnDa1lVxCXyAYTh9kgw.gif"&gt;&lt;/a&gt;Results by using rectangular coloured border selector for android:background attribute&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;(iii) Background Attribute with Blue Coloured Rounded Corner&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Used &amp;lt;corners…&amp;gt; to define corner radius the &amp;lt;shape&amp;gt;. We can make use of android:topLeftRadius, android:topRightRadius, android: bottomLeftRadius and android:bottomRightRadius attributes for this purpose.&lt;/p&gt;

&lt;p&gt;Below is the example of implementing left rounded button with blue bordered as background&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AdGxa8bdsPiUJxOp6zs0kGQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AdGxa8bdsPiUJxOp6zs0kGQ.png"&gt;&lt;/a&gt;drawable/selector_rounded_corner_left_button_state.xml&lt;/p&gt;

&lt;p&gt;*P/S:Right rounded corner selector file implements the same rules as above with different corner&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Step 2: Initialise and update led status programatically , based on user’s selection (LedStatusFragment.kt)&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AAycstI4HILSTPyl3Exsjog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AAycstI4HILSTPyl3Exsjog.png"&gt;&lt;/a&gt;Define LedStatus as enum with relevant string resources&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AWsqzBn0y61XJLStPxqB-VA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AWsqzBn0y61XJLStPxqB-VA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Line 49–59 initialise the view for each LED states. Off button is set as selected by default&lt;/p&gt;

&lt;p&gt;Line 63–70 updates the led image button and the text which indicates which button state is selected by the user&lt;/p&gt;

&lt;p&gt;End result as shown in the first image of the post&lt;/p&gt;

&lt;h3&gt;
  
  
  Others
&lt;/h3&gt;

&lt;p&gt;Can we achieve the same effect by using RadioButton? (To be continue…)&lt;/p&gt;




</description>
      <category>segmentedcontrolan</category>
      <category>kotlin</category>
      <category>androidappdevelopm</category>
      <category>imagebutton</category>
    </item>
  </channel>
</rss>
