Framework-driven dependency injection, as practiced by many OO programmers, tends to have considerable and underappreciated drawbacks. This talk goes into detail about why.
First impression of the new cloud native programming language ballerinaRichárd Kovács
Ballerina is an event-driven, parallel programming language for networked applications. A compiled, transactional, statically and strongly typed programming language with textual and graphical syntaxes.
A quick overview of tips, tricks and code snippets for developers using Symfony and all its ecosystem, from Monolog to Doctrine. Learn how to become more productive and discover some rarely used options and features.
First impression of the new cloud native programming language ballerinaRichárd Kovács
Ballerina is an event-driven, parallel programming language for networked applications. A compiled, transactional, statically and strongly typed programming language with textual and graphical syntaxes.
A quick overview of tips, tricks and code snippets for developers using Symfony and all its ecosystem, from Monolog to Doctrine. Learn how to become more productive and discover some rarely used options and features.
Rise of the Machines: PHP and IoT - ZendCon 2017Colin O'Dell
The Internet of Things (IoT) is fundamentally changing how we interact with the digital world. In this session we’ll explore the implementation of real examples which bridge the gap between the physical and digital world using PHP: asking Alexa for information within a PHP application; displaying API data on an Arduino-powered display; using PHP to control LEDs on a Raspberry Pi to monitor application uptime; and connecting IR sensors to Slack to see whether a conference room is in use.
Keep hearing about Plack and PSGI, and not really sure what they're for, and why they're popular? Maybe you're using Plack at work, and you're still copying-and-pasting `builder` lines in to your code without really knowing what's going on? What's the relationship between Plack, PSGI, and CGI? Plack from first principles works up from how CGI works, the evolution that PSGI represents, and how Plack provides a user-friendly layer on top of that.
In this presentation, I give an introduction to Windows PowerShell:
- What is it, and how does it work?
- How can you extend it to provide support for administering your own product or project?
NOTES:
1) Some of the text in this presentation is a little small for reading in a 400 pixel flash viewer. I'd recommend downloading the presentation instead.
2) The slides might not make sense without the notes that go with them. I've added the notes as comments to each slide. They still might not make much sense, but that's a different problem :-)
SPIFFE Meetup Tokyo #2 - Attestation Internals in SPIRE - Shingo OmuraPreferred Networks
In SPIRE, attestation is the essential process because it certifies a node or workload, i.e. it asserts the identities of them. This talk describes how SPIRE implement this process and make it flexible. Moreover, it explains the detail of how spire-server and spire-agent (running at a node) interacts in the attestation process.
By using a comprehensive feature-filled framework we can build software fast. On the other hand, by decoupling our applications we can build sofware that is independent of our framework and infrastructure choices, and therefore longer lasting.
We can't do both, is one approach always right?
In this talk we'll look at different decoupling techniques, what problems they solve, and when they make sense. We will learn some concrete techniques to discover where we should be investing in decoupling, and when we should let the framework maintainers do the work for us.
Effective Doctrine2: Performance Tips for Symfony2 DevelopersMarcin Chwedziak
How to boost performance Doctrine2 with Symfony2. How to configure metadata caching? How to optimize DQL queries for caching. How to properly setup transaction demarcation with EntityManager. How to deal with EntityManager and Listeners with Symfony2 container.
Developing applications with Hyperledger Fabric SDKHorea Porutiu
Intro to Hyperledger Fabric concepts. Will cover peers, orderer, state database, and certificate authority. Go over code examples of how to submit transactions on the network. Demo IBM Blockchain Starter Plan, Composer, and IBM Food Trust use-cases.
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...CodelyTV
Slides de la charla "Acercándonos a la Programación Funcional a través de la Arquitectura Hexagonal" en el meetup de Software Crafters Madrid conjuntamente con Scala Madrid el 21/11/2018. Descuento en cursos CodelyTV Pro por verla: http://bit.ly/codelytv19e
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI serverPloneFoundation
Thomas Schorr, https://2020.ploneconf.org/speakers/thomas-schorr
Pyruvate is a non-blocking, multithreaded WSGI server with competitive performance, implemented in Rust.
It features non-blocking read/write based on mio (https://docs.rs/mio/), a rust-cpython (https://docs.rs/cpython/) based Python interface and a worker pool based on threadpool (https://docs.rs/threadpool/).
The sendfile system call is used for efficient file transfer.
Pyruvate integrates with the Python logging API using asynchronous logging.
PasteDeploy configuration and systemd socket activation are supported.
Beta releases are available for CPython (>=3.6) and Linux.
The talk will present the current state of the project and show how to use Pyruvate with Zope/Plone and other Python web frameworks.
Another focus will be on the roadmap towards a 1.0 release scheduled for end of this year.
https://gitlab.com/tschorr/pyruvate
https://pypi.org/project/pyruvate/
https://2020.ploneconf.org/talks/pyruvate-a-reasonably-fast-non-blocking-multithreaded-wsgi-server/
Dropwizard with MongoDB and Google CloudYun Zhi Lin
Latest source code for this project can be found here:
https://github.com/yunspace/dropwizard-mongodb-billapi
Original reveal.js slides here: http://slides.com/yunzhilin/dropwizard-mongodb
Getting More Out of the Node.js, PHP, and Python Agents - AppSphere16AppDynamics
Hear from our product management and engineering teams about three topics that will help you unlock more value from our dynamic languages agents:
• Diagnosing a slow business transaction in Node.js
• Using the agent APIs to create custom transactions and exit calls
• Getting the Java proxy out of your Docker containers and connecting multiple agents to one proxy
For more information, go to: www.appdynamics.com
A set of Tips & Tricks in the resolution of the typical problems that you can find and the reason of them when you work with FIWARE IoT Agents and FIWARE Orion Context Broker
Join us for a live code demonstration of creating a PHP/Hack app and integrating it with Chatter via Force.com Canvas. We will provide a process and framework to rapidly prototype Canvas apps within minutes, rather than days or months. In the session, we'll show you how we built prototypes based on ideas from the Salesforce Ideas site such as real-time translation to voice memos. At the end of the session, we will provide the prototyping framework for download.
The discovery of unit testing and test-driven development was one of the most important parts of my growth as a developer. The ability to write simple, small pieces of code that could verify the behavior of my application was in itself quite useful. And the ability to refactor without fear, just by running the test suite, changed how I program. But the real benefits come in how unit tests shape your application code: more testable code is often more well thought-out, more decoupled, and more extensible.
In this talk, I'll give a whirlwind introduction to unit testing as a concept and as a practice. I want you fully convinced it's the best thing to happen to software development, if you aren't already. Once we're on the same page there, I'll take a deep dive into what makes a good unit test. This involves testing tools such as spies, stubs, and mocks, concepts like code coverage, and practices like dependency injection that shape your application code. The most important lesson will be on how to focus on singular, isolated units of code in your testing, as this guides you toward building modular, flexible, and comprehensible applications.
Rise of the Machines: PHP and IoT - ZendCon 2017Colin O'Dell
The Internet of Things (IoT) is fundamentally changing how we interact with the digital world. In this session we’ll explore the implementation of real examples which bridge the gap between the physical and digital world using PHP: asking Alexa for information within a PHP application; displaying API data on an Arduino-powered display; using PHP to control LEDs on a Raspberry Pi to monitor application uptime; and connecting IR sensors to Slack to see whether a conference room is in use.
Keep hearing about Plack and PSGI, and not really sure what they're for, and why they're popular? Maybe you're using Plack at work, and you're still copying-and-pasting `builder` lines in to your code without really knowing what's going on? What's the relationship between Plack, PSGI, and CGI? Plack from first principles works up from how CGI works, the evolution that PSGI represents, and how Plack provides a user-friendly layer on top of that.
In this presentation, I give an introduction to Windows PowerShell:
- What is it, and how does it work?
- How can you extend it to provide support for administering your own product or project?
NOTES:
1) Some of the text in this presentation is a little small for reading in a 400 pixel flash viewer. I'd recommend downloading the presentation instead.
2) The slides might not make sense without the notes that go with them. I've added the notes as comments to each slide. They still might not make much sense, but that's a different problem :-)
SPIFFE Meetup Tokyo #2 - Attestation Internals in SPIRE - Shingo OmuraPreferred Networks
In SPIRE, attestation is the essential process because it certifies a node or workload, i.e. it asserts the identities of them. This talk describes how SPIRE implement this process and make it flexible. Moreover, it explains the detail of how spire-server and spire-agent (running at a node) interacts in the attestation process.
By using a comprehensive feature-filled framework we can build software fast. On the other hand, by decoupling our applications we can build sofware that is independent of our framework and infrastructure choices, and therefore longer lasting.
We can't do both, is one approach always right?
In this talk we'll look at different decoupling techniques, what problems they solve, and when they make sense. We will learn some concrete techniques to discover where we should be investing in decoupling, and when we should let the framework maintainers do the work for us.
Effective Doctrine2: Performance Tips for Symfony2 DevelopersMarcin Chwedziak
How to boost performance Doctrine2 with Symfony2. How to configure metadata caching? How to optimize DQL queries for caching. How to properly setup transaction demarcation with EntityManager. How to deal with EntityManager and Listeners with Symfony2 container.
Developing applications with Hyperledger Fabric SDKHorea Porutiu
Intro to Hyperledger Fabric concepts. Will cover peers, orderer, state database, and certificate authority. Go over code examples of how to submit transactions on the network. Demo IBM Blockchain Starter Plan, Composer, and IBM Food Trust use-cases.
Acercándonos a la Programación Funcional a través de la Arquitectura Hexag...CodelyTV
Slides de la charla "Acercándonos a la Programación Funcional a través de la Arquitectura Hexagonal" en el meetup de Software Crafters Madrid conjuntamente con Scala Madrid el 21/11/2018. Descuento en cursos CodelyTV Pro por verla: http://bit.ly/codelytv19e
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI serverPloneFoundation
Thomas Schorr, https://2020.ploneconf.org/speakers/thomas-schorr
Pyruvate is a non-blocking, multithreaded WSGI server with competitive performance, implemented in Rust.
It features non-blocking read/write based on mio (https://docs.rs/mio/), a rust-cpython (https://docs.rs/cpython/) based Python interface and a worker pool based on threadpool (https://docs.rs/threadpool/).
The sendfile system call is used for efficient file transfer.
Pyruvate integrates with the Python logging API using asynchronous logging.
PasteDeploy configuration and systemd socket activation are supported.
Beta releases are available for CPython (>=3.6) and Linux.
The talk will present the current state of the project and show how to use Pyruvate with Zope/Plone and other Python web frameworks.
Another focus will be on the roadmap towards a 1.0 release scheduled for end of this year.
https://gitlab.com/tschorr/pyruvate
https://pypi.org/project/pyruvate/
https://2020.ploneconf.org/talks/pyruvate-a-reasonably-fast-non-blocking-multithreaded-wsgi-server/
Dropwizard with MongoDB and Google CloudYun Zhi Lin
Latest source code for this project can be found here:
https://github.com/yunspace/dropwizard-mongodb-billapi
Original reveal.js slides here: http://slides.com/yunzhilin/dropwizard-mongodb
Getting More Out of the Node.js, PHP, and Python Agents - AppSphere16AppDynamics
Hear from our product management and engineering teams about three topics that will help you unlock more value from our dynamic languages agents:
• Diagnosing a slow business transaction in Node.js
• Using the agent APIs to create custom transactions and exit calls
• Getting the Java proxy out of your Docker containers and connecting multiple agents to one proxy
For more information, go to: www.appdynamics.com
A set of Tips & Tricks in the resolution of the typical problems that you can find and the reason of them when you work with FIWARE IoT Agents and FIWARE Orion Context Broker
Join us for a live code demonstration of creating a PHP/Hack app and integrating it with Chatter via Force.com Canvas. We will provide a process and framework to rapidly prototype Canvas apps within minutes, rather than days or months. In the session, we'll show you how we built prototypes based on ideas from the Salesforce Ideas site such as real-time translation to voice memos. At the end of the session, we will provide the prototyping framework for download.
The discovery of unit testing and test-driven development was one of the most important parts of my growth as a developer. The ability to write simple, small pieces of code that could verify the behavior of my application was in itself quite useful. And the ability to refactor without fear, just by running the test suite, changed how I program. But the real benefits come in how unit tests shape your application code: more testable code is often more well thought-out, more decoupled, and more extensible.
In this talk, I'll give a whirlwind introduction to unit testing as a concept and as a practice. I want you fully convinced it's the best thing to happen to software development, if you aren't already. Once we're on the same page there, I'll take a deep dive into what makes a good unit test. This involves testing tools such as spies, stubs, and mocks, concepts like code coverage, and practices like dependency injection that shape your application code. The most important lesson will be on how to focus on singular, isolated units of code in your testing, as this guides you toward building modular, flexible, and comprehensible applications.
Orchestrating the execution of workflows for media streaming service and even...Shuen-Huei Guan
One of advantages about cloud computing is potentially huge-scale resources for your task. And it's especially beneficial to data driven process with heavy computing. In this talk, the idea of job script to orchestrate the execution of workflows across multiple computing nodes is introduced. An implementation based on AWS SWF (Simple Workflow) is described with examples of processing for music streaming and video streaming in KKBOX.
@PyCon APAC 2015
Behat internals for advanced usage. Symfony Camp 2016Sergey Polischook
Part 1. Common understanding Behat and BDD
Part 2. Internal implementations of Behat Core and Behat Extensions
Part 3. Current implementation of Behat in OroCRM
When we are working on tests exercising large parts of our software system (e.g. in an acceptance test suite), we often have to set up a considerable amount of data to set the stage for the scenario under test. This might include several calls to cumbersome APIs. At first, such code can be hard do get right. When it is working properly, many times the intention of the setup is greatly hidden in a convoluted mess of code. Therefore, such code can pose a major hurdle for the evolution of the project. Although intensive refactoring can provide benefits, there are things demanding even better readability. At this point, techniques, patterns and tools like Specflow can provide advantages.
In this talk we discuss typical problems faced with the setup of test data and means to address those. We illustrate three cases where non-trivial setup was needed. After understanding the challenges faced we will present and discuss the final solutions. All topics are supported by code examples from a 10+ year project that has faced all of those issues.
BlackHat EU 2012 - Zhenhua Liu - Breeding Sandworms: How To Fuzz Your Way Out...MindShare_kk
Adobe's interpretation of sandboxing is called Adobe Reader X Protected Mode. Inspired by Microsoft's Practical Windows Sandboxing techniques, it was introduced in July 2010. So far, it had been doing a good job at limiting the impact of exploitable bugs in Adobe Reader X, as escaping the sandbox after successful exploitation turned to be particularly challenging, and hasn't been witnessed in the wild, yet.
This paper exposes how we did just this: By leveraging some broker APIs, a policy flaw, and a little more, we were able to break free from Adobe's sandbox.
The particular vulnerability we used was patched by Adobe in September 2011 (CVE-2011-1353), as a result of our responsible disclosure action; yet, this demonstrates that Adobe's sandbox cannot be considered a panacea against security flaws exploitation in Adobe Reader X, and paves the way toward further interesting discoveries for security researchers.
Indeed, beyond this particular vulnerability, this paper dives deep into the sandbox implementation of Adobe Reader X, and debates ways to audit its broker APIs, which, to our minds, offer a major attack surface. In particular, the paper details how we configured an open-source fuzzing tool to audit them through the IPC Framework.
Rough presentation about the aspects and problems that you have to deal with when you build a system based on Docker. Presentation done for the Docker Amsterdam meetup.
Spring in the Cloud - using Spring with Cloud FoundryJoshua Long
This talk's about using the power of the Spring framework with Cloud Foundry, the open source PaaS (platform as-a-service) from VMware. This is a bit more deep an introduction than my other Spring and Cloud Foundry talk, and so I've kept both, while encouraging people to check this one out, first.
Similar to Responsible DI: Ditch the Frameworks (20)
How can senior developers bridge the gap to becoming tech leads? How can mentors help them? We'll shine a light from above, a light from below, and we'll see if we can uncover some insights.
Applied category theory: the emerging science of compositionalitykenbot
What do programming, quantum physics, chemistry, neuroscience, systems biology, natural language parsing, causality, network theory, game theory, dynamical systems and database theory have in common?
As functional programmers, we know how useful category theory can be for our work - or perhaps how abstruse and distant it can seem. What is less well known is that applying category theory to the real world is an exciting field of study that has really taken off in just the last few years. It turns out that we share something big with other fields and industries - we want to make big things out of little things without everything going to hell! The key is compositionality, the central idea of category theory.
This talk will introduce the emerging field of applied category theory, with the aims of:
- Giving attendees a broad overview of cutting-edge applications of category theory
- Building an understanding of a small number of the most important core concepts
- Getting attendees excited, inspired to learn more, and equipped to apply some basic concepts to their work
Functional programming has made great strides in the popular imagination, yet adoption of FP languages has often been challenging for companies, sputtering in fits and starts. Ken has been at the forefront of REA's successful adoption of FP over four years, and will share lessons learnt and traps avoided: how a human-first approach can succeed and scale.
Lenses, or more generally “optics”, are a technique that is indispensable to modern functional programming. However, implementations have veered between two extremes: incredible abstractive power with a steep learning curve; and limited domain-specific uses that can be picked up in minutes. Why can’t we have our cake and eat it too?
Goggles is a new Scala macro built over the powerful & popular Monocle optics library. It uses Scala’s macros and scandalously flexible syntax to create a compiler-checked mini-language to concisely construct, compose and apply optics, with a gentle, familiar interface, and informative compiler errors.
In this talk, I introduce the motivation for lenses, why lens usability is a problem that badly needs solving, and how the Goggles library, with Monocle, addresses this in an important way.
Some examples and motivation for creating data structures from nothing but functions - Church Encoding! There's particular detail on how it can make free monads more efficient.
Discusses the algebraic properties of types, different kinds of functions and the information that is preserved or lost, and Category Theory concepts that underpin and unify them.
Explains the basic concepts of Category Theory, useful terminology to help understand the literature, and why it's so relevant to software engineering.
Free Monads are a powerful technique that can separate the representation of programs from the messy details of how they get run.
I'll go into the details of how they work, how to use them for fun and profit in your own code, and demonstrate a live Free Monad-driven tank game.
Supporting code at https://github.com/kenbot/free
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Globus
The U.S. Geological Survey (USGS) has made substantial investments in meeting evolving scientific, technical, and policy driven demands on storing, managing, and delivering data. As these demands continue to grow in complexity and scale, the USGS must continue to explore innovative solutions to improve its management, curation, sharing, delivering, and preservation approaches for large-scale research data. Supporting these needs, the USGS has partnered with the University of Chicago-Globus to research and develop advanced repository components and workflows leveraging its current investment in Globus. The primary outcome of this partnership includes the development of a prototype enterprise repository, driven by USGS Data Release requirements, through exploration and implementation of the entire suite of the Globus platform offerings, including Globus Flow, Globus Auth, Globus Transfer, and Globus Search. This presentation will provide insights into this research partnership, introduce the unique requirements and challenges being addressed and provide relevant project progress.
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
How Recreation Management Software Can Streamline Your Operations.pptxwottaspaceseo
Recreation management software streamlines operations by automating key tasks such as scheduling, registration, and payment processing, reducing manual workload and errors. It provides centralized management of facilities, classes, and events, ensuring efficient resource allocation and facility usage. The software offers user-friendly online portals for easy access to bookings and program information, enhancing customer experience. Real-time reporting and data analytics deliver insights into attendance and preferences, aiding in strategic decision-making. Additionally, effective communication tools keep participants and staff informed with timely updates. Overall, recreation management software enhances efficiency, improves service delivery, and boosts customer satisfaction.
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
CyanicLab, an offshore custom software development company based in Sweden,India, Finland, is your go-to partner for startup development and innovative web design solutions. Our expert team specializes in crafting cutting-edge software tailored to meet the unique needs of startups and established enterprises alike. From conceptualization to execution, we offer comprehensive services including web and mobile app development, UI/UX design, and ongoing software maintenance. Ready to elevate your business? Contact CyanicLab today and let us propel your vision to success with our top-notch IT solutions.
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaYara Milbes
Discover the transformative power of the WhatsApp API in our latest SlideShare presentation, "Top 7 Unique WhatsApp API Benefits." In today's fast-paced digital era, effective communication is crucial for both personal and professional success. Whether you're a small business looking to enhance customer interactions or an individual seeking seamless communication with loved ones, the WhatsApp API offers robust capabilities that can significantly elevate your experience.
In this presentation, we delve into the top 7 distinctive benefits of the WhatsApp API, provided by the leading WhatsApp API service provider in Saudi Arabia. Learn how to streamline customer support, automate notifications, leverage rich media messaging, run scalable marketing campaigns, integrate secure payments, synchronize with CRM systems, and ensure enhanced security and privacy.
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Mind IT Systems
Healthcare providers often struggle with the complexities of chronic conditions and remote patient monitoring, as each patient requires personalized care and ongoing monitoring. Off-the-shelf solutions may not meet these diverse needs, leading to inefficiencies and gaps in care. It’s here, custom healthcare software offers a tailored solution, ensuring improved care and effectiveness.
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
3. Problems with DI frameworks
• Cognitive overheard, confusing semantics
• Smear application-level responsibility everywhere
• Makes it too easy to not think about responsibilities
• Makes it harder to reason about code in isolation
• Throws tech at a problem that shouldn’t exist
4. What problems do DI frameworks solve
• “Factories aren’t fun”
• “Think of Guice’s @Inject
as the new new”
Guice Dagger 2
• “App assembly can be 100KLOC”
• ”Replace FactoryFactory classes”
• “Swapping dependencies for
testing”
Spring
• “Initialisation ordering”
7. More constructively:
Actual problem
• Of the arguments we need to pass, some are selected once for the application
and never changed. It would be bad to select them over and over again
Actual solution
• Only one place should know that it is in an ”application”
• Wire up the things that never change here
• Use good software engineering to reduce the number of things
9. Case study – Video Rental API
Video Search
Controller
Payment
Controller
Video
Searcher
Payments
Payments
Gateway
Rental
Controller
Rentals
Video Repo
Video DB
Analytics
Logging
3rd Party
10. What if there were no objects?
handleVideoSearch
Request
handlePayment
Request
findByName
findSimilar
charge
transferFrom
Account
handleRental
Request
rentVideo
runVideoQuery
record
Debug,
warn,
error
11. public class Rentals {
public static
Receipt rentVideo(Video v, VideoStore store, Customer c) {
store.decrementStock(vid);
Payments.charge(c.getCreditCard(), v.getPrice());
List<Movie> recommendations =
VideoSearcher.findSimilar(v);
Logger.debug(LogMessages.VIDEO_RENTED);
return new Receipt(v.getId(), c.getId(), recommendations);
}
}
12. public class Rentals {
public static
Receipt rentVideo(Video v, VideoStore store, Customer c) {
store.decrementStock(vid);
Payments.charge(c.getCreditCard(), v.getPrice());
List<Movie> recommendations =
VideoSearcher.findSimilar(v);
Logger.debug(LogMessages.VIDEO_RENTED);
return new Receipt(v.getId(), c.getId(), recommendations);
}
}
21. Trickling up is very, very bad
1. Punches through abstraction layers
2. Changes ripple
3. Same arguments must be supplied many times to many places, but
for only one reason
28. Objects = 9
handlePayment
Request
Video Repo
Video DB
Video
Searcher
Rentals
Video Search
Controller
Rental
Controller
Analytics
Logging
Payments
Gateway
3rd Party
Payments
29. Objects = 10
Video Repo
Video DB
Video
Searcher
Rentals
Video Search
Controller
Rental
Controller
Analytics
Logging
Payments
Gateway
3rd Party
Payments
Payment
Controller
30. Object creep is real!
…but isn’t that ok?
We’re writing OO software,
after all
38. The place where the wiring happens
var logger = LoggingFramework.newLogger();
var analytics = MediaBubbleMonkeyAnalytics.create();
var conn = new SpecificDatabaseConnection(connString);
var videoRepo = new VideoRepo(conn);
var videoSearcher = new VideoSearcher(videoRepo);
var gateway = new PaymentsGateway(url);
var payments = new Payments(gateway);
var rentals = new Rentals(videoSearcher, payments);
var videoSearchController = new
VideoSearchController(videoSearcher);
var rentalSearchController = new
RentalSearchController(rentals);
var paymentsController = new PaymentsController(payments);
39. Some people say “yeah, I
can manage it myself”… but
in an Android application,
we had 3000 LOC. In a large
server-side app, it flushes
out to about 100k LOC.
Greg Kick, Dagger 2 author
(Google)
40. “I know I am in an application, and what it is for”
var logger = LoggingFramework.newLogger();
var analytics = MediaBubbleMonkeyAnalytics.create();
var conn = new SpecificDatabaseConnection(connString);
var videoRepo = new VideoRepo(conn);
var videoSearcher = new VideoSearcher(videoRepo);
var gateway = new PaymentsGateway(url);
var payments = new Payments(gateway);
var rentals = new Rentals(videoSearcher, payments);
var videoSearchController = new
VideoSearchController(videoSearcher);
var rentalSearchController = new
RentalSearchController(rentals);
var paymentsController = new PaymentsController(payments);
41. DI frameworks help reduce code in that one spot
….but:
“I know I’m in an application” is smooshed
everywhere
42. public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
public Rentals(VideoSearcher search, Payments p, Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
43. public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
public Rentals(VideoSearcher search, Payments p, Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
Who am I? What do I
exist for?
44. What is the problem
that makes me say
“Aha! I’ll use Rentals
to solve it”
*** MOST IMPORTANT SLIDE IN THE WHOLE TALK ***
Programmer
45. public class Rentals {
...
public Receipt rentVideo(Video v, VideoStore store,
Customer c) {
...
}
}
Use me if you want
to rent a video.
46. public class Rentals {
...
public Receipt rentVideo(Video v, VideoStore store,
Customer c) {
...
}
}
What’s that you say,
I’m in an “app”? I
have no idea what
this means
47. public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
public Rentals(VideoSearcher search, Payments p, Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
I don’t care in the
slightest which
VideoSearcher,
Payments or Logger
we use
48. @Component(“Bob”)
public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
@Autowired
public Rentals(VideoSearcher search, Payments p, Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
But…
49. @Component(“Bob”)
public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
@Autowired
public Rentals(VideoSearcher search, Payments p, Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
There’s only one true
Rentals. Create THE
Rentals for the whole app
to use. They can call it
“Bob”.
50. @Component(“Bob”)
public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
@Autowired
public Rentals(VideoSearcher search, Payments p, Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
I want THE VideoSearcher, THE
Payments, and THE Log
defined for the app.
52. @Component(“Bob”)
public class Rentals {
private final VideoSearcher search;
private final Payments p;
private final Logger log;
@Autowired
public Rentals(@Qualifier(“internetSearch”) VideoSearcher search,
@Qualifier(“creditPayments”) Payments p,
@Qualifier(“log4J”) Logger log) {
this.search = search;
this.p = p;
this.log = log;
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
...
}
}
I want a really really specific
VideoSearcher, Payments, and
Log that we get from a global
register somewhere.
I don’t care in the
slightest which
VideoSearcher,
Payments or Logger
we use
?????
53. public class Rentals {
public Receipt rentVideo(Video v, VideoStore store,
Customer c) {
store.decrementStock(vid);
p.charge(c.getCreditCard(), v.getRentalPrice());
List<Movie> recommendations = search.findSimilar(v);
log.debug(LogMessages.VIDEO_RENTED);
return new Receipt(v.getId(), c.getId(),
recommendations);
}
}
Use me if you
want to rent a
video.
THEREFORE:
1.
2.
3.
4.
54. Test that we can rent a video:
For some valid VideoSearcher, Payments, and Logger
1. Check the VideoStore got decremented
2. Check the Payments was charged
3. Check the logger received a LogMessages.VIDEO_RENTED message
4. Check our receipt has the expected data, including the expected
recommended videos
ALIGNS WITH OUR PURPOSE
55. public class RentalsTest {
VideoSearcher search = new FixedResultsSearcher(...);
Payments p = new InMemoryPayments();
InMemoryLogger log = new InMemoryLogger();
@Test
public void stockGetsDecremented() {
var rentals = new Rentals(search, p, log);
var store = new InMemoryVideoStore();
var video = new Video(“Weekend at Bernies”, Price.cents(250));
rentals.rentVideo(video, store.put(video,2), new Customer(...));
assertEquals(1, store.count(video));
}
...
}
56. public class Rentals {
private final StuffThatHappensFirst firstStuff;
...
@Autowired
public Rentals(@Qualifier(“decrementAndPayStuff”) StuffThatHappensFirst
firstStuff,
VideoSearcher search, Logger log) {
...
}
public Receipt rentVideo(Video v, VideoStore store, Customer c) {
firstStuff.doIt(store);
List<Movie> recommendations = search.findSimilar(v);
log.debug(“Video rented!”);
return new Receipt(v.getId(), c.getId(), recommendations);
}
}
Class responsibility has bled into the app!!!
62. class Multiplier {
private final
Adder adder = new Adder();
public int mult(int a, int b) {
int tot = 0;
for (int i = 0; i < a; i++)
tot = adder.add(tot,b);
return tot;
}
}
63. class Multiplier {
private final Adder adder;
public Multiplier(Adder a) {
adder = a;
}
public int mult(int a, int b) {
...
}
}
64. class Multiplier {
private final
Adder adder = new Adder();
public int mult(int a, int b) {
...
}
}
Who am I? What do I
exist for?
65. class Multiplier {
private final
Adder adder = new Adder();
public int mult(int a, int b) {
...
}
}
The point is:
Multiply 2 ints
into a resulting
int
Tool that
helps us do
our job
66. class Multiplier {
private final Adder adder;
public Multiplier(Adder a) {
adder = a;
}
public int mult(int a, int b) {
...
}
}
We do not care in
the slightest how
the ints get
combined
67. class Multiplier {
private final Adder adder;
public Multiplier(Adder a) {
adder = a;
}
public int mult(int a, int b) {
...
}
}
I exist to …
perform an action
on ints a given
number of times?
68. class GstPrice {
private final Price untaxed;
private final GstPolicy policy =
new GstPolicy();
public GstPrice(Price untaxed) {
this.untaxed = untaxed;
}
... // arithmetic, rounding, display, etc
}
69. class GstPrice {
private final Price untaxed;
private final GstPolicy policy =
new GstPolicy();
public GstPrice(Price untaxed) {
this.untaxed = untaxed;
}
... // arithmetic, rounding, display, etc
}
I exist to provide a
price that has
provably had GST
applied
70. class GstPrice {
private final Price untaxed;
private final GstPolicy policy =
new GstPolicy();
public GstPrice(Price untaxed) {
this.untaxed = untaxed;
}
... // arithmetic, rounding, display, etc
}
This is a tool I
need to do the
job. GST is the
point
71. class GstPrice {
private final Price untaxed;
private final GstPolicy policy =
new GstPolicy();
public GstPrice(Price untaxed) {
this.untaxed = untaxed;
}
... // arithmetic, rounding, display, etc
}
I do not care in
the slightest
which untaxed
price I am dealing
with
72. class TaxedPrice {
private final Price untaxed;
private final TaxPolicy policy;
public TaxedPrice(Price untaxed,
TaxPolicy policy) {
this.untaxed = untaxed;
}
... // arithmetic, rounding, display, etc
}
I do not care in
the slightest
which untaxed
price or tax policy
I am dealing with
73. // Mostly we don’t want to vary the policy,
so...
class TaxedPriceFactory {
private final TaxPolicy policy;
// ...Obvious constructor
public
TaxedPrice newTaxedPrice(Price untaxed) {
return new TaxedPrice(untaxed, policy);
}
}
74. • Don’t lazily turn every field into a
dependency; it increases
complexity and object creep.
• Think hard about responsibilities.
• Use new if it supports our reason
for existing.
84. • This is how a codebase goes to
hell
• Each dependency makes reuse,
extension, reasoning & testing
harder
• Frameworks make it too easy to
pretend it’s free
90. • “Setter injection” is a bad idea
• Public interfaces confuses usage & creation
concerns
• Nobody ever wants all that at once
• Mutable, uncertain – what order did things
happen in?
• Frameworks make “setter injection” too easy &
practical
92. public class Payments {
private final Gateway gateway;
public Payments(Gateway gateway) {...}
public Receipt charge(Price price) {...}
}
93. public class Payments {
public static
Receipt charge(Price price, Gateway gateway) {
...
}
}
94. public class Payments {
public static
Function<Gateway, Receipt> charge(Price price) {
...
}
}
95. public class Payments {
public static
NeedsGateway<Receipt> charge(Price price) {
...
}
}
Required flexibility is now
built in to return type; no
coathanger object required
98. Objects = 4 (just the IO points)
handleVideoSearch
Request
handlePayment
Request
charge
handleRental
Request
rentVideo
Video Repo
Video DB
findByName findSimilar
Gateway
Analytics
Logging
The problem has
vanished! There’s almost
nothing left to wire
99. Conclusion
• Passing arguments to things is not very hard
• Wiring together applications is not very hard
• Having a central “I am the application” place and thinking hard about
responsibilities gives you what you want
• DI frameworks are too complex, not necessary, and lead programmers
and teams toward sloppy design habits.