<?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: ronynn</title>
    <description>The latest articles on DEV Community by ronynn (@ronynn).</description>
    <link>https://dev.to/ronynn</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%2F2910738%2F63188338-6d65-419a-b0bd-b0c6c9fe3e5c.jpg</url>
      <title>DEV Community: ronynn</title>
      <link>https://dev.to/ronynn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ronynn"/>
    <language>en</language>
    <item>
      <title>On-Device Neural Networks for Predicting To-Dos in Karui</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Fri, 04 Apr 2025 04:41:00 +0000</pubDate>
      <link>https://dev.to/ronynn/on-device-neural-networks-for-predicting-to-dos-in-karui-1lfc</link>
      <guid>https://dev.to/ronynn/on-device-neural-networks-for-predicting-to-dos-in-karui-1lfc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;https://github.com/ronynn/karui&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;strong&gt;to-do list should be smarter&lt;/strong&gt;, not just a dumb checklist. What if &lt;strong&gt;your app could predict your next task&lt;/strong&gt; based on past behavior, time of day, and patterns? Instead of manually adding the same tasks over and over, Karui could &lt;strong&gt;learn from you&lt;/strong&gt; and suggest what needs to be done.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Why On-Device AI?
&lt;/h2&gt;

&lt;p&gt;Most AI-powered apps send data to the cloud, but:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; Keeping everything on-device means &lt;strong&gt;no data leaks&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; Predictions happen in &lt;strong&gt;real-time&lt;/strong&gt; without network delays.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Offline Support:&lt;/strong&gt; AI still works &lt;strong&gt;without an internet connection&lt;/strong&gt;.  &lt;/p&gt;


&lt;h2&gt;
  
  
  How It Works: Using Brain.js for Neural Network Predictions
&lt;/h2&gt;

&lt;p&gt;We can use &lt;strong&gt;Brain.js&lt;/strong&gt;, a lightweight JavaScript neural network library, to train a model &lt;strong&gt;inside Karui&lt;/strong&gt;, running entirely on the user’s device.  &lt;/p&gt;
&lt;h3&gt;
  
  
  1. Training the Model
&lt;/h3&gt;

&lt;p&gt;We collect &lt;strong&gt;patterns from past tasks&lt;/strong&gt;, such as:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time of Day&lt;/strong&gt; (e.g., morning = “Check emails”)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day of the Week&lt;/strong&gt; (e.g., Monday = “Plan weekly goals”)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Frequency&lt;/strong&gt; (e.g., “Workout” appears every 2 days)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is trained on these inputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;brain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;brain.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;net&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;brain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;NeuralNetwork&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Example training data (simplified)&lt;/span&gt;
&lt;span class="nx"&gt;net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;train&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;morning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;workday&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check Emails&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;evening&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weekend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Watch Netflix&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// Predict next task&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;morning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;workday&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Check Emails"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Running Predictions in Karui
&lt;/h2&gt;

&lt;p&gt;Karui would pass the current time, day, and past tasks into the trained model. The app would then suggest tasks dynamically, adjusting to user habits.&lt;/p&gt;

&lt;p&gt;If you always write code at 8 PM, Karui suggests “Code for 1 hour.”&lt;/p&gt;

&lt;p&gt;If you skip workouts too often, Karui reminds you with a guilt trip.&lt;/p&gt;

&lt;p&gt;If it’s Sunday night, Karui suggests “Plan next week’s tasks.”&lt;/p&gt;




&lt;h2&gt;
  
  
  The Future: Smarter Productivity, Minimalism Intact
&lt;/h2&gt;

&lt;p&gt;Karui is built to be simple and efficient, but that doesn't mean it can't be smart. A lightweight, on-device neural network could make todo lists more intuitive, without bloat or privacy risks.&lt;/p&gt;

&lt;p&gt;Would you use AI-powered task predictions in a minimalist app? Let me know!&lt;/p&gt;




</description>
    </item>
    <item>
      <title>Introducing HTML++ – The Future of Web Development</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Tue, 01 Apr 2025 00:20:00 +0000</pubDate>
      <link>https://dev.to/ronynn/introducing-html-the-future-of-web-development-2abj</link>
      <guid>https://dev.to/ronynn/introducing-html-the-future-of-web-development-2abj</guid>
      <description>&lt;h2&gt;
  
  
  HTML++: The First Full-Stack HTML Programming Language
&lt;/h2&gt;

