Recent Posts
Archives

PostHeaderIcon [DevoxxFR2012] Cloud Foundry manifest (manifest.yml)

applications:
– name: sample-java-app
memory: 512M
instances: 2
path: target/sample-java-app.war
services:
mysql-service:
type: mysql


## Reimagining Software Craftsmanship in the Cloud Era
The cloud era reshapes not only infrastructure but the software development lifecycle. Patrick likens modern software to the fashion industry: iPhone apps follow seasonal cycles—Angry Birds Space, Angry Birds Seasons—demanding rapid iteration and monetization within shrinking windows. A/B testing, a data-driven methodology, becomes essential for optimizing user engagement. In enterprises, “situational applications” proliferate—short-lived tools like the Devoxx website or a two-week Cloud Foundry tour prototype—contrasting with decade-long monoliths.

Kent Beck’s “Software G-forces” framework, presented a year prior, adapts agile practices to deployment cadence. Annual releases tolerate heavyweight processes; hourly deployments demand extreme lightness. Cloud’s primary business value, Patrick asserts, lies in liberating developers from infrastructure toil, enabling focus on domain logic and user value. He references Greg Vanback’s domain modeling talk, advocating domain-specific languages (DSLs) to encode business rules over plumbing.

Lock-in remains the cloud’s Achilles’ heel, evocatively termed the “Hotel California syndrome” by VMware CEO Paul Maritz: entry is easy, exit impossible. Cloud Foundry counters this through open-source neutrality, allowing code to run identically on-premises or across providers. Patrick’s transition from Google to VMware was motivated by this philosophy—empowering developers to own their destiny.

