Recent Posts
Archives

Archive for the ‘General’ Category

PostHeaderIcon [KotlinConf2017] What’s New & Cool in Kotlin Tools

Lecturer

Dmitry Jemerov is a senior software engineer and the Kotlin IDE team lead at JetBrains, where he drives the development of tools and plugins to enhance Kotlin’s developer experience. With extensive experience in building IntelliJ IDEA plugins and supporting build tools like Gradle, Maven, and Ant, Dmitry has played a pivotal role in shaping Kotlin’s ecosystem. His leadership ensures that Kotlin’s tooling aligns with the language’s pragmatic design, fostering productivity across diverse development environments.

Abstract

Kotlin’s tooling ecosystem is integral to its success as a modern programming language, enabling developers to create efficient, cross-platform applications. This article analyzes Dmitry Jemerov’s presentation at KotlinConf 2017, which showcases new features in the Kotlin plugin for IntelliJ IDEA, with a focus on version 1.2 enhancements. It explores the context of Kotlin’s tooling evolution, the methodology behind multiplatform project support, incremental compilation advancements, and integration with build systems. The analysis highlights the implications of these innovations for developer productivity and cross-platform development, emphasizing Kotlin’s commitment to seamless, high-performance workflows.

Context of Kotlin Tooling Evolution

KotlinConf 2017, held in San Francisco from November 1–3, 2017, marked a significant milestone for Kotlin, reflecting its rapid adoption following Google’s endorsement for Android development. Dmitry Jemerov’s presentation focused on the Kotlin plugin for IntelliJ IDEA, a cornerstone of the language’s developer experience. As Kotlin expanded beyond JVM-based applications to multiplatform projects, including JavaScript and native targets, the need for robust tooling became paramount. Dmitry’s talk addressed this demand, showcasing features designed to streamline development across diverse platforms while maintaining Kotlin’s hallmark simplicity and interoperability.

The context of Dmitry’s presentation reflects the challenges of supporting a versatile language like Kotlin, which targets JVM, JavaScript, and native platforms. Developers required tools that could handle common and platform-specific code seamlessly, integrate with build systems like Gradle, and optimize compilation for performance. Dmitry’s leadership in the Kotlin IDE team positioned him to address these needs, demonstrating how JetBrains’ tools empower developers to tackle complex, multiplatform projects with efficiency and confidence.

Multiplatform Project Support

Dmitry’s methodology for supporting multiplatform projects centers on structuring Kotlin projects into common and platform-specific modules. Common modules contain shared Kotlin code, ensuring reusability across platforms, while platform-specific modules incorporate language-specific code, such as Java for JVM or JavaScript for web applications. The Kotlin compiler integrates these modules, producing artifacts like JAR files or APKs tailored to each platform’s requirements. This approach enables developers to write shared business logic once, reducing duplication and ensuring consistency across Android, iOS, and web environments.

In his live demos, Dmitry showcased how IntelliJ IDEA’s Kotlin plugin facilitates this structure, providing seamless navigation between common and platform-specific code. The plugin’s ability to combine common Kotlin code with platform-specific sources, such as Java for JVM modules, streamlines the build process. This methodology enhances developer productivity by simplifying project configuration and ensuring that multiplatform development remains intuitive, even for complex applications spanning multiple targets.

Incremental Compilation and Build Optimization

A key innovation highlighted by Dmitry was the advancement of incremental compilation across Kotlin’s target platforms. Incremental compilation optimizes build times by recompiling only modified code, a critical feature for large projects. For JVM targets, incremental compilation was already robust, but Dmitry announced the near-completion of JavaScript incremental compilation for Kotlin 1.1.6, with plans to extend it to native and multiplatform projects. This ensures that developers experience minimal delays during development, even in complex, multi-module environments.

Dmitry also emphasized integration with Gradle’s build cache and incremental compilation features, aligning Kotlin’s tooling with industry-standard build systems. By embedding IntelliJ inspections into continuous integration pipelines like TeamCity, the Kotlin plugin enables automated code quality checks, failing builds when issues exceed defined thresholds. This methodology reduces manual oversight, ensuring that code quality remains high without impeding development speed, particularly for teams managing large codebases.

IDE Integration and Developer Experience

The Kotlin plugin for IntelliJ IDEA enhances developer experience through advanced IDE features, such as code completion, refactoring, and inspections. Dmitry demonstrated how the plugin supports multiplatform projects with context-aware suggestions, simplifying the development of common and platform-specific code. The plugin’s integration with IntelliJ’s CI server allows for real-time code analysis, catching potential issues during builds. This seamless integration ensures that developers can focus on coding rather than configuring tools, aligning with Kotlin’s philosophy of getting out of the developer’s way.