&lt;p&gt;For years, developers have been burdened by unnecessary complexities like JavaScript, Python, and even CSS. But what if I told you that &lt;strong&gt;HTML alone can do it all&lt;/strong&gt;?  &lt;/p&gt;

&lt;p&gt;Welcome to &lt;strong&gt;HTML++&lt;/strong&gt;, the first full-stack, AI-powered, blockchain-enabled, &lt;strong&gt;low-code-no-code&lt;/strong&gt; programming language built entirely on &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; elements.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Why HTML++?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Learning Curve:&lt;/strong&gt; If you know &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, you already know HTML++.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript-Free:&lt;/strong&gt; No need for annoying scripts—just add &lt;code&gt;data-ai="true"&lt;/code&gt; and let the browser handle it.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS on Steroids:&lt;/strong&gt; We replaced CSS with &lt;code&gt;&amp;lt;style type="ultra-css"&amp;gt;&lt;/code&gt;, so now your animations compile to WebAssembly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend-Free:&lt;/strong&gt; With &lt;code&gt;&amp;lt;meta server="true"&amp;gt;&lt;/code&gt;, HTML++ automatically deploys itself to an &lt;strong&gt;ethically-sourced cloud server&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Features of HTML++
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. AI-Driven Code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Forget writing logic! Just describe what you want in a &lt;code&gt;&amp;lt;describe&amp;gt;&lt;/code&gt; tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;describe&amp;gt;&lt;/span&gt;
  A todo list app with machine learning and dark mode.
&lt;span class="nt"&gt;&amp;lt;/describe&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And boom—HTML++ generates it automatically.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Blockchain-Powered Forms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every form submission is now stored on the blockchain for security.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;form data-blockchain="true"&amp;gt;
  &amp;lt;input type="text" placeholder="Enter email" /&amp;gt;
  &amp;lt;button&amp;gt;Submit&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No backend needed! Your data is now an NFT.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;AI-Powered Debugging&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;HTML++ automatically fixes errors in real-time. If something breaks, just add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;fix&amp;gt;
  Make it work.
&amp;lt;/fix&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the AI will regenerate your entire app.&lt;/p&gt;




&lt;p&gt;Goodbye JavaScript. Hello, Sanity.&lt;/p&gt;

&lt;p&gt;HTML++ is the only language you'll ever need. Get started today by upgrading your browser with our HTML++ compiler (a single 3GB extension).&lt;/p&gt;

&lt;p&gt;HTML++: Because who needs logic when you have &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Happy April Fools Day!!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>jokes</category>
      <category>discuss</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Automating Android APK Builds with GitHub Actions (The Sane Way)</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Sun, 30 Mar 2025 20:19:00 +0000</pubDate>
      <link>https://dev.to/ronynn/automating-android-apk-builds-with-github-actions-the-sane-way-1h95</link>
      <guid>https://dev.to/ronynn/automating-android-apk-builds-with-github-actions-the-sane-way-1h95</guid>
      <description>&lt;p&gt;Manually building and signing an APK every time you make a change? Nah, that’s a waste of time. The right way to do it is to automate the entire process using GitHub Actions. That way, every push or tag automatically triggers a clean, reproducible build.&lt;/p&gt;

&lt;p&gt;Here’s how to set up GitHub Actions to build your Android APK (the sane way).&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Create a .github/workflows/build.yml File
&lt;/h2&gt;

&lt;p&gt;Inside your repo, make this directory and file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/workflows/build.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, paste this inside:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Build Android APK

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    name: Build APK
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'

      - name: Setup Gradle cache
        uses: gradle/gradle-build-action@v3

      - name: Build debug APK
        run: ./gradlew assembleDebug

      - name: Upload APK
        uses: actions/upload-artifact@v3
        with:
          name: Karui-APK
          path: app/build/outputs/apk/debug/app-debug.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This workflow:&lt;br&gt;
✅ Runs on Ubuntu (clean environment)&lt;br&gt;
✅ Uses Java 17 (modify if needed)&lt;br&gt;
✅ Caches Gradle for faster builds&lt;br&gt;
✅ Builds a debug APK&lt;br&gt;
✅ Uploads the APK as an artifact (so you can download it)&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Adding Signing for a Release APK
&lt;/h2&gt;

&lt;p&gt;If you want to distribute a signed APK (for Play Store or F-Droid), modify the workflow:&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Store Your Keystore Securely
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Convert your keystore to Base64 (so GitHub can store it as a secret):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;base64 -w 0 my-release-key.jks &amp;gt; keystore.b64&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Copy the contents of keystore.b64.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to GitHub → Your Repo → Settings → Secrets and variables → Actions → New Repository Secret&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a new secret:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Name: ANDROID_KEYSTORE&lt;/p&gt;

