
airhacks.fm podcast with adam bien
Java, Serverless, Clouds, Architecture and Web conversations with Adam Bien
Latest episodes

Jun 23, 2019 • 56min
Payara Micro vs./or Payara Server Full
An airhacks.fm conversation with Steve Millidge (@l33tj4v4) about:
60-70% growth every year, customer base is growing quickly, 30 employees, great team with great vision, Payara is self-founded by commercial support fees,
there are a lot of "traditional" applications in production, not every application needs Kubernetes, Payara clients are running their software on bare metal and on containerized platforms,
it doesn't take much to support Kubernetes, Docker and Kubernetes are infrastructure and not a programming model, Java EE programming model is productive and can be taken to Docker and Kubernetes infrastructure,
config externalization is the major task for Kubernetes support, Payara clustering discovery service uses Kubernetes for lookup, Payara Admin server is able to manage Payara Docker nodes,
Payara Admin could replace the Kubernetes scheduler, scalability based on business metrics, the JavaONE GlassFish 3 cloud demo, aggregating metrics in a cluster, Payara Clustering brings data closer to processing,
Payara Cluster is a distributed cache aka data grid, smart proxies with JAX-RS, CORBA was replaced by JAX-RS, load balancing with JAX-RS, in Payara 5 deployment groups and data grid comprise a cluster,
Payara Server and Payara Micro support both MicroProfile and Java EE 8, application server as managed runtime,
Payara comes with request tracing, database monitoring, upcoming releases will expose more metrics.
you should not need an APM tool to monitor an application server, Canadian government contributes to LightFish, guidance for Maven bloat prevention, Payara Source To Image (S2I) https://github.com/AdamBien/s2i-payara and Payara Micro Source To Image (S2I) https://github.com/AdamBien/s2i-payara-micro,
Payara Server supports more APIs than Payara Micro, Payara Server is capable to manage multiple instances and comes with admin console, Payara Micro runs on its own and is designed to run within docker containers, clouds and kubernetes, you could start with Payara Server and migrate to Payara Micro later,
Payara Server and Payara Micro runtimes are similar, Payara Micro does not support OSGi - what is a feature, the only runtime difference between Payara Full and Micro is OSGi,
Payara Micro doesn't have to be installed, the core development happens on Payara Server, Payara Micro is just repackaging of Payara Server, Payara Micro uses hardcoded classpath, the javax Jakarta EE namespace issue, Java EE backward compatibility is great feature and also a weakness,
Jakarta EE is boring, MicroProfile iterates more quickly, Jakarta EE release cadence could be once every 2 year, MicroProfile releases 4 times a year, Jakarta EE and MicroProfile are popular in Europe, managing satellites with GlassFish, kubernetes anti-pattern, running OpenShfit cluster organization-wide
Steve Millidge on twitter: @l33tj4v4, Steve's company: https://payara.fish

Jun 16, 2019 • 51min
Web Applications Without Frameworks
An airhacks.fm conversation with Ben Farell (@bfarrellforever) about:
copying and pasting game programming logic from magazines into a TI 994a,
the ugly purple people picker, accidentally buying Java books, boring C++ without visual elements, dangerous assembly classes, Macromedia Director in 1996,
developing with Flash, suddenly in 2010 Flash lost its popularity, writing casual games for kids,
a thick book about LiveScript, JavaScript is just Java with a bit script, Java was great and the visual stuff was boring,
writing code in key frames, Adobe Flex, Adobe Flex Builder,
typesafe ActionScript, GreenSock, GreenSock started with Flash, the book about WebComponents,
plain vanilla, no thrills, JavaScript, developing applications without a framework, potential migrations, stable React, JavaScript becomes more and more similar to Java, CSS 3 without less or Sass,
plain lit-html and hyperhtml as fallback, template literals vs. lit-html, partial rendering with lit-html,
no virtual DOM, possible security issues with plain template literals, lit-html and event binding, lit-html vs. custom attributes for wiring,
separating templates and business logic with modules, bad experiences as Java developer with maintaining multiple files, CSS extensions with houdini,
a standard for hooking into browser's CSS processing, is there no more need for frameworks?, frameworks as hindrance, the Vaadin Router webcomponent,
building a navigation component, the magic under the hoot comes with good intentions, building fusion reactors for CRUD,
using custom elements for application structuring, the reflection best practice, shadow DOM is supported on all browsers,
shadow DOM is problematic with CSS design systems, Constructible Style Sheets to the rescue, start without Shadow DOM, then introduce it on demand,
customizing styles with CSS properties, using IDs without Shadow DOM is hard, ShadowDOM with querySelector, Adobe Project Aero,
browsersync in development mode, obsolete build systems, bunding with rollupjs and babel plugin for legacy browser support, pikapkg - the anti-bundler,
2005 EMMY for Sesame Street Games Channel, cheating with annoying Elmo, WebComponents in Action (discount code: podairhacks19): a book about making WebComponents without a framework,
outdated Polymer, VR and AR with WebComponents, a-frame, Occulus Quest and Tiltbrush,
Ben Farell on twitter: @bfarrellforever
Also checkout: http://webcomponents.training, http://effectiveweb.training or visit http://airhacks.com