Dmitry’s presentation also highlighted the plugin’s configurability, allowing developers to customize inspections and thresholds to suit project needs. While acknowledging the current limitations, such as slower inspection speeds, he outlined plans for future optimizations, including SonarQube integration. These enhancements underscore JetBrains’ commitment to delivering a fast, unobtrusive development experience, making Kotlin’s tooling a competitive advantage for multiplatform and high-performance applications.

Implications for Software Development

The advancements in Kotlin’s tooling, as presented by Dmitry, have profound implications for software development. Multiplatform project support enables developers to create unified codebases for diverse platforms, reducing maintenance costs and fostering code reuse. Incremental compilation and build optimizations address the performance bottlenecks of large-scale projects, enhancing productivity for teams working on Android, web, or native applications. The integration of IDE features with build systems ensures consistent code quality, making Kotlin a compelling choice for enterprises and startups alike.

For the broader ecosystem, these tools strengthen Kotlin’s position as a versatile, developer-friendly language. The ability to seamlessly integrate with Gradle and IntelliJ IDEA positions Kotlin as a leader in modern development workflows, challenging traditional languages like Java. Dmitry’s invitation for community feedback at JetBrains’ booth and office hours reflects a collaborative approach, ensuring that tooling evolves in response to real-world needs. As Kotlin’s ecosystem grows, its tooling innovations will continue to drive adoption across diverse development domains.

Conclusion

Dmitry Jemerov’s presentation at KotlinConf 2017 illuminated the transformative potential of Kotlin’s tooling, particularly with the IntelliJ IDEA plugin’s version 1.2 enhancements. By supporting multiplatform projects, optimizing incremental compilation, and integrating with build systems, these tools empower developers to create efficient, cross-platform applications. The focus on developer experience, through intuitive IDE features and automated inspections, aligns with Kotlin’s pragmatic design philosophy. As JetBrains continues to refine these tools, they solidify Kotlin’s role as a leading language for modern software development, fostering productivity and innovation.

Links

PostHeaderIcon [ScalaDaysNewYork2016] Implicits Inspected and Explained: Demystifying Scala’s Power

At Scala Days New York 2016, Tim Soethout, a functional programmer at ING Bank, offered a comprehensive guide to Scala’s implicits, a feature often perceived as magical by developers transitioning from basic to advanced Scala programming. Tim’s presentation bridged this gap, providing clear explanations and practical examples to demonstrate how implicits enhance code expressiveness and flexibility.

Understanding Implicits

Tim Soethout began by defining implicits as a mechanism for providing values or conversions without explicit references, enabling concise and flexible code. Drawing parallels with object-oriented programming, Tim explained that implicits extend “is-a” and “has-a” relationships with “is-viewable-as,” allowing developers to add rich interfaces to existing types. For instance, in Akka, the ! (tell) operator uses an implicit sender parameter, simplifying message passing. Similarly, Scala’s Futures rely on implicit execution contexts to manage asynchronous operations, abstracting thread scheduling from developers.

Compiler Resolution of Implicits

A key focus of Tim’s talk was demystifying how the Scala compiler resolves implicits. He outlined the compiler’s search process, which prioritizes local scope, companion objects, and package objects related to the involved types. Tim cautioned against implicit conversions with mismatched semantics, as they can lead to unexpected behavior. Using a live coding demo, he illustrated how implicits enable expressive DSLs, such as JSON serialization libraries, by automatically resolving type-specific writers, thus reducing boilerplate code.

Type Classes and Extensibility

Tim explored type classes as a powerful application of implicits, allowing non-intrusive library extensions. By defining behaviors like JSON serialization in companion objects, developers can extend functionality without modifying core libraries. He demonstrated this with a JSON writer example, where implicits ensured type-safe serialization for complex data structures. Tim emphasized that this approach fosters loose coupling, making libraries more modular and easier to maintain.

Practical Debugging Tips

Addressing common challenges, Tim offered strategies for debugging implicits, such as inspecting bytecode or leveraging IDEs to trace implicit resolutions. He warned against chaining multiple implicit conversions, as the compiler restricts itself to a single conversion to avoid complexity. By sharing practical examples, Tim equipped developers with the tools to harness implicits effectively, ensuring they enhance rather than obscure code clarity.

