<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>lust.dev</title><link>https://lust.dev/</link><description>Recent content on lust.dev</description><generator>Hugo</generator><language>en-us</language><copyright>Joe Lust</copyright><lastBuildDate>Wed, 28 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lust.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code Custom Spinner Verbs</title><link>https://lust.dev/2026/01/28/claude-code-custom-spinner-verbs/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://lust.dev/2026/01/28/claude-code-custom-spinner-verbs/</guid><description>Claude Code now lets you customize the spinner verbs shown while the agent works. Here&amp;rsquo;s how to configure them.</description></item><item><title>Building a Google Cloud Event Bridge for Okta Syslogs</title><link>https://lust.dev/2025/12/03/okta-syslog-gcp-event-bridge/</link><pubDate>Wed, 03 Dec 2025 00:00:00 +0000</pubDate><guid>https://lust.dev/2025/12/03/okta-syslog-gcp-event-bridge/</guid><description>Okta natively integrates with AWS EventBridge, but what about Google Cloud users? Here&amp;rsquo;s how to bridge that gap and unlock real-time alerting, org-wide Okta dashboards, and BigQuery Okta event archives.</description></item><item><title>Quick Upgrade Trick for App Engine Java 17</title><link>https://lust.dev/2024/10/01/quick-upgrade-app-engine-java-17/</link><pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate><guid>https://lust.dev/2024/10/01/quick-upgrade-app-engine-java-17/</guid><description>Quickly modernize your App Engine Java 8 codebase to run on Java 17!</description></item><item><title>Upgrading to Google Cloud Functions 2nd Gen</title><link>https://lust.dev/2022/08/04/upgrading-cloud-functions-gen2/</link><pubDate>Thu, 04 Aug 2022 00:00:00 +0000</pubDate><guid>https://lust.dev/2022/08/04/upgrading-cloud-functions-gen2/</guid><description>Take the leap, upgrade to 2nd Gen Google Cloud Functions!</description></item><item><title>gcloud SDK 260.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-260-0-0-release-analysis/</link><pubDate>Tue, 27 Aug 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-260-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK version 260.0.0 introduces breaking changes requiring the &lt;code&gt;--region&lt;/code&gt; flag for Cloud Dataproc and altering Cloud Run authentication. Significant new features include Shielded GKE Nodes for enhanced security, expanded BigQuery IAM policy management, and a new Policy Troubleshooter for IAM permissions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 259.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-259-0-0-release-analysis/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-259-0-0-release-analysis/</guid><description>&lt;p&gt;Version 259.0.0 of the Cloud SDK focuses on expanding authentication capabilities with service account impersonation and Compute Engine service account support for identity tokens. It also introduces Cloud KMS integration for Pub/Sub topic encryption, adds the ability to specify storage locations for Compute Engine image imports, and promotes GKE Hub commands to beta, alongside updating &lt;code&gt;gsutil&lt;/code&gt; for Python 3.x compatibility.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 258.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-258-0-0-release-analysis/</link><pubDate>Tue, 13 Aug 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-258-0-0-release-analysis/</guid><description>&lt;p&gt;Version 258.0.0 introduces a breaking change by renaming a Compute Engine VM flag. It enhances security by disallowing unauthenticated callers by default for new Cloud Functions in beta, and adds new lifecycle management features for Cloud Dataproc clusters and Shielded VM options for Kubernetes Engine nodes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 257.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-257-0-0-release-analysis/</link><pubDate>Tue, 06 Aug 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-257-0-0-release-analysis/</guid><description>&lt;p&gt;Cloud SDK 257.0.0 removes support for &lt;code&gt;multistore&lt;/code&gt; format credentials, requiring a specific upgrade process for older installations. It also updates the Cloud Firestore emulator to &lt;code&gt;v1.7.0&lt;/code&gt; with WebChannel support and adds a &lt;code&gt;--disable-database-encryption&lt;/code&gt; flag to &lt;code&gt;gcloud beta container clusters update&lt;/code&gt; for Kubernetes Engine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 256.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-256-0-0-release-analysis/</link><pubDate>Tue, 30 Jul 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-256-0-0-release-analysis/</guid><description>&lt;p&gt;This SDK update includes a breaking change that reverts Kubernetes Engine cluster creation to Routes mode by default, now requiring the &lt;code&gt;--enable-ip-alias&lt;/code&gt; flag for VPC-Native mode. Key new features enhance Cloud Bigtable with complex GC policies, Cloud Dataflow with KMS key support, and Cloud Pub/Sub with authenticated push subscriptions. Additionally, the &lt;code&gt;gcloud iap&lt;/code&gt; command group is now in beta, and a new &lt;code&gt;gcloud active-directory&lt;/code&gt; command group has been introduced.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 255.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-255-0-0-release-analysis/</link><pubDate>Tue, 23 Jul 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-255-0-0-release-analysis/</guid><description>&lt;p&gt;Version 255.0.0 introduces a breaking change requiring the &lt;code&gt;--platform&lt;/code&gt; flag for &lt;code&gt;gcloud beta run&lt;/code&gt; commands. Key new features include the &lt;code&gt;gcloud compute diagnose&lt;/code&gt; command group and a new &lt;code&gt;access-policy&lt;/code&gt; content type for Cloud Asset Inventory. This release also promotes &lt;code&gt;gcloud container binauthz&lt;/code&gt; to GA and resolves bugs in Compute Engine network-endpoint-groups and Firebase Test Lab.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 254.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-254-0-0-release-analysis/</link><pubDate>Tue, 16 Jul 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-254-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 254.0.0 introduces significant advancements across several services. AI Platform and Compute Engine saw major flags and resource policies promoted to General Availability, enhancing training job configuration and disk management. Cloud Pub/Sub gained beta support for controlling message storage regions, alongside important bug fixes for Firestore Emulator, Cloud Run, and Cloud Storage to improve stability and user experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 253.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-253-0-0-release-analysis/</link><pubDate>Tue, 02 Jul 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-253-0-0-release-analysis/</guid><description>&lt;p&gt;SDK 253.0.0 introduces several GA promotions, notably for Compute Engine&amp;rsquo;s IAP tunnel, guest attributes, and HTTP/2 health checks, alongside new SSH key expiration flags. It also adds new BigQuery capabilities like scheduled queries and persistent UDFs. Key updates include a &lt;code&gt;kubectl&lt;/code&gt; security fix for CVE-2019-11246 and breaking changes involving flag removals in Cloud Run and a command deprecation in Compute Engine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 252.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-252-0-0-release-analysis/</link><pubDate>Tue, 25 Jun 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-252-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 252.0.0 introduces significant enhancements across several services, including new Cloud Data Catalog commands for managing tags and searching resources. Key flags for Cloud Functions and Compute Engine, such as &lt;code&gt;--max-instances&lt;/code&gt; and &lt;code&gt;--source-snapshot&lt;/code&gt;, have been promoted to General Availability. Additionally, several IAM policy management commands and Workload Identity flags for Kubernetes Engine have advanced to beta, alongside a breaking change removing &lt;code&gt;--network-interface&lt;/code&gt; from &lt;code&gt;gcloud beta compute start-iap-tunnel&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 251.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-251-0-0-release-analysis/</link><pubDate>Tue, 18 Jun 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-251-0-0-release-analysis/</guid><description>&lt;p&gt;This Google Cloud SDK release introduces significant breaking changes for Compute Engine and Kubernetes Engine, requiring explicit region/global flags for certain Compute Engine resources and defaulting new GKE clusters to VPC-native mode. Key new features include enhanced Kubernetes integration for Cloud Run with a new &lt;code&gt;--platform&lt;/code&gt; flag, Kerberos configuration options for Cloud Dataproc, and the promotion of GKE resource usage export to GA. Several bug fixes, such as for Cloud KMS and Firestore Emulator, along with API improvements like &lt;code&gt;PassAllFilter&lt;/code&gt; exposure in Bigtable, were also included.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 250.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-250-0-0-release-analysis/</link><pubDate>Tue, 11 Jun 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-250-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 250.0.0 features a breaking change in &lt;code&gt;gcloud compute networks update&lt;/code&gt;, which now polls for operation completion, requiring &lt;code&gt;--async&lt;/code&gt; for immediate return. New functionalities include data import/export for Cloud Memorystore Redis, Cloud KMS integration for Pub/Sub topics, and a &lt;code&gt;core/disable_file_logging&lt;/code&gt; property. This release also promotes various commands and flags in Compute Engine, Cloud Key Management Service, and Stackdriver Kubernetes Engine Monitoring to GA or beta, enhancing feature stability and availability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 249.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-249-0-0-release-analysis/</link><pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-249-0-0-release-analysis/</guid><description>&lt;p&gt;This release introduces a new &lt;code&gt;gcloud auth print-identity-token&lt;/code&gt; command for easier identity token retrieval and adds a &lt;code&gt;survey/disable_prompts&lt;/code&gt; property to opt out of surveys. Additionally, &lt;code&gt;gcloud compute&lt;/code&gt; &lt;code&gt;import&lt;/code&gt; and &lt;code&gt;export&lt;/code&gt; commands for &lt;code&gt;backend-services&lt;/code&gt;, &lt;code&gt;url-maps&lt;/code&gt;, and &lt;code&gt;forwarding-rules&lt;/code&gt; have been promoted to beta, indicating increased stability for these functionalities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 248.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-248-0-0-release-analysis/</link><pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-248-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 248.0.0 introduces several new flags and commands across various services, including &lt;code&gt;--ignore-file&lt;/code&gt; for Cloud Build, &lt;code&gt;--custom-vm-gen&lt;/code&gt; for Compute Engine, and a new &lt;code&gt;gcloud projects get-ancestors&lt;/code&gt; command. A notable breaking change is the removal of potentially harmful &lt;code&gt;initdb&lt;/code&gt;, &lt;code&gt;resetdb&lt;/code&gt;, and &lt;code&gt;upgradedb&lt;/code&gt; subcommands for Cloud Composer, while &lt;code&gt;gcloud scheduler&lt;/code&gt; commands were promoted to General Availability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 247.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-247-0-0-release-analysis/</link><pubDate>Tue, 21 May 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-247-0-0-release-analysis/</guid><description>&lt;p&gt;This release focuses on usability improvements and command enhancements across several services. Key additions include a new &lt;code&gt;--ignore-file&lt;/code&gt; flag for &lt;code&gt;gcloud app deploy&lt;/code&gt;, &lt;code&gt;gcloud builds submit&lt;/code&gt;, and &lt;code&gt;gcloud functions deploy&lt;/code&gt;, along with new update commands for Cloud Scheduler and HTTP task creation in Cloud Tasks. A notable breaking change is the removal of cluster deletion flags in Cloud Dataproc workflow templates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 246.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-246-0-0-release-analysis/</link><pubDate>Tue, 14 May 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-246-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 246.0.0 introduces a breaking change by removing &lt;code&gt;bps-&lt;/code&gt; prefixed bandwidth flag values for &lt;code&gt;gcloud compute interconnects attachments&lt;/code&gt; commands. Significant new features include the &lt;code&gt;--billing-project&lt;/code&gt; flag across all &lt;code&gt;gcloud&lt;/code&gt; commands, &lt;code&gt;--allow-unauthenticated&lt;/code&gt; for Cloud Functions deployment, and &lt;code&gt;--accelerator&lt;/code&gt; for Compute Engine instances with containers. Additionally, the &lt;code&gt;gcloud tasks&lt;/code&gt; command group and the &lt;code&gt;--expiration-period&lt;/code&gt; flag for Pub/Sub subscriptions have been promoted to General Availability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 245.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-245-0-0-release-analysis/</link><pubDate>Tue, 07 May 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-245-0-0-release-analysis/</guid><description>&lt;p&gt;Version 245.0.0 introduces two breaking changes by removing deprecated Kubernetes Engine flags and properties, making &lt;code&gt;new_scopes_behavior&lt;/code&gt; the default. Key new features include the &lt;code&gt;gcloud alpha survey&lt;/code&gt; command, new export options for Cloud Asset Inventory, beta support for Cloud SQL flags in Cloud Run, and new &lt;code&gt;pause&lt;/code&gt;/&lt;code&gt;resume&lt;/code&gt; commands for Cloud Scheduler jobs. Additionally, the App Engine Java SDK was updated to version 1.9.74, and the Compute Engine &lt;code&gt;--instance-redistribution-type&lt;/code&gt; flag was promoted to beta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 244.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-244-0-0-release-analysis/</link><pubDate>Tue, 30 Apr 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-244-0-0-release-analysis/</guid><description>&lt;p&gt;Version 244.0.0 introduces new features across Cloud Scheduler, Kubernetes Engine, and Vision API. Key updates include enhanced authentication controls for Cloud Scheduler HTTP jobs, a new flag for Kubernetes Engine nodepool metadata server visibility, and new object and text detection functionalities for the Vision API. The &lt;code&gt;gcloud container subnets list-usable&lt;/code&gt; command for Kubernetes Engine was also promoted to GA.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 243.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-243-0-0-release-analysis/</link><pubDate>Tue, 23 Apr 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-243-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 243.0.0 introduces several breaking changes, including the deprecation of &lt;code&gt;gcloud ml-engine&lt;/code&gt; in favor of &lt;code&gt;gcloud ai-platform&lt;/code&gt; and flag renames for AI Platform and Compute Engine. Key new features include extensive GA promotions for Compute Engine flags and command groups, new IP alias support for Cloud Composer, and Cloud Run add-on management for Kubernetes Engine. Minor security updates and command restructuring for Cloud Tasks were also implemented.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 242.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-242-0-0-release-analysis/</link><pubDate>Tue, 16 Apr 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-242-0-0-release-analysis/</guid><description>&lt;p&gt;Version 242.0.0 of the Google Cloud SDK includes a critical security fix for &lt;code&gt;gcloud config config-helper&lt;/code&gt; to prevent stale identity tokens. Cloud Composer introduces breaking changes by deprecating potentially harmful database subcommands. The release also adds new features, such as IAP Tunneling by default for Compute Engine SSH/SCP, new flags for Data Catalog, IAM service accounts, and Compute Engine image deprecation controls.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 241.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-241-0-0-release-analysis/</link><pubDate>Wed, 03 Apr 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-241-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK version 241.0.0 introduces a breaking change requiring the &lt;code&gt;--runtime&lt;/code&gt; flag for new Cloud Functions deployments and deprecates legacy network creation in Compute Engine. This release includes critical security updates, patching &lt;code&gt;kubectl&lt;/code&gt; for &lt;code&gt;CVE-2019-1002101&lt;/code&gt; and removing vulnerable older &lt;code&gt;kubectl&lt;/code&gt; versions. It also delivers numerous new features and promotions to GA/beta across services like Cloud Composer, BigQuery, Cloud Memorystore, Kubernetes Engine, and adds authenticated push subscriptions for Cloud Pub/Sub.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 240.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-240-0-0-release-analysis/</link><pubDate>Tue, 26 Mar 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-240-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 240.0.0 introduces a breaking change by enabling Kubernetes Engine node auto-upgrade by default for new clusters and node-pools. Key new features include the &lt;code&gt;--impersonate-service-account&lt;/code&gt; flag for &lt;code&gt;gcloud&lt;/code&gt;, new commands for submitting Presto jobs to Cloud Dataproc, and expanded support for Compute Engine external and HA VPN gateways. Additionally, several features and flags across Cloud DNS, Compute Engine, and Kubernetes Engine have been promoted to Beta or GA stability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 239.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-239-0-0-release-analysis/</link><pubDate>Tue, 19 Mar 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-239-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 239.0.0 introduces new autoscaling policy management for Cloud Dataproc and promotes several Shielded VM features to GA in Compute Engine, including &lt;code&gt;gcloud compute instances get-shielded-identity&lt;/code&gt; and various &lt;code&gt;--shielded-*&lt;/code&gt; flags. This release also removes several deprecated &lt;code&gt;--shielded-vm-*&lt;/code&gt; flags, marking them as breaking changes for users still relying on them, and updates &lt;code&gt;kubectl&lt;/code&gt; versioning logic for Kubernetes Engine. No unannounced changes could be identified without the Git Diff.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 238.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-238-0-0-release-analysis/</link><pubDate>Tue, 12 Mar 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-238-0-0-release-analysis/</guid><description>&lt;p&gt;This Google Cloud SDK update, version 238.0.0, primarily focuses on promoting existing features to GA or Beta for various services, including &lt;code&gt;gcloud access-context-manager&lt;/code&gt; and several flags across Cloud Dataproc, Functions, and ML Engine. Key new capabilities include the &lt;code&gt;main&lt;/code&gt; field in &lt;code&gt;app.yaml&lt;/code&gt; for App Engine Go runtimes and the &lt;code&gt;--enable-shielded-containers&lt;/code&gt; flag for GKE. A notable breaking change removes the &lt;code&gt;unrestricted-services&lt;/code&gt; field from Cloud Access Context Manager, now defaulting to all services.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 237.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-237-0-0-release-analysis/</link><pubDate>Tue, 05 Mar 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-237-0-0-release-analysis/</guid><description>&lt;p&gt;This release primarily focuses on bug fixes, including a critical fix for a Windows installer crash, BigQuery timestamp formatting, and Cloud Dataproc field visibility. It also updates key components like &lt;code&gt;gsutil&lt;/code&gt; to 4.37 and &lt;code&gt;kubectl&lt;/code&gt; to 1.11.7 (adding more versions), while introducing new Compute Engine features such as reduced disk size limits, new options for compute commitments, and enhanced &lt;code&gt;instance-groups&lt;/code&gt; listing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 236.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-236-0-0-release-analysis/</link><pubDate>Tue, 26 Feb 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-236-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 236.0.0 introduces new functionality, including flags for Cloud Asset Inventory and Cloud Dataproc, and &lt;code&gt;debug()&lt;/code&gt; support for the Cloud Firestore Emulator. It promotes &lt;code&gt;services vpc-peerings&lt;/code&gt; to GA and improves error handling for &lt;code&gt;gcloud auth revoke&lt;/code&gt;. A minor breaking change removes the &lt;code&gt;auto-create-routes&lt;/code&gt; column from &lt;code&gt;gcloud beta compute networks peerings list&lt;/code&gt; output.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 233.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-233-0-0-release-analysis/</link><pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-233-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 233.0.0 delivers significant enhancements including new job configuration flags for Cloud Dataflow and Cloud ML Engine, and promotes several key features to General Availability across Cloud Filestore, Pub/Sub, and Compute Engine&amp;rsquo;s instance groups and network configurations. Additionally, it updates the Cloud Firestore Emulator with new RPCs and logging, fixes a &lt;code&gt;gcloud sql connect&lt;/code&gt; whitelisting issue, and updates the &lt;code&gt;gsutil&lt;/code&gt; component.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 232.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-232-0-0-release-analysis/</link><pubDate>Tue, 29 Jan 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-232-0-0-release-analysis/</guid><description>&lt;p&gt;This release includes several breaking changes, notably the deprecation of &lt;code&gt;gcloud compute instance-groups managed set-autohealing&lt;/code&gt; and a new hard requirement for &lt;code&gt;gcloud container clusters create&lt;/code&gt; when using the CloudRun add-on. Key new features include the &lt;code&gt;--enable-display-device&lt;/code&gt; flag for Compute Engine instances and &lt;code&gt;--max-pods-per-node&lt;/code&gt; for GKE clusters. Additionally, several IAM policy commands for Compute Engine resources have been promoted to GA, and a problematic fix for &lt;code&gt;gcloud sql connect&lt;/code&gt; was rolled back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 231.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-231-0-0-release-analysis/</link><pubDate>Wed, 23 Jan 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-231-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 231.0.0 introduces several new features, including BigQuery BI Engine reservations, export/import functionality for the Cloud Datastore Emulator, and advanced disk configuration options in Compute Engine. Key flags were promoted to beta or GA across Compute Engine, Firebase Test Lab, and Kubernetes Engine, enhancing instance group management, disk creation, and test reliability. This release also updates the App Engine Python SDK and includes a breaking change related to Cloud SQL error messaging.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 230.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-230-0-0-release-analysis/</link><pubDate>Tue, 15 Jan 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-230-0-0-release-analysis/</guid><description>&lt;p&gt;Version 230.0.0 introduces several breaking changes, notably fixing symlink handling for App Engine and Cloud Functions source uploads, which may affect deployments. It deprecates First Generation Cloud SQL instances and renames Compute Engine Shielded VM flags. New features include an alternative &lt;code&gt;--zone&lt;/code&gt; flag for Cloud SQL instance creation and expanded Cloud Scheduler region support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 229.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-229-0-0-release-analysis/</link><pubDate>Tue, 08 Jan 2019 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-229-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 229.0.0 introduces significant new features, including an alpha &lt;code&gt;gcloud bq&lt;/code&gt; command group for BigQuery, Cloud Firestore index management, and Kaniko integration for Cloud Build with new flags. This release also includes the deprecation of HTTP/HTTPS health check flags in Compute Engine, the promotion of several flags and commands to beta and GA stability levels, and various updates and bug fixes for App Engine, Cloud Datastore, and Cloud Firestore emulators, alongside a &lt;code&gt;gsutil&lt;/code&gt; component update.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 228.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-228-0-0-release-analysis/</link><pubDate>Tue, 11 Dec 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-228-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 228.0.0 introduces several new beta features and promotes existing ones to GA across Compute Engine, Cloud Composer, Cloud DNS, and Kubernetes Engine. A notable breaking change is the deprecation of the &lt;code&gt;--full&lt;/code&gt; flag for &lt;code&gt;gcloud endpoints operations describe&lt;/code&gt;. Additionally, the Java SDK for App Engine has been updated to version 1.9.70.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 227.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-227-0-0-release-analysis/</link><pubDate>Tue, 04 Dec 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-227-0-0-release-analysis/</guid><description>&lt;p&gt;Version 227.0.0 of the Google Cloud SDK introduces several breaking changes, notably the removal of deprecated &lt;code&gt;gcloud datastore&lt;/code&gt; and &lt;code&gt;gcloud container builds&lt;/code&gt; commands, and old Cloud IoT flags. This release focuses heavily on promoting various &lt;code&gt;gcloud&lt;/code&gt; commands and flags to GA or beta across services like Cloud Functions, IoT, Spanner, and Compute Engine, while also adding new Bigtable filtering options and SparkR job support for Dataproc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 226.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-226-0-0-release-analysis/</link><pubDate>Tue, 20 Nov 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-226-0-0-release-analysis/</guid><description>&lt;p&gt;Version 226.0.0 introduces a breaking change for Cloud Spanner&amp;rsquo;s &lt;code&gt;gcloud beta spanner rows&lt;/code&gt; command, now requiring &lt;code&gt;--flags-file&lt;/code&gt; for array values with the &lt;code&gt;--data&lt;/code&gt; flag. New features include an App Engine command group for configuration migration and the beta release of the Cloud Firestore Emulator. Additionally, Cloud Endpoints deployment behavior has been adjusted regarding service enablement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 225.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-225-0-0-release-analysis/</link><pubDate>Tue, 13 Nov 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-225-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 225.0.0 introduces several new features, including a global &lt;code&gt;--flags-file&lt;/code&gt; for complex flag values and enhanced retry options for Cloud Scheduler Pub/Sub jobs. Key promotions to GA include Cloud Spanner&amp;rsquo;s partitioned DML and Compute Engine&amp;rsquo;s Router NATs, signaling increased stability and readiness across services.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Cloud Build Triggers: Excluding Branches</title><link>https://lust.dev/2018/11/07/cloud-build-triggers-excluding-branches/</link><pubDate>Wed, 07 Nov 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/2018/11/07/cloud-build-triggers-excluding-branches/</guid><description>Exclude branches likes master from Cloud Build triggers</description></item><item><title>gcloud SDK 224.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-224-0-0-release-analysis/</link><pubDate>Tue, 06 Nov 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-224-0-0-release-analysis/</guid><description>&lt;p&gt;This SDK release includes significant breaking changes for Container Builder users, deprecating &lt;code&gt;container-builder-local&lt;/code&gt; and redirecting &lt;code&gt;gcloud container builds&lt;/code&gt; to &lt;code&gt;gcloud builds&lt;/code&gt;. It also promotes the &lt;code&gt;gcloud compute instances create --hostname&lt;/code&gt; flag to beta and updates the App Engine Python and Go SDKs to their latest versions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 223.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-223-0-0-release-analysis/</link><pubDate>Tue, 30 Oct 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-223-0-0-release-analysis/</guid><description>&lt;p&gt;This release includes updates to the App Engine SDKs for Python (&lt;code&gt;1.9.78&lt;/code&gt;), Java (&lt;code&gt;1.9.68&lt;/code&gt;), and Go (&lt;code&gt;1.9.69&lt;/code&gt;), with the Go SDK update addressing a bug in Windows &lt;code&gt;go.mod&lt;/code&gt; deployments. Significant features promoted to beta include the &lt;code&gt;gcloud access-context-manager&lt;/code&gt; command group for Cloud Access Context Manager and Node Auto-Provisioning for Kubernetes Engine via the &lt;code&gt;--enable-autoprovisioning&lt;/code&gt; flag. Additionally, the &lt;code&gt;gcloud builds submit&lt;/code&gt; command now defaults to &lt;code&gt;--config=cloudbuild.yaml&lt;/code&gt; if no other configuration or tag is provided.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 222.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-222-0-0-release-analysis/</link><pubDate>Tue, 23 Oct 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-222-0-0-release-analysis/</guid><description>&lt;p&gt;This Google Cloud SDK update 222.0.0 deprecates the &lt;code&gt;gcloud container builds&lt;/code&gt; command group, urging migration to &lt;code&gt;gcloud builds&lt;/code&gt;. It introduces several new features, including private DNS zones, custom Airflow/image versions for Cloud Composer, and enhanced disk mounting for Compute Engine containers. A security update to &lt;code&gt;gcloud iam service-accounts keys create&lt;/code&gt; now prevents execution if a user lacks write access to output files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 221.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-221-0-0-release-analysis/</link><pubDate>Tue, 16 Oct 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-221-0-0-release-analysis/</guid><description>&lt;p&gt;Version 221.0.0 introduces a breaking change by removing the deprecated &lt;code&gt;host&lt;/code&gt; argument from &lt;code&gt;gcloud sql users&lt;/code&gt; commands. It also brings several new features, including enhanced &lt;code&gt;gcloud app logs&lt;/code&gt; output for various runtimes and new flags for BigQuery dataset partition expiration and Cloud Spanner DML operations. Additionally, the &lt;code&gt;--no-address&lt;/code&gt; flag for Cloud Dataproc and &lt;code&gt;--response&lt;/code&gt; flag for Compute Engine health-checks have been promoted to General Availability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 220.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-220-0-0-release-analysis/</link><pubDate>Tue, 09 Oct 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-220-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 220.0.0 introduces several breaking changes, including default disabling of legacy metadata APIs for new Kubernetes Engine node pools and deprecation of the internal &lt;code&gt;gsutil&lt;/code&gt; implementation for Python 3 support. Key security enhancements include default secure node pool configurations and KMS encryption for Dataproc clusters. New features span across various services, adding enhanced logging, Python version specification for Composer, and DML support for Cloud Spanner queries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 219.0.1 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-219-0-1-release-analysis/</link><pubDate>Tue, 02 Oct 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-219-0-1-release-analysis/</guid><description>&lt;p&gt;This Google Cloud SDK update 219.0.1 primarily focuses on promoting several Compute Engine and Kubernetes Engine features to beta or GA, notably enhancing KMS key support for disk/image protection and adding private cluster capabilities for GKE. It also includes an update to the App Engine Python SDK and a fix for Unicode issues in the core Cloud SDK.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 218.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-218-0-0-release-analysis/</link><pubDate>Tue, 25 Sep 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-218-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK &lt;code&gt;218.0.0&lt;/code&gt; introduces new features like Cloud Dataproc cluster import/export capabilities and expanded metadata flags for Kubernetes Engine, alongside a breaking change in the &lt;code&gt;gcloud sql instances list&lt;/code&gt; output. Significant promotions to General Availability and Beta occurred for Cloud Dataproc IAM policies and workflow templates, as well as Container Analysis image description and tag listing flags. Additionally, bug fixes were provided for Firebase Test Lab and Cloud Tools for PowerShell functionality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 217.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-217-0-0-release-analysis/</link><pubDate>Tue, 18 Sep 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-217-0-0-release-analysis/</guid><description>&lt;p&gt;This release introduces a breaking change with the renaming of the &lt;code&gt;--reserved-ranges&lt;/code&gt; flag in &lt;code&gt;gcloud beta services vpc-peerings&lt;/code&gt;. New features include enhanced IP range reservation and disk description capabilities for Compute Engine, along with metadata flags for Kubernetes Engine node pools and clusters. Several core components, including the App Engine Java SDK, gsutil, and kubectl, have also been updated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 216.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-216-0-0-release-analysis/</link><pubDate>Tue, 11 Sep 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-216-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 216.0.0 brings significant promotions to General Availability, including &lt;code&gt;gcloud bigtable instances&lt;/code&gt; commands, &lt;code&gt;gcloud redis&lt;/code&gt; for Memorystore, and Compute Engine commands for creating/updating instances with containers. It also updates the App Engine Go SDK to 1.9.68 and deprecates the &lt;code&gt;gcloud services operations list&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 215.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-215-0-0-release-analysis/</link><pubDate>Wed, 05 Sep 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-215-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 215.0.0 introduces a breaking change in Cloud SQL by removing the default for &lt;code&gt;--database-version&lt;/code&gt; during instance creation. Significant new features include Python 3 support for App Engine, new &lt;code&gt;gcloud beta firestore&lt;/code&gt; commands for managing imports/exports, and the promotion of Pub/Sub Snapshot &amp;amp; Seek features to beta. Due to the absence of a Git Diff, &lt;code&gt;filePath&lt;/code&gt; information and &lt;code&gt;unannouncedChanges&lt;/code&gt; could not be identified.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 214.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-214-0-0-release-analysis/</link><pubDate>Tue, 28 Aug 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-214-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 214.0.0 introduces several breaking changes across Cloud Bigtable and Compute Engine, primarily involving command and flag renames or removals. Key new features include the promotion of numerous flags to GA for Compute Engine and Cloud Functions, and new private cluster options for Kubernetes Engine. Several services received updates to commands and improved functionality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 213.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-213-0-0-release-analysis/</link><pubDate>Tue, 21 Aug 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-213-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 213.0.0 introduces breaking changes for Cloud Datastore index management, deprecating &lt;code&gt;create-indexes&lt;/code&gt; and &lt;code&gt;cleanup-indexes&lt;/code&gt; in favor of the newly GA-promoted &lt;code&gt;gcloud datastore indexes&lt;/code&gt; command group. It also adds a &lt;code&gt;--timeout&lt;/code&gt; flag to &lt;code&gt;gcloud sql operations wait&lt;/code&gt; and enhances Kubernetes Engine commands, including the promotion of the &lt;code&gt;--disk-type&lt;/code&gt; flag to GA and improved output for degraded clusters. Additionally, the App Engine Python SDK was updated to version &lt;code&gt;1.9.74&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 211.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-211-0-0-release-analysis/</link><pubDate>Tue, 07 Aug 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-211-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 211.0.0 introduces breaking changes for App Engine, removing automated &lt;code&gt;app.yaml&lt;/code&gt; generation and standardizing file exclusions with &lt;code&gt;.gcloudignore&lt;/code&gt;. New features include commands for Cloud Datastore index management and globbing support for Cloud Deployment Manager imports. Additionally, several &lt;code&gt;--network-tier&lt;/code&gt; flags across Compute Engine commands have been promoted to General Availability, marking them as stable for production use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 210.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-210-0-0-release-analysis/</link><pubDate>Tue, 31 Jul 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-210-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK version 210.0.0 introduces several breaking changes related to Container Builder command group renames and deprecations, along with changes to Kubernetes Engine cluster creation defaults. Key new features include the promotion of Compute Engine &lt;code&gt;sole-tenancy&lt;/code&gt; commands to GA and the addition of new VPC flow logging flags for subnets. This release also includes significant groundwork for new services like Firestore and enhanced Cloud KMS capabilities, alongside various internal refactorings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 209.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-209-0-0-release-analysis/</link><pubDate>Wed, 18 Jul 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-209-0-0-release-analysis/</guid><description>&lt;p&gt;This chunk primarily updates the Compute Engine alpha API, introducing a new &amp;lsquo;Allocation&amp;rsquo; resource for pre-allocating specific instance configurations, which instances can then consume via &lt;code&gt;allocationAffinity&lt;/code&gt;. Additionally, it adds the ability to create instances from machine images using &lt;code&gt;sourceMachineImage&lt;/code&gt; and expands available GPU quota metrics to include NVIDIA P4 types. Various API descriptions were also updated for clarity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 208.0.2 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-208-0-2-release-analysis/</link><pubDate>Thu, 12 Jul 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-208-0-2-release-analysis/</guid><description>&lt;p&gt;This release is a hotfix primarily addressing crashes within the &lt;code&gt;dev_appserver&lt;/code&gt; component. It also updates the SDK&amp;rsquo;s internal version to &lt;code&gt;208.0.2&lt;/code&gt; and includes an internal revision timestamp update.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 208.0.1 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-208-0-1-release-analysis/</link><pubDate>Wed, 11 Jul 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-208-0-1-release-analysis/</guid><description>&lt;p&gt;This &lt;code&gt;208.0.1&lt;/code&gt; release is a hotfix specifically addressing &lt;code&gt;gcloud dataproc&lt;/code&gt; crashes. The fix involved significant refactoring of the internal YAML processing for Dataproc workflow templates, leading to the removal of the &lt;code&gt;--source&lt;/code&gt; and &lt;code&gt;--destination&lt;/code&gt; CLI flags and associated schema validation logic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 208.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-208-0-0-release-analysis/</link><pubDate>Tue, 10 Jul 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-208-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK 208.0.0 introduces several new beta features, including Cloud Filestore and &lt;code&gt;gcloud compute network-endpoint-groups&lt;/code&gt; commands, along with numerous new flags for Compute Engine and Cloud Functions. Key changes include a warning about the default &lt;code&gt;--enable-ip-alias&lt;/code&gt; behavior in Kubernetes Engine and the removal of the &lt;code&gt;container/use_v1_api&lt;/code&gt; property. Significant internal groundwork was laid for new APIs like Cloud Composer, Service Networking, VPC Access, and a migration to &lt;code&gt;v1beta1&lt;/code&gt; for Binary Authorization attestors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 205.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-205-0-0-release-analysis/</link><pubDate>Tue, 12 Jun 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-205-0-0-release-analysis/</guid><description>&lt;p&gt;Google Cloud SDK version 205.0.0 introduces new flags for Cloud Bigtable, Datastore index management commands, and promotes several Cloud Interconnect and Compute Engine features to GA. A significant security update enhances SSH key validation for Compute Engine metadata. The release also includes extensive Python 2/3 compatibility refactoring, new API clients for Cloud File and Source Repositories, and foundational improvements to Calliope&amp;rsquo;s argument parsing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 203.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-203-0-0-release-analysis/</link><pubDate>Wed, 30 May 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-203-0-0-release-analysis/</guid><description>&lt;p&gt;This SDK release includes a breaking change for Cloud SQL SSL certificate management, requiring a shift from &lt;code&gt;gcloud sql ssl-certs&lt;/code&gt; to &lt;code&gt;gcloud sql ssl client-certs&lt;/code&gt;. New features allow file-based provisioning for Cloud Dataproc and advanced SSL server CA certificate rotation for Cloud SQL, with several Compute Engine flags promoted to beta. Unannounced changes reveal groundwork for features like &amp;lsquo;PushBlock&amp;rsquo; in Cloud Source Repositories and &lt;code&gt;max-pods-per-node&lt;/code&gt; in GKE, alongside significant API updates for Vision and Pub/Sub, and a notable schema reduction in the Video Intelligence API.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 202.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-202-0-0-release-analysis/</link><pubDate>Tue, 22 May 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-202-0-0-release-analysis/</guid><description>&lt;p&gt;Version 202.0.0 introduces breaking changes to Cloud Composer disk size, Compute Engine interconnects commands, Firebase Test Lab flags, and Compute Engine sole-tenancy node deletion. Key new features include GA promotion for Compute Engine flow logs, beta promotion for sole-tenancy, and a new Kubernetes Engine &lt;code&gt;--disk-type&lt;/code&gt; flag. Significant unannounced changes include the removal of the Cloud IoT v1 API client, groundwork for Category Manager, and several hidden features for Compute Engine resource policies, Dataproc, and DLP.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 201.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-201-0-0-release-analysis/</link><pubDate>Tue, 15 May 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-201-0-0-release-analysis/</guid><description>&lt;p&gt;This Google Cloud SDK release introduces a breaking change to the default TPU accelerator type for Compute Engine. Key new features include iOS app testing in Firebase Test Lab, IAM policy management for Cloud Bigtable, and new &lt;code&gt;--labels&lt;/code&gt; functionality for Compute Engine instance templates. Additionally, the SDK contains numerous unannounced changes, such as full API integration for Cloud IoT, advanced DLP job trigger capabilities, and groundwork for Compute Engine resource policies and Cloud Functions runtimes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>gcloud SDK 200.0.0 Release Analysis</title><link>https://lust.dev/gcloud/gcloud-sdk-200-0-0-release-analysis/</link><pubDate>Tue, 01 May 2018 00:00:00 +0000</pubDate><guid>https://lust.dev/gcloud/gcloud-sdk-200-0-0-release-analysis/</guid><description>&lt;p&gt;Version 200.0.0 of the Google Cloud SDK introduces several breaking changes for Cloud DNS and Cloud Interconnect commands. It adds initial beta support for the Cloud Composer service, new flags for Cloud SQL external primary instances and replicas, and Stackdriver integration for Kubernetes Engine. Internally, the SDK underwent significant refactoring for logging, resource URI parsing, and Python 2/3 string handling compatibility.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jump to:&lt;/strong&gt; &lt;a href="#breaking-changes"&gt;Annotated Release Notes&lt;/a&gt; | &lt;a href="#unannounced-changes"&gt;Unannounced Changes 🕵️&lt;/a&gt; | &lt;a href="#stats"&gt;Stats 📊&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Handling Giant Swagger Specs</title><link>https://lust.dev/2017/08/11/giant-swagger-specs/</link><pubDate>Fri, 11 Aug 2017 00:00:00 +0000</pubDate><guid>https://lust.dev/2017/08/11/giant-swagger-specs/</guid><description>Three quick tips to wrangle giant Swagger files</description></item><item><title>Swagger Jenkins Validation</title><link>https://lust.dev/2017/06/17/swagger-jenkins-validation/</link><pubDate>Sat, 17 Jun 2017 00:00:00 +0000</pubDate><guid>https://lust.dev/2017/06/17/swagger-jenkins-validation/</guid><description>Validate complex Swagger files with Jenkins automatically</description></item><item><title>AWS Command Line Password Reset</title><link>https://lust.dev/2016/07/08/aws-cli-password-reset/</link><pubDate>Fri, 08 Jul 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/07/08/aws-cli-password-reset/</guid><description>Your AWS login expired. Time to call the sysamdin, or can you solo this one?</description></item><item><title>Login With Broken AWS MFA Device</title><link>https://lust.dev/2016/06/14/login-broken-aws-mfa-device/</link><pubDate>Tue, 14 Jun 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/06/14/login-broken-aws-mfa-device/</guid><description>Your dog just broke your iPhone. How do you login to AWS without your MFA token?</description></item><item><title>Modulo Operator Performance Impact</title><link>https://lust.dev/2016/05/08/modulo-operator-performance-impact/</link><pubDate>Sun, 08 May 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/05/08/modulo-operator-performance-impact/</guid><description>My textbooks used modulo, yet my boss told me not to. Where had I gone wrong?</description></item><item><title>Dangers of the Unit Type Parameter</title><link>https://lust.dev/2016/04/12/dangers-of-unit-type-parameter/</link><pubDate>Tue, 12 Apr 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/04/12/dangers-of-unit-type-parameter/</guid><description>Confusing misuses of Unit and the loss of type checking.</description></item><item><title>Deploy Hugo Files to S3</title><link>https://lust.dev/2016/02/28/deploy-hugo-files-to-s3/</link><pubDate>Sun, 28 Feb 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/02/28/deploy-hugo-files-to-s3/</guid><description>Easily deploy your Hugo static website on S3 with AWS CLI</description></item><item><title>AWS Hugo Hosting, HowTo</title><link>https://lust.dev/2016/02/27/hosting-hugo-on-aws/</link><pubDate>Sat, 27 Feb 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/02/27/hosting-hugo-on-aws/</guid><description>Easily Host your Hugo static website on CloudFront with AWS CLI</description></item><item><title>Farewell WordPress, Hello Hugo!</title><link>https://lust.dev/2016/02/21/farewell-wordpress-hello-hugo/</link><pubDate>Sun, 21 Feb 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/02/21/farewell-wordpress-hello-hugo/</guid><description>Ditch the slow WordPress platform for high speed, static Hugo sites</description></item><item><title>Home Cooked Apache Spark</title><link>https://lust.dev/2016/01/07/home-cooked-apache-spark/</link><pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/01/07/home-cooked-apache-spark/</guid><description>&lt;p&gt;We use Apache Spark for various applications at &lt;a href="https://mc10inc.com"&gt;my job&lt;/a&gt;, but Spark is still relatively unstable, as evidenced by the project&amp;rsquo;s &lt;a href="https://github.com/apache/spark/pulls"&gt;11K+&lt;/a&gt; pull requests. To maintain developer velocity, we regularly patch show stopper bugs in the Spark source. The process is simple.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install JDK 6, which is required for PySpark (or you&amp;rsquo;ll get a lengthy warning). Use the &lt;code&gt;oracle-java8-set-default&lt;/code&gt; package to switch between Java 6 and 8, or set &lt;code&gt;JAVA_HOME&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install oracle-java6-installer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;oracle-java8-set-default &lt;span class="c1"&gt;# Go back to Java 8 when you&amp;#39;re done building&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fork the &lt;a href="https://github.com/apache/spark"&gt;Apache Spark repo&lt;/a&gt; so you can submit a Pull Request later&lt;/p&gt;</description></item><item><title>Remote Debugging Apache Spark Clusters</title><link>https://lust.dev/2016/01/01/remote-debugging-apache-spark-clusters/</link><pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate><guid>https://lust.dev/2016/01/01/remote-debugging-apache-spark-clusters/</guid><description>&lt;p&gt;Debugging Apache Spark can be tricky. Sure, everything works on your &lt;code&gt;--master local[4]&lt;/code&gt; cluster, but not when run on a real cluster. In these cases, you need to drop to a debug breakpoint in the running cluster.&lt;/p&gt;
&lt;h1 id="get-debugger-listening"&gt;Get Debugger Listening&lt;/h1&gt;
&lt;p&gt;Simply update the launch args wherever you start Spark like so. Note: &lt;code&gt;SPARK_JAVA_OPTS&lt;/code&gt; won&amp;rsquo;t do the trick.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;SPARK_WORKER_OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;SPARK_MASTER_OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /opt/spark/sbin/start-master.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open an SSH tunnel to your remote cluster machine, mapping &lt;code&gt;localhost:4000&lt;/code&gt; to &lt;code&gt;spark-master.foo.com:5000&lt;/code&gt;, assuming the cluster is at &lt;code&gt;spark-master.foo.com&lt;/code&gt;, listening on port &lt;code&gt;5000&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Black Box Interviewing</title><link>https://lust.dev/2015/11/12/black-box-interviewing/</link><pubDate>Thu, 12 Nov 2015 00:00:00 +0000</pubDate><guid>https://lust.dev/2015/11/12/black-box-interviewing/</guid><description>The majority of software developers are uninspiring</description></item><item><title>Cassandra Errors: The UnSet Upsert</title><link>https://lust.dev/2015/06/22/cassandra-errors-the-unset-upsert/</link><pubDate>Mon, 22 Jun 2015 00:00:00 +0000</pubDate><guid>https://lust.dev/2015/06/22/cassandra-errors-the-unset-upsert/</guid><description>&lt;p&gt;During a late night coding session I got the following trace from the Datastax Cassandra Java Driver:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;com.datastax.driver.core.exceptions.SyntaxError: line 1:36 mismatched input &lt;span class="s1"&gt;&amp;#39;WHERE&amp;#39;&lt;/span&gt; expecting K_SET &lt;span class="o"&gt;(&lt;/span&gt;UPDATE my_table &lt;span class="o"&gt;[&lt;/span&gt;WHERE&lt;span class="o"&gt;]&lt;/span&gt; id...&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;at com.datastax.driver.core.Responses&lt;span class="nv"&gt;$Error&lt;/span&gt;.asException&lt;span class="o"&gt;(&lt;/span&gt;Responses.java:101&lt;span class="o"&gt;)&lt;/span&gt; ~&lt;span class="o"&gt;[&lt;/span&gt;cassandra-driver-core-2.1.5.jar:na&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;at com.datastax.driver.core.DefaultResultSetFuture.onSet&lt;span class="o"&gt;(&lt;/span&gt;DefaultResultSetFuture.java:140&lt;span class="o"&gt;)&lt;/span&gt; ~&lt;span class="o"&gt;[&lt;/span&gt;cassandra-driver-core-2.1.5.jar:na&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;at com.datastax.driver.core.RequestHandler.setFinalResult&lt;span class="o"&gt;(&lt;/span&gt;RequestHandler.java:293&lt;span class="o"&gt;)&lt;/span&gt; ~&lt;span class="o"&gt;[&lt;/span&gt;cassandra-driver-core-2.1.5.jar:na&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;at com.datastax.driver.core.RequestHandler.onSet&lt;span class="o"&gt;(&lt;/span&gt;RequestHandler.java:455&lt;span class="o"&gt;)&lt;/span&gt; ~&lt;span class="o"&gt;[&lt;/span&gt;cassandra-driver-core-2.1.5.jar:na&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;at com.datastax.driver.core.Connection&lt;span class="nv"&gt;$Dispatcher&lt;/span&gt;.messageReceived&lt;span class="o"&gt;(&lt;/span&gt;Connection.java:734&lt;span class="o"&gt;)&lt;/span&gt; ~&lt;span class="o"&gt;[&lt;/span&gt;cassandra-driver-core-2.1.5.jar:na&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream&lt;span class="o"&gt;(&lt;/span&gt;SimpleChannelUpstreamHandler.java:70&lt;span class="o"&gt;)&lt;/span&gt; ~&lt;span class="o"&gt;[&lt;/span&gt;netty-3.10.1.Final.jar:na&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ok. Let’s think it through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Did we not put a key column in the &lt;code&gt;WHERE&lt;/code&gt; clause? Nope.&lt;/li&gt;
&lt;li&gt;Did we put a non-key column in the &lt;code&gt;WHERE&lt;/code&gt; clause? Nope.&lt;/li&gt;
&lt;li&gt;Did we put a key column in the &lt;code&gt;SET&lt;/code&gt; clause? Nope.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OK, what then?&lt;/p&gt;</description></item><item><title>Don’t use Git to Deploy Code</title><link>https://lust.dev/2015/02/28/dont-use-git-to-deploy-code/</link><pubDate>Sat, 28 Feb 2015 00:00:00 +0000</pubDate><guid>https://lust.dev/2015/02/28/dont-use-git-to-deploy-code/</guid><description>&lt;p&gt;Just don’t. If you can’t reason why, please stop developing code critical to your business.&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/github_down.png"&gt;
&lt;/figure&gt;

