<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>JackSparrow414</title><description>Personal blog of JackSparrow414 (English posts).</description><link>https://jacksparrow414.pages.dev/</link><item><title>Kafka (Part 7): Integrating Apache Avro and Apicurio Schema Registry to Ensure Message Compatibility Between Producers and Consumers</title><link>https://jacksparrow414.pages.dev/en/posts/163936328/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/163936328/</guid><description>To address deserialization failures caused by Kafka message format changes, this article walks through migrating from JSON to Avro and integrating Apicurio Schema Registry. It covers schema definition, Java class generation, producer and consumer configuration, and version compatibility checks, reducing the risk of poison-pill messages.</description><pubDate>Wed, 26 Aug 2026 13:30:48 GMT</pubDate></item><item><title>Frontend Security: JavaScript Obfuscation, Request Encryption, and Signing to Make Scraping Harder</title><link>https://jacksparrow414.pages.dev/en/posts/163342943/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/163342943/</guid><description>Introduces JavaScript obfuscation, request-body encryption, and request signing through examples, including RSA key exchange, AES-GCM encryption and decryption, and backend timestamp and nonce validation. It discusses increasing the cost of API analysis and reverse engineering, and balancing security with performance.</description><pubDate>Fri, 31 Jul 2026 00:10:01 GMT</pubDate></item><item><title>Understanding Java NIO (Part 3): I/O Multiplexing and the Reactor Pattern in Java, with Open-Source Framework Code Analysis</title><link>https://jacksparrow414.pages.dev/en/posts/161901809/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/161901809/</guid><description>This post implements a Multi-Reactor server with Java NIO and explains how Channel, Buffer, Selector, and wakeup work together. It also covers cross-thread channel registration and dynamically adjusting read/write events, and analyzes how NIO is applied in the source code of Apache HttpClient and the Kafka client.</description><pubDate>Thu, 11 Jun 2026 14:55:16 GMT</pubDate></item><item><title>Managing and Updating Production Server Configuration in Batches with Ansible</title><link>https://jacksparrow414.pages.dev/en/posts/161493642/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/161493642/</guid><description>Uses production server configuration updates to introduce an Ansible development environment, inventory, and playbook organization. Examples cover selecting host batches, copying and editing files, restarting services, and upgrading the kernel, with explanations of variables, conditions, and concurrent execution.</description><pubDate>Sat, 30 May 2026 04:32:23 GMT</pubDate></item><item><title>Understanding Java NIO (Part 2): I/O Multiplexing and Reactor Servers in C</title><link>https://jacksparrow414.pages.dev/en/posts/160796261/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/160796261/</guid><description>Starting from the limitations of polling with nonblocking I/O, this post introduces select and epoll through C examples. It explains file descriptors, level-triggered and edge-triggered notifications, then combines connection management, I/O event handling, and a business thread pool into a Multi-Reactor server.</description><pubDate>Mon, 18 May 2026 03:25:34 GMT</pubDate></item><item><title>Understanding Java NIO (Part 1): Blocking I/O Servers in C with Processes, Threads, and Thread Pools</title><link>https://jacksparrow414.pages.dev/en/posts/160489936/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/160489936/</guid><description>C implementations of blocking socket servers use a single process, multiple processes, multiple threads, and a thread pool to explain connection handling, file descriptors, and resource release. Comparing their concurrency and overhead establishes a foundation for nonblocking I/O and I/O multiplexing.</description><pubDate>Sat, 25 Apr 2026 09:02:48 GMT</pubDate></item><item><title>Replacing Database LIKE Queries with Elasticsearch: Approaches and Implementation Details</title><link>https://jacksparrow414.pages.dev/en/posts/160345586/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/160345586/</guid><description>For a large order dataset, Elasticsearch replaces database LIKE searches on contact information, followed by database lookups for orders. The article covers index design, historical and incremental synchronization, UTC handling, pagination, database fallback, and synchronization gaps.</description><pubDate>Tue, 21 Apr 2026 10:18:29 GMT</pubDate></item><item><title>Python (Part 1): Building a WeChat Mini Program Bot for Scheduled Flash Sales and Setting Up a Maintainable Project</title><link>https://jacksparrow414.pages.dev/en/posts/148884545/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/148884545/</guid><description>This article uses Charles to inspect a WeChat Mini Program’s API and builds a Python bot for scheduled orders, with results pushed to iOS through Bark. It also covers project scaffolding and dependency management, proxy selection, and optimizations involving multithreading, connection reuse, and request timing.</description><pubDate>Thu, 26 Jun 2025 11:40:12 GMT</pubDate></item><item><title>Enterprise JDK Upgrades (Part 1): Moving from JDK 11 to JDK 17</title><link>https://jacksparrow414.pages.dev/en/posts/147189475/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/147189475/</guid><description>Using an upgrade of multiple company Java applications from JDK 11 to JDK 17, this article discusses compatibility checks and a staged migration. It covers changed exception messages, reflective-access restrictions, separate runtime and compile-time transitions, and supporting changes to Tomcat, Jenkins, and development environments.</description><pubDate>Sun, 13 Apr 2025 05:34:15 GMT</pubDate></item><item><title>JMX Exporter Source Analysis, Production Practices, and Scrape Timeout Troubleshooting</title><link>https://jacksparrow414.pages.dev/en/posts/143644938/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/143644938/</guid><description>An investigation of JMX Exporter scrape timeouts compares MBean inclusion, rule caching, and attribute filtering. Source analysis and an extension allow querying only specified MBean attributes, followed by production configuration recommendations and the experience of contributing the change upstream.</description><pubDate>Fri, 15 Nov 2024 11:32:08 GMT</pubDate></item><item><title>Automating AWS EC2 Creation, Elasticsearch and Kibana Installation, and OpenTelemetry Monitoring</title><link>https://jacksparrow414.pages.dev/en/posts/142633205/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/142633205/</guid><description>AWS CLI scripts create an EC2 instance and internal DNS record, while properties files and User Data organize deployment parameters and initialization. Using Elasticsearch, Kibana, and OpenTelemetry as examples, this article covers server configuration, automated deployment, and verification.</description><pubDate>Sun, 29 Sep 2024 07:56:25 GMT</pubDate></item><item><title>Locks in Java (Part 4): High-Performance Web Page Caching with a Read-Write Lock</title><link>https://jacksparrow414.pages.dev/en/posts/141775986/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/141775986/</guid><description>Starting with Ehcache 2 web-caching source code, this article analyzes the role of ReentrantReadWriteLock in concurrent cache loading. It then discusses an Ehcache 3 migration and how a custom Filter, cache keys, and a read-write lock cooperate to handle concurrent requests for the same page.</description><pubDate>Sun, 01 Sep 2024 02:45:07 GMT</pubDate></item><item><title>A Practical Guide to Elasticsearch in Application Development, with a Real Optimization Case</title><link>https://jacksparrow414.pages.dev/en/posts/137611649/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/137611649/</guid><description>A checklist for using Elasticsearch in application development, covering analyzer validation, field mappings, index planning, lifecycle management, and capacity estimates. A real logging use case illustrates performance problems caused by cleanup and writes, along with improvements using data streams, circuit breakers, and batching.</description><pubDate>Sun, 26 May 2024 05:43:02 GMT</pubDate></item><item><title>Building Elastic Stack from the Official Documentation: A Three-Node Elasticsearch Cluster, Kibana, Filebeat, Metricbeat, and Migration Without Downtime</title><link>https://jacksparrow414.pages.dev/en/posts/136917156/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/136917156/</guid><description>Uses Docker Compose to build Elastic Stack with a three-node Elasticsearch cluster, Kibana, Filebeat, and Metricbeat, explaining TLS and monitoring configuration. Drawing on a production migration, it discusses moving from one node to a cluster through domain switching, data migration, and connection verification.</description><pubDate>Thu, 21 Mar 2024 12:51:37 GMT</pubDate></item><item><title>JDBC Streaming Reads and Correct Streaming Processing, with Examples</title><link>https://jacksparrow414.pages.dev/en/posts/136481686/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/136481686/</guid><description>JDBC streaming reads.</description><pubDate>Sat, 09 Mar 2024 13:02:59 GMT</pubDate></item><item><title>Kafka (Part 6): Oracle-to-PostgreSQL CDC with Kafka Connect and Debezium, and Cache Consistency</title><link>https://jacksparrow414.pages.dev/en/posts/134751835/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/134751835/</guid><description>Introduces CDC and synchronizes Oracle data to PostgreSQL through a Kafka Connect and Debezium example. It discusses database synchronization, Elasticsearch imports, and cache consistency, comparing the conditions under which different approaches are suitable.</description><pubDate>Sat, 02 Dec 2023 07:53:24 GMT</pubDate></item><item><title>Kafka (Part 5): Consumer Callbacks, Scheduled Retries, and Rebalancing</title><link>https://jacksparrow414.pages.dev/en/posts/134610052/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/134610052/</guid><description>This largely completes a messaging system built with Kafka. The key code has been explained across the articles; see the source repository for the complete design and implementation. The next Kafka article is planned to cover synchronizing Oracle data to PostgreSQL with Kafka Connect.</description><pubDate>Sat, 25 Nov 2023 00:47:43 GMT</pubDate></item><item><title>Kafka (Part 4): Consuming JSON, Sharing a Deserializer, and Improving Throughput</title><link>https://jacksparrow414.pages.dev/en/posts/134477889/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/134477889/</guid><description>This article implements Kafka consumers for JSON messages, including shared deserialization, deduplication, retries, and offset commits. Load tests inform partition counts and consumer settings, and the template method pattern reuses the consumption flow for emails of different priorities.</description><pubDate>Sat, 18 Nov 2023 07:16:13 GMT</pubDate></item><item><title>Kafka (Part 3): Sending JSON with a Shared Serializer and Improving Producer Throughput</title><link>https://jacksparrow414.pages.dev/en/posts/134360108/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/134360108/</guid><description>Implements a Kafka producer that sends JSON messages, using a shared serializer for different objects and configuring asynchronous sending, failure recording, and retries. Based on actual email-message sizes, it discusses how compression, batch size, request size, and waiting time affect throughput.</description><pubDate>Mon, 13 Nov 2023 12:23:42 GMT</pubDate></item><item><title>Kafka (Part 2): Designing a Messaging System to Decouple Email Delivery</title><link>https://jacksparrow414.pages.dev/en/posts/134221924/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/134221924/</guid><description>Uses email delivery to explain a design that decouples a business system from an email system through Kafka. It discusses responsibility boundaries, a unified message format, sending and callback flows, and a fallback when switching between old and new systems, providing background for subsequent producer and consumer implementations.</description><pubDate>Sat, 04 Nov 2023 11:34:25 GMT</pubDate></item><item><title>Load Testing HTTP APIs with JMeter (Part 1): Writing and Debugging Test Scripts</title><link>https://jacksparrow414.pages.dev/en/posts/133578940/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/133578940/</guid><description>This article doesn&apos;t go into much detail about JMeter&apos;s components and their concepts; in my view, the official documentation is already the most essential learning material, and once you&apos;ve configured a few scripts yourself you&apos;ll basically know what each component is for. If you want to learn JMeter, read the official documentation and look things up whenever a concept or setting is unclear — readers who are just getting started should also spend more time on the FAQ and Best Practices sections.</description><pubDate>Thu, 05 Oct 2023 07:13:30 GMT</pubDate></item><item><title>Kafka (Part 1): A Single-Node KRaft Setup with Docker Compose, Kafka UI, and Prometheus JMX Exporter</title><link>https://jacksparrow414.pages.dev/en/posts/133418837/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/133418837/</guid><description>Builds a single-node Kafka environment in KRaft mode with Docker Compose and integrates Kafka UI and Prometheus JMX Exporter. It explains listeners, roles, memory, and monitoring configuration, then covers startup verification, JMX port conflicts, and resource-related troubleshooting.</description><pubDate>Sat, 30 Sep 2023 06:43:33 GMT</pubDate></item><item><title>Understanding HTTPS, TLS, and SSL (Part 2): Visualizing the TLS Handshake and Decrypting Traffic</title><link>https://jacksparrow414.pages.dev/en/posts/132914316/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/132914316/</guid><description>After generating a self-signed certificate locally and configuring the browser to trust it, HTTPS hides request and response contents from Wireshark. Because I tended to forget the handshake analyses I had read, I decided to capture traffic myself and inspect the entire process.</description><pubDate>Sat, 16 Sep 2023 08:13:46 GMT</pubDate></item><item><title>Understanding HTTPS, TLS, and SSL (Part 1): Core Concepts and Local Self-Signed Certificates</title><link>https://jacksparrow414.pages.dev/en/posts/132522581/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/132522581/</guid><description>I frequently encounter HTTPS, TLS, and SSL. After reading a few articles, I thought I understood them, but troubleshooting showed that I barely knew the basics. This post fills in that foundational knowledge without going deeply into interpreting the various standards.</description><pubDate>Sun, 27 Aug 2023 08:26:29 GMT</pubDate></item><item><title>Using Log4j2 (Part 3): Different Configurations for Different Environments</title><link>https://jacksparrow414.pages.dev/en/posts/131736461/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/131736461/</guid><description>Explains ways to use different Log4j2 output formats and configurations across environments, including SystemPropertyArbiter, property substitution, custom Lookup plugins, and ScriptAppenderSelector. It discusses the choice between startup options and code extensions in the context of project deployment workflows.</description><pubDate>Sat, 15 Jul 2023 05:01:19 GMT</pubDate></item><item><title>Setting Up a C Development Environment in VS Code</title><link>https://jacksparrow414.pages.dev/en/posts/131444009/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/131444009/</guid><description>Having used VS Code relatively little, I lacked experience developing C programs in it. This post records the steps for setting up a C development environment in VS Code.</description><pubDate>Wed, 28 Jun 2023 13:05:16 GMT</pubDate></item><item><title>Using Eclipse Krazo (Jakarta MVC)</title><link>https://jacksparrow414.pages.dev/en/posts/131262047/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/131262047/</guid><description>An introduction to Jakarta MVC and its Eclipse Krazo implementation, using page access and form submission to explain controllers, models, views, redirects, and parameter validation. Source-code analysis traces CSRF token generation and validation, followed by a custom page for validation failures.</description><pubDate>Sat, 17 Jun 2023 09:58:40 GMT</pubDate></item><item><title>Programming Visualization Websites and Tools (Continuously Updated)</title><link>https://jacksparrow414.pages.dev/en/posts/130165318/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/130165318/</guid><description>A collection of visualization websites and tools for understanding programming concepts, including Git practice, regular expression testing, Wireshark packet analysis, and shell command explanations. Interactive demonstrations and hands-on practice make it easier to understand how these concepts work and provide a reference for later use.</description><pubDate>Sat, 15 Apr 2023 00:55:14 GMT</pubDate></item><item><title>Shipping Tomcat access_logs from EC2 to Elasticsearch with Filebeat and AWS CloudWatch Logs, with Automated Log Management via ILM</title><link>https://jacksparrow414.pages.dev/en/posts/129475873/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/129475873/</guid><description>In a log collection pipeline from CloudWatch Logs to Elasticsearch, Data Streams and ILM are used to manage index rollover and expiration-based deletion. Drawing on hands-on practice, this article describes the tuning process for Filebeat&apos;s memory queue, bulk write, and concurrency parameters, and records issues such as latency, cost, and occasional small amounts of log loss.</description><pubDate>Sun, 12 Mar 2023 08:39:30 GMT</pubDate></item><item><title>Implementing Rate-Limiting Algorithms with Lua Scripts</title><link>https://jacksparrow414.pages.dev/en/posts/128504766/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/128504766/</guid><description>Lua scripts executed and debugged in Redis implement fixed-window, sliding-window, token-bucket, and leaky-bucket rate limiting. Request-count examples explain fixed-window boundary issues and discuss where the algorithms fit in rate limiting and traffic shaping.</description><pubDate>Sat, 31 Dec 2022 08:56:50 GMT</pubDate></item><item><title>Shipping Tomcat Access Logs from EC2 to ELK with Filebeat and AWS CloudWatch Logs</title><link>https://jacksparrow414.pages.dev/en/posts/128487811/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/128487811/</guid><description>An end-to-end approach to sending Tomcat access logs from AWS EC2 to ELK: CloudWatch Agent collects the logs, Filebeat pulls them from CloudWatch Logs, and Logstash parses and indexes them in Elasticsearch. It covers configuration, pipeline verification, and troubleshooting.</description><pubDate>Fri, 30 Dec 2022 01:29:31 GMT</pubDate></item><item><title>Using Hibernate Validator (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/128436152/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/128436152/</guid><description>Introduces Hibernate Validator alongside the Jakarta Bean Validation specification, covering constraint annotations, cascading validation, and method parameter and return-value validation. English and Chinese error-message examples demonstrate internationalization, followed by an analysis of how RESTEasy switches validation messages according to the request language.</description><pubDate>Sun, 25 Dec 2022 13:58:11 GMT</pubDate></item><item><title>PostgreSQL (Part 2): Best Practices for Procedural Language Usage</title><link>https://jacksparrow414.pages.dev/en/posts/128055470/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/128055470/</guid><description>Database server-side programming with PL/pgSQL.</description><pubDate>Sat, 26 Nov 2022 12:43:01 GMT</pubDate></item><item><title>Installing Software with Homebrew (Continuously Updated)</title><link>https://jacksparrow414.pages.dev/en/posts/127018563/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/127018563/</guid><description>This post records how to install various software packages with Homebrew.</description><pubDate>Fri, 23 Sep 2022 13:57:40 GMT</pubDate></item><item><title>MySQL Notes</title><link>https://jacksparrow414.pages.dev/en/posts/126999596/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/126999596/</guid><description>MySQL study and development notes covering connection methods, data types, primary keys and indexes, storage engines, and transaction isolation levels. Through examples it discusses dirty reads, non-repeatable reads, phantom reads, and locks, and also records execution plan analysis, SQL optimization, and the roles of common logs.</description><pubDate>Thu, 22 Sep 2022 13:10:04 GMT</pubDate></item><item><title>Docker Notes</title><link>https://jacksparrow414.pages.dev/en/posts/126447415/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/126447415/</guid><description>Notes from using Docker.</description><pubDate>Sun, 21 Aug 2022 01:16:48 GMT</pubDate></item><item><title>PostgreSQL (Part 1): Setting Up a Learning Environment</title><link>https://jacksparrow414.pages.dev/en/posts/125948098/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/125948098/</guid><description>Sets up a PostgreSQL learning environment with Docker Compose, configures database options through an .env file, and persists data with a volume. It covers connecting with pgAdmin and basic operations inside the container, including creating a table, querying tables, and inserting data.</description><pubDate>Sat, 23 Jul 2022 07:23:46 GMT</pubDate></item><item><title>Using the Elasticsearch Java API</title><link>https://jacksparrow414.pages.dev/en/posts/125608456/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/125608456/</guid><description>Starting with the Search API request structure and Query DSL, this article explains how to organize Elasticsearch query conditions, sorting, returned fields, and pagination. Examples show how to convert DSL into Java API calls and enable request logging for debugging.</description><pubDate>Mon, 04 Jul 2022 12:52:22 GMT</pubDate></item><item><title>Using Log4j2 (Part 2): Changing Log Levels at Runtime</title><link>https://jacksparrow414.pages.dev/en/posts/125379449/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/125379449/</guid><description>Two ways to adjust Log4j2 log levels without restarting an application: changing the configuration through JMX in JConsole, or calling the programmatic configuration API through an HTTP endpoint. A production troubleshooting scenario illustrates when each approach is useful.</description><pubDate>Mon, 20 Jun 2022 11:41:15 GMT</pubDate></item><item><title>Generating PEM CA Certificates for ELK, Enabling HTTPS, and Connecting with the Elasticsearch Java Client</title><link>https://jacksparrow414.pages.dev/en/posts/125014283/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/125014283/</guid><description>Using ELK 8.2 as an example, this post walks through generating a CA certificate, configuring TLS for internode communication and HTTPS at the HTTP layer, and configuring certificates for Kibana, Logstash, and the Java client. It also covers the differences between the PEM and PKCS#12 formats and the related JDK compatibility issues.</description><pubDate>Sat, 28 May 2022 00:57:13 GMT</pubDate></item><item><title>Using Log4j2 (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/124915409/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/124915409/</guid><description>This post sorts out Log4j2&apos;s architecture and the responsibilities of each component, using UML class diagrams to explain how the configuration fits together. Through examples, it covers log output and rollover policies, uncaught exception handling, bridges from other logging frameworks, and how to enable and verify asynchronous logging.</description><pubDate>Sun, 22 May 2022 11:58:29 GMT</pubDate></item><item><title>Notes from Reading the Docker Documentation</title><link>https://jacksparrow414.pages.dev/en/posts/124218372/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/124218372/</guid><description>Notes on Docker’s getting-started tutorial cover building images, starting containers, persisting data, and composing multi-container applications. Topics include RUN versus CMD in Dockerfiles, named volumes and bind mounts, Docker Compose, and basic Docker Desktop operations.</description><pubDate>Sat, 16 Apr 2022 11:07:37 GMT</pubDate></item><item><title>Getting Started with JMX: JMX Exporter Monitoring and OpenTelemetry Integration</title><link>https://jacksparrow414.pages.dev/en/posts/123510748/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/123510748/</guid><description>Demonstrates JMX registration, attribute queries, and JConsole operations with a custom MXBean, then introduces metrics collection through JMX Exporter, OpenTelemetry Collector, and Prometheus. It also discusses MBean filtering and scrape performance, and OpenTelemetry JMX integration options.</description><pubDate>Tue, 15 Mar 2022 12:02:20 GMT</pubDate></item><item><title>Sending Email with Velocity in Spring Boot</title><link>https://jacksparrow414.pages.dev/en/posts/123253121/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/123253121/</guid><description>Velocity references, directives, variable assignment, and resource loading are introduced through rendering order emails in Spring Boot. JavaMailSender and SMTP configuration for a 163.com mailbox demonstrate building, sending, and verifying HTML email.</description><pubDate>Thu, 03 Mar 2022 06:23:26 GMT</pubDate></item><item><title>Getting Started with React (Part 2): Sending Requests and Mocking Data</title><link>https://jacksparrow414.pages.dev/en/posts/122648928/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/122648928/</guid><description>Integrating Axios into a React login form, this article centralizes the request instance, wraps API calls, and uses promises to handle responses and end the submission state. It serializes form data with qs, mocks responses with Mock.js, and verifies the interaction through console output and loading animations.</description><pubDate>Sun, 23 Jan 2022 03:29:17 GMT</pubDate></item><item><title>Using Formik for React Forms and Yup for Frontend Validation</title><link>https://jacksparrow414.pages.dev/en/posts/122507894/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/122507894/</guid><description>Uses a React signup form to introduce Formik initial values, submission handling, and form validation, with touched and onBlur controlling error messages. It then uses Yup to define validation rules and getFieldProps to simplify binding input components to form state.</description><pubDate>Sat, 15 Jan 2022 03:36:08 GMT</pubDate></item><item><title>Getting Started with React (Part 1): Building a Basic Application</title><link>https://jacksparrow414.pages.dev/en/posts/122442302/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/122442302/</guid><description>Starting with Node.js environment setup, this article manually builds a basic React application with Babel, Webpack, an HTML entry point, components, and styles. It demonstrates the development server, hot updates, and bundling, and provides the project structure and example repository.</description><pubDate>Tue, 11 Jan 2022 13:40:57 GMT</pubDate></item><item><title>Implementing the OAuth 2.0 Authorization Code Flow</title><link>https://jacksparrow414.pages.dev/en/posts/121952436/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/121952436/</guid><description>A custom OAuth 2.0 authorization code implementation using RESTEasy, JPA, CDI, and JWT connects user consent, code generation, callbacks, and token exchange. The article shows signature and permission checks on the resource server, along with the project structure, deployment steps, and complete example code.</description><pubDate>Wed, 15 Dec 2021 06:53:56 GMT</pubDate></item><item><title>Getting Started with RESTEasy</title><link>https://jacksparrow414.pages.dev/en/posts/121714825/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/121714825/</guid><description>Starting from Servlet and JAX-RS specifications, this post introduces RESTEasy Applications, Resources, and Providers and explains initialization in a Servlet container. Examples cover HTTP requests, forms, file transfers, and global exception responses.</description><pubDate>Sat, 04 Dec 2021 05:49:38 GMT</pubDate></item><item><title>Getting Started with JWT and nimbus-jose-jwt</title><link>https://jacksparrow414.pages.dev/en/posts/121665795/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/121665795/</guid><description>JWT structure, common claims, and the purpose of signatures are introduced with HMAC and RSA signing and verification examples using nimbus-jose-jwt. JWE content encryption then illustrates the distinction between signing and encryption and the roles of RSA public and private keys in different scenarios.</description><pubDate>Wed, 01 Dec 2021 13:55:04 GMT</pubDate></item><item><title>Reading the Java EE Official Documentation</title><link>https://jacksparrow414.pages.dev/en/posts/121422595/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/121422595/</guid><description>Reading notes on the official Java EE 8 documentation, organizing concepts such as components and containers, JSF, CDI, EJB, JPA, and security, along with common terminology. The article gathers related chapters and example resources, and records Tomcat issues on Windows as well as thoughts on choosing between POST and PUT in RESTful services.</description><pubDate>Fri, 19 Nov 2021 06:59:55 GMT</pubDate></item><item><title>Basic Ehcache Usage</title><link>https://jacksparrow414.pages.dev/en/posts/121316472/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/121316472/</guid><description>A simple Spring Boot application demonstrates programmatic and XML configuration in Ehcache 3, including cache types, expiry policies, resource tiers, and event listeners. API calls verify cache reads, writes, and expiry events, and a configuration property switches between the two initialization approaches.</description><pubDate>Sun, 14 Nov 2021 05:05:45 GMT</pubDate></item><item><title>SpEL: Getting Started and Quick Reference</title><link>https://jacksparrow414.pages.dev/en/posts/120809498/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/120809498/</guid><description>This quick reference covers common ways to read and assign values with Spring Expression Language (SpEL), the two @Value syntaxes, and the role of the evaluation context. Java examples demonstrate property access, collection operations, method calls, null handling, and collection filtering.</description><pubDate>Sun, 17 Oct 2021 04:24:02 GMT</pubDate></item><item><title>Getting Started with Java RMI</title><link>https://jacksparrow414.pages.dev/en/posts/120583347/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/120583347/</guid><description>Introduces the basic idea of invoking remote methods across JVMs with Java RMI, connecting the remote interface, its implementation, the registry, and client lookup and invocation. It provides two ways to find a remote service and discusses client proxies and serialization of returned objects.</description><pubDate>Sat, 02 Oct 2021 01:20:16 GMT</pubDate></item><item><title>Getting Started with Lua Scripts, with Example Code</title><link>https://jacksparrow414.pages.dev/en/posts/119953123/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/119953123/</guid><description>A guide to Lua comments, variable scope, common data types, conditional expressions, arrays, and loops, with short examples of strings and functions. It also demonstrates calling Redis commands from Lua and provides references for the standard library and debugging tools.</description><pubDate>Fri, 27 Aug 2021 06:52:11 GMT</pubDate></item><item><title>Getting Started with Java EE: An Example Application</title><link>https://jacksparrow414.pages.dev/en/posts/119930685/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/119930685/</guid><description>A Java EE 8 example walks through installing, starting, and configuring GlassFish 5 and H2. It demonstrates creating a JDBC connection pool and JNDI data source on the server, deploying the application from IntelliJ IDEA, and checking configuration through logs and application pages.</description><pubDate>Thu, 26 Aug 2021 06:28:08 GMT</pubDate></item><item><title>Practical Elasticsearch: Common Operations, Logstash Integration, Local IP Handling, and ECS Field Mapping</title><link>https://jacksparrow414.pages.dev/en/posts/118438254/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/118438254/</guid><description>After the previous two blog posts, we now have article data and can query it. The next step is to keep building on that foundation.</description><pubDate>Sat, 03 Jul 2021 04:09:14 GMT</pubDate></item><item><title>Querying Elasticsearch</title><link>https://jacksparrow414.pages.dev/en/posts/118241783/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/118241783/</guid><description>This article focuses on data queries, an important part of working with Elasticsearch.</description><pubDate>Sat, 26 Jun 2021 01:58:02 GMT</pubDate></item><item><title>Setting Up ELK and Getting Started</title><link>https://jacksparrow414.pages.dev/en/posts/117533447/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/117533447/</guid><description>Installing Elasticsearch, Logstash, and Kibana and getting started with the basics.</description><pubDate>Thu, 03 Jun 2021 12:22:10 GMT</pubDate></item><item><title>Learning RabbitMQ and Spring AMQP (Part 5): Delayed Queues</title><link>https://jacksparrow414.pages.dev/en/posts/113803045/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/113803045/</guid><description>Uses scenarios such as scheduled assignment publication to explain delayed messages and implements them with the RabbitMQ delayed-message plugin. It demonstrates plugin installation, declaring a delayed exchange, and setting message delays, compares Java Client and Spring AMQP code, and verifies the result through send and receive times.</description><pubDate>Sat, 13 Feb 2021 11:59:25 GMT</pubDate></item><item><title>Creating a Custom Spring Boot Starter</title><link>https://jacksparrow414.pages.dev/en/posts/113697153/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/113697153/</guid><description>A custom framework illustrates a Spring Boot Starter’s project structure, property binding, conditional auto-configuration, and registration through spring.factories. The article demonstrates auto-configuration tests, dependency inclusion, practical usage, and overriding the framework’s default implementation with custom configuration.</description><pubDate>Fri, 05 Feb 2021 07:39:01 GMT</pubDate></item><item><title>Learning and Understanding Maven in Depth</title><link>https://jacksparrow414.pages.dev/en/posts/113471655/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/113471655/</guid><description>Build a thorough understanding of Maven, with practical scenarios that explain plugin configuration and reduce repeated searches for how to configure Maven plugins.</description><pubDate>Sun, 31 Jan 2021 06:24:10 GMT</pubDate></item><item><title>Learning RabbitMQ and Spring AMQP (Part 4): JSON Message Bodies</title><link>https://jacksparrow414.pages.dev/en/posts/112747029/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/112747029/</guid><description>Explains how to pass Java objects as JSON in RabbitMQ and Spring AMQP by configuring message converters on the producer and consumer. Examples cover object serialization, Content-Type and timestamp settings, and mapping received messages to Java entities with @Payload.</description><pubDate>Sun, 17 Jan 2021 07:23:20 GMT</pubDate></item><item><title>RabbitMQ and Spring AMQP (Part 3): Message Reliability</title><link>https://jacksparrow414.pages.dev/en/posts/111874999/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/111874999/</guid><description>Message delivery, storage, and consumption introduce publisher confirms, returned messages, durable components, and message persistence in Spring AMQP. The article demonstrates manual consumer acknowledgments, rejection, and requeuing, and explains why persistence can still leave a risk of message loss.</description><pubDate>Mon, 28 Dec 2020 13:14:58 GMT</pubDate></item><item><title>Learning RabbitMQ and Spring AMQP (Part 2): Messaging Models and the Startup Process</title><link>https://jacksparrow414.pages.dev/en/posts/111463079/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/111463079/</guid><description>Explains RabbitMQ brokers, connections, and channels, comparing the native Java client with Spring AMQP. It covers producer and consumer configuration responsibilities and pooled channel reuse, then traces listener registration, component declarations, and consumer startup through the source code.</description><pubDate>Sun, 20 Dec 2020 13:58:46 GMT</pubDate></item><item><title>Learning RabbitMQ and Spring AMQP (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/111462964/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/111462964/</guid><description>This article explains how producers, exchanges, routing keys, bindings, and queues relate in RabbitMQ and demonstrates virtual-host configuration and publishing from the management console. Spring AMQP examples connect exchange declarations, queue bindings, consumer listeners, and producer publishing into a basic workflow.</description><pubDate>Sun, 20 Dec 2020 13:23:53 GMT</pubDate></item><item><title>JVM Notes (Part 2)</title><link>https://jacksparrow414.pages.dev/en/posts/109658053/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/109658053/</guid><description>A collection of common JVM diagnostic tools: use jps to obtain Java process IDs, jinfo to inspect or adjust runtime options, and jmap to view heap information. The article also introduces graphical tools such as jvisualvm and jconsole and explains how to connect to a local or remote JVM to inspect its options.</description><pubDate>Thu, 12 Nov 2020 13:20:01 GMT</pubDate></item><item><title>JVM Notes (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/109631395/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/109631395/</guid><description>Notes on Java bytecode, stack frames, and JVM runtime data areas, together with common startup options for heap memory, thread stacks, garbage collection, and heap dumps. Parameter conversions and capacity examples illustrate memory configuration, followed by the difference between memory leaks and running out of memory.</description><pubDate>Wed, 11 Nov 2020 13:15:50 GMT</pubDate></item><item><title>Arthas</title><link>https://jacksparrow414.pages.dev/en/posts/109430698/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/109430698/</guid><description>This article records Arthas startup, reconnection, and common startup issues, with practical examples of finding classes, decompiling, compiling, and hot updates. It also covers changing log levels dynamically, inspecting and modifying JVM options, and cautions when using redefine.</description><pubDate>Sun, 01 Nov 2020 09:07:27 GMT</pubDate></item><item><title>Locks in Java (Part 3): Implementing Wait and Notify with Condition</title><link>https://jacksparrow414.pages.dev/en/posts/109229772/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/109229772/</guid><description>Explains how to combine Lock and Condition to make threads wait and notify one another, comparing await, signal, and signalAll with wait/notify. A ReentrantLock example illustrates thread coordination and the requirement to acquire the lock before waiting or notifying and release it afterward.</description><pubDate>Thu, 22 Oct 2020 12:21:29 GMT</pubDate></item><item><title>Locks in Java (Part 2): Implementing a Custom Lock</title><link>https://jacksparrow414.pages.dev/en/posts/109211022/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/109211022/</guid><description>Introduces lock memory semantics and the use of AQS and the Lock interface to implement custom synchronization components, including an example that allows two concurrent threads. It also compares polling with wait/notify and discusses notification, competing for a lock again, and checking conditions.</description><pubDate>Wed, 21 Oct 2020 14:03:50 GMT</pubDate></item><item><title>Locks in Java (Part 1): Lock Categories</title><link>https://jacksparrow414.pages.dev/en/posts/109190408/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/109190408/</guid><description>Focusing on the object header’s Mark Word, this article explains acquisition, contention, release, and promotion of biased, lightweight, and heavyweight locks. JOL examples inspect lock flags before and after synchronized code, followed by discussion of spinning, blocking, and suitable use cases.</description><pubDate>Tue, 20 Oct 2020 13:51:25 GMT</pubDate></item><item><title>Computer Networks: The Data Link Layer</title><link>https://jacksparrow414.pages.dev/en/posts/108836715/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108836715/</guid><description>An introduction to data-link frames, the maximum transmission unit, byte stuffing, and CRC error detection, followed by the role of network cards and MAC addresses. The article describes transmission and collision detection on broadcast channels and gathers related notes on modems, optical fiber, and switches.</description><pubDate>Sun, 27 Sep 2020 13:16:06 GMT</pubDate></item><item><title>Computer Networks: The Transport Layer</title><link>https://jacksparrow414.pages.dev/en/posts/108817087/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108817087/</guid><description>Starting from ports and inter-process communication, this article introduces TCP&apos;s byte-stream transmission, automatic retransmission, sliding window, and segment structure. It uses Wireshark packet captures to analyze the three-way handshake and the four-way termination, and discusses connection states such as TIME-WAIT and CLOSE-WAIT together with related troubleshooting scenarios.</description><pubDate>Sat, 26 Sep 2020 13:00:13 GMT</pubDate></item><item><title>Computer Networking: The Network Layer</title><link>https://jacksparrow414.pages.dev/en/posts/108814357/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108814357/</guid><description>Reviews IPv4 address classes, ARP address resolution, IP datagrams, subnet masks, and routing, and explains the relationship between IP and MAC addresses. It also records troubleshooting connection failures after rebuilding AWS VPC instances and the solution of retaining network interfaces.</description><pubDate>Sat, 26 Sep 2020 09:15:40 GMT</pubDate></item><item><title>Computer Buses and Memory</title><link>https://jacksparrow414.pages.dev/en/posts/108561764/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108561764/</guid><description>This article outlines bus architectures and the roles of data, address, and control buses, with examples of bus width and bandwidth. It also describes main memory, cache, and secondary storage and explains memory reads and writes using MAR and MDR.</description><pubDate>Sun, 13 Sep 2020 05:45:05 GMT</pubDate></item><item><title>A Few Things to Know About Computer Organization</title><link>https://jacksparrow414.pages.dev/en/posts/108561741/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108561741/</guid><description>This article introduces the five major hardware components and common CPU and memory registers, then uses addition to explain instruction fetch, decoding, and execution. It also demonstrates main-memory capacity calculations using address width, word length, and unit conversion.</description><pubDate>Sun, 13 Sep 2020 05:44:19 GMT</pubDate></item><item><title>Analyzing the ShardingJDBC Execution Flow</title><link>https://jacksparrow414.pages.dev/en/posts/108521566/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108521566/</guid><description>Uses the MyBatis call flow to analyze how ShardingJDBC 4.1.1 integrates with JDBC through custom DataSource, Connection, and PreparedStatement implementations. It traces parameter buffering, physical connection acquisition, and result-set handling, then simulates the proxy workflow with simplified code.</description><pubDate>Thu, 10 Sep 2020 11:57:42 GMT</pubDate></item><item><title>Getting Started with Redis (Part 4): Monitoring and Automatic Recovery with Sentinel</title><link>https://jacksparrow414.pages.dev/en/posts/108349874/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108349874/</guid><description>Redis Sentinel configuration and logs illustrate monitoring and automatic failover, including subjective and objective down states, leader election, and selection of a new primary. The article also shows replica promotion and replication changes, and discusses deploying multiple Sentinels and configuring voting thresholds.</description><pubDate>Tue, 01 Sep 2020 12:16:56 GMT</pubDate></item><item><title>Getting Started with Redis (Part 3): Primary/Replica Replication</title><link>https://jacksparrow414.pages.dev/en/posts/108349736/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108349736/</guid><description>This article covers Redis RDB and AOF persistence configuration and recovery, then demonstrates primary/replica replication. It explains full, incremental, and diskless replication and describes manually promoting a replica and updating replication relationships after a primary failure.</description><pubDate>Tue, 01 Sep 2020 12:13:42 GMT</pubDate></item><item><title>Getting Started with Redis (Part 2): Basic Data Types and Commands</title><link>https://jacksparrow414.pages.dev/en/posts/108063571/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108063571/</guid><description>Basic usage of the Redis server and client, with common commands for strings, hashes, lists, sets, and sorted sets illustrated through examples of key and data operations. The article also distinguishes the atomicity of individual commands from that of an entire business workflow, and discusses the role of Lua scripts.</description><pubDate>Mon, 17 Aug 2020 12:24:20 GMT</pubDate></item><item><title>Integrating GitHub with CircleCI, with a Sample Configuration</title><link>https://jacksparrow414.pages.dev/en/posts/108041353/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/108041353/</guid><description>Connecting a GitHub project to CircleCI, with a config.yml example explaining workflows, jobs, and execution steps. Topics include Maven builds, dependency caching, saving test results, branch filtering, scheduled builds, and verification that the configuration takes effect.</description><pubDate>Sun, 16 Aug 2020 11:18:31 GMT</pubDate></item><item><title>Using ShardingSphere Database Middleware: ShardingProxy (Part 1), Data Sharding and Read/Write Splitting</title><link>https://jacksparrow414.pages.dev/en/posts/107731917/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/107731917/</guid><description>Uses ShardingProxy 4.1.1 to configure data sharding and read/write splitting across multiple MySQL instances, then verifies routing through query and insert logs. It covers starting the proxy service, connecting an application, and MySQL driver and version compatibility considerations.</description><pubDate>Sat, 01 Aug 2020 07:46:35 GMT</pubDate></item><item><title>Using Solr (Part 5): A Complete Command-Line Workflow and HTML Tag Filtering</title><link>https://jacksparrow414.pages.dev/en/posts/107443620/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/107443620/</guid><description>Command-line and curl examples demonstrate a complete Solr workflow: managing cores and fields, CRUD operations, pagination, and conditional queries. The article also configures HTML tag filtering for rich-text searches and explains copyField and fieldType.</description><pubDate>Sun, 19 Jul 2020 04:42:36 GMT</pubDate></item><item><title>ShardingSphere (Part 4): Custom Encryption Strategies for Data Masking</title><link>https://jacksparrow414.pages.dev/en/posts/107128439/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/107128439/</guid><description>Using ShardingSphere 4.1.1, this article implements and configures custom encryption strategies and traces SPI-based encryptor registration through the source code. It demonstrates Encryptor and QueryAssistedEncryptor separately, then verifies how an assisted-query column supports queries over differing ciphertext values.</description><pubDate>Sat, 04 Jul 2020 10:32:15 GMT</pubDate></item><item><title>Git Basics and Contributing Pull Requests to Open-Source Projects: Practical Troubleshooting</title><link>https://jacksparrow414.pages.dev/en/posts/106955241/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106955241/</guid><description>This article answers common GitHub workflow questions: dealing with slow or failed clones, keeping a fork synchronized with upstream, submitting pull requests, and handling other practical Git issues.</description><pubDate>Thu, 25 Jun 2020 02:22:54 GMT</pubDate></item><item><title>Getting Started with SkyWalking</title><link>https://jacksparrow414.pages.dev/en/posts/106745714/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106745714/</guid><description>Introduces installation, configuration, and startup of SkyWalking and Elasticsearch, then configures agents for Spring Cloud microservices. Dashboards, topology, and tracing views illustrate individual services, service-to-service calls, and database access, including how to inspect SQL and its parameters in a trace.</description><pubDate>Sun, 14 Jun 2020 06:38:24 GMT</pubDate></item><item><title>Custom YAML Configuration in Spring Boot</title><link>https://jacksparrow414.pages.dev/en/posts/106454228/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106454228/</guid><description>How can you define your own Spring Boot YAML configuration, and what conventions should you follow? This article shares the approach I developed through hands-on practice.</description><pubDate>Sun, 31 May 2020 05:13:22 GMT</pubDate></item><item><title>Using ShardingSphere–ShardingJDBC (Part 3): Data Masking</title><link>https://jacksparrow414.pages.dev/en/posts/106437659/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106437659/</guid><description>Building on data sharding and read/write splitting, this article uses ShardingJDBC’s built-in algorithms to encrypt stored fields and decrypt query results. It verifies the configuration through inserts and queries and discusses full routing without a sharding key, including the number of tables queried and the maintainers’ explanation.</description><pubDate>Sat, 30 May 2020 03:45:09 GMT</pubDate></item><item><title>Using ShardingSphere Database Middleware: ShardingJDBC (Part 2), Read/Write Splitting</title><link>https://jacksparrow414.pages.dev/en/posts/106341331/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106341331/</guid><description>Builds on a data-sharding example to configure ShardingJDBC read/write splitting for a MySQL primary-replica setup. It introduces primary and replica data sources and replica load-balancing strategies, observes queries alternating between replicas, and records the unresolved issue of a slow first query.</description><pubDate>Mon, 25 May 2020 12:52:27 GMT</pubDate></item><item><title>Using ShardingSphere–ShardingJDBC (Part 1): Data Sharding</title><link>https://jacksparrow414.pages.dev/en/posts/106320075/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106320075/</guid><description>An introduction to data sharding in ShardingSphere–ShardingJDBC, with database and table sharding demonstrated across two MySQL instances. An example selects databases by id and tables by age to observe write and query routing, and explains how sharding keys relate to full routing.</description><pubDate>Mon, 25 May 2020 11:37:52 GMT</pubDate></item><item><title>Understanding Spring IoC</title><link>https://jacksparrow414.pages.dev/en/posts/106171462/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106171462/</guid><description>An exploration of Spring IoC through bean creation and dependency injection, including constructors, factory methods, and setters. The article also traces component scanning in the source code to see how annotated classes become bean definitions and how the container manages objects and their dependencies.</description><pubDate>Sun, 17 May 2020 04:16:23 GMT</pubDate></item><item><title>How Does Spring Perform Property Injection?</title><link>https://jacksparrow414.pages.dev/en/posts/106170205/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106170205/</guid><description>Analyzes Spring’s setter and constructor injection workflows through the dependency between two beans. By tracing property resolution and getBean calls, it explains how existing dependencies are reused and missing dependencies are created, and compares when the two injection methods run.</description><pubDate>Sun, 17 May 2020 03:01:23 GMT</pubDate></item><item><title>When Does Spring Instantiate Beans?</title><link>https://jacksparrow414.pages.dev/en/posts/106163508/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/106163508/</guid><description>Starting from XML configuration, this article uses source-code debugging to examine bean definition registration, object creation, property population, and initialization in Spring. It explains how BeanFactory stores the relevant information and compares when non-lazy singleton and prototype beans are created during container startup or actual use.</description><pubDate>Sat, 16 May 2020 12:47:33 GMT</pubDate></item><item><title>Using Solr (Part 4): Spring Data Solr in Real Applications, with Practical Code Examples</title><link>https://jacksparrow414.pages.dev/en/posts/105916921/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/105916921/</guid><description>Uses practical examples to introduce Spring Data Solr configuration, entity mapping, CRUD, and pagination, and demonstrates queries using @Query and SolrTemplate. It also discusses extending custom repositories, using transactions, and checking query statements through logging.</description><pubDate>Mon, 04 May 2020 06:45:05 GMT</pubDate></item><item><title>Using Solr (Part 3): SolrJ in an Application</title><link>https://jacksparrow414.pages.dev/en/posts/105902517/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/105902517/</guid><description>Java examples introduce SolrJ dependency configuration, entities annotated with Field, and a shared SolrClient wrapper. The article demonstrates adding, updating, deleting, and querying data, verifies the results in the Solr console, and explains why the core must be specified when committing.</description><pubDate>Sun, 03 May 2020 06:36:43 GMT</pubDate></item><item><title>Using Solr (Part 2): Full and Incremental Imports from MySQL</title><link>https://jacksparrow414.pages.dev/en/posts/105889408/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/105889408/</guid><description>Explains how to configure Solr DataImportHandler for full and incremental imports from MySQL and periodically refresh data with operating-system scheduled jobs. It also covers tinyint fields, multivalued fields, and Transformers, and outlines DIH components and changes in later versions.</description><pubDate>Sat, 02 May 2020 06:12:19 GMT</pubDate></item><item><title>Using Solr (Part 1): Installation, Core Management, Queries, and Fixing CoreContainer Initialization Errors</title><link>https://jacksparrow414.pages.dev/en/posts/105822592/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/105822592/</guid><description>Introduces Solr installation and startup, custom cores and field configuration, and demonstrates adding, querying, and deleting data through the console and curl. It also covers stopping Solr, deleting cores, and checking the core name when copied configuration causes a CoreContainer initialization failure.</description><pubDate>Fri, 01 May 2020 01:47:52 GMT</pubDate></item><item><title>Using Git Rebase</title><link>https://jacksparrow414.pages.dev/en/posts/105666620/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/105666620/</guid><description>Uses a branch merge that requires combining multiple commits to introduce interactive Git rebase and commit-message editing. It compares squash, fixup, commit --amend, and resetting followed by a new commit, and explains how to abort an unfinished rebase.</description><pubDate>Tue, 21 Apr 2020 13:11:17 GMT</pubDate></item><item><title>Using Docker: Network Configuration</title><link>https://jacksparrow414.pages.dev/en/posts/104740624/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/104740624/</guid><description>Examples of communication between containers compare Docker’s default network, links, and a custom bridge network. The article shows how to inspect container IP addresses and network details, and how a custom network lets containers reach one another by name without depending on specific IP addresses.</description><pubDate>Sun, 08 Mar 2020 13:23:32 GMT</pubDate></item><item><title>Distributed Transactions with Seata: Installing Seata Server and Using AT Mode</title><link>https://jacksparrow414.pages.dev/en/posts/104730024/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/104730024/</guid><description>A rollback problem involving calls between Spring Cloud microservices introduces Seata Server installation, database storage configuration, and Eureka registration. AT mode, the undo_log table, and a global transaction annotation are then used to verify rollback after an exception in a cross-service call.</description><pubDate>Sun, 08 Mar 2020 04:53:33 GMT</pubDate></item><item><title>MySQL Primary-Replica Replication: Detailed Setup and Troubleshooting Replicas That Stop Synchronizing</title><link>https://jacksparrow414.pages.dev/en/posts/104588795/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/104588795/</guid><description>Sets up primary-replica replication using multiple local MySQL instances and introduces replication threads, binlog formats, and configuration steps. Based on actual errors, it covers authentication failures and replicas that stop synchronizing, and discusses asynchronous and semisynchronous replication and common replication topologies.</description><pubDate>Sun, 01 Mar 2020 05:32:25 GMT</pubDate></item><item><title>Using Docker: Building a CentOS Image with Java and Maven</title><link>https://jacksparrow414.pages.dev/en/posts/104458459/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/104458459/</guid><description>Using Docker on macOS, this article records building a CentOS image with a Dockerfile and configuring Java and Maven. It also covers container users, running a Java application, and saving, tagging, pushing, and pulling the custom image.</description><pubDate>Sun, 23 Feb 2020 05:29:38 GMT</pubDate></item><item><title>Migrating SQL Server Data to MySQL: Connection Troubleshooting and Bulk Imports</title><link>https://jacksparrow414.pages.dev/en/posts/104330556/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/104330556/</guid><description>This article records a SQL Server-to-MySQL migration with Navicat and troubleshooting when the server refuses connections. It also covers MySQL file imports and exports, directory permissions, delimiters, duplicate handling, and default field values during bulk imports.</description><pubDate>Sat, 15 Feb 2020 09:46:29 GMT</pubDate></item><item><title>Relearning MyBatis (Part 5)</title><link>https://jacksparrow414.pages.dev/en/posts/103642847/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/103642847/</guid><description>Analyzes how MyBatis getMapper uses JDK dynamic proxies to create proxy objects for Mapper interfaces. By tracing MapperProxy, MapperMethod, and SqlSession calls, it explains how Mapper methods become SQL operations without requiring handwritten interface implementation classes.</description><pubDate>Sat, 21 Dec 2019 05:21:47 GMT</pubDate></item><item><title>Deploying Multiple MySQL Instances on One Mac: A Detailed Walkthrough</title><link>https://jacksparrow414.pages.dev/en/posts/103547178/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/103547178/</guid><description>This article records deploying multiple MySQL instances on a Mac, compares shared and separate configuration files, and details copying an instance, initializing its data directory, and configuring ports and sockets. It also discusses directory permissions, startup, and Navicat connection problems.</description><pubDate>Sun, 15 Dec 2019 04:40:25 GMT</pubDate></item><item><title>Relearning MyBatis (Part 4): JDK Dynamic Proxies in Detail</title><link>https://jacksparrow414.pages.dev/en/posts/103282583/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/103282583/</guid><description>This article revisits the proxy pattern and JDK dynamic-proxy source code to clarify interfaces, implementation classes, proxy classes, and InvocationHandler. Two usage examples explain proxy generation and method invocation, with connections to Spring AOP and MyBatis.</description><pubDate>Sat, 30 Nov 2019 06:10:18 GMT</pubDate></item><item><title>Relearning MyBatis (Part 3)</title><link>https://jacksparrow414.pages.dev/en/posts/103189545/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/103189545/</guid><description>Source-code debugging traces how MyBatis loads configuration and Mapper XML, and turns SQL statements and their attributes into MappedStatement objects. The article follows placeholder conversion, SqlSource creation, and registration of statement information in the global Configuration.</description><pubDate>Thu, 21 Nov 2019 13:49:12 GMT</pubDate></item><item><title>Relearning MyBatis (Part 2)</title><link>https://jacksparrow414.pages.dev/en/posts/103169279/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/103169279/</guid><description>Continuing the MyBatis insert flow, this article analyzes PreparedStatement creation and SQL parameter binding. It explains the relationship among BoundSql, parameter mappings, and TypeHandler, showing how values are assigned by type and how these steps correspond to traditional JDBC.</description><pubDate>Wed, 20 Nov 2019 12:44:08 GMT</pubDate></item><item><title>Relearning MyBatis (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/103129458/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/103129458/</guid><description>Starting with traditional JDBC operations and MyBatis XML configuration, this article traces an insert request. Source-level debugging reveals the calls among SqlSession, executors, and StatementHandler, including obtaining a database connection, preparing a statement, and executing SQL.</description><pubDate>Tue, 19 Nov 2019 13:28:28 GMT</pubDate></item><item><title>Notes from a Debugging Session</title><link>https://jacksparrow414.pages.dev/en/posts/102709308/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/102709308/</guid><description>Records a debugging session involving a Spring Cloud microservice calling a Word-to-image service, covering callbacks blocked by the gateway, file-processing timeouts, and incorrect image order. The workflow is improved by updating the allowlist, using input streams directly, and sorting by numeric filename prefixes.</description><pubDate>Wed, 23 Oct 2019 12:37:28 GMT</pubDate></item><item><title>A DNS Issue in a Development Environment</title><link>https://jacksparrow414.pages.dev/en/posts/102523683/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/102523683/</guid><description>During API acceptance testing, the development environment kept returning 502 errors even though the deployment team found no problem with the environment. The browser console showed that the domain resolved to the wrong IP address, so I changed my local DNS server settings.</description><pubDate>Sat, 12 Oct 2019 08:54:10 GMT</pubDate></item><item><title>Where to Put Filter Conditions in MySQL Joins</title><link>https://jacksparrow414.pages.dev/en/posts/100180327/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/100180327/</guid><description>A two-table LEFT JOIN example compares the results of putting filter conditions in ON versus WHERE. It shows how a condition on the right-hand table in WHERE removes some left-hand records, and how moving the condition changes the join results to match the intended output.</description><pubDate>Sun, 01 Sep 2019 02:04:53 GMT</pubDate></item><item><title>Spring Boot: Pitfalls with @Async and @Transactional</title><link>https://jacksparrow414.pages.dev/en/posts/95730177/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/95730177/</guid><description>Using asynchronous conversion of uploaded Word documents to images as an example, this article investigates why @Async did not take effect in Spring Boot. It explains the importance of return types and calls through a proxy, and discusses similar considerations for @Transactional when methods call other methods in the same class.</description><pubDate>Sat, 13 Jul 2019 03:04:31 GMT</pubDate></item><item><title>Using Shiro: Complete Spring Boot Integration Code</title><link>https://jacksparrow414.pages.dev/en/posts/90551828/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/90551828/</guid><description>The main code for integrating Shiro, Spring Boot, and JWT: the Shiro configuration, a custom Realm, an authentication filter, and a JWT utility. Together, these four pieces show login authentication, request interception, and token creation and validation, with a look back at the session-management choices made during integration.</description><pubDate>Sat, 25 May 2019 13:52:36 GMT</pubDate></item><item><title>Using Shiro: Integrating JWT for More Capable Tokens</title><link>https://jacksparrow414.pages.dev/en/posts/90551285/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/90551285/</guid><description>JWT is integrated with Shiro and Spring Boot to issue tokens after login and parse, validate, and check them for expiry on subsequent requests. This article explains the JWT utility, authentication filter, and configuration properties, and traces a dependency-injection failure caused by constructing the filter manually.</description><pubDate>Sat, 25 May 2019 13:31:42 GMT</pubDate></item><item><title>Using Shiro with Tokens</title><link>https://jacksparrow414.pages.dev/en/posts/90145603/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/90145603/</guid><description>A custom Shiro filter validates tokens on incoming requests. The article covers returning a token after login, adding the filter to the authentication chain, and tracing filter execution order in the source code, then discusses token expiry and distributed authentication that the example has not yet implemented.</description><pubDate>Sun, 12 May 2019 14:18:22 GMT</pubDate></item><item><title>Using Shiro: A Primer on Tokens and Why to Use Them</title><link>https://jacksparrow414.pages.dev/en/posts/89820043/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/89820043/</guid><description>Starting from login validation in traditional web applications, this article discusses the differences between sessions and tokens in storage, sharing across distributed systems, and request authentication. It compares validation approaches using a database, Redis, or no token storage to clarify design considerations for implementing token authentication with Shiro.</description><pubDate>Sat, 04 May 2019 17:02:39 GMT</pubDate></item><item><title>Using Shiro: Password Hashing and Salting, with Authentication Troubleshooting</title><link>https://jacksparrow414.pages.dev/en/posts/89416294/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/89416294/</guid><description>This article walks through password hashing, salted storage, and login verification in Shiro and uses its source code to explain credential comparison. It also covers troubleshooting passwords still stored as plaintext and authentication failures after salting, including the roles of the algorithm, salt, and hash iteration count.</description><pubDate>Sat, 20 Apr 2019 07:08:57 GMT</pubDate></item><item><title>Using Shiro: Basic Session Management</title><link>https://jacksparrow414.pages.dev/en/posts/88901350/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88901350/</guid><description>This article covers Shiro session management, including session ID generation, cookie storage, SessionDAO, and expired-session cleanup. It also describes periodic validation with Quartz and disabling session ID URL rewriting to avoid exposing IDs after redirects.</description><pubDate>Fri, 29 Mar 2019 12:55:44 GMT</pubDate></item><item><title>Learning Linux (Part 2)</title><link>https://jacksparrow414.pages.dev/en/posts/88893931/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88893931/</guid><description>Two practical Linux command examples: using find with xargs or exec to locate and remove lastUpdated files left by failed Maven downloads, and using less to page through files too large to fit on one screen.</description><pubDate>Fri, 29 Mar 2019 07:24:18 GMT</pubDate></item><item><title>MyBatis Generator: Configuration and Usage Notes</title><link>https://jacksparrow414.pages.dev/en/posts/88892297/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88892297/</guid><description>This article adds practical notes on configuring and running MyBatis Generator, including output directories, database connections, and a custom generic Mapper. It discusses configuration file paths, the resources directory name, and details to check when running generation from IntelliJ IDEA.</description><pubDate>Fri, 29 Mar 2019 07:10:13 GMT</pubDate></item><item><title>Using Shiro Remember Me and Automatic Login: Fixing a deleteMe Cookie</title><link>https://jacksparrow414.pages.dev/en/posts/88818827/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88818827/</guid><description>Introduces Shiro rememberMe configuration and automatic login on a later visit, and records a source-code investigation of cookies containing deleteMe. Making the User object used in authentication implement Serializable resolves the serialization failure that breaks the remember-me feature.</description><pubDate>Tue, 26 Mar 2019 07:42:46 GMT</pubDate></item><item><title>Using Shiro: A Basic Login Flow</title><link>https://jacksparrow414.pages.dev/en/posts/88725508/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88725508/</guid><description>This article introduces a basic login flow with Shiro and Spring MVC, including filter configuration, authentication in a custom Realm, and redirects after successful login. Missing accounts, incorrect passwords, and locked accounts illustrate authentication-code and login-URL configuration considerations.</description><pubDate>Thu, 21 Mar 2019 14:11:54 GMT</pubDate></item><item><title>Installing Homebrew on macOS, with Troubleshooting Tips</title><link>https://jacksparrow414.pages.dev/en/posts/88637285/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88637285/</guid><description>A record of installing Homebrew on macOS, switching mirrors, and troubleshooting installation errors, followed by common questions about brew tap, pinning versions, and disabling updates. The article notes changes to the old installation script and adds mirror installation documentation.</description><pubDate>Mon, 18 Mar 2019 05:51:21 GMT</pubDate></item><item><title>Java Primitive Types and Wrapper Classes</title><link>https://jacksparrow414.pages.dev/en/posts/88061591/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/88061591/</guid><description>Using entity properties and database null handling as examples, this article discusses the differences between Java primitive types and wrapper classes, particularly when double, int, and their wrappers encounter null values.</description><pubDate>Fri, 01 Mar 2019 13:10:43 GMT</pubDate></item><item><title>Uploading Images with Spring MVC</title><link>https://jacksparrow414.pages.dev/en/posts/87860212/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/87860212/</guid><description>A simple Spring MVC image-upload example covering form settings, receiving and saving files, multipart resolver configuration, and dependencies. It also describes using a MultipartFile array for multiple images, with validation left for further development.</description><pubDate>Thu, 21 Feb 2019 06:32:45 GMT</pubDate></item><item><title>Configuring the Home Page of a Web Project</title><link>https://jacksparrow414.pages.dev/en/posts/87807275/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/87807275/</guid><description>Troubleshooting home-page navigation to a JSP under WEB-INF, followed by an update that adjusts the DispatcherServlet mapping and the controller’s root mapping. It also covers issues with component scanning, listeners, and static resource configuration.</description><pubDate>Wed, 20 Feb 2019 09:37:58 GMT</pubDate></item><item><title>Spring in Development (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/86479244/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/86479244/</guid><description>Starting from a save operation that runs without writing data to the database, this post checks how method names match Spring transaction configuration. It explains REQUIRED and SUPPORTS, then covers the remaining propagation settings and their relationship to transaction rollback.</description><pubDate>Mon, 14 Jan 2019 08:51:35 GMT</pubDate></item><item><title>Lessons from Using Spring MVC at Work (Part 2)</title><link>https://jacksparrow414.pages.dev/en/posts/85699861/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85699861/</guid><description>Troubleshooting a 404 when returning a JSP view from another directory in Spring MVC. It compares specifying a view with ModelAndView and making a new request with redirect, and explains why .jsp should be omitted when the view resolver already supplies the suffix.</description><pubDate>Thu, 03 Jan 2019 08:08:33 GMT</pubDate></item><item><title>Learning Linux (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/85639107/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85639107/</guid><description>Introductory Linux notes covering common directories under the root filesystem, directory navigation, archive creation and extraction, command-line shortcuts, file listings and permissions, and checking file sizes.</description><pubDate>Wed, 02 Jan 2019 13:55:58 GMT</pubDate></item><item><title>Java Development Details (Part 3)</title><link>https://jacksparrow414.pages.dev/en/posts/85638141/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85638141/</guid><description>Two basic Java techniques illustrated with development examples: using a string’s length to calculate the starting index for extracting a fixed-length suffix with substring, and using a labeled break to exit an outer loop.</description><pubDate>Wed, 02 Jan 2019 12:39:46 GMT</pubDate></item><item><title>Using Docker (Part 2)</title><link>https://jacksparrow414.pages.dev/en/posts/85330301/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85330301/</guid><description>A basic Docker workflow using a CentOS image: obtaining an image, creating and leaving a container, committing changes, tagging the image, and pushing it to a remote repository. It also covers login issues and commands for removing containers and images.</description><pubDate>Fri, 28 Dec 2018 13:50:05 GMT</pubDate></item><item><title>Using jQuery zTree</title><link>https://jacksparrow414.pages.dev/en/posts/85223279/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85223279/</guid><description>Notes on displaying backend data as a tree with jQuery zTree, including the HTML node, setting options, and zNodes data used for initialization. It also links to the official API and a reference on building tree data from database queries.</description><pubDate>Sun, 23 Dec 2018 07:47:27 GMT</pubDate></item><item><title>A Painful Web Project Deployment on a Mac</title><link>https://jacksparrow414.pages.dev/en/posts/85107472/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85107472/</guid><description>A troubleshooting account of deploying a web project on a Mac with Eclipse, Tomcat 7, and JDK 7. It covers compiler versions, Servlet dependencies, IPv4 settings, and JVM options, with particular attention to repeated deployments and duplicate JAR files.</description><pubDate>Wed, 19 Dec 2018 13:16:47 GMT</pubDate></item><item><title>Installing and Using Docker (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/85066262/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85066262/</guid><description>Notes on installing and initially configuring Docker on a Mac: downloading the client, checking the installation from the terminal, and setting up an Alibaba Cloud registry mirror for use in China. It also covers checking settings after client upgrades and a problem encountered when configuring the mirror URL.</description><pubDate>Tue, 18 Dec 2018 07:29:19 GMT</pubDate></item><item><title>Learning About Asynchronous Ajax Requests in Web Applications (Part 2)</title><link>https://jacksparrow414.pages.dev/en/posts/85050811/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85050811/</guid><description>A troubleshooting account of an Ajax request that returns a successful HTTP status but enters the error callback. It uses response details to identify a JSON parsing problem and checks @ResponseBody, then covers a case where code reads variables before an asynchronous request finishes and gets undefined.</description><pubDate>Mon, 17 Dec 2018 08:35:14 GMT</pubDate></item><item><title>Building a Maven Project with IntelliJ IDEA (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/85037409/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/85037409/</guid><description>Steps for building a simple web project with Maven and IntelliJ IDEA on a Mac, with references for installation and IDE setup. It also explains how configuring a Maven mirror can address slow dependency downloads and lengthy builds.</description><pubDate>Sun, 16 Dec 2018 07:23:55 GMT</pubDate></item><item><title>Understanding Spring MVC through a Request-Mapping Error</title><link>https://jacksparrow414.pages.dev/en/posts/84943056/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84943056/</guid><description>Starting with a controller-to-URL mapping error, this article traces Spring MVC’s request-processing flow. It explains the collaboration between DispatcherServlet, HandlerMapping, HandlerAdapter, and ViewResolver, including how the view and data are returned.</description><pubDate>Mon, 10 Dec 2018 09:39:35 GMT</pubDate></item><item><title>Observations on ArrayList Capacity Growth</title><link>https://jacksparrow414.pages.dev/en/posts/84874741/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84874741/</guid><description>This article records an ArrayList debugging experience involving capacity and apparent null entries. It discusses initial capacity, automatic growth, and the value of specifying capacity when the expected collection size is known.</description><pubDate>Fri, 07 Dec 2018 07:10:52 GMT</pubDate></item><item><title>Java Development Details (Part 2): Configuration Mistakes</title><link>https://jacksparrow414.pages.dev/en/posts/84590375/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84590375/</guid><description>This article records three configuration mistakes: an incomplete quote around a MyBatis XML id, duplicate Spring MVC controller names, and a misspelled resultMap name. Error messages and troubleshooting steps illustrate why careful configuration checks matter.</description><pubDate>Wed, 28 Nov 2018 12:24:39 GMT</pubDate></item><item><title>Dealing with Sluggish Development Tools</title><link>https://jacksparrow414.pages.dev/en/posts/84563141/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84563141/</guid><description>Links to approaches for improving responsiveness in MyEclipse and IntelliJ IDEA.</description><pubDate>Tue, 27 Nov 2018 03:33:44 GMT</pubDate></item><item><title>Troubleshooting “split is not function”</title><link>https://jacksparrow414.pages.dev/en/posts/84543477/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84543477/</guid><description>An attempt to split a frontend value with JavaScript produced a “split is not function” error. Converting the value with toString() resolved it, although the underlying cause had not yet been investigated.</description><pubDate>Mon, 26 Nov 2018 06:57:05 GMT</pubDate></item><item><title>Troubleshooting Duplicate Rows in Database Query Results</title><link>https://jacksparrow414.pages.dev/en/posts/84324286/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84324286/</guid><description>This article investigates duplicate results from multi-table left joins without discarding legitimately identical business records. It describes using Oracle ROWID for deduplication, assigning column aliases, and converting ROWID with ROWIDTOCHAR for Java object mapping.</description><pubDate>Wed, 21 Nov 2018 08:04:55 GMT</pubDate></item><item><title>Understanding Ajax’s async Option</title><link>https://jacksparrow414.pages.dev/en/posts/84247249/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/84247249/</guid><description>This article investigates why an Ajax request returns data while the calling function returns undefined. It explains the order of callback assignment and function return in an asynchronous request, using a MiniUI example to illustrate the async setting.</description><pubDate>Mon, 19 Nov 2018 06:28:40 GMT</pubDate></item><item><title>Substring Searches over Large Datasets</title><link>https://jacksparrow414.pages.dev/en/posts/83543369/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/83543369/</guid><description>A suggestion to use MySQL’s LOCATE function.</description><pubDate>Tue, 30 Oct 2018 07:54:34 GMT</pubDate></item><item><title>Handling Blank Rows When Importing Excel with Apache POI</title><link>https://jacksparrow414.pages.dev/en/posts/83380928/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/83380928/</guid><description>This article explains how deleting an entire Excel row differs from clearing its contents when importing with Apache POI. It describes checking rows, cells, and cell types to exclude empty rows and prevent empty data from being written to the database.</description><pubDate>Thu, 25 Oct 2018 08:16:22 GMT</pubDate></item><item><title>Oracle Window Functions</title><link>https://jacksparrow414.pages.dev/en/posts/82898682/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/82898682/</guid><description>A detailed introduction to Oracle window functions.</description><pubDate>Sat, 29 Sep 2018 07:53:44 GMT</pubDate></item><item><title>Problems Caused by Deleting Oracle Tablespace Files Directly</title><link>https://jacksparrow414.pages.dev/en/posts/82684680/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/82684680/</guid><description>This article recounts troubleshooting ORA-01109 and ORA-12514 after deleting Oracle tablespace files directly. It records database startup, SYSDBA login, and listener configuration issues, and concludes that tablespaces should be removed through the normal deletion procedure.</description><pubDate>Thu, 13 Sep 2018 03:11:33 GMT</pubDate></item><item><title>Useful Blog Posts about Network Frames</title><link>https://jacksparrow414.pages.dev/en/posts/82143154/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/82143154/</guid><description>These should be available in my bookmarks.</description><pubDate>Tue, 28 Aug 2018 02:06:00 GMT</pubDate></item><item><title>Getting Started with Redis (Part 1): Basic Setup on Windows</title><link>https://jacksparrow414.pages.dev/en/posts/81975535/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81975535/</guid><description>This article records basic Redis operations on Windows: connecting with redis-cli, setting requirepass and authenticating with AUTH, writing data with SET, and setting key expiration in seconds or milliseconds.</description><pubDate>Thu, 23 Aug 2018 02:13:06 GMT</pubDate></item><item><title>Web Development Notes (Part 1): IP Addresses, Ports, and JVM Memory</title><link>https://jacksparrow414.pages.dev/en/posts/81870109/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81870109/</guid><description>This article collects environment troubleshooting steps for web development: finding a Windows machine’s IP address and occupied ports, accessing a local project by IP, and adjusting Tomcat-related JVM memory settings in MyEclipse and IntelliJ IDEA.</description><pubDate>Mon, 20 Aug 2018 06:14:40 GMT</pubDate></item><item><title>Java Development Details (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/81778435/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81778435/</guid><description>This article collects Java fundamentals that are easy to overlook: two-dimensional arrays, string concatenation and character arrays, integer parsing and numeric ranges, digit conversion, and split parameters. Examples highlight type and boundary issues encountered in practice.</description><pubDate>Fri, 17 Aug 2018 07:33:53 GMT</pubDate></item><item><title>Small Details to Remember in Everyday Development</title><link>https://jacksparrow414.pages.dev/en/posts/81667443/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81667443/</guid><description>A few development reminders: log caught exceptions with a logger; consider entrySet when iterating over a map; and, when using indexof, prefer single-quoted characters over double-quoted strings.</description><pubDate>Tue, 14 Aug 2018 07:11:55 GMT</pubDate></item><item><title>Everyday Development Pitfalls</title><link>https://jacksparrow414.pages.dev/en/posts/81633571/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81633571/</guid><description>This article collects easily overlooked development details: avoiding null-pointer errors in string comparisons, declaring generic collections, concatenating Oracle strings, and using IS NULL or IS NOT NULL in SQL.</description><pubDate>Mon, 13 Aug 2018 09:20:58 GMT</pubDate></item><item><title>Oracle IN and EXISTS: Query Notes</title><link>https://jacksparrow414.pages.dev/en/posts/81536519/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81536519/</guid><description>This article compares IN and EXISTS through practical Oracle query issues, emphasizing the need to correlate an EXISTS subquery with the outer table. It also records considerations involving NULL, NOT IN, and execution plans.</description><pubDate>Thu, 09 Aug 2018 07:11:07 GMT</pubDate></item><item><title>JavaScript Error Notes (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/81354642/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81354642/</guid><description>This article collects several JavaScript issues: converting numbers to strings before calling split, formatting numbers with thousands separators using replace and a regular expression, and setting focus on an input with jQuery.</description><pubDate>Thu, 02 Aug 2018 02:55:02 GMT</pubDate></item><item><title>Notes on Java’s static Keyword</title><link>https://jacksparrow414.pages.dev/en/posts/81316742/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81316742/</guid><description>Using static methods for querying approval documents as an example, this article records observations about static members, direct method calls, and loading order. It also discusses questions about invocation frequency and memory use in business queries.</description><pubDate>Tue, 31 Jul 2018 09:19:09 GMT</pubDate></item><item><title>Oracle Query Notes (Part 2): INSTR, LPAD, and RPAD</title><link>https://jacksparrow414.pages.dev/en/posts/81302214/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81302214/</guid><description>This article introduces Oracle’s INSTR function through examples of its parameters, return values, and use in WHERE conditions. It then explains the padding directions of LPAD and RPAD, using a sequence value padded with zeros as an example.</description><pubDate>Tue, 31 Jul 2018 06:25:06 GMT</pubDate></item><item><title>Thoughts on Improving Database Query Performance</title><link>https://jacksparrow414.pages.dev/en/posts/81220067/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81220067/</guid><description>This article considers slow queries on large tables from three angles: SQL quality, table and index design, and table partitioning. These are preliminary ideas; the partitioning approach has not yet been put into practice.</description><pubDate>Thu, 26 Jul 2018 07:11:17 GMT</pubDate></item><item><title>Interesting Thoughts on Frontend and Backend Engineering</title><link>https://jacksparrow414.pages.dev/en/posts/81196315/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81196315/</guid><description>This article collects other bloggers’ views on frontend and backend engineering skills. It outlines learning areas for each role, from Java, databases, and distributed systems to browsers and build tools, along with their respective performance and user-experience goals.</description><pubDate>Wed, 25 Jul 2018 01:36:24 GMT</pubDate></item><item><title>Troubleshooting Oracle Connection Errors</title><link>https://jacksparrow414.pages.dev/en/posts/81003637/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/81003637/</guid><description>This article records a PL/SQL connection failure involving TNS errors. It covers checking connectivity with tnsping, adjusting HOST settings, restarting the listener, testing login with SQL*Plus, and configuring the Oracle home used by PL/SQL.</description><pubDate>Wed, 11 Jul 2018 09:16:50 GMT</pubDate></item><item><title>Static and Dynamic Includes in JSP</title><link>https://jacksparrow414.pages.dev/en/posts/80983452/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/80983452/</guid><description>This article compares static and dynamic JSP includes by considering whether the pages share a single servlet. Examples involving page encoding, duplicate variables, and generated class files illustrate the practical differences.</description><pubDate>Tue, 10 Jul 2018 03:52:39 GMT</pubDate></item><item><title>Getting Started with Ajax in Web Applications (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/80007979/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/80007979/</guid><description>Using search suggestions as an example, this article explains how Ajax communicates with a server without reloading the page. It introduces common jQuery request options and traces XMLHttpRequest creation, request sending, and response-state handling.</description><pubDate>Tue, 10 Jul 2018 02:31:07 GMT</pubDate></item><item><title>Java String Comparisons: equals and ==</title><link>https://jacksparrow414.pages.dev/en/posts/80976034/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/80976034/</guid><description>This article recounts a failed condition caused by using == to compare a value received from JSP with a server-side string. It uses the incident to explain the difference between comparing string contents and comparing object references in Java.</description><pubDate>Mon, 09 Jul 2018 11:38:19 GMT</pubDate></item><item><title>Java Character Encoding and Decoding (Part 2): URL Encoding</title><link>https://jacksparrow414.pages.dev/en/posts/79930769/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/79930769/</guid><description>This article traces URL encoding and decoding in Java through URLEncoder, URLDecoder, and Charset lookup. It explains hexadecimal byte representation in percent-encoded URLs and briefly introduces chunked transfer through examples of request and response headers.</description><pubDate>Fri, 13 Apr 2018 08:48:53 GMT</pubDate></item><item><title>Java Character Encoding and Decoding (Part 1)</title><link>https://jacksparrow414.pages.dev/en/posts/79930196/</link><guid isPermaLink="true">https://jacksparrow414.pages.dev/en/posts/79930196/</guid><description>Using String.getBytes as an example, this article traces how Java looks up a character set, creates an encoder, and converts a string to a byte array. It also outlines the similar process used to decode bytes into characters.</description><pubDate>Fri, 13 Apr 2018 08:20:30 GMT</pubDate></item></channel></rss>