// Spring Boot on Cloud Foundry (conceptual)
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
“`

Forecasting the Developer’s Future: Lessons and Imperatives

Patrick predicts software will increasingly resemble fashion, prioritizing design excellence and tool versatility. Java developers must transcend the “hammer complex”—viewing every problem as a nail for their familiar tool—and embrace polyglot programming to unlock novel solutions. Obsolete concepts like First Normal Form or Waterfall methodologies must be unlearned; agile practices, API design, A/B testing, and framework diversity must be mastered.

The fictional George’s redemption arc offers a blueprint. After months of unemployment in 2010, a Paris JUG meetup rekindles his passion. Surrounded by peers wielding Scala, Node.js, HTML5, and agile since 2007, he invests in an iPad, iPhone, and MacBook Pro. Joining the Cantine coworking space, he codes daily with unit tests, devours Reid Hoffman’s The Start-Up of You and Gerald Weinberg’s The Psychology of Computer Programming, and treats his career as a startup. Contributing to open-source, he pushes code via Git, Jenkins, and VMC. His mobile app scales to 10 million users on cloud infrastructure he never manages, eventually acquired (perhaps by Viadeo in France). Abandoning golf for samba in Brazil, George embodies reinvention.

Conclusion: Authoring the Developer’s Comedy

Technological revolutions, like cinema’s sound era, compel adaptation or obsolescence. Developers must shed complexity worship, embrace platform abstraction, and center users through agile, data-driven practices. Open-source PaaS like Cloud Foundry democratizes innovation, mitigating lock-in and accelerating community contributions. Patrick’s narrative—part memoir, part manifesto—urges developers to engage communities, master emerging paradigms, and view their careers as entrepreneurial ventures. In this American comedy, the developer’s story ends triumphantly, provided they seize authorship of their destiny.

Links:

PostHeaderIcon [DevoxxFR2012] Portrait of the Developer as “The Artist”

Lecturer

Patrick Chanezon serves as a principal advocate for developer ecosystems and cloud innovation. At the time of this presentation, he managed the Client and Cloud Advocacy team at VMware, following a distinguished tenure at Google where he shaped developer relations from 2005 onward. His responsibilities encompassed fostering communities around OpenSocial, Google Checkout, the AdWords API, Google Web Toolkit (GWT), and Google App Engine. Prior to Google, Patrick contributed significantly to Sun Microsystems, AOL, and Netscape, focusing on portals, blogging platforms, and RSS syndication technologies. He co-founded the ROME open-source Java project for feed parsing and established the Open Source Get Together Paris (OSSGTP) group, which laid foundational groundwork for France’s vibrant Java community. His early career included consulting roles at Accenture and Netscape in France, where he maintained legacy COBOL systems before embracing the web’s transformative potential and relocating to California. Patrick’s passion for open standards, community building, and technical evangelism has positioned him as a bridge between enterprise constraints and innovative platforms.

Abstract

In a compelling analogy drawn from Michel Hazanavicius’s Oscar-winning film The Artist, Patrick Chanezon explores the seismic shifts reshaping software development through the lens of three technologies that reached critical mass between 2010 and 2012: mobile computing, HTML5-enabled browsers, and cloud platforms. He traces the developer’s journey from the rigid, complexity-laden enterprise Java environments of the early 2000s to the agile, platform-agnostic, user-focused paradigms of the cloud era. Through personal anecdotes, industry case studies, and technical deep dives, Patrick dissects outdated practices, champions open-source PaaS solutions like Cloud Foundry, and outlines actionable strategies for developers to adapt, innovate, and thrive. The presentation culminates in a vision of the developer as an entrepreneurial protagonist, scripting their own triumphant narrative in a rapidly evolving technological landscape.

The Silent Era of Enterprise Java: A Developer’s Origin Story

Patrick Chanezon opens his narrative in the Hollywood of 1927, as depicted in The Artist, where George Valentin, a silent film star, faces professional obsolescence with the advent of talkies. This cinematic transition serves as a powerful metaphor for the developer’s confrontation with disruptive technologies. Just as Valentin must adapt his craft or fade into irrelevance, developers in 2012 stand at a crossroads defined by mobile, HTML5, and cloud computing—innovations that, having achieved critical mass over the preceding two years, demand profound professional reinvention.

To ground this analogy, Patrick recounts his own professional odyssey, beginning in the early 2000s at Accenture in France. There, he maintained COBOL-based billing systems for France Télécom, a role he humorously notes likely left traces in millions of French phone bills. The web’s explosive growth in the late 1990s prompted his move to Netscape, where he witnessed the internet’s democratization firsthand. A subsequent relocation to California with his wife placed him at the epicenter of technological innovation, first at Sun Microsystems and then at Google, where he spent six years building developer ecosystems around APIs and Google App Engine. His most recent transition, in September 2011, brought him to VMware to lead advocacy for Cloud Foundry—an open-source Platform-as-a-Service (PaaS) launched by former Google engineers.

This personal trajectory mirrors the broader evolution of the developer archetype, embodied in the fictional “George.” In 2002 Paris, George toiled within SSII (Sociétés de Services en Ingénierie Informatique) firms, crafting enterprise Java applications using servlets, Enterprise JavaBeans (EJB), WebLogic clustering, Java Message Service (JMS), Oracle databases, and JavaServer Faces (JSF). Projects like the infamous “Azerti”—a three-year endeavor whose purpose even George couldn’t fully articulate—exemplified the era’s hallmarks: convoluted workflows, unusable interfaces, and code so complex that only its author could navigate it. Despite these flaws, deployment was celebrated by IT directors, and George, reveling in his indispensability, was promoted to project manager. Patrick critiques this “wallowing in complexity,” a phrase echoing Pierre Pezziardi’s earlier Devoxx talk, as a systemic failure to prioritize user experience.

Promotion, however, severed George from coding. Confined to writing specifications in windowed offices, he rarely engaged with users, whom he dismissed as perpetually dissatisfied. By 2004, attending OSSGTP meetings exposed him to agile methodologies and open-source frameworks—Groovy, REST, AspectJ, Hibernate, Spring—but these innovations felt irrelevant to his WebLogic-centric world. Agile coaches courted his budget, yet George prioritized golf and executive schmoozing over technical growth. Within two years, he hadn’t touched code, managing a 30-developer team and launching a misconceived three-year “agile plan” predicated on exhaustive documentation rather than iterative delivery. This stagnation, Patrick argues, parallels Valentin’s refusal to embrace sound, risking professional irrelevance.

The Talkies Arrive: Mobile, HTML5, and Cloud as Disruptive Forces

The presentation shifts to the technological “talkies” upending development. Mobile computing, catalyzed by Apple’s App Store in 2008 and Android’s open ecosystem, has made smartphones ubiquitous, outshipping PCs and enabling constant connectivity. HTML5, maturing as a W3C standard, unifies web development by replacing plugin-dependent rich interfaces (Flash, Silverlight) with native browser capabilities—canvas, WebSockets, local storage, and offline support. Cloud platforms abstract infrastructure, allowing developers to deploy applications without managing servers, storage, or networking.

Patrick illustrates cloud’s transformative potential through a real-world incident: Amazon Web Services’ 2011 outage, which crippled startups like Reddit, Foursquare, and Quora. Rather than indicting cloud reliability, he praises the resilience of survivors who architected distributed systems atop Amazon’s IaaS. These efforts birthed PaaS—a higher abstraction layer managing applications and services rather than virtual machines. Google App Engine, launched in 2008, initially faced ridicule for its platform-centric vision, yet within four years, the industry converged on PaaS as the developer’s future.

Competitive offerings proliferated: Salesforce acquired Heroku for its Ruby focus; CloudBees emphasized continuous integration; Amazon introduced Elastic Beanstalk; Microsoft pushed Azure; and VMware launched Cloud Foundry. Enterprises, wary of vendor lock-in and desiring hybrid cloud capabilities, gravitated toward open-source solutions. Cloud Foundry, Apache-licensed and multilingual (natively supporting Java, Scala, Ruby, Node.js; community extensions adding Python, PHP, .NET), emerged as the “Linux of the cloud.” It ships with MySQL and PostgreSQL, allows arbitrary service binding, and operates multicloud via public providers (vmwarecloudfoundry.com, AppFog) or private deployments. The BOSH tool, open-sourced in 2012, simplifies cluster management across Amazon, OpenStack, or vSphere.

Patrick contrasts proprietary lock-in with open-source empowerment through a striking example. A Google App Engine bug requesting PHP support languished for three years with over 1,000 comments, ultimately rejected. In contrast, two weeks after Cloud Foundry’s 2011 launch, a developer submitted a pull request adding PHP, immediately benefiting the ecosystem. Community contributions further extended support to Smalltalk, Erlang, and Haskell, demonstrating open-source velocity.

“`

