Slides from talk given on May 23, 2016 at the HTML5 Denver Meetup Group.
Angular 2 is now in Release Candidate stage. We will use the new Angular CLI project to generate a new Angular 2 application. Next, we will take a quick tour through the scaffolded application structure. We will discuss how Angular 2 is bootstrapped and how modules are loaded. We will also show how to use the Angular CLI tool to generate a component and build our application.
OpenAPI Generator The Babel Fish of The API World - apidays Live AustraliaCliffano Subagio
The document discusses OpenAPI Generator, an open source code generator library that generates API clients, servers, and documentation from OpenAPI specifications. It supports over 40 programming languages and frameworks. The presentation introduces OpenAPI Generator and its capabilities, provides examples of how it can be used to generate clients for different languages from a single API specification, and discusses the speaker's use cases including SDK generation, infrastructure as code, and performance testing. It encourages contributions to the project and questions.
How to build a tool for operating Flink on KubernetesAndreaMedeghini
Operating Flink on Kubernetes can be challenging. Which products are available? Do we need to build our own tool? Which tool do we need? How do we build it? This presentation provides some ideas how to build a Flink Operator and it contains a link to a proof of concept available on GitHub
A Journey to Improve Infrastructure Compliance With InSpecCliffano Subagio
This document summarizes Cliffano Subagio's presentation on how his company improved infrastructure compliance through the use of InSpec. It describes how they initially had manual compliance checks that were time-consuming. They started using InSpec to automate correctness, readiness, security and compliance tests. This helped find issues early and continuously. They also created custom InSpec profiles and leveraged community profiles. As a result, their delivery pipeline and applications became more secure and compliant.
The document discusses how to create Slack chatbots using JavaScript. It covers using the Botkit framework to build bots that integrate with Slack and can connect to external services like IBM Watson. The presentation shows how to configure bots and Botkit to handle messaging with users in Slack and utilize Watson's Conversation service through Botkit middleware to have natural language conversations. Examples are provided of building bots that can lookup weather and return the current time.
Micro-services are small and independently deployable services, witch programming are you going to choose, Go, Python and C# belong to three different programming language families, let's compare them and choose the right one to develop our micro-service
www.cloudready.club
WebRTC allows for real-time communications directly in the web browser without plugins. It includes APIs for accessing the camera and microphone, establishing peer-to-peer connections, and exchanging arbitrary data. Popular applications of WebRTC include video chat, online gaming, live video streaming, file sharing and remote desktop access. Several startups are building WebRTC-based services for voice and video calling, video collaboration, and social video applications.
The Road to Continuous Delivery - JAX DevOps 2018Tommy Tynjä
Follow on a journey about how a successful Swedish company revamped their organization to implement a completely new distributed system running on the Java platform and using Continuous Delivery. Today, autonomous development teams can push code to production as frequently as they like with fully automated delivery pipelines. We take a look at high-performing teams, their ways-of-working, and the technologies used to deliver quality software at a high pace. We also take a look at the future and what challenges lie ahead.
Presented at JAX DevOps & Finance, London, United Kingdom on April 10th 2018.
Slides from talk given on May 23, 2016 at the HTML5 Denver Meetup Group.
Angular 2 is now in Release Candidate stage. We will use the new Angular CLI project to generate a new Angular 2 application. Next, we will take a quick tour through the scaffolded application structure. We will discuss how Angular 2 is bootstrapped and how modules are loaded. We will also show how to use the Angular CLI tool to generate a component and build our application.
OpenAPI Generator The Babel Fish of The API World - apidays Live AustraliaCliffano Subagio
The document discusses OpenAPI Generator, an open source code generator library that generates API clients, servers, and documentation from OpenAPI specifications. It supports over 40 programming languages and frameworks. The presentation introduces OpenAPI Generator and its capabilities, provides examples of how it can be used to generate clients for different languages from a single API specification, and discusses the speaker's use cases including SDK generation, infrastructure as code, and performance testing. It encourages contributions to the project and questions.
How to build a tool for operating Flink on KubernetesAndreaMedeghini
Operating Flink on Kubernetes can be challenging. Which products are available? Do we need to build our own tool? Which tool do we need? How do we build it? This presentation provides some ideas how to build a Flink Operator and it contains a link to a proof of concept available on GitHub
A Journey to Improve Infrastructure Compliance With InSpecCliffano Subagio
This document summarizes Cliffano Subagio's presentation on how his company improved infrastructure compliance through the use of InSpec. It describes how they initially had manual compliance checks that were time-consuming. They started using InSpec to automate correctness, readiness, security and compliance tests. This helped find issues early and continuously. They also created custom InSpec profiles and leveraged community profiles. As a result, their delivery pipeline and applications became more secure and compliant.
The document discusses how to create Slack chatbots using JavaScript. It covers using the Botkit framework to build bots that integrate with Slack and can connect to external services like IBM Watson. The presentation shows how to configure bots and Botkit to handle messaging with users in Slack and utilize Watson's Conversation service through Botkit middleware to have natural language conversations. Examples are provided of building bots that can lookup weather and return the current time.
Micro-services are small and independently deployable services, witch programming are you going to choose, Go, Python and C# belong to three different programming language families, let's compare them and choose the right one to develop our micro-service
www.cloudready.club
WebRTC allows for real-time communications directly in the web browser without plugins. It includes APIs for accessing the camera and microphone, establishing peer-to-peer connections, and exchanging arbitrary data. Popular applications of WebRTC include video chat, online gaming, live video streaming, file sharing and remote desktop access. Several startups are building WebRTC-based services for voice and video calling, video collaboration, and social video applications.
The Road to Continuous Delivery - JAX DevOps 2018Tommy Tynjä
Follow on a journey about how a successful Swedish company revamped their organization to implement a completely new distributed system running on the Java platform and using Continuous Delivery. Today, autonomous development teams can push code to production as frequently as they like with fully automated delivery pipelines. We take a look at high-performing teams, their ways-of-working, and the technologies used to deliver quality software at a high pace. We also take a look at the future and what challenges lie ahead.
Presented at JAX DevOps & Finance, London, United Kingdom on April 10th 2018.
It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question “How can we validate that our API is working as intended?”
In this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design. I will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.
Kubernetes Operators - the next frontier in application automation - Ádám SándorPROIDEA
This document discusses Kubernetes operators and their use for automating application deployment and management. It provides an overview of operators and how they work as custom controllers using Custom Resource Definitions. Examples are given around using operators to provision and manage databases, continuous integration/delivery pipelines, and other third party applications on Kubernetes clusters.
How to practice TDD without shooting yourself in the footDennis Doomen
The document discusses best practices for test-driven development (TDD), including that unit tests for code should be fast, isolated, repeatable, and run in any order. It recommends writing tests that initially fail for the expected reason, then implementing just enough code to make the test pass and refactoring code. Tests should have a well-defined boundary and avoid technical names or constants. Example code and additional resources on TDD are also referenced.
The document summarizes new features in .NET Framework 4 and C# 4.0. It discusses features like Code Contracts, Managed Extensibility Framework (MEF), Parallel Computing with Task Parallel Library and Parallel LINQ, improvements to the Dynamic Language Runtime (DLR) for dynamic typing, and new features in C# 4.0 like dynamic typing, named and optional parameters, and covariance and contravariance. It also provides contact information for the presenter.
Using cyclomatic complexity to measure code complexityJane Chung
To make sure your code is maintainable and programmer-friendly, you should use CCN to analyze your code complexity.
--
Brought to you by Skygear.io -- an open source development kit for mobile, web & IoT apps.
Find us on Twitter @Oursky
The document discusses the process of continuous delivery which includes source control, building, testing, integrating, deploying, and monitoring applications. It involves pulling source code from version control, building the code through a single command, running automated tests, integrating the built artifacts, deploying the integrated artifacts through automation, and monitoring the applications in production. Continuous delivery aims to make the process of getting code changes to production repeatable, reliable and automated.
Build Great Networked APIs with Swift, OpenAPI, and gRPCTim Burks
This document discusses building APIs with Swift, OpenAPI, and gRPC. It introduces protocol buffers for defining data structures, and gRPC for building APIs. It recommends using the gnostic tool to convert OpenAPI descriptions to protocol buffers for use with gRPC plugins. This allows building high-quality code generators in different languages by separating the generator from the API description parsing. The document provides examples of building gRPC APIs and clients in Swift.
scriptcs - scripted C#, REPL and script extensibilityFilip W
Scriptcs is an open source project that enables a rich C# scripting experience. It allows users to script and execute C# code or use a REPL without needing compilation, projects, or solutions. Scriptcs uses a relaxed C# syntax and provides features like loading scripts and assemblies through directives. It aims to provide a simpler scripting workflow compared to a typical C# development experience that requires setting up projects in an IDE. Scriptcs code can be distributed easily and run on any machine with the scriptcs CLI installed. The documentation provides demonstrations of key scriptcs features and how to extend it through script packs and modules.
GitLab Commit 2020: Ubiquitous quality through continuous testing pipelinesJoseph Lust
Continuous Testing is the crucial ingredient to rapidly deliver quality apps from your GitLab CI/CD pipelines. Rather than weekly or monthly release cycles, you need scalable quality patterns that deliver rapid daily or hourly releases. You need to thoroughly test every commit.
We’ll discuss building powerful continuous testing workflows with GitLab CI/CD pipelines and GitLab’s mabl integration to deliver testing insights on every push, directly into the relevant developer commit or merge request. We’ll review common UI testing patterns you can use from simple page tests to complex end to end application test suites, all running and scaling automatically within your GitLab CI/CD pipelines.
The document discusses using gRPC and Protocol Buffers to build fast and reliable APIs, describing how gRPC uses Protocol Buffers to define service interfaces and handle serialization, and allows building clients and servers in various languages that can communicate over the network through language-independent services. It provides examples of using gRPC to define and call both unary and streaming RPC services from Swift clients and servers.
Erich Gamma at SpringOne Platform 2017VMware Tanzu
The document discusses features of the Visual Studio Code editor including:
- Plugins are implemented in Java and loaded/executed in the main process.
- It is keyboard centric, lightweight, supports many languages, file/folders, code understanding, and debugging.
- Extensions communicate with the editor through the Extension Host using RPC and the extension process is usually implemented in Node.js.
- It supports languages like Java, Rust, TypeScript, C++, and JSON through language servers that communicate using the Language Server Protocol.
Node & Express as Workflow Tools
“Enterprise” and “Node.js” are generally two terms which are rarely seen together, but developing on an (what are considered) “enterprise level” stack doesn’t mean you can’t sneak some Node.js into your workflow. This talk will cover using Node.js, Express, Grunt/Gulp, Commander to build custom workflow tools, mock APIs, and test suites to allow you to maintain sanity while working with more traditional environments. We will cover a simple use case for using Node and Express to smooth Front-end development workflow, and how to package your custom tool as an NPM module for others to install.
Presented live at FITC's Spotlight: MEAN Stacks event held on March 28th, 2014
More info at FITC.ca
This document discusses asynchronous programming in C# using the Async CTP. It explains why asynchronous programming is important for responsive user interfaces and scalable services. It demonstrates how to convert synchronous code to asynchronous using the new async and await keywords in C#, while maintaining a natural code flow. Key aspects of the Task-Based Asynchronous Pattern are outlined, including error handling and progress reporting. The document provides resources for learning more about asynchronous programming in C# and the implementation details of the Async CTP.
This document provides an overview of Angular 2.0 and 4.0. It discusses Angular's history from version 1.x to 2 to 4. Major changes include improved performance, modularization, TypeScript support, and a focus on components over controllers and scopes. The Angular CLI is introduced for scaffolding and building Angular applications. Features that set Angular apart from AngularJS like templates, change detection, and routing are covered. The process of migrating from Angular 2 to 4 is outlined. Demos of Angular as a PWA and with Electron are presented.
Klaus Enzenhofer discusses the importance of using metrics as a common language across development, testing, operations, and customer care teams. He notes that the problem today is communication and that metrics provide an IT language to bridge gaps. The document provides examples of metrics that different teams can measure, such as test failures, test duration, database queries, and error rates. It also shows how metrics can be used to understand customer experience across different channels like mobile apps, websites, and stores.
Trunk Based Development in the Enterprise - Its Relevance and EconomicsPerforce
Paul Hammant of ThoughtWorks runs through the history of the 'Trunk Based Development' branching model, its modern usage in big enterprises, and how management and technical stakeholders can benefit from it, and Perforce in particular, in their enterprise. Takeaways include prerequisites, pitfalls, economics, scaling, and related practices.
This document summarizes a presentation about building backends with Swift. It discusses tools for Swift backend development like Emacs, iTerm, and tmux. It evaluates several Swift frameworks for building backends including Kitura, Perfect, Vapor, and Zewo. It describes implementing the architecture of a test app using concepts from clean architecture. The presentation concludes that Swift code on a Raspberry Pi has some issues but the domain logic can be shared between backend and other code, and building backends with Swift is worth investing in despite current immaturity of the development environment.
The new way to extend VSTS Build and ReleaseJesse Houwing
Extending the new Build and Release features of Visual Studio Team Services (and TFS) helps you turn your scripts into easily re-usable build steps. There are a number of options, from simple scripts to complete custom tasks built using C#, PowerShell or Typescript. We’ll walk through the options and will pros and cons each and quickly walk through the process of building and releasing a custom task to the Visual Studio Marketplace.
The document outlines the stages of an incremental upgrade from VB6 to .NET. It discusses:
1. The 5 stages - from source code translation to verification testing.
2. Prototyping translations by creating .NET class libraries and VB6 stub code.
3. Integrating translations by replacing stub code with assemblies and consolidating shared code.
4. Opportunities for reengineering during the upgrade such as replacing COM and Win32 code.
It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question “How can we validate that our API is working as intended?”
In this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design. I will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.
Kubernetes Operators - the next frontier in application automation - Ádám SándorPROIDEA
This document discusses Kubernetes operators and their use for automating application deployment and management. It provides an overview of operators and how they work as custom controllers using Custom Resource Definitions. Examples are given around using operators to provision and manage databases, continuous integration/delivery pipelines, and other third party applications on Kubernetes clusters.
How to practice TDD without shooting yourself in the footDennis Doomen
The document discusses best practices for test-driven development (TDD), including that unit tests for code should be fast, isolated, repeatable, and run in any order. It recommends writing tests that initially fail for the expected reason, then implementing just enough code to make the test pass and refactoring code. Tests should have a well-defined boundary and avoid technical names or constants. Example code and additional resources on TDD are also referenced.
The document summarizes new features in .NET Framework 4 and C# 4.0. It discusses features like Code Contracts, Managed Extensibility Framework (MEF), Parallel Computing with Task Parallel Library and Parallel LINQ, improvements to the Dynamic Language Runtime (DLR) for dynamic typing, and new features in C# 4.0 like dynamic typing, named and optional parameters, and covariance and contravariance. It also provides contact information for the presenter.
Using cyclomatic complexity to measure code complexityJane Chung
To make sure your code is maintainable and programmer-friendly, you should use CCN to analyze your code complexity.
--
Brought to you by Skygear.io -- an open source development kit for mobile, web & IoT apps.
Find us on Twitter @Oursky
The document discusses the process of continuous delivery which includes source control, building, testing, integrating, deploying, and monitoring applications. It involves pulling source code from version control, building the code through a single command, running automated tests, integrating the built artifacts, deploying the integrated artifacts through automation, and monitoring the applications in production. Continuous delivery aims to make the process of getting code changes to production repeatable, reliable and automated.
Build Great Networked APIs with Swift, OpenAPI, and gRPCTim Burks
This document discusses building APIs with Swift, OpenAPI, and gRPC. It introduces protocol buffers for defining data structures, and gRPC for building APIs. It recommends using the gnostic tool to convert OpenAPI descriptions to protocol buffers for use with gRPC plugins. This allows building high-quality code generators in different languages by separating the generator from the API description parsing. The document provides examples of building gRPC APIs and clients in Swift.
scriptcs - scripted C#, REPL and script extensibilityFilip W
Scriptcs is an open source project that enables a rich C# scripting experience. It allows users to script and execute C# code or use a REPL without needing compilation, projects, or solutions. Scriptcs uses a relaxed C# syntax and provides features like loading scripts and assemblies through directives. It aims to provide a simpler scripting workflow compared to a typical C# development experience that requires setting up projects in an IDE. Scriptcs code can be distributed easily and run on any machine with the scriptcs CLI installed. The documentation provides demonstrations of key scriptcs features and how to extend it through script packs and modules.
GitLab Commit 2020: Ubiquitous quality through continuous testing pipelinesJoseph Lust
Continuous Testing is the crucial ingredient to rapidly deliver quality apps from your GitLab CI/CD pipelines. Rather than weekly or monthly release cycles, you need scalable quality patterns that deliver rapid daily or hourly releases. You need to thoroughly test every commit.
We’ll discuss building powerful continuous testing workflows with GitLab CI/CD pipelines and GitLab’s mabl integration to deliver testing insights on every push, directly into the relevant developer commit or merge request. We’ll review common UI testing patterns you can use from simple page tests to complex end to end application test suites, all running and scaling automatically within your GitLab CI/CD pipelines.
The document discusses using gRPC and Protocol Buffers to build fast and reliable APIs, describing how gRPC uses Protocol Buffers to define service interfaces and handle serialization, and allows building clients and servers in various languages that can communicate over the network through language-independent services. It provides examples of using gRPC to define and call both unary and streaming RPC services from Swift clients and servers.
Erich Gamma at SpringOne Platform 2017VMware Tanzu
The document discusses features of the Visual Studio Code editor including:
- Plugins are implemented in Java and loaded/executed in the main process.
- It is keyboard centric, lightweight, supports many languages, file/folders, code understanding, and debugging.
- Extensions communicate with the editor through the Extension Host using RPC and the extension process is usually implemented in Node.js.
- It supports languages like Java, Rust, TypeScript, C++, and JSON through language servers that communicate using the Language Server Protocol.
Node & Express as Workflow Tools
“Enterprise” and “Node.js” are generally two terms which are rarely seen together, but developing on an (what are considered) “enterprise level” stack doesn’t mean you can’t sneak some Node.js into your workflow. This talk will cover using Node.js, Express, Grunt/Gulp, Commander to build custom workflow tools, mock APIs, and test suites to allow you to maintain sanity while working with more traditional environments. We will cover a simple use case for using Node and Express to smooth Front-end development workflow, and how to package your custom tool as an NPM module for others to install.
Presented live at FITC's Spotlight: MEAN Stacks event held on March 28th, 2014
More info at FITC.ca
This document discusses asynchronous programming in C# using the Async CTP. It explains why asynchronous programming is important for responsive user interfaces and scalable services. It demonstrates how to convert synchronous code to asynchronous using the new async and await keywords in C#, while maintaining a natural code flow. Key aspects of the Task-Based Asynchronous Pattern are outlined, including error handling and progress reporting. The document provides resources for learning more about asynchronous programming in C# and the implementation details of the Async CTP.
This document provides an overview of Angular 2.0 and 4.0. It discusses Angular's history from version 1.x to 2 to 4. Major changes include improved performance, modularization, TypeScript support, and a focus on components over controllers and scopes. The Angular CLI is introduced for scaffolding and building Angular applications. Features that set Angular apart from AngularJS like templates, change detection, and routing are covered. The process of migrating from Angular 2 to 4 is outlined. Demos of Angular as a PWA and with Electron are presented.
Klaus Enzenhofer discusses the importance of using metrics as a common language across development, testing, operations, and customer care teams. He notes that the problem today is communication and that metrics provide an IT language to bridge gaps. The document provides examples of metrics that different teams can measure, such as test failures, test duration, database queries, and error rates. It also shows how metrics can be used to understand customer experience across different channels like mobile apps, websites, and stores.
Trunk Based Development in the Enterprise - Its Relevance and EconomicsPerforce
Paul Hammant of ThoughtWorks runs through the history of the 'Trunk Based Development' branching model, its modern usage in big enterprises, and how management and technical stakeholders can benefit from it, and Perforce in particular, in their enterprise. Takeaways include prerequisites, pitfalls, economics, scaling, and related practices.
This document summarizes a presentation about building backends with Swift. It discusses tools for Swift backend development like Emacs, iTerm, and tmux. It evaluates several Swift frameworks for building backends including Kitura, Perfect, Vapor, and Zewo. It describes implementing the architecture of a test app using concepts from clean architecture. The presentation concludes that Swift code on a Raspberry Pi has some issues but the domain logic can be shared between backend and other code, and building backends with Swift is worth investing in despite current immaturity of the development environment.
The new way to extend VSTS Build and ReleaseJesse Houwing
Extending the new Build and Release features of Visual Studio Team Services (and TFS) helps you turn your scripts into easily re-usable build steps. There are a number of options, from simple scripts to complete custom tasks built using C#, PowerShell or Typescript. We’ll walk through the options and will pros and cons each and quickly walk through the process of building and releasing a custom task to the Visual Studio Marketplace.
The document outlines the stages of an incremental upgrade from VB6 to .NET. It discusses:
1. The 5 stages - from source code translation to verification testing.
2. Prototyping translations by creating .NET class libraries and VB6 stub code.
3. Integrating translations by replacing stub code with assemblies and consolidating shared code.
4. Opportunities for reengineering during the upgrade such as replacing COM and Win32 code.
Nicola Del Gobbo presented on developing Node.js native addons from scratch. Native addons allow integration of C/C++ code and libraries with Node.js for performance benefits. They can be loaded using require() but require special handling to interface with JavaScript. The presentation covered why to use native addons, how to structure a project, asynchronous programming, and interfacing with Node.js objects like EventEmitters and streams. Upcoming N-API will improve compatibility across Node.js versions and platforms.
The Netflix API Platform for Server-Side ScriptingKatharina Probst
Presented at QCon NYC 2016.
The Netflix API is the front-door for almost all device/UI requests from 1000+ device types to the Netflix backends. It serves everything from movie and show recommendations, profile, sign-up, and A/B test related functionality, to bookmarks and licenses for playback.
Because all devices use this API, and because Netflix runs on devices of widely varying sizes and interaction models, it has served us well to enable a platform against which device teams write server-side scripts. Using Netflix as an example, the goal of this talk is to explore situations in which server-side scripting is a good solution for applications. I will describe our first approach, which uses Groovy scripts. I will detail how the scripts are uploaded and can make use of shared modules. This approach allows for high flexibility and performance as well as high developer velocity, at the expense of added risk of injecting scripts into running servers. I will then dive into a new approach that will isolate the scripts into their own containers without compromising the original goals and will allow teams to write scripts in node.js, a language that is more natural for them.
Node.js Native AddOns from zero to hero - Nicola Del Gobbo - Codemotion Rome ...Codemotion
This talk is about creating Node.js interfaces for native libraries written in C or C++. It starts with various situations in which you need to build native addons and the common problems in doing that. I'll discuss the reference provided by the new N-API (Node-API) that helps mantainers to support a wide variety of Node.js releases without needing recompilation or abstraction layers. With all these tools and knowledge I'll show you how to build some addons from scratch and how to convert existing addons using the new N-API. The last part is related to future developments about addons.
Algunas de sus ventajas:
* Es posible desarrollar en las tres principales plataformas del mercado (iOS, Windows Phone y Android), empleando el mismo lenguaje de programación C#, compartiendo hasta un 90% del código.
* Esto, implica un ahorro considerable en tiempo y recursos, ya que nos permite desarrollar en las tres plataformas de una sola vez.
* Poder trabajar Offline
C# - Azure, WP7, MonoTouch and Mono for Android (MonoDroid)Stuart Lodge
The document discusses using C# for cloud and mobile applications. It covers using C# for cloud services on Azure, building C# clients for mobile platforms, and enabling communication between C# cloud services and clients. Several example applications are presented that demonstrate these concepts in practice, including apps for photo sharing, conferences, advertising, and more. The document argues that C# is a good choice due to shared code, performance, tools/libraries, and existing C# skills. It also outlines different architectural approaches from simple to sophisticated for clients and servers.
In a mobile first, cloud first world it is essential to have a powerful framework that is high performant and available on every platform you want to target. That framework is .NET and has expanded to every device imaginable. Whether it is server, web, mobile, wearables, or IoT, .NET is there and fully cross-platform. Developers can now leverage Xamarin to craft native Mobile and Desktop applications from a single shared code base while build backends and websites in .NET Core and ASP.NET Core that can run on any operating system to power them.
Join James Montemagno in a general session focused on how you can leverage your existing .NET and C# skills to build apps for any platform. During this session he will take you through everything you need to get started building apps and a few revolutionary tools to help learn the amazing APIs packed into each platform.
Isomorphic JavaScript applications can share the same code and run on both the front end and back end. It is also a spectrum containing applications that share minimal bits of validation logic with ones that share a bulk of the application code. Nashorn is a new JavaScript engine for Java that was released with Java 8. The Nashorn JavaScript engine makes isomorphic web apps on the JVM possible by allowing the exact same browser code to run on the server. This enables us to achieve the don’t-repeat-yourself (DRY) principle, by reducing repetition in a multitier architecture. This presentation covers the key concepts, rationale, and categories of Isomorphic JavaScript and how it makes your large applications maintainable.
Kiss.ts - The Keep It Simple Software Stack for 2017++Ethan Ram
Fresh thinking and latest technologies making it easier to develop and deploy corporate-grade apps in 2017++.
I presented this session at ISTA and JsTalks conferences in November 2017.
Video of the session is here: https://youtu.be/L0XofS_hZZk
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider.
We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
WebGL games with Minko - Next Game Frontier 2014Minko3D
- Minko is a framework for building 3D applications in C++ that can be deployed to desktops, mobiles, and the web.
- It uses C++ as its core language and Lua for scripting. Applications are compiled to JavaScript using Emscripten to run in HTML5 and WebGL.
- Minko provides 3D graphics and physics engines, file format support, and tools to develop once and deploy everywhere. This allows building complex 3D games and experiences that achieve high performance across platforms.
Node.js is a JavaScript runtime built on Chrome's V8 engine that allows JavaScript code to be run outside of a browser. It introduces asynchronous and event-driven programming to JavaScript. Native addons allow integrating C/C++ code and libraries into Node.js applications for performance reasons or to interface with legacy code. The N-API provides a stable API for building native addons that is compatible across Node.js versions to avoid breakage. Examples demonstrate how to create asynchronous native addons that interface between JavaScript and C++ code.
The Job DSL Plugin: Introduction & What’s NewDaniel Spilker
Learn how to practice configuration as code by using the Job DSL plugin for Jenkins. Find out how to organize Job DSL scripts and apply code reuse and refactoring to your Jenkins configuration. This talk will cover advanced techniques for large scale installations and show how to extend the Job DSL for your favorite plugins.
All the reasons for choosing react js that you didn't know about - Avi Marcus...Codemotion Tel Aviv
ReactJS is a UI library that helps improve development velocity (O(DevTime)) by keeping codebases small and flows unidirectional. It has built-in support for testing and renders views as a pure function of state, making updates efficient and abstractions non-leaky. The document discusses how ReactJS helped reduce one codebase from 175,000 lines to 46,000 lines while also lowering the onboarding time for new members from 2-3 weeks to 1 day. Enemies of development velocity like poor test coverage, complex flows, state management, and leaky abstractions are avoided with React's functional approach.
The document discusses Microsoft's .NET conference and platform. It highlights that .NET Core 2.0 has been released and is available for download. It promotes .NET as being able to build any application for any platform and develop with any programming language. It also emphasizes that .NET sees large growth in active developers and popularity. Additionally, it provides statistics on customer success with .NET and shows how .NET powers a variety of applications and services.
Similar to Onivim 2: Re-architecting for Performance (20)
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfUndress Baby
The quest for the best AI face swap solution is marked by an amalgamation of technological prowess and artistic finesse, where cutting-edge algorithms seamlessly replace faces in images or videos with striking realism. Leveraging advanced deep learning techniques, the best AI face swap tools meticulously analyze facial features, lighting conditions, and expressions to execute flawless transformations, ensuring natural-looking results that blur the line between reality and illusion, captivating users with their ingenuity and sophistication.
Web:- https://undressbaby.com/
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
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.
What is Master Data Management by PiLog Groupaymanquadri279
PiLog Group's Master Data Record Manager (MDRM) is a sophisticated enterprise solution designed to ensure data accuracy, consistency, and governance across various business functions. MDRM integrates advanced data management technologies to cleanse, classify, and standardize master data, thereby enhancing data quality and operational efficiency.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
SOCRadar's Aviation Industry Q1 Incident Report is out now!
The aviation industry has always been a prime target for cybercriminals due to its critical infrastructure and high stakes. In the first quarter of 2024, the sector faced an alarming surge in cybersecurity threats, revealing its vulnerabilities and the relentless sophistication of cyber attackers.
SOCRadar’s Aviation Industry, Quarterly Incident Report, provides an in-depth analysis of these threats, detected and examined through our extensive monitoring of hacker forums, Telegram channels, and dark web platforms.
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Hi ReactiveConf!
My name is Bryan Phelps, and I’m really excited to be here today to talk to you about a code editor I’ve been working on called Onivim. I’m going to share with you today how we re-architected for performance, and not only is it faster, but we were able to get a cleaner application architecture out of it, too!
I’m the founder of a company called outrun labs. Before that, I was working at Microsoft on a variety of cross-platform and web applications.
You can find me on twitter / GitHub / discord as @bryphe.
Here’s an overview of what I’ll be discussing -
First, I’ll give you some quick background on Onivim - just enough so we can talk about the architecture.
Second - I’ll describe our v1 architecture and the challenges we faced.
Finally, I’ll talk about our v2 architecture
So what is Onivim? It’s a code editor - but kind of a niche one. It aims to combine a few different worlds.
Modal editing, like Vim. A modal editor is one that has different “modes” - insert mode is the one we’re used to in every editor from notepad, word, but modal editors have modes specifically for editing and navigating text with just the keyboard.
A fast, beautiful interface - I think Sublime Text is the gold standard - it shows you can have a GUI that’s fast and performant.
Top-tier language support, like VSCode
The vision for Onivim is to take these ideas - bring them together - and ultimately, to be the fastest way to go from thought to codeAlthough there is still a lot of work left - I think our v2 is positioned architecturally to get us there.
I want the fastest way to go from thought to code. A tool works for me, always keeps up, that never makes me wait or takes me out of the flow.
It’s been a journey and we’re not there yet - but for this talk, I’d like to take you on that journey with me and share some my thoughts and learnings. Hopefully, even if you’re not interested in editors or Vim, the architecture pieces will still be interesting. So let’s rewind a bit and talk about the start of the project - our v1.
This is a screenshot of our V1, and it’s really the same goal and vision…
We shipped our v1 as a cross-platform Electron app that met some of these goals. Really the most important outcome for our v1 was I found there was a group of developers who were also interested in this hybrid. We also experimented with some fun ideas - like modal editing and Vim have a deserved reputation for being hard to learn - how can we make that easier?
But it wasn’t perfect. In particular, we struggled with performance. It’s cool to hate on Electron on hacker news and stuff, but the reality is, there were issues that kept us from meeting that goal of being the fastest way to go from thought to code. The target audience - vim users - have a very high bar for performance.
We sort of pursued more and more investments to get the performance that we wanted. We also had bugs around non-determinism with key presses - the worst kind of bugs you can have in an editor - and there was a lot of asynchronicity in our architecture that was complex to manage.
It was really these combination of issues that led me to think about what an alternative architecture could look like. But let’s take a look under the hood at the tech stack of our v1
Electron applications have a main process, which is like an orchestrator, and one or many renderer processes, which manage windows. We also had an extension host node process for running JS plugins, and we used an open-source project called Neovim to handle the Vim-layer modal editing for us.
More information on Neovim: https://neovim.io
Let’s zoom in our renderer process. Inside there, we used a Redux store, we used React for most of the UI, but for the editor surface we used WebGL.
I really like this stack for web applications. Redux + React is kind of a gateway drug to functional programming. And for all the hate Electron gets, the reality is, it’s never been easier for a small team to ship a cross-platform application, and there’s a lot of value in that.
I think the most powerful feature of Electron is not only that its cross-platform, but you can develop cross-platform with confidence - what I mean by that, is I can write my Electron app on one platform, and as long as I don’t use a narrow set of platform-specific APIs, I can be pretty sure it looks and feels the same everywhere and sort of an inherited benefit from the web platform.
However, there were challenges, otherwise this talk wouldn’t be happening.
As we built more and more, the application would get slower to start. And I realized - you don’t really appreciate all that the browser or a JS engine is doing for you - until you profile. So let’s check out the profile.
So the timeline starts at 0.5 seconds - 500 milliseconds. And takes about 3 seconds total to start the application.
For the first second, we’re not rendering anything - just an empty screen.
From there, we finally see a titlebar at the 1 second mark. Then, we start see some UI, but it’s not quite done… we see a brief pop-in of a menu, and then finally our UI is ready.
A second is literally billions of CPU cycles on the hardware I grabbed this profile - an intel i5 - so what is doing with all those cycles?
Well, a lot of loading JavaScript! Our first couple scripts each take around ~300ms to parse and evaluate. The JS engine actually has to load, parse, and it might decide to leave as byte code or go even further to JIT at this time. It’s a lot of work, and it’s a testament to JS engines how quickly they manage to do this. But it is still an appreciable cost.
And coming from languages that C or C++ that are compiled… it’s kind of crazy to me - I’m actually compiling the code with TypeScript, so why does it need to compile again when I run it?
I look around at other applications for inspiration - Vim starts up instantly. Sublime text starts up instantly. Why can’t my app startup that quickly? To me and my users even 2 seconds is too long.
Aside from startup performance, there were several other performance challenges. The main challenge on my mind was responsiveness.
Responsiveness is the time from processing user input to showing the result on screen. Ideally, we should shoot for a maximum of 16ms - which is one frame at 60 frames per second. Games render at this rate, entire 3D scenes - why shouldn’t our editor be able to do that too?
Onivim v1 used Neovim to basically do all the heavy lifting of text manipulation for us - we’d send it a key input, it would get put on an event loop, and we’d get responses back from Neovim - both a list of what changed in the buffer, and what to redraw on the screen.
A specific challenge we had was overhead around asynchronicity. We’d have a key press come in, and then we’d send that to Neovim.
Beyond that, we wanted to render additional things in our buffer - rich adorners, color widgets, minimap, tab indents, and to do that, we needed to know more about the window dimensions. This required at least one but usually more calls to help us map from a buffer position (line and column) to a pixel position on the screen. And we needed to do all these calls within a frame. Our measurements showed some jitter - usually they’d complete in 1ms, but sometimes more… and we’d run into situations where it’d be easy to miss a frame.
Oh, and at the end of all that, we’d have to actually render, which isn’t trivial - and we can’t manage things like sync in the browser.
We actually worked hard on performance.
For startup, we did a lot of the recommended things:
Bundle splitting - so that we don’t have to load all the javascript at once. We can defer some of it.
Async imports - so we could parallelize the JS loading with other operations.
Minification - helps to minimize the work the JS parser has to do - less characters == less work!
For runtime performance, we did a lot too:
-Keystrokes would be sent to a separate process - Neovim - to be handled and come back with an update for the screen. We implemented a ‘typing prediction’ to guess what the result of a keypress would be so we could render immediately. This added complexity though in cases where we guess ‘wrong’.
— We debounced our Redux stores so that updates only came during animation frames. Before that, every state change would trigger a DOM change.
We split up our Redux stores, to reduce the cost of processing updates. We had a big enough state and enough of actions that just the overhead of cloning the JS objects showed up on our profiler.
And it’s true that we stopped short of a few potential optimizations - like pre-compiling byte code for startup. As a very small team, you reach the point of diminishing returns. And I could see additional incremental gains, but not the instant performance that myself and my users want.
In the back of mind, I was thinking - why do we have even have to battle this? Why can’t our desktop app, our technology, be fast by default?
Why is it that we have to work so hard to get startup performance to a couple seconds… when older apps like SublimeText or Notepad++ startup instantly?
And if I look at our architecture from another perspective - the layers - this is what it looks like.
At the bottom - the foundation - you have platform APIs.
On top of that - if you’re using a tool like Electron - you’ve got Node, Chromium, Neovim.
Tons and tons of npm modules - until you get up to React, Redux, and then finally, your application code.
And on top of my application code - in red - is what I’d consider accidental complexity. Things that aren’t core to the application, but stuff we had to get acceptable performance.
What could we do about it, though?
Well for one… we’re using WebGL anyway, why not just cut out the middle-man and remove Electron? We could just use OpenGL directly, or a wrapper like Angle.
If we get rid of Node and Chromium for our core editor, well, we have to figure out we’re going to do with React and NPM dependencies. Hopefully we could replace them with a streamlined set of native dependencies - but preserve the React paradigm.
I also wanted to switch out our input handling to be synchronous, so that we can have better performance and avoid the challenges of synchronizing state across async boundaries. So I wanted to replace our current ‘neovim’ with some sort of Vim state machine that I could feed input and it would handle it synchronously.
Finally… I wanted a tech stack that wouldn’t require me to add all this accidental complexity at the top of this stack to get the performance I wanted.
So I kind of went Konde Marie on the stack, streamlined it, and end up with what would be my ideal architecture, for our desktop app.
What I want is a way to have the React paradigm…. But without any JavaScript. This could help our startup time tremendously if we could somehow didn’t need to do that parsing. Finally, if we had a synchronous model for handling input where we process the input and render immediately without asychronicity - we can meet our responsiveness goals and simplify our state management.
I wanted to keep this React paradigm of your UI as a pure function of your state, just with a more streamlined stack - because I think its great to work with (and… your state as a pure function of your previous state and action).
How do we get there? That was really on my mind. And I didn’t have the answer, in fact, I considered just putting the project on hold, because I didn’t think we could meet our goals with the current tech stack… I thought about switching to C++ or Rust and using a UI framework there - it is a desktop app - maybe Qt— but I’m stubborn, and I’d miss that React-style UI development.
It just so happened, around this time, I learned about an exciting project called Reason.
It’s built by the creator of React - Jordan Walke - imagine if you had a language built for React.
It’s a functional language, but it’s pragmatic - you can do imperative, even OO, have mutable objects, although its geared and optimized for a functional approach - but it means you can be productive quickly without needing to climb an ivory tower of monads and category theory.
It looks like JS, has JSX, and importantly for me… compiles to native code.
(bullet points)
It’s actually not a new language… it’s essentially a wrapper around a language called OCaml, which has been around for a while and has investment from companies like JaneStreet.
This ‘compiles to native code’ aspect is really what can save us on startup performance. Recall from my performance profile - so much time was spent evaluating JavaScript. Well with native code - there’s no evaluation step - you compile directly to machine code!
Around December last year, we started prototyping - what could this editor look like built on Reason?
And this was the very first screenshot we had of the prototyping of our V2. It’s so ugly, the text rendering is horrible, no gamma correction… but we had all the pieces we needed. It makes you appreciate what Electron does - a mature framework on a mature platform, the browser .
We could render text, we could render rectangles, and even icons. All the ingredients for a code editor, the rest is just details.
Revery is a UI and application framework, built on Reason, with React-like concepts, that compiles to native code.
It’s desktop only for now, the main use case is for Onivim 2, but we’d like branch out to mobile.
Let’s take a look at some more code.
This is the simplest, smallest Revery app - simply opens a Window, and renders an empty view. If you squint, it almost looks like JavaScript - but this compiles to native code.
The `App.start` is the entry point, and takes a function that gets passed an app instance. You can think of that like ReactDOM.render, just for a native application.
And with that app instance - you can create a window, and with that window, you can create a UI.
`UI.start` is a lot like `ReactDOM.render` just a native rendition
This is a snippet of source code from our prototype - and this is the top level UI component.
It looks a bit like React - you have compassable components.
We realized some of this stuff could be more general, so we factored it out to a UI framework called Revery.
These are a few other apps built with Revery:
Revery examples: https://github.com/revery-ui/revery
Chesster by @kyldvs: https://github.com/kyldvs/chesster
Camlsynth by @kenwheeler: https://github.com/kenwheeler/camlsynth
So we took Revery, doubled down on our functional approach, and continued building, and we’ve been making steady progress building an app on this stack. It’s still ‘pre-alpha’ but we’re moving forward.
The architecture we landed on was a fast, native code front-end built with Reason. This uses Revery for the UI and application life cycle. We also created a library for Vim, called libvim, which is agnostic of the terminal, and has a synchronous API. Vim itself has a blocking API for input, so we sort of had to invert the input model.
Because the front-end is native code, it really solves our startup issue - we don’t need to load and evaluate JavaScript anymore. This is the goal of our next milestone - to wire this up.
We didn’t get out of the JS game entirely, because we want to leverage VSCode extensions - so we still have a node process, but in the backend, entirely async. And the protocol is designed to be async so it doesn’t impact our front-ends performance. This is our next big goal, to graduate from ‘pre-alpha’ to ‘alpha’ - isto wire this piece up.
But it’s a cool architecture, because we get the benefit of a fast, native front-end while being able to leverage the breadth and power VSCode extensions.
These are point-in-time, ballpark perf numbers for startup - with a small JSON file.
If you didn’t ’t fall asleep yet, you might notice this 5s number is greater than 3.5 s I showed - that’s because it includes other aspects - when you start an electron app, the main process starts first and then kicks off the renderer process - there’s more that happens in the end-to-end flow.
The crazy thing though, is there’s lots of low hanging fruit left for us in the native code world - our drawing layer is wildly inefficient, we’re not even using the ocaml optimizing compiler, there’s blocking I/O on our start path… but it’s still faster.
So I’ll show a quick demo - it’s off master, still very much alpha on this new tech stack- but I’m going to open up oni2’s package.json file and make some changes.
Want to try it yourself? Instructions here to build from source: https://onivim.github.io/docs/for-developers/building
I’m using my favorite VSCode theme, a theme called LaserWave.
Let’s open the key displayer so you can see what I’m doing
I’m going to fix this .ccc extension - I can jump down and use the change in quote command to do quick replacement.
Now I’m eyeing this ‘esy’ block above… I want to move it.
I think this combination of modal editing, first-class language support, and responsiveness is tremendously productive, although modal editing does have a learning curve - and we’re thinking about ways we can lower that.
Everything I’ve been building is standing on the shoulders of others - there is so much great work happening in the OCaml ecosystem, the Reason ecosystem, and I’ve been tremendously appreciative of all the building blocks and investments others have made.
Big thanks to everyone who’s help backed and pre-order the project too and let us dive this deep!
You can support the project by pre-ordering at https://v2.onivim.io
And thanks again everyone for being here and coming to my talk!
Hi ReactiveConf!
My name is Bryan Phelps, and I’m really excited to be here today to talk to you about a code editor I’ve been working on called Onivim. I’m going to share with you today how we re-architected for performance, and not only is it faster, but we were able to get a cleaner application architecture out of it, too!
∫∫