Jun 11, 2019 • 1h 2min
Transactions, J2EE, Java EE, Jakarta EE, MicroProfile and Quarkus
An airhacks.fm conversation with Mark Little (@nmcl) about:
the 250 miles terminal connection, Commodore PET, battle ships on paper tapes, mocking the login screen on Commodore,
reverse engineering Space Invaders, the lack of games in UK was a motivation for writing games, learning peek and pokes,
Commodore engineering team wrote a book about machine code, Basic on BBC model B, Pascal and C on EPROMs, building a hotel booking system on Pascal,
building a pseudo operating system with C, Concurrent Pascal, Cfront - the early version of C++,
Atari ST came with C support, C++ over Concurrent Euclid, working with Andy Tannenbaum and Bjorne Stroustroup on Minix,
porting Minix to Atari ST, Arjuna the Indian god, Indian Gods over Celtics, Arjuna -- the object oriented transaction system,
started in 1985, inheriting transactions, transactions are not about HA, transactions are about recoverability, starting Java as Oak, the shiny object syndrome and transition to Java,
writing web browsers in Java, porting Arjuna to Java with Blackdown Java, Jim Waldo and Note on Distributed Computing, opaque over transparent,
Johan Vos was a member of the Blackdown team, RPC with C++ and Arjuna, almost serverless, packing and unpacking instances and the Lock Manager, 2PC was the default,
without X/Open XA heuristics the system would block forever, XA heuristics were introduced to make independent decisions, enforcing consistency in microservices with 2PC/XA is hard,
SOA and microservices come with similar challenges, there is no a single transaction model applicable for every single use case, XA/2PC is lesser suited for long running actions, transactions were out-of-fashion - now they are back,
Google Spanner is transactional, Arjuna was acquired by Bluestone, Arjuna Technologies was acquired by HP,
JBoss did a partial acquisition of Arjuna, before the Arjuna acquisition, JBoss couldn't handle 2PC properly, Bluestone became the HP application server, JBoss was always opensource and good quality code,
J2EE came before annotations - metadata was attached with partially redundant XML, Mark became RedHat CTO in 2009, MicroProfile is great and there is a lot of interests in evolving Java into clouds by the community,
Jakarta EE was a great move by Oracle in 2017, Jakarta EE has to move faster, Jakarta EE is more like the stable OS, MicroProfile is where the innovation happens,
there are no more monolithic application server, what does "enterprise" mean?, QuarkEE is opinionated Quarkus,
Mark Little on twitter: @nmcl, Mark's blog

