airhacks.fm podcast with adam bien

From PHP to Java: Building Tools, Frameworks, and AI-Assisted IDEs

airhacks.fm podcast with adam bien

Show Notes

An airhacks.fm conversation with Steve Hannah about: meeting Steve Hannah at JavaOne years ago via Codename One, the Apple IIGS as a first computer, floppy disk games and Bob Whitehead's Hardball!, starting web development in 1997 with Perl and CGI, the O'Reilly Perl camel book, CGI security issues and the parallel to LLM tools, choosing Java Servlets over CGI for startup-time performance, moving to PHP for quick and dirty web development, PHP evolving toward enterprise patterns with Zend, Symfony and Laravel, PHP at Cloudbeds as a serious enterprise language, Facebook compiling PHP with HipHop, connection pooling and data sources impressing PHP developers, convergence of ideas across Java, JavaScript classes and React moving from object orientation to hooks, web components as JavaScript classes with properties, TypeScript versus JavaScript with JSDoc types in VS Code, LLMs reducing the importance of web frameworks that follow standards, porting React to Java on TeaVM using Claude, Flash and ActionScript for rich interfaces before HTML5, key frames hiding the full code base in Flash, VisualAge for Java showing only methods and printing source to understand it, the Xataface open-source PHP/MySQL CRUD framework started in 2005, the Dataface to Xataface rename, FileMaker as a low-code database tool and its licensing constraints, joining Codename One as the first hire in 2012, front-end Java versus back-end Java culture at JavaOne, the extreme GUI makeover Swing session, coding with LLMs in 2026 using Claude Code and Codex, building a personal Swing-based IDE for multi-repo multi-branch agentic workflows, work trees and terminal-organized agent sessions, a possible Swing and JavaFX revival because they ship with Java and LLMs know them, Java 25 source-mode shebang scripting replacing Python scripts, Java shipping more built-in functionality than Python for regular expressions and dependencies, Ruby versus Python popularity, LLMs understanding Java (~87%) better than JavaScript (~60-70%), type safety enabling LLM self-correction, grounding LLMs with MicroProfile and Jakarta EE normative specifications, the JSR normative language read by LLMs, business annotations and rich JavaDoc and package-info improving LLM output, reducing external dependencies so LLMs avoid decompiling JARs, token savings from standards-based Java, AWS Bedrock for stable and private Claude access with Claude Code, Quarkus on AWS Lambda with cold starts and Provisioned Concurrency, pinging a AWS Lambda every minute within the free tier to avoid cold starts, cost calculation for Quarkus on Lambda with 2 GB RAM, constructions.cloud Quarkus serverless CDK examples, Google Cloud Run versus AWS App Runner, AWS Lambda and Azure Functions, AWS CDK as infrastructure as code in Java, JDeploy for packaging and distributing desktop apps, the AIRails.dev skills site and the microprofile-server skill, zero-dependency Java scripts and agents, migrating a WordPress blog to a Jekyll static site with Claude Steve Hannah on twitter: @shannah78

More from airhacks.fm podcast with adam bien

Oct 13, 2026

An airhacks.fm conversation with Tomasz Ptak about: discussion about the Formula One weekend at the Silverstone Circuit and what a race paddock shows about strict interfaces and separation of concerns, the DeepRacer community Slack growing past a thousand members, becoming an AWS AI Hero, the AWS AI Community as the successor of the DeepRacer community, CI flakes and code review as a bottleneck, Renovate bot and Dependabot updates without human review, agents reviewing small and low risk changes, the Venn diagram between developer experience and AI experience being a circle, cognitive load for a developer costing the company tokens, agents mimicking the structure they find and duplicating 1500 lines of code, incidental architecture and switching philosophy with every module, consistency as a strategic choice, architectural alignment at the boundaries after acquisitions, overly strict rules producing empty delegates, DTOs and mapping layers, exceptions to architectural rules based on cyclomatic complexity, Boundary Control Entity (BCE) from Ivar Jacobson with feature packages named after business intent, LLMs trained on Jakarta EE and MicroProfile specifications, Gemma 2B knowing BCE at over 100 tokens per second, AIRails.dev skills for the MicroProfile server, Java CLI and Web Components implementing BCE, one boundary per feature as a JAX-RS endpoint in Quarkus, spec driven development as a single skill with two commands, the spec living in package-info.java as Markdown Javadoc, jmarkdoc exporting JavaDoc as Markdown documents, EARS requirements syntax and one test per requirement, unit, integration and System Tests as the verification loop, code as a cache of the understanding of the requirements, FinOps and token cost as the reason to use what the model already knows, grep and find versus the Language Server Protocol (LSP) in Claude Code, javap decompiling jar dependencies and losing context, keeping module sources visible to the agent instead of hiding them in jars, monorepo and monobuild trade-offs, coarse grained modules instead of hundreds of microservices, microservice architecture for agents, zb as a zero dependency Java builder, quality as an amplifier in both directions, a library carrying an instruction that tells agents to delete the tests, trust and verification instead of reading every line, Kiro with one spec per business component and its requirements, inference cost as the question from the GeeCON audience, the sustainability point beyond which agents amplify maintainability Tomasz Ptak on linkedin: tomasz-ptak