PostHeaderIcon [DevoxxBE2012] Building Modular Applications with Enterprise OSGi

At DevoxxBE2012, Tim Ward and Holly Cummins, both seasoned experts in OSGi and enterprise technologies, delivered a comprehensive exploration into leveraging Enterprise OSGi for constructing modular applications. Tim, affiliated with Paremus and a key contributor to Apache Aries, alongside Holly from IBM, who focuses on WebSphere and performance tooling, guided attendees through the intricacies of transforming traditional Java EE setups into dynamic, OSGi-based systems. Their session bridged familiar concepts like WAR files and dependency injection with OSGi’s modularity, addressing common pain points in class path management.

They initiated the discussion by outlining Enterprise OSGi’s origins and relevance. Emerging in 2010, this specification enhances OSGi’s core, which has powered embedded systems and IDEs like Eclipse for over a decade, to better suit server-side enterprise needs. Tim and Holly emphasized how it integrates seamlessly with application servers, enabling features such as web applications, database interactions, and transaction management within an OSGi framework.

A key theme was the modularity crisis in large Java EE projects. They illustrated how sprawling WAR files, often exceeding server sizes like Tomcat’s 7MB core, accumulate unnecessary libraries, leading to class path hell. By contrasting tangled dependency graphs with OSGi’s structured approach, they demonstrated how explicit module definitions simplify maintenance and foster cleaner architectures.

Embracing OSGi Modularity Basics

Delving deeper, Tim and Holly explained OSGi’s bundle model, where each bundle—a JAR with added metadata—declares imports and exports via manifests. This enforces visibility rules, preventing accidental dependencies and promoting intentional design. They highlighted how bundles resolve dynamically, allowing runtime adaptability without redeployments.

The duo addressed common misconceptions, asserting that OSGi simplifies both complex and straightforward tasks. For instance, they showcased how dependency injection via Blueprint or Spring works effortlessly in OSGi, maintaining developer familiarity while adding modularity benefits.

They also touched on third-party library integration, noting challenges with non-OSGi JARs but solutions through tools that convert them into bundles. This ensures compatibility, reducing the bloat from redundant inclusions like JavaMail APIs.

Transitioning from WAR to WAB

A pivotal segment focused on evolving WAR files into Web Application Bundles (WABs). Tim and Holly demonstrated this migration, starting with a standard WAR and incorporating OSGi manifests to define it as a bundle. This shift enables deployment in OSGi containers like Apache Karaf or WebSphere Liberty, preserving servlet functionality while gaining modularity.

They illustrated error handling advantages: OSGi fails fast on missing dependencies, unlike runtime surprises in traditional setups. Through live examples, they showed bundles starting only when requirements are met, enhancing reliability.

Furthermore, they explored dynamism, where services can be added or removed at runtime, updating applications without downtime. This transparency in remoting and service interactions aligns with Java EE goals but executes more fluidly in OSGi.

