TypeScript is a superset of JavaScript that primarily adds support for static types, classes, and interfaces to the language without imposing constraints on JavaScript code. It is primarily used to enable catching errors earlier and providing better tooling support. Some key benefits of TypeScript include managing modules and namespaces, scoping variables, and adding type safety to JavaScript code. TypeScript code is compiled to plain JavaScript, so any valid JavaScript code is also valid TypeScript code.
This talk aims to be a gentle introduction to Refinement types in Scala. The talk will also introduce many related topics in the subculture of Typelevel programming in FP like Type theory, Generics (Shapeless), Optics (Monocle) and Law-based testing.
Why refinement types?
When 'String' just doesn't cut it anymore. By encoding validation into a type at the edge-of-the-system layer of your application, you can build your core domain logic without having to worry much about type-safety.
Who is it for?
Ajay would be revisiting the necessary foundations at the beginning of the talk, so beginners are welcome. People who have worked on Scala before would be able to appreciate the power of refined types more.
Halogen is a popular choice for building front-end user-interfaces with PureScript. Often described as a purely functional version of React, Halogen allows building user-interfaces by composing declarative, self-contained components, including effectful components those built from third-party Javascript libraries.
In this presentation, John presents a high-level summary of where Halogen has come from, how it works right now, and what are the main drawbacks to both FRP and React. John then suggests that incremental computation should be the foundation for the next major version of Halogen, and sketches out a possible way of achieving that in a declarative fashion.
The Design of the Scalaz 8 Effect SystemJohn De Goes
Purely functional Scala code needs something like Haskell's IO monad—a construct that allows functional programs to interact with external, effectful systems in a referentially transparent way. To date, most effect systems for Scala have fallen into one of two categories: pure, but slow or inexpressive; or fast and expressive, but impure and unprincipled. In this talk, John A. De Goes, the architect of Scalaz 8’s new effect system, introduces a novel solution that’s up to 100x faster than Future and Cats Effect, in a principled, modular design that ships with all the powerful primitives necessary for building complex, real-world, high-performance, concurrent functional programs.
Thanks to built-in concurrency, high performance, lawful semantics, and rich expressivity, Scalaz 8's effect system may just be the effect system to attract the mainstream Scala developers who aren't familiar with functional programming.
Functional programming is getting a lot of attention because it eases many of the difficulties faced in object-oriented programming (OOP) such as testability, maintainability, scalability, and concurrency. Swift has a lot of functional programming features that can be easily used, but most of Objective-C and Swift programmers are not familiar with these concepts.
This talk aims to introduce some of the core concepts of functional programming with Swift such as:
• Importance of Immutability
• First-class, Higher-order and Pure functions
• Closures
• Generics and Associated Type Protocols
• Functors, Applicative Functors and Monads
• Enumerations and Pattern Matching
• Optionals
Presented at Web Unleashed on September 16-17, 2015 in Toronto, Canada
More info at www.fitc.ca/webu
Why TypeScript?
with Jeff Francis
OVERVIEW
TypeScript is a type-checked superset of JavaScript that benefits medium-sized to complex JavaScript projects. Why would you want to learn a new language, instead of another JavaScript framework? You have all this existing JavaScript code, so how can you adopt something new without throwing the old stuff out?
This session is about the benefits of using TypeScript on top of JavaScript in your projects, and demonstrate step by step ways of migrating an existing JavaScript project to TypeScript. We will dive into code generated by the compiler and look at resources and tools that make working in TypeScript a pleasurable experience.
OBJECTIVE
To understand when it’s a good idea to use TypeScript.
TARGET AUDIENCE
JavaScript developers.
ASSUMED AUDIENCE KNOWLEDGE
Intermediate JavaScript experience.
FIVE THINGS AUDIENCE MEMBERS WILL LEARN
The basics of TypeScript – types, classes, modules, and functions
How TypeScript’s design makes getting started simple and helps projects
What compiled TypeScript looks like and how to debug
What tools can help take advantage of TypeScript’s type information
How to migrate a JavaScript project to TypeScript
This talk aims to be a gentle introduction to Refinement types in Scala. The talk will also introduce many related topics in the subculture of Typelevel programming in FP like Type theory, Generics (Shapeless), Optics (Monocle) and Law-based testing.
Why refinement types?
When 'String' just doesn't cut it anymore. By encoding validation into a type at the edge-of-the-system layer of your application, you can build your core domain logic without having to worry much about type-safety.
Who is it for?
Ajay would be revisiting the necessary foundations at the beginning of the talk, so beginners are welcome. People who have worked on Scala before would be able to appreciate the power of refined types more.
Halogen is a popular choice for building front-end user-interfaces with PureScript. Often described as a purely functional version of React, Halogen allows building user-interfaces by composing declarative, self-contained components, including effectful components those built from third-party Javascript libraries.
In this presentation, John presents a high-level summary of where Halogen has come from, how it works right now, and what are the main drawbacks to both FRP and React. John then suggests that incremental computation should be the foundation for the next major version of Halogen, and sketches out a possible way of achieving that in a declarative fashion.
The Design of the Scalaz 8 Effect SystemJohn De Goes
Purely functional Scala code needs something like Haskell's IO monad—a construct that allows functional programs to interact with external, effectful systems in a referentially transparent way. To date, most effect systems for Scala have fallen into one of two categories: pure, but slow or inexpressive; or fast and expressive, but impure and unprincipled. In this talk, John A. De Goes, the architect of Scalaz 8’s new effect system, introduces a novel solution that’s up to 100x faster than Future and Cats Effect, in a principled, modular design that ships with all the powerful primitives necessary for building complex, real-world, high-performance, concurrent functional programs.
Thanks to built-in concurrency, high performance, lawful semantics, and rich expressivity, Scalaz 8's effect system may just be the effect system to attract the mainstream Scala developers who aren't familiar with functional programming.
Functional programming is getting a lot of attention because it eases many of the difficulties faced in object-oriented programming (OOP) such as testability, maintainability, scalability, and concurrency. Swift has a lot of functional programming features that can be easily used, but most of Objective-C and Swift programmers are not familiar with these concepts.
This talk aims to introduce some of the core concepts of functional programming with Swift such as:
• Importance of Immutability
• First-class, Higher-order and Pure functions
• Closures
• Generics and Associated Type Protocols
• Functors, Applicative Functors and Monads
• Enumerations and Pattern Matching
• Optionals
Presented at Web Unleashed on September 16-17, 2015 in Toronto, Canada
More info at www.fitc.ca/webu
Why TypeScript?
with Jeff Francis
OVERVIEW
TypeScript is a type-checked superset of JavaScript that benefits medium-sized to complex JavaScript projects. Why would you want to learn a new language, instead of another JavaScript framework? You have all this existing JavaScript code, so how can you adopt something new without throwing the old stuff out?
This session is about the benefits of using TypeScript on top of JavaScript in your projects, and demonstrate step by step ways of migrating an existing JavaScript project to TypeScript. We will dive into code generated by the compiler and look at resources and tools that make working in TypeScript a pleasurable experience.
OBJECTIVE
To understand when it’s a good idea to use TypeScript.
TARGET AUDIENCE
JavaScript developers.
ASSUMED AUDIENCE KNOWLEDGE
Intermediate JavaScript experience.
FIVE THINGS AUDIENCE MEMBERS WILL LEARN
The basics of TypeScript – types, classes, modules, and functions
How TypeScript’s design makes getting started simple and helps projects
What compiled TypeScript looks like and how to debug
What tools can help take advantage of TypeScript’s type information
How to migrate a JavaScript project to TypeScript
The final dream of every developer is creating his own programming language. Today it is possible to realize that dream with a reasonable effort. In addition to that is also possible to leverage the JVM to make a language that can reuse a huge amount of libraries. In this presentation we are going to see what elements do we need to build our own language, with a compiler for the JVM. This is not only a lot of fun but it can be also useful in practice, to build Domain Specific Languages that compiles to bytecode and can be used together with mainstream languages in larger applications.
Not so long ago Microsoft announced a new language trageting on front-end developers. Everybody's reaction was like: Why?!! Is it just Microsoft darting back to Google?!
So, why a new language? JavaScript has its bad parts. Mostly you can avoid them or workaraund. You can emulate class-based OOP style, modules, scoping and even run-time typing. But that is doomed to be clumsy. That's not in the language design. Google has pointed out these flaws, provided a new language and failed. Will the story of TypeScript be any different?
Functional programming in kotlin with Arrow [Sunnytech 2018]Emmanuel Nhan
Slides from my talk about Kotlin & Functional programming with Arrow which I gave at Sunny Tech 2018 (http://sunny-tech.io)
It showcases how Kotlin is a good fit for functional programming, thanks to Arrow.
Kotlin: A pragmatic language by JetBrainsJigar Gosar
A pragmatic language for JVM and Android.
Combines OO and functional features.
Focused on interoperability, safety, clarity, tooling support.
Open Source.
Works everywhere where Java works.
Key focus on interoperability and seamless support for mixed Java+Kotlin projects.
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsJohn De Goes
Quark is a new Scala DSL for data processing and analytics that runs on top of the Quasar Analytics compiler. Quark is adept at processing semi-structured data and compiles query plans to operations that run entirely inside a target data source. In this presentation, John A. De Goes provides an overview of the open source library, showing several use cases in data processing and analytics. John also demonstrates a powerful technique that every developer can use to create their own purely-functional, type-safe DSLs in the Scala programming language.
Scalaz-stream introduced the Scala ecosystem to purely functional streams. Although widely deployed in production at Verizon, SlamData, and elsewhere, the last release of scalaz-stream was October 23rd, 2016, and newer projects such as FS2, Monix Iterant, and others have risen to fill the gap, each addressing different use cases in the functional programming community. In this talk, John A. De Goes, architect of the Scalaz 8 effect system, unveils a new design for a next-generation version of scalaz-stream. Designed to embrace the powerful features of the Scalaz 8 effect system—features not available in any other effect type—this design features higher-performance, stronger guarantees, and far less code than previous incarnations. You are invited to discover the practicality of functional programming, as well as its elegance, beauty, and composability, in this unique presentation available exclusively at Scale By the Bay.
Functional Programming Patterns for the Pragmatic ProgrammerRaúl Raja Martínez
In this talk we will see a pragmatic approach to building a purely functional architecture that delivers cohesive functional components.
We will cover functional patterns such as Free Monads, Transformers, Kleisli arrows, dependently typed checked exceptions
and types as well as how they can be glued together to achieve pure functions that are composable, context free, dependently injectable and testable.
Dome project and code with instructions to run it can be found at:
https://github.com/47deg/func-architecture
Scalaz 8 is the latest edition of the popular functional programming library for Scala. In this whirlwind tour, maintainer John A. De Goes discusses some of the hottest features of Scalaz 8, including all of the following:
* A fast, concurrent, and leak-free effect system, which has small, composable, and powerful primitives for building practical, real-world software;
* A non-linear type class hierarchy, which permits a more powerful hierarchy that infers well without devastating ambiguous implicit errors;
* A new encoding for abstractions in category theory that providers higher fidelity and enables new categories of useful software to be developed;
* A Scala 2.12 encoding of opaque types that powers improved performance and better developer UX.
In this tour, you’ll see how the design of Scalaz 8 was inspired by a desire to provide Scala developers with a principled, performant, and pragmatic library that never sacrifices the safety and equational reasoning properties of functional programming. You’ll see live code snippets that show you how solving complex real world problems is simpler, faster, safer, and more reasonable than in previous versions of Scalaz. And hopefully you’ll be inspired at just how far functional programming in Scala has come in the past decade.
Final tagless. The topic strikes fear into the hearts of Scala developers everywhere—and not without reason. Final tagless allows developers to build composable Domain Specific Languages (DSLs) that model interaction with the outside world. Programs written using the final tagless style can be tested deterministically and reasoned about at compile-time. Yet the technique requires confusing, compiler-choking higher-kinded types, like `F[_]`, and pervasive, non-inferable context bounds like `F[_]: Concurrent: Console: Logging`. Many have looked at final tagless and wondered if all the layers of complexity and ceremony are really worth the benefits.
In this presentation, John A. De Goes provides a gentle and accessible introduction to final tagless, explaining what it is and the problem it intends to solve. John shows that while final tagless is easier to use than free monads, the technique suffers from a litany of drawbacks that push developers away from functional programming in Scala. John then introduces a novel approach that shares some of the benefits of final tagless, but which is idiomatic Scala, easy to explain, doesn’t need any complex type machinery, provides flawless type inference, and works beautifully across Scala 2.x and Scala 3.
Come join John for an evening of fun as you learn how to write functional code in Scala that's easy to test and easy to reason about—all without the complexity of free monads or final tagless.
Some languages, like SML, Haskell, and Scala, have built-in support for pattern matching, which is a generic way of branching based on the structure of data.
While not without its drawbacks, pattern matching can help eliminate a lot of boilerplate, and it's often cited as a reason why functional programming languages are so concise.
In this talk, John A. De Goes talks about the differences between built-in patterns, and so-called first-class patterns (which are "do-it-yourself" patterns implemented using other language features).
Unlike built-in patterns, first-class patterns aren't magical, so you can store them in variables and combine them in lots of interesting ways that aren't always possible with built-in patterns. In addition, almost every programming language can support first-class patterns (albeit with differing levels of effort and type-safety).
During the talk, you'll watch as a mini-pattern matching library is developed, and have the opportunity to follow along and build your own pattern matching library in the language of your choice.
Introduces the functional programming ideas of Functor, Apply, Applicative And Monad. Shows how to implement each in Scala with Scalaz and how to validate the implementation using property based test using specs2 and scalacheck.
Free monads and free applicatives have proven an incredibly useful tool in repertoire of the functional programmer: they separate concerns, encourage denotational semantics for program specification, allow easy and type-safe mocking of purely functional code, and allow dynamic introspection and optimization.
Despite these benefits, free monads are notoriously constrained: by themselves, they cannot handle parallelism (only sequentiality), and because they provide only a monad, richer structures (such as monads that fail, or monads that support alternation) cannot be expressed without crude hacks that limit composability and expressiveness.
In this session, John A. De Goes shows how the free monad can be deconstructed for its individual features, and then rebuilt using a more powerful technique that enables more extensibility. The resulting structure — no longer technically a "free monad" — allows reification of as few or as many aspects of computation as are necessary to model the problem domain.
After the session, attendees will know how to augment their existing free programs to add parallelism, racing, failure, and other aspects of computation as required by their problem. In addition, through this thorough deconstruction and reconstruction of the free monad, attendees will have a very deep understanding of reified computation and why the free monad has the structure and limitations it does.
For decades, the Functor, Monoid, and Foldable type class hierarchies have dominated functional programming. Implemented in libraries like Scalaz and Cats, these type classes have an ancient origin in Haskell, and they have repeatedly proven useful for advanced functional programmers, who use them to maximize code reuse and increase code correctness.
Yet, as these type classes have been copied into Scala and aged, there is a growing awareness of their drawbacks, ranging from being difficult to teach to weird operators that don’t make sense in Scala (ap from Applicative), to overlapping and lawless type classes (Semigroupal), to a complete inability to abstract over data types that possess related structure (such as isomorphic applicatives).
In this presentation, John A. De Goes introduces a new Scala library with a completely different factoring of functional type classes—one which throws literally everything away and starts from a clean slate. In this new factoring, type classes leverage Scala’s strengths, including variance and modularity. Pieces fit together cleanly and uniformly, and in a way that satisfies existing use cases, but enables new ones never before possible. Finally, type classes are named, organized, and described in a way that makes teaching them easier, without compromising on algebraic principles.
If you’ve ever thought functional type classes were too impractical or too confusing or too restrictive, now’s your chance to get a fresh perspective on a library that just might make understanding functional programming easier than ever before!
The final dream of every developer is creating his own programming language. Today it is possible to realize that dream with a reasonable effort. In addition to that is also possible to leverage the JVM to make a language that can reuse a huge amount of libraries. In this presentation we are going to see what elements do we need to build our own language, with a compiler for the JVM. This is not only a lot of fun but it can be also useful in practice, to build Domain Specific Languages that compiles to bytecode and can be used together with mainstream languages in larger applications.
Not so long ago Microsoft announced a new language trageting on front-end developers. Everybody's reaction was like: Why?!! Is it just Microsoft darting back to Google?!
So, why a new language? JavaScript has its bad parts. Mostly you can avoid them or workaraund. You can emulate class-based OOP style, modules, scoping and even run-time typing. But that is doomed to be clumsy. That's not in the language design. Google has pointed out these flaws, provided a new language and failed. Will the story of TypeScript be any different?
Functional programming in kotlin with Arrow [Sunnytech 2018]Emmanuel Nhan
Slides from my talk about Kotlin & Functional programming with Arrow which I gave at Sunny Tech 2018 (http://sunny-tech.io)
It showcases how Kotlin is a good fit for functional programming, thanks to Arrow.
Kotlin: A pragmatic language by JetBrainsJigar Gosar
A pragmatic language for JVM and Android.
Combines OO and functional features.
Focused on interoperability, safety, clarity, tooling support.
Open Source.
Works everywhere where Java works.
Key focus on interoperability and seamless support for mixed Java+Kotlin projects.
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsJohn De Goes
Quark is a new Scala DSL for data processing and analytics that runs on top of the Quasar Analytics compiler. Quark is adept at processing semi-structured data and compiles query plans to operations that run entirely inside a target data source. In this presentation, John A. De Goes provides an overview of the open source library, showing several use cases in data processing and analytics. John also demonstrates a powerful technique that every developer can use to create their own purely-functional, type-safe DSLs in the Scala programming language.
Scalaz-stream introduced the Scala ecosystem to purely functional streams. Although widely deployed in production at Verizon, SlamData, and elsewhere, the last release of scalaz-stream was October 23rd, 2016, and newer projects such as FS2, Monix Iterant, and others have risen to fill the gap, each addressing different use cases in the functional programming community. In this talk, John A. De Goes, architect of the Scalaz 8 effect system, unveils a new design for a next-generation version of scalaz-stream. Designed to embrace the powerful features of the Scalaz 8 effect system—features not available in any other effect type—this design features higher-performance, stronger guarantees, and far less code than previous incarnations. You are invited to discover the practicality of functional programming, as well as its elegance, beauty, and composability, in this unique presentation available exclusively at Scale By the Bay.
Functional Programming Patterns for the Pragmatic ProgrammerRaúl Raja Martínez
In this talk we will see a pragmatic approach to building a purely functional architecture that delivers cohesive functional components.
We will cover functional patterns such as Free Monads, Transformers, Kleisli arrows, dependently typed checked exceptions
and types as well as how they can be glued together to achieve pure functions that are composable, context free, dependently injectable and testable.
Dome project and code with instructions to run it can be found at:
https://github.com/47deg/func-architecture
Scalaz 8 is the latest edition of the popular functional programming library for Scala. In this whirlwind tour, maintainer John A. De Goes discusses some of the hottest features of Scalaz 8, including all of the following:
* A fast, concurrent, and leak-free effect system, which has small, composable, and powerful primitives for building practical, real-world software;
* A non-linear type class hierarchy, which permits a more powerful hierarchy that infers well without devastating ambiguous implicit errors;
* A new encoding for abstractions in category theory that providers higher fidelity and enables new categories of useful software to be developed;
* A Scala 2.12 encoding of opaque types that powers improved performance and better developer UX.
In this tour, you’ll see how the design of Scalaz 8 was inspired by a desire to provide Scala developers with a principled, performant, and pragmatic library that never sacrifices the safety and equational reasoning properties of functional programming. You’ll see live code snippets that show you how solving complex real world problems is simpler, faster, safer, and more reasonable than in previous versions of Scalaz. And hopefully you’ll be inspired at just how far functional programming in Scala has come in the past decade.
Final tagless. The topic strikes fear into the hearts of Scala developers everywhere—and not without reason. Final tagless allows developers to build composable Domain Specific Languages (DSLs) that model interaction with the outside world. Programs written using the final tagless style can be tested deterministically and reasoned about at compile-time. Yet the technique requires confusing, compiler-choking higher-kinded types, like `F[_]`, and pervasive, non-inferable context bounds like `F[_]: Concurrent: Console: Logging`. Many have looked at final tagless and wondered if all the layers of complexity and ceremony are really worth the benefits.
In this presentation, John A. De Goes provides a gentle and accessible introduction to final tagless, explaining what it is and the problem it intends to solve. John shows that while final tagless is easier to use than free monads, the technique suffers from a litany of drawbacks that push developers away from functional programming in Scala. John then introduces a novel approach that shares some of the benefits of final tagless, but which is idiomatic Scala, easy to explain, doesn’t need any complex type machinery, provides flawless type inference, and works beautifully across Scala 2.x and Scala 3.
Come join John for an evening of fun as you learn how to write functional code in Scala that's easy to test and easy to reason about—all without the complexity of free monads or final tagless.
Some languages, like SML, Haskell, and Scala, have built-in support for pattern matching, which is a generic way of branching based on the structure of data.
While not without its drawbacks, pattern matching can help eliminate a lot of boilerplate, and it's often cited as a reason why functional programming languages are so concise.
In this talk, John A. De Goes talks about the differences between built-in patterns, and so-called first-class patterns (which are "do-it-yourself" patterns implemented using other language features).
Unlike built-in patterns, first-class patterns aren't magical, so you can store them in variables and combine them in lots of interesting ways that aren't always possible with built-in patterns. In addition, almost every programming language can support first-class patterns (albeit with differing levels of effort and type-safety).
During the talk, you'll watch as a mini-pattern matching library is developed, and have the opportunity to follow along and build your own pattern matching library in the language of your choice.
Introduces the functional programming ideas of Functor, Apply, Applicative And Monad. Shows how to implement each in Scala with Scalaz and how to validate the implementation using property based test using specs2 and scalacheck.
Free monads and free applicatives have proven an incredibly useful tool in repertoire of the functional programmer: they separate concerns, encourage denotational semantics for program specification, allow easy and type-safe mocking of purely functional code, and allow dynamic introspection and optimization.
Despite these benefits, free monads are notoriously constrained: by themselves, they cannot handle parallelism (only sequentiality), and because they provide only a monad, richer structures (such as monads that fail, or monads that support alternation) cannot be expressed without crude hacks that limit composability and expressiveness.
In this session, John A. De Goes shows how the free monad can be deconstructed for its individual features, and then rebuilt using a more powerful technique that enables more extensibility. The resulting structure — no longer technically a "free monad" — allows reification of as few or as many aspects of computation as are necessary to model the problem domain.
After the session, attendees will know how to augment their existing free programs to add parallelism, racing, failure, and other aspects of computation as required by their problem. In addition, through this thorough deconstruction and reconstruction of the free monad, attendees will have a very deep understanding of reified computation and why the free monad has the structure and limitations it does.
For decades, the Functor, Monoid, and Foldable type class hierarchies have dominated functional programming. Implemented in libraries like Scalaz and Cats, these type classes have an ancient origin in Haskell, and they have repeatedly proven useful for advanced functional programmers, who use them to maximize code reuse and increase code correctness.
Yet, as these type classes have been copied into Scala and aged, there is a growing awareness of their drawbacks, ranging from being difficult to teach to weird operators that don’t make sense in Scala (ap from Applicative), to overlapping and lawless type classes (Semigroupal), to a complete inability to abstract over data types that possess related structure (such as isomorphic applicatives).
In this presentation, John A. De Goes introduces a new Scala library with a completely different factoring of functional type classes—one which throws literally everything away and starts from a clean slate. In this new factoring, type classes leverage Scala’s strengths, including variance and modularity. Pieces fit together cleanly and uniformly, and in a way that satisfies existing use cases, but enables new ones never before possible. Finally, type classes are named, organized, and described in a way that makes teaching them easier, without compromising on algebraic principles.
If you’ve ever thought functional type classes were too impractical or too confusing or too restrictive, now’s your chance to get a fresh perspective on a library that just might make understanding functional programming easier than ever before!
The presentation helps us in understanding the different concepts associated with TypeScript. What is TypeScript? Why is TypeScript used and the different applications of TypeScript. For more information you can simply visit: http://mobile.folio3.com/
Deep Dive Into Swift - Presented at Coffee@DBG
In the previous month, Coffe@DBG Covered the basics of Swift, Apple's new programming language. This session introduces some of handpicked interesting features of Swift.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
3. What isTypeScript and why should we use it?
• TypeScript is a SUPERSET of JavaScript…. But use it respectfully.
• Any JavaScript isValid TypeScript
//JAVASCRIPT
var myString1 = "Hello";
var myString2 = "World!";
var finalString = myString1 + " " + myString2;
//TYPESCRIPT
var myString1 = "Hello";
var myString2 = "World!";
var finalString = myString1 + " " + myString2;
Two Exceptions:
1. JavaScript’s With Statements
2. Vender Specific Extensions – i.e.: Mozilla’s CONST
…..Well sort of
• So what ‘problems’ does TypeScript solve in JavaScript then?
• Prototypal Inheritance
• Management of Modules (namespaces)
• Scoping
• Lack ofTypes
3
4. What isTypeScript and why should we use it?
4
var FelineSoft;
(function (FelineSoft) {
var Employee = (function () {
function Employee(options) {
this.firstName = options.firstName;
this.lastName = options.lastName;
this.payType = options.payType;
this.payRate = options.payRate;
this.title = options.title || "";
}
Employee.prototype.calculatePay = function (hoursWorked) {
if (this.payType === PayType.Hourly) {
var pay = new Pay();
return pay.calculatePay(hoursWorked, this.payRate);
}
else {
return this.payRate;
}
};
Employee.prototype.fireThem = function () {
return this.firstName + " " + this.lastName + ", you are FIRED!";
};
return Employee;
})();
FelineSoft.Employee = Employee;
var Pay = (function () {
function Pay() { }
Pay.prototype.calculatePay = function (hours, poundsPerHour) {
return hours * poundsPerHour; };
return Pay;
})();
var PayType;
(function (PayType) {
PayType[PayType["Hourly"] = 0] = "Hourly";
PayType[PayType["Salary"] = 1] = "Salary";
})(PayType || (PayType = {}));
})(FelineSoft || (FelineSoft = {}));
namespace FelineSoft {
export class Employee {
private firstName: string;
private lastName: string;
private payType: PayType;
private payRate: number;
private title: string;
constructor(options: IEmployeOptions) {
this.firstName = options.firstName;
this.lastName = options.lastName;
this.payType = options.payType;
this.payRate = options.payRate;
this.title = options.title || "";
}
calculatePay(hoursWorked: number): number {
if (this.payType === PayType.Hourly) {
const pay = new Pay();
return pay.calculatePay(hoursWorked, this.payRate);
}
else { return this.payRate; }
}
fireThem(): string {
return this.firstName + " " + this.lastName + ", you are FIRED!";
}
}
class Pay {
calculatePay(hours: number, poundsPerHour: number): number {
return hours * poundsPerHour;
}
}
enum PayType {
Hourly = 0,
Salary = 1
}
// DOES NOT CONVERT TO JAVASCRIPT
export interface IEmployeOptions {
firstName: string;
lastName: string;
payType: PayType;
payRate: number;
title?: string;
}
}
11. TheTypeScript Basics
11
Variables
• The First Character must be:
• Uppercase Letter
• Lowercase Letter
• Underscore
• Dollar Sign <= Warning
• Reserved Words
var ThisIsValid;
var thisIsValid;
var _andthisIsValid;
var $AlsoValid;
break case catch class const continue debugger default delete do else enum export
extends false finally for function if import in instanceof new null return super
switch this throw true try typeof var void while with implements interface let package
private protected public static yield any boolean number string symbol abstract as
async await constructor declare from get is module namespace of require set type
12. TheTypeScript Basics
12
Types
namespace Presentation {
var badGlobalVariable;
var goodGlobalString: string;
export class BadClass {
classVariable;
}
export class GoodClass {
classString: string;
}
}
var Presentation;
(function (Presentation) {
var badGlobalVariable;
var goodGlobalString;
var BadClass = (function () {
function BadClass() {
}
return BadClass;
})();
Presentation.BadClass = BadClass;
var GoodClass = (function () {
function GoodClass() {
}
return GoodClass;
})();
Presentation.GoodClass = GoodClass;
})(Presentation || (Presentation = {}));
• Declaring a type is optional, but then you defeat the point of using TypeScript
• To declare a type, use this syntax:
• In a namespace/module
• var myString: string;
• In a class
• myString: string;
• What types are available in TypeScript?
• Strings
• Booleans
• Numbers (all numbers, integers, decimals, floats, etc.)
• Objects
• Arrays
• Enumerations / Bit Flags
• Any
13. TheTypeScript Basics
13
Operations
• Increment / Decrement : ++ / --
• Math: + - * / %
• String to Number Converter: +string or –string
• Bit Wise: << >> >>> & ^ | ~
• Not Operator: ! !!
• And Operator: &&
• Or Operator: ||
• Type Operator: typeof instanceof in delete
namespace Presentation {
export class Foo {
myString: string = "1";
myNumber: number = 1;
addStringAndNumber(): number {
return this.myNumber + +this.myString;
}
subtractStringAndNumber(): number {
return this.myNumber - +this.myString;
}
}
}
namespace Presentation {
export class Foo {
truthyString: string = 'Truthy string';
falseyString: string;
test(): void {
// False, it checks the string but inverts the truth
var invertedTest = !this.truthyString;
// True, the string is not undefined or empty
var truthyTest = !!this.truthyString;
// False, the string is empty
var falseyTest = !!this.falseyString;
}
}
}
14. TheTypeScript Basics
14
Functions
• Functions are just Methods
• Inside a class, just the name
• Outside a class, you must include the keyword ‘function’
• Parameters
• Optional Parameters
• Default Parameters
• Rest Parameters
• Overloads
• Arrow Functions
• Return Values
namespace Presentation {
export class Foo {
myClassMethod(): void {
//DO SOMETHING
}
}
function myGlobalFunction(): void {
//DO SOMETHING
}
}
namespace Presentation {
export class Foo {
getString(): string {
return "Hello World!";
}
getNumber(): number {
return 1;
}
getNothing(): void {
// HA HA HA, nothing to return
}
}
}
namespace Presentation {
export class Foo {
getAverage(a: string, b: string, c: string): string;
getAverage(a: number, b: number, c: number): string;
getAverage(a: any, b: any, c: any): string {
var total = parseInt(a, 10) + parseInt(b, 10) + parseInt(c, 10);
var average = total / 3;
return `The average is ${average}`;
}
}
}
namespace Presentation {
export class Foo {
methodWithOptionalParams(param?: string): void {
//DO SOMETHING
}
methodWithDefaultParams(param: string = "default"): void {
//DO SOMETHING
}
methodWithRestParams(...param: string[]): void {
//DO SOMETHING
}
}
}
15. TheTypeScript Basics
15
NameSpaces
• Namespaces used to be referred to as Modules
• Namespaces can be nested
• Top level namespaces do not need to be mark for export
• Anything accessed by something outside of its parent
namespace must be marked for export
namespace Presentation {
export class MyClass {
myString: string;
myNumber: number;
constructor() {
this.myString = "Hello World!";
this.myNumber = 42;
}
}
}
namespace Level1 {
namespace Level2a {
export class L2aClass {
}
Level1.Level2b.L2bClass // ACCESSABLE
}
export namespace Level2b {
export class L2bClass {
}
Level1.level2a.L2aClass // NOT ACCESSABLE
}
}
namespace LevelA {
Level1.Level2a.L2aClass // NOT ACCESSABLE
Level1.Level2b.L2bClass // ACCESSABLE
}
module Presentation {
export class MyClass {
myString: string;
myNumber: number;
constructor() {
this.myString = "Hello World!";
this.myNumber = 42;
}
}
}
16. TheTypeScript Basics
16
Interfaces
• Interfaces are used solely by TypeScript, no JavaScript is created
• Interfaces can be used model an ‘virtual object’
• Interfaces can use Inheritance
• Interfaces are just Interfaces
• But they support optional fields
• Interfaces support Generics
• Type Constraints can be used using EXTENDS
namespace Presentation {
interface ICar {
engine: string;
color: string;
}
class Car implements ICar {
constructor(engine: string, color: string) {
this.engine = engine;
this.color = color;
}
engine: string;
color: string;
}
}
namespace Presentation {
interface ICar {
engine: string;
color: string;
}
class Car implements ICar {
constructor(data: ICar) {
this.engine = data.engine;
this.color = data.color;
}
engine: string;
color: string;
}
var myCar = new Car({ engine : "FAST", color : "BLACK" });
}
18. TheTypeScript Basics
18
Classes
• Constructors use the keyword, constructor, and never have a return type
• Classes have Fields, Properties and Methods
• Access Modifiers can be used but ONLY apply within TypeScript
• Classes can use Inheritances
• Classes IMPLEMENTS interfaces
• Classes EXTENDS other classes
• Classes support Generics
• Type Constraints can be used
namespace Presentation {
class MyClass {
constructor() {
}
}
}
namespace Presentation {
class MyClass {
private _value: string;
constructor() {
}
myField: string;
myMethod(): void {
//DO SOME WORK HERE
}
get value() {
return this._value;
}
set value(item: string) {
this._value = item;
}
}
}
namespace Presentation {
class MyClass {
constructor() {
}
private myPrivateProperty: string;
public myPublicProperty: string;
protected myProtectedProperty: string;
public myPublicMethod(): void {
//DO SOME WORK FOR ANYONE
}
private myPrivateMethod(): void {
// DO SOME INTERNAL WORK
}
protected myProtectedMethod(): void {
// DO SOME WORK FOR MY FRIEND
}
}
}
19. TheTypeScript Basics
19
Classes
namespace Presentation {
class MyClass<T> {
private id: T;
constructor(id: T) {
this.id = id;
}
myId(): T {
return this.id;
}
}
}
namespace Presentation {
class MyClass {
constructor() {
}
private myPrivateProperty: string;
public myPublicProperty: string;
protected myProtectedProperty: string;
public myPublicMethod(): void {
//DO SOME WORK FOR ANYONE
}
private myPrivateMethod(): void {
// DO SOME INTERNAL WORK
}
protected myProtectedMethod(): void {
// DO SOME WORK FOR MY FRIEND
}
}
class ChildClass extends MyClass {
constructor() {
super();
this.myProtectedMethod(); // ACCESSABLE
this.myProtectedProperty = ""; // ACCESSABLE
this.myPrivateMethod(); // NOT ACCESSABLE
this.myPrivateProperty = ""; // NOT ACCESSABLE
}
}
}
20. TypeScript:The Advance Stuff
20
IsThere More?
• Anything written in JavaScript, can be written in TypeScript
• .NET Core
• Node.js
• Node Package Manager
• Etc etc etc etc
• Async/Await - New
• Most common JavaScript Frameworks have a Type Definition
• If not, you can create one
function getStringFromWebServerAsync() {
return new Promise<string>((resolve, reject) => {
$.get("http://localhost/GetAString")
.done((data) => {
resolve(data);
})
.fail((err) => {
reject(err);
});
});
}
async function asyncExample() {
try {
let data = await getStringFromWebServerAsync();
console.log(data);
}
catch (err) {
console.log(err);
}
}
asyncExample();
Welcome
Ask who feels comfortable in JS
Ask who has heard of TS?
Ask who has used TS?
What is TypeScript?
TS is a free and open source programming language developed and maintained by MS
First made public in October of 2012 with version 0.8
Current Version is 1.8.2
Language Features
Type Annotations / Compile-Time Type Checking
Type Interfaces
Type erasure
Interfaces
Enumerated Type
Mixins
Generics
Scoping
Namespaces
Tuples
Awaits
Classes
Modules
“Arrow” syntax (Anonymous functions)
Optional parameters and default parameters
IDE/Editor Support
VS 2012 has a plug-in available
VS 2013 and above TS support is built in
Additional Support/Plug-ins
ReSharper 8.1
NetBeans IDE
Eclipse IDE
Sublime
TypeScript is a Superset of JavaScript which means anything you can do in JavaScript you can do in TypeScript,
BUT that would defeat the purpose of using TS
This means any JS you write is valid TS
With 2 exceptions
JS With Statements do not transfer over
Its like a C# Using Statement from what I understand
But Even JS suggests not using it
Any Vender Specific Extensions
Example is Mozilla’s CONST Syntax
There are things called Type Definitions which we will get too later
What Problems, if any, does TS solve in JS?
Making your code Type Strict….sort of (explain)
Continues on next slide
Extensions – Tools > Extensions and Updates
TypeScript (Required)
Web Essentials (optional)
VS TS Settings – Tools > Options OR Quick Search > Typescript
Text Editor > TypeScript
General – Enable virtual space
Project – Display Virtual Projects > Display VP when Solution is loaded | Optional Display VP when no Solution is loaded
Project – Compile on Save > Use AMD
Project – ECMAScript Version > Use ECMAScript 6
Web Essentials > Code Generation
Add TypeScript Reference > TRUE
Project Properties – TypeScript Build
ALL OF IT!
Extensions – Tools > Extensions and Updates
TypeScript (Required)
Web Essentials (optional)
VS TS Settings – Tools > Options OR Quick Search > Typescript
Text Editor > TypeScript
General – Enable virtual space
Project – Display Virtual Projects > Display VP when Solution is loaded | Optional Display VP when no Solution is loaded
Project – Compile on Save > Use AMD
Project – ECMAScript Version > Use ECMAScript 6
Web Essentials > Code Generation
Add TypeScript Reference > TRUE
Project Properties – TypeScript Build
ALL OF IT!
Extensions – Tools > Extensions and Updates
TypeScript (Required)
Web Essentials (optional)
VS TS Settings – Tools > Options OR Quick Search > Typescript
Text Editor > TypeScript
General – Enable virtual space
Project – Display Virtual Projects > Display VP when Solution is loaded | Optional Display VP when no Solution is loaded
Project – Compile on Save > Use AMD
Project – ECMAScript Version > Use ECMAScript 6
Web Essentials > Code Generation
Add TypeScript Reference > TRUE
Project Properties – TypeScript Build
ALL OF IT!
Extensions – Tools > Extensions and Updates
TypeScript (Required)
Web Essentials (optional)
VS TS Settings – Tools > Options OR Quick Search > Typescript
Text Editor > TypeScript
General – Enable virtual space
Project – Display Virtual Projects > Display VP when Solution is loaded | Optional Display VP when no Solution is loaded
Project – Compile on Save > Use AMD
Project – ECMAScript Version > Use ECMAScript 6
Web Essentials > Code Generation
Add TypeScript Reference > TRUE
Project Properties – TypeScript Build
ALL OF IT!
Extensions – Tools > Extensions and Updates
TypeScript (Required)
Web Essentials (optional)
VS TS Settings – Tools > Options OR Quick Search > Typescript
Text Editor > TypeScript
General – Enable virtual space
Project – Display Virtual Projects > Display VP when Solution is loaded | Optional Display VP when no Solution is loaded
Project – Compile on Save > Use AMD
Project – ECMAScript Version > Use ECMAScript 6
Web Essentials > Code Generation
Add TypeScript Reference > TRUE
Project Properties – TypeScript Build
ALL OF IT!
Extensions – Tools > Extensions and Updates
TypeScript (Required)
Web Essentials (optional)
VS TS Settings – Tools > Options OR Quick Search > Typescript
Text Editor > TypeScript
General – Enable virtual space
Project – Display Virtual Projects > Display VP when Solution is loaded | Optional Display VP when no Solution is loaded
Project – Compile on Save > Use AMD
Project – ECMAScript Version > Use ECMAScript 6
Web Essentials > Code Generation
Add TypeScript Reference > TRUE
Project Properties – TypeScript Build
ALL OF IT!
Variables must start with….
Using $ to start your variables can cause confusion with other JavaScript Frameworks…do not use them
Reserved Words – There will be a test at the end
Types
Declaring Types is optional – NEVER DO IT!
How to declare a type
Left is TypeScript – Right is JavaScript output
Available Types
Primitives
Arrays
Enum/BitFlag
Any – EXPLAIN AND DISCOURAGE!!!!
Type Assertions!!!!
Other Types
Void Type – Used to show the absenense of value and used with a function return (come back to soon)
Null Type – is a literal value…NULL
Undefined Type – denotes that the variable is not available / not initialized
Operations
Increment/Decrement (same as C#)
Math Operations (same as C#)
String to Number Converter – Explain
Bit Wise:
<< Left Shift
>> Right Shift
>>> Zero Fill Right Shift
& AND
| OR
^ XOR
~ NOT
Logical Operations
! NOT
!! NOT Converter – Explain (as best as possible)
&& AND
|| OR
Type Operators
Will cover in Classes
Functions
Parameters
Rest is 0 or more
Arrow Functions we will cover in a little bit
Point of all this?
TS keeps track of all the types and helps you write the code correctly. We will see this in the Demo
Namespaces
NS used to be called Modules and can still be called that
NS can be nested
Nested Namespace must be marked as Export if you plan to use them outside of parent namespace
Interfaces
No JS is generated from Interfaces
Virtual Objects are ‘place holders’
Classes
Constructor verses class name
Fields/Properties/Methods
Access Modifiers
Inheritance