Greg, Mark and Richard get together weekly and talk about things of interest in the Java community. Greg works for SimWorks (http://www.simworks.com) who specialize in mobile phone software. Mark works for SecureMX (www.smx.co.nz). Richard works for Blue Train Software (http://www.bluetrainsoftware.com)
Episode 180: rightFolds in an AI world? 1. rightFolds as a pun on Mark's recent right vocal fold surgery, healing means we're good to record again, plus IA celebrates 17 years of existence, even if episodes have seriously lacked of late. Last episode Aug 27, 2025 - it's been a while. 2. Does language theory and evolution have a place/need in an AI world? 3. New JVM language features vs Syntactic sugar ala Clojure/Scala features 4. Bun's recent zig->rust total AI rewrite 5. Vercel engineer built Zero, a programming Language for AI Agents | Yeamt 1. Why Did They Build This? 6. jank now has its own custom IR 1. Do any of these funky languages matter in an AI world? 2. Is 'Good Enough' Good Enough: Mindsets and Behaviors for Sales Excellence 3. Is "good enough" good enough?!. A common misunderstanding of the… | by Ted Rau 4. Is Good Enough, Good Enough? (Part 1) 7. AI and the increased threat of Supply Chain attacks 8. How We Got a CISA GitHub Leak Taken Down in Under a Day 9. NPM and its recent attacks 10. Package Managers are Evil - gingerBill 1. The Aesthetic Problem of Namespacing - gingerBill
Tooling * Highlights from Git 2.54 * "Git history" FTW, unless you're using Jujitsu 🙂
AI and Development * The Human Cost of 10x: How AI Is Physically Breaking Senior Engineers * OpenJDK Interim Policy on Generative AI * Why Your Engineering Team Is Slow (It's the Codebase, Not the People) * The Reviewer Isn't the Bottleneck * Now more than ever: building reliable software in the age of agents | Ron Minsky | Bug Bash 2026 * I am not a Software Engineer — huronbikes
"Everyone" leaving Github * A usability study of radicle * Git is distributed, GitHub is not - Radicle brings a distributed forge for software development, including distributed issues, patches, code review, and CI solutions for a resilient forge. * HardenedBSD Officially on Radicle * Ghosty leaving Github * Zig: Migrating from GitHub to Codeberg * This, plus Zig's recent firm anti-AI stance led to the Bun port. * Thoughts on Leaving GitHub * GitHub confirms breach of 3,800 repos via malicious VSCode extension
Three Cool Things in C++26: Safety, Reflection & std::execution - Herb Sutter - C++ on Sea 2025
Java
Stable Value API (JEP 502 – Preview)
Java 25 is ALSO no LTS Version
The not-so-final word on final #JVMLS – Inside.java - no more setAccessible!?
How To Upgrade to Java 25
Static Code Analysis vs [[Language]] Servers
Basically covers ethics of using AI (data theft, conditions of data workers and energy costs) and risks associated (data bias, stochastic parrot, psychological effects)
MCP Horror Stories: The GitHub Prompt Injection Data Heist
Last week, Greg and I had the pleasure of sitting down with Andres Almiray from Oracle to discuss this week's release of Java 22. I was hoping to get this episode out sooner but ended up fighting it out with a fever.
Alert Notification * https://blogs.oracle.com/java/post/java-on-macos-14-4
Java 22 Released Tomorrow * JDK 22 Release Notes: https://jdk.java.net/22/release-notes * JavaFX Release Notes: https://github.com/openjdk/jfx/blob/master/doc-files/release-notes-22.md * Does Java 22 Kill Build Tools? https://inside.java/202,4/02/15/newscast-63/ * Update on String Templates (JEP 459) (most likely to preview in 23) https://mail.openjdk.org/pipermail/amber-spec-experts/2024-March/004010.html — First preview feature to be unshipped and reworked entirely?
Misc * Apache Maven 4.0.0-alpha-13 released — This is the first release that requires Java 17! * Welcome to Claro! — The Claro Programming Language https://docs.clarolang.com/chapter_1.html * Introducing the Daggerverse - Dagger * Devin AI Website — The First AI Software Engineer Cognition
Free OracleDb 23c Release * Oracle Database Free — https://www.oracle.com/database/free/ * Oracle Database Free Container / Docker images — https://github.com/gvenzl/oci-oracle-free * Oracle NoSQL Database — https://www.oracle.com/database/nosql/technologies/nosql/ * JSON in Oracle Database Office Hours: Binary JSON formats https://apexadb.oracle.com/ords/r/tech/catalog/session-landing-page?p2_event_id=15268317198142239082325102977690035505&debug=LEVEL7&session=213101861572582
It's been a long time (again) between recording/discussions, but finally, for the end of the year, we locked some time to record.
Java * 9 Outdated Ideas About Java - Azul | Better Java Performance, Superior Java Support * Hidden gems in Java 19, Part 1: The not-so-hidden JEPs * JDK 20: The new features in Java 20 | InfoWorld * JDK 21: The new features in Java 21 | InfoWorld * Java 21 to drop generational Shenandoah GC * Why Your Choice of Java Virtual Machine (JVM) Matters More Than Ever - Azul | Better Java Performance, Superior Java Support * JDK 22: The new features in Java 22 | InfoWorld * The Java Playground - Dev.java * JEP draft: Null-Restricted Value Class Types (Preview) * JEP draft: No longer require super() and this() to appear first in a constructor * Minborg's Java Pot: Java 20: Colossal Sparse Memory Segments
Golang * What’s New in Go 1.21 a Comprehensive Notes | by Younis Jad | Lyonas | Medium * Go 1.20 Release Notes - The Go Programming Language * [Go 1.21 Release Notes - The Go Programming Language](https://tip.golang.org/doc/go1.21 * Go 1.22 Release Notes - The Go Programming Language (soon to be released)
Misc * GitHub - MichaelMure/git-bug: Distributed, offline-first bug tracker embedded in git, with bridges * So you want to write a package manager | by sam boyer | Medium * Versioning non-project repositories (config, pipelines) + Semverbot looks good, but I found a bug: blang/semver only supports "v" prefix's · Issue #58 · restechnica/semverbot · GitHub * DORA - Use Four Keys metrics like change failure rate to measure your DevOps performance | Google Cloud Blog * Software Design and Maintainability + On bad advice + Why DevOps is failing: It's Not You, It's The Tools - GigaOm + An architect’s journal -Embracing Simplicity in Software Architecture Diagramming | by Asanka Abeysinghe | architect2architect + Building Great Teams * dagger.io | Replacing your Dockerfile with Go code + Replace a Dockerfile with Go | Dagger + Dagger Java SDK examples: sample + Healing The Poisoned Repository | Theory In Practice
Episode 174 - 18 And Life Until last week, I was going to open the show saying it's been a long time since we last recorded, but we slipped in an interview with the guys from plz.review - so that's not exactly true anymore. It has, however, still been a while since we've had a normal, full session of discussion and argument.
Delayed: The publishing/editing of this episode was unfortunately delayed due to me finally catching Covid.
plz.review Updates * Github "integration" is available, we even had GerritForge - Home page listed in the show notes, as part of GerritForge there's GerritHub for online hosted Gerrit+GitHub integration which uses Gerrit's replication plugin, and a Github integration for authentication/authorization. Patch sets and comments remain in Gerrit.
JDK Related Since the last main episode, Java 18 was released (and earlier this week JDK 18.0.2 was released with various security and docker improvements.)
Tooling * SD Times Open-Source Project of the Week: Adoptium - SD Times * IntelliJ IDEA 2022.2 Goes Beta | The IntelliJ IDEA Blog - Switches from running with Jetbrains' JDK11 to JDK17 * IntelliJ IDEA 2022.2 Is Out! | The IntelliJ IDEA Blog * JetBrains Fleet: The Next-Generation IDE by JetBrains
Java / JVM * Hibernate ORM 6.0 Delivers Improved Performance * Languages + Kotlin/Native vs. C++ vs. Freepascal vs. Python: A Comparison | by Alex Maryin | Apr, 2022 | Better Programming + Kotlin 1.7.0 Released | The Kotlin Blog + Scala 3.1.3 released! | The Scala Programming Language * Build + Bazel - Announcing Bazel & JetBrains co-maintenance of IntelliJ IDEA Bazel Plugin - Bazel - Bazel Community Update - 5/16/22 - YouTube - Manage external dependencies with Bzlmod | Bazel + Apache Maven Wrapper – Maven Wrapper
Alternate Languages * Celebrating 50 Years of Smalltalk | by Richard Kenneth Eng | Jul, 2022 | ITNEXT * Help Microsoft shape the Azure SDK for Rust * Shaving 40% Off Google’s B-Tree Implementation with Go Generics - ScyllaDB * Zaplib post-mortem - Zaplib docs - Post-mortem of porting JS to Rust/WASM * Simplifying Go Concurrency with Futures * Common Lisp - Repl Style. Dev visually with CLOG Builder : Common_Lisp * OCaml 5 and new Website + 1.5. Summary — OCaml Programming: Correct + Efficient + Beautiful - new OCaml site launched + Ocaml 5 concurrency tutorial - concurrent OCaml is finally here (almost) + GitHub - ocaml-multicore/eio: Effects-based direct-style IO for multicore OCaml + Will OCaml 5+ multicore be fragile? - #17 by gasche - Learning - OCaml * C++ + C++ 23 to introduce module support | InfoWorld + GitHub - carbon-language/carbon-lang: Carbon language specification and documentation. - An experimental successor to C++ - Looks like it's getting a lot of flack on Twitter - Twitter: Carbon C++ Results
Security * Reflections on Log4J Security Issues * Weeks after breach, the Heroku GitHub connections remains on ice
Misc * Major Version Numbers are Not Sacred * Decentralized Identifiers (DIDs) v1.0 is a W3C Recommendation | W3C News + Decentralized Identifiers (DIDs) v1.0 * An open-source tool to seed your dev database with real data : golang * How Apple, Google, and Microsoft will kill passwords and phishing in one stroke | Ars Technica * Complexity is killing software developers | InfoWorld
Reddit Post: Improving on the GitHub code review comment experience : programming Blog Post: Bit Complete Blog: Improving on the GitHub code review comment experience | Bit Complete Inc. YouTube Introduction Video: Introduction to plz.review - YouTube Website: plz.review Guests: Dylan Trotter, Matt Schweitz
It's been a while since recording, and as it happens, just before organizing the next episode, full of “discussion” on the recent Java 18, and forth-coming Java 19 release, I came across an r/programming post from Dylan Trotter from Bit Complete about their new stacked code review tool for Github.
After reading the post, linked blog post, and introductory YouTube video, I reached out to discuss the product, the problems with Github's default PR model, and code review in general.
Contents * 00:00:03.754 Introduction * 00:01:07.236 Bit Complete History * 00:02:24.492 What Makes A Good Code Review? * 00:12:32.219 DORA (not the Explorer) * 00:14:38.308 Bisecting Squashed Commits * 00:18:51.617 The plz.review Solution * 00:19:08.934 plz.review Stacks - Grouping PRs Together * 00:21:36.969 plz.review Revisions: Force push solutions * 00:25:37.590 plz.review Migration - Moving from Gerrit? * 00:29:34.371 Gerrit and Github Integration * 00:32:23.516 Compromising your workflow to fit Github PRs * 00:39:41.700 Code Review as Mentorship / Education * 00:41:26.759 Github: Social Coding brought code-review to mainstream * 00:45:52.124 Long Lived Support Branches * 00:50:03.479 How to signup for plx.review
Overview Before we get into plz specifics - I assume both Dylan and Matt have some interesting takes on what makes a good review:
plz.review The project/platform appears to solve several issues we're facing with Gerrit, and our adoption of Azure Devops:
pull from patch-sets, due to the private rev nature of GerritThe prospect of abandoning Gerrit and switching to Githubs force push and squash approach makes me cry,
plz command line generates its own form of Change-Id footer: plz-review-url which tracks revisions of a change linking to https://plz.review/review/NNNN - which doesn't appear to be name-spaced in any way (company or repo).plz.review feels early in the development stage. Such things may not have been considered, or deemed out-of-scope for the system.-2 rejections?Catchups * Happy New Year! * Log4j Issues, fall out, ranty commentary * And now PostgreSQL JDBC gets a 9.8 CVE:
Java Stuff * Java 18 set for March 22, 2022 + The new features in Java 18 + Mark Reinhold: There are no unresolved P1 bugs in build 36, so that is the first JDK 18 Release Candidate. Binaries available here, as usual: https://jdk.java.net/18/ * Java 19 builds are already available * MicroProfile 5 out * Helidon 2.4.2 released * Quarkus 2.7.1 released * Continuations + [GR-34749] Continuation support independent of Project Loom. #4114 - merged. + https://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html + Project Loom: Fibers and Continuations for Java by Alan Bateman - YouTube - Early Continuation API sample * JEP draft: Sequenced Collections * JEP 423: Region Pinning for G1 * I believe I read somewhere JEP 389 (Foreign Linker) are coming out of the incubator soon - Using libsodium with JEP 389 is an interesting example. * Java's Options for Options - it hurts just reading this, let alone the reddit comments * AZUL Cloud Compiler * Jetbrains Fleet - Next Gen IDE/Editor
Other Stuff * Apple Removes Python 2.7 in upcoming release of macOS * Apache Groovy 4 Released * No Such Thing As Clean Code
Once again it's been a long time coming between episodes, Auckland's recent extended Covid lock down and Mark's unscheduled and temporary relocation meant we missed out on discussion the release of Java 17 - and with Java 18 not all that far away, we thought it was about time to once again get our record on. Andres Almiray once again joins us to talk releases, and specifically the JReleaser tool.
Table of Contents
00:00:11 Introduction
00:00:59 Lockdowns and Freedoms
00:03:45 Java 17 and 18 Releases
00:04:47 Java 17 Uptake
00:05:37 Misconceptions of The Module System
00:07:49 Spring 6 and Spring Boot 3 move to JDK 17 Minimum
00:08:56 Maven Enforcer Plugin: Extra Enforce Rule - Enforce Bytecode
00:11:40 Java LTS Releases Switching to 2 year cycle
00:14:13 Quality of Life Language Changes In Smaller Releases
00:16:00 Java Version Migration
00:20:11 Is The Release Process Broken
00:21:10 Reproducible Builds
00:22:32 Maven Artifact Plugin
00:24:36 Introducing JReleaser
00:28:07 OSX Package Managers vs Tarballs
00:29:23 JBang
00:31:10 JReleaser Deployment Targets
00:33:55 Replacing Ansible/Puppet?
00:41:25 JRelease for Non Java / C++ Projects
00:42:10 Live at HEAD
00:44:34 JRelease for Non Java / C++ Projects (cont)
00:51:15 JReleaser Configuration Formats
00:54:22 Upcoming 1 Release and Potential Renaming
00:58:27 Lombok and 1.x
01:01:21 SDK Man releases via JReleaser
01:04:04 Does JReleaser release itself?
01:06:10 Rolling Releases and Announcers
01:14:02 Closing Rant: Automated Code Formatters
Java Related * Java 17 Arrived : JDK 17 the next LTE - Java 17 new features | TechGeekNxt>>
In an unprecedented show of activity - merely two weeks after the new years first episode (170) Mark and Greg are back, this time joined by Andres Almiray (Oracle) and Stephen Connolly (Cloudbees) to discuss all things build, modules, this weeks Java 16 release, and why Java programmers should take a look at the rust programming language.
Hosts * Mark Derricutt - @talios * Greg Amer
Guests * Andres Almiray - @aalmiray * Stephen Connolly - @connollys
Table of Contents * 00:00:15 Intro * 00:00:37 Guest Introductions * 00:02:05 Java 16 Released! * 00:02:47 Jenkins and JDK Versions * 00:04:38 var changes = LIPSERVICE; * 00:05:11 Improve your Java by learning Rust * 00:07:31 Hey Bruno - It's NOT YAML! * 00:10:22 Project Liliput * 00:11:31 Java Turning 26 * 00:13:30 Java for CLIs? * 00:16:47 Modules: Thought on The Java Platform Module System * 00:18:12 Modules: Modules and Versioning * 00:19:15 Modules: Semantic Versioning * 00:22:19 Build: Hijacking The Maven Release Process * 00:26:40 Explicit Merge Commits * 00:29:16 Build: JDK Dependency (Lacking) In Maven * 00:31:21 Kotlin Standard Library Versions * 00:31:53 Libraries should avoid Guava * 00:35:36 Jackson Version 3 Changes * 00:39:10 Modules: The Lack Of Runtime Versioning In Modules * 00:39:46 Modules: Agents And Module Systems * 00:40:39 Run The Damn Tests Twice * 00:46:00 Modules: Module Systems and Debugging * 00:55:02 The Ecosystem Is More Than Code * 00:55:46 Build: The Hinderance of IDEs * 00:56:47 Build: Mixins In Maven * 01:02:18 Build: The Perfect POM is with a BOM * 01:07:17 Build: Custom Lifecycles as Mixins * 01:10:09 Build: Gradle is Surprises and Deathtraps * 01:11:31 Build: Maven Consumer POM and POM 4.0.0 * 01:14:16 Build: Project Dependency Trees Proposal * 01:23:28 Build: Maven 4 and 5 Releases * 01:26:49 Build: Plugin Phases and Execution Order * 01:33:05 Build: Interim Hacks and Abstractions Considered Harmful * 01:39:33 The Problem with Preview Features
News * Oracle Announces Java 16
* Project Lilliput - OpenJDK proposal to reduce the Java object header by half or more would lower memory and CPU usage on all Java workloads.
* Pull Requests merging instanceof Pattern matching
+ https://github.com/openjdk/jdk/pull/2544
+ https://github.com/openjdk/jdk/pull/2879
+ https://github.com/openjdk/jdk/pull/2913
* JEP 401: Primitive Objects (Preview)and many other new JEPs landed for JDK 17.
* Caffeine cache goes 3.0 and with it - JDK11 baseline
Links * Semantic Versioning * git-timestamp-maven-plugin * Git Log's --first-parent Option * The rise of Kotlin's stdlib and the versioning conflicts that may arise * guava-beta-checkerfor Error Prone * Jackson Release 3 Plans * Build Health * PomChecker 1.1.0 has been released! * Problems with sorting, tidying poms + Build / life cycle order + Maven Bill of Materials + Maven Tiles / Mixins + Crafting better Gradle builds with the Kordamp Gradle Plugin suite with Andres Almiray (YouTube Video) + Proposal: Project Dependency Trees schema + Plugin Execution & Property Ordering Tests * Module Systems * Java Platform Module System / Jigsaw + Layrry- Including an excellent video demonstration of Layrry in action with JavaFX. * OSGi * Runtime Dependencies (build is only half the picture)
Illegal Argument Episode 170 Mark and Greg emerge from their 2020/2021 Christmas/New Year breaks, and temporary Level 3 lock down to break their silence, attempt to remember how to podcast, and further the rumor that we only record an episode on the eve of a new Java release.
Table of Contents * 0:44 Holiday Periods * 1:27 Java 16 Release * 2:35 Standalone Nashorn * 3:18 Native Script * 6:28 R.I.P. Chrome * 12:51 Module Systems * 14:37 setProtected(true) * 20:42 Java 16 Release (again) * 25:00 Incubation vs Preview Features * 37:56 Pattern Matching FTW * 43:30 Equality * 44:57 Inline Types and Classes * 50:34 The Need For Namespaces * 55:10 Bintray Closing Down * 59:27 R.I.P. netbeans.org * 1:07:08 SOA in C/C++ * 1:14:18 Python and Rust Crypto * 1:16:11 Autotools * 1:18:34 Rust backend for GCC
Java Related * Why Namespacing Matters in Public Open Source Repositories * Major Changes to Clojars - Verified Groups / Namespaces * Java 16 - March 16 Release
+ A Discussion on jpackage
+ OpenJDK · GitHub
+ JEP 11: Incubator Modules
+ JEP 338: Vector API (Incubator)
Miscellaneous * Is Google Locking Down Chrome to Resist the Rise of Chromium Based Browsers? - It's FOSS News * Apple Card disabled my iCloud, App Store, and Apple ID accounts
Modules, Releases, and Builds * Java Accessible Objects and Reflection * Understanding Java Modules * Into the Sunset on May 1st: Bintray, JCenter, GoCenter, and ChartCenter * RIP netbeans.org * Modules, monoliths, and microservices * New dependency on Rust causes headaches for Python Crypto lib and distributions
CPP * Not the SOA you think
Property-based Testing in Java: Jqwik - a JUnit 5 Test Engine - My Not So Private Tech Life
tldlabel = ALPHA *61(ldh) ld ldh = ld / "-" ld = ALPHA / DIGIT ALPHA = %x41-5A / %x61-7A ; A-Z / a-z DIGIT = %x30-39 ; 0-9
* HUMBLE BOOK BUNDLE: JAVA PROGRAMMING & MORE BY O'REILLY
* GitHub - baidu/braft: An industrial-grade C++ implementation of RAFT consensus algorithm based on brpc, widely used inside Baidu to build highly-available distributed systems.
* Leaving OCaml
* The Birth of Unix with Brian Kernighan - CoRecursive Podcast
* Rust Programming
Nix Package Management
Nixology - YouTube
Welcome to The Greg Cast
instanceof Pattern MatchingFull links and more available .
After a lockdown/reopen period we're back with another argument.
WARNING: The recording dropped out half way thru, and… creative edits were made. Your ears have been warned.
Full links are available on https://raindrop.io/collection/12086308
What’s this? Another Illegal Argument episode already? And so close to the last one - it seems the shift to working from home and remote recording has already showed a payoff.
During the last episode, I’d had it in my mind to discuss the need to improve our documentation, and general communication skills that developers, and development teams often overlook. More so now that many organisations are moving into distributed, remote teams - many of which may never return to normal “office life”.
With this in mind, I thought I’d make use of our new remote recording facilities and bring on both Tim McNamara (Vice-President of NZOSS, Canonical Guy, Author of Rust In Action) and Josh Addison (Technical Writer at MYOB, Game Developer, Conspiracy Podcaster) to lend their voices to our argument.
On this episode we cover (or planned, as always - things got sidetracked):
Java News * JEP 384: Records (Second Preview) * Why #Java record getters have no 'get' prefix? * Call for Discussion: New Project: Leyden (static compilation for Java - the return of GCJ?)
Technical Writing * Why Writing Software Design Documents Matters * Things Markdown got Wrong * Writing Test Plans * Architecture Design Records * How to write better tickets/commit messages/emails etc. etc. * Tooling? + Asciidoc + ProWritingAid, Grammarly + Dropbox Paper + Vale - cross platform command line style checker * Question-led docs, e.g. cookbook type * Doctests are better than you think * Knowing your audience - differences between "documentation" and "book writing" * Rust In Action * WriteTheDocs Slack
Full links to everything discussed and planned to discuss are found over on my raindrop bookmarks.
Welcome to the “Locked Down Dependencies” remote recorded using Squadcast.fm whilst both Greg and I are stuck in a national COVID-19 lockdown.
Full links to topics discussed can be found in the shared bookmark folder on Raindrop, but during tonights episode we discuss:
Welcome to the first episode of 2020 - recorded just before all of Coronavirus Mania and then promptly the editing and publishing got unfortunately thrown to the sidelines for a week.
This week (ha) Greg and I discuss the upcoming Java 14 release, along with C++20, and the granddaddy of functional programming - Miranda.
Topics 1. Fibre's are dead - long live "Virtual Threads" 2. Undelimited continuations are not functions 3. R2DBC 0.8.0 goes GA - Reactive database clients for Java 4. RUST: Shipping a compiler every 6 weeks 1. User reported stable regressions 2. Bisecting Rust Compiler Regressions with cargo-bisect-rustc 5. Microsoft: We're creating a new Rust-based programming language for secure coding 1. https://www.reddit.com/r/rust/comments/e5040i/microsoft_creating_new_rustbased_safe_language/ 2. https://www.reddit.com/r/rust/comments/e5kjyr/more_info_on_micrsoft_moving_away_from_rust/ 1. I.e. they're not, this is just another research language. MS is however still heavily looking at rust, and employing rust developers. 6. Unleashing the (Armed) Bear past Java 11 7. Using Jlink to shrink your webservices… including nativeimages in the followup tweets 8. Style guide for Text Blocks 9. Lambda performance in node - regressions: 1. Version 13.5.0 -- Questionable Changes? "My testing indicates that the for...of construct is about 60-70% slower as opposed to a classic for(let i; i; i++)."
JEPs for JDK 14 * JEP 305: Pattern Matching for instanceof (Preview) was proposed to target. * JEP 343: Packaging Tool (Incubator) was proposed to target. * JEP 345: NUMA-Aware Memory Allocation for G1 was integrated. * JEP 349: JFR Event Streaming was integrated. * JEP 352: Non-Volatile Mapped Byte Buffers was targeted. * JEP 358: Helpful NullPointerExceptions was integrated. * JEP 359: Records (Preview) was integrated. * JEP 361: Switch Expressions (Standard) was integrated. * JEP 362: Deprecate the Solaris and SPARC Ports * JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector was targeted. * JEP 364: ZGC on macOS was targeted. * JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination was proposed to target. * JEP 367: Remove the Pack200 Tools and API was targeted to JDK 14. * JEP 368: Text Blocks (Second Preview) was proposed to target. * Thread suspend/resume are now deprecated for removal (build 21) * Added LuxTrust Global Root 2 Certificate (build 24) * NUMA JEP mentioned last week now has an Implementation merged for "NUMA-Aware Memory Allocation for G1": + http://hg.openjdk.java.net/jdk/jdk/rev/fce1fa1bdc91?revcount=1000 + http://hg.openjdk.java.net/jdk/jdk/rev/df6f2350edfa?revcount=1000 + http://hg.openjdk.java.net/jdk/jdk/rev/6530de931b8e?revcount=1000
New JEPs * JEP 370: Foreign-Memory Access API * Draft JEP: Elastic Metaspace
00:00:00: Intro
00:01:25: Java 12 Is Upon Us
00:12:31: Supporting Multiple JVM Versions In Libraries
00:34:20: Graal
00:41:08: Autoscaling Is A Lie
00:50:49: Rust Is A Better C?
00:58:29: "Dynamic Types" In Haskell
01:01:09: Business Errors Vs Exceptions
c++ 98 to c++ 11It’s been a long time between episodes, with illness, work, and rock’n’roll getting in the way - but after planning to get another episode out to discuss the recent Java 11 release, not even the arrival of Japanese doom band Church of Misery (my youtube video and photos/review) was going to stop Greg and I from getting our rant on….
Java 11 * Features + Fast Forward To 11 + 90 New Features (and APIs) in JDK 11 - Azul Systems, Inc. + JLink can't use automatic-modules - does that make it dead? - Apache Maven JLink Plugin - moditect/moditect— Moditect from Gunnar Morling @ Red Hat (@gunnarmorling) lets you take existing Maven Jars, and add your own module-info / module specs for inclusion in your jlink application as a migration path. + Java's new Z Garbage Collector (ZGC) is very exciting * Licensing Issues / Changes + Stephen Colebourne - Time to look beyond Oracle's JDK - Java is still available at zero-cost - Do not fall into Oracle's Java 11 trap + What JDK to Use in the Future (video from Simon Ritter, AZUL Systems) * Migrating + Why is OpenJDK 10 packaged as openjdk-11 + Running Jenkins with Java 10 and 11 (experimental support) + All You Need To Know For Migrating To Java 11 + Using Hibernate ORM with JDK 11 * AdoptOpenJDK Java 11 builds now available * MacOS binary layout changes - now conforming to the standard Mac package layout, which the official Oracle JDK release also follows. * Oracle Code One - On Demand Videos
Java 12 and Beyond * JDK 12 Early-Access Builds * JEP draft: Concise Method Bodies * JEP 342: Limit Speculative Execution * JEP 325: Switch Expressions (Preview) + Playing With JDK 12's Switch Expressions * JEP 326: Raw String Literals (Preview) * JDK-8208089 Implement C++14 Language Features - Java Bug System
It may have just clocked into April, but the first Illegal Argument of the year is finally here, much delayed, and extra long in it’s twists and turns of… well, let’s face it - you know it would be build didn’t you….
pom.java exampleFor an ostensibly forthrightly podcast, we only managed 10 episodes this year, of which one was a mini-solo cast from Mark, too many holidays and rock concerts getting in the way of recording. Hopefully we can be more organised in 2019!
.h fileJava News * Moving Java Forward - 6 month release cycle, breaking changes. 3 yearly LTS versions
* Java 9 will NOT be an LTS release
* Module Hell - java.ee not in base ( easy to fix, but ack )
* O'Reily Java 9 Modularity published
* Use Stream API simpler ( or don't use it at all )
* Kevlin Henny JavaZone talk/video: Paradigms Lost, Paradigms Regained: Programming with Objects and Functions and More
* Jitwatch
+ Project Home
+ IntelliJ Plugin
+ Video demo of Jitwatch/IntelliJ Plugin at the JVM Language Summit
* Using GraphQL? Why Facebook Now Owns You
* Java EE moves to the Eclipse Foundation
A short minisode on Apache Struts, XML deserialisation attacks, and Equifax.
Upgrade your s**t!
Save 418 - I was hoping to actually shift the discussion of “Save 418” more towards the importance of specifications, and how ‘in the old days’ protocols/specs were king, as everything was reused and distributed - but now, it’s “the Twitter API” or “the Facebook API” — still, we managed an somewhat interesting discussion over the broadening of specification definitions.
Contact Us * Google Group Mailing List * Google+ Page * Facebook Group * Twitter
Initially tonight’s episode was going to be called “The Patch Is All” (guess whose been enjoying the new season of Killjoys?) — with a discussion about pre code-review practises, however with Peter’s absence, the discussion centred mostly around the 2017 Java Language Summit which was taking place around the recording period.
Upcoming Events * DevOpsDays Auckland - 3/4th October * Pacific C++ - 26/27th October in Christchurch, NZ
JVM Topics * Java 8u144 Released - release notes - download * New Java Style Guideline for OpenJDK ( draft 6 ) - not everyone seems to like it. + Not embracing 2 space indents maketh me sad :( + Interesting to see how much conflicts with Googles standard, whose structural wrapping rules, whilst clearly delineating structural elements, can be a bit unsightly ) * Java Language Summit 2017 + Agenda - lots on value types, surprisingly little on modularity + Videos already going live + Project Sulong - After watching the JLS video - colour me (Mark) highly impressed. * Nobody puts Java in the container - Ken Sipe Video, JavaZone * Introduction to Java multitenancy - Learn about a new feature for cloud systems in the IBM SDK Java Technology Edition, Version 7 Release 1 * Ceylon on Java 9 + Jigsaw * Clojure Dependency Heaven(pdf) - introducing tools.deps.alpha * edit cough at 18:42 * JEP 307: Parallel Full GC for G1 * How Compatibility Breeds Complexity - The module system gone awry * Java Style Guidelines - Draft v6 * Developers Who Use Spaces Make More Money Than Those Who Use Tabs * The best Java books as voted by Reddit r/java ( reddit thread here )
General * Do people write insane code with multiple overlapping side effects with a straight face? * Some History of Functional Programming Languages - David Turner (Lambda Days 2017) (youtube video) + Miranda language * IntelliJ Rust Plugin now officially supported by Jetbrains + Autocomplete for macros + Minimum version is 2017.1 * Rust: The server trick - The semver trick refers to publishing a breaking change to a Rust library without requiring a coordinated upgrade across its downstream dependency graph. The trick is built around having one version of your library declare a dependency on a newer version of the same library ( reddit thread )
Contact Us * Google Group Mailing List * Google+ Page * Facebook Group * Twitter
Join us for an another semi informed, highly subjective, and quite possibly wrong on all counts discussion about Java, Jigsaw.
Catch us on Twitter and Google Plus+.
Apoligies one and all for the late episode delivery, our host/engineer/pulisher ( aka me, Mark ) was off galavanting taking photos of Living Colour, Greenday, and Devin Townsend this week and got waylaid in editing/publishing the show! But fret not dear listeners, come one, come all - and hear all about the NO vote...
interface.java.sql module.OptionalMaking builds by making make make MakeFiles. * Building Go From Make - bad puns and jokes, Gentoo/Debian packaging * Maven - the best of the bunch of bad things. * Separating build from dependency management. * Releases as tagged source code - binaries are just ‘artefacts of the build’ * Gophers, please tag your releases- via reddit. * Clojure.spec * Single return points in functions, single return values? * try/catch/finally/return puzzler * java(c) shims? * Project Valhalla - algebraic data types thread, Algebraic Types on The JVM * OCaml - pattern matching totally check is a warning * API Design + Are you designing for the implementer, the consumer, the documentation, or…. + XML Schema for the win. * application/hal+xml IETF spec. * HalBuilder Test Resource Repository * Reading RSS Feeds using F# Type Providers
Libraries * Netflix Ribbon * Kotlin + funKTionale * Java + Javaslang * Clojure + Specter
Videos * Building Scalable Stateful Services
Lately it seems we've been rather busy to record, so it was good to finally get 2/3's of us together to actually record, and discuss languages from a less argumentative level ( no wild type theory arguments or build rants ) even tho some of those familiar topics arose in passing.
Most of this weeks discussion revolve around a series of videos, or posts that Greg had recently watched:
Later in the episode we discuss my recent foray into learning/using ANTLR 4 and comparing it to jparsec and parboiled.
So it's been a quiet few months in the build cycle but we thought it was about time to release a new episode, so here - enjoy episode 139 - largely unedited, unprepared, full of ranty goodness.
Rust Language
PSA: PostgreSQL JDBC Driver Bugs
Data corruption caused by prepared statement cache
JavaZone 2015 Talks
This “weeks” argument was recorded on the Back to the Future day, and then eventually edited and published a long overdue time later… That’s time travel.
Java 9 - State of the Java Module System
Tiling window managers
Jetbrains License Subscription
C++
IntelliJ Language Plugins
Clojure vs Modern Java
Haskell
Fork/Join
DivideTask.java from Peter.
JavaZone 2014 - 6000 minutes of learning
Jenkins and the dreaded Maven Plugin
Jenkins Docker Plugin
Git
Case Insensitive .Git directory security hole.
JDK 8 Adoption Problems
Java sun.misc.Unsafe
Java Magic. Part 4: sun.misc.Unsafe
Object Generation
Project Lombok
Join Mark, Greg, and Peter and we wax lyrically about 4k screens, driver issues, how node.js and NPM love /tmp and somehow.... just somehow - fail to rant about types or build for a change...
Using PostgreSQL as a Document Store
JavaScript method missing:
Mozilla has Object.prototype.__noSuchMethod__(ES6)
__nosuchMethod__ / doesNotUnderstand in JavaScriptReactive Datamodels
OBSERVABLES AND DATA FLOWS IN ANGULAR 2.0
Annotations hate from Greg
Build - Google Bazel
No Transitives
It might now be long past April, a month after we recorded this, and even a week after Easter when I finally got around to editing it. But join us for an argument - one so illegal it's been banned in 3 countries!
Futures (1977) followed Promises (1976)This weeks episode is being published a little later than normal - my bad. I blame Christmas and the craziness of the year end.
More CDI suckage.
So.... this podcast thing - it turns out you don't just RECORD episodes, you really should edit, and POST them as well....
Yes, I (mark) dropped the ball and got side tracked with life, concerts, and TV and and woefully behind in posting this ( and the next, er last ) episode - so much that I've misplaced any and all links to articles we may have mentioned in this fairly short(ish) show.
Hope you enjoy.
Sorry this episode took so long to get packaged up and built, but you know how long those type based compilations using make go....
Seriously tho, illness, lethargy, and just plain laziness got the better of me.
Enjoy a rant-free conversation on make, builds, larps, and the evil that is JBoss Classloaders....
Join Mark, Greg, and Peter for some more absurd type level rants, whilst we weren’t exactly planning on diving once again into a big argument around types and functional programming, somehow we fell afoul of one almost immediately even before we got around to introducing the episode.
The argument starts with an argument over whether one can do “functional programming” in Java, and the difference between “functional programming” and “a functional programming language”. In this argument Greg claims that memory allocated for a class instance constitutes the state of a class — even if the class structure holds no state, and that ‘functions’ don’t allocate memory when defined.
The main discussion for the evening relates to an Ars Technica article about how much information you should pass in a function: a rich object structure or individual arguments.
During the discussion, Mark suggested that simply using String as the type of the argument is probably a bad design as you may want to restrict the context of the arguments, such as using a specific Password type, this ensued with an argument over deep type hierarchies (do I smell a theme here?) to which Mark countered this by (badly) describing a way of using parametric typing (and phantom typing) to improve the contract of passwords in the API.
Unfortunately the discussion got sidetracked with factories and PK7 implementations being tightly woven into the which probably detracted from any useful discussion.
Escaping away from type theory, Peter brings us back to the real worldwith a discussion on Web Fragments and JBoss Hell…
Misc:
Pull Request Ettiquette
Estimates
Do you count technical debt?
Module Systems from Alex Blewitt
Roman Numeral Version Scheme
During this discussion we talked about the implicit currying of haskell functions and how this could lead to run-time errors rather than compile errors, however whilst I (Mark) knew what I was talking about, I missed a fundamental part of the equation - function types include the return type, so a partially applied function that doesn’t fit a high-order function is a compile time error.
So given two functions:
``` someHof :: (String -> String) -> String take3StringsReturningString :: String -> String -> String -> String
```
The first function someHof takes a function String -> String and returns a String, if we partially apply take3StringsReturningString "test" the resulting function is String -> String -> String which doesn’t match the required syntax of someHof so wouldn’t even compile.
Illegal Argument - Episode 115
Learning to program is hard
Copyrighted APIs - Oracle vs Google
Concurrency - we got it wrong
The Node.js CPU blocking thing.
ORMs
The Server Side: Hibernate 1.0 Announced - July 06 2002.
A discussion of dynamic lanugages with guest Manix Cook.
JavaScript and Tail Calls
Join Mark and Greg for a discussion on code reviews, gerrit, and the recent language releases over the last few months.
Join Mark, Greg, and Peter for the first recording of the year where we discuss some of the recent Scala rants by Paul Phillips, along with build things...
A semi "solo" cast where both Greg and Mark actually agree with other other, and stretch out a discussion way beyond its limit... a fun chat tho...
Illegal Argument Episode 107 Hauntings and Ghost Stories Dealing with the ghost of projects past…
Sit back and get your pause buttons ready for an extra long, "double episode" of Illegal Argument with a somewhat embedded, disjointed interview/discussion with Ambrose Bonnaire-Sergeant all about Typed Clojure, Clojure In Clojure, and the recent Indegogo funding campaign.
Join Mark, Greg, and new co-host Peter as we discuss Language Productivity and Estimation.
Productivity * Using Scala will make you less productive - Is Productivity King? There are many more things in “development” which will lower your productivity than the language you eventually implement the solution in. I (Mark) think I made the comment I've never seen scala as being "a more productive language", but a more flexible, adaptable, etc. language which may lead to more productivity, but productivity is WAY more the sum of intangible parts of development * How do you measure productivity in a language, and when should you expect to get results, e.g. 6 months, 1 year, 2 years - 5 years? * Is there a correlation between small, modular, artifacts and static typing? does having a contract get better with smaller service ( even if generic type contracts ) * Is static typing a fractal cost on your code base. The better you write your code the more cost you incur? * Static typing suits large method and class as you pay the tax less times? * How do you determine the productivity of a new language? * Statically typed javascript (typescript)
Estimation * How does switching languages affect how you handle time estimates? * How do you handle time estimates in general? (Mark) I’ve often seen it said rather than just estimate how long it will take, estimate how long it will take Person X to do it ( if they’re doing the work, taking into account things you know about their productivity/skill level/work load etc.) - you may know Clojure/Scala well, but with DevY is to do the work and not yet fully up to skill with the toolset..... * Development estimates are only accurate if you are maintaining velocity. What error margin and corrective multiplier is reasonable? * What methods of estimate generation are good? Planning poker can be slow, but can be a great method of generating estimates. * Function Point Calculations as a confirmation guideline * How far out do you estimate, and how does YAGNI play into this.
Join us for a long awaited 100th episode of Illegal Argument, we talk conferences, developing your life, and how Scala and Node.JS will die.
Due to a mixture of technical problems, and a disjointed conversation, a vast majority of what we discussed on this show was lost, or just not worth making public - but still - you get to here some of our thoughts on the recent Web Framework Benchmarks blog posts.
We hope you still enjoy the episode....
Welcome to Illegal Argument Episode 98 - Typed Clojure with Ambrose Bonnaire Sergeant.
Links: * An Intro to Typed Clojure - Jim Duey * The Typed Racket Guide * Alms programming language (affine types) * Levels of Gradual Typing - part 1, part 1 * Chez Scheme flow analysis paper: Flow-Sensitive Type Recovery in Linear-Log Time * Sketch of AST types * core.typed mailing list
People: * Ambrose Bonnaire Sergeant - @ambrosebs * Brandon Bloom - @BrandonBloom * Laurent Petit - @petitlaurent
Illegal Argument Episode 97 * Auckland Clojure Meetup * Dependency Injection in Javascript * Is a function, a Function type, a Function object, or an Object?
Join Mark, Richard and Greg as we discuss Java, JavaScript, and bid farewell to a member of the show...
Join Mark, Richard, Greg, and guest Nicholas Faiz from Moneytribe as we talk about NodeJS, JavaScript, and how Clojure is the way.
Illegal Argument 91 * APIGEE REST API Design Book * Mixed Metaphor UIs? * AngularJS Directives * LinkedIn and NodeJS * Blazing fast node.js: 10 performance tips from LinkedIn Mobile * "RealTime" Node * Maven License Checking/Build Failures + Sonatype Insite + Easy Open Source Licences Management using TeamCity + Apache Creadur (used to be RAT/maven-rat-plugin) * iText / Generating PDF in Java * Is Fast better than Readable? * Iteratees for imperative programmers * Hungarian Notation + Making Wrong Code Look Wrong - Joel Spolsky *
Illegal Argument Episode 87 * XKCD Click And Drag * Jenkins and the lack of version range support. + Should version ranges be deprecated? * Tesla - Maven redefined, presentation * Airbreak * Atlassian Bonfire * Write your commit messages first. * Exit interviews - giving employers a piece of your mind?
Illegal Argument Episode 86 - Pixel Shuffling * Java 7 0day * Java 7u7 * More security holes in 7u7 * How to hack weak passwords * Developer Quits OAuth 2.0 Spec, Calls It ‘a Bad Protocol * SAML and XSLT - scarily it exists * JavaScript User Interfaces are worse, or no better than old Windows UIs * No Software Patents in New Zealand
Related Google+ Threads * Combining Functional and Imperative Programming for Multicore Software * WebStorm 5.0 - Live Editing with Google Chrome
It looks like we've been having a few DNS related issues with the website and RSS feeds lately following Dotster's new platform rollout. These should hopefully all be resolved now tho.
Illegal Argument 85 * Groovy Proxies and Exceptions * Debugging - REPLS and tools * DDD via JDB * JSwat * JDebugTool * Dell Precision M4700 Mobile Workstation * Azul’s Zing JVM free for open source developer testing * GPU Support in the JVM Proposal * Multi-tenancy * Custom domain for Google Apps * Amazon Beanstalk gets Python * Chrome Packaged Apps * iOS 5.1 broke off-line storage
Illegal Argument Episode 84 * VertX, Meteor and the rise of the client spanning event bus * Is there any steam behind cloud IDEs? Latest one was Collide, but many of them are based on CodeMirror2 * Analysis of Failure - Ariane and Exceptions * Eric Burke on Giving Effective Presentations * Iterable’s and Jackson
Join Mark and fellow podcasters Craig Smith, and Craig Aspinall for a discussion on Quality.
Note: This is the second posting of this podcast as I messed up the rendering the first time - so much for quality ;-)
Modularity * What’s cooking in Java 8 - Jigsaw Modularity * Jigsaw Delayed to Java 9
Tools * Concordion * Git SCM * Gerrit Code Review
Misc * Kanban * Uncle Bob Martin’s Clean Coders * Manifesto for Software Craftsmanship * The Zen of Mentor Development
Google I/O
**Netflix Operations: Part I, Going Distributed
Google Dart removes String Concatenation from the VM.
MVC is Not Suitable for Web Development
Richard Stallman: Yay! Steve Jobs is Dead!**
**If Programmers Wrote Arithmetic Books
New great advice for TDD
Google Blocky**
Illegal Argument 80 - He’s a douche * Zed A. Shaw - The Web Will Die When OOP Dies + CSS Variables land in WebKit + W3 Web Components Specification + How to Crash Github * Test Driven Language Design * Suspected JavaC bug * Synchronized vs Lock * Angular.js * Fun and Games with Grails 2 * Upgrade to JDK 7u5 NOW
Join Mark, Greg, and Richard for a fairly hefty discussion our recent Clojure Lounge hack-day, and an education lesson on what we've learnt this past 12 months.
Episode 77 - The Lisp (cons piracy) * Sacred Cows Part 2 * APIs vs impls in different packages * ‘lisp tragics’ * 2 devs down under podcast form Kai Koenig and Mark Mandel * zeromq vs rabbitmq experiences from code lounge when to generic a Map and when to not bother looked at Go today. nice.
Illegal Argument 76 * Sproutcore - DOMless ‘Blossom’ demo * Easel.js * Tween.js * Link to Sacred Cows post from Josh * JavaScript Source Maps * The Lisp Curse * Clojure Protocols * Codelounge * Tap Keyboard * Travis CI talk on Changelog * Startup Infrafructure + Git + Git-flow + Gerrit + Jenkins + Gitblit + Vagrant / Pallet + Maven + Nexus + Bitbucket + MySql, IBM Developworks podcast on InfiniDB
Illegal Argument Episode 75 * Why you should leave Microsoft Article makes some very valid points IMHO, if ⅔ of the source you develop is non-core, why not make it open source? * How do you cope with Build which has to run integration tests where the database, user & content is created and destroyed within the build run? * Perl moves to Git * Meet The Web… with Google. * Mark’s bust