<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Egit S.</title>
    <description>The latest articles on DEV Community by Egit S. (@egitsptr).</description>
    <link>https://dev.to/egitsptr</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%2F194470%2Fd9b92673-e717-4eeb-b086-69749d67832c.png</url>
      <title>DEV Community: Egit S.</title>
      <link>https://dev.to/egitsptr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/egitsptr"/>
    <language>en</language>
    <item>
      <title>Ignore.java: Skip any throwable code</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Fri, 16 Oct 2020 04:52:35 +0000</pubDate>
      <link>https://dev.to/egitsptr/ignore-java-skip-any-throwable-code-25j5</link>
      <guid>https://dev.to/egitsptr/ignore-java-skip-any-throwable-code-25j5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/ajalt/fuckitpy"&gt;Fuckit.py&lt;/a&gt; intro:&lt;br&gt;&lt;br&gt;
&lt;code&gt;FuckIt.py uses state-of-the-art technology to make sure your Python code runs whether it has any right to or not. Some code has an error? Fuck it.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;As frustrated man while writing to many SLOC for ignored exception at java like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try{
    // run.throwable(); 
} catch (Exception ignored){ 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;meanwhile if should writing to many of should ignored code at runtime as like bellow, how to bypass exception?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int a = Integer.parse("none"); //should skip error, but runtime exception occurred at this line 
throw new JustSampleIgnoreException(); //should skip error, but not executed 
throw new OtherIgnoreException(); //should skip error, but not executed 
int b = 2/0; //should skip error, but not executed 
boolean c = run.call(); //should skip error, but not executed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;in traditional java may to use multiple try-catch, like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try{
    int a = Integer.parse("none"); 
} catch (Exception ignored){ 
} 
try{
    throw new JustSampleIgnoreException(); 
} catch (Exception ignored){ 
} 
try{
    throw new OtherIgnoreException(); 
} catch (Exception ignored){ 
} 
try{
    int b = 2/0; 
} catch (Exception ignored){ 
} 
try{
    boolean c = run.call(); 
} catch (Exception ignored){ 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;but no. no. no. its not like as expected where with write long code is not cool.&lt;br&gt;&lt;br&gt;
I must simplifying code.&lt;br&gt;&lt;br&gt;
and ahaa, now we can write that to simplified code with small efforts to this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 0 as default value when error occurred int a = Ignore.get(()-&amp;gt; Integer.parse("none"), 0); 
Ignore.of(()-&amp;gt; throw new JustSampleIgnoreException(), ()-&amp;gt; throw new OtherIgnoreException()); 
int b = Ignore.get(()-&amp;gt; 2/0, 0); 
boolean c = Ignore.get(()-&amp;gt; run.call(), false); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;how it work❓ &lt;br&gt;
try this snippet! ✅&lt;/p&gt;


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



&lt;p&gt;&lt;em&gt;image source: &lt;a href="https://www.co2partners.com/every-rule-has-an-exception-especially-this-one/"&gt;https://www.co2partners.com/every-rule-has-an-exception-especially-this-one/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tools</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>template</category>
    </item>
    <item>
      <title>Remove Linux GRUB from UEFI boot list and keep Windows BCD</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Tue, 11 Feb 2020 16:17:02 +0000</pubDate>
      <link>https://dev.to/egitsptr/remove-linux-grub-from-uefi-boot-list-and-keep-windows-bcd-22o4</link>
      <guid>https://dev.to/egitsptr/remove-linux-grub-from-uefi-boot-list-and-keep-windows-bcd-22o4</guid>
      <description>&lt;p&gt;&lt;strong&gt;UEFI:&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface"&gt;https://en.wikipedia.org/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;ESP:&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/EFI_system_partition#Windows"&gt;https://en.wikipedia.org/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GRUB:&lt;/strong&gt; &lt;a href="https://www.gnu.org/software/grub/"&gt;https://www.gnu.org/software/grub/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;BCD:&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Windows_NT_6_startup_process"&gt;https://en.wikipedia.org/&lt;/a&gt;&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Boot to Windows &lt;strong&gt;terminal&lt;/strong&gt; mode, by typing this at &lt;code&gt;command prompt&lt;/code&gt; &lt;br&gt;
&lt;code&gt;shutdown.exe /r /o&lt;/code&gt;&lt;br&gt;
other guide &lt;a href="https://www.minitool.com/news/advanced-options-windows-10-009.html"&gt;https://www.minitool.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rebuild&lt;/strong&gt; &lt;code&gt;BCD&lt;/code&gt; (swapping &lt;code&gt;GRUB&lt;/code&gt; to &lt;code&gt;BCD&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;bootrec /rebuildbcd&lt;/code&gt;&lt;br&gt;
&lt;code&gt;bootsect /nt60 sys&lt;/code&gt;&lt;br&gt;
&lt;code&gt;bootrec /fixmbr&lt;/code&gt;&lt;br&gt;
if all of that command is not successful, jump to step 3, then back again here to rename old BCD, and retry.&lt;br&gt;
&lt;code&gt;cd /d Z :/EFI/Microsoft/Boot&lt;/code&gt;&lt;br&gt;
&lt;code&gt;ren BCD BCD.old&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Prr4eaoj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_113255.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Prr4eaoj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_113255.jpg" alt="20200209_113255"&gt;&lt;/a&gt;Windows 10 at terminal mode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make​ ​&lt;code&gt;ESP&lt;/code&gt; accessible&lt;br&gt;
&lt;code&gt;diskpart&lt;/code&gt;&lt;br&gt;
type &lt;code&gt;list disk&lt;/code&gt; if any other disk attached, else​ ​&lt;code&gt;select disk 0&lt;/code&gt;&lt;br&gt;&lt;br&gt;
type &lt;code&gt;list volume&lt;/code&gt; to find ​&lt;code&gt;ESP&lt;/code&gt; volume number&lt;br&gt;&lt;br&gt;
select volume &lt;strong&gt;number&lt;/strong&gt; (e.g &lt;strong&gt;&lt;code&gt;4&lt;/code&gt;&lt;/strong&gt; ) and assign a &lt;strong&gt;letter&lt;/strong&gt; (e.g &lt;strong&gt;&lt;code&gt;Z&lt;/code&gt;&lt;/strong&gt; ) as &lt;code&gt;ESP&lt;/code&gt; volume alias.&lt;br&gt;
&lt;code&gt;select volume 4&lt;/code&gt;&lt;br&gt;
&lt;code&gt;assign letter= Z&lt;/code&gt;&lt;br&gt;
&lt;code&gt;exit&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GI5J5r60--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_121646.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GI5J5r60--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_121646.jpg" alt="20200209_121646"&gt;&lt;/a&gt;Diskpart.exe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Remove&lt;/strong&gt; &lt;code&gt;Kali GRUB&lt;/code&gt; from &lt;code&gt;ESP&lt;/code&gt;&lt;br&gt;
&lt;code&gt;cd /d **Z** :/efi&lt;/code&gt;&lt;br&gt;
&lt;code&gt;rmdir /r /s **kali**&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Done&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Merging unused (old linux system) to single (nearest) partition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B5iWN68Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_113720.jpg%3Fw%3D300" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B5iWN68Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_113720.jpg%3Fw%3D300" alt=""&gt;&lt;/a&gt;Highlight of unused partition&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZT2feS_f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_113853.jpg%3Fw%3D300" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZT2feS_f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_113853.jpg%3Fw%3D300" alt=""&gt;&lt;/a&gt;Extend partition volume with diskmgmt.exe&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xgsNGfDT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_114012.jpg%3Fw%3D300" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xgsNGfDT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/20200209_114012.jpg%3Fw%3D300" alt=""&gt;&lt;/a&gt;Result of merged partition&lt;/p&gt;

</description>
      <category>undefined</category>
      <category>bcd</category>
      <category>boot</category>
      <category>bootlist</category>
    </item>
    <item>
      <title>Bypass premium control di aplikasi Androidnya langitmusik.co.id</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Wed, 05 Feb 2020 15:42:24 +0000</pubDate>
      <link>https://dev.to/egitsptr/bypass-premium-control-di-aplikasi-androidnya-langitmusik-co-id-740</link>
      <guid>https://dev.to/egitsptr/bypass-premium-control-di-aplikasi-androidnya-langitmusik-co-id-740</guid>
      <description>&lt;p&gt;Cek aplikasi Langit Musik di Google Play Store:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.melon.langitmusik"&gt;https://play.google.com/store/apps/details?id=com.melon.langitmusik&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yang melatarbelakangi percobaan ini adalah karena:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Suara &lt;em&gt;streaming&lt;/em&gt; yang disajikan &lt;strong&gt;sangatlah buruk&lt;/strong&gt; (&lt;em&gt;noisy&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Tidak bisa memutar lagu dengan durasi penuh pada lagu yang &lt;strong&gt;berlabel premium&lt;/strong&gt; (misal hanya dapat akses 1 menit awal dari total 3 menit)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Banyak iklan&lt;/strong&gt; , baik di &lt;em&gt;Interface&lt;/em&gt; atau saat &lt;em&gt;audio&lt;/em&gt; &lt;em&gt;playback&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Terlalu &lt;strong&gt;Segan&lt;/strong&gt; untuk berlangganan premium dengan kualitas audio yang masih nanggung&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Goalnya:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Suara berkualitas tinggi&lt;/li&gt;
&lt;li&gt;Unlock &lt;em&gt;premium playlist&lt;/em&gt; agar dapat memutar lagu yang berlabel premium&lt;/li&gt;
&lt;li&gt;Hilangkan iklan pengganggu&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Action
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Download apk dari Play Store atau &lt;em&gt;pull&lt;/em&gt; dari handphone.&lt;br&gt;
&lt;code&gt;untuk mempermudah,&lt;/code&gt;&lt;br&gt;
&lt;code&gt;rename L̶a̶n̶g̶i̶t̶ M̶u̶s̶i̶k̶ [5̶.3̶.1̶].a̶p̶k̶  menjadi 𝗹𝗺.𝗮𝗽𝗸&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decompile APK dengan &lt;a href="https://ibotpeaches.github.io/Apktool/"&gt;ApkTool&lt;/a&gt; (&lt;a href="https://ibotpeaches.github.io/Apktool/"&gt;https://ibotpeaches.github.io/Apktool/&lt;/a&gt;)&lt;br&gt;
&lt;code&gt;apktool d lm.apk&lt;/code&gt;&lt;br&gt;
Hasilnya akan banyak &lt;strong&gt;Kode Smali&lt;/strong&gt; yang nantinya akan dimodifikasi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modifikasi code:&lt;br&gt;&lt;br&gt;
Kesempatan disini kita hanya perlu mengubah objek UserOffline. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---ws23b3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220811.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---ws23b3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220811.png" alt="Annotation 2020-02-05 220811"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ubah getter &lt;strong&gt;&lt;em&gt;isPremiumAccount()&lt;/em&gt;&lt;/strong&gt; dan &lt;strong&gt;&lt;em&gt;isPremium()&lt;/em&gt;&lt;/strong&gt; agar selalu mengembalikan nilai &lt;strong&gt;TRUE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Ubah angka 0 (false) pada kursor menjadi 1 (true)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ipvvWo-w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220556.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ipvvWo-w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220556.png" alt="Annotation 2020-02-05 220556"&gt;&lt;/a&gt;Preview dalam kode Java (Read Only)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jAFm__4X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220526.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jAFm__4X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220526.png" alt="Annotation 2020-02-05 220526"&gt;&lt;/a&gt;Preview dala kode Smali (Read only)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xcHd0yxU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-222828.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xcHd0yxU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-222828.png" alt="Annotation 2020-02-05 222828"&gt;&lt;/a&gt;Plain Text&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G9_Y0oB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220417.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G9_Y0oB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220417.png" alt="Annotation 2020-02-05 220417"&gt;&lt;/a&gt;Preview dalam kode Java (Read Only)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jkItOEUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220332.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jkItOEUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220332.png" alt="Annotation 2020-02-05 220332"&gt;&lt;/a&gt;Preview dalam kode Smali (Read Only)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o5B8Y86F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-222734.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o5B8Y86F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-222734.png" alt="Annotation 2020-02-05 222734"&gt;&lt;/a&gt;Plain Text&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubah getter &lt;strong&gt;&lt;em&gt;getSubscriptionType()&lt;/em&gt;&lt;/strong&gt; agar selalu mengembalikan nilai string &lt;strong&gt;PREMIUM&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kjZCeVSe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-221354.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kjZCeVSe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-221354.png" alt="Annotation 2020-02-05 221354"&gt;&lt;/a&gt;Preview dalam kode Smali (Read Only)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GsrWG5SV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-222652.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GsrWG5SV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-222652.png" alt="Annotation 2020-02-05 222652"&gt;&lt;/a&gt;Plain Text&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Build APK&lt;br&gt;
&lt;code&gt;apktool b lm&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Signing APK&lt;br&gt;&lt;br&gt;
&lt;em&gt;Generate key&lt;/em&gt; (jika belum punya)&lt;br&gt;
&lt;code&gt;keytool -genkeypair -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA -validity 20000 -keystore lm.keystore -alias lm0 -keypass 12345678 -storepass 12345678&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Signing&lt;br&gt;
&lt;code&gt;java -jar apksigner.jar sign --ks lm.keystore --ks-pass pass:12345678 --key-pass pass:12345678 --out lm.apk lm.apk&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install&lt;br&gt;&lt;br&gt;
Kirim ke handphone dan install dari manajer file atau install melalui ADB.&lt;br&gt;
&lt;code&gt;adb install -t lm.apk&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Selesai&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pl6TmnAc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/photo_2020-02-05_22-39-40-1.jpg%3Fw%3D300" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pl6TmnAc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/photo_2020-02-05_22-39-40-1.jpg%3Fw%3D300" alt=""&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ye6AuTmj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/photo_2020-02-05_22-39-33.jpg%3Fw%3D300" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ye6AuTmj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/photo_2020-02-05_22-39-33.jpg%3Fw%3D300" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2k3Zr6zt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220232.png%3Fw%3D300" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2k3Zr6zt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/02/annotation-2020-02-05-220232.png%3Fw%3D300" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>actions</category>
      <category>testing</category>
      <category>bypass</category>
      <category>decompile</category>
    </item>
    <item>
      <title>Retrieve forgotten password in Android Studio (IntelliJ IDEA)</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Sun, 19 Jan 2020 12:01:21 +0000</pubDate>
      <link>https://dev.to/egitsptr/retrieve-forgotten-password-in-android-studio-intellij-idea-5ga6</link>
      <guid>https://dev.to/egitsptr/retrieve-forgotten-password-in-android-studio-intellij-idea-5ga6</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kXaNOVXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-183037.png%3Fw%3D382%26h%3D311" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kXaNOVXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-183037.png%3Fw%3D382%26h%3D311" alt="Annotation 2020-01-19 183037"&gt;&lt;/a&gt;No idea, why EYE button is gone?&lt;/p&gt;

&lt;p&gt;I was not successfully to seeds &lt;em&gt;plain password&lt;/em&gt; from these files, always cryptic with [*] symbol:&lt;/p&gt;

&lt;p&gt;IDE log at &lt;code&gt;~\user\AndroidStudio\system\log\idea.log*&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Gradle Task log at &lt;code&gt;~\projectDir\.gradle\5.4.1\executionHistory\*.bin&lt;/code&gt;&lt;br&gt;&lt;br&gt;
and anything with &lt;code&gt;*.bin&lt;/code&gt; extension in this gradle directory, e.g. &lt;code&gt;taskHistory.bin&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--drI6JI8Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-172555.png%3Fw%3D525" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--drI6JI8Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-172555.png%3Fw%3D525" alt="Annotation 2020-01-19 172555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Mehh,
&lt;/h1&gt;

&lt;h1&gt;
  
  
  What the &lt;strong&gt;HELL&lt;/strong&gt; with new Intellij version?????
&lt;/h1&gt;

&lt;p&gt;Let’s find the solution, we can use key manager for my issue:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---aK1Zx7k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-172449.png%3Fw%3D525" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---aK1Zx7k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-172449.png%3Fw%3D525" alt="Annotation 2020-01-19 172449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check it &lt;code&gt;~\.AndroidStudio3.5\config\*.kdbx&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;master password&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Access with &lt;a href="https://keepass.info/"&gt;KeePass&lt;/a&gt; (copy to show only in 12 seconds)&lt;/li&gt;
&lt;li&gt;DONE&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4uSpfZjD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-172341-1.png%3Fw%3D525" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4uSpfZjD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-172341-1.png%3Fw%3D525" alt="Annotation 2020-01-19 172341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4R_7hHOd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-182246-e1579434980579.png%3Fw%3D525" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4R_7hHOd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-182246-e1579434980579.png%3Fw%3D525" alt="Annotation 2020-01-19 182246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6ielsheG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-182215.png%3Fw%3D525" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6ielsheG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-19-182215.png%3Fw%3D525" alt="Annotation 2020-01-19 182215"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>actions</category>
      <category>tips</category>
      <category>androidstudio</category>
      <category>ide</category>
    </item>
    <item>
      <title>Assign CA Cert to Android's /system directory for HTTPs decryption</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Thu, 09 Jan 2020 11:47:36 +0000</pubDate>
      <link>https://dev.to/egitsptr/assign-ca-cert-to-android-s-system-directory-for-https-decryption-4oab</link>
      <guid>https://dev.to/egitsptr/assign-ca-cert-to-android-s-system-directory-for-https-decryption-4oab</guid>
      <description>&lt;p&gt;Based on my device lab where tested on Android Virtual Device API v16 – v29, use GAPPs or not.&lt;br&gt;&lt;br&gt;
The main goal is to quickly give a affirmative detail to BE team, when any error occurred.&lt;br&gt;&lt;br&gt;
Fast way for bug spot inspections at production app. Occurred at BE side?, network call, FE logic, or else.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;a href="https://gist.github.com/esabook/1b5e8ae79f07fe4713042dd698c38ea2" rel="nofollow"&gt;https://gist.github.com/esabook/1b5e8ae79f07fe4713042dd698c38ea2&lt;/a&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6Nxm61J7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/screenshot_1578566733.png%3Fw%3D150" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6Nxm61J7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/screenshot_1578566733.png%3Fw%3D150" alt=""&gt;&lt;/a&gt;Device Android version 9&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sr2kvDwt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://esabook.files.wordpress.com/2020/01/download_app.gif%3Fw%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sr2kvDwt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://esabook.files.wordpress.com/2020/01/download_app.gif%3Fw%3D1024" alt=""&gt;&lt;/a&gt;Download app from Google Play&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tZ1XzkMO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-09-172238.png%3Fw%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tZ1XzkMO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2020/01/annotation-2020-01-09-172238.png%3Fw%3D1024" alt=""&gt;&lt;/a&gt;Test Cert with proxy: connect&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8QrhijOl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://esabook.files.wordpress.com/2020/01/action.gif%3Fw%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8QrhijOl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://esabook.files.wordpress.com/2020/01/action.gif%3Fw%3D1024" alt=""&gt;&lt;/a&gt; &lt;em&gt;Test Cert with proxy: decrypt&lt;/em&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>testing</category>
      <category>tools</category>
      <category>android</category>
    </item>
    <item>
      <title>Cool Dependency Setup for building Android App from Scratch</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Tue, 01 Oct 2019 14:20:59 +0000</pubDate>
      <link>https://dev.to/egitsptr/cool-dependency-setup-for-building-android-app-from-scratch-3igm</link>
      <guid>https://dev.to/egitsptr/cool-dependency-setup-for-building-android-app-from-scratch-3igm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Good notes to get better on Android App Development, including for:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Small Apk size&lt;/li&gt;
&lt;li&gt;Smoothness Experience&lt;/li&gt;
&lt;li&gt;Testable&lt;/li&gt;
&lt;li&gt;Easy for Error Inspection&lt;/li&gt;
&lt;li&gt;Easy for Code Change&lt;/li&gt;
&lt;li&gt;Easy Development&lt;/li&gt;
&lt;li&gt;Monitored&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Core&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Write Once for all android compatibility.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/kotlin/ktx.html"&gt;Android KTX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Networking&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Caching, Fail Handler, Simple usage, Overriddable&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://square.github.io/retrofit/"&gt;Retrofit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.android.com/training/volley/index.html"&gt;Volley&lt;/a&gt; for complex customization&lt;/li&gt;
&lt;li&gt;&lt;a href="https://square.github.io/okhttp/"&gt;OkHttp3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Image Loader&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Faster in current competition than other for lazy loading&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bumptech.github.io/glide/"&gt;Glide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Local Database&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Fast DB access, small footprint, easy migration&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://objectbox.io/"&gt;ObjectBox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Logging Manager&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Single gate keeper for other logger or analytics.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JakeWharton/timber"&gt;Timber&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Resource Builder&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Vector, animation support&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/airbnb/lottie-android"&gt;Lottie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/guide/topics/graphics/vector-drawable-resources"&gt;Verctor Drawable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Media Recognition&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Easy to use, Active Community&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/zxing/zxing"&gt;ZXing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opencv.org/android/"&gt;OpenCV&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Tools&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Faster Development&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/google/dagger"&gt;Dagger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/gson"&gt;Gson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/auto/blob/master/value/userguide/index.md"&gt;AutoValue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://greenrobot.org/eventbus/"&gt;EventBus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/topic/libraries/data-binding"&gt;DataBinding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/jetpack/androidx"&gt;AndroidX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/guava"&gt;Guava&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/topic/libraries/architecture/workmanager/basics"&gt;WorkManager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Testing&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Goal: Easy Integration, Validation&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://site.mockito.org/"&gt;Mockito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://junit.org/junit5/"&gt;JUnit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/robolectric/robolectric"&gt;Robolectric&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/powermock/powermock"&gt;PowerMock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/training/testing/espresso"&gt;Espresso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spotbugs/spotbugs"&gt;SpotBugs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/studio/profile/benchmark.html"&gt;Benchmark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/training/testing/ui-automator"&gt;UI Automator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://square.github.io/leakcanary/fundamentals/"&gt;Leak Canary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;CI/CD&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/platform/technology/app-bundle"&gt;Bundle Tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tencent/MMKV"&gt;MMKV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://firebase.google.com/docs/"&gt;Google Firebase&lt;/a&gt;/&lt;a href="https://appcenter.ms/"&gt;Microsoft AppCenter&lt;/a&gt;/&lt;a href="https://aws.amazon.com/amplify/"&gt;AWS Amplify&lt;/a&gt;/&lt;a href="https://www.bitrise.io/"&gt;Bitrise&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tools</category>
      <category>notes</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
    </item>
    <item>
      <title>Quotes for Software Qualities Essential</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Wed, 17 Jul 2019 13:40:33 +0000</pubDate>
      <link>https://dev.to/egitsptr/quotes-for-software-qualities-essential-5cp9</link>
      <guid>https://dev.to/egitsptr/quotes-for-software-qualities-essential-5cp9</guid>
      <description>&lt;p&gt;&lt;strong&gt;“Quality is essentially about meeting user expectations. Consistently. Reliably. Confidently.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Do it fast and fix it later. Or do it slow and you don’t have to fix it at all. ”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Done means done. End of story.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“If there is one company that got this guideline right, it’s Apple. Microsoft and Android and Google and most companies out there focus on more. More features. More options. More users. Apple, in contrast, focuses on how little they can do.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Pre-written code only becomes an asset when you can re-use it. You can only re-use it if you can find it and understand what it is intended to do.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“If you see something wrong, do something about it. If you can fix it, do it. Immediately. If you can’t, tell someone who can.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“The square_root() function shall return the square root of its input for all valid values.”&lt;/strong&gt; &lt;em&gt;– in a better specification would be:&lt;/em&gt; – “&lt;strong&gt;The square_root() function shall return the square root of its input for all valid values, and 0 for all invalid values. Valid inputs are positive 32-bit floating point numbers, zero and positive infinity. Invalid inputs are negative numbers, negative infinity, and NaN.”&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>inspirations</category>
      <category>notes</category>
      <category>softwaredevelopment</category>
      <category>assurance</category>
    </item>
    <item>
      <title>Recover Lost Deleted “Git stash” using “Git fsck”</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Wed, 20 Feb 2019 03:01:50 +0000</pubDate>
      <link>https://dev.to/egitsptr/recover-lost-deleted-git-stash-using-git-fsck-1e2l</link>
      <guid>https://dev.to/egitsptr/recover-lost-deleted-git-stash-using-git-fsck-1e2l</guid>
      <description>&lt;p&gt;1- Open Repository Directory in Terminal / Git Bash.&lt;br&gt;&lt;br&gt;
  &lt;code&gt;git fsck | awk ‘{print $3}’ &amp;gt; ids.txt  &lt;br&gt;
  cat ids.txt | xargs git show &amp;gt; logs.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2- Then open &lt;code&gt;​logs.txt&lt;/code&gt;, and find deleted stash &lt;code&gt;id&lt;/code&gt;.  &lt;/p&gt;

&lt;pre&gt;
example:  
commit a31b0a30701933cfb3d8a55cd4b96320865ae558  
Merge: c465de7 57a3521  
Author: Egit Saputra \  
Date: Tue Feb 19 14:37:29 2019 +0900  
On development: deleted stash test
&lt;/pre&gt;

&lt;p&gt;3- and recover with &lt;code&gt;git stash apply&lt;/code&gt; to current active branch.&lt;br&gt;&lt;br&gt;
&lt;code&gt;git stash apply a31b0a30701933cfb3d8a55cd4b96320865ae558&lt;/code&gt;&lt;/p&gt;

</description>
      <category>actions</category>
      <category>softwaredevelopment</category>
      <category>tools</category>
    </item>
    <item>
      <title>Semantic Versioning for software development</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Tue, 12 Feb 2019 04:33:54 +0000</pubDate>
      <link>https://dev.to/egitsptr/semantic-versioning-for-software-development-2k2i</link>
      <guid>https://dev.to/egitsptr/semantic-versioning-for-software-development-2k2i</guid>
      <description>&lt;p&gt;Given a version number &lt;strong&gt;&lt;code&gt;MAJOR&lt;/code&gt;.&lt;code&gt;MINOR&lt;/code&gt;.&lt;code&gt;PATCH&lt;/code&gt;&lt;/strong&gt;, increment the:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;MAJOR&lt;/code&gt; version when you make incompatible API changes,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MINOR&lt;/code&gt; version when you add functionality in a backwards-compatible manner, and&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PATCH&lt;/code&gt; version when you make backwards-compatible bug fixes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Additional labels for pre-release and build metadata are available as extensions to the &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt; format.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://semver.org/#semantic-versioning-specification-semver"&gt;Semantic Versioning Specification (SemVer)&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The key words &lt;strong&gt;“MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL”&lt;/strong&gt; in this document are to be interpreted as described in &lt;a href="http://tools.ietf.org/html/rfc2119"&gt;&lt;u&gt;RFC 2119&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Software using Semantic Versioning &lt;strong&gt;MUST&lt;/strong&gt; declare a &lt;code&gt;public API&lt;/code&gt;. This API could be declared in the code itself or exist strictly in documentation. However it is done, it should be precise and comprehensive.&lt;/li&gt;
&lt;li&gt;A normal version number &lt;strong&gt;MUST&lt;/strong&gt; take the form &lt;code&gt;X.Y.Z&lt;/code&gt; &lt;strong&gt;&lt;em&gt;where&lt;/em&gt;&lt;/strong&gt; X, Y, and Z are non-negative integers, and &lt;strong&gt;MUST NOT&lt;/strong&gt; contain leading zeroes. X is the major version, Y is the minor version, and Z is the patch version. Each element MUST increase numerically. For instance: 1.9.0 -&amp;gt; 1.10.0 -&amp;gt; 1.11.0.&lt;/li&gt;
&lt;li&gt;Once a versioned package has been released, the contents of that version &lt;strong&gt;MUST NOT&lt;/strong&gt; be modified. Any modifications &lt;strong&gt;MUST&lt;/strong&gt; be released as a new version.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Major version zero&lt;/code&gt; (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable.&lt;/li&gt;
&lt;li&gt;Version &lt;code&gt;1.0.0&lt;/code&gt; defines the public API. The way in which the version number is incremented after this release is dependent on this public API and how it changes.&lt;/li&gt;
&lt;li&gt;Patch version &lt;code&gt;Z&lt;/code&gt; (x.y.&lt;strong&gt;Z&lt;/strong&gt; | x &amp;gt; 0) &lt;strong&gt;MUST&lt;/strong&gt; be incremented if only backwards compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect behavior.&lt;/li&gt;
&lt;li&gt;Minor version &lt;code&gt;Y&lt;/code&gt; (x.&lt;strong&gt;Y&lt;/strong&gt;.z | x &amp;gt; 0) &lt;strong&gt;MUST&lt;/strong&gt; be incremented if new, backwards compatible functionality is introduced to the public API. It &lt;strong&gt;MUST&lt;/strong&gt; be incremented &lt;strong&gt;&lt;em&gt;if&lt;/em&gt;&lt;/strong&gt; any public API functionality is &lt;code&gt;marked as deprecated&lt;/code&gt;. It &lt;strong&gt;MAY&lt;/strong&gt; be incremented if substantial new functionality or improvements are introduced within the private code. It &lt;strong&gt;MAY&lt;/strong&gt; include patch level changes. Patch version &lt;strong&gt;MUST&lt;/strong&gt; be reset to &lt;code&gt;0&lt;/code&gt; when minor version is incremented.&lt;/li&gt;
&lt;li&gt;Major version &lt;code&gt;X&lt;/code&gt; (&lt;strong&gt;X&lt;/strong&gt;.y.z | &lt;strong&gt;X&lt;/strong&gt; &amp;gt; 0) &lt;strong&gt;MUST&lt;/strong&gt; be incremented if any backwards incompatible changes are introduced to the public API. It &lt;strong&gt;MAY&lt;/strong&gt; include minor and patch level changes. Patch and minor version &lt;strong&gt;MUST&lt;/strong&gt; be reset to 0 when major version is incremented.&lt;/li&gt;
&lt;li&gt;A pre-release version &lt;strong&gt;MAY&lt;/strong&gt; be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version. &lt;code&gt;Identifiers&lt;/code&gt; &lt;strong&gt;MUST&lt;/strong&gt; comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers &lt;strong&gt;MUST NOT&lt;/strong&gt; be empty. Numeric identifiers MUST NOT include leading zeroes. Pre-release versions have a lower precedence than the associated normal version. A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version. Examples: &lt;code&gt;1.0.0-alpha&lt;/code&gt;, &lt;code&gt;1.0.0-alpha.1&lt;/code&gt;, &lt;code&gt;1.0.0-0.3.7&lt;/code&gt;, &lt;code&gt;1.0.0-x.7.z.92&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Build metadata &lt;strong&gt;MAY&lt;/strong&gt; be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch or pre-release version. Identifiers &lt;strong&gt;MUST&lt;/strong&gt; comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers &lt;strong&gt;MUST&lt;/strong&gt; NOT be empty. &lt;code&gt;Build metadata&lt;/code&gt; &lt;strong&gt;SHOULD&lt;/strong&gt; be ignored when determining version precedence. Thus two versions that differ only in the build metadata, have the same precedence. Examples: &lt;code&gt;1.0.0-alpha+001&lt;/code&gt;, &lt;code&gt;1.0.0+20130313144700&lt;/code&gt;, &lt;code&gt;1.0.0-beta+exp.sha.5114f85&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Precedence refers to how versions are compared to each other when ordered. &lt;code&gt;Precedence&lt;/code&gt; &lt;strong&gt;MUST&lt;/strong&gt; be calculated by separating the version into major, minor, patch and pre-release identifiers in that order (Build metadata does not figure into precedence). &lt;code&gt;Precedence&lt;/code&gt; is determined by the first difference when comparing each of these identifiers from left to right as follows: &lt;code&gt;Major&lt;/code&gt;, &lt;code&gt;minor&lt;/code&gt;, and &lt;code&gt;patch&lt;/code&gt; versions are always compared numerically. Example: &lt;code&gt;1.0.0&lt;/code&gt; &amp;lt; &lt;code&gt;2.0.0&lt;/code&gt; &amp;lt; &lt;code&gt;2.1.0&lt;/code&gt; &amp;lt; &lt;code&gt;2.1.1&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;When major, minor, and patch are equal, a pre-release version has lower precedence than a normal version. Example: &lt;code&gt;1.0.0-alpha&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0&lt;/code&gt;. Precedence for two pre-release versions &lt;code&gt;with the same&lt;/code&gt; major, minor, and patch version &lt;strong&gt;MUST&lt;/strong&gt; be determined by comparing each dot separated identifier from left to right until a difference is found as follows: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;identifiers consisting of only digits are compared numerically and identifiers with letters or hyphens are compared lexically in ASCII sort order.&lt;/li&gt;
&lt;li&gt;Numeric identifiers always have lower precedence than non-numeric identifiers. &lt;/li&gt;
&lt;li&gt;A larger set of pre-release fields has a higher precedence than a smaller set, if all of the preceding identifiers are equal. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: &lt;code&gt;1.0.0-alpha&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0-alpha.1&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0-alpha.beta&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0-beta&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0-beta.2&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0-beta.11&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0-rc.1&lt;/code&gt; &amp;lt; &lt;code&gt;1.0.0&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://semver.org/"&gt;Official text.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>softwaredevelopment</category>
      <category>tools</category>
    </item>
    <item>
      <title>Route AppCenter Distribute SDK to specific Release Group</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Thu, 10 Jan 2019 08:29:09 +0000</pubDate>
      <link>https://dev.to/egitsptr/route-appcenter-distribute-sdk-to-specific-release-group-3olb</link>
      <guid>https://dev.to/egitsptr/route-appcenter-distribute-sdk-to-specific-release-group-3olb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Noted because no textual official documentation found. Free to update.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of the CI.&lt;br&gt;&lt;br&gt;
Preword:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://appcenter.ms/"&gt;Appcenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/appcenter/distribution/"&gt;Appcenter Distribution&lt;/a&gt; – allowing me to set up the in-app auto update to release group.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UsH8Qn9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2019/01/capture-1.png%3Fw%3D525" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UsH8Qn9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://esabook.files.wordpress.com/2019/01/capture-1.png%3Fw%3D525" alt="capture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  But for But,
&lt;/h1&gt;

&lt;p&gt;There is as flexible SDK, we can point update check to the specific group as we can prepare. With this, we can get the in-app auto-update without login as tester collaborator.&lt;/p&gt;

&lt;pre&gt;
import com.microsoft.appcenter.utils.storage.SharedPreferencesManager;

...

SharedPreferencesManager.initialize(this);
SharedPreferencesManager.putString("Distribute.distribution_group_id", "***REPLACE WITH GROUP-ID HERE***");

&lt;/pre&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>First Milestone to get familiar with Git</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Tue, 08 Jan 2019 00:57:47 +0000</pubDate>
      <link>https://dev.to/egitsptr/first-milestone-to-get-familiar-with-git-4pn</link>
      <guid>https://dev.to/egitsptr/first-milestone-to-get-familiar-with-git-4pn</guid>
      <description>&lt;p&gt;Here is just my note for little imagine-inspiration.&lt;/p&gt;

&lt;p&gt;Please read each terminology about what is and why should happen, &lt;strong&gt;don’t read the command&lt;/strong&gt; if you not familiar with it. There regularly order from initial basic:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/book/en/Git-Internals-Git-References"&gt;Head&lt;/a&gt;, &lt;a href="https://git-scm.com/docs/git-branch"&gt;Branch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-init"&gt;Init&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-clone"&gt;Clone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://git-scm.com/book/en/GitHub-Contributing-to-a-Project"&gt;Fork&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-checkout"&gt;Checkout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-commit"&gt;Commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-tag"&gt;Tag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-stash"&gt;Stash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-merge"&gt;Merge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-rebase"&gt;Rebase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-fetch"&gt;Fetch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-push"&gt;Push&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-pull"&gt;Pull&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-reset"&gt;Reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-revert"&gt;Reverse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-cherry-pick"&gt;Cherry Pick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Patching"&gt;Patch&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Goto the official document &lt;strong&gt;&lt;a href="https://git-scm.com/docs"&gt;https://git-scm.com/docs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Simple good tools for GUI-ing git:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.gitkraken.com/"&gt;GitKraken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sourcetreeapp.com/"&gt;SourceTree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://desktop.github.com/"&gt;Git Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDE – like Atom, Sublime, VS Code, Intelij, Visual Studio, RAD, etc&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/download/gui/windows"&gt;more&lt;/a&gt; . . .&lt;/li&gt;
&lt;li&gt;Git Flow or Trunk??&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>guidingtheory</category>
      <category>thinkable</category>
      <category>tools</category>
      <category>undefined</category>
    </item>
    <item>
      <title>The most big words for native android development</title>
      <dc:creator>Egit S.</dc:creator>
      <pubDate>Sat, 11 Aug 2018 04:23:55 +0000</pubDate>
      <link>https://dev.to/egitsptr/the-most-big-words-for-native-android-development-2nif</link>
      <guid>https://dev.to/egitsptr/the-most-big-words-for-native-android-development-2nif</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://google.github.io/dagger/"&gt;Dagger&lt;/a&gt;, &lt;a href="http://reactivex.io/languages.html"&gt;Rxjava&lt;/a&gt;, &lt;a href="https://insert-koin.io/"&gt;Koin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://square.github.io/retrofit/"&gt;Retrofit&lt;/a&gt;, &lt;a href="https://developer.android.com/training/volley/"&gt;Volley&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/groovy/groovy-android-gradle-plugin"&gt;Groovy&lt;/a&gt;, &lt;a href="https://github.com/google/guava"&gt;Guava&lt;/a&gt;, &lt;a href="https://github.com/google/gson"&gt;GSON&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://greenrobot.org/eventbus/"&gt;EventBus&lt;/a&gt;, &lt;a href="http://square.github.io/otto/"&gt;Otto&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.android.com/training/data-storage/sqlite"&gt;SQLite&lt;/a&gt;, &lt;a href="http://www.activeandroid.com/"&gt;ActiveAndroid&lt;/a&gt;, &lt;a href="https://realm.io/products/realm-database"&gt;Realm&lt;/a&gt;, &lt;a href="https://developer.android.com/training/data-storage/room/"&gt;Room&lt;/a&gt;, &lt;a href="http://satyan.github.io/sugar/"&gt;SugarORM&lt;/a&gt;, &lt;a href="https://developer.android.com/reference/android/content/SharedPreferences"&gt;SharedPreference&lt;/a&gt;, &lt;a href="https://github.com/greenrobot/greenDAO"&gt;GreenDAO&lt;/a&gt;, &lt;a href="https://github.com/objectbox/"&gt;ObjectBox&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.flurry.com/"&gt;Flurry&lt;/a&gt;, &lt;a href="https://firebase.google.com/"&gt;Firebase&lt;/a&gt;, &lt;a href="https://feathersjs.com/"&gt;Feathers&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/en-us/services/app-service/mobile/"&gt;Mobile Apps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://saucelabs.com/"&gt;Sauce Labs&lt;/a&gt;, &lt;a href="https://aws.amazon.com/device-farm/"&gt;AWS Device Farm&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/en-us/services/app-center/"&gt;Azure app center&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://jakewharton.github.io/butterknife/"&gt;Butterknife&lt;/a&gt;, &lt;a href="https://developer.android.com/topic/libraries/data-binding/"&gt;Databinding&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://bumptech.github.io/glide/"&gt;Glide&lt;/a&gt;, &lt;a href="http://square.github.io/picasso/"&gt;Picasso&lt;/a&gt;, &lt;a href="https://developer.android.com/guide/topics/media/exoplayer"&gt;Exoplayer&lt;/a&gt;, &lt;a href="https://github.com/nostra13/Android-Universal-Image-Loader"&gt;Universal Image Loader&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://junit.org/junit4/"&gt;JUnit&lt;/a&gt;, &lt;a href="http://site.mockito.org/"&gt;Mockito&lt;/a&gt;, &lt;a href="http://robolectric.org/"&gt;Robolectric&lt;/a&gt;, &lt;a href="https://developer.android.com/topic/libraries/testing-support-library/index.html"&gt;Espresso&lt;/a&gt;, &lt;a href="http://appium.io/introduction.html?lang=en"&gt;Appium&lt;/a&gt;, &lt;a href="https://github.com/JakeWharton/timber"&gt;Timber&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://evernote.github.io/android-job/"&gt;Android-job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://projectlombok.org/setup/android"&gt;Lombok&lt;/a&gt;, &lt;a href="https://kotlinlang.org/"&gt;Kotlin&lt;/a&gt;,&lt;a href="https://developer.android.com/training/articles/perf-jni"&gt;JNI framework&lt;/a&gt;, &lt;a href="https://github.com/google/auto"&gt;Value&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/dev-labs-bg/transitioner"&gt;Transitioner&lt;/a&gt;, &lt;a href="https://github.com/alexjlockwood/avocado"&gt;Avocado&lt;/a&gt;, &lt;a href="http://airbnb.io/lottie/android/android.html#getting-started"&gt;Lottie&lt;/a&gt;, &lt;a href="https://github.com/chrisjenx/Calligraphy"&gt;Calligraphy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;MVC&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter"&gt;MVP&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel"&gt;MVVM&lt;/a&gt;, &lt;a href="https://cycle.js.org/model-view-intent.html"&gt;MVI&lt;/a&gt;, Viper, MVM, MvRx&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get hands on of them for easy development. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fLKHYAkG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f31a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fLKHYAkG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f31a.png" alt="🌚"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>guidingtheory</category>
      <category>inspirations</category>
      <category>notes</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
