Infinit's reactor C++ framework allows developers to program in a natural way without having to deal with complex thread-based flows that decrease maintainability and efficiency.
Persistent storage tailored for containers #dockersummitInfinit
The document discusses persistent storage options tailored for containers. It describes how containers are fast, scalable and flexible but tend to be stateless. A persistent storage solution is needed that can be created and scaled as easily as containers. The Infinit storage platform is introduced as a solution that aggregates local storage from nodes into a single pool and provides APIs. Infinit follows container principles by being easy to create and scale, and working consistently across environments. It uses immutable blocks stored in a distributed hash table with consensus and is customizable.
Infinit's C++ coroutine-based asynchronous framework has been the fundamental brick on top of which the peer-to-peer POSIX-compliant file system has been built.
This document provides an overview of Apache Cassandra and how to deploy it using Docker. It begins with an introduction to Docker fundamentals and the CAP theorem. It then covers Cassandra fundamentals, including its history, users, benefits like scalability and consistency options, and challenges. The document demonstrates writes and reads in Cassandra with different consistency levels. It also discusses data replication strategies and calculating consistency. Finally, it previews a demo of deploying Cassandra with Docker and lists additional resources.
Scaling and Managing Cassandra with docker, CoreOS and PrestoVali-Marius Malinoiu
This document discusses technologies for building scalable distributed applications including Docker for containerization, CoreOS for clustering, and Presto for querying. Docker allows building and sharing portable applications without dependencies. CoreOS uses Etcd for reliable storage, Fleet for service deployment and management, and Flannel for networking containers across machines. Presto is presented as a distributed SQL query engine that can combine data from multiple sources like Hadoop and Cassandra at scale.
Running Cassandra in a docker environment to give you a flexible development environment that uses only a very small set of resources, both locally and with your favorite cloud provider. Lessons learned running Cassandra with a very small set of resources are applicable to both your local development environment and larger, less constrained production deployments.
From http://www.meetup.com/Docker-Santa-Clara/events/232789407/
Persistent storage tailored for containers #dockersummitInfinit
The document discusses persistent storage options tailored for containers. It describes how containers are fast, scalable and flexible but tend to be stateless. A persistent storage solution is needed that can be created and scaled as easily as containers. The Infinit storage platform is introduced as a solution that aggregates local storage from nodes into a single pool and provides APIs. Infinit follows container principles by being easy to create and scale, and working consistently across environments. It uses immutable blocks stored in a distributed hash table with consensus and is customizable.
Infinit's C++ coroutine-based asynchronous framework has been the fundamental brick on top of which the peer-to-peer POSIX-compliant file system has been built.
This document provides an overview of Apache Cassandra and how to deploy it using Docker. It begins with an introduction to Docker fundamentals and the CAP theorem. It then covers Cassandra fundamentals, including its history, users, benefits like scalability and consistency options, and challenges. The document demonstrates writes and reads in Cassandra with different consistency levels. It also discusses data replication strategies and calculating consistency. Finally, it previews a demo of deploying Cassandra with Docker and lists additional resources.
Scaling and Managing Cassandra with docker, CoreOS and PrestoVali-Marius Malinoiu
This document discusses technologies for building scalable distributed applications including Docker for containerization, CoreOS for clustering, and Presto for querying. Docker allows building and sharing portable applications without dependencies. CoreOS uses Etcd for reliable storage, Fleet for service deployment and management, and Flannel for networking containers across machines. Presto is presented as a distributed SQL query engine that can combine data from multiple sources like Hadoop and Cassandra at scale.
Running Cassandra in a docker environment to give you a flexible development environment that uses only a very small set of resources, both locally and with your favorite cloud provider. Lessons learned running Cassandra with a very small set of resources are applicable to both your local development environment and larger, less constrained production deployments.
From http://www.meetup.com/Docker-Santa-Clara/events/232789407/
Container Torture: Run any binary, in any containerDocker, Inc.
Running a container app in the container is easy, attaching a custom app to a running container is a bit trickier. But, what if I wanted to run any arbitrary binary in any arbitrary running container? Common wisdom says it's impossible. Is it ? This talk dives into containers internals, just above the kernel surface and demonstrates that this is, indeed possible. With a bit of C magic and ptrace.
Live migrating a container: pros, cons and gotchasDocker, Inc.
In this talk I will briefly show why you might want to live migrate a container, why you might want to avoid doing this and what can be done instead. The main topic of the talk would to demonstrate why live migrating a container is more complex than live migrating a virtual machines and what can be done with this complexity.
The document discusses Docker, a containerization platform. It begins with an overview of environment issues, virtualization history and containers like LXC. It then covers Docker in depth, highlighting its features like copy-on-write filesystems, image management and easy sharing. Docker is compared favorably to virtual machines for its speed, small size and efficient resource use. Instructions are provided for installing Docker and using basic commands. Finally, related tools like Docker Machine, Compose and Swarm are listed along with additional resources.
This document discusses how to use Docker to containerize and deploy Python web applications. It provides steps to install Docker, build a sample Flask application into a Docker image, run the container locally, and deploy the containerized application to AWS. Key points covered include using Dockerfiles to create images, the Docker index for sharing images, and port mapping when running containers.
This document discusses container monitoring and provides an overview of options for monitoring containers including command line tools, cAdvisor, Docker stats, and sysdig. It outlines some key metrics that are important to monitor like resource usage, network activity, file I/O, errors, application activity, and topology. It then dives deeper into explaining how to use tools like cAdvisor, Docker stats, and sysdig to monitor these metrics and view specific activities within containers. The presenter argues that sysdig provides a more robust monitoring solution that can see inside containers while respecting their isolated and lightweight nature.
In this slide, I briefly introduce the container and how docker implement it, including the image and container itself. also show how docker setup the networking connectivity by default bridge network.
Although we don't use it for the core web application, most other places in Launchpad that have to deal with concurrency issues do it using Twisted. This talk will survey these areas and talk about issues we've found and design patterns we've found helpful.
You Call that Micro, Mr. Docker? How OSv and Unikernels Help Micro-services S...rhatr
OSv is the new open source unikernel technology that combines the power of virtualization and micro-services architecture. This combination allows unmodified applications to be packaged just like Docker containers while at the same time outperform bare-metal deployments. Yes. You've heard it right: for the first time ever we can stop asking the question of how much performance would I lose if I virtualize. OSv lets you ask a different question: how much would my application gain in performance if I virtualize it. This talk will start by looking into the architecture of OSv and the kind of optimizations it makes possible for native, unmodified applications. We will then focus on JVM-specific optimizations and specifically on speedups available to micro-service oriented applications when they are being deployed on OSv.
How to run system administrator recruitment process? By creating platform based on open source parts in just 2 nights! I gave this talk in Poland / Kraków OWASP chapter meeting on 17th October 2013 at our local Google for Entrepreneurs site. It's focused on security and also shows how to create recruitment process in CTF / challenge way.
This story covers mostly security details of this whole platform. There's great chance, that I will give another talk about this system but this time focusing on technical details. Stay tuned ;)
Wanting distributed volumes - Experiences with ceph-dockerEwout Prangsma
Slides of a docker meetup presentation in Cologne (april 28,2016)
The presentation talks about how to run ceph in docker containers and how to use the ceph filesystems for volumes of docker containers in need of persistent storage.
This document discusses how to port Erlang and OTP to run on OSv without forking or executing external processes. Erlang ports allow communication with external processes but rely on forking and executing the port executable. As OSv does not support forking or execution, an alternative approach for Erlang ports is needed. Suggested approaches include using linked-in drivers written as shared objects, NIFs, or a custom in-process protocol to communicate with external processes without forking.
Everything You Need To Know About Persistent Storage in KubernetesThe {code} Team
This document discusses Kubernetes persistent storage options for stateful applications. It covers common use cases that require persistence like databases, messaging systems, and content management systems. It then describes Kubernetes persistent volume (PV), persistent volume claim (PVC), and storage class objects that are used to provision and consume persistent storage. Finally, it compares deployments with statefulsets and covers other volume types like emptyDir, hostPath, daemonsets and their use cases.
Sysdig - Introducing a new definition of MonitoringRamit Surana
Monitoring is an important aspect for any system.Have you been tired of using regular methods of monitoring on your systems ? With the introduction of Linux Containers solutions like Docker, are you searching for solutions that can help you to monitor container based activities ? Then sysdig is a solution that can solve all your problems.
This document summarizes John Griffith's presentation about using Docker volume plugins with OpenStack Cinder block storage. Some key points:
- Griffith developed a Cinder volume plugin for Docker to provide persistent block storage to containers. This allows using existing Cinder backends without vendor lock-in.
- He demonstrated deploying a Swarm cluster on OpenStack using docker-machine and the built-in OpenStack driver. The Cinder plugin was installed on each node to enable volume provisioning.
- As a proof of concept, Griffith deployed a Redis service with a Cinder-backed volume for persistence, and a web frontend service, demonstrating stateful applications in containers with Swarm orchestration and Cinder storage.
The document provides an overview of getting started with Docker. It discusses what Docker is, how containerization differs from virtualization, and how to install Docker. It covers building Docker images using Dockerfiles, the difference between images and containers, and common Docker commands. The document also compares traditional deployment workflows to those using Docker, demonstrating how Docker can help ensure consistency across environments.
Vert.x is an asynchronous event-driven framework that addresses some of the shortcomings of Node.js. It uses a polyglot approach that allows programming in multiple languages instead of just JavaScript. It leverages the multi-threaded JVM to allow both vertical and horizontal scaling. An event bus provides a distributed communication system across processes and into the browser. Worker verticles allow blocking operations to run off the main event loop threads. Shared immutable data structures enable safe sharing of state across instances.
Ansible, Vagrant and Packer are tools that allow you to model production systems on your laptop. This talk was given by Bas Meijer at GOTO Amsterdam 2015. Source code at https://github.com/bbaassssiiee/vagransible
Ceph is a open source , software defined storage excellent and the only ( i would say ) storage backend as a cloud storage. Ceph is the Future of Storage. In this presentation i am explaining ceph and openstack briefly , you would definitely enjoy it.
2015 open storage workshop ceph software defined storageAndrew Underwood
The document provides an overview of Ceph software-defined storage. It begins with an agenda for an Open Storage Workshop and discusses how the storage market is changing and the limitations of current storage technologies. It then introduces Ceph, describing its architecture including RADOS, CephFS, RBD and RGW. Key benefits of Ceph are scalability, low cost, resilience and extensibility. The document concludes with a case study of Australian research universities using Ceph with OpenStack and next steps to building a scalable storage solution.
This thesis describes the implementation of a speech-driven automatic receptionist system for Voxway AB. The receptionist was programmed in VoiceXML and ColdFusion to answer calls for smaller Swedish companies, direct calls to employees based on speech input, and handle errors. A database and website were also developed to allow customization and view call statistics.
Srikanth Yanamala is a System Engineer with 1.8 years of experience in software development using Java/J2EE. He has expertise in the health insurance domain. He is looking for a challenging position that allows him to utilize his technical skills and experience to contribute to career growth. Some of his key skills include Java/J2EE, SQL, Agile methodology, and project management. He is currently working on an E2E portal project for Horizon Blue Cross Blue Shield of New Jersey.
Container Torture: Run any binary, in any containerDocker, Inc.
Running a container app in the container is easy, attaching a custom app to a running container is a bit trickier. But, what if I wanted to run any arbitrary binary in any arbitrary running container? Common wisdom says it's impossible. Is it ? This talk dives into containers internals, just above the kernel surface and demonstrates that this is, indeed possible. With a bit of C magic and ptrace.
Live migrating a container: pros, cons and gotchasDocker, Inc.
In this talk I will briefly show why you might want to live migrate a container, why you might want to avoid doing this and what can be done instead. The main topic of the talk would to demonstrate why live migrating a container is more complex than live migrating a virtual machines and what can be done with this complexity.
The document discusses Docker, a containerization platform. It begins with an overview of environment issues, virtualization history and containers like LXC. It then covers Docker in depth, highlighting its features like copy-on-write filesystems, image management and easy sharing. Docker is compared favorably to virtual machines for its speed, small size and efficient resource use. Instructions are provided for installing Docker and using basic commands. Finally, related tools like Docker Machine, Compose and Swarm are listed along with additional resources.
This document discusses how to use Docker to containerize and deploy Python web applications. It provides steps to install Docker, build a sample Flask application into a Docker image, run the container locally, and deploy the containerized application to AWS. Key points covered include using Dockerfiles to create images, the Docker index for sharing images, and port mapping when running containers.
This document discusses container monitoring and provides an overview of options for monitoring containers including command line tools, cAdvisor, Docker stats, and sysdig. It outlines some key metrics that are important to monitor like resource usage, network activity, file I/O, errors, application activity, and topology. It then dives deeper into explaining how to use tools like cAdvisor, Docker stats, and sysdig to monitor these metrics and view specific activities within containers. The presenter argues that sysdig provides a more robust monitoring solution that can see inside containers while respecting their isolated and lightweight nature.
In this slide, I briefly introduce the container and how docker implement it, including the image and container itself. also show how docker setup the networking connectivity by default bridge network.
Although we don't use it for the core web application, most other places in Launchpad that have to deal with concurrency issues do it using Twisted. This talk will survey these areas and talk about issues we've found and design patterns we've found helpful.
You Call that Micro, Mr. Docker? How OSv and Unikernels Help Micro-services S...rhatr
OSv is the new open source unikernel technology that combines the power of virtualization and micro-services architecture. This combination allows unmodified applications to be packaged just like Docker containers while at the same time outperform bare-metal deployments. Yes. You've heard it right: for the first time ever we can stop asking the question of how much performance would I lose if I virtualize. OSv lets you ask a different question: how much would my application gain in performance if I virtualize it. This talk will start by looking into the architecture of OSv and the kind of optimizations it makes possible for native, unmodified applications. We will then focus on JVM-specific optimizations and specifically on speedups available to micro-service oriented applications when they are being deployed on OSv.
How to run system administrator recruitment process? By creating platform based on open source parts in just 2 nights! I gave this talk in Poland / Kraków OWASP chapter meeting on 17th October 2013 at our local Google for Entrepreneurs site. It's focused on security and also shows how to create recruitment process in CTF / challenge way.
This story covers mostly security details of this whole platform. There's great chance, that I will give another talk about this system but this time focusing on technical details. Stay tuned ;)
Wanting distributed volumes - Experiences with ceph-dockerEwout Prangsma
Slides of a docker meetup presentation in Cologne (april 28,2016)
The presentation talks about how to run ceph in docker containers and how to use the ceph filesystems for volumes of docker containers in need of persistent storage.
This document discusses how to port Erlang and OTP to run on OSv without forking or executing external processes. Erlang ports allow communication with external processes but rely on forking and executing the port executable. As OSv does not support forking or execution, an alternative approach for Erlang ports is needed. Suggested approaches include using linked-in drivers written as shared objects, NIFs, or a custom in-process protocol to communicate with external processes without forking.
Everything You Need To Know About Persistent Storage in KubernetesThe {code} Team
This document discusses Kubernetes persistent storage options for stateful applications. It covers common use cases that require persistence like databases, messaging systems, and content management systems. It then describes Kubernetes persistent volume (PV), persistent volume claim (PVC), and storage class objects that are used to provision and consume persistent storage. Finally, it compares deployments with statefulsets and covers other volume types like emptyDir, hostPath, daemonsets and their use cases.
Sysdig - Introducing a new definition of MonitoringRamit Surana
Monitoring is an important aspect for any system.Have you been tired of using regular methods of monitoring on your systems ? With the introduction of Linux Containers solutions like Docker, are you searching for solutions that can help you to monitor container based activities ? Then sysdig is a solution that can solve all your problems.
This document summarizes John Griffith's presentation about using Docker volume plugins with OpenStack Cinder block storage. Some key points:
- Griffith developed a Cinder volume plugin for Docker to provide persistent block storage to containers. This allows using existing Cinder backends without vendor lock-in.
- He demonstrated deploying a Swarm cluster on OpenStack using docker-machine and the built-in OpenStack driver. The Cinder plugin was installed on each node to enable volume provisioning.
- As a proof of concept, Griffith deployed a Redis service with a Cinder-backed volume for persistence, and a web frontend service, demonstrating stateful applications in containers with Swarm orchestration and Cinder storage.
The document provides an overview of getting started with Docker. It discusses what Docker is, how containerization differs from virtualization, and how to install Docker. It covers building Docker images using Dockerfiles, the difference between images and containers, and common Docker commands. The document also compares traditional deployment workflows to those using Docker, demonstrating how Docker can help ensure consistency across environments.
Vert.x is an asynchronous event-driven framework that addresses some of the shortcomings of Node.js. It uses a polyglot approach that allows programming in multiple languages instead of just JavaScript. It leverages the multi-threaded JVM to allow both vertical and horizontal scaling. An event bus provides a distributed communication system across processes and into the browser. Worker verticles allow blocking operations to run off the main event loop threads. Shared immutable data structures enable safe sharing of state across instances.
Ansible, Vagrant and Packer are tools that allow you to model production systems on your laptop. This talk was given by Bas Meijer at GOTO Amsterdam 2015. Source code at https://github.com/bbaassssiiee/vagransible
Ceph is a open source , software defined storage excellent and the only ( i would say ) storage backend as a cloud storage. Ceph is the Future of Storage. In this presentation i am explaining ceph and openstack briefly , you would definitely enjoy it.
2015 open storage workshop ceph software defined storageAndrew Underwood
The document provides an overview of Ceph software-defined storage. It begins with an agenda for an Open Storage Workshop and discusses how the storage market is changing and the limitations of current storage technologies. It then introduces Ceph, describing its architecture including RADOS, CephFS, RBD and RGW. Key benefits of Ceph are scalability, low cost, resilience and extensibility. The document concludes with a case study of Australian research universities using Ceph with OpenStack and next steps to building a scalable storage solution.
This thesis describes the implementation of a speech-driven automatic receptionist system for Voxway AB. The receptionist was programmed in VoiceXML and ColdFusion to answer calls for smaller Swedish companies, direct calls to employees based on speech input, and handle errors. A database and website were also developed to allow customization and view call statistics.
Srikanth Yanamala is a System Engineer with 1.8 years of experience in software development using Java/J2EE. He has expertise in the health insurance domain. He is looking for a challenging position that allows him to utilize his technical skills and experience to contribute to career growth. Some of his key skills include Java/J2EE, SQL, Agile methodology, and project management. He is currently working on an E2E portal project for Horizon Blue Cross Blue Shield of New Jersey.
The document discusses several key factors for bodybuilding: consuming enough calories and protein daily for muscle growth; eating smaller, more frequent meals to boost insulin levels; including good fats and carbs in the diet; properly timing nutrition around workouts with slow- and fast-digesting carbs and proteins; staying hydrated; using supplements to support gains; and ensuring adequate rest between training sessions to allow for muscle recovery and growth.
This presentation provides an overview of PREIT's strategy and performance over the past three years. It discusses PREIT's focus on improving portfolio quality, strengthening its balance sheet, growing same store NOI, and elevating its position among retail real estate peers. Key highlights include significant reductions in leverage, increases in sales per square foot and occupancy rates, and additions of new retailers. The presentation emphasizes PREIT's concentration of high-quality assets in major markets like Philadelphia and Washington D.C. and its opportunities to drive further growth through redevelopment initiatives.
The document describes an algorithm developed for a road weather information system called CLEAN-ROADS. The algorithm uses open-source tools to forecast road temperatures and inform road maintenance services. It integrates a road weather model called METRo with thermal mapping data and statistical analysis to predict temperatures across entire routes. The resulting decision support system provides customized road weather forecasts to optimize road de-icing and reduce environmental impacts.
Magento 2 and composer; what is composer, what does it do, why is it important with Magento 2? Presented at the Magento 2 Seminar in Utrecht, Netherlands on January 23rd, 2016.
Slides from the April 27th, 2016 Milwaukee Java Meetup held at DigitalMeasures in Milwaukee WI.
Example code and configuration at:
https://github.com/shall11672/mkej-config
https://github.com/shall11672/mkej-configServer
https://github.com/shall11672/mkej-eurekaService
https://github.com/shall11672/mkej-greetingService
https://github.com/shall11672/mkej-menuService
https://github.com/shall11672/mkej-apiGateway
https://github.com/shall11672/mkej-monitoringApplication
This document outlines the benefits of paying a £100 registration fee, which includes full unlimited training, fully managed websites, a personal mentor, support, and the ability to earn residual income in multiple ways. The registration fee provides access to recommend others and earn up to £50 per referral, then £3-5 per month from each referral. With 100 referrals, one could earn up to £5,000, plus £300-500 per month ongoing. Growing a team allows scaling of residual income over time.
Writing Testable Code (for Magento 1 and 2)vinaikopp
The document discusses writing testable code in Magento 1 and 2. It begins by describing assumptions and goals, such as having confidence in deployments and enjoying writing tests. It then discusses what makes code testable, including keeping classes focused on a single purpose/responsibility. The document uses an example Magento module to demonstrate refactoring code from a monolithic observer class to split it into smaller classes separated by purpose. This makes the code easier to test by isolating business logic from entry points like observers. The document advocates extracting business logic from entry points and delegating it to collaborator classes to simplify testing.
Presentation: Marketing Beyond the Website
Best Practices to Build Credibility Through Multichannel Distribution
Presented by: Andrew Meranus, Vice President, Business Development, PR Newswire
Law firms now recognize the growing importance of producing content such as blog posts and engaging on social media to generate new client leads. Given the specialized nature of the legal industry, which is founded on the principles of trust, it is important for communications and marketing executives for law firms to have the right tools in place that ensure their messages gain the maximum amount of exposure among targeted audiences through a multichannel distribution strategy.
The document discusses Magento's presentation layer and block concept. The presentation layer controls user interaction and generates content using blocks, which are units of logically grouped data. Block classes act as data providers for templates and handle fetching data from the service layer. It is recommended that block classes fetch data from the service layer, implement reusable logic, and configure caching. The document also discusses using the customer data section framework to cache pages containing private user data by loading that data asynchronously after page load.
Choosing a Citrix Monitoring Strategy: Key Capabilities and Pitfalls to AvoideG Innovations
Citrix performance monitoring has been gaining a lot of attention and interest. In this presentation, we outline key requirements that any Citrix monitoring solution should support. We analyze the built-in Citrix monitoring tools: Citrix Director, Citrix NetScaler Insight and the Microsoft SCOM management packs and discuss their capabilities and limitations. The need to have at least three different consoles for monitoring a Citrix infrastructure makes monitoring and diagnosis very inefficient. We discuss how the eG Enterprise solution integrates with the built-in Citrix tools and provides 360 degree unified monitoring for a Citrix infrastructure with automated root-cause diagnosis.
The document lists the birthdays of various cities around the world, with dates ranging from June 30 to July 18. Cities celebrating on June 30 include Paris, France and Bucharest, Romania. Cities celebrating on July 1 include Sevilla, Spain, Athens, Greece, and Manila, Philippines. The list continues with over 30 cities across Europe, Asia, Africa, North America, South America, and Oceania celebrating their birthdays on subsequent dates throughout the month of July.
Alyvix provides GUI tools to graphically define every transactions of user interaction flows on any application. Alyvix is able to automate all applications that are in the cloud or on-premises. (e.g. Onlineshop, Citrix etc.). That is because Alyvix is not bolted to application APIs, but it acts as it would sit in front of their interface interacting with them (as a human would do). Alyvix tests the availability of your applications and measures their responsiveness. Hence, Alyvix measures how long transactions take to be accomplished, and reports the performance in HTML pages. Through the integration to your monitoring system (e.g. NetEye, Icinga, Nagios) those outcomes can be tracked. Latency spikes and service downtimes can be clearly recognized from time series charts. Moreover, notification messages and other logics can be set. Alyvix certifies the ongoing quality of IT cloud services highlighting in which location and on whattime they are performing well or worse than expected. With this information, IT operations teams can modulate infrastructure resources and IT clients can check their SLA with providers. Alyvix is a Python-based open source software, which can be easily deployed on Windows 64-bit machines. During his speech, Francesco Melchiori will present the Alyvix features, explain how they can be used to monitor cloud applications and show why they help keeping the quality of your IT services high.
Immutable Deployments with AWS CloudFormation and AWS LambdaAOE
This document describes an immutable infrastructure approach using AWS Lambda and CloudFormation. Key points:
- Infrastructure is defined as code using CloudFormation templates for reproducibility and versioning.
- Lambda functions are used to provision resources, configure settings, run tests, and clean up resources to enforce immutability.
- A pipeline handles building AMIs, deploying stacks, testing, updating DNS, and deleting old stacks in an automated and repeatable way.
Omnichannel Customer Experience. Companies such as Amazon, Facebook, Google, Apple already know that the future of user experience is automated interface creation depending on customer needs.
Ashish Kumar Pandey is seeking a career to improve his skills and make creative contributions to society. He has a B.E. in Electronics and Communication Engineering from Bansal Institute of Research Technology & Science. His academic projects include an optimized and energy efficient air cooling system that reduces electricity and water consumption without affecting cooling. He has experience with embedded systems and languages like C, C++, and SQL.
O documento discute três tipos de paisagens: paisagens naturais, onde predominam elementos naturais; paisagens humanizadas ou culturais, onde predominam elementos construídos pelo homem; e paisagens preservadas, protegidas pelo Estado. Também aborda como o homem transforma a paisagem através da agricultura e como essas transformações podem causar danos ambientais.
"You Don't Know NODE.JS" by Hengki Mardongan Sihombing (Urbanhire)Tech in Asia ID
Hengki Sihombing is the Co-Founder and CTO Urbanhire, a technology company who provides Software as a Service (SaaS) for Hiring and Recruitment and also Job search agregator for jobseeker.
Before founding Urbanhire, Hengki had over 10 years of professional experience in software development in companies like: OLX, Wego, Merah Putih Inc, GushCloud. Hengki also actively participates in various Technology communities. He founded and leads the JakartaJS Community with more than 1900 Members.
***
This slide was shared at Tech in Asia Product Development Conference 2017 (PDC'17) on 9-10 August 2017.
Get more insightful updates from TIA by subscribing techin.asia/updateselalu
This document discusses evented programming in Node.js and Ruby. It explains that evented programming uses callbacks and asynchronous non-blocking I/O. Node.js uses this approach to improve concurrency over blocking I/O models. Ruby can also implement evented programming using libraries like EventMachine that provide asynchronous abstractions while keeping app code procedural. The document provides examples of building evented applications in both languages.
Eitaro Fukamachi presented on writing the fast web server Woo in Common Lisp. He discussed three tactics for achieving speed: using a multithreaded event-driven architecture instead of prefork, developing a fast HTTP parser instead of regular expressions, and using the libev event library. Benchmarks showed Woo was 1.6 times faster than Node.js. The goal was to create the fastest HTTP server in Common Lisp.
Google's Go is a relatively new systems programming language that has recently gained a lot of traction with developers. It brings together the ease and efficiency of development in modern interpreted languages like Python, Perl, and Ruby with the efficiency and safety of a statically typed, compiled language like C/C++ and Java.
On top of that, Go is a language built for modern hardware and problems. With built-in support for concurrency, programmers can easily build software to scale up to today's many-core beasts. Programming in Go is really nice, and in this tutorial, you will learn why.
We will cover an introduction to the Go programming language, and together we will build a multi-user network service demonstrating all of the major principles of programming in Go.
This document provides an introduction to Node.js, a framework for building scalable server-side applications with asynchronous JavaScript. It discusses what Node.js is, how it uses non-blocking I/O and events to avoid wasting CPU cycles, and how external Node modules help create a full JavaScript stack. Examples are given of using Node modules like Express for building RESTful APIs and Socket.IO for implementing real-time features like chat. Best practices, limitations, debugging techniques and references are also covered.
The Evolution of Async-Programming on .NET Platform (.Net China, C#)jeffz
This document discusses the evolution of asynchronous programming on the .NET platform. It covers early approaches using Begin/End methods and event-based patterns in .NET 1.0. It then discusses improvements with yield in .NET 2.0/C# 2.0 and async workflows in F# for .NET 3.0. It also covers the Reactive Framework for .NET 4.0 which treats asynchronous computations as push-based collections. Finally, it discusses potential future improvements in C# vNext.
Writing concurrent program is hard; maintaining concurrent program even is a nightmare. Actually, a pattern which helps us to write good concurrent code is available, that is, using “channels” to communicate.
This talk will share the channel concept with common libraries, like threading and multiprocessing, to make concurrent code elegant.
It's the talk at PyCon TW 2017 [1] and PyCon APAC/MY 2017 [2].
[1]: https://tw.pycon.org/2017
[2]: https://pycon.my/pycon-apac-2017-program-schedule/
This document discusses using message queues and AMQP for real-time system performance monitoring and job queuing. It describes how message queues allow producers and consumers to communicate asynchronously. The author details their experience building a job server using RabbitMQ, Catalyst, and Web::Hippie to queue and monitor long-running jobs. While the system is still a work in progress, all the major components are there and it is in use in production.
Talk presented by Aarón Fas & Andrés Viedma at the JBcnConf 2015.
'Microservices' is one of the most popular buzzwords in the industry now, but are they really a step forward? Or they might be more a problem than a solution? When are they really helpful? How should they be addressed? What challenges will we face if we decide to implement a microservices based architecture?
One year ago, Tuenti moved from a monolithic PHP backend to a Java + PHP microservices architecture. In this talk, we'll share our experiences so far: how we addressed the change, how we implemented it, why we think it's been valuable for us (and how is that related to the company culture), why it might not be a good idea for your company / application and, mostly, what lessons we have learned from this experience.
Creating responsive and interactive web applications has always been one of my hidden dreams. One of the biggest show stopper has been the communication between server and clients. The rise of websockets now open some space for a brand new kind of applications; but we need a library that makes things 'easy' for us and that is able to fall back on previous solutions when the latest technologies are not available.
Suddenly on the ASP.NET scene appears SignalR: a persistence connection abstraction library that helps ASP.NET developers deal with 'real time' client-server communication sceneries.
Node.js is an event-driven I/O platform for JavaScript that allows non-blocking, asynchronous code for building scalable network applications. It uses an event loop model that handles concurrent connections efficiently by doing useful work on the CPU when waiting for I/O operations to complete. Node.js comes with a package manager (NPM) and a rich ecosystem of modules. It is well-suited for real-time applications due to its asynchronous and non-blocking nature which allows for high throughput and scalability.
This document discusses Lattice, an open source Platform as a Service (PaaS) that was born from CloudFoundry. Lattice aims to make deploying and running containerized workloads easy through features like easy installation, clustering, scheduling, self-healing, load balancing, and log aggregation. The document provides an overview of Lattice's architecture and components like Diego for scheduling and X-Ray for visualization. It also demonstrates how to deploy Docker images and buildpacks, submit custom workloads, configure routing, and view logs using Lattice.
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangLyon Yang
This is a light training/presentation talk.
My name is Lyon Yang and I am an IoT hacker. I live in sunny Singapore where IoT is rapidly being deployed – in production. This walkthrough will aim to shed light on the subject of IoT, from finding vulnerabilities in IoT devices to getting shiny hash prompts.
Our journey starts with a holistic view of IoT security, the issues faced by IoT devices and the common mistakes made by IoT developers. Things will then get technical as we progress into a both ARM and MIPS exploitation, followed by a ‘hack-along-with-us’ workshop where you will be exploiting a commonly found IoT daemon. If you are new to IoT or a seasoned professional you will likely learn something new in this workshop.
https://www.iotvillage.org/#schedule
Sadayuki Furuhashi created Kumofs, a distributed key-value store, and MessagePack, a cross-language object serialization library. Kumofs is optimized for low latency with zero-hop reads and no single points of failure. It scales out linearly as servers are added without impacting applications. MessagePack is a compact binary format like JSON used for cross-language communication. MessagePack-RPC is a cross-language messaging library that uses an asynchronous, pipelined protocol over an event-driven I/O model.
- Sadayuki Furuhashi is a computer science student at the University of Tsukuba who created Kumofs, a distributed key-value store, and MessagePack, a cross-language communication library.
- Kumofs is optimized for low-latency and scalability through a consistent hashing algorithm and dynamic rebalancing without impacting applications. It has no single point of failure.
- MessagePack is a compact binary serialization format like JSON used for fast cross-language communication. MessagePack-RPC builds on this to enable asynchronous, pipelined RPC between languages.
"WTF is Twisted? (or; owl amongst the ponies)" is a talk that introduces the Twisted asynchronous programming framework, how it works, and what uses it.
This document summarizes the Boost Asio library for asynchronous network programming in C++. It introduces sockets and the Boost Asio programming model using an io_service object and asynchronous I/O functions. Key challenges to scaling synchronous network I/O are discussed, along with how asynchronous I/O addresses these issues using callbacks without blocking. The document also describes Boost coroutines as an alternative approach to asynchronous I/O that preserves context across callbacks through cooperative yielding.
Similar to Highly concurrent yet natural programming (20)
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...kalichargn70th171
In today's business landscape, digital integration is ubiquitous, demanding swift innovation as a necessity rather than a luxury. In a fiercely competitive market with heightened customer expectations, the timely launch of flawless digital products is crucial for both acquisition and retention—any delay risks ceding market share to competitors.
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfVALiNTRY360
Salesforce Healthcare CRM, implemented by VALiNTRY360, revolutionizes patient management by enhancing patient engagement, streamlining administrative processes, and improving care coordination. Its advanced analytics, robust security, and seamless integration with telehealth services ensure that healthcare providers can deliver personalized, efficient, and secure patient care. By automating routine tasks and providing actionable insights, Salesforce Healthcare CRM enables healthcare providers to focus on delivering high-quality care, leading to better patient outcomes and higher satisfaction. VALiNTRY360's expertise ensures a tailored solution that meets the unique needs of any healthcare practice, from small clinics to large hospital systems.
For more info visit us https://valintry360.com/solutions/health-life-sciences
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
UI5con 2024 - Bring Your Own Design SystemPeter Muessig
How do you combine the OpenUI5/SAPUI5 programming model with a design system that makes its controls available as Web Components? Since OpenUI5/SAPUI5 1.120, the framework supports the integration of any Web Components. This makes it possible, for example, to natively embed own Web Components of your design system which are created with Stencil. The integration embeds the Web Components in a way that they can be used naturally in XMLViews, like with standard UI5 controls, and can be bound with data binding. Learn how you can also make use of the Web Components base class in OpenUI5/SAPUI5 to also integrate your Web Components and get inspired by the solution to generate a custom UI5 library providing the Web Components control wrappers for the native ones.
What to do when you have a perfect model for your software but you are constrained by an imperfect business model?
This talk explores the challenges of bringing modelling rigour to the business and strategy levels, and talking to your non-technical counterparts in the process.
Malibou Pitch Deck For Its €3M Seed Roundsjcobrien
French start-up Malibou raised a €3 million Seed Round to develop its payroll and human resources
management platform for VSEs and SMEs. The financing round was led by investors Breega, Y Combinator, and FCVC.
14 th Edition of International conference on computer visionShulagnaSarkar2
About the event
14th Edition of International conference on computer vision
Computer conferences organized by ScienceFather group. ScienceFather takes the privilege to invite speakers participants students delegates and exhibitors from across the globe to its International Conference on computer conferences to be held in the Various Beautiful cites of the world. computer conferences are a discussion of common Inventions-related issues and additionally trade information share proof thoughts and insight into advanced developments in the science inventions service system. New technology may create many materials and devices with a vast range of applications such as in Science medicine electronics biomaterials energy production and consumer products.
Nomination are Open!! Don't Miss it
Visit: computer.scifat.com
Award Nomination: https://x-i.me/ishnom
Conference Submission: https://x-i.me/anicon
For Enquiry: Computer@scifat.com
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
YAML crash COURSE how to write yaml file for adding configuring details
Highly concurrent yet natural programming
1. Highly concurrent yet natural
programming
mefyl
quentin.hocquet@infinit.io
Version 1.2
2. Infinit & me
Me
• Quentin "mefyl" Hocquet
• Epita CSI (LRDE) 2008.
• Ex Gostai
• Into language theory
• Joined Infinit early two years ago.
3. Infinit & me
Me
• Quentin "mefyl" Hocquet
• Epita CSI (LRDE) 2008.
• Ex Gostai
• Into language theory
• Joined Infinit early two years ago.
Infinit
• Founded my Julien "mycure" Quintard, Epita SRS 2007
• Based on his thesis at Cambridge
• Decentralized filesystem in byzantine environment
• Frontend: file transfer application based on the technology.
• Strong technical culture
5. Know the difference
Parallel programming
Aims at running two tasks simultaneously. It is a matter of performances.
Concurrent programming
Aims at running two tasks without inter-blocking. It is a matter of behavior.
11. Sequential Concurrent
Know the difference
Parallel
Sequential Concurrent Parallel
CPU usage N N N
Execution time Long Short Shorter
12. Sequential Concurrent
Know the difference
Parallel
Sequential Concurrent Parallel
CPU usage N N N
Execution time Long Short Shorter
Need to run in parallel No No Yes
17. Some programming examples
Video encoding: encode a raw 2GB raw file to mp4.
• CPU bound.
• File chunks can be encoded separately and then merged later.
18. Parallel
Encode
first half
Encode
second half
Sequential
Concurrent
Encode first
half
Encode
second half
Some programming examples
Video encoding: encode a raw 2GB raw file to mp4.
• CPU bound.
• File chunks can be encoded separately and then merged later.
Parallelism is a plus, concurrency doesn't apply.
19. Some programming examples
An IRC server: handle up to 50k IRC users chatting.
• IO bound.
• A huge number of clients that must be handled concurrently and mostly
waiting.
20. Concurrent Parallel
Some programming examples
An IRC server: handle up to 50k IRC users chatting.
• IO bound.
• A huge number of clients that must be handled concurrently and mostly
waiting.
Concurrency is needed, parallelism is superfluous.
21. Know the difference
Parallelism
• Is never needed for correctness.
• Is about performances, not correct behavior.
• Is about exploiting multi-core and multi-CPU architectures.
Concurrent programming
• Can be needed for correctness.
• Is about correct behavior, sometimes about performances too.
• Is about multiple threads being responsive in concurrent.
22. Know the difference
Parallelism
• Is never needed for correctness.
• Is about performances, not correct behavior.
• Is about exploiting multi-core and multi-CPU architectures.
Concurrent programming
• Can be needed for correctness.
• Is about correct behavior, sometimes about performances too.
• Is about multiple threads being responsive in concurrent.
A good video encoding app:
• Encodes 4 times faster on a 4-core CPU. That's parallelism.
23. Know the difference
Parallelism
• Is never needed for correctness.
• Is about performances, not correct behavior.
• Is about exploiting multi-core and multi-CPU architectures.
Concurrent programming
• Can be needed for correctness.
• Is about correct behavior, sometimes about performances too.
• Is about multiple threads being responsive in concurrent.
A good video encoding app:
• Encodes 4 times faster on a 4-core CPU. That's parallelism.
• Has a responsive GUI while encoding. That's concurrency.
24. Who's best ?
If you are parallel, you are concurrent. So why bother ?
25. Who's best ?
If you are parallel, you are concurrent. So why bother ?
• Being parallel is much, much more difficult. That's time, money and
programmer misery.
26. Who's best ?
If you are parallel, you are concurrent. So why bother ?
• Being parallel is much, much more difficult. That's time, money and
programmer misery.
• You can't be efficiently parallel past your hardware limit. Those are system
calls, captain.
28. The sequential echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
}
29. The sequential echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
while (true)
{
std::string line = client.read_until("n");
client.send(line);
}
}
30. The sequential echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
try
{
while (true)
{
std::string line = client.read_until("n");
client.send(line);
}
}
catch (ConnectionClosed const&)
{}
}
31. The sequential echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
serve_client(client);
}
32. The sequential echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
serve_client(client);
}
• Dead simple: you got it instantly. It's natural.
• But wrong: we handle only one client at a time.
• We need ...
33. The sequential echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
serve_client(client);
}
• Dead simple: you got it instantly. It's natural.
• But wrong: we handle only one client at a time.
• We need ... concurrency !
34. The parallel echo server
TCPServer server;
server.listen(4242);
while (true)
{
TCPSocket client = server.accept();
serve_client(client);
}
35. The parallel echo server
TCPServer server;
server.listen(4242);
std::vector<std::thread> threads;
while (true)
{
TCPSocket client = server.accept();
std::thread client_thread(
[&]
{
serve_client(client);
});
client_thread.run();
vectors.push_back(std::move(client_thread));
}
36. The parallel echo server
TCPServer server;
server.listen(4242);
std::vector<std::thread> threads;
while (true)
{
TCPSocket client = server.accept();
std::thread client_thread(
[&]
{
serve_client(client);
});
client_thread.run();
vectors.push_back(std::move(client_thread));
}
• Almost as simple and still natural,
• To add the concurrency property, we just added a concurrency construct
to the existing.
38. But parallelism is too much
• Not scalable: you can't run 50k threads.
• Induces unwanted complexity: race conditions.
39. But parallelism is too much
• Not scalable: you can't run 50k threads.
• Induces unwanted complexity: race conditions.
int line_count = 0;
while (true)
{
TCPSocket client = server.accept();
while (true)
{
std::string line = client.read_until("n");
client.send(line);
++line_count;
}
}
40. But parallelism is too much
• Not scalable: you can't run 50k threads.
• Induces unwanted complexity: race conditions.
int line_count = 0;
while (true)
{
TCPSocket client = server.accept();
std::thread client_thread(
[&]
{
while (true)
{
std::string line = client.read_until("n");
client.send(line);
++line_count;
}
});
}
41. We need concurrency without threads
We need to accept, read and write to socket without threads so without
blocking.
42. We need concurrency without threads
We need to accept, read and write to socket without threads so without
blocking.
• Use select to monitor all sockets at once.
• Register actions to be done when something is ready.
• Wake up only when something needs to be performed.
43. We need concurrency without threads
We need to accept, read and write to socket without threads so without
blocking.
• Use select to monitor all sockets at once.
• Register actions to be done when something is ready.
• Wake up only when something needs to be performed.
This is abstracted with the reactor design pattern:
• libevent
• Boost ASIO
• Python Twisted
• ...
44. The callback-based echo server
Reactor reactor;
TCPServer server(reactor);
server.accept(&handle_connection);
reactor.run();
45. The callback-based echo server
Reactor reactor;
TCPServer server(reactor);
server.accept(&handle_connection);
reactor.run();
void
handle_connection(TCPSocket& client)
{
client.read_until("n", &handle_read);
}
46. The callback-based echo server
Reactor reactor;
TCPServer server(reactor);
server.accept(&handle_connection);
reactor.run();
void
handle_connection(TCPSocket& client);
void
handle_read(TCPSocket& c, std::string const& l, Error e)
{
if (!e)
c.send(l, &handle_sent);
}
48. How do we feel now ?
• This one scales to thousands of client.
49. How do we feel now ?
• This one scales to thousands of client.
• Yet to add the concurrency property, we had to completely change the way
we think.
50. How do we feel now ?
• This one scales to thousands of client.
• Yet to add the concurrency property, we had to completely change the way
we think.
• A bit more verbose and complex, but nothing too bad ... right ?
51. Counting lines with threads
try
{
while (true)
{
std::string line = client.read_until("n");
client.send(line);
}
}
catch (ConnectionClosed const&)
{
}
52. Counting lines with threads
int lines_count = 0;
try
{
while (true)
{
std::string line = client.read_until("n");
++lines_count;
client.send(line);
}
}
catch (ConnectionClosed const&)
{
std::cerr << "Client sent " << lines_count << "linesn";
}
53. Counting lines with callbacks
void
handle_connection(TCPSocket& client)
{
int* count = new int(0);
client.read_until(
"n", std::bind(&handle_read, count));
}
58. Callback-based programming considered harmful
• Code is structured with callbacks.
• Asynchronous operation break the flow arbitrarily.
• You lose all syntactic scoping expression (local variables, closure,
exceptions, ...).
59. Callback-based programming considered harmful
• Code is structured with callbacks.
• Asynchronous operation break the flow arbitrarily.
• You lose all syntactic scoping expression (local variables, closure,
exceptions, ...).
• This is not natural. Damn, this is pretty much as bad as GOTO.
60. Are we screwed ?
Threads
• Respect your beloved semantic and expressiveness.
• Don't scale and introduce race conditions.
61. Are we screwed ?
Threads
• Respect your beloved semantic and expressiveness.
• Don't scale and introduce race conditions.
Callbacks
• Scale.
• Ruins your semantic. Painful to write, close to impossible to maintain.
62. Are we screwed ?
Threads
• Respect your beloved semantic and expressiveness.
• Don't scale and introduce race conditions.
Callbacks
• Scale.
• Ruins your semantic. Painful to write, close to impossible to maintain.
I lied when I said: we need concurrency without threads.
63. Are we screwed ?
Threads
• Respect your beloved semantic and expressiveness.
• Don't scale and introduce race conditions.
Callbacks
• Scale.
• Ruins your semantic. Painful to write, close to impossible to maintain.
I lied when I said: we need concurrency without threads.
We need concurrency without system threads.
65. Coroutines
• Separate execution contexts like system threads.
• Userland: no need to ask the kernel.
• Non-parallel.
• Cooperative instead of preemptive: they yield to each other.
66. Coroutines
• Separate execution contexts like system threads.
• Userland: no need to ask the kernel.
• Non-parallel.
• Cooperative instead of preemptive: they yield to each other.
By building on top of that, we have:
• Scalability: no system thread involved.
• No arbitrary race-conditions: no parallelism.
• A stack, a context: the code is natural.
68. Coroutines-based scheduler
• Make a scheduler that holds coroutines .
• Embed a reactor in there.
• Write a neat Socket class. When read, it:
◦ Unschedules itself.
◦ Asks the reactor to read
◦ Pass a callback to reschedule itself
◦ Yield control back.
85. Mutexes
But you said no race conditions! You lied again!
reactor::Thread t([&] {
while (true)
{
for (auto& socket: sockets)
socket.send("YO");
}
});
{
socket.push_back(...);
}
86. Mutexes
But you said no race conditions! You lied again!
reactor::Mutex mutex;
reactor::Thread t([&] {
while (true)
{
reactor::wait(mutex);
for (auto& socket: sockets)
socket.send("YO");
mutex.unlock();
}
});
{
reactor::wait(mutex);
socket.push_back(...);
mutex.unlock();
}
87. Mutexes
But you said no race conditions! You lied again!
reactor::Mutex mutex;
reactor::Thread t([&] {
while (true)
{
reactor::Lock lock(mutex);
for (auto& socket: sockets)
socket.send("YO");
}
});
{
reactor::Lock lock(mutex);
socket.push_back(...);
}
88. Networking: TCP
We saw a good deal of TCP networking:
try
{
reactor::TCPSocket socket("battle.net", 4242, 10_sec);
// ...
}
catch (reactor::network::ResolutionFailure const&)
{
// ...
}
catch (reactor::network::Timeout const&)
{
// ...
}
89. Networking: TCP
We saw a good deal of TCP networking:
void
serve(TCPSocket& client)
{
try
{
std::string auth = server.read_until("n", 10_sec);
if (!check_auth(auth))
// Impossible with callbacks
throw InvalidCredentials();
while (true) { ... }
}
catch (reactor::network::Timeout const&)
{}
}
99. HTTP streaming
std::string content = reactor::http::get(
"my-api.infinit.io/transactions");
auto json = json::parse(content);
reactor::http::Request r(
"my-api.production.infinit.io/transactions");
assert(r.status() == reactor::http::Status::OK);
// JSON is parsed on the fly;
auto json = json::parse(r);
100. HTTP streaming
std::string content = reactor::http::get(
"my-api.infinit.io/transactions");
auto json = json::parse(content);
reactor::http::Request r(
"my-api.production.infinit.io/transactions");
assert(r.status() == reactor::http::Status::OK);
// JSON is parsed on the fly;
auto json = json::parse(r);
reactor::http::Request r(
"youtube.com/upload", http::reactor::Method::PUT);
std::ifstream input("~/A new hope - BrRIP.mp4");
std::copy(input, r);
101. Better concurrency: futures, ...
std::string transaction_id = reactor::http::put(
"my-api.production.infinit.io/transactions");
// Ask the user files to share.
reactor::http::post("my-api.infinit.io/transaction/", file_list);
std::string s3_token = reactor::http::get(
"s3.aws.amazon.com/get_token?key=...");
// Upload files to S3
102. Better concurrency: futures, ...
std::string transaction_id = reactor::http::put(
"my-api.production.infinit.io/transactions");
// Ask the user files to share.
reactor::http::post("my-api.infinit.io/transaction/", file_list);
std::string s3_token = reactor::http::get(
"s3.aws.amazon.com/get_token?key=...");
// Upload files to S3
reactor::http::Request transaction(
"my-api.production.infinit.io/transactions");
reactor::http::Request s3(
"s3.aws.amazon.com/get_token?key=...");
// Ask the user files to share.
auto transaction_id = transaction.content();
reactor::http::Request list(
"my-api.infinit.io/transaction/", file_list);
auto s3_token = transaction.content();
// Upload files to S3
103. Version 1
Wait meta
Ask files
Wait meta
Wait AWS
Version 2
Ask files
Better concurrency: futures, ...
Version 2
Ask files
104. How does it perform for us ?
• Notification server does perform:
◦ 10k clients per instance
◦ 0.01 load average
◦ 1G resident memory
◦ Cheap monocore 2.5 Ghz (EC2)
105. How does it perform for us ?
• Notification server does perform:
◦ 10k clients per instance
◦ 0.01 load average
◦ 1G resident memory
◦ Cheap monocore 2.5 Ghz (EC2)
• Life is so much better:
◦ Code is easy and pleasant to write and read
◦ Everything is maintainable
◦ Send metrics on login without slowdown? No biggie.
◦ Try connecting to several interfaces and keep the first to respond? No
biggie.