Handling Dependencies and Repositories

Tim and Holly then examined dependency management, advocating explicit declarations to avoid hidden assumptions. They introduced bundle repositories, akin to Maven but tailored for OSGi, which automatically provision required bundles. This centralizes library control, aiding compliance in regulated environments.

In demonstrations, they deployed applications across servers like Liberty and Karaf, resolving dependencies on-the-fly. For instance, adding Joda Time via a repository revived a stalled bundle, showcasing practical modularity.

They stressed architectural enforcement: OSGi’s rules prevent poor practices, but good design remains essential. Tools like Eclipse plugins aid in visualizing and managing these structures.

Demonstrating Dynamism and Best Practices

The session culminated in hands-on demos, where a simple web app evolved into a dynamic OSGi system. Starting with a basic servlet, they integrated services for runtime changes, like toggling UI elements without restarts.

Tim and Holly concluded by reinforcing OSGi’s power in enforcing scalable, maintainable systems. They recommended resources, including their book “Enterprise OSGi in Action,” for further learning. Their presentation underscored how Enterprise OSGi not only resolves class path issues but elevates enterprise development to new levels of flexibility and efficiency.

Links:

PostHeaderIcon Tutorial: a Windows XP as guest VM in Virtual Box

Target and Constraints

I need a Windows XP running as a virtual machine (VM).  Don’t think of using your former OEM licence, it won’t work: Windows checks and makes a difference between OEM and other licences.

Microsoft provides VHD files: you can consider them as “virtual” HDD. Officially, these VHD files are intented at developpers to test their websites on various Windows (XP to Seven) and Internet versions (6 to 9).

The VHD files provided for Windows XP need a licence key to be activated, and therefore have two main drawbacks:

  1. after three days and/or three reboots, the system will allow you to log in anymore. That’s quiet a limitation :-(.
  2. But wait, there’s even worse: the VHD file provided by Microsoft will be completely disabled on February 14th, 2013!

At last, I stress on having an absolutely legal solution, since it will be deployed both on personnal (Ubuntu) and professional (Windows 8 ) desktop computers. I do not want to waste my time playing hide and seek with authorities.

Prerequisites

In this post I will assume you are a bit familiar with working on VirtualBox. If you are not, then browse the web, ask Google, RTFM, or, at last, leave a message in the comments, I’ll try to figure out a moment to write a short tutorial.

Operations

Classic

  • Create a VM within VirtualBox
  • Name it “Windows XP” for instance
  • Set the VHD file as the one downloaded and unzipped above.

Specific

  • Run the VM. You must log in as IEUser. The default password is Password1 (on French keyboards: Pqsszord&)
  • Do not validate the licence.
  • The VM will require CmBatt.sys(and possibly another one):
    • On host system: mount SP3 iso device > CD/DVD Devices> Choose a virtual CD/DVD virtual file > select WinXP SP3 ISO (xpsp3_5512.080413-2113_usa_x86fre_spcd.iso)
    • On guest system: run the CD, eg: Windows+E > D:\ > Autoplay > Install. All the files will be unzipped in a folder such as C:\1a2b3c4d5e... (with hexadecimal value).
    • In the frame asking for CmBatt.sys, select it in C:\1a2b3c4d5e...\i386
  • Windows XP will ask for drivers and try to download them. But the ethernet card has not yet been installed!
    • On host system:
      • Mount the  ethernet_drivers_for_WinXP_VirtualBox.iso (cf. above for details)
      • Devices > Install Guest Additions > accept all
    • On guest system: manually install drivers for ethernet card.
  • In order to bypass the limitation of February 14th,
    • if you read this post after February 14th, 2013: set the system time to January 1st 2013 for instance (I didn’t test ; it should work)
    • disable time synchronization between host and guest systems, eg:[java]$VIRTUALBOX_HOME/app32/VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1[/java]

Now everything should work. I suggest to take a snapshot ;-), and then to revert to it as often as needed.

Conclusions

Officialy, the VHD files provided by Microsoft are intented at developpers who need test their websites on obsolete and out-of-date browsers like Internet Explorer. But you can imagine many other usages. On my side, the interest is to have VM as a module in a complete integrated testing environment and in the frame of a software forge.

My opinion? The solution provided by Microsoft does exist, it’s better than nothing ; anyway, implementing it is a far hard matter. Limitations and complexity of install spoil the user experience. It’s a pity, because the idea of VHD is great, but does not match that of precompiled open source Virtual Boxes: http://www.virtualboxes.org