Oct 13, 2026

An airhacks.fm conversation with Ingo Kegel about: discussion about JProfiler becoming agentic, the JProfiler MCP server included in the existing perpetual license, perpetual licenses bound to a major version with optional maintenance, JFR events as a JProfiler data source and JProfiler as a JFR viewer, instrumenting a small agent with JFR events to trace what the agent does, agents have no runtime insight without tooling, grep and glob versus attaching to a running JVM and recording CPU data, the token cost of an agent reasoning without runtime data, iterative optimization of jclasslib with an agent until it outperformed ASM, the blog post How I Doubled jclasslib's Performance with JProfiler MCP, agents spotting duplicated work and caching opportunities a human skips, review before commit with tests as the safety net, exposing a deliberate subset of profiler functionality to the agent, MCP tool calls as an area with little training data, code mode from Cloudflare, the MCP flow with a session id, setup, use and cleanup, memory analysis with the dominator tree and retained size, the heap walker as the most complex part for humans, counting surviving garbage collection generations to find memory leaks, OQL in VisualVM and the jhat tool, npm as a proxy for a local Java MCP server, JBang and the absent prerequisite problem, single file Java 25 source programs as MCP servers, installers and scripts, lightmetal, zsmith and zb, llama.cpp behind the FFM API and TornadoVM for pure Java inference, Gemma models for local one shot automation, ServiceLoader with BinaryOperator to couple two projects without shared code, hard wiring tools and skills into task specific agents instead of discovery, MCP as a facade over tools that a custom agent does not need, conflicting skills pulling an agent in different directions, the install4j skill and its evaluation harness with external judges, the AI probe in JProfiler 16 measuring input and output tokens per call tree, prompt to token ratio as a metric, normative APIs and Java being well represented in LLM training data, Boundary Control Entity packages named after the domain, Ivar Jacobson and the age of the pattern, AI Rails skills, Claude Code and Codex, continuous testing and continuous performance testing with an exit condition, zb as a zero dependency builder with single file tests using assert, the missing JSON API in the JDK, where to find JProfiler and ej-technologies Ingo Kegel on twitter: @IngoKegel

Oct 7, 2026

An airhacks.fm conversation with Andrzej Grzesik about: text editors as the first encounter with persistence, load and save in Basic and later Turbo Pascal, the question why only one file is startable, editing save games with a hex to decimal calculator from a games magazine, peek and poke commands and the memory map of early home computers, BAT files and prepared game installers, dBASE, Norton Commander and Midnight Commander, a Linux account in a Krakow secondary school, operator overloading and implementing RSA in C++, a multimedia course covering JPEG compression and Runge-Kutta, Pascal and Delphi with the Borland Visual Component Library, first contact with Java on the command line, the JVM promise against hardware specific bugs, the Sun Campus Ambassador program, Sun as a high tech company with Jini, JavaSpaces, JXTA, Apache Derby and OpenSolaris, OpenSolaris boot environments and ZFS snapshots as a predecessor of containers and the NixOS parallel, the first serious Java project at Sabre: airline software on JDK 1.4 with Enterprise Beans targeting Solaris, ClearCase, setting up an office in Krakow for e-Circle, Apache Hadoop and Apache HBase around 2010 before Apache Cassandra, picking patches from Apache Subversion and hoping the result compiles, Groovy and GPars for concurrency, learning Puppet and Chef to run a Hadoop cluster in VMS, Hadoop API verbosity compared to Enterprise Beans, finding and deleting a hundred duplicated DAO classes, GlassFish as the reference implementation with commercial support and live redeploy from the command line, web framework fatigue and blog posts that do not reproduce, Apache NetBeans and EJBs for a desktop client with network communication, one stateless annotation per class as the essential EJB style, eBay, customer data analytics at Burberry, replacing overnight batches with record at a time processing, the can you be faster than a MacBook competition against a ten machine Hadoop cluster, head of backend at Revolut and PostgreSQL for transactions, LMAX, the LMAX disruptor, counting microseconds, public static void main used as the framework and constructor arguments that stay visible, founding DataLinks, teaching the computer what related means, ontologies, RDF and SPARQL, defining flexible relations between tables and walking them as a graph instead of materializing them, neurosymbolic AI, connecting sanction lists from PDF, Excel and XML, JavaOne then and now, GeeCON, JDD, infoShare and Code Europe Andrzej Grzesik on twitter: @ags313

Sep 29, 2026