Links:

PostHeaderIcon [KotlinConf2017] Cords & Gumballs

Lecturer

Mike Hearn is the lead platform engineer at R3, a consortium of leading financial institutions developing Corda, a blockchain-inspired distributed ledger platform implemented in Kotlin. With nearly eight years at Google as a senior software engineer and five years as a Bitcoin developer, Mike brings extensive experience in JVM-based development and distributed systems. His early adoption of Kotlin, 18 months before its 1.0 release, and his work on the open-source BitcoinJ library, used in products with millions of users, highlight his expertise in high-performance, scalable software solutions.

Abstract

Kotlin’s versatility enables both large-scale enterprise projects and lightweight command-line tools. This article analyzes Mike Hearn’s presentation at KotlinConf 2017, which explores two contrasting projects: Corda, a blockchain-inspired platform for financial institutions, and Gumballs, a tool for generating standalone native binaries from Kotlin/JVM code. The analysis examines the context of Kotlin’s adoption in enterprise and lightweight applications, the methodologies behind Corda and Gumballs, their technical innovations, and their implications for software development. Mike’s insights highlight Kotlin’s ability to address diverse use cases, from secure financial systems to efficient command-line utilities.

Context of Kotlin in Enterprise and Lightweight Applications

At KotlinConf 2017, Mike Hearn presented two distinct projects showcasing Kotlin’s flexibility. Corda, developed by R3, is a large-scale enterprise platform inspired by blockchain technology, designed to streamline financial transactions among banks. Implemented entirely in Kotlin, Corda leverages the language’s concise syntax and JVM compatibility to handle complex business logic securely. In contrast, Gumballs is a side project that compiles Kotlin/JVM code into standalone native binaries, competing with Go’s efficiency for command-line tools. This dual focus reflects Kotlin’s ability to cater to both enterprise-scale systems and lightweight, performance-critical applications.

The context of Corda’s development highlights Kotlin’s appeal for enterprise use. Mike, an early Kotlin adopter, chose the language for its compatibility with the JVM, which is well-suited for high-level business logic in financial systems. The decision to avoid web technologies like TornadoFX, due to security concerns, underscores Corda’s emphasis on robust, desktop-based applications. Gumballs, conversely, addresses the need for efficient, standalone tools, demonstrating Kotlin’s potential to rival Go in scenarios requiring minimal dependencies and fast execution.

Methodology of Corda and Gumballs

Corda’s methodology centers on leveraging Kotlin’s features to build a secure, scalable distributed ledger. Mike explained that Corda uses Kotlin’s type safety and concise syntax to implement complex financial workflows, such as peer-to-peer real-time gross settlement systems. The platform employs cryptographic identities for nodes, ensuring stronger security than traditional systems reliant on identifiers like social security numbers. Kotlin’s interoperability with the JVM allows Corda to integrate with existing financial infrastructure, while its open-source nature, with tutorials and sample apps, encourages developer adoption.

Gumballs, in contrast, focuses on generating ahead-of-time compiled native binaries from Kotlin/JVM code. Mike demonstrated how Gumballs produces lightweight executables, similar to Go’s output, by compiling Kotlin code into native binaries that run without a JVM. This approach minimizes dependencies, making it ideal for command-line utilities requiring fast startup and execution. The methodology leverages Kotlin’s compiler capabilities, showcasing its flexibility beyond traditional JVM applications and highlighting its potential for cross-platform, performance-critical tasks.

Technical Innovations and Challenges

Corda’s technical innovations include its use of Kotlin to manage complex state and transaction logic in a distributed environment. Mike highlighted how Kotlin’s concise syntax reduces boilerplate, enabling developers to focus on business logic rather than infrastructure. The platform’s participation in a competition with the Central Bank of Singapore to develop a settlement system demonstrated its ability to handle real-world financial challenges. However, challenges like ensuring security in distributed systems required banning less secure web technologies, favoring managed desktop apps for structural integrity.

Gumballs introduces a novel approach to Kotlin compilation, producing standalone binaries that compete with Go’s efficiency. This innovation addresses the need for lightweight tools in scenarios where JVM overhead is impractical. Challenges included optimizing the compilation process to minimize binary size and ensure compatibility across platforms. Mike’s presentation emphasized the experimental nature of Gumballs, inviting community feedback to refine its capabilities, reflecting the iterative approach to developing new Kotlin tools.

Implications for Software Development