PostHeaderIcon [DevoxxFR2012] Practicing DDD in a Flash – Sculptor, the DDD Code Generator for Java

Ulrich Vachon is a DDD and agile practitioner with experience at software vendors. He promotes expressive modeling and rapid feedback.

This article expands the live coding demo of Sculptor, a DSL-based code generator for DDD applications in Java. Domain-Driven Design is powerful but verbose. Sculptor accelerates bootstrapping while preserving DDD principles. Using a simple DSL, developers define aggregates, value objects, services, and repositories. Sculptor generates Spring, JPA, REST, and MongoDB code.

Sculptor DSL and Code Generation

A live demo built a blog application:

Application Blog {
  Module posts {
    Entity Post {
      @Id String id;
      String title;
      String content;
      @ManyToOne Author author;
    }
    ValueObject Author {
      String name;
      String email;
    }
    Service PostService {
      Post save(Post post);
      List<Post> findAll();
    }
  }
}

Sculptor generated entities, repositories, services, controllers, and tests.

Customization with the Gap Mechanism

The gap keyword allows hand-written extensions without regeneration conflicts.

Links

Relevant links include the Sculptor Project at sites.google.com/site/fornaxsculptor and the original video at YouTube: Practicing DDD in a Flash.

PostHeaderIcon [DevoxxBE2012] Apache TomEE: Java EE 6 Web Profile on Tomcat

David Blevins, a veteran in open-source Java EE and founder of projects like OpenEJB and TomEE, showcased Apache TomEE. With over a decade in specifications like EJB and CDI, David positioned TomEE as a bridge for Tomcat users seeking Java EE capabilities.

He polled the audience, revealing widespread Tomcat use alongside other servers, highlighting the migration pain TomEE addresses. David described TomEE as Tomcat enhanced with Java EE, unzipping Tomcat, adding Apache projects like OpenJPA and CXF, then certifying the bundle.

Emphasizing small size, certification, and Tomcat fidelity, David outlined distributions: Web Profile (minimal specs), JAX-RS (adding REST), and Plus (including JMS, JAX-WS).

Understanding the Web Profile

David clarified the Java EE 6 Web Profile, a subset of 12 specs from the full 24, excluding outdated ones like CORBA and CMP. This acknowledges Java EE’s growth, focusing on essentials for modern apps.

He noted exclusions like JAX-RS (added in EE 7) and inclusions like JavaMail in TomEE’s Web Profile for practicality. David projected EE 7’s profile reductions, potentially enabling full-profile TomEE certification.

Demonstrating TomEE in Action

In a live demo, David set up TomEE in Eclipse using Tomcat adapters, creating a servlet with EJB injection and JPA. He deployed seamlessly, showcasing CDI, transactions, and web services, all within Tomcat’s familiar environment.

David highlighted TomEE’s lightweight footprint—under 30MB—booting quickly with low memory. He integrated tools like Arquillian for testing, demonstrating in-container and embedded modes.

Advanced Features and Configuration

David explored clustering with Hazelcast, enabling session replication without code changes. He discussed production readiness, citing users like OpenShift and Jelastic.

Configuration innovations include flat XML-properties hybrids, human-readable times (e.g., “2 minutes”), and dynamic resource creation. David showed overriding via command-line or properties, extending for custom objects injectable via @Resource.

Error handling stands out: TomEE collects all deployment issues before failing, providing detailed, multi-level feedback to accelerate fixes.

Community and Future Directions

Celebrating TomEE’s first year, David shared growth metrics—surging commits and mailing lists—inviting contributions. He mentioned production adopters praising its simplicity and performance.

David announced a logo contest, encouraging participation. In Q&A, he affirmed production use, low memory needs, and solid components like OpenJPA.

Overall, David’s talk positioned TomEE as an empowering evolution for Tomcat loyalists, blending familiarity with Java EE power.

Links:

PostHeaderIcon [DevoxxFR2012] Toward Sustainable Software Development – Quality, Productivity, and Longevity in Software Engineering

Frédéric Dubois brings ten years of experience in JEE architecture, agile practices, and software quality. A pragmatist at heart, he focuses on continuous improvement, knowledge sharing, and sustainable delivery over rigid processes.

This article expands Frédéric Dubois’s 2012 talk into a manifesto for sustainable software development. Rejecting the idea that quality is expensive, he proves that technical excellence drives long-term productivity. A three-year-old application should not be unmaintainable. Yet many teams face escalating costs with each new feature. Dubois challenged the audience: productivity is not about delivering more features faster today, but about maintaining velocity tomorrow, next year, and five years from now.

