<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>Orankit - Blog</title>
	<link>https://orankit.com/en/blog/</link>
	<atom:link href="https://orankit.com/en/blog/feed.xml" rel="self" type="application/rss+xml" />
	<description>Notes from implementing the tools — specs we researched, pitfalls we hit, and reference material we leaned on.</description>
	<language>en-US</language>
	<lastBuildDate>Sun, 26 Apr 2026 00:00:00 GMT</lastBuildDate>
	<item>
		<title>Why Base64 grows by 4/3, and how URL-safe Base64 differs</title>
		<link>https://orankit.com/en/blog/base64-encoding/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/base64-encoding/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How Base64 works, the 3-byte to 4-character mapping, why output is roughly 33% larger, and the URL-safe variant that swaps `+/` for `-_`.</description>
		<category>Base64</category>
		<category>Encoding</category>
		<category>URL</category>
	</item>
	<item>
		<title>How BMI is calculated, and why WHO and Japan use different thresholds</title>
		<link>https://orankit.com/en/blog/bmi-who-vs-japan/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/bmi-who-vs-japan/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The BMI formula, why height is squared, the difference between WHO international thresholds and the stricter Japanese standard, and why Japan&apos;s cutoff is lower.</description>
		<category>Health</category>
		<category>BMI</category>
		<category>Statistics</category>
	</item>
	<item>
		<title>snake_case, camelCase, PascalCase, kebab-case: picking the right convention</title>
		<link>https://orankit.com/en/blog/case-conventions/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/case-conventions/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The main programming naming conventions, what each language community uses, and how to choose for APIs, file names, and URLs.</description>
		<category>Naming</category>
		<category>Code style</category>
	</item>
	<item>
		<title>Reading chmod numbers: what 755 and 644 actually mean</title>
		<link>https://orankit.com/en/blog/chmod-permissions/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/chmod-permissions/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How chmod&apos;s three-digit numbers map to read/write/execute for owner/group/other, plus setuid/setgid/sticky bit explained.</description>
		<category>Linux</category>
		<category>Unix</category>
		<category>Permissions</category>
	</item>
	<item>
		<title>Reading CIDR notation: what /24 and /16 actually mean</title>
		<link>https://orankit.com/en/blog/cidr-notation/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/cidr-notation/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Why CIDR is &quot;address + prefix length&quot;, how it relates to subnet masks, how to count usable hosts, and rough sizes for the prefixes you see most.</description>
		<category>Networking</category>
		<category>IP</category>
		<category>CIDR</category>
	</item>
	<item>
		<title>Color spaces: hex, RGB, HSL, OKLCH and when each fits</title>
		<link>https://orankit.com/en/blog/color-spaces/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/color-spaces/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Web color formats (hex, RGB, HSL, OKLCH), how they convert, and why a perceptually uniform space matters for modern design.</description>
		<category>Color</category>
		<category>CSS</category>
		<category>Design</category>
	</item>
	<item>
		<title>Reading cron expressions without getting tripped up</title>
		<link>https://orankit.com/en/blog/cron-fields/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/cron-fields/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The five-field structure of cron, what `*` `,` `-` `/` mean, the OR-combination trap of day-of-month and day-of-week, and the typos that cost you.</description>
		<category>cron</category>
		<category>Scheduling</category>
		<category>Operations</category>
	</item>
	<item>
		<title>CSV quoting rules and the spreadsheet compatibility you need to think about</title>
		<link>https://orankit.com/en/blog/csv-quoting-rules/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/csv-quoting-rules/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The RFC 4180 quoting rules for CSV, how to encode commas, newlines, and double quotes, and the BOM/line-ending pitfalls for Excel and Google Sheets.</description>
		<category>CSV</category>
		<category>Data</category>
		<category>Excel</category>
	</item>
	<item>
		<title>Euclid&apos;s algorithm: computing GCD in O(log n)</title>
		<link>https://orankit.com/en/blog/euclidean-gcd/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/euclidean-gcd/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How GCD and LCM relate, why Euclid&apos;s method works, its O(log n) complexity, and clean implementations.</description>
		<category>Algorithm</category>
		<category>Math</category>
		<category>Number theory</category>
	</item>
	<item>
		<title>How to choose between MD5, SHA-1, and SHA-256 in practice</title>
		<link>https://orankit.com/en/blog/hash-algorithm-choice/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/hash-algorithm-choice/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Differences between MD5, SHA-1, and SHA-256, the state of collision attacks, and which to use for checksums vs signatures vs password storage.</description>
		<category>Hashing</category>
		<category>Security</category>
		<category>Cryptography</category>
	</item>
	<item>
		<title>HMAC vs hash: why message authentication needs a key</title>
		<link>https://orankit.com/en/blog/hmac-vs-hash/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/hmac-vs-hash/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How HMAC differs from a plain hash, why adding a key turns hashing into authentication, and where HMAC fits in real protocols.</description>
		<category>HMAC</category>
		<category>Cryptography</category>
		<category>Authentication</category>
	</item>
	<item>
		<title>HTML entity escaping: why each context needs its own rules</title>
		<link>https://orankit.com/en/blog/html-entity-escaping/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/html-entity-escaping/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>HTML body, attribute values, JavaScript strings, and URLs each demand different escapes. The five core entities, double-escaping pitfalls, and the safe approach.</description>
		<category>HTML</category>
		<category>Security</category>
		<category>XSS</category>
	</item>
	<item>
		<title>Picking HTTP status codes without flinching</title>
		<link>https://orankit.com/en/blog/http-status-codes/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/http-status-codes/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>What 2xx / 3xx / 4xx / 5xx really mean, the tricky pairs (401 vs 403, 404 vs 410, 422 vs 400), and how to decide in API design.</description>
		<category>HTTP</category>
		<category>API</category>
		<category>Design</category>
	</item>
	<item>
		<title>IPv4 vs IPv6: notation, special ranges, and the state of migration</title>
		<link>https://orankit.com/en/blog/ipv4-vs-ipv6/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/ipv4-vs-ipv6/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How IPv4 and IPv6 differ in address notation, CIDR conventions, special-use ranges, and what dual-stack operation looks like in practice today.</description>
		<category>Networking</category>
		<category>IPv4</category>
		<category>IPv6</category>
	</item>
	<item>
		<title>JSON key ordering and where deterministic serialization matters</title>
		<link>https://orankit.com/en/blog/json-key-ordering/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/json-key-ordering/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Why JSON object keys are spec-unordered, what real-world implementations actually do, and the cases (signing, caching, diffs) where you need a stable order.</description>
		<category>JSON</category>
		<category>Serialization</category>
		<category>Determinism</category>
	</item>
	<item>
		<title>JSON Schema basics: a standard for validating data shape</title>
		<link>https://orankit.com/en/blog/json-schema-basics/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/json-schema-basics/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Core JSON Schema keywords, type / properties / required / pattern, $ref reuse, and where it fits in API design and config files.</description>
		<category>JSON</category>
		<category>Schema</category>
		<category>Validation</category>
	</item>
	<item>
		<title>Reading a JWT: header, payload, and signature explained</title>
		<link>https://orankit.com/en/blog/jwt-structure/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/jwt-structure/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Why a JWT is &quot;three Base64URL strings joined by dots&quot;, what each section contains, and how signature verification works in practice.</description>
		<category>JWT</category>
		<category>Authentication</category>
		<category>Security</category>
	</item>
	<item>
		<title>Lorem Ipsum: where it comes from and why it stuck</title>
		<link>https://orankit.com/en/blog/lorem-ipsum-history/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/lorem-ipsum-history/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The origin of Lorem Ipsum in Cicero, why it has lasted 500+ years as the default placeholder text, and the modern alternatives.</description>
		<category>Design</category>
		<category>Typography</category>
		<category>History</category>
	</item>
	<item>
		<title>Markdown TOC and anchors: GitHub-style slug generation and the pitfalls</title>
		<link>https://orankit.com/en/blog/markdown-toc-and-anchors/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/markdown-toc-and-anchors/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Why long articles need a table of contents, how Markdown anchor links (`[text](#anchor)`) are generated under GitHub Flavored Markdown, and what an auto-generator has to handle.</description>
		<category>Markdown</category>
		<category>Documentation</category>
		<category>SEO</category>
	</item>
	<item>
		<title>Mean, median, mode: picking the right summary statistic</title>
		<link>https://orankit.com/en/blog/mean-median-mode/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/mean-median-mode/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Definitions of mean, median, and mode, sensitivity to outliers, when each fits, and why response times need percentiles instead of averages.</description>
		<category>Statistics</category>
		<category>Data analysis</category>
		<category>Math</category>
	</item>
	<item>
		<title>Morse code: the original variable-length encoding</title>
		<link>https://orankit.com/en/blog/morse-code/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/morse-code/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How Morse code is structured, how letter length follows frequency, the origin of SOS, and where Morse still shows up.</description>
		<category>Morse code</category>
		<category>Communication</category>
		<category>Encoding</category>
	</item>
	<item>
		<title>Inside Git diff: an introduction to the Myers algorithm</title>
		<link>https://orankit.com/en/blog/myers-diff-algorithm/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/myers-diff-algorithm/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How the Myers algorithm finds the minimum edit script between two texts, the edit graph formulation, and the variants (patience, histogram) Git ships for more readable diffs.</description>
		<category>Algorithm</category>
		<category>Git</category>
		<category>diff</category>
	</item>
	<item>
		<title>Binary, octal, hex: why each base shows up in programming</title>
		<link>https://orankit.com/en/blog/number-bases/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/number-bases/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How each base is written, why hex maps cleanly to bytes, where octal still hides, and the conversion shortcuts that make this painless.</description>
		<category>Numeral system</category>
		<category>Binary</category>
		<category>Hex</category>
	</item>
	<item>
		<title>Password entropy, length, and character classes: speaking strength in numbers</title>
		<link>https://orankit.com/en/blog/password-entropy/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/password-entropy/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Why password strength is determined by length and character set, the entropy formula in bits, brute-force resistance estimates, and practical targets for real-world use.</description>
		<category>Password</category>
		<category>Security</category>
		<category>Entropy</category>
	</item>
	<item>
		<title>Punycode and internationalized domain names: what happens behind a Unicode URL</title>
		<link>https://orankit.com/en/blog/punycode-idn/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/punycode-idn/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How a domain like 日本.jp gets translated to ASCII via Punycode, the homograph attack risk it created, and how browsers decide whether to show Unicode or Punycode.</description>
		<category>DNS</category>
		<category>Internationalization</category>
		<category>Security</category>
	</item>
	<item>
		<title>How QR codes work: error correction and choosing a version</title>
		<link>https://orankit.com/en/blog/qr-code-structure/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/qr-code-structure/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The structure of a QR code, the four error-correction levels, encoding modes, version (size) selection, and minimum quality for print.</description>
		<category>QR code</category>
		<category>Encoding</category>
	</item>
	<item>
		<title>PRNG vs CSPRNG: when each is the right random</title>
		<link>https://orankit.com/en/blog/random-prng/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/random-prng/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How pseudo-random and cryptographically secure random differ, why Math.random() is unsafe for security, and the bias trap of `% N`.</description>
		<category>Randomness</category>
		<category>Security</category>
		<category>Algorithm</category>
	</item>
	<item>
		<title>Regex greedy vs lazy: avoiding the classic traps</title>
		<link>https://orankit.com/en/blog/regex-greedy-vs-lazy/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/regex-greedy-vs-lazy/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The difference between `.*` and `.*?`, how greedy and lazy quantifiers behave, and the pitfalls you keep running into when matching HTML tags or string literals.</description>
		<category>Regex</category>
		<category>Pattern matching</category>
	</item>
	<item>
		<title>Roman numerals: subtractive notation and where they still appear</title>
		<link>https://orankit.com/en/blog/roman-numerals/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/roman-numerals/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The seven core symbols, additive vs subtractive notation, the 3999 ceiling, and the conversion algorithms.</description>
		<category>Roman numerals</category>
		<category>Math</category>
		<category>History</category>
	</item>
	<item>
		<title>KB vs KiB: SI prefixes, binary prefixes, and why the confusion persists</title>
		<link>https://orankit.com/en/blog/si-vs-binary-prefixes/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/si-vs-binary-prefixes/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How &quot;1 KB = 1000 bytes&quot; and &quot;1 KB = 1024 bytes&quot; came to coexist, IEC&apos;s KiB / MiB / GiB convention, and why storage and memory use different prefixes.</description>
		<category>Units</category>
		<category>Storage</category>
		<category>Standards</category>
	</item>
	<item>
		<title>Text and bytes: ASCII, UTF-8, and the gap between characters and bytes</title>
		<link>https://orankit.com/en/blog/text-binary-ascii/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/text-binary-ascii/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How characters become bytes, the 7-bit ASCII table, UTF-8&apos;s variable-length encoding, and why detecting an encoding from raw bytes is hard.</description>
		<category>Encoding</category>
		<category>ASCII</category>
		<category>Unicode</category>
	</item>
	<item>
		<title>Timezones, DST, and the IANA tz database: not getting trapped by time</title>
		<link>https://orankit.com/en/blog/timezones-and-dst/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/timezones-and-dst/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>Why &quot;timezone&quot; is more than a UTC offset, what the IANA tz database does, the singular cases at DST transitions, and how to handle time correctly in API design.</description>
		<category>Timezone</category>
		<category>DST</category>
		<category>Time handling</category>
	</item>
	<item>
		<title>Unicode and emoji: why one emoji is often several code points</title>
		<link>https://orankit.com/en/blog/unicode-emoji/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/unicode-emoji/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How emoji are represented in Unicode, surrogate pairs, ZWJ sequences, skin tone modifiers, and why JavaScript string length disagrees with what you see.</description>
		<category>Unicode</category>
		<category>Emoji</category>
		<category>Strings</category>
	</item>
	<item>
		<title>Unix timestamps and why the Year 2038 problem still matters</title>
		<link>https://orankit.com/en/blog/unix-timestamp-y2038/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/unix-timestamp-y2038/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How Unix time is defined, why the epoch is January 1, 1970, the 32-bit overflow that creates the Y2038 problem, and where it still hides.</description>
		<category>Time</category>
		<category>Unix</category>
		<category>Compatibility</category>
	</item>
	<item>
		<title>Two flavors of URL encoding: form-urlencoded vs RFC 3986</title>
		<link>https://orankit.com/en/blog/url-encoding-two-systems/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/url-encoding-two-systems/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>There are actually two URL encoding specs in play — form submission and the URI spec. They differ on spaces and reserved characters, and using the wrong one breaks subtly.</description>
		<category>URL</category>
		<category>Encoding</category>
		<category>HTTP</category>
	</item>
	<item>
		<title>UUID v4 vs v7: when to use which</title>
		<link>https://orankit.com/en/blog/uuid-v4-vs-v7/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/uuid-v4-vs-v7/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>How v1, v4, and v7 differ structurally, and how to choose between v4 and v7 for database index efficiency, unguessability, and sortability.</description>
		<category>UUID</category>
		<category>Database</category>
		<category>Identifiers</category>
	</item>
	<item>
		<title>WCAG contrast ratio 4.5:1: where the number comes from and what implementations miss</title>
		<link>https://orankit.com/en/blog/wcag-contrast-ratio/</link>
		<guid isPermaLink="true">https://orankit.com/en/blog/wcag-contrast-ratio/</guid>
		<pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
		<description>The origin of the 4.5:1 contrast ratio in WCAG, the relative-luminance formula behind it, AA vs AAA levels, and the thresholds for different text sizes.</description>
		<category>Accessibility</category>
		<category>WCAG</category>
		<category>Design</category>
	</item>
</channel>
</rss>