&lt;p&gt;Value: Paste the Base64 string&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Add Keystore Passwords as Secrets
&lt;/h3&gt;

&lt;p&gt;Also add these secrets:&lt;/p&gt;

&lt;p&gt;KEYSTORE_PASSWORD – Your keystore password&lt;/p&gt;

&lt;p&gt;KEY_ALIAS – The alias of your key&lt;/p&gt;

&lt;p&gt;KEY_PASSWORD – Your key’s password&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 3: Modify build.yml to Sign the APK
&lt;/h3&gt;

&lt;p&gt;Now update the workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- name: Decode keystore
        run: echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 -d &amp;gt; my-release-key.jks

      - name: Build release APK
        run: ./gradlew assembleRelease

      - name: Sign APK
        run: |
          jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 \
            -keystore my-release-key.jks -storepass ${{ secrets.KEYSTORE_PASSWORD }} \
            -keypass ${{ secrets.KEY_PASSWORD }} \
            app/build/outputs/apk/release/app-release-unsigned.apk ${{ secrets.KEY_ALIAS }}

      - name: Verify signature
        run: jarsigner -verify -verbose -certs app/build/outputs/apk/release/app-release-unsigned.apk

      - name: Align APK
        run: |
          $ANDROID_HOME/build-tools/34.0.0/zipalign -v 4 \
            app/build/outputs/apk/release/app-release-unsigned.apk \
            app/build/outputs/apk/release/app-release.apk

      - name: Upload Signed APK
        uses: actions/upload-artifact@v3
        with:
          name: Karui-Signed-APK
          path: app/build/outputs/apk/release/app-release.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does:&lt;br&gt;
✅ Decodes the keystore&lt;br&gt;
✅ Builds a release APK&lt;br&gt;
✅ Signs it using jarsigner&lt;br&gt;
✅ Verifies the signature&lt;br&gt;
✅ Aligns it (important for efficiency)&lt;br&gt;
✅ Uploads the signed APK&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Results
&lt;/h2&gt;

&lt;p&gt;Now, every push to main will:&lt;/p&gt;

&lt;p&gt;Build a debug APK (for testing)&lt;/p&gt;

&lt;p&gt;Build &amp;amp; sign a release APK (ready for distribution)&lt;/p&gt;

&lt;p&gt;No more "works on my machine" nonsense. Every build is clean and reproducible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Check Out Karui
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;Karui&lt;/a&gt; using this exact setup. 84KB, Unix-inspired, and built the right way—minimal, efficient, and reproducible.&lt;/p&gt;

&lt;p&gt;If you’re into simple, lightweight apps, give it a look. Maybe even steal my GitHub Actions workflow for your own projects!&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>android</category>
      <category>github</category>
    </item>
    <item>
      <title>Getting my app into IzzyOnDroid: Making It Fully Reproducible</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Sat, 29 Mar 2025 16:15:00 +0000</pubDate>
      <link>https://dev.to/ronynn/getting-karui-into-izzyondroid-making-it-fully-reproducible-1lnk</link>
      <guid>https://dev.to/ronynn/getting-karui-into-izzyondroid-making-it-fully-reproducible-1lnk</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2Fronynn%2Fkarui%3Fstyle%3Dsocial" alt="GitHub Repo stars" width="82" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Getting Karui into the IzzyOnDroid F-Droid repo wasn’t just about submitting a link and calling it a day. F-Droid has strict rules, and I had to clean up my code to make it fully reproducible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Reproducibility?
&lt;/h2&gt;

&lt;p&gt;A reproducible build means anyone can take my source code, compile it, and get the exact same APK—byte for byte. No weird dependencies, no environment-specific builds, just pure, verifiable software.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Had to Change
&lt;/h2&gt;

&lt;p&gt;Removed dependency blocks – IzzyOnDroid (and F-Droid in general) doesn’t like anything that could introduce non-free dependencies. So, I stripped out anything unnecessary and ensured all dependencies were explicitly defined and open-source. These are blocks of encrypted code that is only readable by google, thus non-free.&lt;/p&gt;

&lt;p&gt;No precompiled binaries – Everything had to be built from source, no sneaky prebuilt libraries.&lt;/p&gt;

