Web browsers have become a de facto universal operating system, and JavaScript its instruction set. Unfortunately, running other languages in the browser is not generally possible. Translation to JavaScript is not enough because browsers are a hostile environment for other languages. Previous approaches are either non-portable or require extensive modifications for programs to work in a browser.
This talk presents Doppio, a JavaScript-based runtime system that makes it possible to run unaltered applications written in general- purpose languages directly inside the browser. Doppio provides a wide range of runtime services, including a file system that enables local and external (cloud-based) storage, an unmanaged heap, sockets, blocking I/O, and multiple threads. We demonstrate Doppio's usefulness with two case studies: we extend Emscripten with Doppio, letting it run an unmodified C++ application in the browser with full functionality, and present DoppioJVM, an interpreter that runs unmodified JVM programs directly in the browser. While substantially slower than a native JVM, DoppioJVM makes it feasible to directly reuse existing, non compute-intensive code.
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019Viktor Todorov
In our work we tend to believe in Messiah. A messiah can be the new magic tool which will solve all our problems, or a shiny framework, so much better than everything we have used before, or even a person in our team. We all know the messiah in software testing. It’s the Unit Testing. But is the unit test the one and the only way to test a software? The answer is no. This lecture will show you a new approach to software testing using a Recording HTTP Proxy and how it can help you achieve better quality of your software. Without proclaiming it as “The Great New Messiah”.
As presented at ZendCon, Confoo, LaraconEU, ZgPHP, PFCongres and Fronteers User Group. An overview of some intermediate level HTTP features and how they might be useful in practice.
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019Viktor Todorov
In our work we tend to believe in Messiah. A messiah can be the new magic tool which will solve all our problems, or a shiny framework, so much better than everything we have used before, or even a person in our team. We all know the messiah in software testing. It’s the Unit Testing. But is the unit test the one and the only way to test a software? The answer is no. This lecture will show you a new approach to software testing using a Recording HTTP Proxy and how it can help you achieve better quality of your software. Without proclaiming it as “The Great New Messiah”.
As presented at ZendCon, Confoo, LaraconEU, ZgPHP, PFCongres and Fronteers User Group. An overview of some intermediate level HTTP features and how they might be useful in practice.
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.
Google's Go is a relatively new systems programming language that has recently gained a lot of traction with developers. It brings together the ease and efficiency of development in modern interpreted languages like Python, Perl, and Ruby with the efficiency and safety of a statically typed, compiled language like C/C++ and Java.
On top of that, Go is a language built for modern hardware and problems. With built-in support for concurrency, programmers can easily build software to scale up to today's many-core beasts. Programming in Go is really nice, and in this tutorial, you will learn why.
We will cover an introduction to the Go programming language, and together we will build a multi-user network service demonstrating all of the major principles of programming in Go.
Professional Help for PowerShell ModulesJune Blender
Slides from talk at PowerShell Conference Europe 2016 (@PSConfEu). In this deck:
-- Why write PowerShell help?
-- How help for modules differs from cmdlet help
-- Mechanics:
---- Comment-based help vs. XML help
---- About topic format requirements and best practices
-- About Help Content
---- How to start an About topic
---- How to organize an About topic.
---- About topic checklist
-- How to support online help
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)Ontico
The HipHop Virtual Machine (HHVM) is the PHP and Hack execution engine developed at Facebook. HHVM is the fastest existing PHP/Hack engine, and it powers not only Facebook's servers, but also Wikipedia, Baidu, and many other sites across the web. In this talk, we'll give an overview of the design of HHVM, with particular focus on its JIT compiler. I'll share some of our experiences building this high performance system, as well as some of the key challenges that we've faced to improve PHP performance.
From the current offensive and defensive technique arsenal, memory analysis applied to volatile memory is far from being the most explored channel. It is more likely to hear about input validation attacks or attacks against the protocol & cryptography while keys, passphrases, credit card numbers and other precious artifacts are kept unsafely in memory. This analysis arises as a mine waiting to be explored since it is sustained by one of the most vulnerable and unavoidable resource to systems, memory. From Java to Stuxnex, as well as Windows but without forgetting the Cloud, I will try to show some scenarios where these techniques can be applied, its impact as a threat and bring an important and fun subject not just to those who work in forensics but also to penetration testers as myself. Finally, I will also try to show how can this be used for defensive technologies as tools for monitoring and protection in networks with systems in production.
[Ruxcon Monthly Sydney 2011] Proprietary Protocols Reverse Engineering : Rese...Moabi.com
This presentation given in 2011 during the first Ruxcon Monthly (Ruxmon) Sydney focuses on proprietary protocols reverse engineering and vulnerability audits.
We live in a very fast world. We want to know everything as soon as possible. We want realtime data! With XMPP you can power your website with realtime data. I will demonstrate a full setup with an Openfire XMPP server exchanging data with a PHP application. I will also explain the required JavaScript functions in order to send/receive messages through XMPP over BOSH.
In this presentation, I show the audience how to implement HTTP caching best practices in a non-intrusive way in PHP Symfony 4 code base.
This presentation focuses on topics like:
- Caching using cache-control headers
- Cache variations using the Vary header
- Conditional requests using headers like ETag & If-None-Match
- ESI discovery & parsing using headers like Surrogate-Capability & Surrogate-Control
- Caching stateful content using JSON Web Token Validation in Varnish
More information about this presentation is available at https://feryn.eu/speaking/developing-cacheable-php-applications-php-limburg-be/
A new real time Web is emerging, backed by the eXtensible Messaging and Presence Protocol (XMPP). This protocol is designed for low latency, real time communication, publish-subscribe, and social networking. You will learn how XMPP and HTTP can be combined to make new applications possible and how to harness XMPP from JavaScript. We will use the Strophe library to create a few simple XMPP applications.
Code used in this presentation is at http://metajack.im/code/realtimeweb_jsconf2009.zip
Presentation on "Semantic barriers in communication". It helps in understanding the semantic barrier and overcome it. Also helpful for management departments.
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.
Google's Go is a relatively new systems programming language that has recently gained a lot of traction with developers. It brings together the ease and efficiency of development in modern interpreted languages like Python, Perl, and Ruby with the efficiency and safety of a statically typed, compiled language like C/C++ and Java.
On top of that, Go is a language built for modern hardware and problems. With built-in support for concurrency, programmers can easily build software to scale up to today's many-core beasts. Programming in Go is really nice, and in this tutorial, you will learn why.
We will cover an introduction to the Go programming language, and together we will build a multi-user network service demonstrating all of the major principles of programming in Go.
Professional Help for PowerShell ModulesJune Blender
Slides from talk at PowerShell Conference Europe 2016 (@PSConfEu). In this deck:
-- Why write PowerShell help?
-- How help for modules differs from cmdlet help
-- Mechanics:
---- Comment-based help vs. XML help
---- About topic format requirements and best practices
-- About Help Content
---- How to start an About topic
---- How to organize an About topic.
---- About topic checklist
-- How to support online help
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)Ontico
The HipHop Virtual Machine (HHVM) is the PHP and Hack execution engine developed at Facebook. HHVM is the fastest existing PHP/Hack engine, and it powers not only Facebook's servers, but also Wikipedia, Baidu, and many other sites across the web. In this talk, we'll give an overview of the design of HHVM, with particular focus on its JIT compiler. I'll share some of our experiences building this high performance system, as well as some of the key challenges that we've faced to improve PHP performance.
From the current offensive and defensive technique arsenal, memory analysis applied to volatile memory is far from being the most explored channel. It is more likely to hear about input validation attacks or attacks against the protocol & cryptography while keys, passphrases, credit card numbers and other precious artifacts are kept unsafely in memory. This analysis arises as a mine waiting to be explored since it is sustained by one of the most vulnerable and unavoidable resource to systems, memory. From Java to Stuxnex, as well as Windows but without forgetting the Cloud, I will try to show some scenarios where these techniques can be applied, its impact as a threat and bring an important and fun subject not just to those who work in forensics but also to penetration testers as myself. Finally, I will also try to show how can this be used for defensive technologies as tools for monitoring and protection in networks with systems in production.
[Ruxcon Monthly Sydney 2011] Proprietary Protocols Reverse Engineering : Rese...Moabi.com
This presentation given in 2011 during the first Ruxcon Monthly (Ruxmon) Sydney focuses on proprietary protocols reverse engineering and vulnerability audits.
We live in a very fast world. We want to know everything as soon as possible. We want realtime data! With XMPP you can power your website with realtime data. I will demonstrate a full setup with an Openfire XMPP server exchanging data with a PHP application. I will also explain the required JavaScript functions in order to send/receive messages through XMPP over BOSH.
In this presentation, I show the audience how to implement HTTP caching best practices in a non-intrusive way in PHP Symfony 4 code base.
This presentation focuses on topics like:
- Caching using cache-control headers
- Cache variations using the Vary header
- Conditional requests using headers like ETag & If-None-Match
- ESI discovery & parsing using headers like Surrogate-Capability & Surrogate-Control
- Caching stateful content using JSON Web Token Validation in Varnish
More information about this presentation is available at https://feryn.eu/speaking/developing-cacheable-php-applications-php-limburg-be/
A new real time Web is emerging, backed by the eXtensible Messaging and Presence Protocol (XMPP). This protocol is designed for low latency, real time communication, publish-subscribe, and social networking. You will learn how XMPP and HTTP can be combined to make new applications possible and how to harness XMPP from JavaScript. We will use the Strophe library to create a few simple XMPP applications.
Code used in this presentation is at http://metajack.im/code/realtimeweb_jsconf2009.zip
Presentation on "Semantic barriers in communication". It helps in understanding the semantic barrier and overcome it. Also helpful for management departments.
Barriers of Communication,Types of Barriers in Communication,1.Physical barriers,2.Physiological barriers,Example for psychological,PSYCHOLOGICAL BARRIERS,Selective perception,Message related barrier,4.Organizational barrier,Organizational barriers,Cross-cultural barrier,Different languages And cultures,Learning about other cultures,Discrimination,Dealing with Discrimination in the Workplace,Types Of Discrimination,Overcoming barriers,Personal barriers,Barriers related to the communicator
Original slides from Ryan Dahl's NodeJs intro talkAarti Parikh
These are the original slides from the nodejs talk. I was surprised not find them on slideshare so adding them. The video link is here https://www.youtube.com/watch?v=ztspvPYybIY
WebTalk - Implementing Web Services with a dedicated Java daemonGeert Van Pamel
The speaker presents a Java application that behaves like a dedicated web server and provides Web services. It runs as a standalone network daemon and only calls system and network services that are directly executed by the JVM. No other software is necessary. The URL path referenced by the clients is not referring to files. Instead it is calling other middleware services and serves as a Web service gateway. The application only requires TCP/IP and Java library programming. Because it behaves as a web server, the browser can be any client capable of interfacing with the standard HTTP protocol.
Learn about Java network programming, specifically about security, reliability, supportability, monitoring, browser cache disabling, kit building, starting the Java server process, troubleshooting and monitoring, implementing on different operating systems and platforms, and integrating with other services. Debugging server processes is difficult because there is no direct user interface. Every interaction goes via network sockets, or process signals. Remotely control the server by using the HTTP protocol, enable and disable logging, tracing, and debugging info.
Has the traditional intro to event looped servers (thanks Ryan!) with a couple of examples of why I think node.js is particularly exciting today. Code for the demos can be found at https://github.com/davidpadbury/node-intro.
Node.js vs Play Framework (with Japanese subtitles)Yevgeniy Brikman
Video: http://www.nicovideo.jp/watch/1410857293
Here's the showdown you've been waiting for: Node.js vs Play Framework. Both are popular open source web frameworks that are built for developer productivity, asynchronous I/O, and the real time web. But which one is easier to learn, test, deploy, debug, and scale? Should you pick Javascript or Scala? The Google v8 engine or the JVM? NPM or Ivy? Grunt or SBT? Two frameworks enter, one framework leaves.
This version of the presentation has Japanese subtitles. For the English only version, see http://www.slideshare.net/brikis98/nodejs-vs-play-framework
Talk at RubyKaigi 2015.
Plugin architecture is known as a technique that brings extensibility to a program. Ruby has good language features for plugins. RubyGems.org is an excellent platform for plugin distribution. However, creating plugin architecture is not as easy as writing code without it: plugin loader, packaging, loosely-coupled API, and performance. Loading two versions of a gem is a unsolved challenge that is solved in Java on the other hand.
I have designed some open-source software such as Fluentd and Embulk. They provide most of functions by plugins. I will talk about their plugin-based architecture.
Dthreads is an efficient deterministic multithreading system for unmodified C/C++ applications that replaces the pthreads library. Dthreads enforces determinism in the face of data races and deadlocks. It is easy to use: just link your program with -ldthread instead of -lpthread.
Dthreads can be downloaded from its source code repo on GitHub (https://github.com/plasma-umass/dthreads). A technical paper describing Dthreads appeared at SOSP 2012 (https://github.com/plasma-umass/dthreads/blob/master/doc/dthreads-sosp11.pdf?raw=true).
Multithreaded programming is notoriously difficult to get right. A key problem is non-determinism, which complicates debugging, testing, and reproducing errors. One way to simplify multithreaded programming is to enforce deterministic execution, but current deterministic systems for C/C++ are incomplete or impractical. These systems require program modification, do not ensure determinism in the presence of data races, do not work with general-purpose multithreaded programs, or run up to 8.4× slower than pthreads.
This talk presents Dthreads, an efficient deterministic multithreading system for unmodified C/C++ applications that replaces the pthreads library. Dthreads enforces determinism in the face of data races and deadlocks. Dthreads works by exploding multithreaded applications into multiple processes, with private, copy-on-write mappings to shared memory. It uses standard virtual memory protection to track writes, and deterministically orders updates by each thread. By separating updates from different threads, Dthreads has the additional benefit of eliminating false sharing. Experimental results show that Dthreads substantially outperforms a state-of-the-art deterministic runtime system, and for a majority of the benchmarks we evaluated, matches and occasionally exceeds the performance of pthreads.
Humans can perform many tasks with ease that remain difficult or impossible for computers. Crowdsourcing platforms like Amazon's Mechanical Turk make it possible to harness human-based computational power on an unprecedented scale. However, their utility as a general-purpose computational platform remains limited. The lack of complete automation makes it difficult to orchestrate complex or interrelated tasks. Scheduling human workers to reduce latency costs real money, and jobs must be monitored and rescheduled when workers fail to complete their tasks. Furthermore, it is often difficult to predict the length of time and payment that should be budgeted for a given task. Finally, the results of human-based computations are not necessarily reliable, both because human skills and accuracy vary widely, and because workers have a financial incentive to minimize their effort.
This talk presents AutoMan, the first fully automatic crowdprogramming system. AutoMan integrates human-based computations into a standard programming language as ordinary function calls, which can be intermixed freely with traditional functions. This abstraction allows AutoMan programmers to focus on their programming logic. An AutoMan program specifies a confidence level for the overall computation and a budget. The AutoMan runtime system then transparently manages all details necessary for scheduling, pricing, and quality control. AutoMan automatically schedules human tasks for each computation until it achieves the desired confidence level; monitors, reprices, and restarts human tasks as necessary; and maximizes parallelism across human workers while staying under budget.
AutoMan is available for download at www.automan-lang.org.
Heap-based attacks depend on a combination of memory management errors and an exploitable memory allocator. Many allocators include ad hoc countermeasures against particular exploits, but their effectiveness against future exploits has been uncertain.
This paper presents the first formal treatment of the impact of allocator design on security. It analyzes a range of widely-deployed memory allocators, including those used by Windows, Linux, FreeBSD, and OpenBSD, and shows that they remain vulnerable to attack. It then presents DieHarder, a new allocator whose design was guided by this analysis. DieHarder provides the highest degree of security from heap-based attacks of any practical allocator of which we are aware, while imposing modest performance overhead. In particular, the Firefox web browser runs as fast with DieHarder as with the Linux allocator.
Quantifying the Performance of Garbage Collection vs. Explicit Memory ManagementEmery Berger
This talk answers an age-old question: is garbage collection faster/slower/the same speed as malloc/free? We introduce oracular memory management, an approach that lets us measure unaltered Java programs as if they used malloc and free. The result: a good GC can match the performance of a good allocator, but it takes 5X more space. If physical memory is tight, however, conventional garbage collectors suffer an order-of-magnitude performance penalty.
Introduces bookmarking collection, a GC algorithm that works with the virtual memory manager to eliminate paging. Just before memory is paged out, the collector "bookmarks" the targets of pointers from the pages. Using these bookmarks, BC can perform full garbage collections without loading the pages back from disk. By performing in-memory garbage collections, BC can speed up Java programs by orders of magnitude (up to 41X).
DieHard: Probabilistic Memory Safety for Unsafe LanguagesEmery Berger
DieHard uses randomization and replication to transparently make C and C++ programs tolerate a wide range of errors, including buffer overflows and dangling pointers. Instead of crashing or running amok, DieHard lets programs continue to run correctly in the face of memory errors with high probability. Using DieHard also makes programs highly resistant to heap-based hacker attacks. Downloadable at www.diehard-software.org.
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.
Modern design is crucial in today's digital environment, and this is especially true for SharePoint intranets. The design of these digital hubs is critical to user engagement and productivity enhancement. They are the cornerstone of internal collaboration and interaction within enterprises.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
In software engineering, the right architecture is essential for robust, scalable platforms. Wix has undergone a pivotal shift from event sourcing to a CRUD-based model for its microservices. This talk will chart the course of this pivotal journey.
Event sourcing, which records state changes as immutable events, provided robust auditing and "time travel" debugging for Wix Stores' microservices. Despite its benefits, the complexity it introduced in state management slowed development. Wix responded by adopting a simpler, unified CRUD model. This talk will explore the challenges of event sourcing and the advantages of Wix's new "CRUD on steroids" approach, which streamlines API integration and domain event management while preserving data integrity and system resilience.
Participants will gain valuable insights into Wix's strategies for ensuring atomicity in database updates and event production, as well as caching, materialization, and performance optimization techniques within a distributed system.
Join us to discover how Wix has mastered the art of balancing simplicity and extensibility, and learn how the re-adoption of the modest CRUD has turbocharged their development velocity, resilience, and scalability in a high-growth environment.
Experience our free, in-depth three-part Tendenci Platform Corporate Membership Management workshop series! In Session 1 on May 14th, 2024, we began with an Introduction and Setup, mastering the configuration of your Corporate Membership Module settings to establish membership types, applications, and more. Then, on May 16th, 2024, in Session 2, we focused on binding individual members to a Corporate Membership and Corporate Reps, teaching you how to add individual members and assign Corporate Representatives to manage dues, renewals, and associated members. Finally, on May 28th, 2024, in Session 3, we covered questions and concerns, addressing any queries or issues you may have.
For more Tendenci AMS events, check out www.tendenci.com/events
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.
Your Digital Assistant.
Making complex approach simple. Straightforward process saves time. No more waiting to connect with people that matter to you. Safety first is not a cliché - Securely protect information in cloud storage to prevent any third party from accessing data.
Would you rather make your visitors feel burdened by making them wait? Or choose VizMan for a stress-free experience? VizMan is an automated visitor management system that works for any industries not limited to factories, societies, government institutes, and warehouses. A new age contactless way of logging information of visitors, employees, packages, and vehicles. VizMan is a digital logbook so it deters unnecessary use of paper or space since there is no requirement of bundles of registers that is left to collect dust in a corner of a room. Visitor’s essential details, helps in scheduling meetings for visitors and employees, and assists in supervising the attendance of the employees. With VizMan, visitors don’t need to wait for hours in long queues. VizMan handles visitors with the value they deserve because we know time is important to you.
Feasible Features
One Subscription, Four Modules – Admin, Employee, Receptionist, and Gatekeeper ensures confidentiality and prevents data from being manipulated
User Friendly – can be easily used on Android, iOS, and Web Interface
Multiple Accessibility – Log in through any device from any place at any time
One app for all industries – a Visitor Management System that works for any organisation.
Stress-free Sign-up
Visitor is registered and checked-in by the Receptionist
Host gets a notification, where they opt to Approve the meeting
Host notifies the Receptionist of the end of the meeting
Visitor is checked-out by the Receptionist
Host enters notes and remarks of the meeting
Customizable Components
Scheduling Meetings – Host can invite visitors for meetings and also approve, reject and reschedule meetings
Single/Bulk invites – Invitations can be sent individually to a visitor or collectively to many visitors
VIP Visitors – Additional security of data for VIP visitors to avoid misuse of information
Courier Management – Keeps a check on deliveries like commodities being delivered in and out of establishments
Alerts & Notifications – Get notified on SMS, email, and application
Parking Management – Manage availability of parking space
Individual log-in – Every user has their own log-in id
Visitor/Meeting Analytics – Evaluate notes and remarks of the meeting stored in the system
Visitor Management System is a secure and user friendly database manager that records, filters, tracks the visitors to your organization.
"Secure Your Premises with VizMan (VMS) – Get It Now"
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Designing for Privacy in Amazon Web ServicesKrzysztofKkol1
Data privacy is one of the most critical issues that businesses face. This presentation shares insights on the principles and best practices for ensuring the resilience and security of your workload.
Drawing on a real-life project from the HR industry, the various challenges will be demonstrated: data protection, self-healing, business continuity, security, and transparency of data processing. This systematized approach allowed to create a secure AWS cloud infrastructure that not only met strict compliance rules but also exceeded the client's expectations.
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/
Large Language Models and the End of ProgrammingMatt Welsh
Talk by Matt Welsh at Craft Conference 2024 on the impact that Large Language Models will have on the future of software development. In this talk, I discuss the ways in which LLMs will impact the software industry, from replacing human software developers with AI, to replacing conventional software with models that perform reasoning, computation, and problem-solving.
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Hivelance Technology
Cryptocurrency trading bots are computer programs designed to automate buying, selling, and managing cryptocurrency transactions. These bots utilize advanced algorithms and machine learning techniques to analyze market data, identify trading opportunities, and execute trades on behalf of their users. By automating the decision-making process, crypto trading bots can react to market changes faster than human traders
Hivelance, a leading provider of cryptocurrency trading bot development services, stands out as the premier choice for crypto traders and developers. Hivelance boasts a team of seasoned cryptocurrency experts and software engineers who deeply understand the crypto market and the latest trends in automated trading, Hivelance leverages the latest technologies and tools in the industry, including advanced AI and machine learning algorithms, to create highly efficient and adaptable crypto trading bots
Advanced Flow Concepts Every Developer Should KnowPeter Caitens
Tim Combridge from Sensible Giraffe and Salesforce Ben presents some important tips that all developers should know when dealing with Flows in Salesforce.
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.
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.
Globus Connect Server Deep Dive - GlobusWorld 2024Globus
We explore the Globus Connect Server (GCS) architecture and experiment with advanced configuration options and use cases. This content is targeted at system administrators who are familiar with GCS and currently operate—or are planning to operate—broader deployments at their institution.
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.
40. Chat Client PING/PONG in JavaScript
function main() {
…
var response = sendPing();
…
}
Call Stack
main
41. Call Stack
main
function main() {
…
var response = sendPing();
…
}
Chat Client PING/PONG in JavaScript
42. Call Stack
main
function main() {
function sendPing() { sendPing
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
???
}
…
var response = sendPing();
…
}
Chat Client PING/PONG in JavaScript
43. Call Stack
main
sendPing
socket.send
function main() {
…
var response = sendPing();
…
}
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
???
}
Chat Client PING/PONG in JavaScript
44. Call Stack
main
sendPing
function main() {
…
var response = sendPing();
…
}
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
???
}
Chat Client PING/PONG in JavaScript
45. Call Stack
main
sendPing
function main() {
…
var response = sendPing();
…
}
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
???
}
Chat Client PING/PONG in JavaScript
46. Call Stack
main
sendPing
function main() {
…
var response = sendPing();
…
}
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
???
}
Chat Client PING/PONG in JavaScript
47. Call Stack
main
function main() {
function sendPing() { sendPing
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
while(noData) { /* Busy Wait?? */ }
}
…
var response = sendPing();
…
}
Chat Client PING/PONG in JavaScript
48. Chat Client PING/PONG in JavaScript
Call Stack
main
sendPing
function main() {
…
var response = sendPing();
…
}
Browser
Event Queue
WebSocket
message from
chat server
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
while(noData) { /* Busy Wait?? */ }
}
49. Chat Client PING/PONG in JavaScript
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
while(noData) { /* Busy Wait?? */ }
}
Call Stack
main
sendPing
function main() {
…
var response = sendPing();
…
}
Browser
Event Queue
WebSocket
message from
chat server
50. Chat Client PING/PONG in JavaScript
Call Stack
main
sendPing
function main() {
…
var response = sendPing();
…
}
Browser
Event Queue
WebSocket
message from
chat server
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
while(noData) { /* Busy Wait?? */ }
}
51. Chat Client PING/PONG in JavaScript
Call Stack
main
function main() {
function sendPing() { sendPing
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
return;
}
…
var response = sendPing();
…
}
Browser
Event Queue
WebSocket
message from
chat server
52. Call Stack
main
function main() {
…
var response = sendPing();
return;
}
Browser
Event Queue
WebSocket
message from
chat server
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
return;
}
Chat Client PING/PONG in JavaScript
53. Call Stack
function main() {
…
var response = sendPing();
return;
}
Browser
Event Queue
WebSocket
message from
chat server
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
return;
}
Chat Client PING/PONG in JavaScript
54. Call Stack
function main() {
…
var response = sendPing();
return;
}
socket.onmessage
callback
Browser
Event Queue
function sendPing() {
socket.send(PING);
socket.onmessage = function(event)
{
// event.data has the PONG
};
return;
}
Chat Client PING/PONG in JavaScript
55. Chat Client PING/PONG in JavaScript
function main() {
…
var response = sendPing();
return;
}
function sendPing() {
socket.send(PING);
socket.onmessage = function({
// event.data has the PONG
};
return;
}
void main(String[] args) {
…
byte[] response = sendPing();
…
}
byte[] sendPing() {
socket.write(PING);
socket.read(readBuffer);
return readBuffer;
}
56. Breaking the Browser Language
Barrier
1. Key Challenges
2. Doppio Runtime System
• Doppio Threads
• Doppio File System
• Doppio Sockets
• Doppio Unmanaged Heap
3. Proof-of-concept: DoppioJVM
104. Contributions
• Doppio: Bridges impedance mismatch
between conventional languages and
browser
• Proof-of-concept: DoppioJVM
Editor's Notes
Many programming languages, e.g. Java, Python, Ruby — just three examples. Lots of useful programs and libraries
Unfortunately, only one language that runs across all browsers: JavaScript. Wouldn’t it be nice if we could take existing well-tested programs & libraries, and run them in the browser with no modifications?
To motivate the problem: nonexistent text chat client in Java. Illustrates challenges of bringing conventional languages & their programs to browser.
Chat client lets you connect to multiple chat servers at once, logs chats as text files, and encapsulates server connection in its own thread. Goal: take this Java chat client
and run in browser. How?
Compile Java source code of chat client into JavaScript?
Unfortunately, infeasible for variety of reasons.
Why? Key challenges.
First problem: nature of Java itself. Java = dynamic language. Performing AOTcompilation on Java code rules out dynamic class loading, + many parts of the Java reflection API.
Second problem more fundamental. Chat client uses multiple threads, all in same address space.
JavaScript does not support threads. Instead: workers. These workers do not share same address space => cannot share memory with one another.
Instead, communicate by sending messages. Thus, cannot simply map threads to workers — posing challenge to bringing chat client to web.
Chat client uses TCP sockets to communicate with chat servers.
But browser does not support TCP sockets. Instead: WebSockets, protocol implemented on top of TCP => chat client can’t communicate with chat servers, which expect regular TCP connections.
To log chats, the chat client writes text files to file system.
Browser doesn’t have file system. Instead, variety of other mechanisms for storing data, unevenly supported across browsers + variety of restrictions. One uses file system abstraction, but asynchronous & does not support blocking ops. More on that later.
Unbeknownst to chat program, Java Class Library performs # of unsafe operations with explicit memory allocation, requiring unmanaged heap.
Browser does not offer mechanism for explicit memory allocation. Not necessarily bad. Just not there.
Chat client needs all these components to function properly.
To run chat client in browser, we need to somehow emulate all these resources in browser.
Challenge: browser diversity. Not just trying to bring chat client to one browser.
Trying to bring to multiple browsers — unevenly implement various web standards. But not just one version of each browser.
Multiple major versions in use. Not to mention desktop, tablet, & mobile diffs. Browser diversity —> major obstacle to bringing the resources chat client needs into browser. Let’s illustrate with example.
Ignore version differences, and focus on latest version of each browser. As mentioned earlier, chat client needs to write log files into FS. # persistent storage mechanisms in browser that could use to emulate FS.
All implement key-value store that gives programs GIGANTIC 5 MB of storage.
Safari lets web pages store more data in SQL DB.
Chrome and Opera offer same functionality, but don’t persist DB… :(
Firefox and IE: web pages can persist data in object DB.
Once again, Chrome & Opera don’t persist DB.
IE’s implementation - also not fully spec-compliant. SURPRISE
Finally, HTML5 FS.
Only Chrome and Opera support this interface.
Takeaway = if chat client wants to persist > 5 MB of logs in browser AND cares about browser compatibility,
then must support three completely different storage interfaces. PITA
Second complication stems from JS event-driven runtime model =>
pervasive asynchrony in JS code.
In particular, JS I/O requires callbacks: painful for bringing conventional languages to browser.
Walk through example:Chat client periodically sends PING to server to ensure connection alive, waits for PONG.
Walk through Java, then try to directly translate to JS.
Say, somewhere in main method, chat client fires off ping.
sendPing function might look like this.
Simplifying for presentation purposes.
First, chat client writes PING command on socket to server.
Then, blocking read to wait for response.
Finally, returns data read off of wire.
And chat client continues on merry way.
Now, same thing in JS.
Like before, main function calls sendPing.
sendPing sends ping command on WebSocket (like before)
Then, need to assign callback function on socket obj.,
which browser will call once gets data from chat server.
But: problem.
main function expects sendPing returns response from server.
But sendPing does not have response yet;
must wait for browser to call callback just registered.
Now what? What do we do to return value main expects?
JS: no sleep function to suspend execution
& persist activation records for sendPing and main.
Busy-wait? server does send WebSocket message to the browser…
…ends up in browser event queue, which program has no access to.
This q = mouse clicks, timer fires, and other events while JS executing.
PLUS, if try to busy wait,
…browser will kill script, because blocking progress.
JS programs have no choice!
must execute in CPS,
periodically yield to browser event queue, scheduling next phase as new event.
Only way to unblock browser event queue
& receive WebSocket message from server
= empty JS call stack
So: sendPing returns
and main returns
Now, JS call stack empty
Browser fires next event
which triggers callback.
But now - completely disrupted program.
To port this Java code to JS:
program needs to be completely restructured into CPS
to allow breaks in execution for callbacks to execute.
OK, challenges.
Now, how Doppio Runtime System overcomes them.
Doppio = 100% JS runtime library
for bringing conventional languages to the web.
We implement threads on top of JS’s event-driven runtime model.
Language implementations use these threads: (1) keep programs responsive,
(2) support synchronous I/O, (3) run multithreaded programs.
Expose TCP socket interface on top of WebSockets, FS interface on top of various storage mechanisms available to the browser, and emulate unmanaged heap.
These 3 services handle challenges of browser diversity -
programs running in Doppio work across all major browsers.
Using Doppio, we implement DoppioJVM; proof-of-concept JVM interpreter
written in 100% JavaScript (TypeScript)
can run unmodified programs straight from JAR files.
DoppioJVM contains all features required to bring chat client to web.
Doppio’s threads:
Mentioned before:
chat client encapsulates each server connection into own thread.
Problem in browser because JS only has 1 thread.
How to map multiple language-level threads onto one hardware thread?
Doppio Threads -
language implementations must explicitly maintain their stack state.
Doppio Threads can then suspend execution
by saving stack information into JS object,
resume later using saved stack.
build time sliced priority-based thread scheduler
adjusts quanta dynamically for responsiveness.
= support MT programs w/ preemptive semantics
& long-running threads spanning multiple quanta,
prevents freezing web page
+ keeps application responsive to I/O.
But wait, there’s more!
Can also support synchronous I/O by suspending threads when use JS asynchronous I/O,
Resuming once needed information arrives
Now, can hook up JVM threads to Doppio Threads.
Chat client can spawn and run across multiple threads w/o needing to be modified.
Now Doppio FS.
Recall: chat client writes files to FS,
normally implemented in UnixFileSystem class.
The Doppio FS exposes POSIX FS interface in JavaScript.
FS supports many backends
most persistent storage mechanisms mentioned earlier
Dropbox cloud storage
zip files
Can be mounted into arbitrary locations in Doppio DS dir. hierarchy
= great flexibility for where chat client writes log files.
On to network sockets.
chat client expects to connect to chat server via TCP
BUT - problem porting to browser…
…no raw access to TCP
Instead, WebSockets
Server - no idea how to handle WebSocket conn.
Using Doppio Threads, implement JVM’s synch socket abstraction on asynch JS WebSockets.
But server - still no idea what WebSocket connection is.
Fix with “WebSockify”
Wraps server, transparently proxies WS connections to server as standard TCP connection. = no modification to client or server
Last = unmanaged heap.
@ chat client startup - pulls in LOTS of libraries in Java Class Library
Some invoke Unsafe Java API when statically initializing
needed to do lots of stuff
support = required for running client in browser
Back to my old friends malloc and free.
Trust me, I know how to do this efficiently.
Must operate on buffers of memory.
Representing binary data efficiently across browsers - tricky!
3 different representations, depending on browser:
ArrayBuffer and predecessor, CanvasPixelArray:
guaranteed to compactly represent heap in memory.
HTML5 Canvas - CanvasPixelArray used to back img info written to canvas.
We abuse it for its compact mem. representation.
Browser doesn’t support these? Fall back to vanilla JS array of #s.
2X memory overhead - JS #s = 64-bit doubles.
But: best universal fallback, since all JS bit ops coerce #s into 32-bit form.
Now, implement Doppio’s Unmanaged Heap using these data structures
implement the JVM’s malloc and free on top
=> JCL can perform its unsafe voodoo @ startup
Now, proof of concept, DoppioJVM.
DoppioJVM - unmodified copy of the OpenJDK JCL
Provides apps with library support they expect.
Map core JCL interfaces w/ Doppio OS services.
Doppio Threads => interfaces keep blocking JVM semantics, even to invoke asynch JS
Also - implement native portions of other classes, omitted here
More fundamental details! map core JVM data structures to JS features straightforwardly
Java Objects -> JS objects
Java Arrays -> JS arrays
Most numeric types -> JS numbers - act both as 32-bit integers and 64-bit doubles.
64-bit ints not natively provided in browser - emulate using Google’s gLong library.
This mapping -> GC ‘for free’ because already executing in GC’d environment.
Finally, some features of JVM that we had to simply reimplement. This includes the core bytecode interpreter for JVM bytecodes, the JVM classloader, and JVM monitors, which are used for synchronization across JVM threads.
DoppioJVM is real, it exists, and it has been evaluated by the artifact evaluation committee. This is our mock Terminal interface, which you can check out at doppiojvm.org.
First, I edit a file called Test.java, and I write a variant of the popular Hello World program.
I run an unmodified copy of javac on the Java source, which is now in the Doppio File System, and it compiles it into a class file.
Then, I run this class file, which produces the expected result: Hello, PLDI!
And just for fun, I run the unmodified Java disassembler on the class file, which displays the public methods of the class.
DoppioJVM runs many large, real, unmodified programs. For example, it can run the official Java compiler and disassembler, it can run an implementation of Scheme, and, yes, it can run an implementation of JavaScript. It can run many other programs as well, but we benchmarked DoppioJVM using these programs.
We compare DoppioJVM’s performance to the HotSpot interpreter, because DoppioJVM is an interpreter as well. But we note that DoppioJVM is an untuned proof-of-concept, whereas HotSpot is a highly-optimized native interpreter.
Despite this, DoppioJVM is 24 to 42 times slower than the HotSpot interpreter in Google Chrome. While there is a significant difference in DoppioJVM’s performance in Chrome over other browsers, we note that we developed DoppioJVM in Chrome, so that likely biased our results. And as DoppioJVM is an interpreter, any gain in performance in core interpreter loops can significantly improve program runtime. A side note: we found a memory leak in Safari while developing this work, which has since been fixed.
In any case, these results are from compute-intensive code. Browsers don’t generally run compute-intensive code, so DoppioJVM is fast enough for many people already.
For example, the University of Illinois launched a website, CodeMoo.com, that uses DoppioJVM to teach children how to program in Java using interactive games. In this basic ‘Level 1’ game, children string together function calls to guide the character in red to the goal without bumping into bad guys. When ready, the child clicks the green button,
[HIT SPACE]
and watches the character carry out the instructed actions. Under-the-covers, these instructions are placed into a Java file, compiled with the Eclipse Compiler running in DoppioJVM, and then the resulting class file is run in DoppioJVM — all harnessing the power of the visitor’s own browser.
So, in this talk, I introduced Doppio, a full runtime system that bridges the impedance mismatch between conventional languages in the browser. I also introduced our proof-of-concept Java Virtual Machine, DoppioJVM, which can run unmodified Java programs in the browser. I encourage you to check out Doppio at DoppioJVM.org. Thank you for your attention.