Speech recognition is the process of translating spoken words to text. It involves recording and digitizing audio, segmenting it into phonemes, applying a recognition model to analyze the phonemes against a lexicon and grammar, and returning a confidence-weighted transcript. Speech recognition accuracy is around 92% for English but lower for other languages. Mobile apps can use platform-specific APIs like Google Now on Android while the W3C specification allows cross-browser support. The related Speech Synthesis API can output responses by voice. Together these APIs enable interactive speech applications.
File Polyglottery; or This Proof of Concept is Also a Picture of CatsEvan Sultanik
Evan Sultanik's BSides Philly 2017 talk on File Polyglots. Watch the video, here: https://www.youtube.com/watch?v=fdKPnsWp9ho
A polyglot is a file that can be interpreted as multiple different filetypes depending on how it is parsed. While polyglots serve the noble purpose of being a nifty parlor trick, they also have much more nefarious uses, e.g., hiding malicious printer firmware inside a document that subverts a printer when printed, or a document that displays completely different content depending on which viewer opens it. This talk does a deep dive into the technical details of how to create such special files, using examples from some of the recent issues of the International Journal of PoC||GTFO. Learn how we made a PDF that is also a valid NES ROM that, when emulated, displays the MD5 sum of the PDF. Learn how we created a PDF that is also a valid PostScript document that, when printed to a PostScript printer, produces a completely different document. Oh, and the PostScript also prints your /etc/passwd file, for good measure. Learn how to create a PDF that is also a valid Git repository containing its own LaTeX source code and a copy of itself. And many more!
Python was created in 1990 by Guido van Rossum as a hobby project. It is a highly portable, interpreted programming language that is designed to be easy to learn and read. Python code tends to be shorter and more readable than comparable code in other languages like C or Java due to its clear syntax and use of whitespace.
Embedded application designed by ATS languageKiwamu Okabe
The document discusses using the ATS programming language for embedded applications. It notes that ATS features dependent types, linear types, and optional garbage collection, which could prevent bugs like Heartbleed. The document demonstrates ATS applications running on ESP8266 and Arduino hardware and notes the type of errors ATS is able to capture during compilation. It outlines an agenda to cover ATS language basics, proofs, linear types, comparisons to other languages, and conclusions.
This document discusses why the author loves Python. In 3 sentences:
The author loves Python because it allows them to focus on concepts rather than syntax or performance. Python reduces clutter and makes the author more productive by avoiding unnecessary complexity. The clean design of Python encourages clean library design and idioms that are simple for the author to remember.
Functional languages like Scala can reduce the complexity of writing high-concurrency, high-throughput systems, but growing software with TDD in Scala presents challenges unfamiliar to those of us who spend most of our time in the JavaScript, Java, and .NET worlds.
In this session at Agile2014, Tim Myer explained how to avoid the pitfalls of testing a functional language and offered some new techniques that you can apply to development in other languages, even if you have never written software using Scala before.
The document discusses implementing an interpreter for the RPG programming language within the Java Virtual Machine (JVM). It describes parsing RPG code into an abstract syntax tree to understand the code structure. The interpreter would execute RPG statements by translating them to equivalent operations in the JVM. This allows RPG code to interface with and leverage libraries and functions in the larger JVM ecosystem.
Speech recognition is the process of translating spoken words to text. It involves recording and digitizing audio, segmenting it into phonemes, applying a recognition model to analyze the phonemes against a lexicon and grammar, and returning a confidence-weighted transcript. Speech recognition accuracy is around 92% for English but lower for other languages. Mobile apps can use platform-specific APIs like Google Now on Android while the W3C specification allows cross-browser support. The related Speech Synthesis API can output responses by voice. Together these APIs enable interactive speech applications.
File Polyglottery; or This Proof of Concept is Also a Picture of CatsEvan Sultanik
Evan Sultanik's BSides Philly 2017 talk on File Polyglots. Watch the video, here: https://www.youtube.com/watch?v=fdKPnsWp9ho
A polyglot is a file that can be interpreted as multiple different filetypes depending on how it is parsed. While polyglots serve the noble purpose of being a nifty parlor trick, they also have much more nefarious uses, e.g., hiding malicious printer firmware inside a document that subverts a printer when printed, or a document that displays completely different content depending on which viewer opens it. This talk does a deep dive into the technical details of how to create such special files, using examples from some of the recent issues of the International Journal of PoC||GTFO. Learn how we made a PDF that is also a valid NES ROM that, when emulated, displays the MD5 sum of the PDF. Learn how we created a PDF that is also a valid PostScript document that, when printed to a PostScript printer, produces a completely different document. Oh, and the PostScript also prints your /etc/passwd file, for good measure. Learn how to create a PDF that is also a valid Git repository containing its own LaTeX source code and a copy of itself. And many more!
Python was created in 1990 by Guido van Rossum as a hobby project. It is a highly portable, interpreted programming language that is designed to be easy to learn and read. Python code tends to be shorter and more readable than comparable code in other languages like C or Java due to its clear syntax and use of whitespace.
Embedded application designed by ATS languageKiwamu Okabe
The document discusses using the ATS programming language for embedded applications. It notes that ATS features dependent types, linear types, and optional garbage collection, which could prevent bugs like Heartbleed. The document demonstrates ATS applications running on ESP8266 and Arduino hardware and notes the type of errors ATS is able to capture during compilation. It outlines an agenda to cover ATS language basics, proofs, linear types, comparisons to other languages, and conclusions.
This document discusses why the author loves Python. In 3 sentences:
The author loves Python because it allows them to focus on concepts rather than syntax or performance. Python reduces clutter and makes the author more productive by avoiding unnecessary complexity. The clean design of Python encourages clean library design and idioms that are simple for the author to remember.
Functional languages like Scala can reduce the complexity of writing high-concurrency, high-throughput systems, but growing software with TDD in Scala presents challenges unfamiliar to those of us who spend most of our time in the JavaScript, Java, and .NET worlds.
In this session at Agile2014, Tim Myer explained how to avoid the pitfalls of testing a functional language and offered some new techniques that you can apply to development in other languages, even if you have never written software using Scala before.
The document discusses implementing an interpreter for the RPG programming language within the Java Virtual Machine (JVM). It describes parsing RPG code into an abstract syntax tree to understand the code structure. The interpreter would execute RPG statements by translating them to equivalent operations in the JVM. This allows RPG code to interface with and leverage libraries and functions in the larger JVM ecosystem.
This document provides an introduction to programming in Go. It discusses the origins and intentions of the Go language, where it is commonly used today, and what Go is and isn't. Go was created to be a systems programming language with better productivity than C++. It has seen widespread adoption beyond its original use cases. While Go isn't a functional or object-oriented language, it is compiled, statically typed, memory managed, concurrent, and ideal for building cloud infrastructure. The document also covers Go syntax including variables, types, loops, conditionals, functions, and more.
Claudia Doppioslash - Time Travel for game development with ElmCodemotion
Elm is a purely Functional Reactive Programming language, which happens to have the best current implementation of a Time Travelling Debugger (see Bret Victor's Inventing on Principle [https://vimeo.com/36579366] from 12:25) and is ideally suited for games and UIs. We'll see how FRP, a strong yet simple(r than Haskell) type system and the interactive programming workflow make developing a small game much more pleasant compared to the mainstream game engines experience.
Paris Web - Javascript as a programming languageMarco Cedaro
How to setup up a stable javascript continuous integration environment and why you need it. Through a real life example, the talk explains all the benefits of having a development process that brings real control over javascript codebase. A deep analysis of developer and webapps needs and of the tools that fit those requirements.
Metasepi team meeting #16: Safety on ATS language + MCUKiwamu Okabe
This document summarizes the key topics from meeting #16 of the Metasepi team:
1. The meeting discussed using the ATS programming language for developing Metasepi, an operating system designed with strong typing.
2. A demonstration showed running ATS code on an Arduino and mbed microcontroller platform.
3. ATS is a strongly typed language like ML that uses dependent types, linear types, and optional garbage collection to promote safe systems programming without runtime errors.
The document introduces Functional IoT, which aims to create an exhaustive catalog of methodologies for strongly typed functional programming languages that can be used for embedded systems and IoT device programming. It discusses that while C/C++ are commonly used for IoT, they lack abilities like avoiding vulnerabilities, having formally verifiable specifications, and maintaining quality; and that Functional IoT will evaluate languages based on demo code running on microcontrollers to determine which languages are best suited. The goal is to determine methodologies that can help address issues like vulnerabilities, specifications, quality and efficiency.
In questa sessione a quattro mani introdurremo alcuni dei refactorings più comuni e più facilmente applicabili nell'utilizzo quotidiano, e vedremo come risolverli in maniera facile, veloce ed indolore utilizzando ReSharper e pochi colpi di tastiera.
Incidentalmente, inseriremo nel mentre un pò di patterns e di Test-Driven Development, perchè "se non è testato, allora non funziona"
Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the "CCS check" (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.
Lastly, we'll cover the offer check, something everyone can do to help in SFC's efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.
- There are over 100 million software packages and millions of users and repositories showing that software development is widespread
- While coding quality varies, writing software allows contributions to projects and frameworks and the sharing of ideas
- As software can be easily scaled with no increase in production costs, developers should continue writing code, sharing it in package managers and collaborating with others through components and respecting each other's time
This document discusses the concepts of DevOps, SecOps, and DevSecOps. It describes how the traditional divisions between development, operations, and security can lead to problems, and how adopting a DevOps culture and practices like continuous integration, infrastructure as code, and automation can help break down silos. It emphasizes that DevSecOps is about collaboration, culture change, and bringing security practices into the development lifecycle from the beginning.
Bug bounty programs have existed since the 1990s but have grown significantly in recent years. The document summarizes highlights from 2014 reports of major companies' bug bounty programs including Google, Facebook, Microsoft, Github, and Tesla. It also discusses reasons for organizations to start bounty programs, tips for reducing noise, and trends in bug bounty research like researcher demographics.
Machine vision and device integration with the Ruby programming language (2008)Jan Wedekind
This document provides a summary of a research seminar on machine vision and device integration using the Ruby programming language. The seminar will be held on February 29th, 2008 and will discuss projects using a transmission electron microscope, digital camera, piezo controller and nano indenter as well as a micro camera and piezo drives. It will also discuss proprietary business models versus community development models and differences between GPLv3 and BSD licenses. An introduction to the Ruby programming language is provided including statistics on usage from the Tiobe index and speed comparisons to other languages.
Alex Fernández - Has anyone else seen your code? - Codemotion Berlin 2018Codemotion
The document discusses the importance of code reviews and improving code quality. It notes that bad code can have serious consequences like software bugs that cost $60 billion. It advocates for practices like peer code reviews, treating people well during the review process, and explaining code changes, which can help disseminate knowledge and catch issues early. The document also warns that relying solely on senior reviews can create bottlenecks and that reviews are a process of continuous improvement, not a single event.
Types are becoming more important in software as programs grow larger and more complex, leading to more bugs. New types like Optional help prevent null pointer exceptions while async/await make asynchronous code more intuitive. More advanced types still being adopted include algebraic data types that model relationships between data, dependent types that allow types to depend on values, and linear types that prevent multiple uses of resources. These new types allow for stronger guarantees and more bugs caught at compile time rather than runtime.
Functional IoT: Programming Language and OSKiwamu Okabe
The document discusses functional programming languages for IoT applications. It describes ATS, a functional language without garbage collection that is compiled to C and supports theorem proving to safely use pointers. ATS has been used to program ESP8266 and Arduino devices. The document provides examples of errors that ATS can catch, like a variable needing to be freed or an unsolved constraint.
This document summarizes a presentation about creating voice applications using Tropo. Tropo allows developers to build voice applications using common programming languages like JavaScript, Ruby, Python, and Groovy. It provides APIs for telephony functions like answering calls, speaking prompts, processing input, and transferring calls. Examples show how to build simple applications that greet callers, ask for input using speech or touch tones, and transfer calls. The presentation argues that Tropo simplifies voice application development by allowing web developers to use familiar languages instead of specialized telephony standards.
My presentation from RedDotRubyConf 2013 in Singapore. Turned out to be a reflection on whether I'd still be a Rubyist in another 5 years, and what are the external trends that might change that. Short story: Yes! Of course. I'll always think like a Rubyist even though things will probably get more polyglot. The arena of web development is perhaps the most unpredictable though.
From Config Management Sucks to #cfgmgmtlove Kris Buytaert
This document summarizes Kris Buytaert's talk on the evolution of config management from the 1990s to present day. It discusses early approaches like manual installations and system imaging tools. It then covers the rise of infrastructure as code using tools like Puppet, Chef, and Docker. The talk addresses challenges like getting operations teams to adopt new methods and complexities that can arise from dependencies and modules. It promotes treating infrastructure like code with development practices for versioning, testing, and continuous integration/deployment.
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...Laura M. Castro
Property-based testing is an already known testing methodology for the Erlang community, with tools such as QuickCheck and PropEr being highly popular among Erlang developers in the last few years. However, they are commonly used for functional testing... Which are the challenges in using them for testing non-functional properties of software? What other tools or libraries are there to help Erlang developers?
The document provides an overview of Java and its advantages. It discusses that Java is a platform-independent, object-oriented programming language that is simpler than C++ and enables writing of portable code via bytecode. It can be used to create both standalone applications and applets for web pages. The document also presents some history and key features of Java like robust memory management, security, and being well-suited for network-based applications.
This document appears to be a transcript from a presentation on software estimation. It discusses how estimation is different for software projects compared to construction projects due to factors like constantly changing tools and requirements in software. A key example given is the Berlin Brandenburg Airport project, whose costs ballooned from an original budget of €2.83 billion to over €9.4 billion due to delays and changes. The presentation argues that while estimation is important, it is difficult to be perfectly accurate for software due to its inherently changing nature.
This document contains the agenda and notes from a talk on functional programming and Kotlin. The talk promotes the benefits of functional programming such as determinism, total functions, purity, and composability. It also highlights some key features of Kotlin like data classes, default values, constructors, and copy methods that make the language more functional-like compared to Java. The talk uses examples to explain concepts like deterministic, total, and pure functions in FP. It also compares code samples in Java and Kotlin to demonstrate how Kotlin reduces boilerplate and improves readability.
This document provides an introduction to programming in Go. It discusses the origins and intentions of the Go language, where it is commonly used today, and what Go is and isn't. Go was created to be a systems programming language with better productivity than C++. It has seen widespread adoption beyond its original use cases. While Go isn't a functional or object-oriented language, it is compiled, statically typed, memory managed, concurrent, and ideal for building cloud infrastructure. The document also covers Go syntax including variables, types, loops, conditionals, functions, and more.
Claudia Doppioslash - Time Travel for game development with ElmCodemotion
Elm is a purely Functional Reactive Programming language, which happens to have the best current implementation of a Time Travelling Debugger (see Bret Victor's Inventing on Principle [https://vimeo.com/36579366] from 12:25) and is ideally suited for games and UIs. We'll see how FRP, a strong yet simple(r than Haskell) type system and the interactive programming workflow make developing a small game much more pleasant compared to the mainstream game engines experience.
Paris Web - Javascript as a programming languageMarco Cedaro
How to setup up a stable javascript continuous integration environment and why you need it. Through a real life example, the talk explains all the benefits of having a development process that brings real control over javascript codebase. A deep analysis of developer and webapps needs and of the tools that fit those requirements.
Metasepi team meeting #16: Safety on ATS language + MCUKiwamu Okabe
This document summarizes the key topics from meeting #16 of the Metasepi team:
1. The meeting discussed using the ATS programming language for developing Metasepi, an operating system designed with strong typing.
2. A demonstration showed running ATS code on an Arduino and mbed microcontroller platform.
3. ATS is a strongly typed language like ML that uses dependent types, linear types, and optional garbage collection to promote safe systems programming without runtime errors.
The document introduces Functional IoT, which aims to create an exhaustive catalog of methodologies for strongly typed functional programming languages that can be used for embedded systems and IoT device programming. It discusses that while C/C++ are commonly used for IoT, they lack abilities like avoiding vulnerabilities, having formally verifiable specifications, and maintaining quality; and that Functional IoT will evaluate languages based on demo code running on microcontrollers to determine which languages are best suited. The goal is to determine methodologies that can help address issues like vulnerabilities, specifications, quality and efficiency.
In questa sessione a quattro mani introdurremo alcuni dei refactorings più comuni e più facilmente applicabili nell'utilizzo quotidiano, e vedremo come risolverli in maniera facile, veloce ed indolore utilizzando ReSharper e pochi colpi di tastiera.
Incidentalmente, inseriremo nel mentre un pò di patterns e di Test-Driven Development, perchè "se non è testato, allora non funziona"
Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the "CCS check" (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.
Lastly, we'll cover the offer check, something everyone can do to help in SFC's efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.
- There are over 100 million software packages and millions of users and repositories showing that software development is widespread
- While coding quality varies, writing software allows contributions to projects and frameworks and the sharing of ideas
- As software can be easily scaled with no increase in production costs, developers should continue writing code, sharing it in package managers and collaborating with others through components and respecting each other's time
This document discusses the concepts of DevOps, SecOps, and DevSecOps. It describes how the traditional divisions between development, operations, and security can lead to problems, and how adopting a DevOps culture and practices like continuous integration, infrastructure as code, and automation can help break down silos. It emphasizes that DevSecOps is about collaboration, culture change, and bringing security practices into the development lifecycle from the beginning.
Bug bounty programs have existed since the 1990s but have grown significantly in recent years. The document summarizes highlights from 2014 reports of major companies' bug bounty programs including Google, Facebook, Microsoft, Github, and Tesla. It also discusses reasons for organizations to start bounty programs, tips for reducing noise, and trends in bug bounty research like researcher demographics.
Machine vision and device integration with the Ruby programming language (2008)Jan Wedekind
This document provides a summary of a research seminar on machine vision and device integration using the Ruby programming language. The seminar will be held on February 29th, 2008 and will discuss projects using a transmission electron microscope, digital camera, piezo controller and nano indenter as well as a micro camera and piezo drives. It will also discuss proprietary business models versus community development models and differences between GPLv3 and BSD licenses. An introduction to the Ruby programming language is provided including statistics on usage from the Tiobe index and speed comparisons to other languages.
Alex Fernández - Has anyone else seen your code? - Codemotion Berlin 2018Codemotion
The document discusses the importance of code reviews and improving code quality. It notes that bad code can have serious consequences like software bugs that cost $60 billion. It advocates for practices like peer code reviews, treating people well during the review process, and explaining code changes, which can help disseminate knowledge and catch issues early. The document also warns that relying solely on senior reviews can create bottlenecks and that reviews are a process of continuous improvement, not a single event.
Types are becoming more important in software as programs grow larger and more complex, leading to more bugs. New types like Optional help prevent null pointer exceptions while async/await make asynchronous code more intuitive. More advanced types still being adopted include algebraic data types that model relationships between data, dependent types that allow types to depend on values, and linear types that prevent multiple uses of resources. These new types allow for stronger guarantees and more bugs caught at compile time rather than runtime.
Functional IoT: Programming Language and OSKiwamu Okabe
The document discusses functional programming languages for IoT applications. It describes ATS, a functional language without garbage collection that is compiled to C and supports theorem proving to safely use pointers. ATS has been used to program ESP8266 and Arduino devices. The document provides examples of errors that ATS can catch, like a variable needing to be freed or an unsolved constraint.
This document summarizes a presentation about creating voice applications using Tropo. Tropo allows developers to build voice applications using common programming languages like JavaScript, Ruby, Python, and Groovy. It provides APIs for telephony functions like answering calls, speaking prompts, processing input, and transferring calls. Examples show how to build simple applications that greet callers, ask for input using speech or touch tones, and transfer calls. The presentation argues that Tropo simplifies voice application development by allowing web developers to use familiar languages instead of specialized telephony standards.
My presentation from RedDotRubyConf 2013 in Singapore. Turned out to be a reflection on whether I'd still be a Rubyist in another 5 years, and what are the external trends that might change that. Short story: Yes! Of course. I'll always think like a Rubyist even though things will probably get more polyglot. The arena of web development is perhaps the most unpredictable though.
From Config Management Sucks to #cfgmgmtlove Kris Buytaert
This document summarizes Kris Buytaert's talk on the evolution of config management from the 1990s to present day. It discusses early approaches like manual installations and system imaging tools. It then covers the rise of infrastructure as code using tools like Puppet, Chef, and Docker. The talk addresses challenges like getting operations teams to adopt new methods and complexities that can arise from dependencies and modules. It promotes treating infrastructure like code with development practices for versioning, testing, and continuous integration/deployment.
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...Laura M. Castro
Property-based testing is an already known testing methodology for the Erlang community, with tools such as QuickCheck and PropEr being highly popular among Erlang developers in the last few years. However, they are commonly used for functional testing... Which are the challenges in using them for testing non-functional properties of software? What other tools or libraries are there to help Erlang developers?
The document provides an overview of Java and its advantages. It discusses that Java is a platform-independent, object-oriented programming language that is simpler than C++ and enables writing of portable code via bytecode. It can be used to create both standalone applications and applets for web pages. The document also presents some history and key features of Java like robust memory management, security, and being well-suited for network-based applications.
Similar to Spring, CDI, Jakarta EE good parts (20)
This document appears to be a transcript from a presentation on software estimation. It discusses how estimation is different for software projects compared to construction projects due to factors like constantly changing tools and requirements in software. A key example given is the Berlin Brandenburg Airport project, whose costs ballooned from an original budget of €2.83 billion to over €9.4 billion due to delays and changes. The presentation argues that while estimation is important, it is difficult to be perfectly accurate for software due to its inherently changing nature.
This document contains the agenda and notes from a talk on functional programming and Kotlin. The talk promotes the benefits of functional programming such as determinism, total functions, purity, and composability. It also highlights some key features of Kotlin like data classes, default values, constructors, and copy methods that make the language more functional-like compared to Java. The talk uses examples to explain concepts like deterministic, total, and pure functions in FP. It also compares code samples in Java and Kotlin to demonstrate how Kotlin reduces boilerplate and improves readability.
This document discusses communicating with aliens using lambda calculus. It explains that lambda calculus is a minimal functional programming language that can represent logic, mathematics, computation, and theorems. Everything in lambda calculus is a function, and it provides a way to define and apply functions. Basic concepts like boolean logic and arithmetic can be modeled. The document suggests that if aliens understand logic and modus ponens, they would understand lambda calculus as it is a universal system discovered from fundamentals of logic. It then provides examples of lambda calculus functions and applications.
The document discusses features of the Kotlin programming language. It provides examples of how Kotlin simplifies object-oriented programming tasks like data classes and property access compared to Java. Data classes in Kotlin can auto-generate getters, setters, equals(), hashCode() and toString() methods. Kotlin also allows functional-style programming with properties like immutable state and avoiding null references.
The document discusses how monads can be used to prevent bugs and handle side effects like missing data in code. It provides examples of using Optional to represent missing values and chaining operations with flatMap to avoid nested if-checks. Monads allow sequencing computations in a declarative way while handling problems in the data or failures transparently.
The document discusses performance myths and optimizations in Scala code. It begins with an example of calculating Fibonacci numbers on a 68040 processor and how branch prediction strategies can impact performance. Benchmark results are shown comparing immutable and mutable implementations of a calculator, with the immutable version being much slower. Tools for measuring performance like JMH, Java Flight Recorder and Java Mission Control are also introduced. The document cautions that performance can depend heavily on context and benchmarks only show tools, not decisions that should be made based on numbers.
The document discusses Haskell for the JVM using Eta, which compiles Haskell to JVM bytecode. It provides examples of writing Haskell code and using Eta, including quicksort, foreign imports, and optimizations like TCO. Eta aims to provide an experience similar to GHC for Haskell developers on the JVM.
Another programming language - jeszcze jeden językJarek Ratajski
This document discusses the history of programming languages through snippets of code and descriptions of various languages from the 1940s to the 1970s. It begins with machine code and assembly languages and progresses through higher-level languages like FORTRAN, COBOL, LISP, ALGOL, BASIC, Pascal, FORTH, C and others. It highlights reasons for the creation of new languages like making programming easier, preventing errors, and introducing new concepts and paradigms. Interspersed are notes about the evolving hardware landscape from punch cards to early computers.
This document discusses Eta, a compiler that allows writing Haskell code and running it on the Java Virtual Machine (JVM). Eta works by compiling Haskell to the STG intermediate language like GHC, and then compiling STG to JVM bytecode. This allows Haskell code to interoperate with Java code via foreign function interfaces. Performance benchmarks show Eta achieves performance comparable to equivalent Java code for algorithms like quicksort. Eta supports many Haskell language extensions and libraries from Hackage. This enables Haskell code to run on the JVM while maintaining high-level functional programming abilities.
This document discusses best practices for handling null values in Java. It recommends: failing fast with NullPointerExceptions instead of silently returning null; never returning null values from methods; marking optional parameters and return values with Java's Optional class; using Optional's map and flatMap methods to avoid deep null checks; and using Guava transforms if on Java 6/7 prior to Java 8 streams. The document provides code examples demonstrating these techniques for optional user objects returned from databases and assigned to groups.
This document summarizes Eta, a compiler that allows writing Haskell code to run on the Java Virtual Machine. Eta works by compiling Haskell to the STG intermediate representation and then generating JVM bytecode from STG. This allows Haskell code using GHC language extensions to run on the JVM without modifications. Performance is improved through optimizations like TCO. Eta supports packages from the Haskell Hackage repository by patching native C calls to equivalent JVM calls. This allows most Haskell libraries to work on Eta.
The document discusses developing code and IDEs for virtual reality. It proposes using A-Frame to build simple VR scenes with JavaScript due to its ease of use in WebVR. While current VR technology has limitations for complex coding tasks, the document envisions simulating code visually by representing it as interacting particles governed by physics laws. This would allow viewing code structure and analysis in an immersive 3D environment. Fully interactive development remains difficult, but the author is interested in exploring new presentation methods for code as VR hardware continues advancing.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help protect against mental illness and improve symptoms.
This document provides information about an individual named Jarek Ratajski. It lists that he works for CSS Versicherung as a developer and wizard. It provides his email and Twitter handle. It then lists the various programming languages and technologies he has experience with. The rest of the document appears to be about architecture and challenges in scaling applications. It discusses using non-blocking architectures to process many events using few threads. It provides an overview of Lagom, a framework from Lightbend for building reactive microservices applications. It discusses entity components in Lagom like commands, events and state. It also covers reading from Cassandra and implementing read models.
This document provides information about Jarosław Ratajski, including that he is a developer who lives in Luzern and works at CSS Insurance. It also discusses an alien pizza delivery domain model called Galakpizza that was developed using two different approaches - one using plain Java objects ("Normal") and the other using a relational database and JPA ("Other"). The domain model includes concepts like Orders, Variants, Sizes and Planets. The services implemented allow placing orders and retrieving the orders from the best planet.
This document describes an alien development of a pizza ordering and delivery system in two parallel universes. In the normal universe, the system uses plain Java objects and data structures, while in the other universe it uses a relational database with JPA annotations. Both implementations provide the same core functionality of placing orders, retrieving the best planet for orders, and counting total orders. The document includes code examples showing how the domain model, services, and implementations differ between the two parallel universes.
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!SOFTTECHHUB
As the digital landscape continually evolves, operating systems play a critical role in shaping user experiences and productivity. The launch of Nitrux Linux 3.5.0 marks a significant milestone, offering a robust alternative to traditional systems such as Windows 11. This article delves into the essence of Nitrux Linux 3.5.0, exploring its unique features, advantages, and how it stands as a compelling choice for both casual users and tech enthusiasts.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Zilliz
Join us to introduce Milvus Lite, a vector database that can run on notebooks and laptops, share the same API with Milvus, and integrate with every popular GenAI framework. This webinar is perfect for developers seeking easy-to-use, well-integrated vector databases for their GenAI apps.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/building-and-scaling-ai-applications-with-the-nx-ai-manager-a-presentation-from-network-optix/
Robin van Emden, Senior Director of Data Science at Network Optix, presents the “Building and Scaling AI Applications with the Nx AI Manager,” tutorial at the May 2024 Embedded Vision Summit.
In this presentation, van Emden covers the basics of scaling edge AI solutions using the Nx tool kit. He emphasizes the process of developing AI models and deploying them globally. He also showcases the conversion of AI models and the creation of effective edge AI pipelines, with a focus on pre-processing, model conversion, selecting the appropriate inference engine for the target hardware and post-processing.
van Emden shows how Nx can simplify the developer’s life and facilitate a rapid transition from concept to production-ready applications.He provides valuable insights into developing scalable and efficient edge AI solutions, with a strong focus on practical implementation.
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Sudheer Mechineni, Head of Application Frameworks, Standard Chartered Bank
Discover how Standard Chartered Bank harnessed the power of Neo4j to transform complex data access challenges into a dynamic, scalable graph database solution. This keynote will cover their journey from initial adoption to deploying a fully automated, enterprise-grade causal cluster, highlighting key strategies for modelling organisational changes and ensuring robust disaster recovery. Learn how these innovations have not only enhanced Standard Chartered Bank’s data infrastructure but also positioned them as pioneers in the banking sector’s adoption of graph technology.
6. I WORK WITH JAVA EE SINCE ~2001I WORK WITH JAVA EE SINCE ~2001
WITH SPRING SINCE 2006WITH SPRING SINCE 2006
I remember EJB-OSS
and huge xmls in Spring
7. At the moment I amAt the moment I amAt the moment I am making my hands dirty in about 15 various Springmaking my hands dirty in about 15 various Springmaking my hands dirty in about 15 various Spring
and Java EE projectsand Java EE projectsand Java EE projects
8. I code for only few projects that are notI code for only few projects that are notI code for only few projects that are not SpringSpringSpring
ororor Java EEJava EEJava EE basedbasedbased
9. I code for only few projects that are notI code for only few projects that are notI code for only few projects that are not SpringSpringSpring
ororor Java EEJava EEJava EE basedbasedbased
including one very critical application (netty based)including one very critical application (netty based)including one very critical application (netty based)
10. ⚠ I like xing production bugs:⚠ I like xing production bugs:⚠ I like xing production bugs:
11. ⚠ I like xing production bugs:⚠ I like xing production bugs:⚠ I like xing production bugs:
Concurrency, security, performance, heisenbugsConcurrency, security, performance, heisenbugsConcurrency, security, performance, heisenbugs
12. As I have some Java EE, Spring experienceAs I have some Java EE, Spring experienceAs I have some Java EE, Spring experience
13. As I have some Java EE, Spring experienceAs I have some Java EE, Spring experienceAs I have some Java EE, Spring experience
I think,I think,I think,
14. As I have some Java EE, Spring experienceAs I have some Java EE, Spring experienceAs I have some Java EE, Spring experience
I think,I think,I think,
they are doing too much harm to your code (architecture)they are doing too much harm to your code (architecture)they are doing too much harm to your code (architecture)
15. As I have some Java EE, Spring experienceAs I have some Java EE, Spring experienceAs I have some Java EE, Spring experience
I think,I think,I think,
they are doing too much harm to your code (architecture)they are doing too much harm to your code (architecture)they are doing too much harm to your code (architecture)
we have to do betterwe have to do betterwe have to do better
17. GO TO STATEMENT CONSIDERED HARMFULGO TO STATEMENT CONSIDERED HARMFUL
March 1968,March 1968,March 1968, Edsger W. DijkstraEdsger W. DijkstraEdsger W. Dijkstra
18. E.D.E.D.E.D.
For a number of years I have been familiar with theFor a number of years I have been familiar with theFor a number of years I have been familiar with the
observation that the quality of programmers is aobservation that the quality of programmers is aobservation that the quality of programmers is a
decreasing function of the density of go todecreasing function of the density of go todecreasing function of the density of go to
statements in the programs they produce. Morestatements in the programs they produce. Morestatements in the programs they produce. More
recently I discovered why the use of the go torecently I discovered why the use of the go torecently I discovered why the use of the go to
statement has such disastrous e ects, and I becamestatement has such disastrous e ects, and I becamestatement has such disastrous e ects, and I became
convinced that the go to statement should beconvinced that the go to statement should beconvinced that the go to statement should be
abolished from all "higher level" programmingabolished from all "higher level" programmingabolished from all "higher level" programming
languages (i.e. everything except, perhaps, plainlanguages (i.e. everything except, perhaps, plainlanguages (i.e. everything except, perhaps, plain
machine code). At that time I did not attach toomachine code). At that time I did not attach toomachine code). At that time I did not attach too
much importance to this discovery; I now submit mymuch importance to this discovery; I now submit mymuch importance to this discovery; I now submit my
considerations for publication because in veryconsiderations for publication because in veryconsiderations for publication because in very
recent discussions in which the subject turned up, Irecent discussions in which the subject turned up, Irecent discussions in which the subject turned up, I
have been urged to do so.have been urged to do so.have been urged to do so.
19. GOT0 CONSIDERED HARMFUL - CONSIDERED HARMFULGOT0 CONSIDERED HARMFUL - CONSIDERED HARMFUL
March 1987, Frank RubinMarch 1987, Frank RubinMarch 1987, Frank Rubin
20. F.R.F.R.F.R.
GOTO-less programs are harder and costlier toGOTO-less programs are harder and costlier toGOTO-less programs are harder and costlier to
create, test, and modify.create, test, and modify.create, test, and modify.
21. F.R.F.R.F.R.
AsAsAs I introduce GOTOs to untangleI introduce GOTOs to untangleI introduce GOTOs to untangle each deeplyeach deeplyeach deeply
nested mess of code,nested mess of code,nested mess of code, I have found that the numberI have found that the numberI have found that the number
of lines of code often drops byof lines of code often drops byof lines of code often drops by 20-25 percent,20-25 percent,20-25 percent,
22. F.R.F.R.F.R.
I am aware that some awful programs have beenI am aware that some awful programs have beenI am aware that some awful programs have been
written usingwritten usingwritten using GOTOs. This is often the fault ofGOTOs. This is often the fault ofGOTOs. This is often the fault of thethethe
language (because it lackslanguage (because it lackslanguage (because it lacks other constructs), or theother constructs), or theother constructs), or the
text editor (because it lacks a blocktext editor (because it lacks a blocktext editor (because it lacks a block move). With amove). With amove). With a
proper languageproper languageproper language and editor, and adequateand editor, and adequateand editor, and adequate
instruction in the use of GOTO, thisinstruction in the use of GOTO, thisinstruction in the use of GOTO, this should not be ashould not be ashould not be a
consideration.consideration.consideration.
23. somesomesome C# .NetC# .NetC# .Net code presented to proove howcode presented to proove howcode presented to proove how COOLCOOLCOOL goto is (at polishgoto is (at polishgoto is (at polish
4programmers message board)4programmers message board)4programmers message board)
private static bool TryParseSByteD(ReadOnlySpan<byte> source, out sbyte value, out int bytesConsumed)
{
if (source.Length < 1)
goto FalseExit;
int sign = 1;
int index = 0;
int num = source[index];
if (num == '-')
{
sign = -1;
index++;
if ((uint)index >= (uint)source.Length)
goto FalseExit;
num = source[index];
}
else if (num == '+')
{
index++;
if ((uint)index >= (uint)source.Length)
goto FalseExit;
num = source[index];
}
int answer = 0;
if (ParserHelpers.IsDigit(num))
{
if (num == '0')
{
do
{
index++;
if ((uint)index >= (uint)source.Length)
goto Done;
num = source[index];
} while (num == '0');
if (!ParserHelpers.IsDigit(num))
goto Done;
}
answer = num - '0';
index++;
if ((uint)index >= (uint)source.Length)
goto Done;
num = source[index];
if (!ParserHelpers.IsDigit(num))
goto Done;
index++;
answer = 10 * answer + num - '0';
// Potential overflow
if ((uint)index >= (uint)source.Length)
goto Done;
num = source[index];
24. ON A SOMEWHAT DISAPPOINTING CORRESPONDENCEON A SOMEWHAT DISAPPOINTING CORRESPONDENCE
May 1987, Edsger W. DijkstraMay 1987, Edsger W. DijkstraMay 1987, Edsger W. Dijkstra
25. E.D.E.D.E.D.
By my standards, a competent professionalBy my standards, a competent professionalBy my standards, a competent professional
programmer in 1987programmer in 1987programmer in 1987
should recognize that Rubin’s problem asks to be
solved by a nested application of the same
algorithm;
should know the theorem of “The bounded linear
search”;
should be able to derive that theorem and its
proof;
should not hesitate to use it;
should not waste his time in pointing out that the
boolean variable d is super uous;
should keep his repetitions simple and
disentangled;
etc. . .
26. It is typically possible to show how greatIt is typically possible to show how greatIt is typically possible to show how great GO TOGO TOGO TO is,is,is, on a small selectedon a small selectedon a small selected
piece of codepiece of codepiece of code
it is performantit is performantit is performant
write nowwrite nowwrite now - jump anywhere- jump anywhere- jump anywhere
30. BrokenBrokenBroken local reasoninglocal reasoninglocal reasoning
how much code do you have to read when something does not workhow much code do you have to read when something does not workhow much code do you have to read when something does not work
31. MAINSTREAM INDUSTRY STOPPED USINGMAINSTREAM INDUSTRY STOPPED USING "GOTO""GOTO" DECADESDECADES
AGOAGO
Costs (risks) are greater thanCosts (risks) are greater thanCosts (risks) are greater than pro tspro tspro ts
37. Forget about classicForget about classicForget about classic JavaBeansJavaBeansJavaBeans
This is closed topic,This is closed topic,This is closed topic, we don't gowe don't gowe don't go there anymorethere anymorethere anymore
38. SPRING BEANS, JAVA EE BEANS, CDI BEANS, JSF,SPRING BEANS, JAVA EE BEANS, CDI BEANS, JSF,
JPA...JPA...
39. BEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVABEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVA
40. BEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVABEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVA
Looks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normal
41. BEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVABEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVA
Looks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normal
42. BEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVABEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVA
Looks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normal
Not instantiated by new
43. BEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVABEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVA
Looks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normal
Not instantiated by new
44. BEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVABEAN == MUTILATED, CRIPPLED CLASS(OBJECT) IN JAVA
Looks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normalLooks like normal object, but does not behave (like) normal
Not instantiated by new
there are special rules, limitations, conventions on use
49. WikipediaWikipediaWikipedia
In software engineering, dependency injection is aIn software engineering, dependency injection is aIn software engineering, dependency injection is a
technique whereby one object supplies thetechnique whereby one object supplies thetechnique whereby one object supplies the
dependencies of another object. A "dependency" isdependencies of another object. A "dependency" isdependencies of another object. A "dependency" is
an object that can be used, for example a service.an object that can be used, for example a service.an object that can be used, for example a service.
Instead of a client specifying which service it willInstead of a client specifying which service it willInstead of a client specifying which service it will
use, something tells the client what service to use.use, something tells the client what service to use.use, something tells the client what service to use.
The "injection" refers to the passing of a dependencyThe "injection" refers to the passing of a dependencyThe "injection" refers to the passing of a dependency
(a service) into the object (a client) that would use it.(a service) into the object (a client) that would use it.(a service) into the object (a client) that would use it.
The service is made part of the client's state.[1]The service is made part of the client's state.[1]The service is made part of the client's state.[1]
Passing the service to the client, rather thanPassing the service to the client, rather thanPassing the service to the client, rather than
allowing a client to build or nd the service, is theallowing a client to build or nd the service, is theallowing a client to build or nd the service, is the
fundamental requirement of the pattern.fundamental requirement of the pattern.fundamental requirement of the pattern.
50. Passing the service to the client, rather thanPassing the service to the client, rather thanPassing the service to the client, rather than
allowing a client to build or nd the service, is theallowing a client to build or nd the service, is theallowing a client to build or nd the service, is the
fundamental requirement of the pattern.fundamental requirement of the pattern.fundamental requirement of the pattern.
51. Do we have aDo we have aDo we have a dependency injectiondependency injectiondependency injection here?here?here?
class MyService {
private final DbRepo db;
public MyService() {
this.db = new DbRepo("jdbc://url")
}
}
52. Do we have aDo we have aDo we have a dependency injectiondependency injectiondependency injection here?here?here?
class MyService {
private final DbRepo db;
public MyService(DbRepo db) {
this.db = db;
}
}
MyService serviceProvider() {
var db = new DbRepo("jdbc://url")
return MyService(db)
}
54. Framework (IoC container) lets youFramework (IoC container) lets youFramework (IoC container) lets you injectinjectinject at aat aat a small costsmall costsmall cost
55. Framework (IoC container) lets youFramework (IoC container) lets youFramework (IoC container) lets you injectinjectinject at aat aat a small costsmall costsmall cost
56. Framework (IoC container) lets youFramework (IoC container) lets youFramework (IoC container) lets you injectinjectinject at aat aat a small costsmall costsmall cost
It is in fact technical debt - you will pay laterIt is in fact technical debt - you will pay laterIt is in fact technical debt - you will pay later
57. Typical Spring (DI) application architectureTypical Spring (DI) application architectureTypical Spring (DI) application architecture (simpli ed)(simpli ed)(simpli ed)
58.
59. Repository in Controller - no problemRepository in Controller - no problemRepository in Controller - no problem
60. Repository in Controller - no problemRepository in Controller - no problemRepository in Controller - no problem
HttpRequest in Persistence layer - no problemHttpRequest in Persistence layer - no problemHttpRequest in Persistence layer - no problem
61. Repository in Controller - no problemRepository in Controller - no problemRepository in Controller - no problem
HttpRequest in Persistence layer - no problemHttpRequest in Persistence layer - no problemHttpRequest in Persistence layer - no problem
Injecting anything anywhere - no problemInjecting anything anywhere - no problemInjecting anything anywhere - no problem
62. Repository in Controller - no problemRepository in Controller - no problemRepository in Controller - no problem
HttpRequest in Persistence layer - no problemHttpRequest in Persistence layer - no problemHttpRequest in Persistence layer - no problem
Injecting anything anywhere - no problemInjecting anything anywhere - no problemInjecting anything anywhere - no problem
Bean transferred diseases - gratisBean transferred diseases - gratisBean transferred diseases - gratis
63. Beans just pretend they are not infamousBeans just pretend they are not infamousBeans just pretend they are not infamous SingletonSingletonSingletonsss
64. Only bad developers do thisOnly bad developers do thisOnly bad developers do this
65. Only bad developers do thisOnly bad developers do thisOnly bad developers do this
66. Only bad developers do thisOnly bad developers do thisOnly bad developers do this
oh, really?oh, really?oh, really?
68. Sooner or later someone will make a shortcut an hour before DEMOSooner or later someone will make a shortcut an hour before DEMOSooner or later someone will make a shortcut an hour before DEMO
An it will stay like that -An it will stay like that -An it will stay like that - foreverforeverforever
Because, the most important things in agile are:Because, the most important things in agile are:Because, the most important things in agile are:
69. Sooner or later someone will make a shortcut an hour before DEMOSooner or later someone will make a shortcut an hour before DEMOSooner or later someone will make a shortcut an hour before DEMO
An it will stay like that -An it will stay like that -An it will stay like that - foreverforeverforever
Because, the most important things in agile are:Because, the most important things in agile are:Because, the most important things in agile are:
VelocityVelocityVelocity and niceand niceand nice burndown chartsburndown chartsburndown charts
70.
71. LOBOLOBO
Level of Beans obscurityLevel of Beans obscurityLevel of Beans obscurity
(same for Jakarta EE -(same for Jakarta EE -(same for Jakarta EE - CDICDICDI @Inject@Inject@Inject, EJB, EJB, EJB @EJB@EJB@EJB ...)...)...)
72. It is evenIt is evenIt is even pro containerspro containerspro containers argument !argument !argument !
Would you write all those hundreds of injectionsWould you write all those hundreds of injectionsWould you write all those hundreds of injections
manually?manually?manually?
74. Step 0Step 0Step 0
class A {
@Autowired
Xx;
@Autowired
Y y;
@AUtowired
Z z;
}
75. Step 1Step 1Step 1
((( )))
class A {
final X x;
final Y y;
final Z z;
@Autowired
A(X x, Y y, Z z) {
this.x =x; this.y = y; this.z = z;
}
}
http://olivergierke.de/2013/11/why- eld-injection-is-evil/http://olivergierke.de/2013/11/why- eld-injection-is-evil/http://olivergierke.de/2013/11/why- eld-injection-is-evil/
76. Step 2Step 2Step 2
class A {
final X x;
final Y y;
final Z z;
//@Autowired
A(X x, Y y, Z z) {
this.x =x; this.y = y; this.z = z;
}
}
78. BACK TO CODING SCHOOL:BACK TO CODING SCHOOL:
If code is repeated - extract it to functionIf code is repeated - extract it to functionIf code is repeated - extract it to function
79. BACK TO CODING SCHOOL:BACK TO CODING SCHOOL:
If code is repeated - extract it to functionIf code is repeated - extract it to functionIf code is repeated - extract it to function
Sections of repeatingSections of repeatingSections of repeating newnewnew can be as well extractedcan be as well extractedcan be as well extracted
80. BACK TO CODING SCHOOL:BACK TO CODING SCHOOL:
If code is repeated - extract it to functionIf code is repeated - extract it to functionIf code is repeated - extract it to function
Sections of repeatingSections of repeatingSections of repeating newnewnew can be as well extractedcan be as well extractedcan be as well extracted
Use factories / providersUse factories / providersUse factories / providers
81. BACK TO CODING SCHOOL:BACK TO CODING SCHOOL:
If code is repeated - extract it to functionIf code is repeated - extract it to functionIf code is repeated - extract it to function
Sections of repeatingSections of repeatingSections of repeating newnewnew can be as well extractedcan be as well extractedcan be as well extracted
Use factories / providersUse factories / providersUse factories / providers
Too many arguements in constructor? Split a class in two (or three) (!)Too many arguements in constructor? Split a class in two (or three) (!)Too many arguements in constructor? Split a class in two (or three) (!)
82. PLENTY OF "BEANS" HAVE EXACTLY ONEPLENTY OF "BEANS" HAVE EXACTLY ONE
IMPLEMENTATIONIMPLEMENTATION
83. PLENTY OF "BEANS" HAVE EXACTLY ONEPLENTY OF "BEANS" HAVE EXACTLY ONE
IMPLEMENTATIONIMPLEMENTATION
Services, Controllers...Services, Controllers...Services, Controllers...
84. PLENTY OF "BEANS" HAVE EXACTLY ONEPLENTY OF "BEANS" HAVE EXACTLY ONE
IMPLEMENTATIONIMPLEMENTATION
Services, Controllers...Services, Controllers...Services, Controllers...
You don't need to make everything injectableYou don't need to make everything injectableYou don't need to make everything injectable
85. EXAMPLE (IN KOTLIN + VAVR)EXAMPLE (IN KOTLIN + VAVR)
data class StonesModule(
private val seq: DbSequence = DbSequence(),
val stoneRepo: Lazy<StoneRepo> = Lazy.of { StoneRepo(seq) },
val stoneService: Lazy<StoneService> = Lazy.of {StoneService
val stoneRest: Lazy<StoneRest> = Lazy.of {StoneRest(stoneSer
) //this is Kotlin uber constructor
// somewhere else
val myModule = StoneRepo( stoneRepo = Lazy.of{MyRepo()})
val service = myModule.stoneService.get()
86. "MANUAL" DI VS FRAMEWORK"MANUAL" DI VS FRAMEWORK
Manual DI vs container IoC
small pain every day <--> no problem for months - the disaster
tree like structure <--> ball of mud (messy cake)
3 - 6 deps per class <--> 5 - 18 deps per class (LOBO)
88. THERE ARE BEANS WORSE THAN SINGLETONS....THERE ARE BEANS WORSE THAN SINGLETONS....
89. THERE ARE BEANS WORSE THAN SINGLETONS....THERE ARE BEANS WORSE THAN SINGLETONS....
Request scoped
90. THERE ARE BEANS WORSE THAN SINGLETONS....THERE ARE BEANS WORSE THAN SINGLETONS....
Request scoped
Session scoped
91. THERE ARE BEANS WORSE THAN SINGLETONS....THERE ARE BEANS WORSE THAN SINGLETONS....
Request scoped
Session scoped
ThreadLocal based
92. THERE ARE BEANS WORSE THAN SINGLETONS....THERE ARE BEANS WORSE THAN SINGLETONS....
Request scoped
Session scoped
ThreadLocal based
Those are in factThose are in factThose are in fact global variablesglobal variablesglobal variables
93. private C method1( A a, B b) {
//uses a, b, and this. fields
this.serviceX.method2(a); //does not use `b`
this.serviceY.method3(b); //method does not use `a`
}
94. @Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
class TrollService {
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
private A a;
}
@Service
public class ServiceX {
@Autowired
private TrollService trollService;
void method2(A a) {
trollService.setA(a);
}
}
95. In spring based projects this isIn spring based projects this isIn spring based projects this is normalnormalnormal
(especially in Spring batch)(especially in Spring batch)(especially in Spring batch)
97. OUTCOME:OUTCOME:
Many of small, reasonable changesMany of small, reasonable changesMany of small, reasonable changes can break your systemcan break your systemcan break your system
98. OUTCOME:OUTCOME:
Many of small, reasonable changesMany of small, reasonable changesMany of small, reasonable changes can break your systemcan break your systemcan break your system
and tests are still green (because they test only mocks)and tests are still green (because they test only mocks)and tests are still green (because they test only mocks)
99. OUTCOME:OUTCOME:
Many of small, reasonable changesMany of small, reasonable changesMany of small, reasonable changes can break your systemcan break your systemcan break your system
and tests are still green (because they test only mocks)and tests are still green (because they test only mocks)and tests are still green (because they test only mocks)
Sleep well, all yourSleep well, all yourSleep well, all your tests are greentests are greentests are green
111. WhenWhenWhen @Transactional@Transactional@Transactional does not work?does not work?does not work?
private method
public, but this.call(...)
object instantiated with new
kotlin nal class/method (*)
called in other thread (parallelStream(), future)
112. WhenWhenWhen @Transactional@Transactional@Transactional does not work?does not work?does not work?
private method
public, but this.call(...)
object instantiated with new
kotlin nal class/method (*)
called in other thread (parallelStream(), future)
troll aspekt (@Trollsactional)
113. WhenWhenWhen @Transactional@Transactional@Transactional does not work?does not work?does not work?
private method
public, but this.call(...)
object instantiated with new
kotlin nal class/method (*)
called in other thread (parallelStream(), future)
troll aspekt (@Trollsactional)
missing jar on server
114. ADDADD JPA MAGIC ON TOP OF THATJPA MAGIC ON TOP OF THAT
other magic Beans
managed
detached
dirty check
proxy
116. Spring withSpring withSpring with @Transactional@Transactional@Transactional andandand JPA, and Database all togetherJPA, and Database all togetherJPA, and Database all together
118. All aspects induce similar problems:All aspects induce similar problems:All aspects induce similar problems:
@Secured
@RolesAllowed
@Cacheable
@Lock
...
119. All aspects induce similar problems:All aspects induce similar problems:All aspects induce similar problems:
@Secured
@RolesAllowed
@Cacheable
@Lock
...
Can your company accept that those aspects may beCan your company accept that those aspects may beCan your company accept that those aspects may be not active onnot active onnot active on
productionproductionproduction???
120. All aspects induce similar problems:All aspects induce similar problems:All aspects induce similar problems:
@Secured
@RolesAllowed
@Cacheable
@Lock
...
Can your company accept that those aspects may beCan your company accept that those aspects may beCan your company accept that those aspects may be not active onnot active onnot active on
productionproductionproduction???
after small refactoring ?after small refactoring ?after small refactoring ?
121. All aspects induce similar problems:All aspects induce similar problems:All aspects induce similar problems:
@Secured
@RolesAllowed
@Cacheable
@Lock
...
Can your company accept that those aspects may beCan your company accept that those aspects may beCan your company accept that those aspects may be not active onnot active onnot active on
productionproductionproduction???
after small refactoring ?after small refactoring ?after small refactoring ?
122. Those are just NOTThose are just NOTThose are just NOT edge casesedge casesedge cases
123.
124. It happens more often than you thinkIt happens more often than you thinkIt happens more often than you think
125. Some of the problems (like async) are solved by another set ofSome of the problems (like async) are solved by another set ofSome of the problems (like async) are solved by another set of
annotationsannotationsannotations
@AspectJ,
@PostConstruct,
@EnableAsync,
@EnableScheduling,
@NoRepositoryBean
126. Bean based development - a gentle introductionBean based development - a gentle introductionBean based development - a gentle introduction
130. MAGIC IN CODEMAGIC IN CODE
actually false (useless) de nitionactually false (useless) de nitionactually false (useless) de nition
131. MAGIC IN CODEMAGIC IN CODE
actually false (useless) de nitionactually false (useless) de nitionactually false (useless) de nition
THINGS, WE DO NOTTHINGS, WE DO NOT
UNDERSTANDUNDERSTAND
133. MAGIC INMAGIC IN CODECODE
practical de nition (v2.0practical de nition (v2.0practical de nition (v2.0 stable)stable)stable)
134. MAGIC INMAGIC IN CODECODE
practical de nition (v2.0practical de nition (v2.0practical de nition (v2.0 stable)stable)stable)
THINGS,THINGS, THAT DO NOTTHAT DO NOT
COMPOSE SAFELYCOMPOSE SAFELY
136. John de Goes (again)John de Goes (again)John de Goes (again)
Magic is a feature with non-compositionalMagic is a feature with non-compositionalMagic is a feature with non-compositional
semantics that succeeds in making thesemantics that succeeds in making thesemantics that succeeds in making the commoncommoncommon
case easy, at the cost of making the uncommoncase easy, at the cost of making the uncommoncase easy, at the cost of making the uncommon
cases surprising, impossible, or ridiculouslycases surprising, impossible, or ridiculouslycases surprising, impossible, or ridiculously
complex.complex.complex.
141. Is retry inside transaction or transaction inside retry?Is retry inside transaction or transaction inside retry?Is retry inside transaction or transaction inside retry?
@Transactional
@Retryable
void myMethod () {
}
142. Is retry inside transaction or transaction inside retry?Is retry inside transaction or transaction inside retry?Is retry inside transaction or transaction inside retry?
cache?, security? -> have funcache?, security? -> have funcache?, security? -> have fun
@Transactional
@Retryable
void myMethod () {
}
143. (hidden) cost of beans magic:(hidden) cost of beans magic:(hidden) cost of beans magic:
Heisenbugs
Stopped development
Unrealistic tests ( no aspects covered)
Slow tests (with aspects)
Overmocking (aka Mocksturbation, ...sorry)
Fear of refactoring
classpath / classloader disasters (on application servers)
problem with new java versions (not in Spring)
ugly architecture with shortcuts
151. People generally know SQLPeople generally know SQLPeople generally know SQL
ThenThenThen spend hours translating SQL to JPAspend hours translating SQL to JPAspend hours translating SQL to JPA
152. People generally know SQLPeople generally know SQLPeople generally know SQL
ThenThenThen spend hours translating SQL to JPAspend hours translating SQL to JPAspend hours translating SQL to JPA
And they useAnd they useAnd they use .save().save().save() for updatesfor updatesfor updates
153. People generally know SQLPeople generally know SQLPeople generally know SQL
ThenThenThen spend hours translating SQL to JPAspend hours translating SQL to JPAspend hours translating SQL to JPA
And they useAnd they useAnd they use .save().save().save() for updatesfor updatesfor updates
Which means probably - they have no clueWhich means probably - they have no clueWhich means probably - they have no clue
154. 2. APPLICATION SERVERS2. APPLICATION SERVERS
Websphere, JBoss, Tomcat
Classpath problems
vendor lock-in / java version lock-in
lost in debug
testability(*) way worse than in Spring (I am looking at you
Arquillian)
155. 1. JSF1. JSF
Maybe not the worst web framework ever doneMaybe not the worst web framework ever doneMaybe not the worst web framework ever done
ButButBut it sets the bar pretty highit sets the bar pretty highit sets the bar pretty high (for evil ones)(for evil ones)(for evil ones)
SessionScope hell
disaster in phases
resource consumption (Memory)
funny integration problems with other Beans
158. JAVA EE (1.X, 2.X)JAVA EE (1.X, 2.X)
Enterprise Java Bean - remote objects (better CORBA/RMI)
No one simply crates remote objects by new
Java EE/EJB - RMI on steroids
distributed transactions
2 phase commit
security in remote calls
160. How can you test it?How can you test it?How can you test it?
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResp
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
}
161. ONCE WE HAD NO GENERICS (BEFORE JAVA 5)ONCE WE HAD NO GENERICS (BEFORE JAVA 5)
//java 5
interface Provider<T> {
T getService();
}
//java 1.4
interface Provider {
Object getService();
}
162. NO LAMBDAS (BEFORENO LAMBDAS (BEFORE JAVA 8)JAVA 8)
"Aspect" done in a proper way"Aspect" done in a proper way"Aspect" done in a proper way
void <R> R doInTranasction( Funtion<DBTRansaction, R> code) {
var trx = b.beginTransaction();
try {
var result = code.apply(trx);
trx.commit();
return result;
} catch (...) {
trx.rollback();
throw ...
}
}
163. AT THE TIME OF JAVA 1.4AT THE TIME OF JAVA 1.4
Spring was e cient way of creating web applicationsSpring was e cient way of creating web applicationsSpring was e cient way of creating web applications
164. Up to java 7 there were not that many sensible alternativesUp to java 7 there were not that many sensible alternativesUp to java 7 there were not that many sensible alternatives
166. From javaFrom javaFrom java 8 on8 on8 on
We can use lambdas to provide similar functionality as aspects in aWe can use lambdas to provide similar functionality as aspects in aWe can use lambdas to provide similar functionality as aspects in a
compile safe waycompile safe waycompile safe way - without magic- without magic- without magic
167. From javaFrom javaFrom java 8 on8 on8 on
We can use lambdas to provide similar functionality as aspects in aWe can use lambdas to provide similar functionality as aspects in aWe can use lambdas to provide similar functionality as aspects in a
compile safe waycompile safe waycompile safe way - without magic- without magic- without magic
We have mature alternatives to servlets (netty, ratpack, sparkjava,We have mature alternatives to servlets (netty, ratpack, sparkjava,We have mature alternatives to servlets (netty, ratpack, sparkjava,
spring web ux)spring web ux)spring web ux)
170. STEP 1STEP 1
Drop application serversDrop application serversDrop application servers
Make Jar not War (Make Jar not War (Make Jar not War ( SpringBootSpringBootSpringBoot is good for a start)is good for a start)is good for a start)
use Kotlinuse Kotlinuse Kotlin
use vavr.iouse vavr.iouse vavr.io
171. STEP 2STEP 2
Hold your BeansHold your BeansHold your Beans
Use Beans where really neededUse Beans where really neededUse Beans where really needed
(example -> only(example -> only(example -> only Jax-RS annotations andJax-RS annotations andJax-RS annotations and @Controllers@Controllers@Controllers)))
Only constructors for DIOnly constructors for DIOnly constructors for DI
172. STEP 3STEP 3
(fun starts)(fun starts)(fun starts)
Drop JPADrop JPADrop JPA
Try:Try:Try: JOOQ, QueryDSL and alternativesJOOQ, QueryDSL and alternativesJOOQ, QueryDSL and alternatives
176. This all works nicelyThis all works nicelyThis all works nicely in:in:in:
177. This all works nicelyThis all works nicelyThis all works nicely in:in:in:
SPRINGSPRING
178. This all works nicelyThis all works nicelyThis all works nicely in:in:in:
SPRINGSPRING
SPRING WEBFLUXSPRING WEBFLUX
179. This all works nicelyThis all works nicelyThis all works nicely in:in:in:
SPRINGSPRING
SPRING WEBFLUXSPRING WEBFLUX
FullyFullyFully functionalfunctionalfunctional syntax, no beans, no annotations, no aspects neededsyntax, no beans, no annotations, no aspects neededsyntax, no beans, no annotations, no aspects needed
180. No classpath scanning -> SpringWeb ux starts in 200msNo classpath scanning -> SpringWeb ux starts in 200msNo classpath scanning -> SpringWeb ux starts in 200ms
Ratpack (alternative) starts in 10msRatpack (alternative) starts in 10msRatpack (alternative) starts in 10ms
181. Testing ofTesting ofTesting of functionalfunctionalfunctional applications is fast and easyapplications is fast and easyapplications is fast and easy
var app = Application(withMyTestDB).start();
var result = app.myApiCall();
assertEquals(expectedResult, result);
182. STEP 5 (REAL FUN)STEP 5 (REAL FUN)
Go monadsGo monadsGo monads
Transaction is a monadTransaction is a monadTransaction is a monad
183. STEP 5 (REAL FUN)STEP 5 (REAL FUN)
Go monadsGo monadsGo monads
Transaction is a monadTransaction is a monadTransaction is a monad
184. Example usingExample usingExample using NeeNeeNee project for aspectsproject for aspectsproject for aspects
fun addNewStone(newStone: StoneData) = seq.next().flatMap {
addStone(it, newStone)
}
private fun addStone(stoneId : Long, newStone: StoneData)
= Nee.constP(transactional) { jdbcProvider ->
val dsl = DSL.using(jdbcProvider.getConnection().getResource())
val insertedRows = dsl.insertInto(Stones.STONES)
.values(stoneId, newStone.name, newStone.price)
.execute()
if (insertedRows == 1) {
Option.some(stoneId)
} else {
Option.none()
}
}
185. Instead of writing:Instead of writing:Instead of writing:
Write this:Write this:Write this:
class Hasiok {
@Resource
val jdbcConnection: Connection
@Transactional
@Secure
@Cacheable
@Retryable
fun f(p:P) {
//code
}
}
class Hasiok {
private val f = {jdbcConnection:Connection ->
{p: P ->
//code
}
}
val enterprisyF = Nee.pure(
secure
.and(retryable)
.and(cacheable)
.and(transactional), f)
}
188. We need time to adopt to new things /We need time to adopt to new things /We need time to adopt to new things / conceptconceptconcept
I understand you still use spring in 2019I understand you still use spring in 2019I understand you still use spring in 2019
Reduce risks / harmReduce risks / harmReduce risks / harm
189. We need time to adopt to new things /We need time to adopt to new things /We need time to adopt to new things / conceptconceptconcept
I understand you still use spring in 2019I understand you still use spring in 2019I understand you still use spring in 2019
Reduce risks / harmReduce risks / harmReduce risks / harm
190. Bill G icker image (Bill G icker image (Bill G icker image ( )))https://www. ickr.com/photos/billerr/1814657036https://www. ickr.com/photos/billerr/1814657036https://www. ickr.com/photos/billerr/1814657036
191. Bill G icker image (Bill G icker image (Bill G icker image ( )))
Baby stepsBaby stepsBaby steps
https://www. ickr.com/photos/billerr/1814657036https://www. ickr.com/photos/billerr/1814657036https://www. ickr.com/photos/billerr/1814657036
192. Spring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fp
193. Spring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fp
I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!
194. Spring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fp
I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!
Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)
195. Spring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fp
I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!
Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)
It changesIt changesIt changes
196. Spring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fp
I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!
Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)
It changesIt changesIt changes
maybe one day spring will not promote beans anymore?maybe one day spring will not promote beans anymore?maybe one day spring will not promote beans anymore?
197. Spring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fpSpring 5 -> Spring Web ux is a huge step towards fp
I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!I have clean spring web ux based applications without beans !!!
Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)Spring is not like a WAR (or Java EE)
It changesIt changesIt changes
maybe one day spring will not promote beans anymore?maybe one day spring will not promote beans anymore?maybe one day spring will not promote beans anymore?
They have stopped with XMLs some time agoThey have stopped with XMLs some time agoThey have stopped with XMLs some time ago
199. Thank youThank youThank you
@jarek000000@jarek000000@jarek000000
Sources:Sources:Sources:
Adam Warski 2017 - The Case against annotations
Tomer Gabel - Slaying sacred cows
From Spring Boot Apps to Functional Kotlin Nicholas Frankel
- plain java Pong server
-
https://sites.google.com/site/unclebobconsultingllc/blogs-by-robert-
martin/dependency-injection-inversion
https://www.youtube.com/watch?v=f6a78mCrSeE
https://github.com/javaFunAgain/ratpong
https://github.com/nee ect/nee