Corda and Gumballs demonstrate Kotlin’s versatility across the spectrum of software development. Corda’s adoption by a consortium of banks underscores Kotlin’s suitability for enterprise applications requiring security, scalability, and interoperability. Its open-source model, supported by tutorials and sample apps, lowers the barrier to entry for developers building financial systems. Gumballs, meanwhile, expands Kotlin’s reach into lightweight, performance-critical applications, offering an alternative to languages like Go for command-line tools and utilities.

For developers, these projects highlight Kotlin’s ability to unify diverse development needs within a single language. Corda’s success in enterprise settings encourages adoption in industries requiring robust, secure systems, while Gumballs appeals to developers seeking efficient, standalone solutions. The broader implication is Kotlin’s potential to challenge established languages in both enterprise and niche domains, fostering a more cohesive development ecosystem. Mike’s call for community contributions via Corda’s open-source platform and Gumballs’ experimental development further amplifies Kotlin’s collaborative potential.

Conclusion

Mike Hearn’s presentation at KotlinConf 2017 showcased Kotlin’s remarkable adaptability through Corda and Gumballs. Corda’s enterprise-grade blockchain platform demonstrates Kotlin’s strength in handling complex, secure financial systems, while Gumballs highlights its potential for lightweight, high-performance tools. By leveraging Kotlin’s type safety, JVM compatibility, and concise syntax, both projects address distinct challenges, from distributed ledgers to native binaries. As Kotlin continues to evolve, Mike’s insights underscore its transformative role in software development, inspiring developers to explore its capabilities across diverse domains.

Links

PostHeaderIcon [DotSecurity2017] The Digital Battle

In the digital domain’s relentless ruckus, where innovation’s influx intersects with iniquity’s ingenuity, safeguarding society’s sinews demands diligence beyond devices. Mikko Hypponen, F-Secure’s chief research officer, surveyed this skirmish at dotSecurity 2017, chronicling connectivity’s costs—from Nokia’s nadir to IoT’s insurgency. A Finnish fixture in antivirus annals since 1991, Mikko’s métier—malware’s myriad manifestations—manifests in missives that marry menace with mitigation, urging unity against ubiquitous threats.

Mikko’s meditation meandered through time: 2007’s iPhone ingress, internet’s ingress into pockets—privacy’s payment in profiles. Youth’s yen: videos’ vista via Google’s gaze, data’s donation. Privacy’s plight: perhaps perished, yet security’s skirmish salvageable—society’s stake superseding screens. Criminality’s calculus: crime’s commoditization, ransomware’s rise—CryptoWall’s coffers crammed $325M, victims’ vigil via NoMoreRansom’s nexus.

IoT’s incursion: Mirai’s maelstrom, 600,000 conscripts cascading DDoS—Dyn’s downfall, Krebs’ knockout. Mikko’s maxim: defaults’ delinquency, patches’ paucity—devices’ disposability dooms defense. Refrigerators’ reconnaissance, lamps’ liabilities—cloud’s collapse cascades chaos, AWS’s outage orphaning ovens.

Hope’s harbinger: IKEA’s integrity, investment’s imperative—security’s sanctity secures society.

Innovation’s Influx and Privacy’s Peril

Mikko mapped metamorphosis: Nokia’s nosedive, iPhone’s incursion—privacy’s price, data’s dues.

Malware’s Myriad and IoT’s Insurgency

Ransomware’s ransom, Mirai’s muster—Dyn’s deluge, defaults’ danger. Cloud’s crumble, chaos cascades.

Links:

PostHeaderIcon [DevoxxFR 2017] Introduction to the Philosophy of Artificial Intelligence

The rapid advancements and increasing integration of artificial intelligence into various aspects of our lives raise fundamental questions that extend beyond the purely technical realm into the domain of philosophy. As machines become capable of performing tasks that were once considered uniquely human, such as understanding language, recognizing patterns, and making decisions, we are prompted to reconsider our definitions of intelligence, consciousness, and even what it means to be human. At DevoxxFR 2017, Eric Lefevre Ardant and Sonia Ouchtar offered a thought-provoking introduction to the philosophy of artificial intelligence, exploring key concepts and thought experiments that challenge our understanding of machine intelligence and its potential implications.

Eric and Sonia began by acknowledging the pervasive presence of “AI” in contemporary discourse, noting that the term is often used broadly to encompass everything from simple algorithms to hypothetical future superintelligence. They stressed the importance of developing a critical perspective on these discussions and acquiring the vocabulary necessary to engage with the deeper philosophical questions surrounding AI. Their talk aimed to move beyond the hype and delve into the core questions that philosophers have grappled with as the possibility of machine intelligence has become more concrete.