Jun 2, 2019 • 58min
Use the Most Productive Stack You Can Get
An airhacks.fm conversation with Gunnar Morling (@gunnarmorling) about:
Eastern computers and Robotron KC 85, CPU slicing, screensaver as source code, Hello World in Pascal with 14, University in Dresden, AMD and Java 1.2 with Forte for Java,
starting at Saxonia Systems as consultant, having fun in a Java EE 5 course, the EJB 3 and Guice blog post, the effect of a link,
Java EE 5, the "dinsoaur version" was productive although you had to write interfaces, early EJB and J2EE were bloated, but it was 15 years ago, working at Otto the German "amazon" and Kuehne and Nagel,
just use the most productive stack you can get, what does "modern" actually mean?, applying quantum computing to CRUD,
it was hard to find a killer use case for WildFly Swarm, quarkus is a Java EE + MicroProfile subset with useful features,
FatJars do not make any sense in a layered file system, bare metal infrastructure is the killer feature of UberJars and FatJARs, Heavyweight vs. Lightweight JavaONE session,
quarkus native image is a fraction of JVM size, the "compile time boot", performing optimizations at build and not at boot time,
with quarkus CDI performance might be as good as EJBs, deployment descriptors are only needed at build time, boring programming model with optimizations under the hood is true innovation, MicroProfile FaultTolerance combines easy programming model with Hystrix's capabilities,
don't re-invent the wheel, BeanValidation's in XML-configuration is not supported in quarkus native mode, QuarkEE release, using quarkus for web development, validating design and architecture with deptective,
deptective enforces the rules at compile time, deptective is a plugin of javac compiler, javadoc may cause package cycles, measuring packge coupling and cohesion,
jacoco as code coverage plugin for quarkus, debezium detects changes and passes the events to Apache Kafka, debezium uses DB APIs, logical decoding in PostgreSQL,
debezium receives updates even it the application is not running, listening on the transactional log of the database.
Gunnar on twitter: @gunnarmorling and github: https://github.com/gunnarmorling. Gunnar's blog: https://morling.dev/.

May 26, 2019 • 1h 19min
Apache Firefighter
An airhacks.fm conversation with Mark Struberg (@struberg) about:
rubber-keyed ZX81, C64, Basic, tons of incorrect rows of hexcode,
transitioning from Basic to assembly, games were an inspiration, 40mins to load the game, Turbo Copy for software refreshment,
transitioning from software to solding transistors, flip-flops with 10 years,
programming Logo with Atari ST, HTL in Austria,
Pascal on 286 Commodore PC 20 with monochrome computer,
host programming on Digital Equipment PDP 8e, Sun's pizza boxes,
drinkomat the drink (also vodka) portioning machine, replacing 2 PCs with one microcontroller, the first 3D printer, testing insulin pumps, learning C++ with Glockenspiel C++ compiler,
starting with Java 1.0.2, building stock exchange software with Java, brilliant Martin Poeschl, Maven 1 and Cocoon,
JRun was servlet-like engine, Borland JBuilder, building platforms for Austrian insurance market platform in 1999,
Lutris Enhydra application server, Tomcat was donated by Sun to Apache, never control program flow with exceptions, Jigsaw - Apache servlet engine, XMLc was a built-step in Ant,
DOM manipulation in Java on the server, defining data structure in XML and generating the DAOs,
enhydra was Canadian then donated to ow2, Windows and OS2 programming, C# came 2002, first EJB-drafts were nightmare,
EJB could be implemented better with Objective-C Portable Distributed Objects from NeXT,
EJB was a huge buzz topic pushed by Microsoft's DCOM,
MTS was almost like EJB, DCOM came before EJB, MTS came after EJB, "remote first" was wrong,
macroservices are more appealing for enterprise, delivering in 2004 25 TB of music (and Jamba ringtones) to 16 million customers and with Servlets and Resin from Caucho,
hardcore threads were native, Mark worked as freelancer, a few big Sun Enterprise 400 with MySQL without transactions, optimizing for read only,
projects under fire, the challenging part in the backend were contracts and payment, switching logic with re-deployment with Groovy, switching from Spring to CDI, refactoring PHP to Java in 5 years, Seam 2 didn't had the future,
serving 5 millions impressions / 12k requests per minute in the first day with 1-month old Java EE 6, Glassfish is rubbish, Payara is great, Payara delivers patches incredibly fast,
Java EE community is really nice, the real benefit of opensource is sharing costs, experience, maintenance, testing costs and fork prevention, JPA is too much magic but you get tons of answers for free, three category of projects: perfect, problematic and completely broken,
the javax namespace issue, javax became immutable, Geronimo app server is dead, the Geronimo contains Java EE API specs, one-shot migration to jakarta namespace is not that hard, migrate once, but do it right,
javax migration is a lorge task for vendors but a small issue for business, developers are still thinking is "J2EE", Eclipse is too protective and should open to other foundations and communities
Mark on twitter: https://twitter.com/struberg and github: https://github.com/struberg. Mark's blog: https://struberg.wordpress.com/.