&lt;h3 id="when-it-works-it-works"&gt;When it works, it works&lt;/h3&gt;
&lt;p&gt;Git is great. &lt;em&gt;Push&lt;/em&gt; here, &lt;em&gt;pull&lt;/em&gt; there. It works so well that you might be fatuously convinced it’s the perfect tool to deploy production code. Even worse, it might appear to work well at this task, further reinforcing your choice  However, the Achilles Heel of any DVCS is your origin provider. Let’s say that &lt;a href="https://twitter.com/bitbucket/status/460418803805855745"&gt;BitBucket&lt;/a&gt; has &lt;a href="https://twitter.com/search?q=%40BitBucket%20down&amp;amp;src=typd"&gt;borked&lt;/a&gt; their database for the 4th time this month or GitHub is suffering yet another DDNS attack. Then we see &lt;a href="http://jorgennilsson.com/article/there-is-always-a-drawback-bitbucket-major-outage"&gt;posts&lt;/a&gt; &lt;a href="https://bitbucket.org/alixandru/bitbucket-sync/issue/19/post-hook-deployment-stopped-working"&gt;opining&lt;/a&gt; about failed Git based app deployments.&lt;/p&gt;</description></item><item><title>Dynatrace Memory Sensor Anti-Patterns</title><link>https://lust.dev/2014/11/04/dynatrace-memory-sensor-anti-patterns/</link><pubDate>Tue, 04 Nov 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/11/04/dynatrace-memory-sensor-anti-patterns/</guid><description>&lt;p&gt;This is a collection of Dynatrace actions I’ve learned to avoid. I’ll add more as my Dynatrace journey evolves.&lt;/p&gt;
&lt;h3 id="judiciously-apply-memory-sensors"&gt;Judiciously Apply Memory Sensors&lt;/h3&gt;
&lt;p&gt;If one Memory Sensor is good, then many must be great? Sadly not. Memory sensors are useful as they allow Selective Memory Snapshots to be taken of a subset of the heap graph without taking an entire heap dump. They are delightfully fast and light, but too many will spoil the party.&lt;/p&gt;</description></item><item><title>Never Use Glassdoor From Work</title><link>https://lust.dev/2014/11/02/never-user-glassdoor-from-work/</link><pubDate>Sun, 02 Nov 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/11/02/never-user-glassdoor-from-work/</guid><description>&lt;h3 id="asymmetric-information"&gt;Asymmetric Information&lt;/h3&gt;
&lt;p&gt;Can you find the SSL in this URL? Hint, you won’t.&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/whereIsTheSSL.png"&gt;
&lt;/figure&gt;

