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.
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.
SC20 SYCL and C++ Birds of a Feather 19th Nov 2020rodburns
Michael Wong discussed the SYCL Working Group's activities and roadmap. Key points include:
- SYCL 2020 will feature improvements like generalized backends, unified shared memory, and host task interoperability.
- The SYCL ecosystem is growing, with active members, benchmarks, libraries, and implementations like DPC++ and ComputeCpp.
- SYCL can be used for exascale computing on platforms like AMD ROCM and aims to further converge with ISO C++ standards.
- The SYCL community is looking for feedback on the 2020 provisional specification and ideas for future extensions.
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019UA Mobile
If you want to share the code between Android and iOS but you don't feel like doing C++/JNI, React Native, Flutter, you must try Kotlin/Native! In this presentation we will see how Kotlin/Native is different and in some aspects superior, and how easy it becomes to develop, debug and maintain a common codebase with JetBrains tools and without sacrificing runtime performance.
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019Eugene Kurko
f you want to share the code between Android and iOS but you don't feel like doing C++/JNI, React Native, Flutter, you must try Kotlin/Native! In this presentation we will see how Kotlin/Native is different and in some aspects superior, and how easy it becomes to develop, debug and maintain a common codebase with JetBrains tools and without sacrificing runtime performance.
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.
Kotlin was created by JetBrains to improve developer productivity and enjoyment when building tools like IntelliJ IDEA. Some key features of Kotlin include properties, smart casts, extension functions, and null safety. Kotlin works well for server-side development using frameworks like Kara and Exposed, as well as Android development using Android Extensions and Anko. To succeed with Kotlin, developers should take initiative by starting with tests and utilities in existing Java projects rather than waiting for new projects.
This document summarizes a presentation about exploring SharePoint with the F# programming language. It discusses the history and characteristics of functional programming and F#, including that F# is a functional-first language developed by Microsoft Research. It also covers how to use the F# Client Object Model to connect to and query SharePoint, including loading references, creating a client context, and querying sites, lists, and list items. The presentation demonstrates iterating through lists and items and retrieving properties.
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider.
We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
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.
SC20 SYCL and C++ Birds of a Feather 19th Nov 2020rodburns
Michael Wong discussed the SYCL Working Group's activities and roadmap. Key points include:
- SYCL 2020 will feature improvements like generalized backends, unified shared memory, and host task interoperability.
- The SYCL ecosystem is growing, with active members, benchmarks, libraries, and implementations like DPC++ and ComputeCpp.
- SYCL can be used for exascale computing on platforms like AMD ROCM and aims to further converge with ISO C++ standards.
- The SYCL community is looking for feedback on the 2020 provisional specification and ideas for future extensions.
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019UA Mobile
If you want to share the code between Android and iOS but you don't feel like doing C++/JNI, React Native, Flutter, you must try Kotlin/Native! In this presentation we will see how Kotlin/Native is different and in some aspects superior, and how easy it becomes to develop, debug and maintain a common codebase with JetBrains tools and without sacrificing runtime performance.
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019Eugene Kurko
f you want to share the code between Android and iOS but you don't feel like doing C++/JNI, React Native, Flutter, you must try Kotlin/Native! In this presentation we will see how Kotlin/Native is different and in some aspects superior, and how easy it becomes to develop, debug and maintain a common codebase with JetBrains tools and without sacrificing runtime performance.
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.
Kotlin was created by JetBrains to improve developer productivity and enjoyment when building tools like IntelliJ IDEA. Some key features of Kotlin include properties, smart casts, extension functions, and null safety. Kotlin works well for server-side development using frameworks like Kara and Exposed, as well as Android development using Android Extensions and Anko. To succeed with Kotlin, developers should take initiative by starting with tests and utilities in existing Java projects rather than waiting for new projects.
This document summarizes a presentation about exploring SharePoint with the F# programming language. It discusses the history and characteristics of functional programming and F#, including that F# is a functional-first language developed by Microsoft Research. It also covers how to use the F# Client Object Model to connect to and query SharePoint, including loading references, creating a client context, and querying sites, lists, and list items. The presentation demonstrates iterating through lists and items and retrieving properties.
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider.
We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
This document summarizes Giovanni Bassi's presentation on new features in C# 7 and 8. It discusses features like pattern matching, tuples, discards, ref locals/returns, expression-bodied members, numeric literals, local functions, generalized async returns, inferred tuple names, default literals, async Main method, non-trailing named arguments, leading separators for numbers, private protected access, and readonly ref extension methods. The presentation provides code examples and links to documentation for each new feature.
This document summarizes a presentation about Kotlin features for Android development. It discusses Kotlin's concise syntax, null safety, lambdas, extension functions, and higher-order functions. It also covers Kotlin collections, coroutines, Anko for layouts and SQLite, and migrating existing Android projects to Kotlin. The presentation provides code examples for many of these features and recommends additional Kotlin learning resources.
Slides from a talk and live-coding session about Koin, a pragmatic and lightweight Dependency Injection framework for Kotlin. This talk was given at Auckland Android Community on Dec 5.
https://www.meetup.com/Android-Meetup/events/256734688/
Writing Kotlin Multiplatform libraries that your iOS teammates are gonna loveAndré Oriani
The document discusses writing Kotlin multiplatform libraries that are compatible with iOS. It begins with a disclaimer from the presenter. It then provides biographical information about the presenter and introduces the topic of writing Kotlin libraries that can be used from Swift on iOS. The presentation format will cover naming clashes between Kotlin and Swift, disappearing types when mapping Kotlin generics to Swift, and other interoperability challenges. It provides examples and solutions for overcoming these challenges to enable sharing code between Kotlin and Swift.
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.
TypeScript is a language for application-scale JavaScript development.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.
In this event we will walk you through best practices and the practical Implementation of the following topics:
Advantage of Kotlin over Java, Kotlin Coroutines .
What’s new in Android Studio, How to use Motion Layout Editor
NaviGation Architecture component, Vivewmodel, Livedata, Room database, Jetpack Compose,
Material Design Library...etc
App Distribution - Android App bundle over an APK
Rory Preddy gave a presentation on polyglot programming. He defined a polyglot programmer as someone who uses multiple programming languages in a single application. He discussed polyglot paradigm programming, which combines multiple programming paradigms like object-oriented, functional, and logic paradigms. He also discussed polyglot systems, which use different languages for different parts of a multi-tiered project based on which language is best suited. He provided examples of domain-specific languages, dynamic languages, and stable core languages used in polyglot systems. Finally, he discussed benefits and challenges of polyglot programming and how to get started with it.
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
This document discusses new features in C# 7 and 8, including pattern matching, tuples, out variables, discards, ref returns and locals, expression-bodied members, numeric literals, local functions, generalized async returns, default literals, non-trailing named arguments, leading separators for numeric literals, private protected access, reference semantics with value types using in, ref, and ref readonly. It also provides links to documentation and proposals for each feature.
Building DSLs On CLR and DLR (Microsoft.NET)Vitaly Baum
The document describes a domain specific language (DSL) for specifying tests of a MiniBar simulation using the Specter testing framework in C#. It provides an example context and specifications to test that drinking a beer does not throw an exception, that drinking 5 beers results in a $-5 balance, and that drinking more than 10 beers throws an exception indicating the user is drunk. The specifications are translated to NUnit test methods with asserts to test the MiniBar behavior.
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)Igalia
By Philip Chimento.
This talk is about all the improvements made in GNOME's JavaScript platform in the past year. If you are writing code for a GNOME app or shell extension that uses JavaScript and you want to know how to modernize your code or use new language features, this talk will be interesting for you. If you are curious
about the progress made on the garbage collection bug, and what needs to happen before it can be fixed, this talk will be interesting for you. And if you are interested in working on a JavaScript engine and want some ideas for projects
to get started with, from beginner through expert level, this talk will definitely be interesting for you!
(c) GUADEC 2020
July 22nd - 28th, 2020
https://2020.guadec.org
Translation Markup Language makes it easy to internationalize and localize your mobile applications written in Objective C or Swift. Once you install TMLKit SDK, your app will be immediately connected to over 50,000 professional translators around the world.
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018Codemotion
Kotlin è un linguaggio basato sulla JVM che si sta sviluppando molto rapidamente. Ma il suo scopo non è solo conquistare la JVM, ma ogni piattaforma. Durante il talk vedremo come sviluppare una applicazione web utilizzando React e Kotlin e analizzeremo quali sono i vantaggi di usare un linguaggio staticamente tipizzato nello sviluppo frontend.
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...Sang Don Kim
This document summarizes new features and improvements in Visual Studio 2015 and future directions for C++ development. Key highlights include improved C++ refactoring tools, better IDE productivity features like single-file IntelliSense, enhanced diagnostics tools, support for new C++11/14 language features, and a focus on making Visual Studio the best IDE for all C++ developers.
Next Gen Data Modeling in the Open Data Platform With Doron Porat and Liran Y...HostedbyConfluent
Next Gen Data Modeling in the Open Data Platform With Doron Porat and Liran Yogev | Current 2022
At Yotpo, we have a rich and busy data lake consisting of thousands of data sets ingested and digested by different engines, the main one being Spark.
We built our data infrastructure to enable our users to produce and consume data via self-service tooling, giving them the utmost freedom.
This freedom came with a cost.
We had trouble with bad standardization, little data reusability, lack of data lineage, and flaky data sets.
We also witnessed the landscape under which we built our platform change dramatically and so have our analytics needs and expectations.
We came to an understanding that the modeling layer should be decoupled from the execution layer in order to get rid of the limitations we were bounded by -
Batch and stream should be no more than attributes as part of a wider abstraction
A Kafka topic and a data lake table are no different and should be treated the same way
Observability of our data pipelines should have the same quality and depth across all execution engines, storage methods, and formats
Governance should be an implicit part of our ecosystem to serve as a basis for both exploration and automation/anomaly detection
That's when we started building YODA (soon to be open sourced) that gives us killer dev experience with the level of abstraction we always dreamed of.
Combining DBT, Databricks, lakeFS, and a multitude of streaming engines - we started seeing our vision come to life.
In this talk, we'll share from our journey redesigning the data lake, and how to best address organizational needs, without having to give up on high-end tooling and technology. We are taking this to the next level.
Compilers have been improving programmer productivity ever since IBM produced the first FORTRAN compiler in 1957. Today, we mostly take them for granted but even after more than 60 years, compiler researchers and practitioners continue to push the boundaries for what compilers can achieve as well as how easy it is to leverage the sophisticated code bases that encapsulate those six decades of learning in this field. In this talk, I want to highlight how industry trends like the migration to cloud infrastructures and data centers as well as the rise of flexibly licensed open source projects like LLVM and Eclipse OMR are paving the way towards even more effective and powerful compilation infrastructures than have ever existed: compilers with the opportunity to contribute to programmer productivity in even more ways than simply better hardware instruction sequences, and with simpler APIs so they can be readily used in scenarios where even today's most amazing Just In Time compilers are not really practical.
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.
This document summarizes Giovanni Bassi's presentation on new features in C# 7 and 8. It discusses features like pattern matching, tuples, discards, ref locals/returns, expression-bodied members, numeric literals, local functions, generalized async returns, inferred tuple names, default literals, async Main method, non-trailing named arguments, leading separators for numbers, private protected access, and readonly ref extension methods. The presentation provides code examples and links to documentation for each new feature.
This document summarizes a presentation about Kotlin features for Android development. It discusses Kotlin's concise syntax, null safety, lambdas, extension functions, and higher-order functions. It also covers Kotlin collections, coroutines, Anko for layouts and SQLite, and migrating existing Android projects to Kotlin. The presentation provides code examples for many of these features and recommends additional Kotlin learning resources.
Slides from a talk and live-coding session about Koin, a pragmatic and lightweight Dependency Injection framework for Kotlin. This talk was given at Auckland Android Community on Dec 5.
https://www.meetup.com/Android-Meetup/events/256734688/
Writing Kotlin Multiplatform libraries that your iOS teammates are gonna loveAndré Oriani
The document discusses writing Kotlin multiplatform libraries that are compatible with iOS. It begins with a disclaimer from the presenter. It then provides biographical information about the presenter and introduces the topic of writing Kotlin libraries that can be used from Swift on iOS. The presentation format will cover naming clashes between Kotlin and Swift, disappearing types when mapping Kotlin generics to Swift, and other interoperability challenges. It provides examples and solutions for overcoming these challenges to enable sharing code between Kotlin and Swift.
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.
TypeScript is a language for application-scale JavaScript development.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.
In this event we will walk you through best practices and the practical Implementation of the following topics:
Advantage of Kotlin over Java, Kotlin Coroutines .
What’s new in Android Studio, How to use Motion Layout Editor
NaviGation Architecture component, Vivewmodel, Livedata, Room database, Jetpack Compose,
Material Design Library...etc
App Distribution - Android App bundle over an APK
Rory Preddy gave a presentation on polyglot programming. He defined a polyglot programmer as someone who uses multiple programming languages in a single application. He discussed polyglot paradigm programming, which combines multiple programming paradigms like object-oriented, functional, and logic paradigms. He also discussed polyglot systems, which use different languages for different parts of a multi-tiered project based on which language is best suited. He provided examples of domain-specific languages, dynamic languages, and stable core languages used in polyglot systems. Finally, he discussed benefits and challenges of polyglot programming and how to get started with it.
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
This document discusses new features in C# 7 and 8, including pattern matching, tuples, out variables, discards, ref returns and locals, expression-bodied members, numeric literals, local functions, generalized async returns, default literals, non-trailing named arguments, leading separators for numeric literals, private protected access, reference semantics with value types using in, ref, and ref readonly. It also provides links to documentation and proposals for each feature.
Building DSLs On CLR and DLR (Microsoft.NET)Vitaly Baum
The document describes a domain specific language (DSL) for specifying tests of a MiniBar simulation using the Specter testing framework in C#. It provides an example context and specifications to test that drinking a beer does not throw an exception, that drinking 5 beers results in a $-5 balance, and that drinking more than 10 beers throws an exception indicating the user is drunk. The specifications are translated to NUnit test methods with asserts to test the MiniBar behavior.
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)Igalia
By Philip Chimento.
This talk is about all the improvements made in GNOME's JavaScript platform in the past year. If you are writing code for a GNOME app or shell extension that uses JavaScript and you want to know how to modernize your code or use new language features, this talk will be interesting for you. If you are curious
about the progress made on the garbage collection bug, and what needs to happen before it can be fixed, this talk will be interesting for you. And if you are interested in working on a JavaScript engine and want some ideas for projects
to get started with, from beginner through expert level, this talk will definitely be interesting for you!
(c) GUADEC 2020
July 22nd - 28th, 2020
https://2020.guadec.org
Translation Markup Language makes it easy to internationalize and localize your mobile applications written in Objective C or Swift. Once you install TMLKit SDK, your app will be immediately connected to over 50,000 professional translators around the world.
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018Codemotion
Kotlin è un linguaggio basato sulla JVM che si sta sviluppando molto rapidamente. Ma il suo scopo non è solo conquistare la JVM, ma ogni piattaforma. Durante il talk vedremo come sviluppare una applicazione web utilizzando React e Kotlin e analizzeremo quali sono i vantaggi di usare un linguaggio staticamente tipizzato nello sviluppo frontend.
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...Sang Don Kim
This document summarizes new features and improvements in Visual Studio 2015 and future directions for C++ development. Key highlights include improved C++ refactoring tools, better IDE productivity features like single-file IntelliSense, enhanced diagnostics tools, support for new C++11/14 language features, and a focus on making Visual Studio the best IDE for all C++ developers.
Next Gen Data Modeling in the Open Data Platform With Doron Porat and Liran Y...HostedbyConfluent
Next Gen Data Modeling in the Open Data Platform With Doron Porat and Liran Yogev | Current 2022
At Yotpo, we have a rich and busy data lake consisting of thousands of data sets ingested and digested by different engines, the main one being Spark.
We built our data infrastructure to enable our users to produce and consume data via self-service tooling, giving them the utmost freedom.
This freedom came with a cost.
We had trouble with bad standardization, little data reusability, lack of data lineage, and flaky data sets.
We also witnessed the landscape under which we built our platform change dramatically and so have our analytics needs and expectations.
We came to an understanding that the modeling layer should be decoupled from the execution layer in order to get rid of the limitations we were bounded by -
Batch and stream should be no more than attributes as part of a wider abstraction
A Kafka topic and a data lake table are no different and should be treated the same way
Observability of our data pipelines should have the same quality and depth across all execution engines, storage methods, and formats
Governance should be an implicit part of our ecosystem to serve as a basis for both exploration and automation/anomaly detection
That's when we started building YODA (soon to be open sourced) that gives us killer dev experience with the level of abstraction we always dreamed of.
Combining DBT, Databricks, lakeFS, and a multitude of streaming engines - we started seeing our vision come to life.
In this talk, we'll share from our journey redesigning the data lake, and how to best address organizational needs, without having to give up on high-end tooling and technology. We are taking this to the next level.
Compilers have been improving programmer productivity ever since IBM produced the first FORTRAN compiler in 1957. Today, we mostly take them for granted but even after more than 60 years, compiler researchers and practitioners continue to push the boundaries for what compilers can achieve as well as how easy it is to leverage the sophisticated code bases that encapsulate those six decades of learning in this field. In this talk, I want to highlight how industry trends like the migration to cloud infrastructures and data centers as well as the rise of flexibly licensed open source projects like LLVM and Eclipse OMR are paving the way towards even more effective and powerful compilation infrastructures than have ever existed: compilers with the opportunity to contribute to programmer productivity in even more ways than simply better hardware instruction sequences, and with simpler APIs so they can be readily used in scenarios where even today's most amazing Just In Time compilers are not really practical.
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.
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.
Transitioning Android Teams Into KotlinGarth Gilmour
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.
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.
'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.
FFS The Browser and Everything In It Is Wrong - We've Ruined Software Enginee...Garth Gilmour
Slides from my presentation to FFSTechConf (https://ffstechconf.org/). The full transcript is available at https://docs.google.com/document/d/e/2PACX-1vQUGG28baEuS7RgpPpexNbxRxJfjzc6r43yhZoLF_56n7aacke-uVEdNVQxvkPf1NxsEuJfkMK0MCvi/pub
When it is all about ERP solutions, companies typically meet their needs with common ERP solutions like SAP, Oracle, and Microsoft Dynamics. These big players have demonstrated that ERP systems can be either simple or highly comprehensive. This remains true today, but there are new factors to consider, including a promising new contender in the market that’s Odoo. This blog compares Odoo ERP with traditional ERP systems and explains why many companies now see Odoo ERP as the best choice.
What are ERP Systems?
An ERP, or Enterprise Resource Planning, system provides your company with valuable information to help you make better decisions and boost your ROI. You should choose an ERP system based on your company’s specific needs. For instance, if you run a manufacturing or retail business, you will need an ERP system that efficiently manages inventory. A consulting firm, on the other hand, would benefit from an ERP system that enhances daily operations. Similarly, eCommerce stores would select an ERP system tailored to their needs.
Because different businesses have different requirements, ERP system functionalities can vary. Among the various ERP systems available, Odoo ERP is considered one of the best in the ERp market with more than 12 million global users today.
Odoo is an open-source ERP system initially designed for small to medium-sized businesses but now suitable for a wide range of companies. Odoo offers a scalable and configurable point-of-sale management solution and allows you to create customised modules for specific industries. Odoo is gaining more popularity because it is built in a way that allows easy customisation, has a user-friendly interface, and is affordable. Here, you will cover the main differences and get to know why Odoo is gaining attention despite the many other ERP systems available in the market.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
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.
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
What is Master Data Management by PiLog Groupaymanquadri279
PiLog Group's Master Data Record Manager (MDRM) is a sophisticated enterprise solution designed to ensure data accuracy, consistency, and governance across various business functions. MDRM integrates advanced data management technologies to cleanse, classify, and standardize master data, thereby enhancing data quality and operational efficiency.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
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
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfVALiNTRY360
Salesforce Healthcare CRM, implemented by VALiNTRY360, revolutionizes patient management by enhancing patient engagement, streamlining administrative processes, and improving care coordination. Its advanced analytics, robust security, and seamless integration with telehealth services ensure that healthcare providers can deliver personalized, efficient, and secure patient care. By automating routine tasks and providing actionable insights, Salesforce Healthcare CRM enables healthcare providers to focus on delivering high-quality care, leading to better patient outcomes and higher satisfaction. VALiNTRY360's expertise ensures a tailored solution that meets the unique needs of any healthcare practice, from small clinics to large hospital systems.
For more info visit us https://valintry360.com/solutions/health-life-sciences
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
5. – TS brings types and compilation to JS
– Improves upon the existing strengths of JS
– Makes us more productive and happy
– Leverages existing JS frameworks
– Interop with JS is a design goal
we love typescript
it solves real problems for us
6. – Kotlin improves upon Java in many ways
– Adds null safety, DSLs, coroutines etc...
– Makes us more productive and happy
– Leverages existing JVM frameworks
– But interop with Java is a design goal
we love kotlin
it solves real problems for us
9. experiment: is kotlinjs worth it?
– We are not using KotlinJS in production
– The code written has been for labs, workshops and talks
– Built several apps both TypeScript and KotlinJS
– Go beyond “hello world”
– Incorporate common JS libraries
– Compare the experience
– Tooling
– Language features
– Community
what problem does it solve?
17. configuring the kotlin gradle dsl
kotlin{
js(LEGACY){
binaries.executable()
browser{
commonWebpackConfig{
cssSupport.enabled=true
}
}
}
}
There is a new IR compiler
20. what’s the code like
standard main function
funmain() {
valcontainer= document.createElement("div")
document.body!!.appendChild(container)
valapp=App.create()
render(app,container)
}
21. what’s the code like
easy access to browser apis
funmain() {
valcontainer= document.createElement("div")
document.body!!.appendChild(container)
valapp=App.create()
render(app,container)
}
22. what’s the code like
easy access to react library
valApp=FC<Props>("Application"){
BrowserRouter{
div{
p{ Link{ to="/hello”+"SimpleComponent”}}
}
div{
Routes{
Route{
// …
}
}
}
}
24. its popularity continues to grow
rising star on language rankings
…
18 Kotlin
…
https://redmonk.com/sogrady/2021/03/01
/language-rankings-1-21/
The RedMonk
Programming Language
Rankings: January 2021
25. its popularity continues to grow
rising star on language rankings
https://insights.stackoverflow.com/survey/2020
Stack Overflow Developer
Survey 2020
Most Used Language
13th Kotlin
1st JavaScript
8th TypeScript
26. its popularity continues to grow
loved by its users
https://insights.stackoverflow.com/survey/2020
Stack Overflow Developer
Survey 2020
Most Loved Language
2nd TypeScript
4th Kotlin
10th JavaScript
1st Rust
27. TS is the largest alternative to JS
https://2021.stateofjs.com/en-US/
28. – TypeScript is more popular than KotlinJS
– As a superset of JS, reusing knowledge and assets is easier
– And the transition for JS developers to TS is easier
– TypeScript is well established in the JavaScript world
– Many libraries include TypeScript definitions
– DefinitelyTyped contains many more
community, maturity and support
typescript > kotlin
30. – Only a few first class wrappers provided
– It is easy to add NPM packages yourself
– But how easy is it to consume that code in Kotlin?
importing npm js packages
gradle dsl
dependencies {
. . .
implementation(npm("react-three-fiber", "4.2.20"))
implementation(npm("react-use-gesture", "7.0.15"))
implementation(npm("three", "0.119.1"))
}
32. – Converts TypeScript d.ts files to Kotlin external declarations
– Still experimental
– At time of writing, on hold until IR compiler stabilises
dukat
automatic generation
https://kotlinlang.org/docs/js-external-declarations-with-dukat.html
33. – Command line tool
– Installable in isolation via npm
– Simply point to a .d.ts file and it will do the rest
dukat
usage
$ dukat index.d.ts index.module_my-library.kt
$ npm install dukat
34. dukat
export function getString(): string;
export function setString(input: string): void;
external fun getString(): String
external fun setString(input: String)
35. – Integrated into Gradle
– Generates definitions for configured packages
dukat
usage
Dukat tasks
-----------
generateExternals
generateExternalsIntegrated
36. dukat
export interface BasicInterface {
readonly field1: number;
method1(): boolean;
}
export function buildInterface(): BasicInterface;
export type ReadOnlyBasicInterface = Readonly<BasicInterface>;
external interface BasicInterface {
var field1: Number
fun method1(): Boolean
}
external fun buildInterface(): BasicInterface
typealias ReadOnlyBasicInterface = Readonly<BasicInterface>
37. – It’s a good help but has issues
– Limited by differences in the languages
– Not a seamless workflow
– This situation may improve as the tool and Kotlin evolves
not a silver bullet
square peg and a round hole
38. – KotlinJS supports a dynamic type
– You can use it in place of any type
– Assign it a value of any type
– Access and use members with any name
– Basically switches off type checking
– This can be used to quickly patch over APIs
dynamic
get out of jail type
external fun useFrame(callback: (dynamic, Double) -> Unit)
39. – Object literals are common in JavaScript
– KotlinJS has a helper function to create objects
– This is strongly typed (inferred) but requires fields to be var
jso
object literals in kotlinjs
Block(jso {
position = brick.location.toVector3()
color = brick.color
})
40. – We can embed JavaScript directly with the js function
– The code can even use Kotlin variables
– Must be a compile time constant
– Cannot be a runtime evaluated expression
js
embedding javascript
private fun getToken(): String? {
val tokenKey = TokenKey
return js("""
localStorage.getItem(tokenKey)
""")
}
41. – As a superset, TypeScript has to win this one
– The type system is geared to support JavaScript
– Lots of libraries already provide TypeScript definition files
– However, writing external declaration in KotlinJS is easy
– Dukat exists but has fundamental limitations
– You may have to write custom translation code on top
interop with javascript
typescript > kotlinjs
52. interface InputHTMLAttributes<T> extends HTMLAttributes<T> {
max?: number | string;
min?: number | string;
value?: string | ReadonlyArray<string> | number;
...
}
Type union
type PropsWithChildren<P> = P & { children?: ReactNode };
Type intersection
53. // Type exports erased!
external fun interfaceUnionInput(input: First)
external fun interfaceUnionInput(input: Second)
external fun interfaceUnionOutput(): dynamic /* First | Second */
export type InterfaceUnion = First | Second;
export function interfaceUnionInput(input: InterfaceUnion): void;
export function interfaceUnionOutput(): InterfaceUnion;
Kotlin supports
proper overloads
Not supported on
the return type
54. external fun interfaceIntersectionInput(input: First /* First & Second */)
external fun interfaceIntersectionOutput(): First /* First & Second */
export type InterfaceIntersection = First & Second;
export function interfaceIntersectionInput(input: InterfaceIntersection): void;
export function interfaceIntersectionOutput(): InterfaceIntersection;
Intersection
dropped
55. mapped and conditional types
even more power in typescript
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
type PromiseType<T extends Promise<any>> =
T extends Promise<infer U> ? U : never;
Type conditional
60. – Kotlin’s DSL support is a powerful general purpose tool
– But JSX is a single purpose solution that suits React better
– TypeScript’s advanced type system is very powerful
– Union, intersection and mapped types bring sanity to JS
– Kotlin types (unsurprisingly) sit awkwardly on top of JS
jsx vs dsl
typescript > kotlin
62. asynchronous programming
– Async await is a good async solution in JS & TS
– Engineered so it interops with Promises
– Succinct
promises and async/await
async function loadMap(url: string): Promise<void> {
const response = await fetch(url);
const map = await response.text();
// ...
}
63. coroutines
– Kotlin’s more general coroutines are better
– Works with other patterns than simply async
– In KotlinJS, it works easily with Promises
kotlin > typescript
suspend fun loadMap(url: String) {
val response = window.fetch(url).await()
val map = response.text().await()
// ...
}
64. coroutines
– Coroutines are more general and powerful
– They can be used with other patterns too
– With suspend functions we don’t need to “await”
kotlin > typescript
suspend fun loadMap(url: String) {
val map = client.get<String>(url)
// ...
}
Ktor Client
65. coroutines
– Coroutines can be applied to other patterns too
kotlin > typescript
fun infinite() = sequence {
var count = 0
while (true) {
yield(count++)
}
}
67. – Kotlin doesn’t have the ternary, but has more
– when for basic pattern matching
– if and when are expressions
– Unit instead of void
– Expression bodied functions
– This creates more symmetry in code
expressions
kotlin > typescript
69. kotlin
when expression
val App = FC {
// ...
div {
// ...
when (gameState) {
GameState.Start -> StartScreen()
GameState.Playing -> PlayingScreen()
GameState.Win -> WinScreen()
GameState.Dead -> EndScreen()
}
}
}
70. – Both languages support object destructuring
– Within blocks and in lambda parameters
– However, Kotlin’s is limited
– Supported via componentN methods
– Fixed order to properties extracted
– Data classes do this automatically
destructuring
typescript > kotlin
74. Community
Coroutines
JSX vs React DSL
Multiplatform
Advanced Type System
Extensions
Interop with JS
Expressions
Destructuring
Standard Library
Tooling
Functions
Lots to love in JavaScript – ubiquitous, popularity/community, succinct syntax, object literals, destructuring
But it’s dynamic typing. I’m a fan of static typing
Lots to love in JavaScript – ubiquitous, popularity/community, succinct syntax, object literals, destructuring
But it’s dynamic typing. I’m a fan of static typing
Emphasize how good it is you can start writing code
Emphasize how good it is you can start writing code
Emphasize how good it is you can start writing code
Ask the question – top spot?
Ask the question – top spot?
TypeScript is more capable when it comes to type programming
Not easy to integrate customisations (which are common)
If kotlin evolves to support more TS features, less customisation will be necessary
More libraries may come out
We can trim it down but grouping closing braces
We could also group params but
So first off, THIS IS PRETTY COOL that we can do this
We can trim it down but grouping closing braces
We could also group params but
So first off, THIS IS PRETTY COOL that we can do this
Cumberbatch for cumbersome
Cumberbatch for cumbersome
Union done as overloads – good!
Output simply dynamic - bad
It’s not to say you can achieve the desired behaviour