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.
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.
Droidcon Berlin 2021 - With coroutines being the de facto way of exposing async work and streams of changes for Kotlin on Android, developers are obviously attempting to use the same approaches when moving their code to Multiplatform.
But due to the way the memory model differs between JVM and Kotlin Native, it can be a painful experience.
In this talk, we will take a deep dive into the Coroutine API for Kotlin Multiplatform. You will learn how to expose your API with Coroutines while working with the Kotlin Native memory model instead of against it, and avoid the dragons along the way.
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.
Moving from Jenkins 1 to 2 declarative pipeline adventuresFrits Van Der Holst
T-Dose 2017 presentation, Sunday 19 November 2017. Adventures building a declarative pipeline script for a traditional (non-java/non-cloud) installable windows/Linux application. Video will hopefully be available later.
The document describes a presentation about data processing with CDK (Cloud Development Kit). It includes an agenda that covers CDK and Projen, serverless ETL with Glue, Databrew with continuous integration/continuous delivery (CICD), and using Amazon Comprehend with S3 object lambdas. Constructs are demonstrated for building architectures with CDK across multiple programming languages. Examples are provided of using CDK to implement Glue workflows, Databrew CICD pipelines, and combining Comprehend with S3 object lambdas for PII detection and redaction.
Develop your next app with kotlin @ AndroidMakersFr 2017Arnaud Giuliani
Kotlin is a fully interoperable programming language for building Android and multiplatform applications. It is statically typed, concise, and designed to interoperate seamlessly with Java. Kotlin aims to combine the best of both object-oriented and functional programming, and provides features to write safer and more concise code compared to Java, such as null safety, type inference, and extension functions. The document provides an overview of Kotlin's features and how it compares to other languages like Java and Swift, and demonstrates how to set up a Kotlin project using Gradle build system.
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/
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
Presentation for the 1st InterSystems Meetup in the Minsk:
- New and better InterSystems changes their practice.
- open-source repositories, meetups, and hackathon;
- CPM (package manager) as a good example of open-source project
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.
Droidcon Berlin 2021 - With coroutines being the de facto way of exposing async work and streams of changes for Kotlin on Android, developers are obviously attempting to use the same approaches when moving their code to Multiplatform.
But due to the way the memory model differs between JVM and Kotlin Native, it can be a painful experience.
In this talk, we will take a deep dive into the Coroutine API for Kotlin Multiplatform. You will learn how to expose your API with Coroutines while working with the Kotlin Native memory model instead of against it, and avoid the dragons along the way.
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.
Moving from Jenkins 1 to 2 declarative pipeline adventuresFrits Van Der Holst
T-Dose 2017 presentation, Sunday 19 November 2017. Adventures building a declarative pipeline script for a traditional (non-java/non-cloud) installable windows/Linux application. Video will hopefully be available later.
The document describes a presentation about data processing with CDK (Cloud Development Kit). It includes an agenda that covers CDK and Projen, serverless ETL with Glue, Databrew with continuous integration/continuous delivery (CICD), and using Amazon Comprehend with S3 object lambdas. Constructs are demonstrated for building architectures with CDK across multiple programming languages. Examples are provided of using CDK to implement Glue workflows, Databrew CICD pipelines, and combining Comprehend with S3 object lambdas for PII detection and redaction.
Develop your next app with kotlin @ AndroidMakersFr 2017Arnaud Giuliani
Kotlin is a fully interoperable programming language for building Android and multiplatform applications. It is statically typed, concise, and designed to interoperate seamlessly with Java. Kotlin aims to combine the best of both object-oriented and functional programming, and provides features to write safer and more concise code compared to Java, such as null safety, type inference, and extension functions. The document provides an overview of Kotlin's features and how it compares to other languages like Java and Swift, and demonstrates how to set up a Kotlin project using Gradle build system.
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/
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
Presentation for the 1st InterSystems Meetup in the Minsk:
- New and better InterSystems changes their practice.
- open-source repositories, meetups, and hackathon;
- CPM (package manager) as a good example of open-source project
After reimplement many features several times in different platforms is time to think that it should be a better way. There are many frameworks that allows the developers to write the code once and deploy it "everywhere", but the final result is an app with a non native look and feel or with an emulated look and feel that the users can see and rate according to the quality.
There are other ways to develop apps for multiple platforms without rewriting the same code over and over. I'll talk about one of that ways which consists on developing the core with C++ and implement the UI natively. This method could sound very scary because of the C++ reputation (memory leaks, the standard library, etc), but with C++11 all this has been improved in a very sweet way, so maybe it is time to take an other look at this language and see how can we take advantage of it.
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.
The document discusses Kotlin's capabilities across various platforms including the JVM, JavaScript, and native platforms like iOS. It highlights Kotlin's ability to transpile to JavaScript to enable single page apps and IoT applications. It also demonstrates using Kotlin/JS to print to the browser console and integrating with JavaScript libraries and the DOM. Finally, it briefly mentions Kotlin Native for embedded systems and iOS and provides some example projects to try out Kotlin on different platforms.
GraalVM allows building native applications from Java and other JVM languages. It includes a new just-in-time compiler called Graal and the Truffle framework for building language interpreters. GraalVM also includes Sulong, which allows running LLVM-based languages on the JVM. The presenter discussed using GraalVM to build a native executable for a Zookeeper CLI tool called zkstat from Java code using techniques like ahead-of-time compilation with SubstrateVM, configuring reflection, and building a Docker image for distribution.
This document provides an agenda and overview for an introduction to OpenCL course. The agenda includes lectures on understanding host programs, kernel programs, memory models, and optimization. Course materials include OpenCL reference cards, specifications, and exercises. An introduction to OpenCL explains that it is an open standard for parallel programming across heterogeneous systems like CPUs and GPUs. The OpenCL platform model includes devices like GPUs that are divided into compute units and processing elements. Kernels define work-items that execute problems in parallel over a domain.
Rapid Web API development with Kotlin and KtorTrayan Iliev
Introduction to Kotlin and Ktor with flow, async and channel examples. Ktor is an async web framework with minimal ceremony that leverages the advantages of Kotlin like coroutines and extensible functional DSLs..
This document discusses Jenkins Pipelines, which allow defining continuous integration and delivery (CI/CD) pipelines as code. Key points:
- Pipelines are defined using a Groovy domain-specific language (DSL) for stages, steps, and environment configuration.
- This provides configuration as code that is version controlled and reusable across projects.
- Jenkins plugins support running builds and tests in parallel across Docker containers.
- Notifications can be sent to services like Slack on failure.
- The Blue Ocean UI in Jenkins focuses on visualization of pipeline runs.
«Продакшн в Kotlin DSL» Сергей РыбалкинMail.ru Group
- Как пришли к использованию и разработки своих DSL
- Посмотрим примеры используемых в экосистеме DSL - gradle, spek, spring
- Рассмотрим базис для конструирования DSL на примере kohttp
This document provides an overview and introduction to OpenCL, including:
- OpenCL allows for portable, parallel programming across heterogeneous systems like CPUs and GPUs.
- The OpenCL platform model uses kernels executed across a domain of work-items to parallelize work, with work organized into work-groups for synchronization.
- Memory is explicitly managed, with private, local, and global memory spaces accessible to kernels via the memory model.
- The host program sets up the OpenCL context and devices, builds kernels, manages memory objects, and submits commands via command queues to execute kernels and synchronize work.
Infrastructure as code - Python Saati #36Halil Kaya
The document discusses the benefits of using infrastructure as code (IAC) to provision and manage infrastructure. It provides examples of using tools like Ansible, Terraform, and CloudFormation to automate the configuration of servers and cloud resources rather than manually configuring them. Some benefits mentioned are reusability, automation, version control, reviewability, documentation, and ease of migrating to another cloud system. Potential issues discussed include state files, manual configuration when using tools, maturity of some tools, and social challenges when changing processes.
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...Tudor Dragan
Kotlin is a powerful language, but it also comes with its traps and pitfalls. This presentation is about uncovering the very nice features and strange particularities that the language has to offer.
An Ensemble Core with Docker - Solving a Real Pain in the PaaS Erik Osterman
Docker by itself is only an engine powering containers. You need a containership to run it in production. CoreOS is a purpose-built containership that powers Docker conatiners, however, without higher-level orchestration managing hundreds or thousands of containers is not manageable. Ensemble is the answer for running containers at scale on top of CoreOS.
This document provides an overview of Angular 2 for Java developers. It discusses that Angular 2 is a complete rewrite of AngularJS with a focus on components, better performance, and streamlined dependency injection. It also covers key aspects of Angular 2 like project structure, templates, data binding, dependency injection, routing, and use of reactive programming with RxJS. Sample code examples are provided to demonstrate concepts like components, services, dependency injection, routing, and use of observables.
Après avoir fait ce talk à la conférence NSSpain, Simone Civetta va nous expliquer sur quelles métriques il est possible de se baser pour évaluer la qualité d’un code source. Cette question étant toujours sujette à débat, préparez vos arguments !
Continuous Integration With Jenkins Docker SQL ServerChris Adkin
This document discusses using containers and Jenkins for continuous integration and deployment pipelines. It provides an overview of build pipelines, how they can be implemented as code in Jenkins using scripts or declarative syntax. Demonstrations are shown for simple webhooks, multi-branch pipelines, using build slaves in containers, image layering, and fully containerizing a build environment. Tips are provided on constructing Dockerfiles and using timeouts.
This document provides an introduction to NodeJS for beginners. It discusses what NodeJS is, how it uses non-blocking I/O and event-driven architecture, and how to set up NodeJS. It also covers global objects, modules, asynchronous vs synchronous code, core NodeJS modules like filesystem and events, and how to create a basic "Hello World" NodeJS application.
Integration testing is hard, and often teams are tempted to do it in production. Testcontainers allows writing meaningful integration tests spawning Docker containers for databases, queue systems, kv-store, other services. The talk, a blend of slides and live code, will show how we are able to deploy without fear while integrating with a dozen of different datastores. Don't mock your database with fake data anymore, work with real data
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 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.
After reimplement many features several times in different platforms is time to think that it should be a better way. There are many frameworks that allows the developers to write the code once and deploy it "everywhere", but the final result is an app with a non native look and feel or with an emulated look and feel that the users can see and rate according to the quality.
There are other ways to develop apps for multiple platforms without rewriting the same code over and over. I'll talk about one of that ways which consists on developing the core with C++ and implement the UI natively. This method could sound very scary because of the C++ reputation (memory leaks, the standard library, etc), but with C++11 all this has been improved in a very sweet way, so maybe it is time to take an other look at this language and see how can we take advantage of it.
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.
The document discusses Kotlin's capabilities across various platforms including the JVM, JavaScript, and native platforms like iOS. It highlights Kotlin's ability to transpile to JavaScript to enable single page apps and IoT applications. It also demonstrates using Kotlin/JS to print to the browser console and integrating with JavaScript libraries and the DOM. Finally, it briefly mentions Kotlin Native for embedded systems and iOS and provides some example projects to try out Kotlin on different platforms.
GraalVM allows building native applications from Java and other JVM languages. It includes a new just-in-time compiler called Graal and the Truffle framework for building language interpreters. GraalVM also includes Sulong, which allows running LLVM-based languages on the JVM. The presenter discussed using GraalVM to build a native executable for a Zookeeper CLI tool called zkstat from Java code using techniques like ahead-of-time compilation with SubstrateVM, configuring reflection, and building a Docker image for distribution.
This document provides an agenda and overview for an introduction to OpenCL course. The agenda includes lectures on understanding host programs, kernel programs, memory models, and optimization. Course materials include OpenCL reference cards, specifications, and exercises. An introduction to OpenCL explains that it is an open standard for parallel programming across heterogeneous systems like CPUs and GPUs. The OpenCL platform model includes devices like GPUs that are divided into compute units and processing elements. Kernels define work-items that execute problems in parallel over a domain.
Rapid Web API development with Kotlin and KtorTrayan Iliev
Introduction to Kotlin and Ktor with flow, async and channel examples. Ktor is an async web framework with minimal ceremony that leverages the advantages of Kotlin like coroutines and extensible functional DSLs..
This document discusses Jenkins Pipelines, which allow defining continuous integration and delivery (CI/CD) pipelines as code. Key points:
- Pipelines are defined using a Groovy domain-specific language (DSL) for stages, steps, and environment configuration.
- This provides configuration as code that is version controlled and reusable across projects.
- Jenkins plugins support running builds and tests in parallel across Docker containers.
- Notifications can be sent to services like Slack on failure.
- The Blue Ocean UI in Jenkins focuses on visualization of pipeline runs.
«Продакшн в Kotlin DSL» Сергей РыбалкинMail.ru Group
- Как пришли к использованию и разработки своих DSL
- Посмотрим примеры используемых в экосистеме DSL - gradle, spek, spring
- Рассмотрим базис для конструирования DSL на примере kohttp
This document provides an overview and introduction to OpenCL, including:
- OpenCL allows for portable, parallel programming across heterogeneous systems like CPUs and GPUs.
- The OpenCL platform model uses kernels executed across a domain of work-items to parallelize work, with work organized into work-groups for synchronization.
- Memory is explicitly managed, with private, local, and global memory spaces accessible to kernels via the memory model.
- The host program sets up the OpenCL context and devices, builds kernels, manages memory objects, and submits commands via command queues to execute kernels and synchronize work.
Infrastructure as code - Python Saati #36Halil Kaya
The document discusses the benefits of using infrastructure as code (IAC) to provision and manage infrastructure. It provides examples of using tools like Ansible, Terraform, and CloudFormation to automate the configuration of servers and cloud resources rather than manually configuring them. Some benefits mentioned are reusability, automation, version control, reviewability, documentation, and ease of migrating to another cloud system. Potential issues discussed include state files, manual configuration when using tools, maturity of some tools, and social challenges when changing processes.
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...Tudor Dragan
Kotlin is a powerful language, but it also comes with its traps and pitfalls. This presentation is about uncovering the very nice features and strange particularities that the language has to offer.
An Ensemble Core with Docker - Solving a Real Pain in the PaaS Erik Osterman
Docker by itself is only an engine powering containers. You need a containership to run it in production. CoreOS is a purpose-built containership that powers Docker conatiners, however, without higher-level orchestration managing hundreds or thousands of containers is not manageable. Ensemble is the answer for running containers at scale on top of CoreOS.
This document provides an overview of Angular 2 for Java developers. It discusses that Angular 2 is a complete rewrite of AngularJS with a focus on components, better performance, and streamlined dependency injection. It also covers key aspects of Angular 2 like project structure, templates, data binding, dependency injection, routing, and use of reactive programming with RxJS. Sample code examples are provided to demonstrate concepts like components, services, dependency injection, routing, and use of observables.
Après avoir fait ce talk à la conférence NSSpain, Simone Civetta va nous expliquer sur quelles métriques il est possible de se baser pour évaluer la qualité d’un code source. Cette question étant toujours sujette à débat, préparez vos arguments !
Continuous Integration With Jenkins Docker SQL ServerChris Adkin
This document discusses using containers and Jenkins for continuous integration and deployment pipelines. It provides an overview of build pipelines, how they can be implemented as code in Jenkins using scripts or declarative syntax. Demonstrations are shown for simple webhooks, multi-branch pipelines, using build slaves in containers, image layering, and fully containerizing a build environment. Tips are provided on constructing Dockerfiles and using timeouts.
This document provides an introduction to NodeJS for beginners. It discusses what NodeJS is, how it uses non-blocking I/O and event-driven architecture, and how to set up NodeJS. It also covers global objects, modules, asynchronous vs synchronous code, core NodeJS modules like filesystem and events, and how to create a basic "Hello World" NodeJS application.
Integration testing is hard, and often teams are tempted to do it in production. Testcontainers allows writing meaningful integration tests spawning Docker containers for databases, queue systems, kv-store, other services. The talk, a blend of slides and live code, will show how we are able to deploy without fear while integrating with a dozen of different datastores. Don't mock your database with fake data anymore, work with real data
Similar to A TypeScript Fans KotlinJS Adventures (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 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
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Atelier - Innover avec l’IA Générative et les graphes de connaissancesNeo4j
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Allez au-delà du battage médiatique autour de l’IA et découvrez des techniques pratiques pour utiliser l’IA de manière responsable à travers les données de votre organisation. Explorez comment utiliser les graphes de connaissances pour augmenter la précision, la transparence et la capacité d’explication dans les systèmes d’IA générative. Vous partirez avec une expérience pratique combinant les relations entre les données et les LLM pour apporter du contexte spécifique à votre domaine et améliorer votre raisonnement.
Amenez votre ordinateur portable et nous vous guiderons sur la mise en place de votre propre pile d’IA générative, en vous fournissant des exemples pratiques et codés pour démarrer en quelques minutes.
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
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
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
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
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
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.
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.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
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.
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.
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.
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...XfilesPro
Wondering how X-Sign gained popularity in a quick time span? This eSign functionality of XfilesPro DocuPrime has many advancements to offer for Salesforce users. Explore them now!
3. – 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
4. – 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
8. experiment: is kotlinjs worth it?
– Build an app in both TypeScript and KotlinJS
– Go beyond “hello world”
– Incorporate common JS libraries
– Compare the experience
– Tooling
– Language features
– Community
what problem does it solve?
20. get down to coding
main
import kotlinx.browser.document
import kotlinx.browser.window
import react.dom.render
import react.router.dom.browserRouter
fun main() {
window.onload = {
render(document.getElementById("root")) {
browserRouter {
// ...
}
}
}
}
21. get down to coding
easy access to standard browser apis
import kotlinx.browser.document
import kotlinx.browser.window
import react.dom.render
import react.router.dom.browserRouter
fun main() {
window.onload = {
render(document.getElementById("root")) {
browserRouter {
// ...
}
}
}
}
Moved from kotlin.browser to
kotlinx.browser in 1.4
22. get down to coding
easy access to react library
import kotlinx.browser.document
import kotlinx.browser.window
import react.dom.render
import react.router.dom.browserRouter
fun main() {
window.onload = {
render(document.getElementById("root")) {
browserRouter {
// ...
}
}
}
}
26. 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
27. 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
28. 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
29. TS is good at retaining adopters
TypeScript in 2020
72.2% would use again
15.5% interested
https://2020.stateofjs.com/en-US/
30. – 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
32. – 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"))
}
34. – 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
35. – 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
36. dukat
export function getString(): string;
export function setString(input: string): void;
external fun getString(): String
external fun setString(input: String)
37. – Integrated into Gradle
– Generates definitions for configured packages
dukat
usage
Dukat tasks
-----------
generateExternals
generateExternalsIntegrated
38. 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>
39. – 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
40. – 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)
41. – 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
jsObject
object literals in kotlinjs
Block(jsObject {
position = brick.location.toVector3()
color = brick.color
})
42. – 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)
""")
}
43. – 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
48. REACT
DSL
IN
KOTLIN
inline fun RBuilder.div(
classes: String? = null,
block: RDOMBuilder<DIV>.() -> Unit
): ReactElement
Extension function
Last param is a
lambda with receiver
// Here, “this” is the containing object
div {
// Here, “this” is a RDOMBuilder<DIV>
}
Optional param via default
51. val Hud = FC {
// ...
div {
h2 { +"Lives: $lives" }
h2 { +"Score: $score" }
div {
label { +"Speed:" }
input(type = InputType.range) {
attrs {
min = "1“
max = "50"
value = (speedScalar * 10).toString()
onChangeFunction = {/* ... */}
}}}
// ...
}
fun RBuilder.Hud() = child(Hud)
REACT
DSL
IN
KOTLIN
52. val Hud = FC {
// ...
div {
h2 { +"Lives: $lives" }
h2 { +"Score: $score" }
div {
label { +"Speed:" }
input(type = InputType.range) {
attrs {
min = "1"
max = "50"
value = (speedScalar * 10).toString()
onChangeFunction = {/* ... */}
}}}
// ...
}
fun RBuilder.Hud() = child(Hud)
REACT
DSL
IN
KOTLIN
Single ‘bucket’
for attributes
53. val Hud = FC {
// ...
div {
h2 { +"Lives: $lives" }
h2 { +"Score: $score" }
div {
label { +"Speed:" }
input(type = InputType.range) {
attrs {
min = "1"
max = "50"
value = (speedScalar * 10).toString()
onChangeFunction = {/* ... */}
}}}
// ...
}
fun RBuilder.Hud() = child(Hud)
REACT
DSL
IN
KOTLIN
Overloaded operators to attach data
54. val Hud = FC {
// ...
div {
h2 { +"Lives: $lives" }
h2 { +"Score: $score" }
div {
label { +"Speed:" }
input(type = InputType.range) {
attrs {
min = "1"
max = "50"
value = (speedScalar * 10).toString()
onChangeFunction = {/* ... */}
}}}
// ...
}
fun RBuilder.Hud() = child(Hud)
REACT
DSL
IN
KOTLIN
Additional extension
function required
55. val Hud = FC {
// ...
div {
h2 { +"Lives: $lives" }
h2 { +"Score: $score" }
div {
label { +"Speed:" }
input(type = InputType.range) {
attrs {
min = "1"
max = "50"
value = (speedScalar * 10).toString()
onChangeFunction = {/* ... */}
}}}
// ...
}
fun RBuilder.Hud() = child(Hud)
REACT
DSL
IN
KOTLIN
Attributes must be
given as strings*
56. 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
57. // 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
58. 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
59. 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
62. useEffect
union return workaround
fun useEffect(
dependencies: RDependenciesList? = null,
effect: () -> Unit
) {
// ...
}
fun useEffectWithCleanup(
dependencies: RDependenciesList? = null,
effect: () -> Rcleanup
) {
// ...
}
63. – 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
65. 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();
// ...
}
66. 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()
// ...
}
67. 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
68. coroutines
– Coroutines can be applied to other patterns too
kotlin > typescript
fun infinite() = sequence {
var count = 0
while (true) {
yield(count++)
}
}
70. – 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
72. kotlin
when expression
val App = FC {
// ...
div {
// ...
when (gameState) {
GameState.Start -> StartScreen()
GameState.Playing -> PlayingScreen()
GameState.Win -> WinScreen()
GameState.Dead -> EndScreen()
}
}
}
73. – 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
77. Community
Coroutines
JSX vs React DSL
Multiplatform
Advanced Type System
Extensions
Interop with JS
Expressions
Destructuring
Standard Library
Tooling
Functions
79. – Union Types with ‘|’ syntax
– Improvements to Sealed Types
– Extended Operator Overloading
– Name based Destructuring
– Collection Literals
– Structure Literals (Tuples?)
game changer 1
potential new language features
80. – Brings Google’s UI Toolkit to web
– In theory, enables reuse of UI code across stack
game changer 2
compose for web
https://compose-web.ui.pages.jetbrains.team/
Div(attrs = attrs) {
Label {
Input(
type = InputType.Checkbox,
attrs = {}
)
Span {
content()
}}}
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
Maybe give demo at this point
Maybe give demo at this point
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
Of course we can use this to create DSLs for anything
Lots out there
Of course we can use this to create DSLs for anything
Lots out there
Cumberbatch for cumbersome
Cumberbatch for cumbersome
Cumberbatch for cumbersome
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