<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Vasileios Chroniadis blog</title><link>https://chronvas.github.io/posts/</link><description>Recent content in Posts on Vasileios Chroniadis blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 16 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://chronvas.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>From Android-Dependent to Platform-Agnostic - The 3 Modern Android Library Categories</title><link>https://chronvas.github.io/posts/2026-7-16-from-android-dependent-to-platform-agnostic-the-3-modern-android-library-categories/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2026-7-16-from-android-dependent-to-platform-agnostic-the-3-modern-android-library-categories/</guid><description>&lt;p&gt;Over the past decade of building Android libraries, I’ve realized they differ not just by what they do, but by &lt;strong&gt;how tightly they’re coupled to the Android OS&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;a href="https://chronvas.github.io/img/android-to-kmp.png"&gt;&lt;img src="https://chronvas.github.io/img/android-to-kmp.png"&gt;&lt;/a
&lt;/figure&gt;
&lt;p&gt;When designing or choosing a library today, understanding this level of coupling is crucial. Historically, libraries fell into two buckets. Thanks to &lt;strong&gt;Kotlin Multiplatform (&lt;a href="https://kotlinlang.org/multiplatform/"&gt;KMP&lt;/a&gt;)&lt;/strong&gt;, we now have a clear third category.&lt;/p&gt;
&lt;p&gt;Through my own experience, I’ve found it helpful to group these libraries into three main categories, ranked from &amp;lsquo;deeply Android&amp;rsquo; to &amp;lsquo;completely platform-agnostic.&lt;/p&gt;</description></item><item><title>The Power of Neutral Friction- Why the ‘Grill Me’ Skill is a Game-Changer for AI Coding</title><link>https://chronvas.github.io/posts/2026-6-15-the-power-of-neutral-friction-why-the-grill-me-skill-is-a-game-changer-for-ai-coding/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2026-6-15-the-power-of-neutral-friction-why-the-grill-me-skill-is-a-game-changer-for-ai-coding/</guid><description>&lt;p&gt;In the rapidly evolving landscape of AI-assisted software engineering, we routinely fall into the “specs-to-code” cycle: a frustrating endless cycle of prompt engineering, trying to perfect instructions rather than engaging with the messy, architectural reality of our thoughts and of our projects.&lt;/p&gt;
&lt;p&gt;The reality is that the specs-to-code approach currently doesn’t work very effectively. LLM’s lack the contextual knowledge, but until the technology evolves, we must find more deliberate ways to work with LLMs.&lt;/p&gt;</description></item><item><title>The Socio-Technical Crossroads - Engineering in an Era of Infinite Output</title><link>https://chronvas.github.io/posts/2026-05-19-the-socio-technical-crossroads--engineering-in-an-era-of-infinite-output/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2026-05-19-the-socio-technical-crossroads--engineering-in-an-era-of-infinite-output/</guid><description>&lt;p&gt;Today I watched an incredible Google I/O presentation by Adam Bender titled &amp;ldquo;Software Engineering at the Tipping Point.&amp;rdquo; It perfectly articulated something I’ve been thinking about a lot: as AI automates the &amp;ldquo;how&amp;rdquo; of writing code, our jobs are rapidly shifting toward the &amp;ldquo;why.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;For decades, as software engineers, we have poured our values, our ethos, and our intentions into products through our code. We used our techne—our technical craft—to express what we valued. We valued mastery over specific languages like Kotlin or framework architectures.&lt;/p&gt;</description></item><item><title>Be careful what you wish for</title><link>https://chronvas.github.io/posts/2026-4-22-be-careful-what-you-wish-for/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2026-4-22-be-careful-what-you-wish-for/</guid><description>&lt;p&gt;A tiny story about AI&lt;/p&gt;
&lt;figure&gt;
&lt;a href="https://chronvas.github.io/img/lamp.png"&gt;&lt;img src="https://chronvas.github.io/img/lamp.png"&gt;&lt;/a
&lt;/figure&gt;
&lt;p&gt;Articles praising AI capabilities are everywhere. Limitations? Not so much. That’s what makes small, revealing mishaps like this one fun and worth sharing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I recently asked an AI coding agent to help me with a small project. The requirement was simple: read a file that sat just outside the project folder, and make some code out of that.&lt;/p&gt;
&lt;p&gt;Because of how the chosen build system works, that file could not be used since it was located just outside of the project folder.&lt;/p&gt;</description></item><item><title>A simple software principle</title><link>https://chronvas.github.io/posts/2023-11-13-a-simple-software-principle/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2023-11-13-a-simple-software-principle/</guid><description>&lt;p&gt;&lt;em&gt;Prefer language tools, if they exist, rather than relying on assumptions.&lt;/em&gt;&lt;/p&gt;
&lt;figure&gt;
&lt;a href="https://chronvas.github.io/img/workshop.png"&gt;&lt;img src="https://chronvas.github.io/img/workshop.png"&gt;&lt;/a
&lt;/figure&gt;
&lt;p&gt;Assume you are working on a project that consumes a third-party SDK that provides you with a simple list of fruits. Your application’s task is to take these fruits and make juice with them. You name the juice that you make with the name of the 1st fruit you get from this list.&lt;/p&gt;
&lt;p&gt;Your application looks like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;import fruitery.SDK
import fruitery.SDK.Fruit
fun main(args: Array&amp;lt;String&amp;gt;) {
val sdk = SDK()
val fruits = sdk.getFruits()
val juice = makeJuice(fruits)
}
private fun makeJuice(fruits: List&amp;lt;Fruit&amp;gt;) =
Juice(
name = fruits.first().name,
content = squash(fruits)
)
}
private data class Juice(val name: String, val content: String)
private fun squash(fruits: List&amp;lt;Fruit&amp;gt;) = /* squash the fruits */
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Do you see a problem with that? If not, look closer. More specifically “fruits.first()”. Kotlin docs state clearly that it can throw, but there is no compilation error. It is therefore up to you to decide if you build your app to defend against this possibility or not. Some other languages don’t tell you that.&lt;/p&gt;</description></item><item><title>Asking questions and negative perception</title><link>https://chronvas.github.io/posts/2022-03-03-asking-questions-and-negative-perception/</link><pubDate>Thu, 03 Mar 2022 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2022-03-03-asking-questions-and-negative-perception/</guid><description>&lt;p&gt;What happens often, is when people ask direct questions, the danger of being perceived as negative is high.&lt;/p&gt;
&lt;p&gt;So how does one maintain a positive perception, while still being able to ask and receive questions?&lt;/p&gt;
&lt;p&gt;Quick answer: Context and perception.&lt;/p&gt;
&lt;h2 id="why-would-asking-questions-could-be-perceived-as-negative"&gt;Why would asking questions could be perceived as negative?&lt;/h2&gt;
&lt;h3 id="timing-inconvenience"&gt;Timing inconvenience.&lt;/h3&gt;
&lt;p&gt;Imagine you are an expert in satellites, and you are speaking in a conference about a technology that satellites use. Then an attendee raises a hand and asks for a satellite definition.&lt;/p&gt;</description></item><item><title>Dagger2 Presentation</title><link>https://chronvas.github.io/posts/2017-05-16-dagger-2/</link><pubDate>Fri, 16 Jun 2017 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2017-05-16-dagger-2/</guid><description>&lt;p&gt;I have written a small presentation for developers starting on Dependency Injection frameworks in general, and getting a more detailed view of the basics of Dagger2 for Android&lt;/p&gt;
&lt;p&gt;The presentation is hosted at slides.com and you can view it following this link &lt;a href="https://slides.com/chronvas/dagger-2"&gt;https://slides.com/chronvas/dagger-2&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Realm for Android, pre-populating from Json and extracting the database</title><link>https://chronvas.github.io/posts/2016-08-01-realm-for-android-pre-populating-from-json-and-extracting-the-database/</link><pubDate>Mon, 01 Aug 2016 00:00:00 +0000</pubDate><guid>https://chronvas.github.io/posts/2016-08-01-realm-for-android-pre-populating-from-json-and-extracting-the-database/</guid><description>&lt;p&gt;Scroll to read, or continue reding in &lt;a class="social-btn" href="https://medium.com/@chron.vas/realm-for-android-pre-populating-from-json-and-extracting-the-database-8709a2f8db18" target="_blank" rel="noopener noreferrer"&gt;&lt;i class="fa fa-fw fa-medium"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ve came across the “hustle” of creating an app that will use Realm, having the database previously populated with data and just include the created database file in the published app, omitting the Json (or any other file) that is being used to populate it.&lt;/p&gt;
&lt;p&gt;Doing so for a “to be published” app saves time (parsing the file and populating a db) and space (omitting the file which used to create the database).&lt;/p&gt;</description></item></channel></rss>