May 19, 2019 • 34min
Jakarta EE / MicroProfile Testing and Quality over Statistics
An airhacks.fm conversation with Andrew Guibert (@andrew_guibert) about:
the Java EE Testing survey and possible room for improvements, testing is too hard with severe consequences, reasonable projects are interested in delivering good software, large enterprises are more interested in statistics,
testing is about increasing developer's confidence, confidence decreases with the length of time spent outside the project, in 1996 you would test with a bunch of main methods, most projects are ignoring System Tests because the statistics are not gathered,
"test first" or last does not matter, you only have to deliver the tests with working software at the same time, running System Tests with code coverage, fast and long running modes, Unit-,
Integration-, and System Tests are naturally ordered by their execution time,
in business projects unit test coverage can be fairly low, in business projects arquillian comes with a little added value, in Integration Tests it is crucial to use the same version of libraries,
tests do not accurately represent the production environment, System Tests are reused as Stress Tests,
JMH is a great library for stress tests, at IBM there is a dedicated performance team, in projects torture tests are a good start,
toxiproxy by shopify, management driven code metrics is a failure of management, unit tests should be about verifying the behaviour not the implementation details,
too many unit tests increase the costs of refactoring, unit tests are running in seconds, integration tests in a few minutes, the performance of system tests really depends on the system, integration tests give more confidence, than unit tests, unit tests are great for productivity,
running servers in code coverage modes would be useful, jacoco code coverage metrics could be exposed via JSON,
Andy on twitter: @andrew_guibert and github.

May 12, 2019 • 1h 17min
Java Native Database
An airhacks.fm conversation with Markus Kett (@MarkusKett) about:
C64 and sports games, Weiden is not in Bavarian Forest,
soccer as motivation for programming, writing first programs in basic with 17, writing contacts management, PCs are boring machines, but good for business,
Java is the best programming language, Pentium 1 was introduced at CEBIT in 1993, the dream about an own booth at CEBIT came true, webdesign software based on applets (XPage) was very successful at SYSTEMS in Munich,
Markus was the business man and had no time for programming - like Steve Jobs, self-financing with selling products, competing with Microsoft and Adobe, writing a 4GL Java-based development environment like Visual Basic called XDev, Java Developers don't like the Drag and Drop programming experience,
building an IDE from scratch, discussions with Sun Microsystems about StarOffice integration, migrating from Swing to SWT and Eclipse, using Vaadin as UI technology,
connecting beautiful UI to DB was too hard, databases have more types than Java what makes code generation hard, in 4GL the database comes first, RapidEclipse is free but commercial support is available,
XDev provides tool and project support, RapidClipse understands rich database types and generates JPA POJOs, Hibernate importer, how to write queries in Java, implementing JPA-SQL is based on xtext by itemis and generates JPA-QL from SQL,
storing data is still too complicated, serialization looked promising but was too unsecure and only entire objects can be serialized, Kryo, Fast Serializer, JetStream (renamed to Microstream) serializer, the database engine stores objects in any file storage,
there is no impedance mismatch, the native Java storage engine, queries are performed with Java 8+ streams, JCA connector passes transactions and security context to the application server,
JCA prototypical implementation, kubernetes persistent volumes,
Bavarian Forrest is like Canada, the largest walking robot, Roding race car,
being a TV host on Giga, constant 30k downloads and the XDev TV, DVDs were more successful than TV,
JCon and the coding keynote, Java EE as secret weapon at JCon, stealing (adapting) the "no slides" ideas, the world first free, physical,
Java magazine JAVAPRO with 8500 readers, community prefers Java-only conference,
Markus Kett on twitter: @MarkusKett. JetStream was renamed to MicroStream.