The Turing Test: A Criterion for Machine Intelligence?

A central focus of the presentation was the Turing Test, proposed by Alan Turing in 1950 as a way to determine if a machine can exhibit intelligent behavior equivalent to, or indistinguishable from, that of a human. Eric and Sonia explained the setup of the test, which involves a human interrogator interacting with both a human and a machine through text-based conversations. If the interrogator cannot reliably distinguish the machine from the human after a series of conversations, the machine is said to have passed the Turing Test.

They discussed the principles behind the test, highlighting that it focuses on observable behavior (linguistic communication) rather than the internal workings of the machine. The Turing Test has been influential but also widely debated. Eric and Sonia presented some of the key criticisms of the test, such as the argument that simulating intelligent conversation does not necessarily imply true understanding or consciousness.

The Chinese Room Argument: Challenging the Turing Test

To further explore the limitations of the Turing Test and the complexities of defining machine intelligence, Eric and Sonia introduced John Searle’s Chinese Room argument, a famous thought experiment proposed in 1980. They described the scenario: a person who does not understand Chinese is locked in a room with a large set of Chinese symbols, a rulebook in English for manipulating these symbols, and incoming batches of Chinese symbols (representing questions). By following the rules in the rulebook, the person can produce outgoing batches of Chinese symbols (representing answers) that are appropriate responses to the incoming questions, making it appear to an outside observer that the person understands Chinese.

Sonia and Eric explained that Searle’s argument is that even if the person in the room can pass the Turing Test for understanding Chinese (by producing seemingly intelligent responses), they do not actually understand Chinese. They are simply manipulating symbols according to rules, without any genuine semantic understanding. The Chinese Room argument is a direct challenge to the idea that passing the Turing Test is a sufficient criterion for claiming a machine possesses true intelligence or understanding. It raises profound questions about the nature of understanding, consciousness, and whether symbolic manipulation alone can give rise to genuine cognitive states.

The talk concluded by emphasizing that the philosophy of AI is a fertile and ongoing area of inquiry with deep connections to various other disciplines, including neuroscience, psychology, linguistics, and computer science. Eric and Sonia encouraged attendees to continue exploring these philosophical questions, recognizing that understanding the fundamental nature of intelligence, both human and artificial, is crucial as we continue to develop increasingly capable machines. The session provided a valuable framework for critically evaluating claims about AI and engaging with the ethical and philosophical implications of artificial intelligence.

Hashtags: #AI #ArtificialIntelligence #Philosophy #TuringTest #ChineseRoom #MachineIntelligence #Consciousness #EricLefevreArdant #SoniaOUCHTAR #PhilosophyOfAI


PostHeaderIcon [ScalaDaysNewYork2016] Finagle Under the Hood: Unraveling Twitter’s RPC System

At Scala Days New York 2016, Vladimir Kostyukov, a member of Twitter’s Finagle team, provided an in-depth exploration of Finagle, a scalable and extensible RPC system written in Scala. Vladimir elucidated how Finagle simplifies the complexities of distributed systems, offering a functional programming model that enhances developer productivity while managing intricate backend operations like load balancing and circuit breaking.

The Essence of Finagle

Vladimir Kostyukov introduced Finagle as a robust RPC system used extensively at Twitter and other organizations. Unlike traditional application frameworks, Finagle focuses on facilitating communication between services, abstracting complexities such as connection pooling and load balancing. Vladimir highlighted its protocol-agnostic nature, supporting protocols like HTTP/2 and Twitter’s custom Mux, which enables efficient multiplexing. This flexibility allows developers to build services in Scala or Java, seamlessly integrating Finagle into diverse tech stacks.

Client-Server Dynamics

Delving into Finagle’s internals, Vladimir described its client-server model, where services are treated as composable functions. When a client sends a request, Finagle’s stack—comprising modules for connection pooling, load balancing, and failure handling—processes it efficiently. On the server side, incoming requests are routed through similar modules, ensuring resilience and scalability. Vladimir emphasized the “power of two choices” load balancing algorithm, which selects the least-loaded node from two randomly chosen servers, achieving near-optimal load distribution in constant time.

Advanced Features and Ecosystem

Vladimir showcased Finagle’s advanced capabilities, such as streaming support for large payloads and integration with tools like Zipkin for tracing and Twitter Server for monitoring. Libraries like Finatra and Featherbed further enhance Finagle’s utility, enabling developers to build RESTful APIs and type-safe HTTP clients. These features make Finagle a powerful choice for handling high-throughput systems, as demonstrated by its widespread adoption at Twitter for managing massive data flows.