&lt;p&gt;Glassdoor is a great idea. Add transparency to the job market by making salaries, interview details, and internal company reviews public. This is information that employers intensely attempt to keep private, despite its dissemination being totally legal. One trick many companies use is telling you that you cannot do something that you legally can do. For example, saying a user cannot do something in the Terms of Service, despite the courts ruling &lt;!-- raw HTML omitted --&gt;ToS unenforceable&lt;!-- raw HTML omitted --&gt;. Or, at bonus and raise time, telling employees that they cannot discuss their pay, even though the &lt;!-- raw HTML omitted --&gt;courts have declared employers cannot take recourse to prevent salaries discussions&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;</description></item><item><title>Why I Chose AWS Over Digital Ocean</title><link>https://lust.dev/2014/10/29/why-choose-aws-over-digital-ocean/</link><pubDate>Wed, 29 Oct 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/10/29/why-choose-aws-over-digital-ocean/</guid><description>&lt;p&gt;There&amp;rsquo;s no shortage of &lt;a href="https://news.ycombinator.com/item?id=7720134"&gt;shills&lt;/a&gt; for Digital Ocean VM hosting on &lt;a href="https://news.ycombinator.com/item?id=8926631"&gt;HackerNews&lt;/a&gt; lately. They &lt;a href="https://news.ycombinator.com/item?id=9522486"&gt;extol&lt;/a&gt; the wonder of DO and disparage AWS. I view these accumulations of calumnies with curiosity, searching for the cogent retorts from AWS mavens. Finally, I broke down and threw &lt;a href="https://www.digitalocean.com/pricing/"&gt;$5&lt;/a&gt; at a DO plan to see what I was missing. Turns out I&amp;rsquo;m not missing a thing.&lt;/p&gt;
&lt;h2 id="the-good"&gt;The Good&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Modern CSS feel with candy buttons and very simple, limited UI&lt;/li&gt;
&lt;li&gt;Grandma could launch a VM&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="expense"&gt;Expense&lt;/h2&gt;
&lt;p&gt;How do the shills keep yowling that DO is cheaper than EC2? The 8GB ram DO &amp;ldquo;droplet&amp;rdquo; is presently &lt;code&gt;¢11.9/hr&lt;/code&gt;. On EC2 you can get a spot instance with that ram for &lt;code&gt;¢0.3/hr&lt;/code&gt;. That&amp;rsquo;s right, for 1/3 of a penny per hour, I can get something bigger than the most powerful droplet on DO. &lt;strong&gt;Clearly DO is not &amp;ldquo;cheaper.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Using Immutable Objects with MyBatis</title><link>https://lust.dev/2014/10/12/using-immutable-objects-with-mybatis/</link><pubDate>Sun, 12 Oct 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/10/12/using-immutable-objects-with-mybatis/</guid><description>&lt;h3 id="immutable-is-beautiful"&gt;Immutable is Beautiful&lt;/h3&gt;
&lt;p&gt;I’m a fan of immutable objects. We all know the benefits; simple, no mutators, thread safe, cache word optimizable. However, I see far too many MyBatis (and iBatis) developers adding no arg constructors to their POJO’s simply so that MyBatis can reflect and set all of the values into the field setters. I’ll ask “&lt;em&gt;why does this POJO need to be mutated&lt;/em&gt;” and they quip that it doesn’t, but these setters and protected no-arg constructors are needed by MyBatis. This violates my principle that you make your library work with your code, not the other way around.&lt;/p&gt;</description></item><item><title>PreRelease: Open ICAO 24 Database</title><link>https://lust.dev/2014/10/04/prerelease-open-icao-24-database/</link><pubDate>Sat, 04 Oct 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/10/04/prerelease-open-icao-24-database/</guid><description>&lt;p&gt;I’ve long been a fan of aviation. When sites like FlightAware came out, I was a huge fan to learn about the contrails around me.  I was even more excited when the revolution in RTLSDR enabled everyone to track ADS-B enabled aircraft for $10.&lt;/p&gt;
&lt;p&gt;Sometimes outside on a run or drive, I’d see a high altitude contrail do a 180 and wonder, what just happened? In 1998, short of calling the FAA, you’d never know. Jump to 2014 and you can look up the track on &lt;!-- raw HTML omitted --&gt;FlightAware&lt;!-- raw HTML omitted --&gt; or &lt;!-- raw HTML omitted --&gt;FlightRadar24&lt;!-- raw HTML omitted --&gt; (et al) and then pull the ATC tape via &lt;!-- raw HTML omitted --&gt;LiveATC&lt;!-- raw HTML omitted --&gt;. Information is becoming freer and freer! That’s the &lt;!-- raw HTML omitted --&gt;information revolution&lt;!-- raw HTML omitted --&gt; of the Internet at work.&lt;/p&gt;</description></item><item><title>Accessing the GWT History Stack</title><link>https://lust.dev/2014/08/26/accessing-the-gwt-history-stack/</link><pubDate>Tue, 26 Aug 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/08/26/accessing-the-gwt-history-stack/</guid><description>&lt;p&gt;GWT (Google Web Toolkit) does not supply a direct way to know where users have been within your application. However, you can use a simple listener and stack to record and access history events.&lt;/p&gt;
&lt;p&gt;The key is the GWT History object. You can listen to its change event to know the user has gone to another Place. The restriction is &lt;!-- raw HTML omitted --&gt;we don’t know when the user has gone &lt;!-- raw HTML omitted --&gt;back&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;. This is an inherent state detection problem in the stateless HTTP web. Ideally, it should not matter to your application how a user arrived at the given Place.&lt;/p&gt;</description></item><item><title>Jenkins vs. Teamcity – The Better CI Tool</title><link>https://lust.dev/2014/08/21/jenkins-vs-teamcity-the-better-ci-tool/</link><pubDate>Thu, 21 Aug 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/08/21/jenkins-vs-teamcity-the-better-ci-tool/</guid><description>Top 4 reasons Not to use Jenkins for CI</description></item><item><title>Ringing the Cygwin Terminal Bell</title><link>https://lust.dev/2014/08/02/ringing-the-cygwin-terminal-bell/</link><pubDate>Sat, 02 Aug 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/08/02/ringing-the-cygwin-terminal-bell/</guid><description>&lt;p&gt;Let’s say you’ve sadly been running several processes in a row. They take time, so you catch up on your blog reading while they run, but have to keep checking back on the terminal to see if they’re done. Wouldn’t it be nice to know when a command is complete? Easy, just have it &lt;strong&gt;ring the Cygwin Terminal Bell&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;For example, download a big file, untar it, and let me know when you’re done:&lt;/p&gt;</description></item><item><title>Amtrak's Secret Train Tracking JSON API</title><link>https://lust.dev/2014/07/12/amtraks-secret-train-tracking-json-api/</link><pubDate>Sat, 12 Jul 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/07/12/amtraks-secret-train-tracking-json-api/</guid><description>&lt;p&gt;It&amp;rsquo;s not often that a government operated agency does something cool or modern, but I noticed today that Amtrak was breaking the mold.&lt;/p&gt;
&lt;p&gt;Riding to the NE Regional to NYC, I noticed that the Amtrak tracking page kept updating, even when internet connectivity failed on the WIFI. Odd&amp;hellip; does that mean that the servers are &lt;em&gt;on the train&lt;/em&gt;?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;joe@tp:~$ tracepath www.amtrakconnect.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1?: &lt;span class="o"&gt;[&lt;/span&gt;LOCALHOST&lt;span class="o"&gt;]&lt;/span&gt; pmtu &lt;span class="m"&gt;1500&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1: 10.80.104.1 8.641ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1: 10.80.104.1 16.690ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 2: 10.80.104.1 6.179ms pmtu &lt;span class="m"&gt;1350&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 2: www.amtrakconnect.com 5.424ms reached
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Resume: pmtu &lt;span class="m"&gt;1350&lt;/span&gt; hops &lt;span class="m"&gt;2&lt;/span&gt; back &lt;span class="m"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Interesting. The call is coming from inside the train! Let&amp;rsquo;s look at the webpage and see if we can find the API.&lt;/p&gt;</description></item><item><title>Restoring the Chrome GWT DevMode Plugin</title><link>https://lust.dev/2014/06/12/restoring-the-chrome-gwt-devmode-plugin/</link><pubDate>Thu, 12 Jun 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/06/12/restoring-the-chrome-gwt-devmode-plugin/</guid><description>&lt;figure&gt;&lt;img src="./img/noNappi.png"&gt;
&lt;/figure&gt;

