All posts
Terraform Associate 004 #7 Writing Configuration: Variable Precedence, Functions, and Custom Conditions
We compress the exam view of variable types and the precedence of value sources, the actual reach of sensitive, and the roles of output and locals, then organize the built-in functions and expressions that appear most often. We also reinforce what the track covered lightly: the custom conditions strengthened in 004 — variable validation, resource precondition and postcondition, and check blocks — including how they differ and when each is evaluated.
Terraform Associate 004 #6 Modules: Source Addresses, Version Pinning, and Input/Output Syntax
Starting from the definition of a module and the distinction between root and child modules, we organize the syntax of the registry, Git, and local-path source types and the conditions under which the version argument works, all from the exam angle. We pin down inputs that pass values into a module and outputs read as module.<name>.<output>, the encapsulation principle that rules out direct access to resources inside a module, and the verified badge on the public registry.
Terraform Associate 004 #5 State Management: Backends, Locking, State Commands, and Sensitive Data
Starting from the purpose of state and its default file location, we organize the difference between local and remote backends, the incidents locking prevents, and where force-unlock fits, all from the exam angle. We pin down what the state list, show, mv, and rm commands each change and each leave alone, how they map to the moved, removed, and import blocks, and cover sensitive data in state and access control as exam points.
Terraform Associate 004 #4 Core Workflow: init, plan, apply, destroy, and Debugging
We cover the three stages of the official exam workflow — Write, Plan, Apply — what each command does, and the four situations that require running init again. Then the option-based question points: saving a plan with -out, apply with -auto-approve and -replace, the dangers of -target, the role split between fmt and validate, and enabling debug logs with the TF_LOG environment variable.
Terraform Associate 004 #3 Terraform Fundamentals: Version Constraints, the Lock File, and Provider Configuration
Starting from installation and checking with terraform version, we work through the version constraint operators the exam loves (=, ~>, >=) and how to read them, then separate the roles of the required_providers block and the .terraform.lock.hcl lock file. We cover provider configuration and multi-region setups with alias, and what actually goes into the .terraform directory — the question points of exam objective 3.
PySide6 in Practice #8 Release Polish: Icons, Versioning, Signing, GitHub Actions
The series finale: finishing the app into something you can hand to others. Managing icons, names, and resources with a PyInstaller spec file, defining the version in one place and feeding it to the app and the build, why unsigned apps get blocked on download and the lay of macOS notarization and Windows signing, a GitHub Actions matrix that builds for three operating systems, and a retrospective of the whole series.
Terraform Associate 004 #2 IaC Concepts and Terraform's Purpose: Mastering Definition Questions
We organize the definition and benefits of IaC in the language the exam expects, and firm up the declarative-versus-imperative distinction and the concept of idempotency from a question-solving perspective. We also cover Terraform's position in the multi-cloud and provider ecosystem, why state exists, and the structure of Terraform's language and binary — a pass through the testing points of exam objectives 1 and 2.
PySide6 in Practice #7 Testing: pytest-qt and a Per-Layer Strategy
Dismantling the belief that GUI apps are hard to test, using the layer structure: why Qt-free core tests should be the most numerous, verifying the repository against a temp-file database, how pytest-qt's qtbot manages QApplication and the event loop for you, testing a model's contract (rowCount, data, setData), waiting on signals with waitSignal and widget interaction tests, and running Qt tests headless in CI.
Terraform Associate 004 #1 Exam Introduction: The 004 Revision, Domain Structure, and Study Strategy
An overview of the HashiCorp Terraform Associate certification as of the January 2026 004 revision: the exam format and what changed from 003. We cover the newly tested areas — ephemeral values and write-only arguments — along with the expanded HCP Terraform coverage and the domain breakdown, then build a mapping table between the exam objectives and the 26 parts of this blog's Terraform track to lay out a study path.
GitHub Actions #10 Operations Patterns: Path Filters, Concurrency, Debugging, and Cost Review
Waking only the workflows for changed paths in a monorepo with paths filters — and where they fall short; how to decide on concurrency groups and cancel-in-progress to clean up overlapping runs; and why timeout-minutes should be a default habit. We also cover debugging tools like debug logs and re-runs, plus cost review on the usage screen, gathering the patterns of day-to-day operations to close out the series.
PySide6 in Practice #6 The Settings Screen: QSettings, Dark Theme, Data Backup
Handing the hardcoded decisions to the user: how QSettings stores values in each platform's standard location and its type traps, wiring the settings screen to live behavior (reminder hour, close-button action), dark and light themes via stylesheet swapping with system-theme detection, and the final piece of respecting user data — CSV export and database backup.
GitHub Actions #9 Security Hardening: Minimal permissions, SHA Pinning, and pull_request_target
Starting from shrinking the GITHUB_TOKEN default permissions to read-only and opening write access only on the jobs that need it, we cover the supply chain risk of third-party actions whose tags are mutable, SHA pinning, and pairing it with Dependabot auto-updates. We also map out the pull_request_target trap — a classic route for secret exposure — and defending against the script injection that interpolated titles and branch names create.