An airhacks.fm conversation with Donald Raab about: the relation between Clipper and FoxPro, Smalltalk blocks with Square brackets and a vertical pipe separating the parameters, the knights of the square bracket, the pipe replaced by the arrow in Java, block context template as the single type for every SmallTalk block, anonymous inner classes used as block substitutes before Java 8, the Smalltalk hierarchy with object as a subclass of nil, nil as an instance of the undefined object class that still responds to messages, a blog post about null as an object in Java, metaclasses and the endless class of the class chain, nominal types and functional interfaces versus one type for all blocks, single abstract method (SAM) and the disappearance of the term, the combinatorial explosion of function types over primitives and generics, naming generic type parameters T and V, single character type variables and collisions with variable names, var and local variable type inference in everyday Java, var for expected values in unit tests, postfix completion in IntelliJ IDEA with dot var and dot out, changing a running Smalltalk image and porting IntelliJ IDEA key bindings back to VisualAge for Smalltalk, control Y to delete a line in WordStar and in IntelliJ IDEA, JetBrains MPS and custom DSLs, Clipper code blocks with curly braces and double square brackets around the parameters, blocks for sorting and for T-Browse columns in Clipper, Clipper visual objects compiling to native Windows executables, the Classy library for classes without inheritance in Clipper, the Smalltalk collection protocol select, collect, reject, detect and inject into, filter as an ambiguous method name compared to select and reject, transforming behaviours map, flat map and collect, String.transform in Java, the missing reject in the Java Streams API, Alice's Restaurant by Arlo Guthrie as the claimed origin of the Smalltalk method names, Smalltalk popularity in Europe and Argentina, Newspeak, OS/2 Warp and REXX, duck typing and does not understand errors in Smalltalk, Ruby as a Smalltalk dialect with select, reject and inject, asciidoctorj running on JRuby, blocks versus closures and captured state, effectively final captured variables in Java lambda expressions, Groovy closures and Grails before Java 8, the joint Groovy and Java compiler, Apache Groovy and the Gradle DSL, blog exchanges with Groovy committer Paul King, the Scala and Kotlin adoption waves, Java 25 shipping enough out of the box, the origins of Eclipse Collections in 2004 as Caramel (collection array map enumeration library) at Goldman Sachs, open sourcing as GS Collections to share use cases with the JSR 335 expert group, the ten year quest to get lambdas into Java, the BGGA prototype, lambdas in the JSR 341 expression language before Java 8, memory consumption and code duplication rather than performance as the motivation for Eclipse Collections, procedure instead of consumer and extending consumer for JDK interoperability, select with and predicate two to keep lambdas stateless and static, method references preferred over multi line lambdas, refactoring anonymous inner classes to lambdas for 10 to 20 percent less code, the commercial JGL collections framework, early access testing in the OpenJDK quality outreach program, a new Collectors.toList instance created on every call, Brian Goetz and the constraints of the Java language architect, composing records, patterns and switch expressions into data oriented programming, the book Eclipse Collections Categorically and its method categories, custom folding regions in IntelliJ IDEA to simulate method categories Donald Raab on twitter: @TheDonRaab

Sep 21, 2026

An airhacks.fm conversation with Andy Damevin about: Texas Instruments TI-BASIC calculator with GOTO and GOSUB, programming games including a trading game on the calculator, sending programs from a computer to the calculator, building viral Facebook games with the social graph API, PHP and MySQL with iframes and OAuth for Facebook authentication, earning revenue with ads and paid credits, a first serious Java project simulating cars moving across lab screens over TCP/IP sockets with threads and shortest-path routing, comparison with Java mobile agents and Aglets, JBoss Seam and Java EE, moving to Spring then quarkus, founding a company and building the Wazzam events app with Java, Spring, Angular and PhoneGap, joining Red Hat and the Quarkus team, building the code.quarkus.io launcher, creating Quarkus Quinoa to integrate NPM front-end builds into the Quarkus lifecycle with a dev proxy, the Quarkus Web Bundler for bundling web applications without NPM using WebJars and Maven NPM dependencies, minification and hashed asset versioning, Deno as a faster and lighter Node alternative delivered as architecture-dependent Maven and Gradle dependencies, Roq the Quarkus static site generator exporting a running Quarkus application as HTML snapshots, the Qute template engine with compiled type-safe templates CDI access and iteration, static site publishing via Git to GitHub Pages or Netlify, using a scheduler and CDI events or jgit to regenerate and push pages offline, the RoqGenerator application-scoped bean with a generate method, dev mode versus prod mode differences, Roq as suitable for developers and AI with MCP integration and Playwright for iterative design, AI for processing content into summaries and translations from Markdown asciidoc JSON and YAML, an integrated WordPress-style editor for writers with Git sync, and devoured.fyi a static AI and developer NeWS site built with Roq using Tailwind and plain Vanilla JS Andy Damevin on twitter: @ia3andy

See all episodes →