Talk delivered with Eamonn Boyle at GOTO Copenhagen in 2019. Covering how best to move from delivering Android projects in Java to writing the code in Kotlin.
Kotlin for Android - Goto Copenhagan 2019Eamonn Boyle
This document summarizes a presentation about transitioning Android development teams to using Kotlin. Some key points:
- Kotlin provides excellent interoperability with Java code so legacy code can still be used. Kotlin syntax is also clearer and reduces codebase size by over 40%.
- Many popular Android frameworks now support Kotlin like Spring Boot, Ktor for services, TornadoFx for UIs, and Gradle build tools.
- Kotlin eliminates issues like null pointer exceptions through features like null safety, string templates, and type inference.
- Google recommends writing new Android projects in Kotlin, as many new Jetpack APIs will be Kotlin-first. Migrating helps future
Developing for Remote Bamboo Agents, AtlasCamp US 2012Atlassian
Brydie McCoy, Java Developer
As more and more peoples' building demands grow, they expand from building everything locally to a distributed building system or the elastic cloud. And for OnDemand the elastic cloud is the only option. Unfortunately developing plugins for remote/elastic agents has its own set of gotchas. Most plugins written for Bamboo do not work properly on remote agents. This talk will cover the core principles of developing for remote agents, what you can and can't do, as well as more advanced topics such as data transfer and communication between the agent and the server.
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...Wooga
(Slides in English)
Ein Backend für ein weltweit erfolgreiches Social Game zu entwickeln ist nicht einfach, aber die eigentliche Herausforderung ist der Betrieb der Systeme! Bei Wooga sind dieselben zwei bis drei Entwickler für beides verantwortlich. Über die letzten zwei Jahren hat sich ein halbes Dutzend Teams dieser Herausforderung gestellt. Dabei konnten sie auf die Erfahrungen der vorhergehenden Teams zurückgreifen und hatten die Freiheit, eigene Lösungsansätze zu verfolgen. Der Vortrag wird die entstandene Evolution der Backends nachvollziehen: Anfangs LAMP, dann Ruby statt PHP, dann NoSQL statt MySQL und am Ende ohne Datenbank auf Basis von Erlang OTP. Die Darstellung dieser Reise wird anschaulich zeigen, welche Vorteile es haben kann, Entwicklern auch einmal freie Hand zu lassen.
The document discusses challenges with testing agile software development and proposes collaborative solutions. It covers topics like test automation strategies, different levels to automate tests, roles of testers and developers in testing, and challenges with new technologies. The document aims to start a discussion on how testers and developers can better work together to improve testing in agile projects.
Talk given at Oracle University Day 2015 organized by semosedu.com.mk:
Did you know that Java is female?
Time travel with me through Java's life span to find out why:
- How it all started 20 years ago.
- Where, What and Why is Java today.
- Java Future plans, what to expect in next years.
How to get involved?
Kotlin for Android - Goto Copenhagan 2019Eamonn Boyle
This document summarizes a presentation about transitioning Android development teams to using Kotlin. Some key points:
- Kotlin provides excellent interoperability with Java code so legacy code can still be used. Kotlin syntax is also clearer and reduces codebase size by over 40%.
- Many popular Android frameworks now support Kotlin like Spring Boot, Ktor for services, TornadoFx for UIs, and Gradle build tools.
- Kotlin eliminates issues like null pointer exceptions through features like null safety, string templates, and type inference.
- Google recommends writing new Android projects in Kotlin, as many new Jetpack APIs will be Kotlin-first. Migrating helps future
Developing for Remote Bamboo Agents, AtlasCamp US 2012Atlassian
Brydie McCoy, Java Developer
As more and more peoples' building demands grow, they expand from building everything locally to a distributed building system or the elastic cloud. And for OnDemand the elastic cloud is the only option. Unfortunately developing plugins for remote/elastic agents has its own set of gotchas. Most plugins written for Bamboo do not work properly on remote agents. This talk will cover the core principles of developing for remote agents, what you can and can't do, as well as more advanced topics such as data transfer and communication between the agent and the server.
Games for the Masses - Wie DevOps die Entwicklung von Architektur verändert (...Wooga
(Slides in English)
Ein Backend für ein weltweit erfolgreiches Social Game zu entwickeln ist nicht einfach, aber die eigentliche Herausforderung ist der Betrieb der Systeme! Bei Wooga sind dieselben zwei bis drei Entwickler für beides verantwortlich. Über die letzten zwei Jahren hat sich ein halbes Dutzend Teams dieser Herausforderung gestellt. Dabei konnten sie auf die Erfahrungen der vorhergehenden Teams zurückgreifen und hatten die Freiheit, eigene Lösungsansätze zu verfolgen. Der Vortrag wird die entstandene Evolution der Backends nachvollziehen: Anfangs LAMP, dann Ruby statt PHP, dann NoSQL statt MySQL und am Ende ohne Datenbank auf Basis von Erlang OTP. Die Darstellung dieser Reise wird anschaulich zeigen, welche Vorteile es haben kann, Entwicklern auch einmal freie Hand zu lassen.
The document discusses challenges with testing agile software development and proposes collaborative solutions. It covers topics like test automation strategies, different levels to automate tests, roles of testers and developers in testing, and challenges with new technologies. The document aims to start a discussion on how testers and developers can better work together to improve testing in agile projects.
Talk given at Oracle University Day 2015 organized by semosedu.com.mk:
Did you know that Java is female?
Time travel with me through Java's life span to find out why:
- How it all started 20 years ago.
- Where, What and Why is Java today.
- Java Future plans, what to expect in next years.
How to get involved?
Kotlin Native - C / Swift Interop - ACCU Autmn 2019Eamonn Boyle
The document discusses Kotlin Native and its interoperability with C/C++ and Swift. Some key points:
- Kotlin Native compiles Kotlin code to native binaries that run without a virtual machine on various platforms like iOS, MacOS, Android etc.
- It allows calling into existing native libraries written in C/C++/Swift and calling Kotlin Native code from other languages.
- Common data types like primitives, enums, structs can be mapped between Kotlin Native and C/C++. Kotlin Native supports pointers to interoperate with native code.
- Structs and other complex types are represented as classes in Kotlin Native but maintain the memory layout of the
Meetup presentation discussing multi-platform Kotlin and in particular Kotlin Native.
A video of the presentation is available here,
https://www.youtube.com/watch?v=yzhAuBBEHGs&t=37s
The document provides an overview of topics to be covered in an MOOC presentation on Android and Kotlin development. It includes introductions to Android, Kotlin, and Android app development kick-off. Specific topics that will be discussed are the world of Android, learning tools, classes and inheritance in Kotlin, strings and arrays, exceptions and errors, installation and exploration of Android, connecting and fetching data, and the final project testing. The presentation will use tools like Android Studio, ADB, AVD Manager, and IntelliJ IDEA. It will also discuss future aspects of Kotlin like its modern features and growth potential.
The document contains a presentation on MOOC topics related to Android and Kotlin development. It introduces Android and some learning tools used for Android development. It then covers topics in Kotlin like classes and inheritance, strings and arrays, exceptions and errors. It discusses installing and exploring Android, connecting and fetching data. The final project section covers testing and future aspects of Android and Kotlin. Key tools mentioned are Android Studio, ADB, AVD Manager, IntelliJ IDEA and Fabric. Concepts explained include higher order functions in Kotlin and the future potential of Kotlin as a modern programming language.
Kotlin is a new programming language for Android App development and it is discovered by Google.It will be an alternate option in place of Java language for android app development.
Kotlin is a statically typed programming language that runs on the JVM and JavaScript and is fully interoperable with Java. It aims to combine object-oriented and functional programming and offers features like null safety, concise syntax, multiplatform capabilities, and powerful libraries. The presentation introduces Kotlin, discusses why it is useful compared to Java due to its null safety and concise code, and covers Kotlin syntax and features like variables, functions, classes, inheritance, data classes, extension functions, control flow, and collections before demonstrating a sample Android app built with Kotlin.
Kotlin is a programming language that runs on the Java Virtual Machine and JavaScript. It was created by JetBrains as an alternative to Java that allows code to be written in fewer lines using less verbose syntax. Kotlin is fully interoperable with Java code and is becoming a preferred language for Android development due to its support by Android Studio. The document discusses Kotlin's history, capabilities, and provides examples of how code can be written more concisely in Kotlin compared to Java. It recommends resources for learning Kotlin and says that while there is a learning curve, it may be beneficial for new projects, especially Android development.
Kotlin is a statically typed programming language that runs on the Java Virtual Machine (JVM) and is fully interoperable with Java. Some key features of Kotlin include being less verbose than Java, property-based accessors, lambdas and type inference, which allow code to be more concise and readable. Kotlin aims to be practical for building large applications and introduces modern language features while also having a smooth learning curve for Java developers.
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...mCloud
Kotlin is here to stay
- Kotlin was unveiled in 2011 by JetBrains and has grown significantly since then
- It is now fully supported by Google for Android development and is widely adopted in the Android community
- Kotlin code runs on the JVM and is 100% interoperable with Java, allowing use of existing Java libraries
- Key advantages of Kotlin include its conciseness, null safety, and support for functional programming patterns
KOTLIN VS. JAVA WHICH ONE IS BEST FOR ANDROID DEVELOPMENT.pptxShantanuApurva1
Kotlin is the official programming language for Android app development, according to the Google Play Store. Most developers would want to utilize Kotlin in order for their app to be accepted by the Play Store. Java, on the other hand, continues to be the general-purpose programming language for Android and other platforms.
Say Goodbye To Java: Getting Started With Kotlin For Android DevelopmentAdam Magaña
Kotlin is officially endorsed by Google for Android development but what is all the fuss about? Why should accomplished Java developers care? Here I explore some of the history, fundamentals, and tools that Kotlin provides for Android developers.
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.
Dear Kotliners - Java Developers are Humans tooVivek Chanddru
This talk is to help the kotliners understand the caveats of the default interoperability features provided by Kotlin and provides a few tips for interoperability to make Java developers life easier.
One of the main reasons Titanium Mobile has been so successful is that the technology has significantly lowered the barrier to entry for native mobile development. A major force behind this is JavaScript, Titanium's primary programming language. The JavaScript programming language is small enough where the basics can be learned in a matter of hours, which has enabled developers from many different backgrounds to become productive using Titanium. But there's much more to JavaScript than just control structures and a handful of primitive data types - JavaScript is a beautiful functional programming language with great features you might not be using.
Most developers working on the web today have had some exposure to JavaScript, but there's a difference between using jQuery for DOM manipulation on a web page and writing an entire application in JavaScript. This talk, intended for beginner or intermediate JavaScript developers, will focus on the essential language features you will need to write professional JavaScript applications, including but not limited to:
Object Oriented Programming in JavaScript
The Good Parts and Bad Parts of JavaScript
Useful JavaScript Patterns, Tricks, and Style Guidelines
The JavaScript runtime in Titanium Mobile
Further Reading and ways to stay up to date on JavaScript
'Full Stack Kotlin' Workshop at KotlinConfGarth Gilmour
This document provides information about a Kotlin workshop that will use Kotlin to build a full-stack web application from scratch. The workshop schedule includes introductions to Kotlin.js, React, Spring WebFlux, and Spring Data for Neo4J. Iterations will have participants building components of the application, putting it all together by the end of the day. Breaks are scheduled throughout the workshop. The trainers' backgrounds are also provided.
JavaScript has a well deserved reputation of be hard to write and debug. Put it on a mobile device and the problems increase exponentially. Mobile browsers lack all of the niceties that developers rely on to do testing and debugging including the most fundamental tool, the debugger. But it is possible to write quality JavaScript on a mobile device without relying on blind luck. In this talk I will show all of the tools and tricks that I learned in my 12 month development of the new KBB.com mobile site.
Kotlin vs Java | A Comparative Analysis | IDEA USHERNitish Garg
Kotlin vs Java: Which is Better?
This is the biggest question on every app developer’s mind right now. And we are here to answer just that!
A couple of years ago Java was the fundamental programming language for app developers worldwide. So, what changed?
The simple answer is Java is aging. And just like all old things, it is now phasing out. Meanwhile, the pragmatic, robust, and intuitive Kotlin is here to stay!
To know the difference between the two programming languages and find out which of the two is better for you. Check out the presentation.
For more information visit https://ideausher.com/blog/kotlin-vs-java/
Check out our website at www.ideausher.com
Kotlin is free, open-source, statically typed, and flexible with a strong emphasis on optimization. The tool is designed to facilitate interoperability, safety, clarity, and tool support. Kotlin language is now preferred by many companies for Android development.
What's new with Kotlin - Google IO18' extended Covenant University.SimileoluwaAluko
A presentation made at the Google IO 18 extended for Google Developers Group (GDG) Covenant University. Introducing the Kotlin programming language and features it has that makes software development more pleasant. It also touches a little on its goodness in Android application development.
Compose is a Kotlin library for building user interfaces across platforms like Android, Desktop, and Web. It provides a declarative programming model that allows describing UI as composable functions of pure data. The Compose compiler plugin handles calling these functions and managing the underlying UI component tree efficiently as data changes over time. Compose uses techniques like positional memoization and gap buffers to optimize caching of UI nodes and state for each call site in a composable function. This allows Compose to rebuild the UI incrementally based on changes in input data.
The document discusses various Kotlin language features and how they are compiled down to bytecode. It explains concepts like lowering, de-sugaring, and decompiling Kotlin programs. Specific language features summarized include free functions, nested functions, extension methods, data classes, object declarations, companion objects, and lambdas with receivers. The document shows how each feature compiles by decompiling example Kotlin code.
More Related Content
Similar to Transitioning Android Teams Into Kotlin
Kotlin Native - C / Swift Interop - ACCU Autmn 2019Eamonn Boyle
The document discusses Kotlin Native and its interoperability with C/C++ and Swift. Some key points:
- Kotlin Native compiles Kotlin code to native binaries that run without a virtual machine on various platforms like iOS, MacOS, Android etc.
- It allows calling into existing native libraries written in C/C++/Swift and calling Kotlin Native code from other languages.
- Common data types like primitives, enums, structs can be mapped between Kotlin Native and C/C++. Kotlin Native supports pointers to interoperate with native code.
- Structs and other complex types are represented as classes in Kotlin Native but maintain the memory layout of the
Meetup presentation discussing multi-platform Kotlin and in particular Kotlin Native.
A video of the presentation is available here,
https://www.youtube.com/watch?v=yzhAuBBEHGs&t=37s
The document provides an overview of topics to be covered in an MOOC presentation on Android and Kotlin development. It includes introductions to Android, Kotlin, and Android app development kick-off. Specific topics that will be discussed are the world of Android, learning tools, classes and inheritance in Kotlin, strings and arrays, exceptions and errors, installation and exploration of Android, connecting and fetching data, and the final project testing. The presentation will use tools like Android Studio, ADB, AVD Manager, and IntelliJ IDEA. It will also discuss future aspects of Kotlin like its modern features and growth potential.
The document contains a presentation on MOOC topics related to Android and Kotlin development. It introduces Android and some learning tools used for Android development. It then covers topics in Kotlin like classes and inheritance, strings and arrays, exceptions and errors. It discusses installing and exploring Android, connecting and fetching data. The final project section covers testing and future aspects of Android and Kotlin. Key tools mentioned are Android Studio, ADB, AVD Manager, IntelliJ IDEA and Fabric. Concepts explained include higher order functions in Kotlin and the future potential of Kotlin as a modern programming language.
Kotlin is a new programming language for Android App development and it is discovered by Google.It will be an alternate option in place of Java language for android app development.
Kotlin is a statically typed programming language that runs on the JVM and JavaScript and is fully interoperable with Java. It aims to combine object-oriented and functional programming and offers features like null safety, concise syntax, multiplatform capabilities, and powerful libraries. The presentation introduces Kotlin, discusses why it is useful compared to Java due to its null safety and concise code, and covers Kotlin syntax and features like variables, functions, classes, inheritance, data classes, extension functions, control flow, and collections before demonstrating a sample Android app built with Kotlin.
Kotlin is a programming language that runs on the Java Virtual Machine and JavaScript. It was created by JetBrains as an alternative to Java that allows code to be written in fewer lines using less verbose syntax. Kotlin is fully interoperable with Java code and is becoming a preferred language for Android development due to its support by Android Studio. The document discusses Kotlin's history, capabilities, and provides examples of how code can be written more concisely in Kotlin compared to Java. It recommends resources for learning Kotlin and says that while there is a learning curve, it may be beneficial for new projects, especially Android development.
Kotlin is a statically typed programming language that runs on the Java Virtual Machine (JVM) and is fully interoperable with Java. Some key features of Kotlin include being less verbose than Java, property-based accessors, lambdas and type inference, which allow code to be more concise and readable. Kotlin aims to be practical for building large applications and introduces modern language features while also having a smooth learning curve for Java developers.
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...mCloud
Kotlin is here to stay
- Kotlin was unveiled in 2011 by JetBrains and has grown significantly since then
- It is now fully supported by Google for Android development and is widely adopted in the Android community
- Kotlin code runs on the JVM and is 100% interoperable with Java, allowing use of existing Java libraries
- Key advantages of Kotlin include its conciseness, null safety, and support for functional programming patterns
KOTLIN VS. JAVA WHICH ONE IS BEST FOR ANDROID DEVELOPMENT.pptxShantanuApurva1
Kotlin is the official programming language for Android app development, according to the Google Play Store. Most developers would want to utilize Kotlin in order for their app to be accepted by the Play Store. Java, on the other hand, continues to be the general-purpose programming language for Android and other platforms.
Say Goodbye To Java: Getting Started With Kotlin For Android DevelopmentAdam Magaña
Kotlin is officially endorsed by Google for Android development but what is all the fuss about? Why should accomplished Java developers care? Here I explore some of the history, fundamentals, and tools that Kotlin provides for Android developers.
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.
Dear Kotliners - Java Developers are Humans tooVivek Chanddru
This talk is to help the kotliners understand the caveats of the default interoperability features provided by Kotlin and provides a few tips for interoperability to make Java developers life easier.
One of the main reasons Titanium Mobile has been so successful is that the technology has significantly lowered the barrier to entry for native mobile development. A major force behind this is JavaScript, Titanium's primary programming language. The JavaScript programming language is small enough where the basics can be learned in a matter of hours, which has enabled developers from many different backgrounds to become productive using Titanium. But there's much more to JavaScript than just control structures and a handful of primitive data types - JavaScript is a beautiful functional programming language with great features you might not be using.
Most developers working on the web today have had some exposure to JavaScript, but there's a difference between using jQuery for DOM manipulation on a web page and writing an entire application in JavaScript. This talk, intended for beginner or intermediate JavaScript developers, will focus on the essential language features you will need to write professional JavaScript applications, including but not limited to:
Object Oriented Programming in JavaScript
The Good Parts and Bad Parts of JavaScript
Useful JavaScript Patterns, Tricks, and Style Guidelines
The JavaScript runtime in Titanium Mobile
Further Reading and ways to stay up to date on JavaScript
'Full Stack Kotlin' Workshop at KotlinConfGarth Gilmour
This document provides information about a Kotlin workshop that will use Kotlin to build a full-stack web application from scratch. The workshop schedule includes introductions to Kotlin.js, React, Spring WebFlux, and Spring Data for Neo4J. Iterations will have participants building components of the application, putting it all together by the end of the day. Breaks are scheduled throughout the workshop. The trainers' backgrounds are also provided.
JavaScript has a well deserved reputation of be hard to write and debug. Put it on a mobile device and the problems increase exponentially. Mobile browsers lack all of the niceties that developers rely on to do testing and debugging including the most fundamental tool, the debugger. But it is possible to write quality JavaScript on a mobile device without relying on blind luck. In this talk I will show all of the tools and tricks that I learned in my 12 month development of the new KBB.com mobile site.
Kotlin vs Java | A Comparative Analysis | IDEA USHERNitish Garg
Kotlin vs Java: Which is Better?
This is the biggest question on every app developer’s mind right now. And we are here to answer just that!
A couple of years ago Java was the fundamental programming language for app developers worldwide. So, what changed?
The simple answer is Java is aging. And just like all old things, it is now phasing out. Meanwhile, the pragmatic, robust, and intuitive Kotlin is here to stay!
To know the difference between the two programming languages and find out which of the two is better for you. Check out the presentation.
For more information visit https://ideausher.com/blog/kotlin-vs-java/
Check out our website at www.ideausher.com
Kotlin is free, open-source, statically typed, and flexible with a strong emphasis on optimization. The tool is designed to facilitate interoperability, safety, clarity, and tool support. Kotlin language is now preferred by many companies for Android development.
What's new with Kotlin - Google IO18' extended Covenant University.SimileoluwaAluko
A presentation made at the Google IO 18 extended for Google Developers Group (GDG) Covenant University. Introducing the Kotlin programming language and features it has that makes software development more pleasant. It also touches a little on its goodness in Android application development.
Similar to Transitioning Android Teams Into Kotlin (20)
Compose is a Kotlin library for building user interfaces across platforms like Android, Desktop, and Web. It provides a declarative programming model that allows describing UI as composable functions of pure data. The Compose compiler plugin handles calling these functions and managing the underlying UI component tree efficiently as data changes over time. Compose uses techniques like positional memoization and gap buffers to optimize caching of UI nodes and state for each call site in a composable function. This allows Compose to rebuild the UI incrementally based on changes in input data.
The document discusses various Kotlin language features and how they are compiled down to bytecode. It explains concepts like lowering, de-sugaring, and decompiling Kotlin programs. Specific language features summarized include free functions, nested functions, extension methods, data classes, object declarations, companion objects, and lambdas with receivers. The document shows how each feature compiles by decompiling example Kotlin code.
TypeScript has a larger and more established community compared to KotlinJS. While Kotlin's coroutines are more powerful than TypeScript's async/await, JSX is simpler than Kotlin's React DSL. TypeScript also has a more advanced type system with features like union, intersection and mapped types. However, Kotlin has more elegant syntax with expressions like when and if being expressions. Overall, both languages are good but TypeScript is better suited as a JavaScript superset while Kotlin shines in its multiplatform capabilities.
The document provides 10 lessons learned from the 1990s about software development:
1. Draw diagrams to design systems at different levels of abstraction.
2. Conduct design reviews focused on algorithms and patterns, not just syntax.
3. Prioritize stable frameworks and tools over constantly changing options.
4. Develop internal libraries and tools instead of solely relying on external dependencies.
5. Learn all aspects of testing, not just unit tests, and the role of testers.
6. Master development tools and optimize workflows through shortcuts and automation.
7. Focus on fundamentals like performance, data structures, and asynchronous programming.
8. Take responsibility for work and focus on principles over blindly following process.
The document discusses how the Kotlin compiler fakes or lies about certain Kotlin language features by decompiling the bytecode produced by the Kotlin compiler. It provides examples of how free functions, nested functions, primary constructors, extension methods, destructuring, object declarations, companion objects, enumerations, delegated properties, lambdas with receivers, and more are implemented under the hood by the compiler through bytecode tricks and deception. The document is intended to look under the hood of the Kotlin compiler and Java bytecode to understand how certain Kotlin features are implemented that don't have a direct mapping to Java.
Kotlin's coroutines are more powerful than TypeScript's async/await for asynchronous programming. Coroutines are more general and can be used with other patterns besides just asynchronous code. In KotlinJS, coroutines work easily with Promises. They allow suspending functions without needing to explicitly "await", and can be applied to other patterns beyond just async code. Kotlin's coroutines are therefore superior to TypeScript's async/await for asynchronous programming in JavaScript.
The Kotlin compiler provides many features of Kotlin that do not exist natively in the JVM by generating bytecode that emulates these features. It uses various techniques like generating additional classes and methods, passing implicit parameters, and implementing functional interfaces to achieve this. The summary decompiles some Kotlin code examples to Java bytecode to illustrate how specific Kotlin features are implemented under the hood.
Generics On The JVM (What you don't know will hurt you)Garth Gilmour
Talk delivered to the London Kotlin Users Group. Covering how generics is implemented on the JVM and the different approaches taken by Java and Kotlin to co/contra variance and the lack of reified types.
Using Kotlin, to Create Kotlin,to Teach Kotlin,in SpaceGarth Gilmour
Talk delivered at the Kotliners 2020 conference. Covering how Instil used the Kotlin Space DSL to automatically populate Space instances used in coding workshops.
1) The document discusses whether software engineers can be considered professionals by examining the traditional definitions of a profession, which include belonging to a professional culture, having apprenticeships and lifelong careers, and following a code of conduct.
2) It reviews software engineering against these criteria and finds it lacking in some areas such as not having a strong professional culture or union.
3) The document also questions whether professionalism necessarily leads to competence, success, or growth in the field, providing some examples and arguments on both sides of this issue. It concludes that while ethics are important, professional status may not be critical for software engineering currently.
Social Distancing is not Behaving DistantlyGarth Gilmour
This document discusses strategies for effectively delivering training remotely during the COVID-19 pandemic. It outlines lessons learned from initial attempts at virtual training, including that it is difficult to engage students and maintain focus without in-person interaction. It recommends adopting a combined approach using multiple instructors, flexible scheduling of material, and specialized online tools to help facilitate collaborative learning and make remote training feel more personal.
Simpler and Safer Java Types (via the Vavr and Lambda Libraries)Garth Gilmour
This document provides an overview of functional programming concepts in Java using the Vavr and Lambda libraries. It begins with an introduction to the libraries and examples of common FP data structures and patterns like currying, tuples, Either, and pattern matching. It then demonstrates examples of collections, grouping, filtering and combining data using the Vavr library. The document aims to showcase how these libraries can provide cleaner FP abstractions compared to Java's built-in Streams API.
This document provides an overview of a Domain Driven Design training session held in Belfast in February 2019 by Instil Software. It discusses the philosophy of DDD and how it relates to bounded contexts and language games based on the work of philosopher Ludwig Wittgenstein. Key points covered include Wittgenstein's view that language is used within language games and bounded contexts, and that the meaning of words depends on their use rather than having absolute meanings. It also discusses how this relates to DDD and the importance of understanding the context in which terms are being used.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemPeter Muessig
Learn about the latest innovations in and around OpenUI5/SAPUI5: UI5 Tooling, UI5 linter, UI5 Web Components, Web Components Integration, UI5 2.x, UI5 GenAI.
Recording:
https://www.youtube.com/live/MSdGLG2zLy8?si=INxBHTqkwHhxV5Ta&t=0
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
WhatsApp offers simple, reliable, and private messaging and calling services for free worldwide. With end-to-end encryption, your personal messages and calls are secure, ensuring only you and the recipient can access them. Enjoy voice and video calls to stay connected with loved ones or colleagues. Express yourself using stickers, GIFs, or by sharing moments on Status. WhatsApp Business enables global customer outreach, facilitating sales growth and relationship building through showcasing products and services. Stay connected effortlessly with group chats for planning outings with friends or staying updated on family conversations.
What is Augmented Reality Image Trackingpavan998932
Augmented Reality (AR) Image Tracking is a technology that enables AR applications to recognize and track images in the real world, overlaying digital content onto them. This enhances the user's interaction with their environment by providing additional information and interactive elements directly tied to physical images.
SOCRadar's Aviation Industry Q1 Incident Report is out now!
The aviation industry has always been a prime target for cybercriminals due to its critical infrastructure and high stakes. In the first quarter of 2024, the sector faced an alarming surge in cybersecurity threats, revealing its vulnerabilities and the relentless sophistication of cyber attackers.
SOCRadar’s Aviation Industry, Quarterly Incident Report, provides an in-depth analysis of these threats, detected and examined through our extensive monitoring of hacker forums, Telegram channels, and dark web platforms.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
5. 2018 was a very significant year
• For developers on the JVM
We stopped asking:
• “Why aren’t you doing this in Java?”
We started asking:
• “Why are you doing this in Java?”
The revolution is actualised
• It’s a polyglot coding world now
• …and there’s no going back
This Talk Is (Maybe) Slightly Out Of Date
8. This talk assumes:
• You know Java and Android
• You have the scars to prove it
We will convince you that:
• There is a better way
• Kotlin is that way
A Veteran’s Guide To Moving Android Teams To Kotlin
9. Excellent interoperability
• Call legacy Java code easily
• Make calls into Kotlin from Java
Really clear, yet concise syntax
• Reduces the codebase by over 40%
Beloved by frameworks
• Spring Boot (esp. with Kofu)
• Services (Ktor and Http4k)
• User Interfaces (TornadoFx)
• Build tools (Gradle from V5)
• Dependency Injection (Koin)
Why Code In Kotlin? Null Safety
String Templates
Default parameters
Extensions
Free Functions
Coroutines
Single Expression
Functions
Reified generics
Data classes and
Properties
Type Inference
Smart Casts
Operator overloading
10. public class Program {
public static void main(String[] args) {
List<String> data = Arrays.asList(
"ab","cde","fghi","jklmn",
"op","qrs","tuvw","xyz");
data.stream()
.flatMapToInt(CharSequence::chars)
.mapToObj(num -> (char)num)
.forEach(c -> System.out.printf("%s ", c));
}
}
Let’s Print The Alphabet - In Java
a b c d e f g h i j k l m n o p q r s t u v w x y z
11. fun main() {
val data = listOf(
"ab","cde","fghi","jklmn",
"op","qrs","tuvw","xyz")
data.flatMap { it.toList() }
.forEach { print("$it ") }
}
Let’s Print The Alphabet - In Kotlin
a b c d e f g h i j k l m n o p q r s t u v w x y z
12. Why Use Kotlin On Android?
“Today we’re announcing another big step: Android
development will become increasingly Kotlin-first.
Many new Jetpack APIs and features will be offered
first in Kotlin. If you’re starting a new project, you
should write it in Kotlin;”
Google I/O 2019
13. Codebase reduction by 40% (JetBrains figure)
Simplify the remaining code
Plaster over Androids cracks
Access FP features / patterns (Java 8+)
Future proof your skill set
Developer happiness
Why Use Kotlin On Android?
14. We’ve written an awful lot of code…
• Especially mobile applications with complex networking
• Also embedded systems, web applications etc...
For an awful lot of clients…
• Atlassian, Johnson Controls, Shopkeep, Cybersource
On every platform you’ve ever heard of
• Plus (if you were lucky) a few you managed to avoid
We switched to Kotlin four years ago
• For all applications built on top of the JVM
• Plus we are experimenting with Native and JS
Why Listen To Us?
15. Instil is a JetBrains training partner
• Written 3 Kotlin courses so far
We have delivered training for
• Household names (Europe and US)
• Brand new start-ups
We believe Kotlin will help you write better solutions
• Engineering Expertise is part of our ethos and Kotlin helps us
• We believe in improving development practices within our community
We started the Kotlin Belfast User Group
• We promote it to help people, not to make money
Why Listen To Us?
16. We don’t get royalties from JetBrains or Google
We’re placing a bet on Kotlin being the future
Why Listen To Us?
17. • What motivated us to switch?
• How did we make the move?
• Which features do we love?
• What problems did we face?
• Did we require new frameworks?
• What would we do differently?
• Are coroutines of any use? *
Questions To Answer
* we want to talk about coroutines because they're awesome…
18. Prior to Kotlin we had written:
• iOS mobile apps in Objective-C and Swift
• Cross-platform mobile apps in Xamarin
• Standard desktop apps in C / C++ / C#
• Web applications in just about everything
• JEE in all its incarnations (including EJB)
• Spring from the earliest days to WebFlux
We were tendering for some major Android jobs
• The developers didn’t want to use Java
• They really didn’t want to use Java
What Motivated Us?
19. Words From The Wise
“I do not like this Java lang
I do not like it, business man
It does not suit our software house
It makes me sad to click the mouse
I will not code it here or there
It sucks for Android anywhere”
David Robert Seuss, Software Engineer
(personal conversation with our CEO)
20. We had a problem on the Java Virtual Machine
• Kotlin was a pragmatic solution
By todays standards Java is not great
• But lots of great software is written in it
We still leverage our historical knowledge
• By remaining within the JVM ecosystem
What Motivated Us?
Java Kotlin
21. Words from the Wise
“Making the switch from Java to Kotlin was easy - being able
to use the same tools and libraries that we knew and loved
meant that we felt productive in Kotlin almost immediately.
Over time, our code then became simpler, more stable and
more performant as we started to experiment with the Kotlin
functional toolkit and coroutines.”
Chris van Es, Head of Engineering, Instil
22. Words from the Wise
“Working in Java is a fantastic developer experience because
you can use Kotlin.”
Kelvin Harron, Software Engineer, Instil
“Kotlin negates the biggest weakness of the Java Ecosystem,
i.e. Java.”
Eoin Mullan, Principal Software Engineer, Instil
24. We wanted an epic, heroic tale of a
warrior’s struggle to final victory
25. It was less Kill Bill, and more Kill Kenny – very easy
26.
27. Kotlin’s interop story is awesome
• @Throws (adds checked exception)
• @JvmOverloads (for default params)
• @JvmName (rename most things)
• @JvmWildcard (manage generics)
Interop never caused serious disruption
• But it was reassuring to know we had
low level control should it be needed
• Emotional Support Annotations
In Case Of Interoperability Emergency…
42. Standard Utility Functions
Current Object
passed as receiver
Current Object
Returned
Result Of Block
Returned
Current Object
passed via ‘it’
with apply run
also let
45. class MyThing {
var firstProp: Int = 123
var secondProp: Int
get() = firstProp * 2
set(value) {
firstProp = value / 2
}
var thirdProp by Delegate()
}
Delegated Properties
46. class Delegate {
private var value: String = "Homer“
operator fun getValue(thisRef: Any?,
property: KProperty<*>) : String {
println("---> Getting $value")
return value
}
operator fun setValue(thisRef: Any?,
property: KProperty<*>, value: String) {
println("---> Setting $value")
this.value = value
}
}
Delegated Properties
47. val saveButtonText: String by lazy {
resourceService.getStringResource(R.string.save)
}
val addButtonText: String by lazy {
resourceService.getStringResource(R.string.add)
}
val cancelButtonText: String by lazy {
resourceService.getStringResource(R.string.cancel)
}
Delegated Properties
Note the type
A lazy object manages the initialisation but it
is consumed as a simple string
48. fun <T> weak(value: T? = null) = WeakReferenceDelegate(value)
class WeakReferenceDelegate<T>(value: T?) {
private var weakReference = WeakReference(value)
operator fun getValue(thisRef: Any,
prop: KProperty<*>): T? = weakReference.get()
operator fun setValue(thisRef: Any, prop: KProperty<*>, value: T) {
weakReference = WeakReference(value)
}
}
Delegated Properties
49. Delegated Properties
private var dialog: InProgressDialog? by weak()
Note the type
A WeakReferenceDelegate object manages the
WeakReference but it is read and written as the inner type
50. abstract class BaseActivity<ViewModelType : ActivityViewModel>
: AppCompatActivity(),
DisposableManager,
CoroutineScope by MainScope() {
. . .
}
Implementation by Delegation
51. Extensions allow us write more expressive code
They also help us create Domain Specific Languages
Extension Functions
deviceStatusStream()
.filterForErrors()
.collate().and()
.send()
64. Null safety and immutability are great
Some scenarios are a little messier
• Reading in untyped JSON
• DI injected values
Kotlin has lots of ways of help
• Good tooling
• lateinit
• lazy
Null Safety in Reality
One is your locker. The other is a garbage dump in the
Philippines
This one’s the dump They’re both your locker
65. val saveButtonText: String by lazy {
resourceService.getStringResource(R.string.save)
}
@Inject lateinit var loginViewModel: LoginViewModel
@Inject lateinit var approvalViewModel: ApprovalViewModel
@Inject lateinit var transferViewModel: TransferViewModel
@Inject lateinit var resourceService: ResourceService
Null Safety in Reality
66. data class Reward(
@JsonProperty("type") val type: RewardType,
@JsonProperty("points") val points: Int,
@JsonProperty("name") val name: String,
@JsonProperty("eligible") val eligible: Boolean,
)
Null Safety in Reality
Non-nullable vals can be used when working with JSON
Retrofit uses Jackson Object Mapper (which has a Kotlin specific module)
67. Introducing Coroutines
suspend fun doWork() {
disableUI()
val exchangeRates = readExchangeRate()
val report = buildReport(exchangeRates)
saveReport(report)
enableUI()
}
fun doWork() {
disableUI()
val exchangeRates = readExchangeRate()
val report = buildReport(exchangeRates)
saveReport(report)
enableUI()
}
68. Introducing Coroutines
suspend fun doWork() {
disableUI()
val exchangeRates = readExchangeRate()
val report = buildReport(exchangeRates)
saveReport(report)
enableUI()
}
suspend
suspend
suspend
return
69. Introducing Coroutines
suspend fun doWorkWithThreadControl() {
disableUI()
withContext(Dispatchers.IO) {
val exchangeRates = readExchangeRate()
val report = buildReport(exchangeRates)
saveReport(report)
}
enableUI()
}
72. Historically we had used RxJava extensively
• To bypass standard features like AsyncTask
With Kotlin, we’ve used RxKotlin heavily too
We started using coroutines when they were experimental
• We’ve found lots of code can be simplified by coroutines
We still use Rx when what we’re modelling is intuitively a stream
Using Coroutines
73. private suspend fun processUpdateRequest(update: Update,
requestOptions: RequestOptions) {
val customer = customerService.customerDetails(update.customerId)
val transaction = transactionBuilder.build(requestOptions)
transaction.customer = customer
customerSaleService.updateTransactionWithCustomer(transaction)
val updateCopy = update.createCopy()
transactionDao.save(transaction)
eventBus.requestComplete(transaction, update)
}
Using Coroutines
74. Realm threading restrictions were painful
Required specific threads for work
Coroutines made the threading easier
Using Coroutines
private fun fetchAndPersistSettings() = async(networkDispatcher) {
val settings = fetchSettings()
realmWrite { realm ->
updateDao.overwrite(realm, settings)
}
}
75. We experimented with Kotlin Test but reverted to JUnit
• We were looking at Spek with Kotlin support but encountered issues
Some Java interop requires back ticking to avoid language clashes
What Were The Pain Points?
@Test
fun shouldConvertBytesHeldAsPositiveToPositiveIntegers() {
assertThat(1.toByte().toPositiveInt(), `is`(equalTo(1)))
assertThat(12.toByte().toPositiveInt(), `is`(equalTo(12)))
assertThat(123.toByte().toPositiveInt(), `is`(equalTo(123)))
assertThat(127.toByte().toPositiveInt(), `is`(equalTo(127)))
}
doReturn("$20.00").`when`(monetaryFormatter).format(Monetary.TWENTY)
doReturn("$5.00").`when`(monetaryFormatter).format(Monetary.FIVE)
76. Documentation in some areas are lacking
• When features are experimental or very new
• Requires trial and error
• Some best practices would be nice
• Only happy paths shown e.g. Kotlin Gradle DSL
• Internally, some teams use and others have avoided
We saw some collisions in some Java class names
• But Kotlin type aliases came to rescue here
What Were The Pain Points?
77. Not too much “caught” us out but some things we would do differently
Some of this and the pain points are simply timing
• Better libraries and library support came later
• Language features stabilised e.g. coroutines
More and more libraries are writing Kotlin wrappers or Kotlin first interfaces
• Android, Realm, Apache Beam, Spring etc
Modern development requires so many dependencies – constant evolution
What Would We Do Differently?
78. Dagger Koin
Retrofit Rx style migrated to coroutines
Realm Room
Glide Coil (coroutine support)
Junit Kotlin Test and AssertJ
Espresso Spoon, Awaitility
• These are just nicer with Kotlin
Frameworks We Used Or Would Use
79. We write quite a few multi-platform apps using Xamarin
• This is a good, stable, cross platform solution for writing native apps
We are keeping an eye on Kotlin Native
• Still in beta but with a lot of potential
Could allow us to write more Kotlin (yeah!) making Android easier
• But leveraging the same code for iOS
Kotlin Native
One to watch
80. Your existing skills remain relevant
The learning curve is gentle and straightforward
Interns and grads pick it up in no time
Developers with Java, C# & Swift experience adopt it very easily
The only pain is when go back to Java
In Summary
81. Words from the Wise
“As a services business we need to focus primarily on our
customers needs. Thankfully, it's not just our developers that
have grown to love the language. Our customers are in turn
getting more maintainable software to market with lower
lead times.”
Matt McComb, Director of Business Development, Instil