Video and slides synchronized, mp3 and slide download available at http://bit.ly/XRdkqc.
Ben Christensen describes how Neflix has optimized their API using a functional reactive programming (modeled after Rx) in a polyglot Java stack. Filmed at qconlondon.com.
Ben Christensen is a software engineer on the Netflix API Platform team responsible for fault tolerance, performance, architecture and scale while enabling millions of customers to access the Netflix experience across more than 800 different device types. Prior to Netflix, Ben was at Apple in the iTunes division making iOS apps and media available to the world. Twitter: @benjchristensen
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1Ihu917.
Jafar Husain shows the Reactive Extensions (Rx) library which allows to treat events as collections, how Netflix uses Rx on the client and the server, allowing to build end-to-end reactive systems. Filmed at qconsf.com.
Jafar Husain developed software for companies like GE, Microsoft, and Netflix. He specializes in building web servers and clients using functional reactive programming, and was the first user of the Reactive Extensions Framework. He's also responsible for "Falkor", a RESTful data access framework that powers most Netflix clients.
original (better quality) on https://docs.google.com/presentation/d/1bnwj8CrFGo5KekONYSeIHySdkoXZiewJxkHcZjXnzkQ/
slides from OpenDaylight Summit Oct 2016 Seattle
https://github.com/vorburger/opendaylight-eclipse-setup
Watch https://www.youtube.com/watch?v=TU1zjytlwFE recording of this same presentation. Same slides are also available in better quality on https://docs.google.com/presentation/d/14yLzog3OhIlVsk7Clr0Tff1YayRcFnQCUZqxHMWxiNI/.
Watch https://www.youtube.com/watch?v=BLW8aOh6WeQ screencast video to see a step by step walk through for how to use what's introduced here.
Presentation given at the OpenDaylight Open Source Software Defined Networking Mini Summit on 2016.06-21 in Berlin at the Open Platform for NFV (OPNFV) summit, by Michael Vorburger.
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Christian Catalan
Presented at the STLJS Meetup (St Louis, MO)
We dive into a Vue application used in semiconductor labs for transistor measurements. We discuss how get started with E2E testing with Cypress.io. And give a crash course into Vue applications.
Video: https://www.youtube.com/watch?v=dpB0YgnFyZQ
The presentation which I was using during my talk at EPAM Lviv JS community about offline-first applications. Contains high-level review of tools and web platform to submerge folks in a world of offline-first thinking.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1Ihu917.
Jafar Husain shows the Reactive Extensions (Rx) library which allows to treat events as collections, how Netflix uses Rx on the client and the server, allowing to build end-to-end reactive systems. Filmed at qconsf.com.
Jafar Husain developed software for companies like GE, Microsoft, and Netflix. He specializes in building web servers and clients using functional reactive programming, and was the first user of the Reactive Extensions Framework. He's also responsible for "Falkor", a RESTful data access framework that powers most Netflix clients.
original (better quality) on https://docs.google.com/presentation/d/1bnwj8CrFGo5KekONYSeIHySdkoXZiewJxkHcZjXnzkQ/
slides from OpenDaylight Summit Oct 2016 Seattle
https://github.com/vorburger/opendaylight-eclipse-setup
Watch https://www.youtube.com/watch?v=TU1zjytlwFE recording of this same presentation. Same slides are also available in better quality on https://docs.google.com/presentation/d/14yLzog3OhIlVsk7Clr0Tff1YayRcFnQCUZqxHMWxiNI/.
Watch https://www.youtube.com/watch?v=BLW8aOh6WeQ screencast video to see a step by step walk through for how to use what's introduced here.
Presentation given at the OpenDaylight Open Source Software Defined Networking Mini Summit on 2016.06-21 in Berlin at the Open Platform for NFV (OPNFV) summit, by Michael Vorburger.
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Christian Catalan
Presented at the STLJS Meetup (St Louis, MO)
We dive into a Vue application used in semiconductor labs for transistor measurements. We discuss how get started with E2E testing with Cypress.io. And give a crash course into Vue applications.
Video: https://www.youtube.com/watch?v=dpB0YgnFyZQ
The presentation which I was using during my talk at EPAM Lviv JS community about offline-first applications. Contains high-level review of tools and web platform to submerge folks in a world of offline-first thinking.
2018 (codeone) Graal VM and MicroProfile a polyglot microservices solution [d...César Hernández
Microservices need to support many programming languages, requiring both a language-agnostic network protocol and a polyglot runtime environment. In addition, microservices written in one language may need to use APIs written in some other language. Using the MicroProfile conference sample architecture implemented as a polyglot solution (Java, JavaScript, Python) on GraalVM, this presentation demonstrates how MicroProfile JWT, MicroProfile Metrics, MicroProfile Rest Client, MicroProfile Health Check, and more can provide architecture-level interoperability across concerns. Attendees interested in creating a polyglot solution on GraalVM compatible with MicroProfile will get a demo-heavy introduction with occasional dives into code and leave with read-to-run samples in GitHub.
Reverse engineering and instrumentation of android appsGaurav Lochan
Our product (Little Eye Labs) is a performance monitoring and optimization tool for Android apps.
We wanted to expose detailed network usage information from the app, and we explored binary instrumentation as a way to do this.
The presentation covers many learnings from the process - what are different reverse engineering tools on android, which ones specifically help with instrumentation, and a link to some of the source code from this process.
Philip Shurpik "Architecting React Native app"Fwdays
React Native становится все более зрелым фреймворком для создания кросс платформенных мобильных приложений. Доклад основан на нашем опыте создания production приложения - от архитектуры до тестирования и CI.
Рассмотрим вопрос переиспользования кода при разработке для разных платформ- что и сколько процентов можно переиспользовать и как этого достичь.
Поговорим о том, как можно очень просто сделать offline-first приложение для чтения и создания данных. И чем нам в этом могут помочь Redux и Redux persist.
Разберем, как максимально просто сделать навигацию в приложении.
И, конечно же, какое production приложение без тестирования и continuous integration? Рассмотрим компонентное тестирование с Enzyme и интеграционное с Appium. А также, как максимально приблизить процесс deploy к тому, чему мы привыкли в web, с помощью CodePush.
The Apache Wicket community is working hard to build the new major release of Wicket. One of the tentpole features is the move to Java 8 as a minimum requirement. Why did we do that, and how does this improve my Wicket code? Learn how to apply Java 8 features such as lambdas and the new DateTime API in your Wicket applications, and learn what else the community is creating for your benefit.
With the Tenth Anniversary of Wicket behind us, Wicket is still one of the thriving survivors of the Great Web Framework Wars of the mid 00's. Is there a future for server-side frameworks? In this presentation Martijn Dashorst provides a brief history of Wicket.
With a State of the Wicket, Martijn will look at who is currently using Wicket, the community and current release plans.
The majority of this session will be dedicated to the future of Wicket: does a component oriented, Java web framework have a future in the era of native clients and client side JavaScript frameworks? Martijn will layout the plans of making Wicket more productive for current users, on integrating better with JavaEE technologies and much more.
10 SQL Tricks that You Didn't Think Were PossibleLukas Eder
SQL is the winning language of Big Data. Whether you’re running a classic relational database, a column store (“NewSQL”), or a non-relational storage system (“NoSQL”), a powerful, declarative, SQL-based query language makes the difference. The SQL standard has evolved drastically in the past decades, and so have its commercial and open source implementations.
In this fast-paced talk, we’re going to look at very peculiar and interesting data problems and how we can solve them with SQL. We’ll explore common table expressions, hierarchical SQL, table-valued functions, lateral joins, row value expressions, window functions, and advanced data types, such as XML and JSON. And we’ll look at Oracle’s mysterious MODEL and MATCH_RECOGNIZE clauses, devices whose mystery is only exceeded by their power. Most importantly, however, we’re going to learn that everyone can write advanced SQL. Once you learn the basics in these tricks, you’re going to love SQL even more.
The current state of the Apache Wicket framework in 2014 as presented at the DEVdev meetup held in Deventer, the Netherlands.
- A critique of ThoughtWorks' Technology Review 2014 where they slam JSF (jay) as a concept (nay)
- A look back at 10 years of Wicket
- A review of the current Wicket versions
- An outlook and roadmap for Wicket 7 and Wicket 8
The DEVdev (Deventer Developers) is a new meetup for any developer in the eastern part of the Netherlands (the right side of the IJssel river). This presentation was delivered at the first meetup, and was kindly sponsored by Topicus B.V.
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
Is it possible to write a program that significantly changes its behaviour during the runtime without changing its source code? Have you ever wondered about native TypeScript support in Node.js? Or whether it is possible to write JavaScript code that syntactically feels a lot different but is still valid? The answers to these and a lot of other questions will be discussed in detail in this talk. From the basics of metaprogramming theory to practical examples of its application in enterprise projects. We are going to talk about metalinguistic abstractions, domain-specific languages, and how they can help us solve software engineering problems. We will take a look at how popular frameworks and libraries like React.js, Express.js, Nest.js and Lodash use metaprogramming to develop systems that are used worldwide. Moreover, we will learn how to think in terms of metaprograms and broaden our outlook towards the great world of metasystems.
Java REST API Framework Comparison - UberConf 2021Matt Raible
Use Spring Boot! No, use Micronaut!! Nooooo, Quarkus is the best!!!
There's a lot of developers praising the hottest, and fastest, Java REST frameworks: Micronaut, Quarkus, and Spring Boot. In this session, you'll learn how to do the following with each framework:
✅ Build a REST API
✅ Secure your API with OAuth 2.0
✅ Optimize for production with Docker and GraalVM
I'll also share some performance numbers and pretty graphs to compare community metrics.
Related blog post: https://developer.okta.com/blog/2021/06/18/native-java-framework-comparison
AOTB2014: Agile Testing on the Java PlatformPeter Pilgrim
Creative Commons 2.0 License
Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales (CC BY-NC-SA 2.0 UK)
https://creativecommons.org/licenses/by-nc-sa/2.0/uk/
Share — copy and redistribute the material in any medium or format
Adapt — remix, transform, and build upon the material
The licensor cannot revoke these freedoms as long as you follow the license terms.
This talk about the following:
* TDD
** Is TDD Dead?
** David Heinemeier-Hanson and the controversy
* Java Technology
** If only JUnit tests were this simple
** Java has a some great static analysis tools
** Unfortunatley, these do not work too well in Scala platform
** Guidelines to write tests
* Creative Development in Principle
** Design is a balance
** Inventing your own style
** Avoid lock-in with TDD, use it instead as a design tool
* Scala Technology
** Scala Option
** Function objects
** Pattern matching
** Avoid if and then else and null pointers
* Legacy
** Final advice
This talk was given by Peter Pilgrim, invited speaker to the Agile On The Beach conference on the 5th September, 2014 at Penryn Campus, University of Exeter, Cornwall
Hyper-pragmatic Pure FP testing with distage-testkit7mind
Having a proper test suite can turn ongoing application maintenance and development into pure joy – the best tests check meaningful properties, not the implementation details, and hold no impliict assumptions about their test environment - every test case must be self-contained and portable. To ensure that tests are free of implementation details and environment dependency, we may simply run them in a different test environment, with different implementations of components. But the boileplate and manual work involved in rewiring components, writing hardcoded fixtures and setting up different test environments make this very hard to do at scale. To tackle this problem we've created distage & distage-testkit, distage-testkit gives you the following superpowers:
* ability to easily swap out individual components or entire test environments
* principled & leak-free control of global resources for integration testing – docker containers, DBs, DDLs
* execute effects or allocate resources per-test, e.g. generate random fixtures per-test
* first-class testing of functional effects
* write tests as lambdas – access test fixtures via parameters or ZIO Environment
...and more! We'll also discuss general testing practices and what really distinguishes good tests from great tests.
QA Fest 2018. Adam Stasiak. React Native is Coming – the story of hybrid mobi...QAFest
Main idea of this talk is to show what technologies can be used for cross-platform mobile app development and how to deal with UI tests automation for them. I will outline set of challenges every tester and developer needs to conquer and give some tips how to solve them. During this talk I will present how to apply UI tests in React Native project using Detox framework.
Scala, Functional Programming and Team Productivity7mind
Many engineers spend a lot of time doing repetitive things. In this talk we examine typical productivity issues, which observed in many different companies, and show how to deal with them. We cover:
* Microservices and Monoliths,
* Introspection and Debugging,
* Logging,
* Modular Design,
* Functional Programming,
* RPC and REST,
* Tests and Delivery Pipeline.
This talk is a retrospective of our actions that helped our customer to cut development costs by 50%. We expect our experience to be applicable to most small and medium-sized teams and companies using Scala.
Bytecode manipulation with Javassist for fun and profitJérôme Kehrli
Java bytecode is the form of instructions that the JVM executes.
A Java programmer, normally, does not need to be aware of how Java bytecode works.
Understanding the bytecode, however, is essential to the areas of tooling and program analysis, where the applications can modify the bytecode to adjust the behavior according to the application's domain. Profilers, mocking tools, AOP, ORM frameworks, IoC Containers, boilerplate code generators, etc. require to understand Java bytecode thoroughly and come up with means of manipulating it at runtime.
Each and every of these advanced features of what is nowadays standard approaches when programming with Java require a sound understanding of the Java bytecode, not to mention completely new languages running on the JVM such as Scala or Clojure.
Bytecode manipulation is not easy though ... except with Javassist.
Of all the libraries and tools providing advanced bytecode manipulation features, Javassist is the easiest to use and the quickest to master. It takes a few minutes to every initiated Java developer to understand and be able to use Javassist efficiently. And mastering bytecode manipulation, opens a whole new world of approaches and possibilities.
Talk given at PHP World 2015 about the Hack language released by Facebook. A short history and look at it's key features as well as how Hack and PHP are evolving together.
Many Scala developers nowadays consider using Dependency Injection frameworks an anti-pattern incompatible with modern FP settings. We argue that it's just a consequence of a bad experience with legacy Java runtime reflection-based implementations that lack features important for modern functional programming, such as a first-class support for higher-kinded types. We argue that as a paradigm for structuring purely functional programs, DI with automatic wiring compares favorably against implicits, monad transformers, free monads, algebraic effects, cake pattern et al, enabling scaling and a degree of modularity unachievable by any manual wiring approach. This talk covers DIStage – a transparent, flexible and efficient DI framework for Scala that enables late binding, testability, effect separation and modular resource management at scale, working with, instead of compromising the Scala type system.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Who Needs Thumbs? Reverse Engineering Scramble With FriendsApkudo
Apkudo's AnDevCon III class, "Who Needs Thumbs? Reverse Engineering Scramble With Friends: Part 1" This class was presented on May 15, 2012 by Apkudo's App Analytics Engineer, David Teitelbaum, and CEO, Josh Matthews.
Tek 2013 - Building Web Apps from a New Angle with AngularJSPablo Godel
AngularJS is a new JavaScript framework, backed by Google, for building powerful, complex and rich client-side web applications. We will go over the features and basics of building a web application with AngularJS and we will demonstrate how to communicate with a REST server built with PHP.
2018 (codeone) Graal VM and MicroProfile a polyglot microservices solution [d...César Hernández
Microservices need to support many programming languages, requiring both a language-agnostic network protocol and a polyglot runtime environment. In addition, microservices written in one language may need to use APIs written in some other language. Using the MicroProfile conference sample architecture implemented as a polyglot solution (Java, JavaScript, Python) on GraalVM, this presentation demonstrates how MicroProfile JWT, MicroProfile Metrics, MicroProfile Rest Client, MicroProfile Health Check, and more can provide architecture-level interoperability across concerns. Attendees interested in creating a polyglot solution on GraalVM compatible with MicroProfile will get a demo-heavy introduction with occasional dives into code and leave with read-to-run samples in GitHub.
Reverse engineering and instrumentation of android appsGaurav Lochan
Our product (Little Eye Labs) is a performance monitoring and optimization tool for Android apps.
We wanted to expose detailed network usage information from the app, and we explored binary instrumentation as a way to do this.
The presentation covers many learnings from the process - what are different reverse engineering tools on android, which ones specifically help with instrumentation, and a link to some of the source code from this process.
Philip Shurpik "Architecting React Native app"Fwdays
React Native становится все более зрелым фреймворком для создания кросс платформенных мобильных приложений. Доклад основан на нашем опыте создания production приложения - от архитектуры до тестирования и CI.
Рассмотрим вопрос переиспользования кода при разработке для разных платформ- что и сколько процентов можно переиспользовать и как этого достичь.
Поговорим о том, как можно очень просто сделать offline-first приложение для чтения и создания данных. И чем нам в этом могут помочь Redux и Redux persist.
Разберем, как максимально просто сделать навигацию в приложении.
И, конечно же, какое production приложение без тестирования и continuous integration? Рассмотрим компонентное тестирование с Enzyme и интеграционное с Appium. А также, как максимально приблизить процесс deploy к тому, чему мы привыкли в web, с помощью CodePush.
The Apache Wicket community is working hard to build the new major release of Wicket. One of the tentpole features is the move to Java 8 as a minimum requirement. Why did we do that, and how does this improve my Wicket code? Learn how to apply Java 8 features such as lambdas and the new DateTime API in your Wicket applications, and learn what else the community is creating for your benefit.
With the Tenth Anniversary of Wicket behind us, Wicket is still one of the thriving survivors of the Great Web Framework Wars of the mid 00's. Is there a future for server-side frameworks? In this presentation Martijn Dashorst provides a brief history of Wicket.
With a State of the Wicket, Martijn will look at who is currently using Wicket, the community and current release plans.
The majority of this session will be dedicated to the future of Wicket: does a component oriented, Java web framework have a future in the era of native clients and client side JavaScript frameworks? Martijn will layout the plans of making Wicket more productive for current users, on integrating better with JavaEE technologies and much more.
10 SQL Tricks that You Didn't Think Were PossibleLukas Eder
SQL is the winning language of Big Data. Whether you’re running a classic relational database, a column store (“NewSQL”), or a non-relational storage system (“NoSQL”), a powerful, declarative, SQL-based query language makes the difference. The SQL standard has evolved drastically in the past decades, and so have its commercial and open source implementations.
In this fast-paced talk, we’re going to look at very peculiar and interesting data problems and how we can solve them with SQL. We’ll explore common table expressions, hierarchical SQL, table-valued functions, lateral joins, row value expressions, window functions, and advanced data types, such as XML and JSON. And we’ll look at Oracle’s mysterious MODEL and MATCH_RECOGNIZE clauses, devices whose mystery is only exceeded by their power. Most importantly, however, we’re going to learn that everyone can write advanced SQL. Once you learn the basics in these tricks, you’re going to love SQL even more.
The current state of the Apache Wicket framework in 2014 as presented at the DEVdev meetup held in Deventer, the Netherlands.
- A critique of ThoughtWorks' Technology Review 2014 where they slam JSF (jay) as a concept (nay)
- A look back at 10 years of Wicket
- A review of the current Wicket versions
- An outlook and roadmap for Wicket 7 and Wicket 8
The DEVdev (Deventer Developers) is a new meetup for any developer in the eastern part of the Netherlands (the right side of the IJssel river). This presentation was delivered at the first meetup, and was kindly sponsored by Topicus B.V.
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
Is it possible to write a program that significantly changes its behaviour during the runtime without changing its source code? Have you ever wondered about native TypeScript support in Node.js? Or whether it is possible to write JavaScript code that syntactically feels a lot different but is still valid? The answers to these and a lot of other questions will be discussed in detail in this talk. From the basics of metaprogramming theory to practical examples of its application in enterprise projects. We are going to talk about metalinguistic abstractions, domain-specific languages, and how they can help us solve software engineering problems. We will take a look at how popular frameworks and libraries like React.js, Express.js, Nest.js and Lodash use metaprogramming to develop systems that are used worldwide. Moreover, we will learn how to think in terms of metaprograms and broaden our outlook towards the great world of metasystems.
Java REST API Framework Comparison - UberConf 2021Matt Raible
Use Spring Boot! No, use Micronaut!! Nooooo, Quarkus is the best!!!
There's a lot of developers praising the hottest, and fastest, Java REST frameworks: Micronaut, Quarkus, and Spring Boot. In this session, you'll learn how to do the following with each framework:
✅ Build a REST API
✅ Secure your API with OAuth 2.0
✅ Optimize for production with Docker and GraalVM
I'll also share some performance numbers and pretty graphs to compare community metrics.
Related blog post: https://developer.okta.com/blog/2021/06/18/native-java-framework-comparison
AOTB2014: Agile Testing on the Java PlatformPeter Pilgrim
Creative Commons 2.0 License
Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales (CC BY-NC-SA 2.0 UK)
https://creativecommons.org/licenses/by-nc-sa/2.0/uk/
Share — copy and redistribute the material in any medium or format
Adapt — remix, transform, and build upon the material
The licensor cannot revoke these freedoms as long as you follow the license terms.
This talk about the following:
* TDD
** Is TDD Dead?
** David Heinemeier-Hanson and the controversy
* Java Technology
** If only JUnit tests were this simple
** Java has a some great static analysis tools
** Unfortunatley, these do not work too well in Scala platform
** Guidelines to write tests
* Creative Development in Principle
** Design is a balance
** Inventing your own style
** Avoid lock-in with TDD, use it instead as a design tool
* Scala Technology
** Scala Option
** Function objects
** Pattern matching
** Avoid if and then else and null pointers
* Legacy
** Final advice
This talk was given by Peter Pilgrim, invited speaker to the Agile On The Beach conference on the 5th September, 2014 at Penryn Campus, University of Exeter, Cornwall
Hyper-pragmatic Pure FP testing with distage-testkit7mind
Having a proper test suite can turn ongoing application maintenance and development into pure joy – the best tests check meaningful properties, not the implementation details, and hold no impliict assumptions about their test environment - every test case must be self-contained and portable. To ensure that tests are free of implementation details and environment dependency, we may simply run them in a different test environment, with different implementations of components. But the boileplate and manual work involved in rewiring components, writing hardcoded fixtures and setting up different test environments make this very hard to do at scale. To tackle this problem we've created distage & distage-testkit, distage-testkit gives you the following superpowers:
* ability to easily swap out individual components or entire test environments
* principled & leak-free control of global resources for integration testing – docker containers, DBs, DDLs
* execute effects or allocate resources per-test, e.g. generate random fixtures per-test
* first-class testing of functional effects
* write tests as lambdas – access test fixtures via parameters or ZIO Environment
...and more! We'll also discuss general testing practices and what really distinguishes good tests from great tests.
QA Fest 2018. Adam Stasiak. React Native is Coming – the story of hybrid mobi...QAFest
Main idea of this talk is to show what technologies can be used for cross-platform mobile app development and how to deal with UI tests automation for them. I will outline set of challenges every tester and developer needs to conquer and give some tips how to solve them. During this talk I will present how to apply UI tests in React Native project using Detox framework.
Scala, Functional Programming and Team Productivity7mind
Many engineers spend a lot of time doing repetitive things. In this talk we examine typical productivity issues, which observed in many different companies, and show how to deal with them. We cover:
* Microservices and Monoliths,
* Introspection and Debugging,
* Logging,
* Modular Design,
* Functional Programming,
* RPC and REST,
* Tests and Delivery Pipeline.
This talk is a retrospective of our actions that helped our customer to cut development costs by 50%. We expect our experience to be applicable to most small and medium-sized teams and companies using Scala.
Bytecode manipulation with Javassist for fun and profitJérôme Kehrli
Java bytecode is the form of instructions that the JVM executes.
A Java programmer, normally, does not need to be aware of how Java bytecode works.
Understanding the bytecode, however, is essential to the areas of tooling and program analysis, where the applications can modify the bytecode to adjust the behavior according to the application's domain. Profilers, mocking tools, AOP, ORM frameworks, IoC Containers, boilerplate code generators, etc. require to understand Java bytecode thoroughly and come up with means of manipulating it at runtime.
Each and every of these advanced features of what is nowadays standard approaches when programming with Java require a sound understanding of the Java bytecode, not to mention completely new languages running on the JVM such as Scala or Clojure.
Bytecode manipulation is not easy though ... except with Javassist.
Of all the libraries and tools providing advanced bytecode manipulation features, Javassist is the easiest to use and the quickest to master. It takes a few minutes to every initiated Java developer to understand and be able to use Javassist efficiently. And mastering bytecode manipulation, opens a whole new world of approaches and possibilities.
Talk given at PHP World 2015 about the Hack language released by Facebook. A short history and look at it's key features as well as how Hack and PHP are evolving together.
Many Scala developers nowadays consider using Dependency Injection frameworks an anti-pattern incompatible with modern FP settings. We argue that it's just a consequence of a bad experience with legacy Java runtime reflection-based implementations that lack features important for modern functional programming, such as a first-class support for higher-kinded types. We argue that as a paradigm for structuring purely functional programs, DI with automatic wiring compares favorably against implicits, monad transformers, free monads, algebraic effects, cake pattern et al, enabling scaling and a degree of modularity unachievable by any manual wiring approach. This talk covers DIStage – a transparent, flexible and efficient DI framework for Scala that enables late binding, testability, effect separation and modular resource management at scale, working with, instead of compromising the Scala type system.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Who Needs Thumbs? Reverse Engineering Scramble With FriendsApkudo
Apkudo's AnDevCon III class, "Who Needs Thumbs? Reverse Engineering Scramble With Friends: Part 1" This class was presented on May 15, 2012 by Apkudo's App Analytics Engineer, David Teitelbaum, and CEO, Josh Matthews.
Tek 2013 - Building Web Apps from a New Angle with AngularJSPablo Godel
AngularJS is a new JavaScript framework, backed by Google, for building powerful, complex and rich client-side web applications. We will go over the features and basics of building a web application with AngularJS and we will demonstrate how to communicate with a REST server built with PHP.
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Cyrille Le Clerc
Fast feedback from monitoring is a key of Continuous Delivery. JMX is the right Java API to do so but it unfortunately stayed underused and underappreciated as it was difficult to connect to monitoring and graphing systems.
Throw in the sin bin the poor solutions based on log files and weakly secured web interfaces! A new generation of Open Source tooling makes it easy to graph java application metrics and integrate them to traditional monitoring systems like Nagios.
Following the logic of DevOps, we will look together how best to integrate the monitoring dimension in a project: from design to development, to QA and finally to production on both traditional deployment and in the Cloud.
Come and discover how the JmxTrans-Graphite ticket can make your life easier.
With third party clients connecting to your service you may find that the assumptions or opinions of a typical rails application are not robust enough. We'll run through some key considerations when building an API that will be consumed by a mobile app.
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)Alina Vilk
Украина на Google I/O.
эмоции и впечатления с крупнейшего ежегодного события для всех Google Developerов, презентации с подробностями и фотоотчетами, и девайсы (новый Chromebook, колонку Google Home и Google Pixel).
Creating a single page application is an iterative process, where we should aim for the "good enough" and continuously improve it based on the growing requirements. The current Frontend ecosystem gives us multiple tools that we can employ based on the use cases we might discover on the way. In this presentation, we explain our Vue adventure and development approach with this framework.
WebRTC Standards & Implementation Q&A - All about browser interoperabilityAmir Zmora
Hosting guest speaker Jan-Ivar Bruaroey of Mozilla Firefox WebRTC R&D team and contributor to adapter.js talking about Chrome and Firefox interoperability.
Front End Development for Back End Developers - vJUG24 2017Matt Raible
Are you a backend developer that’s being pushed into front-end development? Are you frustrated with all JavaScript frameworks and build tools you have to learn to be a good UI developer? If so, this session is for you! We’ll explore the tools for frontend development and frameworks too!
Streamed live at 8pm MST on Oct 25, 2017! https://virtualjug.com/vjug24/
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsSimo Ahava
Here's my list of 10 JavaScript (related) concepts that I think all web analysts should understand at least on a basic level. A solid grasp of JavaScript is a base requirement for anyone working with the web browser.
Modern Release Engineering in a Nutshell - Why Researchers should Care!Bram Adams
Invited talk at the Leaders of Tomorrow Symposium of the 23rd IEEE International Conference on Software Analysis, Evolution, and Reengineering (SANER 2016).
The presentation (and its accompanying paper, see http://mcis.polymtl.ca/publications/2016/fose.pdf) explain the basics of release engineering pipelines, common challenges industry is facing as well as pitfalls software engineering researchers are falling into.
Speakers are Bram Adams (MCIS, http://mcis.polymtl.ca) and Shane McIntosh (McGill University, http://shanemcintosh.org).
A video-taped version of the talk will be available soon at https://www.youtube.com/channel/UCL8yG6qpHk7V66l1Jt3aZrA/featured.
Amplify를 통해 클라우드 기반 모바일 앱 개발하기 - 박태성(IDEASAM) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
[AWS Community Day Seoul 2020]
Amplify를 통해 클라우드 기반 모바일 앱 개발하기
- speaker: TaeSeong Park(https://github.com/geoseong)
- demo: https://github.com/geoseong/study-amplify-with-react-native
Serverless is new trend in software development. It’s confusing many developers around the world. In this talk I’ll explain how to build not only crop images or select data from DynamoDB, but build real application, what kind of troubles are we should expect, how to make decision is your task fit into serverless architecture in Python or may be you should use, general approach. How fast serverless applications and more important how to scale it.
A presentation for the Vancouver Island Java User's Group showcasing how Groovy and the Griffon application framework can ease the pain of coding Swing applications.
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Matt Raible
JavaScript MVC Frameworks are all the rage these days. They’ve taken the web development world by storm. This session explores the various features of the three hottest JavaScript MVC frameworks: AngularJS, Ember.js and React.js. It also compares client-side templating vs. server-side templating and how well each framework supports Isomorphic JavaScript (code that can run both client-side and server-side). Finally, it ranks each framework on 10 different criteria using Yevgeniy Brikman’s framework scorecard.
Video on InfoQ: https://www.infoq.com/presentations/comparing-angular-ember-react
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39NIjLV.
Akhilesh Gupta does a technical deep-dive into how Linkedin uses the Play/Akka Framework and a scalable distributed system to enable live interactions like likes/comments at massive scale at extremely low costs across multiple data centers. Filmed at qconlondon.com.
Akhilesh Gupta is the technical lead for LinkedIn's Real-time delivery infrastructure and LinkedIn Messaging. He has been working on the revamp of LinkedIn’s offerings to instant, real-time experiences. Before this, he was the head of engineering for the Ride Experience program at Uber Technologies in San Francisco.
Next Generation Client APIs in Envoy MobileC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2x0Fav8.
Jose Nino guides the audience through the journey of Mobile APIs at Lyft. He focuses on how the team has reaped the benefits of API generation to experiment with the network transport layer. He also discusses recent developments the team has made with Envoy Mobile and the roadmap ahead. Filmed at qconlondon.com.
Jose Nino works as a Software Engineer at Lyft.
Software Teams and Teamwork Trends Report Q1 2020C4Media
How do we cope with an environment that has been radically disrupted, where people are suddenly thrust into remote work in a chaotic state? What are the emerging good practices and new ideas that are shaping the way in which software development teams work? What can we do to make the workplace a more secure and diverse one while increasing the productivity of our teams? This report aims to assist technical leaders in making mid- to long-term decisions that will have a positive impact on their organisations and teams and help individual contributors find the practices, approaches, tools, techniques, and frameworks that can help them get a better experience at work - irrespective of where they are working from.
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2QCmmJ0.
Mark Stoodley examines some of the strengths and weaknesses of the different Java compilation technologies, if one was to apply them in isolation. Stoodley discusses how production JVMs are assembling a combination of these tools that work together to provide excellent performance across the large spectrum of applications written in Java and JVM based languages. Filmed at qconsf.com.
Mark Stoodley joined IBM Canada to build Java JIT compilers for production use and led the team that delivered AOT compilation in the IBM SDK for Java 6. He spent the last five years leading the effort to open source nearly 4.3 million lines of source code from the IBM J9 Java Virtual Machine to create the two open source projects Eclipse OMR and Eclipse OpenJ9, and now co-leads both projects.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2y2yPiS.
Colin McCabe talks about the ongoing effort to replace the use of Zookeeper in Kafka: why they want to do it and how it will work. He discusses the limitations they have found and how Kafka benefits both in terms of stability and scalability by bringing consensus in house. He talks about their progress, what work is remaining, and how contributors can help. Filmed at qconsf.com.
Colin McCabe is a Kafka committer at Confluent, working on the scalability and extensibility of Kafka. Previously, he worked on the Hadoop Distributed Filesystem and the Ceph Filesystem.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2SXXXiD.
Katharina Probst talks about what it means to act like an owner and why teams need ownership to be high-performing. When team members, regardless of whether they have a formal leadership role or not, act like owners, magical things can happen. She shares ideas that we can apply to our own work, and talks about how to recognize when we don’t live up to our own expectations of acting like an owner. Filmed at qconsf.com.
Katharina Probst is a Senior Engineering Leader, Kubernetes & SaaS at Google. Before this, she was leading engineering teams at Netflix, being responsible for the Netflix API, which helps bring Netflix streaming to millions of people around the world. Prior to joining Netflix, she was in the cloud computing team at Google, where she saw cloud computing from the provider side.
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2T04Lw4.
Sergey Kuksenko talks about the performance benefits inline types bring to Java and how to exploit them. Inline/value types are the key part of experimental project Valhalla, which should bring new abilities to the Java language. Filmed at qconsf.com.
Sergey Kuksenko is a Java Performance Engineer at Oracle working on a variety of Java and JVM performance enhancements. He started working as Java Engineer in 1996 and as Java Performance Engineer in 2005. He has had a passion for exploring how Java works on modern hardware.
Do you need service meshes in your tech stack?
This on-line guide aims to answer pertinent questions for software architects and technical leaders, such as: what is a service mesh?, do I need a service mesh?, how do I evaluate the different service mesh offerings? In software architecture, a service mesh is a dedicated infrastructure layer for facilitating service-to-service communications between microservices, often using a sidecar proxy.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2UgQ3BU.
Christie Wilson describes what to expect from CI/CD in 2019, and how Tekton is helping bring that to as many tools as possible, such as Jenkins X and Prow. Wilson talks about Tekton itself and performs a live demo that shows how cloud native CI/CD can help debug, surface and fix mistakes faster. Filmed at qconsf.com.
Christie Wilson is a software engineer at Google, currently leading the Tekton project. Over the past decade, she has worked in the mobile, financial and video game industries. Prior to working at Google she led a team of software developers to build load testing tools for AAA video game titles, and founded the Vancouver chapter of PyLadies.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2S7lDiS.
Sasha Rosenbaum shows how a CI/CD pipeline for Machine Learning can greatly improve both productivity and reliability. Filmed at qconsf.com.
Sasha Rosenbaum is a Program Manager on the Azure DevOps engineering team, focused on improving the alignment of the product with open source software. She is a co-organizer of the DevOps Days Chicago and the DeliveryConf conferences, and recently published a book on Serverless computing in Azure with .NET.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/36epVKg.
Todd Montgomery discusses the techniques and lessons learned from implementing Aeron Cluster. His focus is on how Raft can be implemented on Aeron, minimizing the network round trip overhead, and comparing single process to a fully distributed cluster. Filmed at qconsf.com.
Todd Montgomery is a networking hacker who has researched, designed, and built numerous protocols, messaging-oriented middleware systems, and real-time data systems, done research for NASA, contributed to the IETF and IEEE, and co-founded two startups. He currently works as an independent consultant and is active in several open source projects.
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2FWc5Sk.
Ben Sigelman talks about "Deep Systems", their common properties and re-introduces the fundamentals of control theory from the 1960s, including the original conceptualizations of Observability & Controllability. He uses examples from Google & other companies to illustrate how deep systems have damaged people's ability to observe software, and what needs to be done in order to regain control. Filmed at qconsf.com.
Ben Sigelman is a co-founder and the CEO at LightStep, a co-creator of Dapper (Google’s distributed tracing system), and co-creator of the OpenTracing and OpenTelemetry projects (both part of the CNCF). His work and interests gravitate towards observability, especially where microservices, high transaction volumes, and large engineering organizations are involved.
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39SddUL.
Victor Dibia provides a friendly introduction to machine learning, covers concrete steps on how front-end developers can create their own ML models and deploy them as part of web applications. He discusses his experience building Handtrack.js - a library for prototyping real time hand tracking interactions in the browser. Filmed at qconsf.com.
Victor Dibia is a Research Engineer with Cloudera’s Fast Forward Labs. Prior to this, he was a Research Staff Member at the IBM TJ Watson Research Center, New York. His research interests are at the intersection of human computer interaction, computational social science, and applied AI.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2s9T3Vl.
Colin Eberhardt looks at some of the internals of WebAssembly, explores how it works “under the hood”, and looks at how to create a (simple) compiler that targets this runtime. Filmed at qconsf.com.
Colin Eberhardt is the Technology Director at Scott Logic, a UK-based software consultancy where they create complex application for their financial services clients. He is an avid technology enthusiast, spending his evenings contributing to open source projects, writing blog posts and learning as much as he can.
User & Device Identity for Microservices @ Netflix ScaleC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2S9tOgy.
Satyajit Thadeshwar provides useful insights on how Netflix implemented a secure, token-agnostic, identity solution that works with services operating at a massive scale. He shares some of the lessons learned from this process, both from architectural diagrams and code. Filmed at qconsf.com.
Satyajit Thadeshwar is an engineer on the Product Edge Access Services team at Netflix, where he works on some of the most critical services focusing on user and device authentication. He has more than a decade of experience building fault-tolerant and highly scalable, distributed systems.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2Ezs08q.
Justin Ryan talks about Netflix’ scalability issues and some of the ways they addressed it. He shares successes they’ve had from unintuitively partitioning computation into multiple services to get better runtime characteristics. He introduces us to useful probabilistic data structures, innovative bi-directional data passing, open-source projects available from Netflix that make this all possible. Filmed at qconsf.com.
Justin Ryan is Playback Edge Engineering at Netflix. He works on some of the most critical services at Netflix, specifically focusing on user and device authentication. Years of building developer tools has also given him a healthy set of opinions on developer productivity.
Make Your Electron App Feel at Home EverywhereC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2Z4ZJjn.
Kilian Valkhof discusses the process of making an Electron app feel at home on all three platforms: Windows, MacOS and Linux, making devs aware of the pitfalls and how to avoid them. Filmed at qconsf.com.
Kilian Valkhof is a Front-end Developer & User-experience Designer at Firstversionist. He writes about various topics, from design to machine learning, on his personal website, kilianvalkhof.com and is a frequent contributer to open source software. He is part of the Electron governance team that oversees the development of the Electron framework.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/344PnB1.
Steve Klabnik goes over the deep details of how async/await works in Rust, covering concepts like coroutines, generators, stack-less vs stack-ful, "pinning", and more. Filmed at qconsf.com.
Steve Klabnik is on the core team of Rust, leads the documentation team, and is an author of "The Rust Programming Language." He is a frequent speaker at conferences and is a prolific open source contributor, previously working on projects such as Ruby and Ruby on Rails.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2OUz6dt.
Chris Riccomini talks about the current state-of-the-art in data pipelines and data warehousing, and shares some of the solutions to current problems dealing with data streaming and warehousing. Filmed at qconsf.com.
Chris Riccomini works as a Software Engineer at WePay.
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2rm4hFD.
Yevgeniy Brikman talks about how to write automated tests for infrastructure code, including the code written for use with tools such as Terraform, Docker, Packer, and Kubernetes. Topics covered include: unit tests, integration tests, end-to-end tests, dependency injection, test parallelism, retries and error handling, static analysis, property testing and CI / CD for infrastructure code. Filmed at qconsf.com.
Yevgeniy Brikman is the co-founder of Gruntwork, a company that provides DevOps as a Service. He is the author of two books published by O'Reilly Media: Hello, Startup and Terraform: Up & Running. Previously, he worked as a software engineer at LinkedIn, TripAdvisor, Cisco Systems, and Thomson Financial.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
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.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
Leading Change strategies and insights for effective change management pdf 1.pdf
Functional Reactive Programming in the Netflix API
1. Functional Reactive Programming
in the Netflix API
Ben Christensen
Software Engineer – API Platform at Netflix
@benjchristensen
http://www.linkedin.com/in/benjchristensen
http://techblog.netflix.com/
QCon London – March 6 2013
onsdag den 6. marts 13
2. InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/netflix-functional-rx
3. Presented at QCon London
www.qconlondon.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
5. More than 33 million Subscribers
in more than 50 Countries and Territories
onsdag den 6. marts 13
6. Netflix accounts for 33% of Peak Downstream
Internet Traffic in North America
Netflix subscribers are watching
more than 1 billion hours a month
onsdag den 6. marts 13
7. API traffic has grown from
~20 million/day in 2010 to >2 billion/day
0
500
1000
1500
2000
2010 2011 2012 Today
millionsofAPIrequestsperday
onsdag den 6. marts 13
11. Open API Netflix Devices
API Request Volume by Audience
onsdag den 6. marts 13
12. Netflix API
Dependency A
Dependency D
Dependency G
Dependency J
Dependency M
Dependency P
Dependency B
Dependency E
Dependency H
Dependency K
Dependency N
Dependency Q
Dependency C
Dependency F
Dependency I
Dependency L
Dependency O
Dependency R
onsdag den 6. marts 13
13. /ps3/home
Dependency F
10 Threads
Dependency G
10 Threads
Dependency H
10 Threads
Dependency I
5 Threads
Dependency J
8 Threads
Dependency A
10 Threads
Dependency B
8 Threads
Dependency C
10 Threads
Dependency D
15 Threads
Dependency E
5 Threads
Dependency K
15 Threads
Dependency L
4 Threads
Dependency M
5 Threads
Dependency N
10 Threads
Dependency O
10 Threads
Dependency P
10 Threads
Dependency Q
8 Threads
Dependency R
10 Threads
Dependency S
8 Threads
Dependency T
10 Threads
/android/home
/tv/home
Functional Reactive Dynamic Endpoints
Asynchronous Java API
onsdag den 6. marts 13
14. /ps3/home
Dependency F
10 Threads
Dependency G
10 Threads
Dependency H
10 Threads
Dependency I
5 Threads
Dependency J
8 Threads
Dependency A
10 Threads
Dependency B
8 Threads
Dependency C
10 Threads
Dependency D
15 Threads
Dependency E
5 Threads
Dependency K
15 Threads
Dependency L
4 Threads
Dependency M
5 Threads
Dependency N
10 Threads
Dependency O
10 Threads
Dependency P
10 Threads
Dependency Q
8 Threads
Dependency R
10 Threads
Dependency S
8 Threads
Dependency T
10 Threads
/android/home
/tv/home
Functional Reactive Dynamic Endpoints
Asynchronous Java API
Hystrix
fault-isolation layer
onsdag den 6. marts 13
15. /ps3/home
Dependency F
10 Threads
Dependency G
10 Threads
Dependency H
10 Threads
Dependency I
5 Threads
Dependency J
8 Threads
Dependency A
10 Threads
Dependency B
8 Threads
Dependency C
10 Threads
Dependency D
15 Threads
Dependency E
5 Threads
Dependency K
15 Threads
Dependency L
4 Threads
Dependency M
5 Threads
Dependency N
10 Threads
Dependency O
10 Threads
Dependency P
10 Threads
Dependency Q
8 Threads
Dependency R
10 Threads
Dependency S
8 Threads
Dependency T
10 Threads
/android/home
/tv/home
Functional Reactive Dynamic Endpoints
Asynchronous Java API
onsdag den 6. marts 13
16. RxJava
“a library for composing
asynchronous and event-based
programs using observable
sequences for the Java VM”
A Java port of Rx (Reactive Extensions)
https://rx.codeplex.com (.Net and Javascript by Microsoft)
onsdag den 6. marts 13
17. Do we really need another way of
“managing” concurrency?
onsdag den 6. marts 13
18. Discovery of Rx began with a re-architecture ...
onsdag den 6. marts 13
19. ... that collapsed network traffic into coarse API calls ...
onsdag den 6. marts 13
20. ... that collapsed network traffic into coarse API calls ...
Nested, conditional, parallel execution
onsdag den 6. marts 13
21. ... and we
wanted to allow
anybody to
create endpoints,
not just the
“API Team”
onsdag den 6. marts 13
23. Concurrency without
each engineer reading
and re-reading this ->
(awesome book ... everybody isn’t
going to - or should have to - read
it though, that’s the point)
onsdag den 6. marts 13
24. Owner of API should retain
control of concurrency behavior.
onsdag den 6. marts 13
25. public Data getData();
What if the implementation needs to change
from synchronous to asynchronous?
How should the client execute that method
without blocking? spawn a thread?
Owner of API should retain
control of concurrency behavior.
onsdag den 6. marts 13
26. public void getData(Callback<T> c);
public Future<T> getData();
public Future<List<Future<T>>> getData();
What about ... ?
onsdag den 6. marts 13
39. def
Observable<VideoRating>
getRating(userId,
videoId)
{
//
fetch
the
VideoRating
for
this
user
asynchronously
return
Observable.create({
observer
-‐>
executor.execute(new
Runnable()
{
def
void
run()
{
try
{
VideoRating
rating
=
...
do
network
call
...
observer.onNext(rating)
observer.onCompleted();
}
catch(Exception
e)
{
observer.onError(e);
}
}
})
})
}
Asynchronous Observable with Single Value
onsdag den 6. marts 13
40. def
Observable<VideoRating>
getRating(userId,
videoId)
{
//
fetch
the
VideoRating
for
this
user
asynchronously
return
Observable.create({
observer
-‐>
executor.execute(new
Runnable()
{
def
void
run()
{
try
{
VideoRating
rating
=
...
do
network
call
...
observer.onNext(rating)
observer.onCompleted();
}
catch(Exception
e)
{
observer.onError(e);
}
}
})
})
}
Asynchronous Observable with Single Value
onsdag den 6. marts 13
41. Synchronous Observable with Multiple Values
def
Observable<Video>
getVideos()
{
return
Observable.create({
observer
-‐>
try
{
for(v
in
videos)
{
observer.onNext(v)
}
observer.onCompleted();
}
catch(Exception
e)
{
observer.onError(e);
}
})
}
Caution: This is eager and will always emit all values
regardless of subsequent operators such as take(10)
onsdag den 6. marts 13
42. Synchronous Observable with Multiple Values
def
Observable<Video>
getVideos()
{
return
Observable.create({
observer
-‐>
try
{
for(v
in
videos)
{
observer.onNext(v)
}
observer.onCompleted();
}
catch(Exception
e)
{
observer.onError(e);
}
})
}
Caution: This is eager and will always emit all values
regardless of subsequent operators such as take(10)
onsdag den 6. marts 13
43. Asynchronous Observable with Multiple Values
def
Observable<Video>
getVideos()
{
return
Observable.create({
observer
-‐>
executor.execute(new
Runnable()
{
def
void
run()
{
try
{
for(id
in
videoIds)
{
Video
v
=
...
do
network
call
...
observer.onNext(v)
}
observer.onCompleted();
}
catch(Exception
e)
{
observer.onError(e);
}
}
})
})
}
onsdag den 6. marts 13
44. Asynchronous Observable with Multiple Values
def
Observable<Video>
getVideos()
{
return
Observable.create({
observer
-‐>
executor.execute(new
Runnable()
{
def
void
run()
{
try
{
for(id
in
videoIds)
{
Video
v
=
...
do
network
call
...
observer.onNext(v)
}
observer.onCompleted();
}
catch(Exception
e)
{
observer.onError(e);
}
}
})
})
}
onsdag den 6. marts 13
45. Observable<SomeData> a = getDataA();
Observable<SomeData> b = getDataB();
Observable<SomeData> c = getDataC();
Observable.merge(a, b, c)
.subscribe(
{ element -> println("data: " + element)},
{ exception -> println("error occurred: "
+ exception.getMessage())}
)
Combining via Merge
onsdag den 6. marts 13
46. Observable<SomeData> a = getDataA();
Observable<String> b = getDataB();
Observable<MoreData> c = getDataC();
Observable.zip(a, b, c, {x, y, z -> [x, y, z]})
.subscribe(
{ triple -> println("a: " + triple[0]
+ " b: " + triple[1]
+ " c: " + triple[2])},
{ exception -> println("error occurred: "
+ exception.getMessage())}
)
Combining via Zip
onsdag den 6. marts 13
47. Observable<SomeData> a = getDataA();
Observable<String> b = getDataB();
Observable<MoreData> c = getDataC();
Observable.zip(a, b, c, {x, y, z -> [x, y, z]})
.subscribe(
{ triple -> println("a: " + triple[0]
+ " b: " + triple[1]
+ " c: " + triple[2])},
{ exception -> println("error occurred: "
+ exception.getMessage())}
)
Error Handling
onsdag den 6. marts 13
48. Observable<SomeData> a = getDataA();
Observable<String> b = getDataB();
Observable<MoreData> c = getDataC()
.onErrorResumeNext(getFallbackForDataC());
Observable.zip(a, b, c, {x, y, z -> [x, y, z]})
.subscribe(
{ triple -> println("a: " + triple[0]
+ " b: " + triple[1]
+ " c: " + triple[2])},
{ exception -> println("error occurred: "
+ exception.getMessage())}
)
Error Handling
onsdag den 6. marts 13
50. def Observable getVideos(userId) {
return VideoService.getVideos(userId)
}
Asynchronous request that
returns Observable<Video>
onsdag den 6. marts 13
51. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
}
onsdag den 6. marts 13
52. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
}
Reactive operator on the Observable
that takes the first 10 Video objects
then unsubscribes.
onsdag den 6. marts 13
53. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.map({ Video video ->
// transform video object
})
}
onsdag den 6. marts 13
54. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.map({ Video video ->
// transform video object
})
}
The ‘map’ operator allows transforming
the input value into a different output.
onsdag den 6. marts 13
55. Observable<R>
b
=
Observable<T>.map({
T
t
-‐>
R
r
=
...
transform
t
...
return
r;
})
onsdag den 6. marts 13
56. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
// for each video we want to fetch metadata
def m = video.getMetadata()
.map({ Map<String, String> md ->
// transform to the data and format we want
return [title: md.get("title"),
length: md.get("duration")]
})
// and its rating and bookmark
def b ...
def r ...
})
}
onsdag den 6. marts 13
57. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
// for each video we want to fetch metadata
def m = video.getMetadata()
.map({ Map<String, String> md ->
// transform to the data and format we want
return [title: md.get("title"),
length: md.get("duration")]
})
// and its rating and bookmark
def b ...
def r ...
})
}
We change to ‘mapMany’ which is
like merge(map()) since we will return
an Observable<T> instead of T.
onsdag den 6. marts 13
58. Observable<R>
b
=
Observable<T>.mapMany({
T
t
-‐>
Observable<R>
r
=
...
transform
t
...
return
r;
})
onsdag den 6. marts 13
59. Observable<R>
b
=
Observable<T>.mapMany({
T
t
-‐>
Observable<R>
r
=
...
transform
t
...
return
r;
})
onsdag den 6. marts 13
60. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
// for each video we want to fetch metadata
def m = video.getMetadata()
.map({ Map<String, String> md ->
// transform to the data and format we want
return [title: md.get("title"),
length: md.get("duration")]
})
// and its rating and bookmark
def b ...
def r ...
})
}
Nested asynchronous calls
that return more Observables.
onsdag den 6. marts 13
61. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
// for each video we want to fetch metadata
def m = video.getMetadata()
.map({ Map<String, String> md ->
// transform to the data and format we want
return [title: md.get("title"),
length: md.get("duration")]
})
// and its rating and bookmark
def b ...
def r ...
})
}
Observable<VideoMetadata>
Observable<VideoBookmark>
Observable<VideoRating>
onsdag den 6. marts 13
62. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
// for each video we want to fetch metadata
def m = video.getMetadata()
.map({ Map<String, String> md ->
// transform to the data and format we want
return [title: md.get("title"),
length: md.get("duration")]
})
// and its rating and bookmark
def b ...
def r ...
})
}
Each Observable transforms
its data using ‘map’
onsdag den 6. marts 13
63. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
// for each video we want to fetch metadata
def m = video.getMetadata()
.map({ Map<String, String> md ->
// transform to the data and format we want
return [title: md.get("title"),
length: md.get("duration")]
})
// and its rating and bookmark
def b ...
def r ...
// compose these together
})
}
onsdag den 6. marts 13
64. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
def m ...
def b ...
def r ...
// compose these together
})
}
onsdag den 6. marts 13
65. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
def m ...
def b ...
def r ...
// compose these together
return Observable.zip(m, b, r, {
metadata, bookmark, rating ->
// now transform to complete dictionary
// of data we want for each Video
return [id: video.videoId]
<< metadata << bookmark << rating
})
})
}
onsdag den 6. marts 13
66. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
def m ...
def b ...
def r ...
// compose these together
return Observable.zip(m, b, r, {
metadata, bookmark, rating ->
// now transform to complete dictionary
// of data we want for each Video
return [id: video.videoId]
<< metadata << bookmark << rating
})
})
}
The ‘zip’ operator combines the 3
asynchronous Observables into 1
onsdag den 6. marts 13
67. Observable.zip(a,
b,
{
a,
b,
-‐>
...
operate
on
values
from
both
a
&
b
...
return
[a,
b];
//
i.e.
return
tuple
})
onsdag den 6. marts 13
68. def Observable<Map> getVideos(userId) {
return VideoService.getVideos(userId)
// we only want the first 10 of each list
.take(10)
.mapMany({ Video video ->
def m ...
def b ...
def r ...
// compose these together
return Observable.zip(m, b, r, {
metadata, bookmark, rating ->
// now transform to complete dictionary
// of data we want for each Video
return [id: video.videoId]
<< metadata << bookmark << rating
})
})
}
return a single Map (dictionary)
of transformed and combined data
from 4 asynchronous calls
onsdag den 6. marts 13
71. Takes first 10 then unsubscribes from origin.
Returns Observable<Video> that emits 10 Videos.
onsdag den 6. marts 13
72. For each of the 10 Video objects it transforms
via ‘mapMany’ function that does nested async calls.
onsdag den 6. marts 13
73. For each Video ‘v’ it calls getMetadata()
which returns Observable<VideoMetadata>
These nested async
requests return Observables
that emit 1 value.
onsdag den 6. marts 13
76. The 3 ‘mapped’ Observables are combined with a
‘zip’ function that emits a Map with all data.
onsdag den 6. marts 13
77. The full sequence emits Observable<Map> that
emits a Map for each of 10 Videos.
onsdag den 6. marts 13
78. Client code treats all interactions
with the API as asynchronous
The API implementation chooses
whether something is
blocking or non-blocking
and
what resources it uses.
onsdag den 6. marts 13
79. Example of latency reduction achieved by increasing
number of threads used by Observables.
onsdag den 6. marts 13
80. +
Observable<User>
u
=
new
GetUserCommand(id).observe();
Observable<Geo>
g
=
new
GetGeoCommand(request).observe();
Observable.zip(u,
g,
{user,
geo
-‐>
return
[username:
user.getUsername(),
currentLocation:
geo.getCounty()]
})
RxJava coming to Hystrix
https://github.com/Netflix/Hystrix
onsdag den 6. marts 13
81. <dependency
org="com.netflix.rxjava"
name="rxjava-‐core"
rev="x.y.z"
/>
<dependency
org="com.netflix.rxjava"
name="rxjava-‐groovy"
rev="x.y.z"
/>
<dependency
org="com.netflix.rxjava"
name="rxjava-‐clojure"
rev="x.y.z"
/>
<dependency
org="com.netflix.rxjava"
name="rxjava-‐scala"
rev="x.y.z"
/>
<dependency
org="com.netflix.rxjava"
name="rxjava-‐jruby"
rev="x.y.z"
/>
<dependency>
<groupId>com.netflix.rxjava</groupId>
<artifactId>rxjava-‐core</artifactId>
<version>x.y.z</version>
</dependency>
... or for a different language ...
To get started ...
onsdag den 6. marts 13
82. Functional Reactive in the Netflix API with RxJava
http://techblog.netflix.com/2013/02/rxjava-netflix-api.html
Optimizing the Netflix API
http://techblog.netflix.com/2013/01/optimizing-netflix-api.html
RxJava
https://github.com/Netflix/RxJava
@RxJava
Ben Christensen
@benjchristensen
http://www.linkedin.com/in/benjchristensen
Netflix is Hiring
http://jobs.netflix.com
onsdag den 6. marts 13