Community and Future Prospects

Encouraging community engagement, Vladimir invited developers to contribute to Finagle’s open-source repository on GitHub. He discussed ongoing efforts to support HTTP/2 and improve performance, underscoring Finagle’s evolution toward a utopian RPC system. By offering a welcoming environment for pull requests and feedback, Vladimir emphasized the collaborative spirit driving Finagle’s development, ensuring it remains a cornerstone of scalable service architectures.

Links:

PostHeaderIcon [DotSecurity2017] Verifiable Lotteries

In realms where randomness reigns—visas’ vagaries, audits’ allocations, tournaments’ tabulations—authorities’ assertions of equity often echo empty, bereft of corroboration. Joseph Bonneau, a cryptographer and researcher at Stanford’s Applied Crypto Group, demystified this domain at dotSecurity 2017, championing verifiable randomness as algorithmic accountability’s anchor. Formerly of Google and the Electronic Frontier Foundation, Joseph’s journey—Bitcoin’s blockchain to privacy’s precincts—culminates in constructs that compel proof from the capricious, from dice’s clatter to cryptographic commitments.

Joseph’s journey juxtaposed physical proofs’ pitfalls: lottery balls’ bias, dice’s deceit—transparency’s theater, yet tampering’s temptation. Cryptography’s counter: commitments’ covenant—hash’s hideaway, revealing randomness post-participation. Verifiable delay functions (VDFs) vex velocity: computations’ chronology, proofs’ promptness—adversaries’ acceleration averted. Joseph’s jewel: lottery’s ledger—participants’ pledges, commitments’ concatenation, hash’s harvest yielding winners’ wreath.

Applications amplify: H1B visas’ vagaries verified, elections’ audits authenticated—overbooked flights’ farewells fair. Joseph’s jibe: FIFA’s football fiascoes, fans’ fury—verifiability’s vindication. Blockchain’s boon: Bitcoin’s beacons, stock quotes’ surrogates—delay’s defense against traders’ tempo.

Challenges chime: VDFs’ verification velocity, parallelism’s peril—research’s realm ripe. Joseph’s rallying cry: demand documentation—dashlane’s draws, FIFA’s fixtures, governments’ gambits—cryptography’s capability calls.

Randomness’ Riddles and Physical Pitfalls

Joseph juxtaposed balls’ bias, dice’s deceit—commitments’ cure, delay’s deterrent.

Constructs’ Craft and Applications’ Ambit

Hash’s haven, VDFs’ vigil—lotteries’ ledger, visas’ verity. Blockchain’s bastion, stocks’ surrogate.

Links:

PostHeaderIcon [DevoxxUS2017] Java EE 8: Adapting to Cloud and Microservices

At DevoxxUS2017, Linda De Michiel, a pivotal figure in the Java EE architecture team and Specification Lead for the Java EE Platform at Oracle, delivered a comprehensive overview of Java EE 8’s development. With her extensive experience since 1997, Linda highlighted the platform’s evolution to embrace cloud computing and microservices, aligning with modern industry trends. Her presentation detailed updates to existing Java Specification Requests (JSRs) and introduced new ones, while also previewing plans for Java EE 9. This post explores the key themes of Linda’s talk, emphasizing Java EE 8’s role in modern enterprise development.

Evolution from Java EE 7

Linda began by reflecting on Java EE 7, which focused on HTML5 support, modernized web-tier APIs, and simplified development through Context and Dependency Injection (CDI). Building on this foundation, Java EE 8 shifts toward cloud-native and microservices architectures. Linda noted that emerging trends, such as containerized deployments and distributed systems, influenced the platform’s direction. By enhancing CDI and introducing new APIs, Java EE 8 aims to streamline development for scalable, cloud-based applications, ensuring developers can build robust systems that meet contemporary demands.

Enhancements to Core JSRs

A significant portion of Linda’s talk focused on updates to existing JSRs, including CDI 2.0, JSON Binding (JSON-B), JSON Processing (JSON-P), and JAX-RS. She announced that CDI 2.0 had unanimously passed its public review ballot, a milestone for the expert group. JSON-B and JSON-P, crucial for data interchange in modern applications, have reached proposed final draft stages, while JAX-RS enhances RESTful services with reactive programming support. Linda highlighted the open-source nature of these implementations, such as GlassFish and Jersey, encouraging community contributions to refine these APIs for enterprise use.