&lt;p&gt;GitHub Actions for signing – Instead of relying on a local build, I automated the process using GitHub Actions. This ensures every APK is built in a clean, controlled environment with my own signing key, making the process transparent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apt.izzysoft.de/fdroid/index/apk/io.github.ronynn.karui" rel="noopener noreferrer"&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%2Fhhp0t7ylcdc4ub95atpg.png" alt="Get it on IzzyOnDroid" width="606" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, Karui is officially IzzyOnDroid-approved, meaning Android users can install and update it easily via F-Droid. Another step toward keeping software lightweight, efficient, and truly open.&lt;/p&gt;

&lt;p&gt;If you haven’t checked it out yet, now’s the time!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;https://github.com/ronynn/karui&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>github</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Karui: My 84KB Unix-Inspired Android App Just Got GitHub’s Star Struck Badge!</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Fri, 28 Mar 2025 11:48:31 +0000</pubDate>
      <link>https://dev.to/ronynn/karui-my-84kb-unix-inspired-android-app-just-got-githubs-star-struck-badge-13ie</link>
      <guid>https://dev.to/ronynn/karui-my-84kb-unix-inspired-android-app-just-got-githubs-star-struck-badge-13ie</guid>
      <description>&lt;p&gt;Yesterday was a big day—Karui, my ultra-lightweight Android to-do list app, just earned the GitHub Star Struck badge! If you don’t know, that’s what GitHub gives you when your project gets noticed by the community.&lt;/p&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%2F3qyjwzjx2tpcupjpfsht.jpg" 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%2F3qyjwzjx2tpcupjpfsht.jpg" alt="Karui Screenshot" width="720" height="1367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Karui is built for those who love simplicity, efficiency, and a bit of that Unix aesthetic. It’s a mix of System 24 CSS vibes (if you know, you know) and a touch of that old-school Windows Mobile design—clean lines, no fluff, just what you need. It’s only 84KB. No bloat, no ads, just a straight-up todo list that works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2Fronynn%2Fkarui%3Fstyle%3Dsocial" alt="Karui stars" width="82" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fact that people are noticing it? That’s wild. I built Karui because I wanted something fast and reliable, and now it’s getting love from others too. If you haven’t checked it out yet, it’s on GitHub—go give it a star if you like snappy, minimal, and Unix-inspired apps: &lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;https://github.com/ronynn/karui&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What programming tools/frameworks do you think will stay relevant 15 years in the future?</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Tue, 11 Mar 2025 17:03:07 +0000</pubDate>
      <link>https://dev.to/ronynn/what-programming-toolsframeworks-do-you-think-will-stay-relevant-15-years-in-the-future-55gp</link>
      <guid>https://dev.to/ronynn/what-programming-toolsframeworks-do-you-think-will-stay-relevant-15-years-in-the-future-55gp</guid>
      <description>&lt;p&gt;Alt Title: How do you know if a framework is worth sticking with?&lt;/p&gt;

&lt;p&gt;I have been learning svelte for the past few days and have even started porting an alpine.js project to svelte. While svelte felt much easier than react, having studied some react for freecodecamp certificate, I can't quite call svelte easy by itself. And thus every once in a while I keep asking myself is it going to be worth it? Will I raise my skills enough to make really cool things or am I going to bow out whenever some concept feels slightly tough?&lt;/p&gt;

&lt;p&gt;Ignoring my lack of perseverance, what frameworks do you think will be active enough in the next 15 years?&lt;/p&gt;

&lt;p&gt;To avoid this question becoming a contested topic, I would like to clarify I got this question while looking at livescript's syntax, wondering why it never took off and became a dead language. Then wasted time at reading online discussions on why elm is no longer active anymore, and the split of ReScript from ReasonML, I learned about how people who get used to functional programming based languages always feel like all other languages are cavemen/primitive compared to its beauty. BASIC was a beginners learning tool to begin with, but why did pascal stopped being actively used?&lt;/p&gt;

&lt;p&gt;I remember looking for a 3d renderer in 2018 or 2019 for a one off project, picked threejs but there was an overwhelming amount of choice of things to use, apart from unity engine and unreal most of those frameworks or engines are no longer even used anywhere (atleast in public repos), documentations take you to sold out domains (a github repo of docs could keep the tools usable atleast for tinkerers).&lt;/p&gt;

&lt;p&gt;The kind of heights things like coffeescript and jquery were at one point compared to others is not even close to what we have now, which is good thing that we can design our things in a way that feels suitable to us, but If I have to port something that I wished to be something big, perhaps a decade long project, then it feels like a bad tooling choice from the start.&lt;/p&gt;