&lt;p&gt;Did your DevMode Chrome extension stop working recently? Welcome to the party. The powers of divine wisdom on the Google Chrome team &lt;a href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html"&gt;decided that NPAPI was a superannuated&lt;/a&gt; security hole and must die. The fact that they proposed no clear alternative solution has led many a plugin (Java, GWT DevMode, Linux Garmin Connect, VDPAU, GNOME Shell Integration, VMware VSphere Client, Nemid) to &lt;a href="http://ubuntuforums.org/showthread.php?t=2225277"&gt;wither&lt;/a&gt; and &lt;a href="https://forums.garmin.com/showthread.php?76009-Announcement-Concerning-Garmin-Connect" title="Garmin Connect Plugin"&gt;die&lt;/a&gt;. But what about Flash!? Well, to keep important plugins from being impacted, they’ve been whitelisted, but for the rest of us who depend on the Chrome DevMode Plugin… too bad.&lt;/p&gt;</description></item><item><title>Subdomain SSL Certificate Verification on Route 53</title><link>https://lust.dev/2014/03/16/subdomain-ssl-certificate-verification-on-route-53/</link><pubDate>Sun, 16 Mar 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/03/16/subdomain-ssl-certificate-verification-on-route-53/</guid><description>&lt;h3 id="sadly-a-godaddy-user"&gt;Sadly a GoDaddy User&lt;/h3&gt;
&lt;p&gt;I use GoDaddy for a few domains and some SSL. Every time I need to set something up, it is like pulling teeth. First you’ve got to get through four layers of sales pitches, cross sells, and upsells. Then you finally get to the admin UI’s. Not the UI, the UI’s. Each one of them appears to have been designed by team with a different design philosophy. To boot the doc’s appear to have been written by someone that never actual used the UI they’re prescribing the use of.&lt;/p&gt;</description></item><item><title>Don’t call non-final methods from your constructor, please.</title><link>https://lust.dev/2014/02/08/dont-call-non-final-methods-from-your-constructor-please/</link><pubDate>Sat, 08 Feb 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/02/08/dont-call-non-final-methods-from-your-constructor-please/</guid><description>&lt;p&gt;I ran into problems with someone doing this recently, so I’ll have to embellish the web a little more. The world must learn.&lt;/p&gt;
&lt;p&gt;Why don’t we call non-final methods from constructors? Because it’s bad. Why is it bad? Because OO has an order to the madness and this ain’t the order. Let’s do a quick experiment to find out why.&lt;/p&gt;
&lt;p&gt;Here is our parent and child class.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FooKlassParent&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Parent: Init static block 1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SysWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SysWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Parent: non-static field init&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SysWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SysWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Parent: static field init&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;FooKlassParent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Parent: Constructor called&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Parent: Init static block 2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Parent: do something&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So many goodies! Static blocks, static fields, non-static fields, non-static methods. Yum. If you’re programming Java and don’t know the order these all fire in, please switch to PHP.&lt;/p&gt;</description></item><item><title>MyBatis Query Optimization : Dollar Sign be Damned</title><link>https://lust.dev/2014/02/05/mybatis-query-optimization-dollar-sign-be-damned/</link><pubDate>Wed, 05 Feb 2014 00:00:00 +0000</pubDate><guid>https://lust.dev/2014/02/05/mybatis-query-optimization-dollar-sign-be-damned/</guid><description>&lt;p&gt;I discovered a shocking truth today. We use MyBatis on my current project for read only queries. Recently we had a cache populating job that ran rather slowly. We optimized and optimized cleaning up the queries and adjusting the database indexes and statistics tables. Try as we may, the job still required 30+ minutes each day.&lt;/p&gt;
&lt;p&gt;Miraculously the job dropped to 3 minutes yesterday. It must be broken! Check the logs! Alas, all of the outputs were correct. To the source control, what changed?&lt;/p&gt;</description></item><item><title>AWS EC2 Spot Market Volatility</title><link>https://lust.dev/2013/11/16/aws-ec2-spot-market-volatility/</link><pubDate>Sat, 16 Nov 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/11/16/aws-ec2-spot-market-volatility/</guid><description>&lt;p&gt;The spot instance market does not often make sense. You first learn of it and think “Wow! Why did I waste that money on a reserved instance when I can get the same price on demand?!?!?!” Then you see pricing curves like this:&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/aws_price_curve.png"&gt;
&lt;/figure&gt;