The True Cost of Technical Debt

Quality and productivity are intimately linked, but not in the way most assume. High quality reduces defects, simplifies evolution, and prevents technical debt. Low quality creates a vicious cycle of bugs, rework, and frustration. Dubois shared a case study: a banking application delivered on time but with poor design. Two years later, a simple change required three months of work. The same team, using TDD and refactoring, built a similar system in half the time with one-tenth the defects.

Agile Practices for Long-Term Velocity

Agile practices, when applied pragmatically, enable sustainability. Short feedback loops, automated tests, and collective ownership prevent knowledge silos. Fixed-price contracts and outsourcing often incentivize cutting corners. Transparency, shared metrics, and demo-driven development align business and technical goals.

Links

Relevant links include the original video at YouTube: Toward Sustainable Development.

PostHeaderIcon [DevoxxFR2012] “Obésiciel” and Environmental Impact: Green Patterns Applied to Java – Toward Sustainable Computing

Olivier Philippot is an electronics and computer engineer with over a decade of experience in energy management systems and sustainable technology design. Having worked in R&D labs and large industrial groups, he has dedicated his career to understanding the environmental footprint of digital systems. A founding member of the French Green IT community, Olivier contributes regularly to GreenIT.fr, participates in AFNOR working groups on eco-design standards, and trains organizations on sustainable IT practices. His work bridges hardware, software, and policy to reduce the carbon intensity of computing.

This article presents a comprehensively expanded analysis of Olivier Philippot’s 2012 DevoxxFR presentation, Obésiciel and Environmental Impact: Green Patterns Applied to Java, reimagined as a foundational text on software eco-design and technical debt’s environmental cost. The talk introduced the concept of obésiciel, software that grows increasingly resource-hungry with each release, driving premature hardware obsolescence. Philippot revealed a startling truth: manufacturing a single computer emits seventy to one hundred times more CO2 than one year of use, yet software bloat has tripled performance demands every five years, reducing average PC lifespan from six to two years.

Through Green Patterns, JVM tuning strategies, data efficiency techniques, and lifecycle analysis, this piece offers a practical framework for Java developers to build lighter, longer-lived, and lower-impact applications. Updated for 2025, it integrates GraalVM native images, Project Leyden, energy-aware scheduling, and carbon-aware computing, providing a complete playbook for sustainable Java development.

The Environmental Cost of Software Bloat

Manufacturing a laptop emits two hundred to three hundred kilograms of CO2 equivalent. The use phase emits twenty to fifty kilograms per year. Software-driven obsolescence forces upgrades every two to three years. Philippot cited Moore’s Law irony: while transistors double every eighteen months, software efficiency has decreased due to abstraction layers, framework overhead, and feature creep.

Green Patterns for Data Efficiency

Green Patterns for Java include data efficiency. String concatenation in loops is inefficient:

String log = "";
for (String s : list) log += s;

Use StringBuilder instead:

StringBuilder sb = new StringBuilder();
for (String s : list) sb.append(s);

Also use compression, binary formats like Protocol Buffers, and lazy loading.

JVM Tuning for Energy Efficiency

JVM optimization includes:

-XX:+UseZGC
-XX:ReservedCodeCacheSize=128m
-XX:+UseCompressedOops
-XX:+UseContainerSupport

GraalVM Native Image reduces memory by ninety percent, startup to fifty milliseconds, and energy by sixty percent.

Carbon-Aware Computing in 2025

EDIT:
In 2025, carbon-aware Java includes Project Leyden for static images without warmup, energy profilers like JFR and PowerAPI, cloud carbon APIs from AWS and GCP, and edge deployment to reduce data center hops.

Links

Relevant links include GreenIT.fr at greenit.fr, GraalVM Native Image at graalvm.org/native-image, and the original video at YouTube: Obésiciel and Environmental Impact.

PostHeaderIcon [DevoxxBE2012] On the Road to JDK 8: Lambda, Parallel Libraries, and More

Joseph Darcy, a key figure in Oracle’s JDK engineering team, presented an insightful overview of JDK 8 developments. With extensive experience in language evolution, including leading Project Coin for JDK 7, Joseph outlined the platform’s future directions, balancing innovation with compatibility.

