<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Settlers Journal</title><description>A journal about the development process of a Settlers of Catan web application.</description><link>https://alexandershank.com/</link><item><title>City Placement Validation, Double Resource Collection, and Robber Blocking</title><link>https://alexandershank.com/posts/city-placement-validation-double-resources-robber-blocking/</link><guid isPermaLink="true">https://alexandershank.com/posts/city-placement-validation-double-resources-robber-blocking/</guid><description>Implementing getAvailableCityIndices in CatanGraphService, adding an isCity field to the Settlement model to double resource collection for cities, and updating resource gathering to skip hexagons blocked by the Robber.</description><pubDate>Thu, 16 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Implementing Available Settlement Placement Validation in the Graph</title><link>https://alexandershank.com/posts/implementing-available-settlement-placement-validation/</link><guid isPermaLink="true">https://alexandershank.com/posts/implementing-available-settlement-placement-validation/</guid><description>Writing getAvailableSettlementIndices in CatanGraph with brute-force validation across all board positions, and reflecting on how sparse graph design and mixed key types made the implementation more complex than necessary.</description><pubDate>Tue, 14 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Combining Bank and Graph Checks for Legal Purchase Transitions</title><link>https://alexandershank.com/posts/combining-bank-graph-checks-legal-purchase-transitions/</link><guid isPermaLink="true">https://alexandershank.com/posts/combining-bank-graph-checks-legal-purchase-transitions/</guid><description>Updating the spend-resources NOOP transition to validate that purchasable items can also be legally placed on the board, and implementing road placement availability checks in CatanGraphService.</description><pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Checking Purchase Eligibility with CatanBankService Before Turn Transitions</title><link>https://alexandershank.com/posts/checking-purchase-eligibility-catan-bank-service/</link><guid isPermaLink="true">https://alexandershank.com/posts/checking-purchase-eligibility-catan-bank-service/</guid><description>Adding a NOOP transition that checks whether any purchases are possible before rolling, introducing CatanBankService for resource-cost comparisons, and fixing an immutable list bug in the player&apos;s available actions setter.</description><pubDate>Sun, 12 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Implementing Resource Collection from Dice Rolls for All Players</title><link>https://alexandershank.com/posts/implementing-resource-collection-from-dice-rolls/</link><guid isPermaLink="true">https://alexandershank.com/posts/implementing-resource-collection-from-dice-rolls/</guid><description>Updating RollAction to query CatanGraphService for settlements adjacent to the rolled hexagons and distributing the correct resources to each player&apos;s ResourceBundle after every dice roll.</description><pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Introducing Integration Tests and Improving Action and Transition Coverage</title><link>https://alexandershank.com/posts/introducing-integration-tests-improving-coverage/</link><guid isPermaLink="true">https://alexandershank.com/posts/introducing-integration-tests-improving-coverage/</guid><description>Scaffolding a Java integration test structure that makes real HTTP requests against the controller, adding the first Transition tests, and using try-with-resources for clean MockedStatic teardown between tests.</description><pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Expanding Test Coverage to Multiple Actions and the Spring Controller</title><link>https://alexandershank.com/posts/expanding-test-coverage-actions-spring-controller/</link><guid isPermaLink="true">https://alexandershank.com/posts/expanding-test-coverage-actions-spring-controller/</guid><description>Using ChatGPT to scaffold unit tests for multiple Action classes and the CatanController, and investigating unexpected Spring request body serialization behavior with @RequestBody and custom DTOs.</description><pubDate>Fri, 04 Oct 2024 00:00:00 GMT</pubDate></item><item><title>Writing Unit Tests for PlaceSettlementAction</title><link>https://alexandershank.com/posts/writing-unit-tests-for-place-settlement-action/</link><guid isPermaLink="true">https://alexandershank.com/posts/writing-unit-tests-for-place-settlement-action/</guid><description>Writing unit tests for PlaceSettlementAction by thinking through meaningful test cases, setting up game state fixtures, and using ChatGPT to scaffold new test files based on existing IAction test patterns.</description><pubDate>Thu, 03 Oct 2024 00:00:00 GMT</pubDate></item><item><title>Implementing the New FSM Transition Design with Regression Testing</title><link>https://alexandershank.com/posts/implementing-new-fsm-transition-design-regression-testing/</link><guid isPermaLink="true">https://alexandershank.com/posts/implementing-new-fsm-transition-design-regression-testing/</guid><description>Translating existing States, Glides, and Transitions into the simplified Transition-first FSM design, introducing ActionEnum.NOOP for free transitions, and manually regression testing the results through CLI automation scripts.</description><pubDate>Wed, 02 Oct 2024 00:00:00 GMT</pubDate></item><item><title>Simplifying the FSM by Removing Glides and Adopting ActionEnum.NOOP</title><link>https://alexandershank.com/posts/simplifying-fsm-removing-glides-adopting-noop/</link><guid isPermaLink="true">https://alexandershank.com/posts/simplifying-fsm-removing-glides-adopting-noop/</guid><description>Redesigning the Finite State Machine to eliminate Glides and StateBase, representing free transitions with ActionEnum.NOOP, and adopting a strategy-pattern ActionEnum that delegates to concrete action implementations.</description><pubDate>Thu, 26 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Printing the FSM Definition at Startup and Discovering a Design Code Smell</title><link>https://alexandershank.com/posts/printing-fsm-definition-at-startup-discovering-code-smell/</link><guid isPermaLink="true">https://alexandershank.com/posts/printing-fsm-definition-at-startup-discovering-code-smell/</guid><description>Adding startup logging to print all FSM transitions for visibility, then uncovering a design smell where Glides duplicate information from parent Actions—motivating a refactor that removes StateBase and replaces Glides with enriched Transitions.</description><pubDate>Thu, 19 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Improving CatanGraph Test Coverage and Catching a HashMap Overwrite Bug</title><link>https://alexandershank.com/posts/improving-catan-graph-test-coverage-catching-hashmap-bug/</link><guid isPermaLink="true">https://alexandershank.com/posts/improving-catan-graph-test-coverage-catching-hashmap-bug/</guid><description>Expanding CatanGraph unit tests to cover all branches, overriding equals and hashCode on ResourceBundle for readable assertions, and discovering a real bug where Road adjacency entries were silently overwritten by Hexagon entries in a HashMap.</description><pubDate>Wed, 18 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Introducing ResourceBundle for Player Resources and Expanding Unit Test Coverage</title><link>https://alexandershank.com/posts/introducing-resource-bundle-expanding-unit-test-coverage/</link><guid isPermaLink="true">https://alexandershank.com/posts/introducing-resource-bundle-expanding-unit-test-coverage/</guid><description>Creating a ResourceBundle class to encapsulate each player&apos;s resource cards, using Jackson&apos;s @JsonUnwrapped for clean JSON serialization, and mocking random roll results in unit tests with Mockito&apos;s MockedStatic.</description><pubDate>Mon, 16 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Refactoring Graph Data Structures and Loading Board Layout from Files</title><link>https://alexandershank.com/posts/refactoring-graph-data-structures-loading-board-from-files/</link><guid isPermaLink="true">https://alexandershank.com/posts/refactoring-graph-data-structures-loading-board-from-files/</guid><description>Updating CatanGraph to use full GraphNode objects as HashMap keys, adding Hexagons into the graph structure for easier adjacency lookups, and reading hardcoded board adjacency data from JSON resource files instead.</description><pubDate>Sat, 14 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Full-Stack Road Placement and Builder Pattern for the FSM</title><link>https://alexandershank.com/posts/full-stack-road-placement-builder-pattern-fsm/</link><guid isPermaLink="true">https://alexandershank.com/posts/full-stack-road-placement-builder-pattern-fsm/</guid><description>Adding road placement to the Angular frontend by reusing and refactoring existing settlement placement code, while reworking the FSM data structures in Java with a step-based Builder pattern for safer initialization.</description><pubDate>Thu, 12 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Implementing Place Road Action and Cleaning Up API Call Logic</title><link>https://alexandershank.com/posts/implementing-place-road-action-api-call-cleanup/</link><guid isPermaLink="true">https://alexandershank.com/posts/implementing-place-road-action-api-call-cleanup/</guid><description>Retroactive entry: implementing the &apos;place road&apos; player action in the backend, refactoring API call logic for reuse across actions, and cleaning up FSM data structures with the builder pattern.</description><pubDate>Wed, 11 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Two-Phase Player Actions and Angular Event Bubbling Through the Component Tree</title><link>https://alexandershank.com/posts/two-phase-player-actions-angular-event-bubbling/</link><guid isPermaLink="true">https://alexandershank.com/posts/two-phase-player-actions-angular-event-bubbling/</guid><description>Implementing two-phase player actions where clicking an action then requires selecting a board piece, and wiring up Angular event emitters from Settlement through SettlementGrid up to the Board component to handle the selection.</description><pubDate>Tue, 10 Sep 2024 00:00:00 GMT</pubDate></item><item><title>API Calls Based on Player Action</title><link>https://alexandershank.com/posts/api-calls-based-on-player-action/</link><guid isPermaLink="true">https://alexandershank.com/posts/api-calls-based-on-player-action/</guid><description>Frontend work. Created `PlayerActionService` for handling orchestrating API calls based on the action a user clicks. Implemented this using `Observable&lt;T&gt;` from RxJS, rather than `Promise&lt;T&gt;`.</description><pubDate>Sat, 29 Jun 2024 00:00:00 GMT</pubDate></item><item><title>Angular Routing, Login Page, and Wiring Up Player Action Clicks</title><link>https://alexandershank.com/posts/angular-routing-login-page-player-action-clicks/</link><guid isPermaLink="true">https://alexandershank.com/posts/angular-routing-login-page-player-action-clicks/</guid><description>Building a login landing page, configuring Angular routes between pages, and scaffolding event emitters so player action clicks propagate up the component hierarchy to trigger REST API calls.</description><pubDate>Mon, 17 Jun 2024 00:00:00 GMT</pubDate></item><item><title>Interactive Board Pieces with Hover States and Probability Coloring</title><link>https://alexandershank.com/posts/interactive-board-pieces-hover-states-probability-coloring/</link><guid isPermaLink="true">https://alexandershank.com/posts/interactive-board-pieces-hover-states-probability-coloring/</guid><description>Adding click and hover event listeners to Settlements, Roads, and Centers, applying a red-to-green gradient on Center pieces to visually represent roll probabilities, and updating player cards to display available actions.</description><pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate></item><item><title>Configuring Java Test Tooling and Reaching 44% Code Coverage</title><link>https://alexandershank.com/posts/configuring-java-test-tooling-reaching-code-coverage/</link><guid isPermaLink="true">https://alexandershank.com/posts/configuring-java-test-tooling-reaching-code-coverage/</guid><description>Adding Maven surefire and Jacoco plugins for test reports and coverage metrics, then writing the first unit tests for IAction and CatanGraph to bring code coverage from 0% to 44%.</description><pubDate>Tue, 11 Jun 2024 00:00:00 GMT</pubDate></item><item><title>Adding the Barter Offer State and Reworking SKIP Action Logic</title><link>https://alexandershank.com/posts/adding-barter-offer-state-reworking-skip-logic/</link><guid isPermaLink="true">https://alexandershank.com/posts/adding-barter-offer-state-reworking-skip-logic/</guid><description>Introducing TURN_BARTER_OFFER with DTOs and a new REST endpoint, updating SKIP to behave as a true no-op instruction in the FSM, and revisiting the project after a month-long break from Java development.</description><pubDate>Mon, 10 Jun 2024 00:00:00 GMT</pubDate></item><item><title>Implementing Turn Roll, Robber, and Barter State Transitions</title><link>https://alexandershank.com/posts/implementing-turn-roll-robber-barter-transitions/</link><guid isPermaLink="true">https://alexandershank.com/posts/implementing-turn-roll-robber-barter-transitions/</guid><description>Adding FSM states and transitions for the full turn-roll flow including paths to TURN_ROBBER and TURN_BARTER, adding victory points and robber position to the game model, and identifying the growing need for unit test coverage.</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate></item><item><title>Tracking Player Resources and Collecting Free Starting Resources from Settlements</title><link>https://alexandershank.com/posts/tracking-player-resources-collecting-free-starting-resources/</link><guid isPermaLink="true">https://alexandershank.com/posts/tracking-player-resources-collecting-free-starting-resources/</guid><description>Extending the Player model with a resource card map and updating PLACE_FREE_SETTLEMENT logic so players automatically collect resources from their second-placed settlement, per Catan rules.</description><pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate></item><item><title>Refactoring Hexagon State into a Unified Model</title><link>https://alexandershank.com/posts/refactoring-hexagon-state-unified-model/</link><guid isPermaLink="true">https://alexandershank.com/posts/refactoring-hexagon-state-unified-model/</guid><description>Consolidating hexagon resource type and roll number into a single Hexagon object on both the Java backend and Angular frontend, and working around a TypeScript typing limitation with HashMap-backed dictionaries.</description><pubDate>Sat, 04 May 2024 00:00:00 GMT</pubDate></item><item><title>Multi-Outcome FSM Transitions and Completing Initial Settlement Placement</title><link>https://alexandershank.com/posts/multi-outcome-fsm-transitions-initial-settlement-placement/</link><guid isPermaLink="true">https://alexandershank.com/posts/multi-outcome-fsm-transitions-initial-settlement-placement/</guid><description>Introducing &apos;Glide&apos; objects to handle FSM actions that can lead to multiple possible next states, then fully implementing the snake-draft PLACE_FREE_SETTLEMENT and PLACE_FREE_ROAD flow so the game can officially begin.</description><pubDate>Thu, 02 May 2024 00:00:00 GMT</pubDate></item><item><title>Roll-for-Order Gameplay and Finite State Machine Cleanup</title><link>https://alexandershank.com/posts/roll-for-order-gameplay-fsm-cleanup/</link><guid isPermaLink="true">https://alexandershank.com/posts/roll-for-order-gameplay-fsm-cleanup/</guid><description>Implementing roll-for-order functionality, updating player and game state models with join order tracking, and refactoring the FSM base from an interface to an abstract class to cleanly support free transitions.</description><pubDate>Sat, 27 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Adding Player Join Order, Colors, and a Game Event Log</title><link>https://alexandershank.com/posts/adding-player-join-order-colors-event-log/</link><guid isPermaLink="true">https://alexandershank.com/posts/adding-player-join-order-colors-event-log/</guid><description>Tracking the order players join the lobby to automatically assign game colors, recording every FSM action and free transition in a running event log on the game model, and adding a minimum-player SKIP shortcut for the lobby.</description><pubDate>Fri, 26 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Building a Python CLI Tool and Automated Game Scenario Runner</title><link>https://alexandershank.com/posts/building-python-cli-automated-game-scenario-runner/</link><guid isPermaLink="true">https://alexandershank.com/posts/building-python-cli-automated-game-scenario-runner/</guid><description>Creating a two-part Python testing setup: a CLI wrapper around the REST API and a script runner that replays sequences of game commands from text files, enabling fast manual regression testing and informal game move notation.</description><pubDate>Thu, 25 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Connecting Angular Frontend to Spring Backend with a Randomized Board</title><link>https://alexandershank.com/posts/connecting-angular-frontend-spring-backend-randomized-board/</link><guid isPermaLink="true">https://alexandershank.com/posts/connecting-angular-frontend-spring-backend-randomized-board/</guid><description>Synchronizing GameState models between the Angular frontend and Java backend to enable live polling, and implementing Catan-rules-compliant random board shuffling using Java&apos;s Collections.shuffle.</description><pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Pseudo-Coding OOP Relationships Between FSM States and Actions</title><link>https://alexandershank.com/posts/pseudo-coding-oop-relationships-fsm-states-actions/</link><guid isPermaLink="true">https://alexandershank.com/posts/pseudo-coding-oop-relationships-fsm-states-actions/</guid><description>Translating the finalized game flow design into concrete Java class relationships—how FSM States and Actions relate to GameService and GameController—while safely deferring auth and persistence until game logic is stable.</description><pubDate>Tue, 09 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Mapping REST API Design to the Catan Finite State Machine</title><link>https://alexandershank.com/posts/mapping-rest-api-design-to-catan-fsm/</link><guid isPermaLink="true">https://alexandershank.com/posts/mapping-rest-api-design-to-catan-fsm/</guid><description>A focused design session working through the full Catan ruleset and sketching how a REST API maps to the proposed FSM—what actions the API should expose and how the state machine handles them in a scalable, maintainable way.</description><pubDate>Tue, 02 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Implementing the Game Service and Discovering the Bruno API Client</title><link>https://alexandershank.com/posts/implementing-game-service-discovering-bruno-api-client/</link><guid isPermaLink="true">https://alexandershank.com/posts/implementing-game-service-discovering-bruno-api-client/</guid><description>Creating the CatanGameService with game state and action enums as the backbone of the eventual FSM, and switching to Bruno as a local-first, open-source alternative to Postman for making REST requests.</description><pubDate>Thu, 28 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Scaffolding the Java Spring Backend and Connecting to Postgres</title><link>https://alexandershank.com/posts/scaffolding-java-spring-backend-connecting-postgres/</link><guid isPermaLink="true">https://alexandershank.com/posts/scaffolding-java-spring-backend-connecting-postgres/</guid><description>Setting up a Java Spring project with JDBC, Flyway migrations, and Spring Web, then installing Postgres locally and running the first end-to-end REST test via curl and the IntelliJ debugger.</description><pubDate>Wed, 27 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Designing Game State Persistence and a Custom Finite State Machine</title><link>https://alexandershank.com/posts/designing-game-state-persistence-custom-fsm/</link><guid isPermaLink="true">https://alexandershank.com/posts/designing-game-state-persistence-custom-fsm/</guid><description>Architecture session diagramming how Catan game state could be stored in a relational database and how player actions can be validated and broadcast. Evaluated Spring State Machine and chose a simpler custom FSM approach for MVP.</description><pubDate>Tue, 26 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Adding Roads, Player Cards, and Resource-Based Coloring to the Board</title><link>https://alexandershank.com/posts/adding-roads-player-cards-resource-coloring/</link><guid isPermaLink="true">https://alexandershank.com/posts/adding-roads-player-cards-resource-coloring/</guid><description>Implementing Road pieces as the third positional grid on the Catan board, conditionally styling hexagons and player cards by resource type and player color, and refactoring all piece types into proper Angular components with shared game state.</description><pubDate>Mon, 25 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Board Geometry for Center Pieces and Neovim Productivity</title><link>https://alexandershank.com/posts/board-geometry-center-pieces-neovim-productivity/</link><guid isPermaLink="true">https://alexandershank.com/posts/board-geometry-center-pieces-neovim-productivity/</guid><description>Organizing CSS and TypeScript constants for board layout geometry, reworking hexagon formulas to correctly position Center pieces, and continuing Neovim IDE configuration while balancing it against actual feature work.</description><pubDate>Sat, 23 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Configuring Neovim and Scaffolding the Angular Frontend</title><link>https://alexandershank.com/posts/configuring-neovim-scaffolding-angular-frontend/</link><guid isPermaLink="true">https://alexandershank.com/posts/configuring-neovim-scaffolding-angular-frontend/</guid><description>Setting up a Neovim IDE from scratch with TypeScript and Angular LSP support, then scaffolding the Angular project with the hexagon CSS from earlier prototyping. Working through the geometry math for positioning Settlement pieces on the board.</description><pubDate>Thu, 21 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Prototyping a Catan Hexagon Grid with HTML and CSS</title><link>https://alexandershank.com/posts/prototyping-catan-hexagon-grid-html-css/</link><guid isPermaLink="true">https://alexandershank.com/posts/prototyping-catan-hexagon-grid-html-css/</guid><description>Exploring CSS clip-path and linear-gradient techniques to render a hexagon grid using JSFiddle for rapid prototyping. Initial review of the Catan board layout and the challenges of responsive absolute positioning.</description><pubDate>Tue, 19 Mar 2024 00:00:00 GMT</pubDate></item></channel></rss>