&lt;p&gt;$6/hr for an instance!? &lt;strong&gt;5000% markup!&lt;/strong&gt; That is stultifying. This &lt;code&gt;m1.medium&lt;/code&gt; is a perfectly fungible resource. You can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pay on-demand rate of &lt;strong&gt;$0.12/hr&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Reserve it for 3 years and pay a combined rate (amortizing down payment) of &lt;strong&gt;$0.042/hr&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Rent it at the median Spot Market rate of &lt;strong&gt;$0.013/hr&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$6/hr is 30% more than that most expensive instance AWS sells (&lt;code&gt;hs1.8xlarge&lt;/code&gt;, $4.60/hr), and this instance is puny by comparison.&lt;/p&gt;</description></item><item><title>Mockito Fails to Inject Autowired Dependency</title><link>https://lust.dev/2013/08/06/mockito-fails-to-inject-autowired-dependency/</link><pubDate>Tue, 06 Aug 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/08/06/mockito-fails-to-inject-autowired-dependency/</guid><description>&lt;p&gt;If you must test Spring beans and you’ve used &lt;code&gt;@autowired&lt;/code&gt; in them, then &lt;strong&gt;you’ll need to use Mockito&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EasyMock&lt;/strong&gt; is &lt;em&gt;easy&lt;/em&gt; for &lt;em&gt;easy things&lt;/em&gt;, but breaks down in this more complex situation. No worries, just let Mockito inject those DI dependencies for you. Ugh oh… they are not injecting. But you’ve read their docs and &lt;em&gt;they should inject!&lt;/em&gt; Sadness.&lt;/p&gt;
&lt;p&gt;Let’s set the stage. Enter our sample class stage left.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SampleImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@autowired&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Foo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;someFoo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;someBar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SampleImpl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;someBar&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;someBar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;someBar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;someFoo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;someBar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doSomthing&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is a typical test for it, that will fail because &lt;code&gt;someFoo&lt;/code&gt; is &lt;code&gt;NULL&lt;/code&gt; as it was never injected.&lt;/p&gt;</description></item><item><title>Caused by: java.lang.ClassNotFoundException: org.apache.ibatis.mapping.DatabaseIdProvider</title><link>https://lust.dev/2013/07/27/caused-by-java-lang-classnotfoundexception-org-apache-ibatis-mapping-databaseidprovider/</link><pubDate>Sat, 27 Jul 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/07/27/caused-by-java-lang-classnotfoundexception-org-apache-ibatis-mapping-databaseidprovider/</guid><description>&lt;p&gt;Perhaps you’ve had this trace recently while trying to get myBatis working on Spring:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Caused by: java.lang.ClassNotFoundException: org.apache.ibatis.mapping.DatabaseIdProvider
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at java.net.URLClassLoader&lt;span class="nv"&gt;$1&lt;/span&gt;.run&lt;span class="o"&gt;(&lt;/span&gt;URLClassLoader.java:217&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at java.security.AccessController.doPrivileged&lt;span class="o"&gt;(&lt;/span&gt;Native Method&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at java.net.URLClassLoader.findClass&lt;span class="o"&gt;(&lt;/span&gt;URLClassLoader.java:205&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at java.lang.ClassLoader.loadClass&lt;span class="o"&gt;(&lt;/span&gt;ClassLoader.java:321&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at sun.misc.Launcher&lt;span class="nv"&gt;$AppClassLoader&lt;/span&gt;.loadClass&lt;span class="o"&gt;(&lt;/span&gt;Launcher.java:294&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at java.lang.ClassLoader.loadClass&lt;span class="o"&gt;(&lt;/span&gt;ClassLoader.java:266&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ... &lt;span class="m"&gt;57&lt;/span&gt; more
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is the bane of open source. You can’t always depend on quality releases. Don’t worry, you followed the tutorial correctly. Let’s take a look at the package’s history in Maven Central.&lt;/p&gt;</description></item><item><title>GWT SuperDevMode Compile Button Missing</title><link>https://lust.dev/2013/07/26/gwt-superdevmode-compile-button-missing/</link><pubDate>Fri, 26 Jul 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/07/26/gwt-superdevmode-compile-button-missing/</guid><description>&lt;p&gt;So you are trying out SuperDevMode on your GWT project, but you’re getting the bookmarklet popup without a compile button? Boo.&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/gwt_dev_mode_copmile_button.png"&gt;
&lt;/figure&gt;

&lt;p&gt;If you’re like me, can’t sleep and decided to attempt SuperDevMode at 5:10AM, then you might &lt;strong&gt;not&lt;/strong&gt; have read the &lt;a href="http://www.gwtproject.org/articles/superdevmode.html"&gt;official documentation&lt;/a&gt; that well. Luckily there is a more &lt;a href="http://stackoverflow.com/questions/11356714/getting-started-with-the-superdevmode?answertab=votes#tab-top"&gt;detailed write&lt;/a&gt; up that will admonish your insomnia addled pate. You see, you’ve almost made it, but &lt;strong&gt;forgotten to enable SupperDevMode in your project’s module.gwt.xml&lt;/strong&gt; file. Just add the below and you’ll be off to the races.&lt;/p&gt;</description></item><item><title>Pebble SDK Shipped!</title><link>https://lust.dev/2013/04/12/pebble-sdk-shipped/</link><pubDate>Fri, 12 Apr 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/04/12/pebble-sdk-shipped/</guid><description>&lt;p&gt;Finally, a rough alpha SDK is &lt;a href="http://developer.getpebble.com/"&gt;in the wild&lt;/a&gt; without the hindrance of an NDA.&lt;/p&gt;
&lt;h2 id="wwwispebblesdkshippingcom"&gt;&lt;a href="http://www.ispebblesdkshipping.com"&gt;www.isPebbleSDKShipping.com&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;and its API have been updated accordingly.&lt;/p&gt;
&lt;h2 id="update"&gt;Update:&lt;/h2&gt;
&lt;p&gt;After keeping my satire site up for a few years, I&amp;rsquo;ve pulled the plug. I hope you enjoyed it.&lt;/p&gt;</description></item><item><title>Disable JavaScript validation in Eclipse</title><link>https://lust.dev/2013/04/07/disable-javascript-validation-in-eclipse/</link><pubDate>Sun, 07 Apr 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/04/07/disable-javascript-validation-in-eclipse/</guid><description>&lt;p&gt;Ever seen this gem before popup when working on a Google Web Toolkit project?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Errors running builder &lt;span class="s1"&gt;&amp;#39;JavaScript Validator&amp;#39;&lt;/span&gt; on project &lt;span class="s1"&gt;&amp;#39;com.your.project&amp;#39;&lt;/span&gt;.1&lt;span class="s2"&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is the trouble. Let’s say you’ve not marked your &lt;code&gt;target/&lt;/code&gt; directory as &lt;code&gt;derived&lt;/code&gt;, so that the GWT Eclipse plugin can launch DevMode from there. Since Eclipse can see these files, it will try to validate that compile, minified JS that GWT created and sometimes die. You don’t want this.&lt;/p&gt;</description></item><item><title>Download InfoQ Books and PDFs without Login</title><link>https://lust.dev/2013/02/27/download-infoq-books-and-pdfs-without-login/</link><pubDate>Wed, 27 Feb 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/02/27/download-infoq-books-and-pdfs-without-login/</guid><description>&lt;p&gt;I just read &lt;a href="http://www.infoq.com/minibooks/good-relationships-spring-data"&gt;Good Relationships&lt;/a&gt; by Michael Hunger. It was a great read to get up to speed on Spring Data Neo4J quickly, and also the only reference out there.&lt;/p&gt;
&lt;p&gt;But, it requires you join InfoQ and give them your personal information to sell to whoever they please. No thanks.&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/infoq_login.png"&gt;
&lt;/figure&gt;

&lt;p&gt;Well, let’s look at those links, what do they really do? Pop open the inspector and look at the link. We see that it calls &lt;code&gt;loginAndDisplayDownloadLink()&lt;/code&gt;. Ok, so what is this function? Well, we can see it displays the content of &lt;code&gt;afterLogin&lt;/code&gt; once complete. So, what is in that element? Oh, I see, the download links!&lt;/p&gt;</description></item><item><title>Is Pebble SDK Shipping?</title><link>https://lust.dev/2013/02/16/is-pebble-sdk-shipping/</link><pubDate>Sat, 16 Feb 2013 00:00:00 +0000</pubDate><guid>https://lust.dev/2013/02/16/is-pebble-sdk-shipping/</guid><description>&lt;p&gt;Since learning about the Pebble almost a year ago, I knew it would be awesome.&lt;/p&gt;
&lt;p&gt;I’m a runner and maintainer of &lt;a href="http://www.runpartner.com"&gt;RunPartner&lt;/a&gt;. Stats about runs are important to me. For years I used various &lt;a href="http://www.garmin.com/us/support/#/%7B6d19e750-030b-11dc-e9ab-000000000000%7D/Running/%7B64bfd220-03bc-11dc-786a-000000000000%7D"&gt;Forerunner watches&lt;/a&gt;. But, Pebble would be better. I’ve written SDK’s for websites to work with the Garmin watches (&lt;a href="https://github.com/lauflabs/gwt-garmin-api"&gt;github&lt;/a&gt;) but I couldn’t change the code on the Forerunner with any neat new ideas. As a software engineer, this is irksome. Yet, the Pebble promises the ability to create my own running watch AND to release it online to anyone to use. Awesome.&lt;/p&gt;</description></item><item><title>GWT JSNI Variables – An Exhaustive List</title><link>https://lust.dev/2012/11/11/gwt-jsni-variables-an-exhaustive-list/</link><pubDate>Sun, 11 Nov 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/11/11/gwt-jsni-variables-an-exhaustive-list/</guid><description>&lt;p&gt;As anyone using the &lt;a href="https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI"&gt;Google Web Toolkit JSNI&lt;/a&gt; knows, there are certain reserved variables, or “dollar words,” exposed by the GWT runtime. While you may be familiar with &lt;code&gt;$wnd&lt;/code&gt; and &lt;code&gt;$doc&lt;/code&gt;, there are more undocumented words. See the exhaustive (as of GWT &lt;code&gt;2.5.0&lt;/code&gt;) list below taken from &lt;a href="http://code.google.com/p/google-web-toolkit/source/browse/trunk/dev/core/src/com/google/gwt/dev/js/ast/JsRootScope.java?r=9287"&gt;source&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="wnd"&gt;$wnd&lt;/h3&gt;
&lt;p&gt;Reference to the root browser window GWT widgets are being rendered to. Note that when called from the iframe linker, GWT code runs in an iframe, not the root browser window, so calling window will reference the wrong window.&lt;/p&gt;</description></item><item><title>Ctrl+Alt+Arrow Broken (and fixed) in Eclipse</title><link>https://lust.dev/2012/10/24/ctrlaltarrow-broken-and-fixed-in-eclipse/</link><pubDate>Wed, 24 Oct 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/10/24/ctrlaltarrow-broken-and-fixed-in-eclipse/</guid><description>&lt;p&gt;If you’re a &lt;em&gt;pragmatic programmer&lt;/em&gt;, then you’ve learned all the shortcuts you can to make your coding day easier. I’ve been a fan of the numerous shortcuts in Eclipse such as &lt;strong&gt;Alt+Shift+S,R&lt;/strong&gt; to create all class accessors/mutators. Still, my favorite has been &lt;strong&gt;Ctrl+Alt+⇑/⇓&lt;/strong&gt; and &lt;strong&gt;Ctrl+⇑/⇓&lt;/strong&gt; to instantly duplicate a line above or below the current line and to move it around. Who has time to select, copy, move, paste? Plus, you can now save your copy/paste buffer for more important things, like that LinkedIn password you keep changing &lt;a href="http://www.pcworld.com/article/257045/6_5m_linkedin_passwords_posted_online_after_apparent_hack.html"&gt;each time they’re hacked&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Spring’s RememberMe and BadCredentialsException</title><link>https://lust.dev/2012/10/17/springs-rememberme-and-badcredentialsexception/</link><pubDate>Wed, 17 Oct 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/10/17/springs-rememberme-and-badcredentialsexception/</guid><description>&lt;p&gt;Spring is pretty swell, but the documentation is never what you need. It would be like reading an anatomy book about every organ in the body, but never being shown a picture of all of them together, and then trying to conduct a surgery.&lt;/p&gt;
&lt;p&gt;I was assembling Spring Security for a rewrite of &lt;a href="http://www.runpartner.com"&gt;RunPartner.com&lt;/a&gt; and read the &lt;!-- raw HTML omitted --&gt;RememberMe chapter of Spring Security&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;http&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;remember-me&lt;/span&gt; &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;myAppKey&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/http&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since I needed a database backed implementation, I liked the next example.&lt;/p&gt;</description></item><item><title>Custom CloudWatch Metric Tutorial: FreeMemory and Cron</title><link>https://lust.dev/2012/07/22/custom-cloudwatch-metric-tutorial-freememory-and-cron/</link><pubDate>Sun, 22 Jul 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/07/22/custom-cloudwatch-metric-tutorial-freememory-and-cron/</guid><description>&lt;h3 id="disclaimer-custom-metrics-are-050-usd-a-month-use-judiciously"&gt;Disclaimer: Custom metrics are $0.50 USD a month. Use judiciously.&lt;/h3&gt;
&lt;p&gt;I want to be able to set alarms when nodes are getting memory starved and to analyze memory trends. Doing this for disk space, heap space, etc is a simple modification of the below tutorial.&lt;/p&gt;
&lt;p&gt;Since the AWS docs have no complete example on how to do this, I wanted to provide one. I set this up using nothing but bash and cron (&lt;!-- raw HTML omitted --&gt;other examples&lt;!-- raw HTML omitted --&gt; use Python). My goal was a very simple example.&lt;/p&gt;</description></item><item><title>Easy Bulk CloudFront Invalidations vis AWS Console</title><link>https://lust.dev/2012/07/20/easy-bulk-cloudfront-invalidations-vis-aws-console/</link><pubDate>Fri, 20 Jul 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/07/20/easy-bulk-cloudfront-invalidations-vis-aws-console/</guid><description>&lt;p&gt;Google for invalidating a bunk of CloudFront files and you’ll find many utilities to help you, but did you know you can do it easily through the AWS Console?&lt;/p&gt;
&lt;p&gt;Just visit &lt;strong&gt;CloudFront &amp;gt; Distribution Settings &amp;gt; Invalidations &amp;gt; Create Invalidation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now provide the folder and wildcard to blow away a bunch of files!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i.e. images/*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure&gt;&lt;img src="./img/cloudfront_invalidations.png"&gt;
&lt;/figure&gt;

&lt;p&gt;See, and you did not need to write a rate controlled script, pay a 3rd party monthly website, or enter your secret AWS credentials into some shady webapp!&lt;/p&gt;</description></item><item><title>LogRotate Apache Logs to Amazon S3</title><link>https://lust.dev/2012/07/15/logrotate-apache-logs-to-amazon-s3/</link><pubDate>Sun, 15 Jul 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/07/15/logrotate-apache-logs-to-amazon-s3/</guid><description>&lt;figure&gt;&lt;img src="./img/logrotate.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Legacy Log Rotation before gzip &amp;amp; scp&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I recently moved my site &lt;a href="www.runpartner.com"&gt;RunPartner&lt;/a&gt; to Amazon Web Services (AWS) from DreamHost because for just a few more peanuts a month I got a ton of enterprise grade services, and the server does not crash randomly any more. 😊&lt;/p&gt;
&lt;p&gt;I’m loving AWS, but one thing I wanted to do was consolidate all logs to S3. Let’s say your site gets SlashDotted or Pinned. One of the first failure modes is that your logs swell up, and you’re out of disk space. Since my EC2 instance has just 8GB, this is possible. But why not use that infinite storage pool in the sky, S3? Perfect.&lt;/p&gt;</description></item><item><title>GWT war file Size Reduction – a.k.a GWT Weightloss</title><link>https://lust.dev/2012/07/03/gwt-war-file-size-reduction-a-k-a-gwt-weightloss/</link><pubDate>Tue, 03 Jul 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/07/03/gwt-war-file-size-reduction-a-k-a-gwt-weightloss/</guid><description>&lt;p&gt;GWT is great, but the size and number of files compiled can slowly creep upward. In a large project, this can mean your &lt;code&gt;war&lt;/code&gt; file contains thousands of unneeded files. On environments like AppEngine, where the size of your war is limited, this introduces an upper bound on the application size.&lt;/p&gt;
&lt;p&gt;Don’t worry, you can easily slim that war down.&lt;/p&gt;
&lt;h3 id="the-stowaways"&gt;The Stowaways&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.gwt-tmp/&lt;/code&gt; - used in the compile process, we don’t need them anymore&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_.junit_symbolMaps/&lt;/code&gt; - used by junit, not needed in production&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEB-INF/classes/com/yourPkg/&lt;/code&gt; - compiled java classes, but client runs JS&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;h3 id="maven-to-the-rescue"&gt;Maven to the rescue&lt;/h3&gt;
&lt;p&gt;The following line used when packaging your war using the &lt;strong&gt;maven-antrun-plugin&lt;/strong&gt; does the trick, or you can just do it by hand or your scripting framework of choice.&lt;/p&gt;</description></item><item><title>“Add a Browser” – GWT Eclipse Plugin</title><link>https://lust.dev/2012/06/02/add-a-browser-gwt-eclipse-plugin/</link><pubDate>Sat, 02 Jun 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/06/02/add-a-browser-gwt-eclipse-plugin/</guid><description>&lt;p&gt;Ever get annoyed that you need to “Add a Browser” to the GWT Eclipse Plugin’s launch panel every use to launch Google Chrome or Mozilla Firefox? I think I’ve done this about a hundred times over the last year, so I figured out how to fix it and now this answer will be on Google to help everyone else.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;figure&gt;&lt;img src="./img/gwt_browser.png"&gt;
&lt;/figure&gt;

&lt;p&gt;You close Eclipse and those browsers you added have been forgotten the next time you want to run a GWT Web Application. And so, you add then yet again…&lt;/p&gt;</description></item><item><title>Installing Oracle JDK on Ubuntu 11.10</title><link>https://lust.dev/2012/02/25/installing-oracle-jdk-on-ubuntu-11-10/</link><pubDate>Sat, 25 Feb 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/02/25/installing-oracle-jdk-on-ubuntu-11-10/</guid><description>&lt;p&gt;It’s a shame IBM didn’t buy Sun, since the guys at Oracle are just not much fun. Case in point, you can’t just &lt;code&gt;apt-get&lt;/code&gt; the Oracle JDK/JRE. No, that would be too easy and Oracle does not want you to be their friend. Rather, they’d prefer you register with their site, accept their legal terms, and download/install everything manually because this is the &lt;em&gt;right&lt;/em&gt; way to discourage the use of Java.&lt;/p&gt;</description></item><item><title>Remote Desktop Service is currently Busy</title><link>https://lust.dev/2012/02/05/remote-desktop-service-is-currently-busy/</link><pubDate>Sun, 05 Feb 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/02/05/remote-desktop-service-is-currently-busy/</guid><description>&lt;p&gt;Technology fails us when we least desire it. This week I needed to remote into a Win7 system and got a most unusual message:&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/rdp_busy.png"&gt;
&lt;/figure&gt;

&lt;p&gt;This message is not very helpful. Evidently I can’t log in. Other people can, and puportedly I can in the future some time, but not now. No, you are not invited. Come back later.&lt;/p&gt;
&lt;p&gt;I tried &lt;em&gt;again in a few minutes&lt;/em&gt; a number of times to no effect. Googling found only small cohorts of discontented users on MS message boards with no known recourse. So here was mine:&lt;/p&gt;</description></item><item><title>GWT Maps API v3 and Maven</title><link>https://lust.dev/2012/01/29/gwt-maps-api-v3-and-maven/</link><pubDate>Sun, 29 Jan 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/01/29/gwt-maps-api-v3-and-maven/</guid><description>&lt;h3 id="deprecated"&gt;Deprecated&lt;/h3&gt;
&lt;p&gt;This post was for building the pre-alpha version of the&lt;a href="https://github.com/branflake2267/GWT-Maps-V3-Api"&gt;GWT-Maps-V3-API&lt;/a&gt;. However, it’s now fully Mavenized and hosted on &lt;a href="https://github.com/branflake2267/GWT-Maps-V3-Api"&gt;GitHib&lt;/a&gt;. Please check it out from there and simply build it.&lt;/p&gt;
&lt;h3 id="original-post"&gt;Original Post&lt;/h3&gt;
&lt;p&gt;I’ve been a great fan of &lt;a href="https://plus.google.com/u/1/111739836936169749229/posts"&gt;Brandon Donnelson’s&lt;/a&gt; ongoing &lt;a href="http://code.google.com/p/gwt-maps-api/"&gt;gwt-maps-api&lt;/a&gt; project. However, I also love the simplicity Maven brings to my projects and life as a whole. The following is how to build the &lt;em&gt;gwt-maps-api&lt;/em&gt; project using Maven (m2e) and Eclipse (Indigo). Note that since the project is still prebeta, the below are subject to change. Post a comment if you have an issue or suggestion.&lt;/p&gt;</description></item><item><title>GWT Module’s Missing DTD Tag</title><link>https://lust.dev/2012/01/29/gwt-modules-missing-dtd-tag/</link><pubDate>Sun, 29 Jan 2012 00:00:00 +0000</pubDate><guid>https://lust.dev/2012/01/29/gwt-modules-missing-dtd-tag/</guid><description>&lt;figure&gt;&lt;img src="./img/gwt_modules_tag_missing.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;GWT Module AutoSuggestion Magic&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;DTD’s are great. They let IDE’s like Eclipse know what is and is not valid XML. And, when you’re unsure or inquisitive, you can just &lt;code&gt;ALT+ENTER&lt;/code&gt; and learn every available tag. That is amazing. Alas, &lt;strong&gt;it seems that Google and GWT continue to ignore this standard&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;However, you can add these tags yourself and get the IDE auto-validation auto-suggestion features. Just change the top of your module.get.xml &lt;strong&gt;to the following&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Password Hasher : Every Hash Under the Sun</title><link>https://lust.dev/2011/10/08/password-hasher-every-hash-under-the-sun/</link><pubDate>Sat, 08 Oct 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/10/08/password-hasher-every-hash-under-the-sun/</guid><description>&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;figure&gt;&lt;img src="./img/cornedBeefHash.jpg"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Big helping of hash&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I got tired of having to find a place to run all my hashes frequently for random projects, so I through this together in a few lines. I hope it helps folks.&lt;/p&gt;
&lt;p&gt;The following hashes are provided: &lt;code&gt;md2&lt;/code&gt;, &lt;code&gt;md4&lt;/code&gt;, &lt;code&gt;md5&lt;/code&gt;, &lt;code&gt;sha1&lt;/code&gt;, &lt;code&gt;sha224&lt;/code&gt;, &lt;code&gt;sha256&lt;/code&gt;, &lt;code&gt;sha384&lt;/code&gt;, &lt;code&gt;sha512&lt;/code&gt;, &lt;code&gt;ripemd128&lt;/code&gt;, &lt;code&gt;ripemd160&lt;/code&gt;, &lt;code&gt;ripemd256&lt;/code&gt;, &lt;code&gt;ripemd320&lt;/code&gt;, &lt;code&gt;whirlpool&lt;/code&gt;, &lt;code&gt;tiger128,3&lt;/code&gt;, &lt;code&gt;tiger160,3&lt;/code&gt;, &lt;code&gt;tiger192,3&lt;/code&gt;, &lt;code&gt;tiger128,4&lt;/code&gt;, &lt;code&gt;tiger160,4&lt;/code&gt;, &lt;code&gt;tiger192,4&lt;/code&gt;, &lt;code&gt;snefru&lt;/code&gt;, &lt;code&gt;snefru256&lt;/code&gt;, &lt;code&gt;gost&lt;/code&gt;, &lt;code&gt;adler32&lt;/code&gt;, &lt;code&gt;crc32&lt;/code&gt;, &lt;code&gt;crc32b&lt;/code&gt;, &lt;code&gt;salsa10&lt;/code&gt;, &lt;code&gt;salsa20&lt;/code&gt;, &lt;code&gt;haval128,3&lt;/code&gt;, &lt;code&gt;haval160,3&lt;/code&gt;, &lt;code&gt;haval192,3&lt;/code&gt;, &lt;code&gt;haval224,3&lt;/code&gt;, &lt;code&gt;haval256,3&lt;/code&gt;, &lt;code&gt;haval128,4&lt;/code&gt;, &lt;code&gt;haval160,4, haval192,4, haval224,4, haval256,4, haval128,5, haval160,5, haval192,5, haval224,5, haval256,5&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Cygwin Visible Bell Enable</title><link>https://lust.dev/2011/10/03/cygwin-visible-bell-enable/</link><pubDate>Mon, 03 Oct 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/10/03/cygwin-visible-bell-enable/</guid><description>&lt;p&gt;Cygwin is amazing for those of us stuck on Windows. The bell is not always so grand. I prefer a visible bell (like in &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html"&gt;Putty&lt;/a&gt;) rather than a “ding!” when I’ve got my music going.&lt;/p&gt;
&lt;p&gt;To enable the visible bell add the following to &lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; bell-style visible
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ah, that&amp;rsquo;s much better! Thanks again Cygwin!&lt;/p&gt;</description></item><item><title>(Really) Free Zipcode Database Download</title><link>https://lust.dev/2011/07/20/really-free-zipcode-database-download/</link><pubDate>Wed, 20 Jul 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/07/20/really-free-zipcode-database-download/</guid><description>&lt;p&gt;It just drives me nuts that the web is full of zipcode database downloads that are not free! It is not like the resellers did anything special to compile this information. The USPS publishes it for a fee, and then they charge you a fee for &lt;a href="https://www.usps.com/business/web-tools-apis/address-information-api.htm#_Toc410982986"&gt;publicly available information&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s just not acceptable. So, I’ve written some &lt;a href="https://github.com/twistedpair/Open-Zipcode-Database"&gt;scripts&lt;/a&gt; to gather all known zip codes (from &lt;code&gt;00000&lt;/code&gt; – &lt;code&gt;99999&lt;/code&gt;) and placed them below in several common formats. Enjoy, and let information like this be free!&lt;/p&gt;</description></item><item><title>Comparing BigDecimals with Round and SetScale</title><link>https://lust.dev/2011/07/14/comparing-bigdecimals-with-round-and-setscale/</link><pubDate>Thu, 14 Jul 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/07/14/comparing-bigdecimals-with-round-and-setscale/</guid><description>&lt;p&gt;In Java financial programming, you need the precision &lt;a href="http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html" title="JavaDoc"&gt;BigDecimals&lt;/a&gt; afford. However, due to the great precision of this value, comparisons are very error prone. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;000000000000000000000000000000001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For most cases, we want to round when the calculations are complete to the desired precision, rather than during intermediate steps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DON&amp;rsquo;T USE &lt;a href="http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#round(java.math.MathContext)"&gt;round()&lt;/a&gt;&lt;/strong&gt; as it sets the number of significant digits, not the number of decimals. It will lead to odd behavior if you do, as shown below. Note that&lt;/p&gt;</description></item><item><title>Open ExtJs Menu on Mouseover</title><link>https://lust.dev/2011/07/06/open-extjs-menu-on-mouseover/</link><pubDate>Wed, 06 Jul 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/07/06/open-extjs-menu-on-mouseover/</guid><description>&lt;p&gt;Would you believe there is no way to open an ExtJs toolbar menu when you hover over the corresponding button? This functionality is all over the ExtJs &lt;a href="https://www.sencha.com"&gt;homepage&lt;/a&gt;, but not in their framework. Boo! Nope, nothing without pulling the buttons out of the toolbar (see &lt;!-- raw HTML omitted --&gt;here&lt;!-- raw HTML omitted --&gt;), which is a no go for existing applications.&lt;/p&gt;
&lt;p&gt;So, I present you with the &lt;strong&gt;HoverButton&lt;/strong&gt;. It is just like the standard button, but hides after &lt;code&gt;250ms&lt;/code&gt; of mouseout from the button or the opened menu. Just use the &lt;code&gt;xtype&lt;/code&gt; of &lt;strong&gt;hoverButton&lt;/strong&gt; where you used &lt;strong&gt;button&lt;/strong&gt; before. That was easy!&lt;/p&gt;</description></item><item><title>Windows Downloads without Windows Genuine Advantage</title><link>https://lust.dev/2011/07/02/windows-downloads-without-windows-genuine-advantage/</link><pubDate>Sat, 02 Jul 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/07/02/windows-downloads-without-windows-genuine-advantage/</guid><description>&lt;p&gt;I found myself needing to &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=3702"&gt;download Virtual PC&lt;/a&gt; from Microsoft recently to test an application. I have a bonafide copy of windows, but my enterprise anti-virus won’t let me run WGA. No problem, we’ll just snoop around the MS site.&lt;/p&gt;
&lt;p&gt;The following modal keeps prompting an ineffective download of WGA.&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/wga_example.png"&gt;
&lt;/figure&gt;

&lt;p&gt;However, let’s fire up Chrome and look at the html in the page.&lt;/p&gt;
&lt;figure&gt;&lt;img src="./img/wga_example_2.png"&gt;
&lt;/figure&gt;

&lt;p&gt;Hmm, check out the div &lt;strong&gt;GenuineCheck_Validated_Successful&lt;/strong&gt;. I bet there is a link in it. So let’s check inside.  Bingo!&lt;/p&gt;</description></item><item><title>ExtJs Field getForm() Override</title><link>https://lust.dev/2011/06/19/extjs-field-getform-override/</link><pubDate>Sun, 19 Jun 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/06/19/extjs-field-getform-override/</guid><description>&lt;p&gt;When using the DOM directly, if you have the element reference to an &lt;code&gt;&amp;lt;INPUT&amp;gt;&lt;/code&gt; object, you can reference its parent via &lt;code&gt;el.form&lt;/code&gt;. However, in ExtJs, &lt;strong&gt;there is no such accessor for the form of field&lt;/strong&gt;. The following ExtJs override adds the &lt;code&gt;getForm()&lt;/code&gt; method to a field which will search upward through the ExtDOM until it finds a parent form, or hits a recursion depth of 10.&lt;/p&gt;
&lt;p&gt;Example usage:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Example useage
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;myField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;myField&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getForm&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Override code: Include this before your form.&lt;/p&gt;</description></item><item><title>YUI Compressor CSS Barfs on Unclosed Apostrophe</title><link>https://lust.dev/2011/05/24/yui-compressor-css-barfs-on-unclosed-apostrophe/</link><pubDate>Tue, 24 May 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/05/24/yui-compressor-css-barfs-on-unclosed-apostrophe/</guid><description>&lt;p&gt;I was running my deployment script last night, which includes the &lt;a href="https://yui.github.io/yuicompressor"&gt;YUI compressor&lt;/a&gt;, and it went KABOOM! Not good.&lt;/p&gt;
&lt;p&gt;I knew from the massive stack trace that it failed during YUI CSS processing. The stacktrace was a mile long, too long to be contained in the 5000 line terminal buffer, so I did a quick binary search removing files from the include list, and then lines from the culprit CSS file. This was the problem:&lt;/p&gt;</description></item><item><title>Update ExtJs TabPanel Tab Title</title><link>https://lust.dev/2011/05/01/update-extjs-tab-title/</link><pubDate>Sun, 01 May 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/05/01/update-extjs-tab-title/</guid><description>&lt;p&gt;Isn’t &lt;a href="https://www.sencha.com/products/extjs/"&gt;ExtJs&lt;/a&gt; the cat’s meow? I think so, but many cats have hairballs. For ExtJs, this includes missing the ability to update the title of a &lt;code&gt;TabPanel&lt;/code&gt; tab title once it has been rendered. Sure, you can find the &lt;em&gt;item&lt;/em&gt; and &lt;em&gt;title&lt;/em&gt; properties for your tab post-render, but that won’t update your page. You need to crawl the DOM. I’ve created an update to do just this.&lt;/p&gt;
&lt;p&gt;Just paste the below override in your code and you can then call the &lt;code&gt;setTabTitle(tabNo,newTitle)&lt;/code&gt; method to update a given tab title. You’ll need to know the index of your tab in the tab panel.&lt;/p&gt;</description></item><item><title>Extjs Hidden Textfield Missing</title><link>https://lust.dev/2011/04/03/extjs-hidden-textfield-missing/</link><pubDate>Sun, 03 Apr 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/04/03/extjs-hidden-textfield-missing/</guid><description>&lt;p&gt;I love &lt;a href="https://www.sencha.com/products/extjs/"&gt;ExtJS&lt;/a&gt;, but some days it just does not love me back.&lt;/p&gt;
&lt;p&gt;For instance, if you have a hidden textfield, and you &lt;strong&gt;don&amp;rsquo;t set the width property, it won&amp;rsquo;t be added to your form&lt;/strong&gt;. Sure, you say, why would you need the width for a hidden input? Well, ExtJS thinks you might call &lt;code&gt;myHiddenTextfield.show()&lt;/code&gt; some day, so it still needs to put it in there with a width. No width, no love.&lt;/p&gt;</description></item><item><title>Console2 Arrow Keys Madness</title><link>https://lust.dev/2011/04/02/console2-arrow-key-error/</link><pubDate>Sat, 02 Apr 2011 00:00:00 +0000</pubDate><guid>https://lust.dev/2011/04/02/console2-arrow-key-error/</guid><description>&lt;figure&gt;&lt;img src="./img/cygwin_wtf.png"&gt;
&lt;/figure&gt;

&lt;p&gt;I’m writing to tell you how to fix this error since it just drove me mad for 20 minutes.&lt;/p&gt;
&lt;p&gt;If you are an avid user of &lt;a href="http://sourceforge.net/projects/console/"&gt;Console2&lt;/a&gt;, which any Windows user should be, you might notice one day that your &lt;strong&gt;arrow keys scroll up and down, rather than select the most recent command&lt;/strong&gt;. Why the heck would that happen? It does not happen in the Microsoft cmd window, but it will in &lt;a href="http://www.cygwin.com/install.html"&gt;Cygwin&lt;/a&gt; and Cmd under Console2.&lt;/p&gt;</description></item><item><title>Convert MySQL Dump to Routines Files [PHP script]</title><link>https://lust.dev/2010/11/06/convert-mysql-dump-to-routines-php-script/</link><pubDate>Sat, 06 Nov 2010 00:00:00 +0000</pubDate><guid>https://lust.dev/2010/11/06/convert-mysql-dump-to-routines-php-script/</guid><description>&lt;p&gt;Perhaps you are like me and… well… didn&amp;rsquo;t get righteous about backuping up your MySQL routines to an SCM until your first database scare?&lt;/p&gt;
&lt;p&gt;If you did, you’d wish you could just take that database export script from &lt;a href="https://www.phpmyadmin.net"&gt;PHPMyAdmin&lt;/a&gt; and parse / convert it to a bunch of tidy little Procedure, Function, and Trigger files. Why, that would be nice!&lt;/p&gt;
&lt;p&gt;The following PHP script (PHP 5+) will do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breakout procedure/function/trigger as &lt;code&gt;[type\_name]/[routine\_name].sql&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;Strip off those pesky &lt;code&gt;DEFINER&lt;/code&gt; statements that cause nothing but trouble&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;DROP ``` &lt;/code&gt;X&lt;code&gt; ``` IF EXISTS&lt;/code&gt; before &lt;code&gt;CREATE&lt;/code&gt; statements, for easier editing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: script will create &lt;code&gt;procedures/&lt;/code&gt;, &lt;code&gt;functions/&lt;/code&gt;, and &lt;code&gt;triggers/&lt;/code&gt; directories where you specify.&lt;/p&gt;</description></item><item><title>Unittesting with PhpDesigner and SimpleTest</title><link>https://lust.dev/2010/11/01/unittesting-with-phpdesigner/</link><pubDate>Mon, 01 Nov 2010 00:00:00 +0000</pubDate><guid>https://lust.dev/2010/11/01/unittesting-with-phpdesigner/</guid><description>&lt;p&gt;Here is how to unitest within &lt;a href="http://www.mpsoftware.dk/phpdesigner.php"&gt;PhpDesigner&lt;/a&gt;. The following was done on a Windows 7 machine with PhpDesigner 7.2.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;!-- raw HTML omitted --&gt;WAMP server&lt;!-- raw HTML omitted --&gt; on your Windows machine. This is needed because the default PhpDesigner PHP engine cannot connect to databases (i.e. MySQL).&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Just use the default installer setup and location&lt;/li&gt;
&lt;li&gt;We’ll assume your WAMP is installed in &lt;code&gt;c:\wamp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Now point your PhpDesigner at the WAMP.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PhpDesigner&lt;/strong&gt; &amp;gt; &lt;strong&gt;Tools&lt;/strong&gt; &amp;gt; &lt;strong&gt;Preferences…&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Set the &lt;em&gt;Debugger&lt;/em&gt; to use the &lt;em&gt;PHP Interpreter&lt;/em&gt; your &lt;code&gt;c:\wamp\bin\php\php5.3.0\php-cgi.exe&lt;/code&gt; and the init file &lt;code&gt;c:\WAMP\bin\php\php5.3.0\php.ini&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set the &lt;em&gt;Syntax Checker&lt;/em&gt; to use the above values too&lt;/li&gt;
&lt;li&gt;Set &lt;em&gt;Run&lt;/em&gt; to use the above values too&lt;/li&gt;
&lt;li&gt;Point your &lt;em&gt;Localhost&lt;/em&gt; folder to the WAMP localhost &lt;code&gt;c:\wamp\www\&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Restart your PhpDesigner installation&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Now download and install the &lt;!-- raw HTML omitted --&gt;SimpleTest &lt;!-- raw HTML omitted --&gt;unittesting framework&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Just download the files (&lt;strong&gt;1.0.1 recommended&lt;/strong&gt;, I could not get 1.1 released 2 days ago to run)&lt;/li&gt;
&lt;li&gt;Unzip the files to the location of your PHP project&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="4"&gt;
&lt;li&gt;
&lt;p&gt;Create a helloworld test and run it from the comfort of PhpDesginer!&lt;/p&gt;</description></item><item><title>Cracking WordPress Hashcash</title><link>https://lust.dev/2010/07/17/cracking-wordpress-hashcash/</link><pubDate>Sat, 17 Jul 2010 00:00:00 +0000</pubDate><guid>https://lust.dev/2010/07/17/cracking-wordpress-hashcash/</guid><description>&lt;p&gt;As many know, &lt;a href="https://wordpress.org/plugins/hashcash/"&gt;WordPress Hashcash&lt;/a&gt; is not a &lt;a href="http://en.wikipedia.org/wiki/Hashcash"&gt;hashcash&lt;/a&gt; at all. This is more than merely semantics. A true hashcash would provide protections to blogs from spam bots, but WPHC does no such thing. Rather WPHC merely projects an aura of protection that even the most novitiate script kiddie can crack.&lt;/p&gt;
&lt;p&gt;According to the &lt;!-- raw HTML omitted --&gt;authors of WPHC&lt;!-- raw HTML omitted --&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;WP Hashcash is an antispam plugin that eradicates comment spam on WordPress blogs.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Hot Damn!</title><link>https://lust.dev/2010/04/27/hot-damn/</link><pubDate>Tue, 27 Apr 2010 00:00:00 +0000</pubDate><guid>https://lust.dev/2010/04/27/hot-damn/</guid><description>&lt;p&gt;I&amp;rsquo;m Joseph Lust.&lt;/p&gt;
&lt;p&gt;I do many interesting and curious things. I&amp;rsquo;ve resisted the &amp;ldquo;weblog&amp;rdquo; or so called &amp;ldquo;blog&amp;rdquo; movement for some time, mainly due to aversion to the bastardization of the English language that is the word &amp;ldquo;&lt;a href="http://www.merriam-webster.com/dictionary/blog"&gt;blog&lt;/a&gt;&amp;rdquo;. However, the bastards &lt;a href="https://en.wikipedia.org/wiki/Lists_of_Merriam-Webster%27s_Words_of_the_Year#2004"&gt;have won&lt;/a&gt;, and it&amp;rsquo;s high time I got my thoughts online, as they might benefit others.&lt;/p&gt;
&lt;p&gt;Unlike most WordPress blogs that run the default theme and never see more than one post, this one will.&lt;/p&gt;</description></item><item><title>About the Lust</title><link>https://lust.dev/about/</link><pubDate>Fri, 01 Jan 2010 00:00:00 +0000</pubDate><guid>https://lust.dev/about/</guid><description>&lt;p&gt;Hey, I’m Joseph Lust&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re a nerd. I know this because you found this site. Otherwise you&amp;rsquo;re an AI bot. Hi, Bot.&lt;/p&gt;
&lt;p&gt;So, about me? I&amp;rsquo;m an intellectually curious human that likes to master things.
Sometimes it’s mastery of an athletic pursuit, others times it’s understanding of history or scientific principles. Complex systems entertain me. Simple solutions inspire me. Pedagogy lets me give back to others.&lt;/p&gt;
&lt;p&gt;Any given weekend you might find me running a half marathon, reading a &lt;a href="%22https://scholar.smu.edu/cgi/viewcontent.cgi?article=1305&amp;amp;context=jalc%22"&gt;treatise on ETOPS&lt;/a&gt;, hiking a remote Norwegian fjord, or drafting a &lt;a href="https://www.meetup.com/GDGCloudBoston/"&gt;meetup&lt;/a&gt; presentation.&lt;/p&gt;</description></item></channel></rss>