<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nobel Dahal · Writing</title><link>https://nobeldahal.com.np/writing</link><atom:link href="https://nobeldahal.com.np/feed.xml" rel="self" type="application/rss+xml"/><description>Case studies and notes from building business software.</description><language>en</language><item><title>What building IATA ONE Record taught me about linked data</title><link>https://nobeldahal.com.np/writing/what-one-record-taught-me</link><guid>https://nobeldahal.com.np/writing/what-one-record-taught-me</guid><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><description>Air cargo is moving from messages to linked data. Lessons from serving ONE Record from a real cargo system, beyond what the spec tells you.</description></item><item><title>Handing out air waybill numbers without handing out the same one twice</title><link>https://nobeldahal.com.np/writing/handing-out-air-waybill-numbers</link><guid>https://nobeldahal.com.np/writing/handing-out-air-waybill-numbers</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><description>An air waybill number is a scarce, audited resource that two people will try to take at the same second. Check digits, stock states, and the locks that keep it honest.</description></item><item><title>mTLS and OAuth2 on the same call, step by step</title><link>https://nobeldahal.com.np/writing/mtls-and-oauth2-together</link><guid>https://nobeldahal.com.np/writing/mtls-and-oauth2-together</guid><pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate><description>Some partner APIs want a client certificate on the connection and a bearer token on the request. Every way that goes wrong, in the order it went wrong for me.</description></item><item><title>Most waybills are the usual one</title><link>https://nobeldahal.com.np/writing/most-waybills-are-the-usual-one</link><guid>https://nobeldahal.com.np/writing/most-waybills-are-the-usual-one</guid><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><description>3,142 air waybills used just 149 routings, and five of them covered 87%. How that one number turned a data-entry form into a learning engine, without a model.</description></item><item><title>Designing a freight rate engine that four modes can share</title><link>https://nobeldahal.com.np/writing/designing-a-rate-engine</link><guid>https://nobeldahal.com.np/writing/designing-a-rate-engine</guid><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><description>Air, sea, road and rail price freight in different units by different rules. How I built one engine for all four, and the rules that kept it correct.</description></item><item><title>Keeping PHPJasper alive for a cargo ERP</title><link>https://nobeldahal.com.np/writing/maintaining-phpjasper</link><guid>https://nobeldahal.com.np/writing/maintaining-phpjasper</guid><pubDate>Fri, 16 Jan 2026 00:00:00 GMT</pubDate><description>Kaede prints air waybills, invoices and payslips through JasperReports. The PHP wrapper everyone uses had gone quiet, so I forked it and fixed what production kept finding.</description></item><item><title>Teaching a UI library to speak Nepali</title><link>https://nobeldahal.com.np/writing/teaching-a-ui-library-nepali</link><guid>https://nobeldahal.com.np/writing/teaching-a-ui-library-nepali</guid><pubDate>Tue, 09 Jan 2024 00:00:00 GMT</pubDate><description>I translated Syncfusion&apos;s Essential JS 2, 64 components and over four thousand strings, into Nepali. These are the choices that made it read like Nepali and not like a dictionary.</description></item><item><title>Integrating eSewa and Khalti in Laravel without trusting the redirect</title><link>https://nobeldahal.com.np/writing/esewa-khalti-laravel</link><guid>https://nobeldahal.com.np/writing/esewa-khalti-laravel</guid><pubDate>Fri, 16 Dec 2022 00:00:00 GMT</pubDate><description>Most eSewa and Khalti tutorials stop when the success page loads. That&apos;s exactly where the fraud starts. A production pattern from a government payment page, for any Laravel app in Nepal.</description></item><item><title>Taking money on a government website</title><link>https://nobeldahal.com.np/writing/taking-money-on-a-government-website</link><guid>https://nobeldahal.com.np/writing/taking-money-on-a-government-website</guid><pubDate>Wed, 14 Dec 2022 00:00:00 GMT</pubDate><description>How Kalimati&apos;s traders came to pay their dues from their phones through eSewa and Khalti, and the checks that keep a public payment page honest.</description></item><item><title>One developer, one market, no ads</title><link>https://nobeldahal.com.np/writing/one-developer-one-market</link><guid>https://nobeldahal.com.np/writing/one-developer-one-market</guid><pubDate>Tue, 19 Jul 2022 00:00:00 GMT</pubDate><description>Building the website and Android app for Kalimati, the market that sets vegetable prices for half of Kathmandu, on my own.</description></item><item><title>A date that didn&apos;t fit in an integer</title><link>https://nobeldahal.com.np/writing/a-date-that-did-not-fit</link><guid>https://nobeldahal.com.np/writing/a-date-that-did-not-fit</guid><pubDate>Mon, 31 Jan 2022 00:00:00 GMT</pubDate><description>The year 4123 crashed Laravel&apos;s date validation on 32-bit PHP. Here&apos;s how I found it, and the four-line fix that shipped in Laravel 8.</description></item><item><title>Finding the nearest agent among millions</title><link>https://nobeldahal.com.np/writing/finding-the-nearest-agent</link><guid>https://nobeldahal.com.np/writing/finding-the-nearest-agent</guid><pubDate>Tue, 25 May 2021 00:00:00 GMT</pubDate><description>A US brokerage moved from Zoho to Microsoft Dynamics. The data moved fine; the question it couldn&apos;t answer quickly was &quot;who is closest to this lead?&quot;</description></item><item><title>The check that only lived in the browser</title><link>https://nobeldahal.com.np/writing/the-check-that-only-lived-in-the-browser</link><guid>https://nobeldahal.com.np/writing/the-check-that-only-lived-in-the-browser</guid><pubDate>Fri, 01 May 2020 00:00:00 GMT</pubDate><description>How an email field in Everest Forms trusted the browser, how I closed it, and the regression I shipped and fixed along the way.</description></item></channel></rss>