<?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: Daniil Pechorin</title>
    <description>The latest articles on DEV Community by Daniil Pechorin (@berhram).</description>
    <link>https://dev.to/berhram</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%2F1080767%2Ffabb8ade-577e-4b7b-a246-e4ddc6792ae6.jpg</url>
      <title>DEV Community: Daniil Pechorin</title>
      <link>https://dev.to/berhram</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/berhram"/>
    <language>en</language>
    <item>
      <title>(Occasionally) Useful Web Tools For Android Developers</title>
      <dc:creator>Daniil Pechorin</dc:creator>
      <pubDate>Sun, 22 Dec 2024 18:32:46 +0000</pubDate>
      <link>https://dev.to/berhram/occasionally-useful-web-tools-for-android-developers-4g48</link>
      <guid>https://dev.to/berhram/occasionally-useful-web-tools-for-android-developers-4g48</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In my not-so-long career as an Android Developer, I have worked on completely different projects: 10 year old Java apps, glossy bleeding edge AI assistants and many other in between. To cut a long story short, below is a list of websites/web tools I have used so far, with descriptions and use cases they help me solve. You may not need them now, but I recommend saving them just in case.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer! This is a list of tools, not online resources for Android Developers.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  SvgPathEditor
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fycuky9uavfk89lwmt1eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fycuky9uavfk89lwmt1eq.png" alt="SvgPathEditor" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix icon: alignment, path and so on&lt;/li&gt;
&lt;li&gt;Split icon, e.g. for tinting in different colors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Link: &lt;a href="https://yqnn.github.io/svg-path-editor/" rel="noopener noreferrer"&gt;SvgPathEditor&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Text Compare!
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmctxx5gg6llkx66s7wem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmctxx5gg6llkx66s7wem.png" alt="Text Compare!" width="800" height="526"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Comparing expected to actual, e.g. in unit tests. &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://text-compare.com/" rel="noopener noreferrer"&gt;Text Compare!&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  IconKitchen
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmhjyaofvpcnwarxepn6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmhjyaofvpcnwarxepn6p.png" alt="IconKitchen" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Whenever you need an app icon.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://icon.kitchen/" rel="noopener noreferrer"&gt;IconKitchen&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Room SQLite Difference Finder
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Foc7ptr8cn3lloy12xhbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Foc7ptr8cn3lloy12xhbg.png" alt="Room SQLite Difference Finder" width="800" height="546"&gt;&lt;/a&gt;&lt;br&gt;
Comparison of expected and actual Room table schemes.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://hrankit.github.io/RoomSQLiteDifferenceFinder/" rel="noopener noreferrer"&gt;Room SQLite Difference Finder&lt;/a&gt;  &lt;/p&gt;

&lt;h1&gt;
  
  
  badssl.com
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ft3v0mju98r7kdrc70gz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ft3v0mju98r7kdrc70gz3.png" alt="badssl.com" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Testing various network exception handling.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://badssl.com/" rel="noopener noreferrer"&gt;badssl.com&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  API Levels
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fk67rbgy5qhnhisoqztb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fk67rbgy5qhnhisoqztb1.png" alt="API Levels" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximately API level distribution across users&lt;/li&gt;
&lt;li&gt;Version - SDK level - Version code mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Link: &lt;a href="https://apilevels.com/" rel="noopener noreferrer"&gt;API Levels&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Perfetto UI
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz729o6nkdg2j7wduvcjb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz729o6nkdg2j7wduvcjb.png" alt="Perfetto UI" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Trace profiling, useful for some thread/load related bug investigation.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://ui.perfetto.dev/" rel="noopener noreferrer"&gt;Perfetto UI&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  SQLFORMAT
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjj1fywae7s7prfahomlv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjj1fywae7s7prfahomlv.png" alt="SQLFORMAT" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Bringing order to the SQL query mess we sometimes create.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://sqlformat.org/" rel="noopener noreferrer"&gt;SQLFORMAT&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  GitPop3
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5plqnpbagz0inf0dfmyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5plqnpbagz0inf0dfmyc.png" alt="GitPop3" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Found an abandoned library you REALLY want to use? Use this tool, you might not be alone in your wishes.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://andremiras.github.io/gitpop3/" rel="noopener noreferrer"&gt;GitPop3&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  FlowMarbles
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6f6fqgyq1w0z0w54l467.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6f6fqgyq1w0z0w54l467.png" alt="FlowMarbles" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Kotlin Flow operators visualized. It's nice to refresh what you need to know.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://flowmarbles.com/" rel="noopener noreferrer"&gt;FlowMarbles&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Kotlin Playground
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffnvtv8xxr3fuk5t3d027.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffnvtv8xxr3fuk5t3d027.png" alt="Kotlin Playground" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Ideal solution for testing Kotlin code in an isolated environment.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://play.kotlinlang.org/" rel="noopener noreferrer"&gt;Kotlin Playground&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  tldr inBrowser
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fm91xn538r42ln8tgm733.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fm91xn538r42ln8tgm733.png" alt="tldr inBrowser" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
An easy and fast way to find documentation for a huge number of console commands. Gradle, git, Docker - whatever you need.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://tldr.inbrowser.app/" rel="noopener noreferrer"&gt;tldr inBrowser&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  grep
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8vzuec5yfj67jhwff5nl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8vzuec5yfj67jhwff5nl.png" alt="grep" width="800" height="450"&gt;&lt;/a&gt; &lt;br&gt;
This tool allows you to search for other developers' implementations, solutions and API/SDK usage. No need to reinvent the wheel.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://grep.app/" rel="noopener noreferrer"&gt;grep&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Material Theme Builder
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqoapjvuf037sjzq6krdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqoapjvuf037sjzq6krdb.png" alt="Material Theme Builder" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Choose a nice theme&lt;br&gt;&lt;br&gt;
Export theme to code&lt;br&gt;&lt;br&gt;
Use theme&lt;br&gt;&lt;br&gt;
Profit  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://material-foundation.github.io/material-theme-builder/" rel="noopener noreferrer"&gt;Material Theme Builder&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  D2 Playground
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvpcwuj6carvn6yltvuz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvpcwuj6carvn6yltvuz7.png" alt="D2 Playground" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fast diagram creation with simple syntax.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://play.d2lang.com/" rel="noopener noreferrer"&gt;D2 Playground&lt;/a&gt;  &lt;/p&gt;

&lt;h1&gt;
  
  
  RTSP Stream
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvj8idkny55x6nfpueflf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvj8idkny55x6nfpueflf.png" alt="RTSP Stream" width="800" height="450"&gt;&lt;/a&gt; &lt;br&gt;
I don't know why can you need a test RSTP stream. But I have mine here.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://rtsp.stream/" rel="noopener noreferrer"&gt;RTSP Stream&lt;/a&gt;  &lt;/p&gt;

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

&lt;p&gt;I hope you find it useful! Feel free to contact me if you think I have missed anything important.&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>tooling</category>
      <category>website</category>
    </item>
  </channel>
</rss>