&lt;p&gt;On a related note, the project that I am porting from alpine.js to svelte: &lt;a href="https://github.com/ronynn/karui" rel="noopener noreferrer"&gt;Karui&lt;/a&gt; (just thrown in the src folder in the repo the app currently uses alpinejs). Alpine.js was great, but any typing mistake anywhere would break the whole thing without clear feedback, console.log was my only friend. Svelte's component based system felt brilliant but vite kept showing blank page every 3-4 minutes with no errors anywhere, I had to keep guessing the mistakes, and rerun pnpm run dev too many times. I see that as a vite problem, although would need to test more with other things. So my question isn't about vite (I am yet to understand that error), it's about gathering some general opinions on how does one pick a stack (language/ framework/ tooling) for longetivity?&lt;/p&gt;

&lt;p&gt;For those who have worked in the field for some time, what signs do you look for to see if a framework has staying power?&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>discuss</category>
      <category>svelte</category>
      <category>programming</category>
    </item>
    <item>
      <title>Migrating my friend's HTML project to Rust + Dioxus</title>
      <dc:creator>ronynn</dc:creator>
      <pubDate>Tue, 04 Mar 2025 12:03:18 +0000</pubDate>
      <link>https://dev.to/ronynn/migrate-your-html-project-to-rust-dioxus-or-you-are-doomed-3ng</link>
      <guid>https://dev.to/ronynn/migrate-your-html-project-to-rust-dioxus-or-you-are-doomed-3ng</guid>
      <description>&lt;p&gt;I have a friend who after reading some blog posts and social media memes that rust is the future and what not used to keep suggesting anything I am making should be made in rust.&lt;/p&gt;

&lt;p&gt;So this friend of mine recently started learning HTML and was making a simple personal page. I for some reason wanted to make a meme about how he should be using rust for this too. So I sat down and wrote this entire article, posted it on the issues section of his repo. We had a good laugh but I thought I would like to get more thoughts on this too from others.&lt;/p&gt;




&lt;h2&gt;
  
  
  Critical Concern for the Future of This Project
&lt;/h2&gt;




&lt;p&gt;I just happened to stumble upon this repo and was immediately struck by something concerning. You’ve chosen HTML as the foundation for your personal page, this path is not sustainable long-term, this is a house of cards. If you don’t act now, I fear you will soon face crippling technical debt and, ultimately, a full-scale rewrite.&lt;/p&gt;

&lt;p&gt;HTML simply doesn’t have the type safety, memory safety, or concurrency features necessary for a modern, production-grade personal webpage. Right now, sure, it might load quickly, and yes, it might be accessible to virtually every browser with minimal overhead—but at what cost?&lt;/p&gt;

&lt;p&gt;Why Rust + Dioxus is the only sensible choice&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;While technically, benchmarks indicate that HTML and raw JavaScript are faster than Rust on the web, you have to remember that speed isn’t everything. Dioxus introduces valuable abstractions, Rust’s advanced memory management ensures that your &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tags and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; elements are allocated the same level of architectural rigor as a distributed systems backend, or a aerospace control system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Today, it’s “just” a personal page. But what happens when you need to scale? What if you decide to add a second page? Or ... a contact form? With HTML, you’d have to copy-paste code. With Rust, you can write robust, reusable components with compile-time safety. It’s a no-brainer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your current setup has zero protections against memory leaks, buffer overflows. Dioxus, leveraging Rust’s borrow checker, ensures that every &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; element is safely allocated and deallocated. You never know when a mismanaged &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; might lead to catastrophic undefined behavior. Right now, your HTML is raw, unprotected, and vulnerable. Anyone could open DevTools and inspect your elements. This is a security risk. Rust’s borrow checker ensures that every &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; is allocated safely, and best of all—once compiled, nobody can modify your page without a complete recompile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Concurrency – Your website may not be using threads now, but what happens when it needs to? Imagine multiple users visiting at the same time. Can your current setup guarantee data race safety? Rust can.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I have written a hello world program in Rust before, which I believe qualifies me to assist in this migration. Under your guidance, I’d be more than happy to contribute and help rewrite this entire project in a safer, more performant stack, your personal webpage will finally be in a production-ready state, capable of handling enterprise-level traffic without breaking a sweat.&lt;/p&gt;

&lt;p&gt;You need to future proof your page against inevitable HTML deprecations.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Changed one line to make it funnier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So what did you think of this? Don't tell me you actually agreed.&lt;/p&gt;

</description>
      <category>jokes</category>
      <category>rust</category>
      <category>watercooler</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