He began by contextualizing JDK 8’s major features, particularly lambda expressions and default methods, set for release in September 2013. Joseph polled the audience on JDK usage, noting the impending end of public updates for JDK 6 and urging transitions to newer versions.

Emphasizing a quantitative approach to compatibility, Joseph described experiments analyzing millions of lines of code to inform decisions, such as lambda conversions from inner classes.

Evolving the Language with Compatibility in Mind

Joseph elaborated on the JDK’s evolution policy, prioritizing binary compatibility while allowing measured source and behavioral changes. He illustrated this with diagrams showing compatibility spaces for different release types, from updates to full platforms.

A core challenge, he explained, is evolving interfaces compatibly. Unlike classes, interfaces cannot add methods without breaking implementations. To address this, JDK 8 introduces default methods, enabling API evolution without user burden.

This ties into lambda support, where functional interfaces facilitate closures. Joseph contrasted this with past changes like generics, which preserved migration compatibility through erasure, avoiding VM modifications.

Lambda Expressions and Implementation Techniques

Diving into lambdas, Joseph defined them as anonymous methods capturing enclosing scope values. He traced their long journey into Java, noting their ubiquity in modern languages.

For implementation, Joseph rejected simple inner class translations due to class explosion and performance overhead. Instead, JDK 8 leverages invokedynamic from JDK 7, allowing runtime strategies like class spinning or method handles.

This indirection decouples binary representation from implementation, enabling optimizations. Joseph shared benchmarks showing non-capturing lambdas outperforming inner classes, especially multithreaded.

Serialization posed challenges, resolved via indirection to reconstruct lambdas independently of runtime details.

Parallel Libraries and Bulk Operations

Joseph highlighted how lambdas enable powerful libraries, abstracting behavior as generics abstract types. Streams introduce pipeline operations—filter, map, reduce—with laziness and fork-join parallelism.

Using the Fork/Join Framework from JDK 7, these libraries handle load balancing implicitly, encapsulating complexity. Joseph demonstrated conversions from collections to streams, facilitating scalable concurrent applications.

Broader JDK 8 Features and Future Considerations

Beyond lambdas, Joseph mentioned annotations on types and repeating annotations, enhancing expressiveness. He stressed deferring decisions to avoid constraining future evolutions, like potential method reference enhancements.

In summary, Joseph portrayed JDK 8 as a coordinated update across language, libraries, and VM, inviting community evaluation through available builds.

Links:

PostHeaderIcon [DevoxxFR2012] Node.js and JavaScript Everywhere – A Comprehensive Exploration of Full-Stack JavaScript in the Modern Web Ecosystem

Matthew Eernisse is a seasoned web developer whose career spans over fifteen years of building interactive, high-performance applications using JavaScript, Ruby, and Python. As a core engineer at Yammer, Microsoft’s enterprise social networking platform, he has been at the forefront of adopting Node.js for mission-critical services, contributing to a polyglot architecture that leverages the best tools for each job. Author of the influential SitePoint book Build Your Own Ajax Web Applications, Matthew has long championed JavaScript as a first-class language beyond the browser. A drummer, fluent Japanese speaker, and father of three living in San Francisco, he brings a unique blend of technical depth, practical experience, and cultural perspective to his work. His personal blog at fleegix.org remains a valuable archive of JavaScript patterns and web development insights.

This article presents an exhaustively elaborated, deeply extended, and comprehensively restructured expansion of Matthew Eernisse’s 2012 DevoxxFR presentation, Node.js and JavaScript Everywhere, transformed into a definitive treatise on the rise of full-stack JavaScript and its implications for modern software architecture. Delivered at a pivotal moment, just three years after Node.js’s initial release, the talk challenged prevailing myths about server-side JavaScript while offering a grounded, experience-driven assessment of its real-world benefits. Far from being a utopian vision of “write once, run anywhere,” Matthew argued that Node.js’s true power lay in its event-driven, non-blocking I/O model, ecosystem velocity, and developer productivity, advantages that were already reshaping Yammer’s backend services.

This expanded analysis delves into the technical foundations of Node.js, including the V8 engine, libuv, and the event loop, the architectural patterns that emerged at Yammer such as microservices, real-time messaging, and API gateways, and the cultural shifts required to adopt JavaScript on the server. It includes detailed code examples, performance benchmarks, deployment strategies, and lessons learned from production systems handling millions of users.

EDIT
In 2025 landscape, this piece integrates Node.js 20+, Deno, Bun, TypeScript, Server Components, Edge Functions, and WebAssembly, while preserving the original’s pragmatic, hype-free tone. Through rich narratives, system diagrams, and forward-looking speculation, this work serves as both a historical archive and a practical guide for any team evaluating JavaScript as a backend language.