May 5, 2019 • 1h 1min
80% Code Coverage is Not Enough
An airhacks.fm conversation with James Wilson (@jgwilson42) about:
the result of pressing the break button on a BBC computer, and ZX Spectrum, Space Invaders with Basic,
extending minecraft with Java, accidental tester career, best interviewees got programmer jobs, hackers and testers, developers like the happy path, unit test coverage is useless without good asserts,
is 80% code coverage a valuable target?, code coverage was used as a motivation for writing tests, reflection utilities to increase code coverage, getters / setters never brake,
Code as a Crime Scene book, methods longer than a screen are problematic, the ratio between trivial and good asserts,
a good javadoc and unit tests follow similar principles, system tests are the most important one, unit testing is good for checking error scenarios, the more tests you have,
the easier it is to locate errors, the Law of Triviality requires standard names for test categories, integration testing and system testing,
reusing system tests as clients and stress tests,
UK retailer goes down, take the max load and double it,
jbmc is bytecode verification tool, diffblue cover generates unit tests, generating unit tests quickly for legacy backends, playground,
What is the AI in “AI for Code”? blogpost, diffblue blog, @diffbluehq
James Wilson on twitter: @jgwilson42.
Checkout: javaeetesting.com - the online test about Unit-, Integration-, and Stress Testing and see you at airhacks.com.

Apr 21, 2019 • 43min
Kafka vs. JMS/MQ
An airhacks.fm conversation with Andrew Schofield, Chief Architect, Event Streams at IBM about:
1982, Dragon 32 and Basic Programming with 12, starting with JDK 1.0,
writing a JMS provider for WebSphere v6,
no ceremony JMS, Apache Kafka considered simple,
why writing a Kafka application is harder than a JMS application,
there is a big architectural difference between Kafka and JMS, or message queuing and event stores, Kafka remembers historical data,
JMS is about fowarding messages, with Kafka it is harder to write conversational systems, clustering singletons is hard, running Kafka on a single node is easy,
"deliver once and only once" is the killer feature of persistent JMS queues, JMS topics are nicer - you can send messages to unknown receivers,
the killer use cases for JMS and Kafka, JMS is good for system coordination and transaction integrity, Kafka is well suited for (IoT) event buffering and re-processability,
2PC, XA and the advantages of middleware,
in distributed transactions everyone has to remember everything, we only need distributed and rock-solid persistence,
kubernetes pods are stateless, challenges of using Kafka, setting up for production can take months for an average Java programmer with JMS background,
restarting Kafka brokers can be challenging, in Kafka you are communicating with the cluster, MQ is a collection of individual queue managers,
in MQ there is a directory of resources which knows where the queues are hosted.
Andrew on github, and LinkedIn.

Apr 14, 2019 • 59min
Quarkus and ThinJARs
An airhacks.fm conversation with Stuart Douglas (@stuartwdouglas) about:
starting with Visual Basic in high school, with the goal to build games, then quick transition to C++, creating Tetris from scratch in weeks in C++,
building first commercial financial planning application with PHP, starting with Java 1.5 and annotations in 2007, Java is popular in Australia, building Seam applications with JBoss 4,
contributing to Weld in spare time, improving the performance and startup performance of Weld,
working for RedHat as JBoss AS 7 developer, JBoss is more than the application server and the advent of Wildfly,
the braning clean up, creating Undertow, WildFly was shipped with deactivated EJB pooling,
too small EJB pools can cause performance issues, how to kill EJBs with CDI, EJB vs. CDI, interview with Pavel Samolysov and EJB vs. CDI performance comparison,
quarkus is not using reflection for injection, a small team (8 people) started quarkus to leverage GraalVM,
the goal of quarkus is to make a subset of Java EE natively compilable to an "unikernel", updating
the cloud platform without recompiling the app, serverless with quarkus, serverless without the function disadvantage,
20MB self contained, native images, building Java EE / Jakarta EE unikernels, extremely fast start times for Java EE applications,
native images are running with a fraction of RAM, at one point in time, quarkus might be commercially supported by RedHat,
CDI portable extensions are not supported now, quarkus wizard is not based on Maven archetype - what is a great idea,
Maven is only one of many possible entry points to quarkus, a really good developer experience was always the main goal,
hot reload is a must, currently the classloader with the "business" part is just dropped and the app is reloaded,
adding dependencies via CLI or pom.xml, quarkus ThinJARs are compatible with the ThinWAR idea, FatJAR's builds have to be slower,
packaging all dependencies into a single JAR, using Chrome Dev Tools Protocols for hot reloading the browser,
misusing quarkus for building command line tools, community extensions are on the roadmap, quarkus is going to be well integrated with OpenShift,
quarkus forum.
Stuart on twitter: @stuartwdouglas, and github.