<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on Brilian Firdaus</title><link>https://brilianfirdaus.com/blog/</link><description>Recent content in Blog on Brilian Firdaus</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 29 Jul 2025 00:17:00 +0000</lastBuildDate><atom:link href="https://brilianfirdaus.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Building Your First LLM Career Assistant: A Beginner's Guide</title><link>https://brilianfirdaus.com/blog/building-your-first-llm-career-assistant-a-beginners-guide/</link><pubDate>Tue, 29 Jul 2025 00:17:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/building-your-first-llm-career-assistant-a-beginners-guide/</guid><description>Build a resume-based chatbot with Python, FastAPI, and the OpenAI API, including PDF parsing, conversation memory, token limits, and rate limiting.</description></item><item><title>How AI Change The Way I Work as A Software Engineer</title><link>https://brilianfirdaus.com/blog/how-ai-change-the-way-i-work-as-a-software-engineer/</link><pubDate>Tue, 29 Apr 2025 07:00:01 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-ai-change-the-way-i-work-as-a-software-engineer/</guid><description>How I use AI tools for prototyping and research, and my observations on code generation, technical learning, and the role of software engineers.</description></item><item><title>Mastering Race Conditions: Strategies for Reliable Software Systems</title><link>https://brilianfirdaus.com/blog/mastering-race-conditions-strategies-for-reliable-software-systems/</link><pubDate>Tue, 22 Apr 2025 06:00:19 +0000</pubDate><guid>https://brilianfirdaus.com/blog/mastering-race-conditions-strategies-for-reliable-software-systems/</guid><description>Understand race conditions in multithreaded and distributed systems, with locking strategies, detection methods, and a banking transaction example.</description></item><item><title>A Developer’s Guide to Circuit Breakers: Protect Your Service from Failure</title><link>https://brilianfirdaus.com/blog/a-developers-guide-to-circuit-breakers-protect-your-service-from-failure/</link><pubDate>Tue, 08 Apr 2025 06:00:06 +0000</pubDate><guid>https://brilianfirdaus.com/blog/a-developers-guide-to-circuit-breakers-protect-your-service-from-failure/</guid><description>How circuit breakers isolate downstream failures, with state transitions, configuration, monitoring, and a Go example using Hystrix.</description></item><item><title>What Is API Versioning</title><link>https://brilianfirdaus.com/blog/what-is-api-versioning/</link><pubDate>Tue, 25 Jun 2024 06:00:23 +0000</pubDate><guid>https://brilianfirdaus.com/blog/what-is-api-versioning/</guid><description>Compare API versioning through URL paths, query parameters, request headers, and media types, and plan how to communicate breaking changes to consumers.</description></item><item><title>Understanding Database Locks: Managing Concurrency in Databases</title><link>https://brilianfirdaus.com/blog/understanding-database-locks-managing-concurrency-in-databases/</link><pubDate>Tue, 11 Jun 2024 15:00:12 +0000</pubDate><guid>https://brilianfirdaus.com/blog/understanding-database-locks-managing-concurrency-in-databases/</guid><description>Database concurrency explained through shared and exclusive locks, isolation levels, pessimistic and optimistic locking, MVCC, and a seat-booking example.</description></item><item><title>Understanding How Java's Garbage Collector Works</title><link>https://brilianfirdaus.com/blog/understanding-how-java-garbage-collector-works/</link><pubDate>Tue, 28 May 2024 03:00:40 +0000</pubDate><guid>https://brilianfirdaus.com/blog/understanding-how-java-garbage-collector-works/</guid><description>How Java manages memory and reclaims objects, with an overview of Serial, Parallel, G1, and ZGC collectors and their performance tradeoffs.</description></item><item><title>How a Database Index Works and How to Use It Effectively</title><link>https://brilianfirdaus.com/blog/how-a-database-index-works-and-how-to-use-it-effectively/</link><pubDate>Tue, 14 May 2024 11:08:59 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-a-database-index-works-and-how-to-use-it-effectively/</guid><description>How database indexes speed up queries, their storage and write costs, and when to use single-column, compound, unique, and partial indexes.</description></item><item><title>Why You Should Use Caching - Improve User Experience and Reduce Costs</title><link>https://brilianfirdaus.com/blog/why-you-should-use-caching/</link><pubDate>Thu, 02 May 2024 16:16:50 +0000</pubDate><guid>https://brilianfirdaus.com/blog/why-you-should-use-caching/</guid><description>Backend object caching explained: write patterns, cache misses, invalidation, replacement policies, performance tradeoffs, and when caching is unsuitable.</description></item><item><title>The Essential Skills of a Software Engineer</title><link>https://brilianfirdaus.com/blog/the-essential-skills-of-a-software-engineer/</link><pubDate>Thu, 11 Apr 2024 06:08:54 +0000</pubDate><guid>https://brilianfirdaus.com/blog/the-essential-skills-of-a-software-engineer/</guid><description>My view of the skills software engineers need: technical fundamentals, clear communication, ownership, and understanding the people using the product.</description></item><item><title>Incident Management Platform in Blibli.com</title><link>https://brilianfirdaus.com/blog/incident-management-platform-in-blibli-com/</link><pubDate>Tue, 18 Jul 2023 05:08:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/incident-management-platform-in-blibli-com/</guid><description>How we built an incident management platform at Blibli, from the earlier response process to requirements, implementation, incident flow, and results.</description></item><item><title>Designing A Retry Mechanism For Reliable Systems</title><link>https://brilianfirdaus.com/blog/designing-a-retry-mechanism-for-reliable-systems/</link><pubDate>Tue, 03 Jan 2023 02:00:10 +0000</pubDate><guid>https://brilianfirdaus.com/blog/designing-a-retry-mechanism-for-reliable-systems/</guid><description>Design retries for transient failures: choose retryable requests, set backoff periods, manage retry state, and account for timeouts and idempotency.</description></item><item><title>How To Better Store Password In Database</title><link>https://brilianfirdaus.com/blog/how-to-better-store-password-in-database/</link><pubDate>Tue, 02 Aug 2022 13:00:43 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-to-better-store-password-in-database/</guid><description>Why plain-text passwords and fast hashes are unsafe for database storage, how salts work, and how bcrypt balances hashing cost with login latency.</description></item><item><title>How to Implement JSON Web Token (JWT) in Java Spring Boot</title><link>https://brilianfirdaus.com/blog/how-to-implement-json-web-token-jwt-in-java-spring-boot/</link><pubDate>Sun, 12 Jun 2022 10:58:28 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-to-implement-json-web-token-jwt-in-java-spring-boot/</guid><description>Implement signed and encrypted JSON Web Tokens in Java Spring Boot with jose4j, covering JWS creation and validation, JWE, and key handling.</description></item><item><title>Introduction to JWT (Also JWS, JWE, JWA, JWK)</title><link>https://brilianfirdaus.com/blog/introduction-to-jwt-jws-jwe-jwa-jwk/</link><pubDate>Mon, 02 May 2022 06:02:02 +0000</pubDate><guid>https://brilianfirdaus.com/blog/introduction-to-jwt-jws-jwe-jwa-jwk/</guid><description>An introduction to JWT and related JOSE standards: token structure, signatures, encryption, algorithms, keys, and the differences between JWS and JWE.</description></item><item><title>Get Started With Docker</title><link>https://brilianfirdaus.com/blog/get-started-with-docker/</link><pubDate>Mon, 29 Mar 2021 03:00:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/get-started-with-docker/</guid><description>A practical introduction to Docker containers, images, commands, volumes, networking, Dockerfiles, and running multiple services with Docker Compose.</description></item><item><title>Updating Code Curated to Ghost Version 4</title><link>https://brilianfirdaus.com/blog/updating-code-curated-to-ghost-v4/</link><pubDate>Wed, 17 Mar 2021 14:10:59 +0000</pubDate><guid>https://brilianfirdaus.com/blog/updating-code-curated-to-ghost-v4/</guid><description>Notes from upgrading a self-hosted Ghost blog from version 3 to 4, covering theme checks, backups, the upgrade process, and performance comparisons.</description></item><item><title>Getting Started With Elasticsearch in Java Spring Boot</title><link>https://brilianfirdaus.com/blog/how-to-connect-java-with-elasticsearch/</link><pubDate>Fri, 18 Dec 2020 14:35:45 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-to-connect-java-with-elasticsearch/</guid><description>Connect Spring Boot 2 to Elasticsearch using Spring Data repositories, ElasticsearchRestTemplate, and the REST high-level client, with CRUD examples.</description></item><item><title>How to Set up a Self-Hosted Ghost Blogging Platform</title><link>https://brilianfirdaus.com/blog/how-to-set-up-a-self-hosted-ghost-blogging-platform/</link><pubDate>Sat, 28 Nov 2020 12:57:20 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-to-set-up-a-self-hosted-ghost-blogging-platform/</guid><description>A walkthrough of self-hosting Ghost on DigitalOcean, including domain setup, Cloudflare DNS and TLS, server configuration, and the Ghost admin account.</description></item><item><title>Using XOR For Swapping Variable</title><link>https://brilianfirdaus.com/blog/using-xor-for-swapping-variable/</link><pubDate>Wed, 25 Nov 2020 14:42:01 +0000</pubDate><guid>https://brilianfirdaus.com/blog/using-xor-for-swapping-variable/</guid><description>How exclusive OR works and why XOR can swap two variable values without a temporary variable, with binary examples and a Python implementation.</description></item><item><title>Reasons I Changed From WordPress to Ghost</title><link>https://brilianfirdaus.com/blog/reasons-i-changed-from-wordpress-to-ghost/</link><pubDate>Sat, 21 Nov 2020 07:57:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/reasons-i-changed-from-wordpress-to-ghost/</guid><description>Why I moved my blog from WordPress to Ghost in 2020, including the Node.js stack, resource usage, plugin tradeoffs, and writing interface.</description></item><item><title>How to Handle Typos in Elasticsearch Using Fuzzy Query</title><link>https://brilianfirdaus.com/blog/how-to-handle-typos-in-elasticsearch-using-fuzzy-query/</link><pubDate>Sat, 21 Nov 2020 01:16:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/how-to-handle-typos-in-elasticsearch-using-fuzzy-query/</guid><description>Handle typos in Elasticsearch with fuzzy and match queries, using edit distance, fuzziness, transpositions, prefix length, and query tuning examples.</description></item><item><title>Introduction to Analyzer in Elasticsearch</title><link>https://brilianfirdaus.com/blog/introduction-to-analyzer-in-elasticsearch/</link><pubDate>Sat, 21 Nov 2020 01:16:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/introduction-to-analyzer-in-elasticsearch/</guid><description>How Elasticsearch analyzers turn text into searchable tokens, with examples of character filters, tokenizers, token filters, and custom analyzers.</description></item><item><title>5 Software Engineering Beginner Mistakes I Did</title><link>https://brilianfirdaus.com/blog/5-software-engineering-beginner-mistakes-i-did/</link><pubDate>Sat, 21 Nov 2020 01:00:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/5-software-engineering-beginner-mistakes-i-did/</guid><description>Five mistakes from my early software engineering work: skipping tests and design, writing complex code, neglecting documentation, and missing soft skills.</description></item><item><title>Avoiding the Null Pointer Exception With Optional in Java</title><link>https://brilianfirdaus.com/blog/avoiding-the-null-pointer-exception-with-optional-in-java/</link><pubDate>Fri, 20 Nov 2020 04:33:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/avoiding-the-null-pointer-exception-with-optional-in-java/</guid><description>How to use Java Optional to handle missing values, with examples of map, flatMap, filter, fallback methods, and common mistakes to avoid.</description></item><item><title>Create a Simple Autocomplete With Elasticsearch</title><link>https://brilianfirdaus.com/blog/create-a-simple-autocomplete-with-elasticsearch/</link><pubDate>Fri, 20 Nov 2020 01:00:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/create-a-simple-autocomplete-with-elasticsearch/</guid><description>Build a simple Elasticsearch autocomplete using match_phrase_prefix, from index mappings and sample documents to query behavior and limitations.</description></item><item><title>Why I Took a Machine Learning Course as a Software Engineer</title><link>https://brilianfirdaus.com/blog/why-i-took-a-machine-learning-course-as-a-software-engineer/</link><pubDate>Thu, 19 Nov 2020 15:00:00 +0000</pubDate><guid>https://brilianfirdaus.com/blog/why-i-took-a-machine-learning-course-as-a-software-engineer/</guid><description>Why I took a machine learning specialization as a software engineer, how I chose the course, and what I learned from completing it over five months.</description></item><item><title>Functional Programming in Java, Explained</title><link>https://brilianfirdaus.com/blog/functional-programming-in-java-explained/</link><pubDate>Wed, 18 Nov 2020 16:49:35 +0000</pubDate><guid>https://brilianfirdaus.com/blog/functional-programming-in-java-explained/</guid><description>Java functional programming with lambda expressions and functional interfaces, including built-in interfaces and a small custom Stream implementation.</description></item><item><title>Elasticsearch: Text vs. Keyword</title><link>https://brilianfirdaus.com/blog/elasticsearch-text-vs-keyword/</link><pubDate>Wed, 18 Nov 2020 12:37:38 +0000</pubDate><guid>https://brilianfirdaus.com/blog/elasticsearch-text-vs-keyword/</guid><description>Compare Elasticsearch text and keyword fields: how analysis changes indexing, how term and match queries behave, and when to use each field type.</description></item><item><title>Should You Use a Password Manager?</title><link>https://brilianfirdaus.com/blog/should-you-use-a-password-manager/</link><pubDate>Wed, 18 Nov 2020 12:30:45 +0000</pubDate><guid>https://brilianfirdaus.com/blog/should-you-use-a-password-manager/</guid><description>An overview of password managers, password reuse risks, the benefits and risks of storing credentials, and ways to protect a password vault.</description></item><item><title>Basics of Elasticsearch for Developer</title><link>https://brilianfirdaus.com/blog/basics-of-elasticsearch-for-developer/</link><pubDate>Wed, 18 Nov 2020 08:54:08 +0000</pubDate><guid>https://brilianfirdaus.com/blog/basics-of-elasticsearch-for-developer/</guid><description>An introduction to Elasticsearch for developers, covering inverted indexes, field types, analyzers, document writes, queries, and aggregations.</description></item></channel></rss>