<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Hafiz M. Azeem</title><link>https://azeem.dev/posts/</link><description>Recent content in Posts on Hafiz M. Azeem</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><copyright>© 2026</copyright><lastBuildDate>Tue, 07 Oct 2025 10:00:00 +0500</lastBuildDate><atom:link href="https://azeem.dev/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Building Smart Form Validation in Jetpack Compose: A UX-First Approach</title><link>https://azeem.dev/posts/2025-10-07-jetpack-compose-smart-form-validation/</link><pubDate>Tue, 07 Oct 2025 10:00:00 +0500</pubDate><guid>https://azeem.dev/posts/2025-10-07-jetpack-compose-smart-form-validation/</guid><description>&lt;p&gt;Form validation is one of those features that seems simple until you start thinking about user experience. Show errors too early, and you frustrate users before they&amp;rsquo;ve even started typing. Show them too late, and users submit invalid forms repeatedly. Today, I&amp;rsquo;ll walk you through building a smart form validation system in Jetpack Compose that strikes the perfect balance.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;The Problem with Traditional Form Validation&#10; &lt;div id="the-problem-with-traditional-form-validation" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-problem-with-traditional-form-validation" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Most form implementations I&amp;rsquo;ve seen (and built, if I&amp;rsquo;m honest) fall into one of these traps:&lt;/p&gt;</description></item><item><title>Arabic Text in SkiaSharp &amp; Harfbuzz</title><link>https://azeem.dev/posts/2020-05-01-skia-sharp-arabic-text/</link><pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate><guid>https://azeem.dev/posts/2020-05-01-skia-sharp-arabic-text/</guid><description>How to render arabic text in SkiaSharp Canvas using Harfbuzz.</description></item><item><title>Arabic Text in SkiaSharp &amp; Harfbuzz</title><link>https://azeem.dev/posts/2020-05-01-skia-sharp-circular-menu/</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><guid>https://azeem.dev/posts/2020-05-01-skia-sharp-circular-menu/</guid><description>How to render arabic text in SkiaSharp Canvas using Harfbuzz.</description></item><item><title>Xamarin Android FullScreen Video View</title><link>https://azeem.dev/posts/2019-07-30-xamarin-android-fullscreen-videoview/</link><pubDate>Tue, 30 Jul 2019 00:00:00 +0000</pubDate><guid>https://azeem.dev/posts/2019-07-30-xamarin-android-fullscreen-videoview/</guid><description>Xamarin Android Binding for FullscreenVideoView.</description></item><item><title>Xamarin Android Native Sharing</title><link>https://azeem.dev/posts/2019-04-07-xamarin.android-sharing/</link><pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate><guid>https://azeem.dev/posts/2019-04-07-xamarin.android-sharing/</guid><description>Different ways of sharing UI in Xamarin Android.</description></item><item><title>Two Drawer Layouts from Same Side in Xamarin.Android</title><link>https://azeem.dev/posts/2019-01-05-android-double-drawer-layout/</link><pubDate>Sat, 05 Jan 2019 00:00:00 +0000</pubDate><guid>https://azeem.dev/posts/2019-01-05-android-double-drawer-layout/</guid><description>How to show secondary drawer in android material drawers over primary.</description></item><item><title>Xamarin.Forms 4.0.0-pre1</title><link>https://azeem.dev/posts/2018-12-03-xamarin.forms-4.0.0-pre1/</link><pubDate>Mon, 03 Dec 2018 00:00:00 +0000</pubDate><guid>https://azeem.dev/posts/2018-12-03-xamarin.forms-4.0.0-pre1/</guid><description>Big Changes in Xamarin.Forms 4.0 Prompt Early Preview.</description></item></channel></rss>