<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on ilham.dev</title><link>https://ilham.dev/tags/tools/</link><description>Recent content in Tools on ilham.dev</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 27 Sep 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://ilham.dev/tags/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>How I add a watermark without ruining the image</title><link>https://ilham.dev/posts/how-to-add-a-watermark-without-ruining-the-image/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-add-a-watermark-without-ruining-the-image/</guid><description>A watermark should identify or discourage reuse without making the image unreadable.
The Watermark Tool tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I add or subtract dates without counting calendar squares</title><link>https://ilham.dev/posts/how-to-add-or-subtract-dates-without-calendar-counting/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-add-or-subtract-dates-without-calendar-counting/</guid><description>Date math is easy to get wrong because months have different lengths and weekends may or may not count.
The Date Calculator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I break a URL into parts before debugging it</title><link>https://ilham.dev/posts/how-to-break-a-url-into-parts/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-break-a-url-into-parts/</guid><description>A URL contains several parts: scheme, host, path, query string, and sometimes a fragment. Debugging is easier when those parts are separated.
The URL Parser tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I build a Basic Auth header for testing</title><link>https://ilham.dev/posts/how-to-build-a-basic-auth-header-for-testing/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-a-basic-auth-header-for-testing/</guid><description>Basic Auth sends a username and password encoded with Base64 inside an Authorization header. It is not encryption by itself.
The Basic Auth Header tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I build a basic nginx config without starting from an empty file</title><link>https://ilham.dev/posts/how-to-build-a-basic-nginx-config/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-a-basic-nginx-config/</guid><description>An nginx config is easier to write when I start from the kind of site I am serving: static files, SPA, PHP, or reverse proxy.
The nginx Config Generator tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I build a find command without deleting the wrong files</title><link>https://ilham.dev/posts/how-to-build-find-command-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-find-command-safely/</guid><description>The find command is one of the most useful Linux commands, but it is also one of the commands I treat with respect. It can search thousands of files very quickly, and with the wrong option it can also delete thousands of files very quickly.</description></item><item><title>How I build an HTTP header block without forgetting security headers</title><link>https://ilham.dev/posts/how-to-build-an-http-header-block/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-an-http-header-block/</guid><description>Building headers from key/value rows helps avoid typo-heavy manual header blocks.
I use HTTP Header Builder for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I build an nginx reverse proxy config without memorising everything</title><link>https://ilham.dev/posts/how-to-build-nginx-reverse-proxy-config/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-nginx-reverse-proxy-config/</guid><description>An nginx reverse proxy config can look intimidating when you are still learning:
server { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } The config is not random.</description></item><item><title>How I build mock API responses that look real enough for frontend work</title><link>https://ilham.dev/posts/how-to-build-mock-api-responses-that-look-real-enough/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-mock-api-responses-that-look-real-enough/</guid><description>Mock responses help frontend and integration work move before the real backend endpoint is finished.
The API Mock Response Builder tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I build UTM links that I can still understand later</title><link>https://ilham.dev/posts/how-to-build-utm-links-that-are-readable/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-utm-links-that-are-readable/</guid><description>UTM links are normal URLs with tracking parameters added to the end.
A plain URL:
https://example.com/pricing A UTM URL:
https://example.com/pricing?utm_source=newsletter&amp;amp;utm_medium=email&amp;amp;utm_campaign=launch The UTM Builder helps build and parse these links without forgetting a parameter or mixing naming styles.</description></item><item><title>How I calculate age accurately for forms and records</title><link>https://ilham.dev/posts/how-to-calculate-age-accurately/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-calculate-age-accurately/</guid><description>Age sounds simple, but exact age depends on the date you measure against.
The Age Calculator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I calculate discounts before buying</title><link>https://ilham.dev/posts/how-to-calculate-discounts-before-buying/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-calculate-discounts-before-buying/</guid><description>Discounts are easier to compare when I calculate the final price instead of only reading the percentage.
The Discount Calculator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I calculate interest without hiding the assumptions</title><link>https://ilham.dev/posts/how-to-calculate-interest-without-hiding-the-assumptions/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-calculate-interest-without-hiding-the-assumptions/</guid><description>Interest calculations depend heavily on method: flat, effective, annuity, compound, tiered, or after-tax.
I use Interest Calculator for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I calculate loan payments before borrowing</title><link>https://ilham.dev/posts/how-to-calculate-loan-payments-before-borrowing/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-calculate-loan-payments-before-borrowing/</guid><description>A loan calculator helps me see the monthly payment, total interest, and how extra payments change the schedule.
I use Loan Calculator for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I calculate percentages without doing mental math</title><link>https://ilham.dev/posts/how-to-calculate-percentages-without-mental-math/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-calculate-percentages-without-mental-math/</guid><description>Percentages are simple until the question changes: percentage of, percentage increase, percentage decrease, and reverse percentage are different tasks.
The Percentage Calculator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I check a file hash before trusting a download</title><link>https://ilham.dev/posts/how-to-check-a-file-hash-before-trusting-a-download/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-a-file-hash-before-trusting-a-download/</guid><description>When I download an installer, ISO image, backup, or release archive, I sometimes see a checksum published next to it:
SHA256: 4a1f... That checksum is there so I can check whether my downloaded file is exactly the same file the publisher intended to provide.</description></item><item><title>How I check a JWT when an API login looks broken</title><link>https://ilham.dev/posts/how-to-read-and-verify-jwt/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-and-verify-jwt/</guid><description>A JWT is one of those strings that looks scary the first time you see it. It often appears in a login response, browser storage, or an API request header:</description></item><item><title>How I check a PDF digital signature without confusing it with a drawn signature</title><link>https://ilham.dev/posts/how-to-check-digital-signatures-in-pdfs/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-digital-signatures-in-pdfs/</guid><description>A PDF digital signature is cryptographic metadata. It is not the same thing as an image of a handwritten signature placed on a page.
The PDF Signature Checker tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I check an IBAN before using bank details</title><link>https://ilham.dev/posts/how-to-check-an-iban-before-sending-bank-details/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-an-iban-before-sending-bank-details/</guid><description>An IBAN check can validate structure and check digits, but it does not prove the account belongs to the intended person.
The IBAN Validator tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I check an IP address without overtrusting geolocation</title><link>https://ilham.dev/posts/how-to-check-an-ip-address-without-overtrusting-geolocation/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-an-ip-address-without-overtrusting-geolocation/</guid><description>An IP lookup can show useful network context, but it does not prove a person&amp;rsquo;s exact physical location.
The IP &amp;amp; Geolocation Lookup tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I check and remove photo metadata before sharing an image</title><link>https://ilham.dev/posts/how-to-remove-photo-metadata-before-sharing/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-remove-photo-metadata-before-sharing/</guid><description>A photo can contain more than the picture you see.
Depending on the camera or phone settings, an image may also include hidden metadata such as:
camera model; date and time; lens information; software used to edit the image; GPS location; orientation; comments or colour profile data.</description></item><item><title>How I check basic PDF information before sending a document</title><link>https://ilham.dev/posts/how-to-check-basic-pdf-information/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-basic-pdf-information/</guid><description>Before sending or processing a PDF, I often want basic facts: page count, page sizes, metadata, and whether the document looks like the one I expected.
The PDF Page Counter and Info tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I check browser network information without overreading it</title><link>https://ilham.dev/posts/how-to-check-browser-network-information/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-browser-network-information/</guid><description>Browser network APIs may expose hints about connection type or device context, but availability varies by browser and privacy settings.
The Network Info tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I check common port numbers when debugging a service</title><link>https://ilham.dev/posts/how-to-check-common-port-numbers/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-common-port-numbers/</guid><description>Port numbers are labels for network services, but a port number alone does not guarantee what is actually running there.
The Port Reference tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I check keyboard key codes in the browser</title><link>https://ilham.dev/posts/how-to-check-keyboard-keycodes-in-the-browser/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-keyboard-keycodes-in-the-browser/</guid><description>Keyboard events expose values such as key, code, and modifier states. They are useful when building shortcuts or input handling.
The Keycode Info tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I check password strength without fooling myself</title><link>https://ilham.dev/posts/how-to-check-password-strength-without-fooling-yourself/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-password-strength-without-fooling-yourself/</guid><description>Password strength is easy to misunderstand. A password can look complicated but still be weak if it is short or predictable.
The Password Strength tool estimates how hard a password may be to guess under stated assumptions.</description></item><item><title>How I check Unicode code points when text looks weird</title><link>https://ilham.dev/posts/how-to-check-unicode-code-points-in-text/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-unicode-code-points-in-text/</guid><description>Unicode gives characters code points. Looking at those code points helps when text looks identical but behaves differently.
The Text to Unicode tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I check what the browser says about my device</title><link>https://ilham.dev/posts/how-to-check-browser-device-information/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-browser-device-information/</guid><description>A browser can reveal useful debugging context such as screen size, user agent hints, language, and platform, but not a complete identity.
The Device Information tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I check whether an RSA public key and private key belong together</title><link>https://ilham.dev/posts/how-to-check-whether-rsa-keys-match/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-whether-rsa-keys-match/</guid><description>RSA uses a pair of keys. The private key signs or decrypts. The public key verifies or encrypts. The two keys are related, but the public key should not reveal the private key.</description></item><item><title>How I check WHOIS records without overreading them</title><link>https://ilham.dev/posts/how-to-check-domain-whois-without-overreading-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-check-domain-whois-without-overreading-it/</guid><description>WHOIS records show registration information about a domain, such as registrar, important dates, status, and sometimes nameservers.
The WHOIS Lookup tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I clean private information from screenshots before sharing them</title><link>https://ilham.dev/posts/how-to-clean-private-info-from-screenshots/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-clean-private-info-from-screenshots/</guid><description>Screenshots are easy to share too quickly. The problem is that a screenshot often contains more information than the one thing I wanted to show.
It may include:
names; emails; tokens; URLs; browser tabs; file paths; terminal commands; customer data; internal project names.</description></item><item><title>How I combine small network tools when debugging connectivity</title><link>https://ilham.dev/posts/how-to-build-dns-and-network-notes-from-small-tools/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-build-dns-and-network-notes-from-small-tools/</guid><description>Network debugging usually needs more than one clue. DNS, IPs, ports, URLs, and headers each answer a different question.
I use Network tools for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I compare benchmark results with ratios</title><link>https://ilham.dev/posts/how-to-compare-benchmark-results-with-ratios/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-compare-benchmark-results-with-ratios/</guid><description>Benchmark comparison is easier when every result is compared against the fastest or baseline value.
The Benchmark Builder tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I compare two JSON responses without being distracted by formatting</title><link>https://ilham.dev/posts/how-to-compare-json-without-being-distracted-by-formatting/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-compare-json-without-being-distracted-by-formatting/</guid><description>A JSON diff should compare meaning, not indentation. Two JSON documents can look different as text but still contain the same data.
The JSON Diff tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I compare two text blocks line by line</title><link>https://ilham.dev/posts/how-to-compare-two-text-blocks-line-by-line/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-compare-two-text-blocks-line-by-line/</guid><description>A text diff shows what changed between two blocks of text. It is useful for configs, logs, snippets, and documentation.
The Text Diff tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I compare unit prices when pack sizes differ</title><link>https://ilham.dev/posts/how-to-compare-unit-prices-when-pack-sizes-differ/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-compare-unit-prices-when-pack-sizes-differ/</guid><description>A larger package is not always cheaper. Unit price comparison puts products on the same scale.
The Unit Price Comparator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I compress images without making them look terrible</title><link>https://ilham.dev/posts/how-to-compress-images-without-making-them-look-bad/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-compress-images-without-making-them-look-bad/</guid><description>Large images make pages slower, emails heavier, and uploads more annoying. The goal of compression is simple:
Make the file smaller while keeping the image good enough for its purpose.</description></item><item><title>How I convert a curl command into code I can actually use</title><link>https://ilham.dev/posts/how-to-convert-curl-commands-into-code/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-curl-commands-into-code/</guid><description>API documentation often gives examples as curl commands:
curl -X POST https://api.example.com/users \ -H &amp;#34;Authorization: Bearer TOKEN&amp;#34; \ -H &amp;#34;Content-Type: application/json&amp;#34; \ -d &amp;#39;{&amp;#34;name&amp;#34;:&amp;#34;Ana&amp;#34;}&amp;#39; That is useful for testing, but eventually I need the same request in application code.</description></item><item><title>How I convert colours between HEX, RGB, and HSL</title><link>https://ilham.dev/posts/how-to-convert-colors-between-hex-rgb-and-hsl/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-colors-between-hex-rgb-and-hsl/</guid><description>Colour converters help when a design, CSS file, or tool uses a different colour format than the one I have.
I use Color Converter for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I convert fuel economy units without comparing the wrong direction</title><link>https://ilham.dev/posts/how-to-convert-fuel-economy-units/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-fuel-economy-units/</guid><description>Fuel economy units can be confusing because km/L and MPG get better when the number is higher, while L/100 km gets better when the number is lower.
I use Fuel Economy Converter for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I convert image formats without losing what matters</title><link>https://ilham.dev/posts/how-to-convert-image-formats-without-losing-what-matters/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-image-formats-without-losing-what-matters/</guid><description>Image formats are trade-offs. The best format depends on whether the image is a photo, graphic, transparent asset, or web upload.
The Image Format Converter tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I convert JSON, YAML, and TOML without changing the meaning</title><link>https://ilham.dev/posts/how-to-convert-json-yaml-and-toml-without-changing-meaning/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-json-yaml-and-toml-without-changing-meaning/</guid><description>JSON, YAML, and TOML can represent similar configuration data, but they have different syntax and different traps.
The JSON/YAML/TOML converters tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I convert lists without manually editing every line</title><link>https://ilham.dev/posts/how-to-convert-lists-without-manually-editing-every-line/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-lists-without-manually-editing-every-line/</guid><description>Many small data tasks are just list shape problems: one item per line needs to become CSV, JSON, quoted strings, or an SQL IN list.
The List Converter tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I convert number bases without doing binary by hand</title><link>https://ilham.dev/posts/how-to-convert-number-bases-without-doing-binary-by-hand/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-number-bases-without-doing-binary-by-hand/</guid><description>Base conversion helps when working with binary flags, hex colours, low-level values, or documentation that uses different number systems.
I use Number Base Converter for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I convert Roman numerals without guessing</title><link>https://ilham.dev/posts/how-to-convert-roman-numerals-without-guessing/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-roman-numerals-without-guessing/</guid><description>Roman numerals are simple for small values but easy to mistype when subtractive notation is involved.
I use Roman Numerals for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I convert temperatures without mixing Celsius and Fahrenheit</title><link>https://ilham.dev/posts/how-to-convert-temperatures-without-mixing-scales/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-temperatures-without-mixing-scales/</guid><description>Temperature conversion is simple, but mistakes happen when the scale is not written clearly.
I use Temperature Converter for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I convert text case without manual renaming</title><link>https://ilham.dev/posts/how-to-convert-text-case-without-manual-renaming/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-text-case-without-manual-renaming/</guid><description>Case conversion is useful when moving names between code styles, filenames, headings, and API fields.
The Case Converter tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I convert time zones for logs and meetings without doing mental math</title><link>https://ilham.dev/posts/how-to-convert-time-zones-for-logs-and-meetings/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-convert-time-zones-for-logs-and-meetings/</guid><description>Time zone mistakes cause confusing incident timelines and missed meetings. I prefer converting explicitly instead of doing the offset in my head.
The Time Zone Converter tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I count words, lines, and reading time before publishing</title><link>https://ilham.dev/posts/how-to-count-words-lines-and-reading-time/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-count-words-lines-and-reading-time/</guid><description>Text statistics help me understand the size of a post, message, or document before publishing it.
The Text Statistics tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I create a zip file in the browser for small bundles</title><link>https://ilham.dev/posts/how-to-create-a-zip-file-in-the-browser/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-create-a-zip-file-in-the-browser/</guid><description>A zip file bundles multiple files into one download. It is useful for small handoffs, attachments, or grouped exports.
The Zip Builder tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I create and check HMAC signatures for API requests</title><link>https://ilham.dev/posts/how-to-create-and-check-hmac-signatures/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-create-and-check-hmac-signatures/</guid><description>HMAC proves that a message was created by someone who knows the shared secret, and that the signed message has not changed.
The HMAC Generator tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I create ASCII art text for terminal-friendly banners</title><link>https://ilham.dev/posts/how-to-create-ascii-art-text-for-terminals/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-create-ascii-art-text-for-terminals/</guid><description>ASCII art text can be useful for terminal banners, README sections, demos, or playful command-line output.
The ASCII Text tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I create SVG placeholder images for layouts</title><link>https://ilham.dev/posts/how-to-create-svg-placeholder-images/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-create-svg-placeholder-images/</guid><description>SVG placeholders help reserve layout space before final images are ready.
I use SVG Placeholder for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I create WhatsApp click-to-chat links</title><link>https://ilham.dev/posts/how-to-create-whatsapp-click-to-chat-links/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-create-whatsapp-click-to-chat-links/</guid><description>A WhatsApp click-to-chat link opens a conversation with a number and can include a prefilled message.
The WhatsApp Link Generator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I debug CORS without guessing</title><link>https://ilham.dev/posts/how-to-debug-cors-without-guessing/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-debug-cors-without-guessing/</guid><description>CORS errors are frustrating because the browser often shows a scary message, but the real cause is usually a small missing header.
You may see something like this in the browser console:</description></item><item><title>How I decode Outlook SafeLinks before clicking a suspicious URL</title><link>https://ilham.dev/posts/how-to-decode-outlook-safelinks-before-clicking/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-decode-outlook-safelinks-before-clicking/</guid><description>Outlook SafeLinks wrap a destination URL inside a Microsoft protection URL. Decoding helps reveal where the link wants to go.
The SafeLink Decoder tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I edit HTML visually and export clean markup</title><link>https://ilham.dev/posts/how-to-edit-html-visually-and-export-clean-markup/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-edit-html-visually-and-export-clean-markup/</guid><description>A small HTML editor is useful when I want formatted content but still need to inspect or export the markup.
I use HTML Editor for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I escape HTML entities before showing text on a page</title><link>https://ilham.dev/posts/how-to-escape-html-entities-before-showing-text/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-escape-html-entities-before-showing-text/</guid><description>HTML entities let text contain characters like &amp;lt;, &amp;gt;, and &amp;amp; without the browser treating them as markup.
The HTML Entities tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I estimate finish time from current progress</title><link>https://ilham.dev/posts/how-to-estimate-finish-time-from-progress/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-estimate-finish-time-from-progress/</guid><description>An ETA is an estimate based on current progress and speed. It is useful, but it depends on the assumption that the pace stays similar.
The ETA Calculator tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I estimate Indonesian take-home pay from gross salary</title><link>https://ilham.dev/posts/how-to-estimate-indonesian-take-home-pay/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-estimate-indonesian-take-home-pay/</guid><description>Take-home pay is not the same as gross salary. Deductions such as tax and BPJS can change what actually arrives in the bank account.
I use Take-Home Pay Calculator for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I evaluate math expressions with variables without opening a spreadsheet</title><link>https://ilham.dev/posts/how-to-evaluate-math-expressions-with-variables/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-evaluate-math-expressions-with-variables/</guid><description>A math evaluator is useful when the calculation is more than a simple calculator entry but not big enough for a spreadsheet.
I use Math Evaluator for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I expand and read IPv6 addresses without guessing</title><link>https://ilham.dev/posts/how-to-expand-and-read-ipv6-addresses/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-expand-and-read-ipv6-addresses/</guid><description>IPv6 addresses can be compressed, which is convenient for typing but sometimes confusing when comparing or documenting them.
The IPv6 Expander tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I extract coordinates from Google Maps links</title><link>https://ilham.dev/posts/how-to-extract-coordinates-from-google-maps-links/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-extract-coordinates-from-google-maps-links/</guid><description>A Google Maps link can contain coordinates, place IDs, query text, or tracking parameters. Parsing helps extract the location data you actually need.
The Google Maps Link Parser tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I extract only the pages I need from a PDF</title><link>https://ilham.dev/posts/how-to-extract-only-the-pages-you-need-from-a-pdf/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-extract-only-the-pages-you-need-from-a-pdf/</guid><description>Sometimes I do not need to send a whole PDF. I only need a few pages. Sending the entire document can be messy, too large, or even risky if other pages contain private information.</description></item><item><title>How I filter Docker logs without losing the useful lines</title><link>https://ilham.dev/posts/how-to-filter-docker-logs-without-losing-context/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-filter-docker-logs-without-losing-context/</guid><description>Docker logs can get noisy very quickly. A service may print hundreds or thousands of lines, and the line you need is often buried in the middle.
The basic command is:</description></item><item><title>How I format currency amounts consistently</title><link>https://ilham.dev/posts/how-to-format-currency-amounts-consistently/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-format-currency-amounts-consistently/</guid><description>Currency formatting is not only adding a symbol. Separators and decimal conventions change by locale.
The Currency Formatter tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I format JSON before debugging it</title><link>https://ilham.dev/posts/how-to-format-json-before-debugging-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-format-json-before-debugging-it/</guid><description>JSON is easier to debug when it is valid and formatted. A formatter turns one long line into a structure humans can read.
The JSON Formatter tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I format lines into commas, quotes, and SQL lists</title><link>https://ilham.dev/posts/how-to-format-lines-into-commas-quotes-and-sql-lists/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-format-lines-into-commas-quotes-and-sql-lists/</guid><description>A lot of cleanup work starts as one item per line and needs to become a comma-separated list, quoted list, JSON-ish array, or SQL IN clause.
The Line Comma Formatter tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I format SQL before reviewing a query</title><link>https://ilham.dev/posts/how-to-format-sql-before-reviewing-a-query/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-format-sql-before-reviewing-a-query/</guid><description>SQL is easier to review when clauses and joins are on separate lines instead of one long string.
The SQL Prettify tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I format WhatsApp messages before sending them</title><link>https://ilham.dev/posts/how-to-format-whatsapp-messages-before-sending/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-format-whatsapp-messages-before-sending/</guid><description>WhatsApp supports simple text formatting, but it is easy to misplace the symbols in a longer message.
The WhatsApp Message Formatter tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I format XML before trying to understand it</title><link>https://ilham.dev/posts/how-to-format-xml-before-reading-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-format-xml-before-reading-it/</guid><description>XML becomes hard to read when it is minified. Formatting makes the tag structure visible so I can see parents, children, attributes, and text nodes.
The XML Formatter tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I generate an IPv6 ULA prefix for a private network</title><link>https://ilham.dev/posts/how-to-generate-an-ipv6-ula-prefix/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-an-ipv6-ula-prefix/</guid><description>IPv6 ULA prefixes are for private internal networks, similar in spirit to private IPv4 ranges but designed differently.
I use IPv6 ULA Generator for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I generate MAC addresses for tests without colliding with real devices</title><link>https://ilham.dev/posts/how-to-generate-test-mac-addresses-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-test-mac-addresses-safely/</guid><description>Generated MAC addresses are useful for examples, tests, lab configs, and mock network data.
The MAC Address Generator tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I generate placeholder text without leaking real copy</title><link>https://ilham.dev/posts/how-to-generate-lorem-ipsum-without-leaking-real-copy/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-lorem-ipsum-without-leaking-real-copy/</guid><description>Placeholder text is useful when I need to test layout without using unfinished or private real content.
The Lorem Ipsum tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I generate random tokens with enough entropy</title><link>https://ilham.dev/posts/how-to-generate-random-tokens-with-enough-entropy/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-random-tokens-with-enough-entropy/</guid><description>A good token should be random enough that guessing it is unrealistic.
The Token Generator tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I generate SQL INSERT statements from CSV or JSON</title><link>https://ilham.dev/posts/how-to-generate-sql-inserts-from-csv-or-json/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-sql-inserts-from-csv-or-json/</guid><description>Sometimes I have a small table of data and need to insert it into a database. For a few rows, writing SQL by hand is fine. For many rows, it is boring and error-prone.</description></item><item><title>How I generate SSH keys without losing track of what each file is</title><link>https://ilham.dev/posts/how-to-generate-ssh-keys-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-ssh-keys-safely/</guid><description>An SSH key pair has two parts: a private key that stays with you, and a public key that you can place on servers in authorized_keys.
The SSH Key Generator tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I generate UUIDs for test data and identifiers</title><link>https://ilham.dev/posts/how-to-generate-uuids-for-test-data/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-generate-uuids-for-test-data/</guid><description>A UUID v4 is a random-looking identifier that is useful when many systems need to create IDs without asking a central server first.
The UUID Generator tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I look up a MAC address vendor from the first bytes</title><link>https://ilham.dev/posts/how-to-look-up-a-mac-address-vendor/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-look-up-a-mac-address-vendor/</guid><description>A MAC vendor lookup uses the first part of a MAC address to identify the organization that registered that prefix.
The MAC Address Lookup tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I look up HTTP status codes during debugging</title><link>https://ilham.dev/posts/how-to-look-up-http-status-codes-during-debugging/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-look-up-http-status-codes-during-debugging/</guid><description>HTTP status codes are short signals from a server. They tell me whether a request succeeded, redirected, failed on the client side, or failed on the server side.
The HTTP Status Codes tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I look up MIME types when uploads or downloads behave oddly</title><link>https://ilham.dev/posts/how-to-look-up-mime-types-for-files/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-look-up-mime-types-for-files/</guid><description>A MIME type tells software what kind of content a file or response contains.
The MIME Types tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I make a QR code that people can actually scan</title><link>https://ilham.dev/posts/how-to-make-a-qr-code-that-people-can-actually-scan/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-make-a-qr-code-that-people-can-actually-scan/</guid><description>A QR code is only useful if people can scan it reliably. The content, margin, contrast, and printed size all matter.
The QR Code Generator tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I make a simple sticker image without opening a design suite</title><link>https://ilham.dev/posts/how-to-make-a-simple-sticker-image/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-make-a-simple-sticker-image/</guid><description>A sticker tool is useful when I need a quick PNG with text, shape, or simple cutout styling.
I use Sticker Maker for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I make a Wi-Fi QR code for guests without typing the password</title><link>https://ilham.dev/posts/how-to-make-a-wifi-qr-code-for-guests/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-make-a-wifi-qr-code-for-guests/</guid><description>Typing a Wi-Fi password is annoying, especially when the password is long and secure. A Wi-Fi QR code makes the process easier: guests scan the code and their phone can join the network.</description></item><item><title>How I make URL slugs from titles</title><link>https://ilham.dev/posts/how-to-make-url-slugs-from-titles/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-make-url-slugs-from-titles/</guid><description>A slug turns a title into a URL-friendly piece of text, usually lowercase words separated by hyphens.
The Slugify tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I mask part of a string before sharing it</title><link>https://ilham.dev/posts/how-to-mask-part-of-a-string-before-sharing-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-mask-part-of-a-string-before-sharing-it/</guid><description>String masking hides part of a value while keeping enough context to recognize it later.
The String Obfuscator tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I merge PDFs without putting the pages in the wrong order</title><link>https://ilham.dev/posts/how-to-merge-pdfs-in-the-right-order/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-merge-pdfs-in-the-right-order/</guid><description>Merging PDFs sounds simple until the final file has the pages in the wrong order. That is the mistake I try to avoid.
The PDF Merger joins multiple PDF files in the browser.</description></item><item><title>How I normalize email addresses without breaking login rules</title><link>https://ilham.dev/posts/how-to-normalize-email-addresses-without-breaking-login/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-normalize-email-addresses-without-breaking-login/</guid><description>Email normalization reduces duplicate-looking addresses, but different providers and products have different rules.
The Email Normalizer tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I open a CSV file without spreadsheet surprises</title><link>https://ilham.dev/posts/how-to-open-a-csv-file-without-spreadsheet-surprises/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-open-a-csv-file-without-spreadsheet-surprises/</guid><description>A CSV viewer helps inspect tabular data before importing it into a database, spreadsheet, or script.
The CSV Viewer tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I parse a raw WebSocket frame when debugging low-level traffic</title><link>https://ilham.dev/posts/how-to-parse-a-websocket-frame/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-parse-a-websocket-frame/</guid><description>Most WebSocket debugging happens at the message level, but sometimes a raw frame needs to be decoded.
I use WebSocket Frame Parser for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I parse an Indonesian NIK carefully without treating it as full identity proof</title><link>https://ilham.dev/posts/how-to-parse-an-indonesian-nik-carefully/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-parse-an-indonesian-nik-carefully/</guid><description>An Indonesian NIK contains structured hints, but parsing it does not verify that a person is who they claim to be.
The NIK Parser tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I parse logs before searching randomly</title><link>https://ilham.dev/posts/how-to-parse-logs-before-searching-randomly/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-parse-logs-before-searching-randomly/</guid><description>Logs become easier to investigate when they are split into fields instead of treated as one giant wall of text.
The Log Parser tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I parse phone numbers before saving them</title><link>https://ilham.dev/posts/how-to-parse-phone-numbers-before-saving-them/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-parse-phone-numbers-before-saving-them/</guid><description>Phone numbers are easier to store and compare when they are normalized to a consistent international format.
The Phone Parser tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I pick and copy emoji without opening a chat app</title><link>https://ilham.dev/posts/how-to-pick-and-copy-emoji-without-opening-a-chat-app/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-pick-and-copy-emoji-without-opening-a-chat-app/</guid><description>An emoji picker is useful when I know the idea but not the exact character or keyboard shortcut.
The Emoji Picker tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I pick random port numbers for local development</title><link>https://ilham.dev/posts/how-to-pick-random-port-numbers-for-local-development/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-pick-random-port-numbers-for-local-development/</guid><description>A random port is useful for local development, examples, temporary services, and avoiding conflicts with common ports.
The Random Port Generator tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I plan a small IPv4 subnet without doing binary math in my head</title><link>https://ilham.dev/posts/how-to-plan-a-small-ipv4-subnet/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-plan-a-small-ipv4-subnet/</guid><description>A subnet is a range of IP addresses. CIDR notation like 192.168.1.0/24 describes the size of that range.
The IPv4 Subnet Calculator tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I preview link cards before sharing a page</title><link>https://ilham.dev/posts/how-to-preview-link-cards-with-open-graph/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-preview-link-cards-with-open-graph/</guid><description>When you paste a link into Slack, WhatsApp, Telegram, LinkedIn, or another app, it often turns into a card with a title, description, and image.
That preview does not appear by magic.</description></item><item><title>How I preview Markdown as HTML before publishing it</title><link>https://ilham.dev/posts/how-to-preview-markdown-as-html/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-preview-markdown-as-html/</guid><description>Markdown is convenient to write, but I still want to preview the rendered result before publishing.
The Markdown to HTML tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I read a curl command before I run it</title><link>https://ilham.dev/posts/how-to-read-a-curl-command-before-running-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-a-curl-command-before-running-it/</guid><description>A curl command is an HTTP request written for the terminal. Before running one from documentation or chat, I want to know what it will send.
The curl Tester tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I read a user-agent string without pretending it is clean data</title><link>https://ilham.dev/posts/how-to-read-a-user-agent-string/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-a-user-agent-string/</guid><description>A user-agent string can hint at browser, engine, operating system, and device, but it is messy and sometimes intentionally misleading.
The User Agent Parser tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I read an OpenAPI file before using an API</title><link>https://ilham.dev/posts/how-to-read-an-openapi-file-before-using-an-api/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-an-openapi-file-before-using-an-api/</guid><description>An OpenAPI file is machine-readable API documentation. It describes endpoints, inputs, outputs, and authentication expectations.
The OpenAPI Viewer tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I read cron schedules without pretending I remember the syntax</title><link>https://ilham.dev/posts/how-to-read-cron-schedules/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-cron-schedules/</guid><description>Cron is simple once it is explained, but the syntax is not something I try to memorise perfectly.
A cron expression often looks like this:
0 2 * * * If you do not read cron every day, that line is not obvious.</description></item><item><title>How I read email headers when a message looks suspicious</title><link>https://ilham.dev/posts/how-to-read-email-headers/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-email-headers/</guid><description>An email header is the technical history of a message. It can show where the message claimed to come from, which servers handled it, and whether authentication checks passed.
The visible email body can be misleading.</description></item><item><title>How I read HTTP headers when an API or website behaves strangely</title><link>https://ilham.dev/posts/how-to-read-http-headers/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-http-headers/</guid><description>HTTP headers are small pieces of metadata sent with a request or response. They can explain things that are not visible in the page body.
When a website or API behaves strangely, I often look at the headers first.</description></item><item><title>How I read text as binary without overthinking it</title><link>https://ilham.dev/posts/how-to-read-text-as-binary-without-overthinking-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-text-as-binary-without-overthinking-it/</guid><description>Text can be represented as bytes, and bytes can be shown as binary. The interesting part is that not every character is one byte.
The Text to Binary tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I read Unix timestamps without guessing seconds or milliseconds</title><link>https://ilham.dev/posts/how-to-read-unix-timestamps-without-guessing-seconds-or-milliseconds/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-unix-timestamps-without-guessing-seconds-or-milliseconds/</guid><description>A timestamp bug often starts with one question: is this value in seconds or milliseconds? Getting that wrong can move dates to 1970 or far into the future.
The Timestamp Converter tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I read YAML without getting lost in indentation</title><link>https://ilham.dev/posts/how-to-read-yaml-without-getting-lost-in-indentation/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-read-yaml-without-getting-lost-in-indentation/</guid><description>YAML is readable when indentation is correct and confusing when it is not. A viewer helps validate and inspect the structure.
The YAML Viewer tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I record a short camera video in the browser</title><link>https://ilham.dev/posts/how-to-record-a-short-camera-video-in-the-browser/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-record-a-short-camera-video-in-the-browser/</guid><description>A browser camera recorder is useful for quick tests, short clips, and checking whether the camera works without installing software.
I use Camera Recorder for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I record microphone audio for a quick test</title><link>https://ilham.dev/posts/how-to-record-microphone-audio-for-a-quick-test/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-record-microphone-audio-for-a-quick-test/</guid><description>A microphone test helps confirm the browser can access the mic and the input level is usable.
I use Microphone Recorder for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I remove a simple image background without opening a big editor</title><link>https://ilham.dev/posts/how-to-remove-a-simple-image-background/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-remove-a-simple-image-background/</guid><description>Simple background removal works best when the subject is clearly separated from a plain background.
The Background Remover tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I resize a photo to a target file size without guessing forever</title><link>https://ilham.dev/posts/how-to-resize-a-photo-to-a-target-file-size/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-resize-a-photo-to-a-target-file-size/</guid><description>Sometimes the requirement is not just smaller. It is a specific limit, like under 500 KB for an upload form.
The Photo Resizer by Target Size tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I sort .env files without moving comments to the wrong place</title><link>https://ilham.dev/posts/how-to-sort-env-files-without-moving-comments-to-the-wrong-place/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-sort-env-files-without-moving-comments-to-the-wrong-place/</guid><description>A messy .env file makes configuration harder to review. Sorting helps, but comments and duplicates need care.
The .env Key Sorter tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I spell Indonesian numbers for invoices and receipts</title><link>https://ilham.dev/posts/how-to-spell-indonesian-numbers-for-invoices/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-spell-indonesian-numbers-for-invoices/</guid><description>Spelling numbers in words helps on invoices, receipts, and payment documents where the amount needs to be readable.
The Number to Words tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I spell things with the NATO alphabet when clarity matters</title><link>https://ilham.dev/posts/how-to-spell-things-with-the-nato-alphabet/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-spell-things-with-the-nato-alphabet/</guid><description>The NATO alphabet maps letters to words like Alpha, Bravo, and Charlie so spoken spelling is easier to understand.
The NATO Alphabet tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I spot common typos in Indonesian text before sending it</title><link>https://ilham.dev/posts/how-to-spot-common-typos-in-indonesian-text/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-spot-common-typos-in-indonesian-text/</guid><description>A typo spotter is a final pass tool. It catches small issues that are easy to miss when I already know what I meant to write.
The Typo Spotter tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I style a QR code without breaking scanning</title><link>https://ilham.dev/posts/how-to-style-a-qr-code-without-breaking-scanning/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-style-a-qr-code-without-breaking-scanning/</guid><description>QR codes can be styled, but scanning reliability comes first. A beautiful QR code that fails to scan is just decoration.
The QR Code Editor tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I test a regex before putting it into code</title><link>https://ilham.dev/posts/how-to-test-regex-before-using-it/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-test-regex-before-using-it/</guid><description>Regex is powerful, but it is also easy to get almost right. “Almost right” is the problem. A regex can match too much, too little, or the right thing in your test but the wrong thing in production.</description></item><item><title>How I test a WebSocket connection from the browser</title><link>https://ilham.dev/posts/how-to-test-websockets-from-the-browser/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-test-websockets-from-the-browser/</guid><description>WebSockets keep a connection open so client and server can exchange messages in real time.
The WebSocket Tester tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I test an HTTP request before writing the code around it</title><link>https://ilham.dev/posts/how-to-test-an-http-request-before-writing-code/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-test-an-http-request-before-writing-code/</guid><description>Before I put an API call into code, I like to prove the request works by itself: URL, method, headers, body, and response.
The HTTP Request Tester tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I test gRPC when normal HTTP tools are not enough</title><link>https://ilham.dev/posts/how-to-test-grpc-when-http-tools-are-not-enough/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-test-grpc-when-http-tools-are-not-enough/</guid><description>gRPC APIs do not look like normal REST endpoints. Instead of paths like /users, you call service methods with typed messages.
The gRPC Tester tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I test webhooks before trusting them</title><link>https://ilham.dev/posts/how-to-test-webhooks-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-test-webhooks-safely/</guid><description>A webhook is a simple idea: one system sends an HTTP request to another system when something happens.
For example:
Stripe sends a webhook when a payment succeeds; GitHub sends a webhook when someone pushes code; Shopify sends a webhook when an order is created.</description></item><item><title>How I think about bcrypt when storing passwords</title><link>https://ilham.dev/posts/how-to-hash-passwords-with-bcrypt/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-hash-passwords-with-bcrypt/</guid><description>Passwords should not be stored as plain text. If a database leaks, plain text passwords immediately become everyone else&amp;rsquo;s problem too.
For password storage, I want a password hashing function such as bcrypt.</description></item><item><title>How I think about BIP39 seed phrases before touching a wallet</title><link>https://ilham.dev/posts/how-to-understand-bip39-seed-phrases/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-understand-bip39-seed-phrases/</guid><description>A BIP39 mnemonic is a human-readable backup for wallet seed material. Anyone who has the words can often control the wallet.
The BIP39 Mnemonic tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I think about SSH tunnels before copying the command</title><link>https://ilham.dev/posts/how-to-use-ssh-tunnel-builder/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-ssh-tunnel-builder/</guid><description>SSH tunnels are powerful, but the flags are not friendly at first sight:
ssh -L 8080:localhost:80 user@example.com The command is short, but the meaning is not obvious. Which machine is localhost?</description></item><item><title>How I turn a long docker run command into Docker Compose</title><link>https://ilham.dev/posts/how-to-turn-docker-run-into-compose/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-docker-run-into-compose/</guid><description>A docker run command is fine when it is short. But after a few ports, volumes, and environment variables, it becomes hard to read and easy to break.
You may see something like this:</description></item><item><title>How I turn a small file into Base64 when I really need to</title><link>https://ilham.dev/posts/how-to-turn-a-small-file-into-base64/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-a-small-file-into-base64/</guid><description>Base64 can turn a file into text, which is useful for small embedded assets or debugging data URIs.
The Base64 File tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I turn an IPv4 range into CIDR blocks</title><link>https://ilham.dev/posts/how-to-turn-an-ip-range-into-cidr-blocks/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-an-ip-range-into-cidr-blocks/</guid><description>Many firewalls and cloud tools want CIDR blocks, but humans often receive IP ranges with a start and end address.
The IPv4 Range Expander tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I turn CSV into JSON without breaking the data</title><link>https://ilham.dev/posts/how-to-turn-csv-into-json-without-breaking-the-data/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-csv-into-json-without-breaking-the-data/</guid><description>CSV is easy to open in a spreadsheet. JSON is easy to use in APIs and code. Moving between them sounds simple, but small details can break the data.
The CSV and JSON Converter helps convert CSV to JSON and JSON back to CSV in the browser.</description></item><item><title>How I turn JSON into CSV for spreadsheets without flattening the wrong thing</title><link>https://ilham.dev/posts/how-to-turn-json-into-csv-for-spreadsheets/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-json-into-csv-for-spreadsheets/</guid><description>CSV is a table, while JSON can be deeply nested. Conversion works best when the JSON is an array of similar objects.
The JSON to CSV tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I turn long words into numeronyms like i18n</title><link>https://ilham.dev/posts/how-to-turn-long-words-into-numeronyms/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-long-words-into-numeronyms/</guid><description>A numeronym shortens a long word by keeping the first and last letter and replacing the middle with a number.
The Numeronym tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I turn plain text into a readable PDF</title><link>https://ilham.dev/posts/how-to-turn-plain-text-into-a-pdf/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-plain-text-into-a-pdf/</guid><description>Plain text is easy to edit, but PDF is easier to send when layout needs to stay stable.
The Text to PDF tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I turn terminal tables into Markdown or CSV</title><link>https://ilham.dev/posts/how-to-turn-terminal-tables-into-markdown-or-csv/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-turn-terminal-tables-into-markdown-or-csv/</guid><description>Terminal output is readable to humans, but often awkward to paste into docs, spreadsheets, or issue reports.
The CLI Table Converter tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I understand chmod without guessing the numbers</title><link>https://ilham.dev/posts/how-to-understand-chmod-permissions/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-understand-chmod-permissions/</guid><description>chmod 755 is one of those commands many people copy before they fully understand it. It works often enough that it becomes a habit, but file permissions are worth understanding properly.</description></item><item><title>How I understand OTP codes without treating them like magic</title><link>https://ilham.dev/posts/how-to-use-otp-codes-without-mystery/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-otp-codes-without-mystery/</guid><description>Most authenticator apps use TOTP: a short code generated from a shared secret and the current time.
The OTP Generator tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I understand SNAP BI asymmetric signatures step by step</title><link>https://ilham.dev/posts/how-to-understand-snap-bi-asymmetric-signature/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-understand-snap-bi-asymmetric-signature/</guid><description>SNAP BI signatures can feel confusing because they combine several ideas at once:
HTTP method; URL path; request body hash; timestamp; RSA private and public keys; a signature header. When all of those appear together, it is easy to get lost.</description></item><item><title>How I URL-encode text without breaking query strings</title><link>https://ilham.dev/posts/how-to-url-encode-text-without-breaking-query-strings/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-url-encode-text-without-breaking-query-strings/</guid><description>URLs can only safely contain certain characters. URL encoding turns spaces, symbols, and non-ASCII text into percent-encoded form.
The URL Encoder tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I use a Git cheatsheet without copying blindly</title><link>https://ilham.dev/posts/how-to-use-a-git-cheatsheet-without-copying-blindly/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-a-git-cheatsheet-without-copying-blindly/</guid><description>A Git cheatsheet is useful when I remember the task but not the exact command. I still read the command before running it.
The Git Cheatsheet tool helps me inspect the input and output without writing a one-off script first.</description></item><item><title>How I use a JavaScript playground safely</title><link>https://ilham.dev/posts/how-to-use-a-javascript-playground-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-a-javascript-playground-safely/</guid><description>A JavaScript playground is useful for small experiments, but code pasted from unknown places can still be risky.
I use JavaScript Playground for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I use a JSON viewer when an API response is too large to read</title><link>https://ilham.dev/posts/how-to-use-json-viewer-for-large-api-responses/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-json-viewer-for-large-api-responses/</guid><description>A JSON viewer is for exploring structure. It helps me see objects, arrays, nested fields, and repeated records without reading one long block of text.
The JSON Viewer tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item><item><title>How I use a random picker fairly</title><link>https://ilham.dev/posts/how-to-use-a-random-picker-fairly/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-a-random-picker-fairly/</guid><description>A random picker is only as fair as the input list and the random process used.
I use Random Generator for the quick version of this task, then I review the output before relying on it.</description></item><item><title>How I use a stopwatch with laps for small tests</title><link>https://ilham.dev/posts/how-to-use-a-stopwatch-with-laps-for-small-tests/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-a-stopwatch-with-laps-for-small-tests/</guid><description>A chronometer is useful for quick manual timing when a full benchmark is unnecessary.
The Chronometer tool handles the repetitive part so I can focus on checking whether the result makes sense.</description></item><item><title>How I use AES encryption without confusing it with hashing</title><link>https://ilham.dev/posts/how-to-use-aes-encryption-for-text/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-aes-encryption-for-text/</guid><description>AES is for keeping text confidential. It is different from hashing: encrypted text is meant to be decrypted later with the right key, while a hash is not meant to be reversed.</description></item><item><title>How I use Base64 without calling it encryption</title><link>https://ilham.dev/posts/how-to-use-base64-without-calling-it-encryption/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-base64-without-calling-it-encryption/</guid><description>Base64 changes bytes into text that is safe to copy through systems that expect plain characters. It is encoding, not encryption.
The Base64 Text tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I use DNS lookup when a domain does not work</title><link>https://ilham.dev/posts/how-to-use-dns-lookup-when-a-domain-does-not-work/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-dns-lookup-when-a-domain-does-not-work/</guid><description>DNS is the phonebook layer that turns names into records such as IP addresses, mail servers, and verification TXT values.
The DNS Lookup tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I use grep without fighting the flags</title><link>https://ilham.dev/posts/how-to-use-grep-without-fighting-regex/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-grep-without-fighting-regex/</guid><description>grep is the command I use when I know some text exists somewhere, but I do not remember which file contains it.
The basic idea is simple:
grep &amp;#34;database&amp;#34; app.log Plain meaning:</description></item><item><title>How I use JSONPath when a JSON response is too big to read</title><link>https://ilham.dev/posts/how-to-use-jsonpath-to-find-data/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-jsonpath-to-find-data/</guid><description>Small JSON is easy to read. Large JSON is different. A real API response can contain nested objects, arrays, metadata, and fields you do not care about.
JSONPath helps ask focused questions like:</description></item><item><title>How I use sed safely for search and replace</title><link>https://ilham.dev/posts/how-to-edit-text-with-sed-safely/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-edit-text-with-sed-safely/</guid><description>sed is useful when I need to change text from the command line. It can replace words, delete matching lines, or print only the lines I care about.
It can also edit many files quickly, which means I do not run it carelessly.</description></item><item><title>How I use ULIDs when sortable IDs help</title><link>https://ilham.dev/posts/how-to-use-ulids-when-sortable-ids-help/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-ulids-when-sortable-ids-help/</guid><description>A ULID is an identifier that includes a timestamp part, so generated IDs sort roughly by creation time.
The ULID Generator tool helps with the mechanical part, but I still check the result before using it somewhere real.</description></item><item><title>How I use xargs without being surprised by spaces</title><link>https://ilham.dev/posts/how-to-use-xargs-without-surprises/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-use-xargs-without-surprises/</guid><description>xargs is useful when one command prints a list and another command needs that list as arguments.
A simple example:
printf &amp;#39;%s\n&amp;#39; one two three | xargs echo Output:
one two three That looks too simple to matter, but xargs becomes powerful when the input comes from commands like find, grep, or printf.</description></item><item><title>How I validate JSON with a schema before blaming the API</title><link>https://ilham.dev/posts/how-to-validate-json-with-a-schema/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-validate-json-with-a-schema/</guid><description>When an API receives JSON, it usually expects a certain shape. If one field is missing or one value has the wrong type, the request may fail.
A JSON Schema describes that expected shape.</description></item><item><title>How I write a Dockerfile without copying random examples</title><link>https://ilham.dev/posts/how-to-write-a-dockerfile-without-copying-random-examples/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-write-a-dockerfile-without-copying-random-examples/</guid><description>A Dockerfile is a recipe for building an image. The clearer the recipe, the easier the container is to rebuild and debug.
The Dockerfile Builder tool gives me a safe place to test the idea before I put it into a script, server, or production workflow.</description></item><item><title>How I write meta tags for a page before publishing it</title><link>https://ilham.dev/posts/how-to-write-meta-tags-for-a-page/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0700</pubDate><guid>https://ilham.dev/posts/how-to-write-meta-tags-for-a-page/</guid><description>Meta tags help browsers, search engines, and social platforms understand a page. They do not replace good content, but they help describe it.
The Meta Tag Generator tool is useful because it lets me check the result in a small, controlled place before I use it in a bigger workflow.</description></item></channel></rss>