New APIs for Modern Challenges

Java EE 8 introduces new JSRs to address cloud and microservices requirements, notably the Security API. Linda discussed its early draft review, which aims to standardize authentication and authorization across distributed systems. Servlet and JSF updates are also progressing, with JSF nearing final release. These APIs enable developers to build secure, scalable applications suited for microservices architectures. Linda emphasized the platform’s aggressive timeline for a summer release, underscoring the community’s commitment to delivering production-ready solutions that align with industry shifts toward cloud and container technologies.

Community Engagement and Future Directions

Linda stressed the importance of community feedback, directing developers to the Java EE specification project on java.net for JSR details and user groups. She highlighted the Adopt-a-JSR program, led by advocates like Heather VanCura, as a channel for aggregating feedback to expert groups. Looking ahead, Linda briefly outlined Java EE 9’s focus on further cloud integration and modularity. By inviting contributions through open-source platforms like GlassFish, Linda encouraged developers to shape the platform’s future, ensuring Java EE remains relevant in a rapidly evolving technological landscape.

Links:

PostHeaderIcon [DevoxxUS2017] Eclipse OMR: A Modern, Open-Source Toolkit for Building Language Runtimes by Daryl Maier

At DevoxxUS2017, Daryl Maier, a Senior Software Developer at IBM, introduced Eclipse OMR, an open-source toolkit for building high-performance language runtimes. With two decades of experience in compiler development, Daryl shared how OMR repurposes components of IBM’s J9 Java Virtual Machine to support diverse dynamic languages without imposing Java semantics. His session highlighted OMR’s potential to democratize runtime technology, fostering innovation across language ecosystems. This post explores the core themes of Daryl’s presentation, emphasizing OMR’s role in advancing runtime development.

Unlocking JVM Technology with OMR

Daryl Maier opened by detailing the Eclipse OMR project, which extracts core components of the J9 JVM, such as its compiler and garbage collector, for broader use. Unlike building languages atop Java, OMR provides modular, high-performance tools for creating custom runtimes. Daryl’s examples showcased OMR’s flexibility in supporting languages beyond Java, drawing from his work at IBM’s Canada Lab to illustrate its potential for diverse applications.

Compiler and Runtime Innovations

Transitioning to technical specifics, Daryl explored OMR’s compiler technology, designed for just-in-time (JIT) compilation in dynamic environments. He contrasted OMR with LLVM, noting its lightweight footprint and optimization for runtime performance. Daryl highlighted OMR’s garbage collection and code generation capabilities, which enable efficient, scalable runtimes. His insights underscored OMR’s suitability for dynamic languages, offering developers robust tools without the overhead of traditional compilers.

Active Development and Use Cases

Daryl discussed active OMR projects, including integrations with existing runtimes to enhance debuggability and performance. He referenced a colleague’s upcoming demo on OMR’s tooling interfaces, illustrating practical applications. Drawing from IBM’s extensive runtime expertise, Daryl showcased how OMR supports innovative use cases, from scripting languages to domain-specific runtimes, encouraging developers to leverage its modular architecture.

Engaging the Developer Community

Concluding, Daryl invited developers to contribute to Eclipse OMR, emphasizing its open-source ethos. He highlighted collaboration opportunities, noting contact points with project co-leads Mark and Charlie. Daryl’s call to action, rooted in IBM’s commitment to open-source innovation, encouraged attendees to explore OMR’s GitHub repository and participate in shaping the future of language runtimes.

Links:

PostHeaderIcon [KotlinConf2017] How to Build a React App in Kotlin

Lecturer

Dave Ford is an independent software developer and trainer with extensive experience in JVM-based languages and JavaScript. Having worked with both technologies since their inception, Dave brings a deep understanding of cross-platform development. His recent project of porting a React application to Kotlin showcases his expertise in leveraging Kotlin’s JavaScript interoperability and type-safe features. As a trainer, Dave is dedicated to sharing practical insights, helping developers navigate modern frameworks and tools to build robust web applications.

Abstract

The integration of Kotlin with React offers a powerful approach to web development, combining Kotlin’s type-safe, concise syntax with React’s component-based architecture. This article analyzes Dave Ford’s presentation at KotlinConf 2017, which explores building a React application using Kotlin/JS. It examines the context of Kotlin’s JavaScript interoperability, the methodology for creating type-safe React components, the use of Kotlin’s DSL capabilities, and the challenges encountered. The analysis highlights the implications of this approach for web developers, emphasizing productivity gains and the potential to streamline front-end development within the Kotlin ecosystem.