Debunking the Myths of “JavaScript Everywhere”

The phrase JavaScript Everywhere became a marketing slogan that obscured the technology’s true value. Matthew opened his talk by debunking three common myths. First, the idea that developers write the same code on client and server is misleading. In reality, client and server have different concerns, security, latency, state management. Shared logic such as validation or formatting is possible, but full code reuse is rare and often anti-patterned. Second, the notion that Node.js is only for real-time apps is incorrect. While excellent for WebSockets and chat, Node.js excels in I/O-heavy microservices, API gateways, and data transformation pipelines, not just real-time. Third, the belief that Node.js replaces Java, Rails, or Python is false. At Yammer, Node.js was one tool among many. Java powered core services. Ruby on Rails drove the web frontend. Node.js handled high-concurrency, low-latency endpoints. The real win was developer velocity, ecosystem momentum, and operational simplicity.

The Node.js Architecture: Event Loop and Non-Blocking I/O

Node.js is built on a single-threaded, event-driven architecture. Unlike traditional threaded servers like Apache or Tomcat, Node.js uses an event loop to handle thousands of concurrent connections. A simple HTTP server demonstrates this:

const http = require('http');

http.createServer((req, res) => {
  setTimeout(() => {
    res.end('Hello after 2 seconds');
  }, 2000);
}).listen(3000);

While one request waits, the event loop processes others. This is powered by libuv, which abstracts OS-level async I/O such as epoll, kqueue, and IOCP. Google’s V8 engine compiles JavaScript to native machine code using JIT compilation. In 2012, V8 was already outperforming Ruby and Python in raw execution speed. Recently, V8 TurboFan and Ignition have pushed performance into Java and C# territory.

Yammer’s Real-World Node.js Adoption

In 2011, Yammer began experimenting with Node.js for real-time features, activity streams, notifications, and mobile push. By 2012, they had over fifty Node.js microservices in production, a real-time messaging backbone using Socket.IO, an API proxy layer routing traffic to Java and Rails backends, and a mobile backend serving iOS and Android apps. A real-time activity stream example illustrates this:

io.on('connection', (socket) => {
  socket.on('join', (room) => {
    socket.join(room);
    redis.subscribe(`activity:${room}`);
  });
});

redis.on('message', (channel, message) => {
  const room = channel.split(':')[1];
  io.to(room).emit('activity', JSON.parse(message));
});

This architecture scaled to millions of concurrent users with sub-100ms latency.

The npm Ecosystem and Developer Productivity

Node.js’s greatest strength is npm, the largest package registry in the world. In 2012, it had approximately twenty thousand packages. Now, It exceeds two and a half million. At Yammer, developers used Express.js for routing, Socket.IO for WebSockets, Redis for pub/sub, Mocha and Chai for testing, and Grunt, now Webpack or Vite, for builds. Developers could prototype a service in hours, not days.

Deployment, Operations, and Observability

Yammer ran Node.js on Ubuntu LTS with Upstart, now systemd. Services were containerized early using Docker in 2013. Monitoring used StatsD and Graphite, logging via Winston to ELK. A docker-compose example shows this:

version: '3'
services:
  api:
    image: yammer/activity-stream
    ports: ["3000:3000"]
    environment:
      - REDIS_URL=redis://redis:6379

The 2025 JavaScript Backend Landscape

EDIT:
The 2025 landscape includes Node.js 20 with ESM and Workers, Fastify and Hono instead of Express, native WebSocket API and Server-Sent Events instead of Socket.IO, Vite, esbuild, and SWC instead of Grunt, and async/await and Promises instead of callbacks. New runtimes include Deno, secure by default and TypeScript-native, and Bun, Zig-based with ten times faster startup. Edge platforms include Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.

Matthew closed with a clear message: ignore the hype. Node.js is not a silver bullet. But for I/O-bound, high-concurrency, real-time, or rapid-prototype services, it is unmatched. In 2025, as full-stack TypeScript, server components, and edge computing dominate, his 2012 insights remain profoundly relevant.

Links

Relevant links include Matthew Eernisse’s blog at fleegix.org, the Yammer Engineering Blog at engineering.yammer.com, the Node.js Official Site at nodejs.org, and the npm Registry at npmjs.com. The original video is available at YouTube: Node.js and JavaScript Everywhere.