Context of Kotlin and React Integration

At KotlinConf 2017, Dave Ford addressed the growing interest in using Kotlin for web development, particularly through its JavaScript compilation capabilities. Kotlin/JS allows developers to write type-safe code that compiles to JavaScript, enabling integration with popular frameworks like React. Dave’s presentation, informed by his experience porting a React app to Kotlin, targeted an audience familiar with Kotlin but largely new to Kotlin/JS and React. The context of the presentation reflects the increasing demand for modern, type-safe alternatives to JavaScript, which often suffers from runtime errors and complex tooling.

React, a widely-used JavaScript library, excels in building dynamic, component-based web interfaces. However, its reliance on JavaScript’s dynamic typing can lead to errors that Kotlin’s static type system mitigates. Dave’s talk aimed to bridge these ecosystems, demonstrating how Kotlin’s interoperability with JavaScript and its IDE support, particularly through JetBrains’ tools, enhances developer productivity. The presentation’s live coding approach provided practical insights, making the integration accessible to developers seeking to leverage Kotlin’s strengths in front-end development.

Methodology for Type-Safe React Components

Dave’s methodology centered on using Kotlin’s JavaScript interop features to create type-safe React components. He demonstrated how Kotlin/JS interfaces with React’s APIs, allowing developers to define components with compile-time type checking. This approach reduces runtime errors common in JavaScript-based React development. By leveraging Kotlin’s type system, developers can ensure that props and state are correctly typed, improving code reliability and maintainability.

A key innovation was the use of Kotlin’s DSL capabilities to simplify React programming. Dave showcased how Kotlin’s type-safe builders create a declarative syntax for component hierarchies, making code more readable and concise compared to JavaScript’s verbose patterns. For example, he implemented a game application, passing event handlers (e.g., deal, hit, stay) through components to manage state changes. This approach, using lambda expressions and anonymous objects, allowed asynchronous state updates in a React-like manner, demonstrating Kotlin’s ability to streamline complex front-end logic.

Challenges and Lessons Learned

Porting a React app to Kotlin presented several challenges, which Dave candidly shared. One significant obstacle was managing state in a React application without direct access to game state from child components. To address this, Dave passed event handlers from parent to child components, a common React pattern, but implemented them using Kotlin’s type-safe constructs. This required defining interfaces for event handlers and overriding functions to update state asynchronously, highlighting the need for careful design to maintain React’s unidirectional data flow.

Another challenge was the learning curve for developers new to Kotlin/JS. Dave noted that while Kotlin’s IDE support simplifies development, familiarity with React’s ecosystem and JavaScript tooling (e.g., Create React App) is necessary. His live demo encountered minor issues, such as the need to refresh the application, underscoring the importance of robust tooling integration. These lessons emphasized the value of Kotlin’s type safety and IDE support in overcoming JavaScript’s limitations, while also highlighting areas for improvement in Kotlin/JS workflows.

Implications for Web Development

The integration of Kotlin and React, as demonstrated by Dave, has significant implications for web development. By combining Kotlin’s type safety with React’s component model, developers can create robust, maintainable web applications with fewer runtime errors. The use of DSLs enhances productivity, allowing developers to write concise, expressive code that aligns with React’s declarative paradigm. This approach is particularly valuable for teams transitioning from JVM-based Kotlin (e.g., Android or server-side) to web development, as it leverages familiar syntax and tools.

For the broader ecosystem, Kotlin/JS expands Kotlin’s reach beyond traditional JVM applications, challenging JavaScript’s dominance in front-end development. The ability to compile to JavaScript while maintaining type safety positions Kotlin as a compelling alternative for building modern web applications. Dave’s emphasis on community engagement, encouraging developers to explore Kotlin/JS, suggests a growing ecosystem that could influence web development practices, particularly for projects requiring high reliability and scalability.

Conclusion

Dave Ford’s presentation at KotlinConf 2017 illuminated the potential of Kotlin/JS to transform React-based web development. By leveraging type-safe components and DSL capabilities, Kotlin offers a productive, reliable alternative to JavaScript, addressing common pain points in front-end development. Despite challenges like state management and tooling integration, the approach demonstrates significant promise for developers seeking to unify their Kotlin expertise across platforms. As Kotlin/JS matures, its impact on web development is likely to grow, fostering a more robust and developer-friendly ecosystem.

Links