Describes how to use functional programming techniques with JavaScript, with specific examples around AJAX XHR requests. Presented at Ajax Experience 2008.
You can run the samples and view additional descriptions http://osteele.dev/talks/ajaxian-2008/samples/.
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...jaxconf
Ā
Get introduced to the Vaadin framework by one of its core developers. Vaadin provides a desktop-like programming model on the server for creating Rich Internet Applications (RIAs) in plain Java - without the need for HTML, XML, plug-ins or JavaScript. In this session, Joonas lays out the key concepts of the server-side RIA development model and compares it to client-side RIA. To demonstrate the use of framework, an example application is developed during the session step-by-step. The presentation is concluded with pointers on how to start developing your own applications with Apache-licensed Vaadin-framework. You'll learn: * How to create a desktop like web application in Java * Difference between page oriented, client-side RIA and server-side RIA architectures * How Vaadin can be extended with Google Web Toolkit
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...Joonas Lehtinen
Ā
The Vaadin provides a desktop-like programming model on the server for creating Rich Internet Applications (RIAs) in plain Java - without the need for HTML, XML, plug-ins or JavaScript.
Session explains the key concepts of the server-side RIA development model and compares it to client-side RIA. To demonstrate the use of framework, an example application is developed during the session step-by-step. The presentation is concluded with pointers on how to start developing your own applications with Apache-licensed Vaadin-framework.
You'll learn:
* How to create a desktop like web application in Java
* Difference between page oriented, client-side RIA and server-side RIA architectures
* How Vaadin can be extended with Google Web Toolkit
More information and materials about the presentation:
http://vaadin.com/web/joonas/wiki/-/wiki/Main/Server-side%20RIA
Here are the slides from my talk at @media in London two weeks ago titled "Professional Frontend Engineering." I had four goals for the talk.
Put a stake in the ground.
Reiterate our values.
Advocate the discipline.
Nurture a healthy Web.
The goals were threaded throughout the four sections of the talk::
Historical Perspective
Our Beliefs & Principles
Knowledge Areas & Best Practices
Why It All Matters
The professionalization of frontend engineering is a topic I'm passionate about. I think it is critical to the advancement of the Internet.
Presented May 30th, 2008, in London at the @media conference in the plenary opening day two.
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...jaxconf
Ā
Get introduced to the Vaadin framework by one of its core developers. Vaadin provides a desktop-like programming model on the server for creating Rich Internet Applications (RIAs) in plain Java - without the need for HTML, XML, plug-ins or JavaScript. In this session, Joonas lays out the key concepts of the server-side RIA development model and compares it to client-side RIA. To demonstrate the use of framework, an example application is developed during the session step-by-step. The presentation is concluded with pointers on how to start developing your own applications with Apache-licensed Vaadin-framework. You'll learn: * How to create a desktop like web application in Java * Difference between page oriented, client-side RIA and server-side RIA architectures * How Vaadin can be extended with Google Web Toolkit
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...Joonas Lehtinen
Ā
The Vaadin provides a desktop-like programming model on the server for creating Rich Internet Applications (RIAs) in plain Java - without the need for HTML, XML, plug-ins or JavaScript.
Session explains the key concepts of the server-side RIA development model and compares it to client-side RIA. To demonstrate the use of framework, an example application is developed during the session step-by-step. The presentation is concluded with pointers on how to start developing your own applications with Apache-licensed Vaadin-framework.
You'll learn:
* How to create a desktop like web application in Java
* Difference between page oriented, client-side RIA and server-side RIA architectures
* How Vaadin can be extended with Google Web Toolkit
More information and materials about the presentation:
http://vaadin.com/web/joonas/wiki/-/wiki/Main/Server-side%20RIA
Here are the slides from my talk at @media in London two weeks ago titled "Professional Frontend Engineering." I had four goals for the talk.
Put a stake in the ground.
Reiterate our values.
Advocate the discipline.
Nurture a healthy Web.
The goals were threaded throughout the four sections of the talk::
Historical Perspective
Our Beliefs & Principles
Knowledge Areas & Best Practices
Why It All Matters
The professionalization of frontend engineering is a topic I'm passionate about. I think it is critical to the advancement of the Internet.
Presented May 30th, 2008, in London at the @media conference in the plenary opening day two.
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise ArchitecturesBIOVIA
Ā
The Accelrys Enterprise Platform (AEP) provides support for scientific data integration and application delivery within an Enterprise environment. During this session, weāll provide a primer on the Accelrys Enterprise Platform and how it fits within an existing Enterprise Platform. This will include the deployment scenarios and key integration points that are found most common (and sometimes not so common) in many organizations.
Covering:
- What is a Content Repository and how does it work
- Comparison to relational database
- Why stable APIs are important and what to do if they are not
- Benefits of the open and transparent development
- Oh boy.. can I see it already!
- Why Sling is called Sling
- Various ways to deploy and develop code
- Deployment options and clustering
SQLUG event: An evening in the cloud: the old, the new and the big Mike Martin
Ā
Belgian SQL UG talk On Windows Azure SQL Database and CO: The last couple of months have been very exciting times for Microsoft fans. With the release of the central flagship, SQL Server 2012, and the new and improved Cloud offering on Windows Azure, Microsoft managed to change the IT Landscape dramatically. During this talk we want to take you through all the SQL Server features in the Windows Azure Environment in either the full cloud spectrum or hybrid scenarioās. Weāll cover subjects like SQL Databases, IaaS, provisioning, integration, migration and touch some of the more computing topics in the Windows Azure when it comes to data. Going from the pure basics of all SQL related to the more advanced stuff you can do with this magnificent cloud platform.
The history of programming languages shows a progressive development from low-level programming languages close to the machine, to high-level languages close to the problems being solved with software. Domain-specific languages take this a step further than general purpose programming languages by making assumptions about the class of applications for which the language is intended. Complete applications typically require programs in multiple (technical) domains, which can be catered for by separate domain-specific languages. While such separation of concerns is beneficial for domain expressivity, it often leads to loose coupling and lack of static verification. Hence, the design of individual DSLs needs to be complemented with their linguistic integration.
In this talk, I illustrate these ideas with the design of WebDSL, a domain-specific language for data centric web applications. WebDSL linguistically integrates the definition of data models, user interfaces, actions, access control rules, data validation rules, styling rules, and workflow definitions. While maintaining separation between these concerns through specialized sub-languages, linguistic integration ensures static consistency checking and correct code generation. The language allows developers to concentrate on the essential design of web applications, abstracting from accidental complexity, such as the details of data persistence. The combination of high-level and low-level constructs ensures high expressivity, while supporting customization to application requirements.
This presentation takes a pragmatic approach to comparing JavaFX and HTML5, using an application written in JavaFX versus the same functionality written in HTML5 to illustrate the pros and cons of each.
Since late 2009 there is Spring 3 published. Some things are new, something keep and something was removed.
Thos talk discuss the changes of the 3rd edition of Spring and introduce Spring Roo, Grails and the SpringSource Toolsuite.
In this session, we take a look at a handful of the features that will be part of the upcoming Java EE 8 release, as well as a few of the existing features that can be utilized in Java EE 7 today. Each of the features are presented via a recipe in the "Problem", "Solution", and "How it Works" format.
(ATS4-DEV04) Protocols as RESTful Services and RESTful URL RoutingBIOVIA
Ā
Accelrys Enterprise Platform 9.0 includes some significant enhancements to support the deployment of Pipeline Pilot protocols as web services.
This session will bring you up to date on the different styles of web service and options for deployment to end users and web service clients. You will also learn about techniques for publishing services using a standard REST-based model. The session will focus on practical demonstrations of taking Pipeline Pilot protocols and delivering them as REST-based web services.
Content-Driven Web Applications with Magnolia CMS and Ruby on Railsbkraft
Ā
Instead of going with a traditional Java-only based stack, Dievision chose to integrate Magnolia CMS with (J)Ruby on Rails and to use Rails as the web development framework for its Magnolia-based sites.
In this session, will share some of our experiences with this approach. We will talk about the initial motivation and the differences the environment makes for a developer as well as for a team. You will learn about the practical aspects of the Java/Ruby co-existence, how to integrate Magnolia CMS with the Rails framework and how to work with JCR-based content from a Ruby perspective. Finally, we will cover some options of testing and deploying a site.
Glitches can occur in even the best run IT operations. In this session, Accelrys support experts will share tips and tricks for proactively managing the performance of your ELN and detailed strategies for troubleshooting issues when they arise. Discussions will draw from real-world experience and will provide you with detailed strategies to leverage Accelrys support and minimize the time required to diagnose an issue.
(ATS4-GS02) A Lap Around Accelrys Enterprise Platform and Pipeline Pilot 9.0BIOVIA
Ā
The Accelrys Enterprise Platform is used by Accelrys, partners, and customers to both deliver applications on and integration applications and services with. During this session weāll walk through the different pieces that make up the Accelrys Enterprise Platform and how it connects into other applications and services, as well as provide an overview of how itās used within Enterprises.
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise ArchitecturesBIOVIA
Ā
The Accelrys Enterprise Platform (AEP) provides support for scientific data integration and application delivery within an Enterprise environment. During this session, weāll provide a primer on the Accelrys Enterprise Platform and how it fits within an existing Enterprise Platform. This will include the deployment scenarios and key integration points that are found most common (and sometimes not so common) in many organizations.
Covering:
- What is a Content Repository and how does it work
- Comparison to relational database
- Why stable APIs are important and what to do if they are not
- Benefits of the open and transparent development
- Oh boy.. can I see it already!
- Why Sling is called Sling
- Various ways to deploy and develop code
- Deployment options and clustering
SQLUG event: An evening in the cloud: the old, the new and the big Mike Martin
Ā
Belgian SQL UG talk On Windows Azure SQL Database and CO: The last couple of months have been very exciting times for Microsoft fans. With the release of the central flagship, SQL Server 2012, and the new and improved Cloud offering on Windows Azure, Microsoft managed to change the IT Landscape dramatically. During this talk we want to take you through all the SQL Server features in the Windows Azure Environment in either the full cloud spectrum or hybrid scenarioās. Weāll cover subjects like SQL Databases, IaaS, provisioning, integration, migration and touch some of the more computing topics in the Windows Azure when it comes to data. Going from the pure basics of all SQL related to the more advanced stuff you can do with this magnificent cloud platform.
The history of programming languages shows a progressive development from low-level programming languages close to the machine, to high-level languages close to the problems being solved with software. Domain-specific languages take this a step further than general purpose programming languages by making assumptions about the class of applications for which the language is intended. Complete applications typically require programs in multiple (technical) domains, which can be catered for by separate domain-specific languages. While such separation of concerns is beneficial for domain expressivity, it often leads to loose coupling and lack of static verification. Hence, the design of individual DSLs needs to be complemented with their linguistic integration.
In this talk, I illustrate these ideas with the design of WebDSL, a domain-specific language for data centric web applications. WebDSL linguistically integrates the definition of data models, user interfaces, actions, access control rules, data validation rules, styling rules, and workflow definitions. While maintaining separation between these concerns through specialized sub-languages, linguistic integration ensures static consistency checking and correct code generation. The language allows developers to concentrate on the essential design of web applications, abstracting from accidental complexity, such as the details of data persistence. The combination of high-level and low-level constructs ensures high expressivity, while supporting customization to application requirements.
This presentation takes a pragmatic approach to comparing JavaFX and HTML5, using an application written in JavaFX versus the same functionality written in HTML5 to illustrate the pros and cons of each.
Since late 2009 there is Spring 3 published. Some things are new, something keep and something was removed.
Thos talk discuss the changes of the 3rd edition of Spring and introduce Spring Roo, Grails and the SpringSource Toolsuite.
In this session, we take a look at a handful of the features that will be part of the upcoming Java EE 8 release, as well as a few of the existing features that can be utilized in Java EE 7 today. Each of the features are presented via a recipe in the "Problem", "Solution", and "How it Works" format.
(ATS4-DEV04) Protocols as RESTful Services and RESTful URL RoutingBIOVIA
Ā
Accelrys Enterprise Platform 9.0 includes some significant enhancements to support the deployment of Pipeline Pilot protocols as web services.
This session will bring you up to date on the different styles of web service and options for deployment to end users and web service clients. You will also learn about techniques for publishing services using a standard REST-based model. The session will focus on practical demonstrations of taking Pipeline Pilot protocols and delivering them as REST-based web services.
Content-Driven Web Applications with Magnolia CMS and Ruby on Railsbkraft
Ā
Instead of going with a traditional Java-only based stack, Dievision chose to integrate Magnolia CMS with (J)Ruby on Rails and to use Rails as the web development framework for its Magnolia-based sites.
In this session, will share some of our experiences with this approach. We will talk about the initial motivation and the differences the environment makes for a developer as well as for a team. You will learn about the practical aspects of the Java/Ruby co-existence, how to integrate Magnolia CMS with the Rails framework and how to work with JCR-based content from a Ruby perspective. Finally, we will cover some options of testing and deploying a site.
Glitches can occur in even the best run IT operations. In this session, Accelrys support experts will share tips and tricks for proactively managing the performance of your ELN and detailed strategies for troubleshooting issues when they arise. Discussions will draw from real-world experience and will provide you with detailed strategies to leverage Accelrys support and minimize the time required to diagnose an issue.
(ATS4-GS02) A Lap Around Accelrys Enterprise Platform and Pipeline Pilot 9.0BIOVIA
Ā
The Accelrys Enterprise Platform is used by Accelrys, partners, and customers to both deliver applications on and integration applications and services with. During this session weāll walk through the different pieces that make up the Accelrys Enterprise Platform and how it connects into other applications and services, as well as provide an overview of how itās used within Enterprises.
Presentation held at Web Monday Stockholm in March 2008. I am introducing JCR, Sling and the Āµjax AJAX-based access layer to a JCR repository. The presentation included a demo of a small Dojo application built using the Āµjax-Dojo-integration.
Presentation held at Web Montag Stockholm, March 2008. Introduction of JCR, Sling and the Āµjax AJAX-based access layer to a content repository. The presentation includes the demo of the Āµjax Dojo integration.
Āµjax is a lightweight AJAX library for accessing content in a Java Content Repository (JCR) over the web. This presentation was given at Web Montag in Berlin, 01-21-2008.
Come learn how to extend your existing Web applications and get them to live and breathe within Live Mesh. See how Mesh-enabled Web applications can be accessed from anywhere through a Web browser as well as run locally (and offline) on a user's desktop. Also see how Web applications can take full advantage of value-add Mesh services such as a dedicated sandbox, online and offline synchronized storage, automatic application updates, identity, application catalogue, social computing, and more.
Balconies, Patios, Terraces, and Bridges. Architectural approaches for moving...mfrancis
Ā
OSGi is a great platform for building new applications, but what if you have 250.000 lines of legacy Java code that uses custom classloaders, dynamic invocation, and complex resource loading techniques? There are many approaches to moving such a product to OSGi. This talk will explore the approaches Software AG evaluated while moving their flagship integration platform from plain old Java to OSGi as well as challenges encountered as part of the move.
Accelrys Enterprise Platform scales from laptops to grids, but can how does it do that and how can it scale to meet the demands of an Enterprise Application? Enterprise Architects and Developers will get a detailed view of how Pipeline Pilot handles job management, job queuing, job pooling, security, memory management, process isolation and more. This session provides background information that will support later presentations in the platform and developers tracks.
Visibility into Serverless Applications built using AWS Fargate (CON312-R1) -...Amazon Web Services
Ā
Ever wondered how you would get visibility into your application when you go serverless? In this session, we will dive deep into various visibility aspects of your serverless applications on AWS Fargate. We will cover best practices around logging, alerting, metric collection and monitoring health of your containers. We will also learn several ways to troubleshoot container start up issues or application errors. Catalytic will then show how theyāre using Fargate to perform parallelized bioinformatics workflows and how they gain better visibility into their applications running on Fargate.
The Metaverse and AI: how can decision-makers harness the Metaverse for their...Jen Stirrup
Ā
The Metaverse is popularized in science fiction, and now it is becoming closer to being a part of our daily lives through the use of social media and shopping companies. How can businesses survive in a world where Artificial Intelligence is becoming the present as well as the future of technology, and how does the Metaverse fit into business strategy when futurist ideas are developing into reality at accelerated rates? How do we do this when our data isn't up to scratch? How can we move towards success with our data so we are set up for the Metaverse when it arrives?
How can you help your company evolve, adapt, and succeed using Artificial Intelligence and the Metaverse to stay ahead of the competition? What are the potential issues, complications, and benefits that these technologies could bring to us and our organizations? In this session, Jen Stirrup will explain how to start thinking about these technologies as an organisation.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Ā
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā¢UiPathCommunity
Ā
In questo evento online gratuito, organizzato dalla Community Italiana di UiPath, potrai esplorare le nuove funzionalitĆ di Autopilot, il tool che integra l'Intelligenza Artificiale nei processi di sviluppo e utilizzo delle Automazioni.
š Vedremo insieme alcuni esempi dell'utilizzo di Autopilot in diversi tool della Suite UiPath:
Autopilot per Studio Web
Autopilot per Studio
Autopilot per Apps
Clipboard AI
GenAI applicata alla Document Understanding
šØāš«šØāš» Speakers:
Stefano Negro, UiPath MVPx3, RPA Tech Lead @ BSP Consultant
Flavio Martinelli, UiPath MVP 2023, Technical Account Manager @UiPath
Andrei Tasca, RPA Solutions Team Lead @NTT Data
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Ā
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
Ā
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. Whatās changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
In his public lecture, Christian Timmerer provides insights into the fascinating history of video streaming, starting from its humble beginnings before YouTube to the groundbreaking technologies that now dominate platforms like Netflix and ORF ON. Timmerer also presents provocative contributions of his own that have significantly influenced the industry. He concludes by looking at future challenges and invites the audience to join in a discussion.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Ā
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
DevOps and Testing slides at DASA ConnectKari Kakkonen
Ā
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Ā
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
Ā
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofsAlex Pruden
Ā
This paper presents Reef, a system for generating publicly verifiable succinct non-interactive zero-knowledge proofs that a committed document matches or does not match a regular expression. We describe applications such as proving the strength of passwords, the provenance of email despite redactions, the validity of oblivious DNS queries, and the existence of mutations in DNA. Reef supports the Perl Compatible Regular Expression syntax, including wildcards, alternation, ranges, capture groups, Kleene star, negations, and lookarounds. Reef introduces a new type of automata, Skipping Alternating Finite Automata (SAFA), that skips irrelevant parts of a document when producing proofs without undermining soundness, and instantiates SAFA with a lookup argument. Our experimental evaluation confirms that Reef can generate proofs for documents with 32M characters; the proofs are small and cheap to verify (under a second).
Paper: https://eprint.iacr.org/2023/1886
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
Ā
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
1. Practical Functional
JavaScript
Oliver Steele
Ajax Experience
Wednesday, 1 October 2008
2. Teasers
ā¢ AJAX is all about waiting for someone*, and
remembering what you were going to do
when they got back to you.
ā¢ Functions : interactions :: objects : domains
ā¢ You didn't really want threads anyway.
(Most of the time.)
* user, web server, other server, wall clock, plugin
3. About Me
implementing using
where? what? graphics languages graphics languages
Ruby bindings for āMinority
Oblong Industries
Reportā-style interfaces ā ā
BrowseGoods
Entrepreneurial & Style&Share
Consulting Fansnap ā ā
Webtop Calendar
Laszlo Systems OpenLaszlo ā ā
Apple Advanced Dylan ā ā
Technology Group (programming language)
Apple System Software Skia ā ā
(graphics library)
4. About You
Raise your hand if you know*:
ā¢ Closures
ā¢ Ruby / Smalltalk
ā¢ XHR / AJAX
ā¢ An AJAX framework (Prototype / jQuery / ā¦)
ā¢ Threads
* none of these are required; this just helps me calibrate the talk
5. Agenda
ā¢ Context ā¢ Callbacks
ā¢ Example Applications ā¢ Queueing & Throttling
ā¢ MVC on the Client ā¢ Caching & Joining
ā¢ Retries & Failover
ā¢ Fundamentals
ā¢ Closures (review) ā¢ Conclusions
ā¢ Making Functions
ā¢ Decorating Functions
ā¢ Q&A
ā¢ Some Idioms
6. Non-Agenda
ā¢ Comet, Bayeux, Gears
ā¢ Frameworks*
ā¢ Theory (this isn't your Monad or CPS ļ¬x)
ā¢ Security (standard practices apply)
* This talk should help you understand their implementation and use, but doesn't explore
their APIs in any depth
10. BrowseGoods
Capabilities
ā¢ Background prefetch of item maps
ā¢ Background fetch of saved items
ā¢ Operations on saved items are queued until
initialization is complete
11. Style & Share Server Architecture
Client
Internet
Web Application Processes
Catalog Cart Image
Controller Controller Controller
Catalog
Model
Product Image
Request Catalog Carts Images Request
Queue Queue
Catalog
Image Editor
Updater
Cart Sweeper
Image
ECS Client
Retriever
Catalog Update Process Garbage Collector Image Process
Client Architecture
Internet
Catalog
Cart Manager
Search Gallery
ECS Cart Server Cart Selector
ECS Search Amazon ECS Amazon Image
Proxy Proxy Server Servers
ECS Connection Server Proxy
AJAX Throttle
Task Scheduler
Internet
ECS Server Style&Share Server
12.
13. Style & Share
Capabilities
ā¢ Retry with exponential backoff and failover
ā¢ Explicit queues to control serialization
order
ā¢ Background prefetch for catalog items
ā¢ Multiple queues to prioritize user
interaction
14. Fansnap
ā¢ Visualize available seats
in a venue
ā¢ Seatmap is OpenLaszlo
(compiled to Flash)
ā¢ Widgets are in jQuery
15.
16. FanSnap Capabilities
(Seatmap)
ā¢ Two-way asynchronous communication
between the Flash plugin and the HTML
ā¢ Asynchronous communication between the
Flash plugin and the server
ā¢ Again, initialization is particularly challenging
17. Webtop Calendar
Webtop Calendar Client Data Architecture
Calendar Client
View Layer
Event
Event Model Calendar Model
Observer
Data Layer
Event Calendar Calendar Service
Cache Collection
Range Event Report
Cache Cache
Serializer CalendarConnection
Webtop Client Library
Internet
Webtop Server
18.
19. Webtop Calendar
Capabilities (Data Model)
ā¢ Synchronizes local model with server
model
ā¢ Local model is cache: some operations
update it; others invalidate it
ā¢ Race conditions, where prefetch overlaps
operations that invalidate the cache
20. Motivating Problem:
Web MVC
Server Client
View View
Model Model User
Controller Controller
27. What is a Function? Create
Call graph
ā¢ Math: rule that maps inputs to outputs
Invoke
Docs
ā¢ Computer science: abstracted computation
Specs with effects and outputs
ā¢ Source Runtime
Software engineering: one of several units
Register
forCode Object
documentation, testing, assertions, and
Defān
analysis
ā¢ Source code: unit of source text with Store
inputs and outputs
Contract
Implementation
ā¢ Runtime: invocable parameterized behavior
Pass
28. Nested Functions:
Globals
function callback(x) {
log('received quot;' + x + 'quot;');
}
Ā
function request() {
$.get('/request', callback);
}
Ā
request();
Ā
Ā
29. Nested Functions:
Variables
var callback = function(x) {
log('received quot;' + x + 'quot;');
}
Ā
var request = function() {
$.get('/request', callback);
}
Ā
request();
Ā
Ā
30. Nested Functions:
Function-First Style
function request() {
function callback(x) {
log('received quot;' + x + 'quot;');
}
$.get('/request', callback);
}
Ā
request();
Ā
Ā
31. Nested Functions:
Pyramid Order
function request() {
$.get('/request', callback);
function callback(x) {
log('received quot;' + x + 'quot;');
}
}
Ā
request();
Ā
Ā
32. Nested Functions:
Inlining the Function
function request() {
$.get('/request', function callback(x) {
log('received quot;' + x + 'quot;');
});
}
Ā
request();
Ā
Ā
33. Nested Functions:
Anonymous
function request() {
$.get('/request', function (x) {
log('received quot;' + x + 'quot;');
});
}
Ā
request();
Ā
39. Creating Functions:
Building a Registry
var FnTable = {};
function register(name, fn) { FnTable[name] = fn; }
function tableMethod(name) { return FnTable[name]; }
function makeAdder(n) {
return function(x) { return x + n; }
}
Ā
register('+1', makeAdder(1));
register('+2', makeAdder(2));
log(tableMethod('+1')(10));
log(tableMethod('+2')(10));
Ā
Ā
40. Creating Functions:
Manual Guards
for (var i = -5; i < 5; i++)
log(i);
Ā
Ā
function callIfPositive(fn) {
return function(x) {
return x > 0 ? fn(x) : undefined;
}
}
Ā
var logIfPositive = callIfPositive(log);
Ā
for (var i = -5; i < 5; i++)
logIfPositive(i);
Ā
Ā
41. Creating Functions:
Guard Construction
function guard(fn, g) {
return function(x) {
return g(x) ? fn(x) : undefined;
}
}
Ā
function callIfPositive(fn) {
return guard(fn, function(x) { return x > 0; });
}
Ā
var logIfPositive = callIfPositive(log);
Ā
for (var i = -5; i < 5; i++)
logIfPositive(i);
Ā
42. Closures (1)
var get, set;
function assignAccessors() {
var x = 1;
get = function() { return x; }
set = function(y) { x = y; }
}
assignAccessors();
log(get());
set(10);
log(get());
43. Closures (2)
function makeAccessors() {
var x;
return {get: function() { return x; },
set: function(y) { x = y; }}
}
var gf1 = makeAccessors();
var gf2 = makeAccessors();
gf1.set(10);
gf2.set(20);
log(gf1.get());
log(gf2.get());
Ā
44. Function Construction Idioms:
Special Variables
// 'this' and 'arguments' are special
function f() {
logArguments(this, arguments);
}
f();
f('a');
f('a', 'b');
Ā
Ā
45. Function Construction Idioms:
Function Call and Apply
function f() { logArguments(this, arguments); }
// these are equivalent:
f(1, 2, 3);
f.call(window, 1, 2, 3);
f.apply(window, [1, 2, 3]);
Ā
Ā
46. Function Construction Idioms:
Method Call and Apply
var obj = {
f: function() {
logArguments(this, arguments); }};
// and so are these:
obj.f(1, 2, 3);
obj.f.call(obj, 1, 2, 3);
obj.f.apply(obj, [1, 2, 3]);
47. Function Construction Idioms:
Borrowing Methods (Bad)
// stealing a method the wrong way
var o1 = {name: 'o1',
show: function() { log(this.name); }};
var o2 = {name: 'o2'};
o1.show();
o2.show = o1.show;
o2.show();
delete o2.show;
Ā
Ā
48. Function Construction Idioms:
Borrowing Methods (Better)
// using 'apply' to steal a method
var o1 = {name: 'o1',
show: function() { log(this.name); }};
var o2 = {name: 'o2'};
o1.show();
o1.show.call(o2);
o1.show.apply(o2, []);
Ā
49. Function Construction Idioms:
arguments is special
// arguments isn't an Array, so this doesn't work:
function capture() {
var args = arguments.slice(0);
// ...
}
Ā
// instead, steal the 'slice' method from an instance of Array,
// and apply it:
function capture() {
var args = [].slice.call(arguments, 0);
// ...
}
Ā
// or just take it from Array's prototype
function capture() {
var args = Array.prototype.slice.call(arguments, 0);
// ...
}Ā
50. Function Construction Idioms:
Wrapping Variadic Functions
function id1(fn) {
return function(x) {
return fn(x);
}
}
Ā
function id2(fn) {
return function(x, y) {
return fn(x, y);
}
}
Ā
function idn(fn) {
return function() {
return fn.apply(this, arguments);
}
}
51. Function Construction Idioms:
Record and Replay
var queue = [];
function capture() {
queue.push(Array.prototype.slice.call(arguments, 0));
}
function replay() {
while (queue.length)
fn.apply(null, queue.shift());
}
function fn(a, b) {
log(a + ' + ' + b + ' = ' + (a+b));
}
capture(1,2);
capture(1,3);
capture(10,20);
replay();
52. Function Construction Idioms:
Extending Functionās Prototype
Function.prototype.twice = function() {
var fn = this;
return function() {
return fn.call(this, fn.apply(this, arguments));
};
}
function plus1(x) { return x+1; }
var plus2 = plus1.twice();
log(plus2(10));
Ā
53. Summary
ā¢ Functions are values
ā¢ Functions can be arguments, return
values, array elements, property values
ā¢ Functions can be created and āmodiļ¬edā
ā¢ Argument lists can be saved, modiļ¬ed, and
replayed
54. Case Study: Callbacks
Server Client
<%@page
<html>
<?= t
<meta
<canvas
<text
<view
<?xml v
<%@ tag
<xslt:t
XML <?xml
<root>
<row>
</row>
<?xml
<root>
<row>
</row>
<?xml v
<%@ tag
XML
<xslt:t
<?xml
<root>
<row>
</row>
56. Throttling:
Unthrottled
for (var i = 0; i < 10; i++)
$.get('/services/time', log);
Ā
Ā
57. Frequency Throttling:
Call Site
var gCounter = 0;
function runNext() {
if (gCounter < 10) {
setTimeout(function() {
$.get('/services/time', log);
runNext();
}, 1000);
gCounter++;
}
}
runNext();
Ā
Ā
58. Frequency Throttling:
Manual Wrapper
var gQueue = [];
var gNextTime = 0;
$.throttled = function(url, k) {
gQueue.push([url, k]);
if (gQueue.length == 1)
schedule();
function schedule() {
setTimeout(function() {
gNextTime = new Date().getTime() + 1000;
var entry = gQueue.shift();
$.get(entry[0], entry[1]);
if (gQueue.length)
schedule();
}, Math.max(0, gNextTime - new Date().getTime()));
}
};Ā
for (var i = 0; i < 10; i++)
Ā
$.throttled('/services/time', log);
59. Frequency Throttling:
Function Constructor
function makeThrottled(fn, interval) {
var queue = [];
var nextTime = 0;
return function() {
queue.push(Array.prototype.slice.call(arguments, 0));
if (queue.length == 1) schedule();
}
function schedule() {
setTimeout(function() {
nextTime = new Date().getTime() + interval;
fn.apply(null, queue.shift());
if (queue.length) schedule();
}, Math.max(0, nextTime - new Date().getTime()));
}
}
$.throttled = makeThrottled($.get, 1000);
for (var i = 0; i < 10; i++)
$.throttled('/services/time', log);
Ā
Ā
60. Count Throttling:
Manual Wrapper
var gQueue = [];
var gOutstanding = 0;
$.throttled = function(url, k) {
function k2() {
gOutstanding--;
k.apply(this, arguments);
if (gOutstanding < 2 && gQueue.length) {
var entry = gQueue.shift();
$.get(entry[0], entry[1]);
}
}
if (gOutstanding < 2) {
gOutstanding++;
$.get(url, k2);
} else
gQueue.push([url, k2]);
};
for (var i = 0; i < 10; i++)
$.throttled('/services/sleep/2', log);
Ā
Ā
61. Count Throttling:
Constructor
function makeLimited(fn, count) {
var queue = [];
var outstanding = 0;
return function() {
var args = Array.prototype.slice.call(arguments, 0);
// replace the last arg by one that runs the
// next queued fn
args.push(adviseAfter(args.pop(), next));
if (outstanding < count) {
outstanding++;
fn.apply(this, args);
} else
queue.push(args);
}
function next() {
if (queue.length)
fn.apply(null, queue.shift());
}
}
$.throttled = makeLimited($.get, 2); for (var i = 0; i < 10; i++)
$.throttled('/services/sleep/2', log);
62. Frequency Throttling:
Function Constructor
function makeThrottled(fn, interval) {
var queue = [];
var nextTime = 0;
return function() {
queue.push(Array.prototype.slice.call(arguments, 0));
if (queue.length == 1) schedule();
}
function schedule() {
setTimeout(function() {
nextTime = new Date().getTime() + interval;
fn.apply(null, queue.shift());
if (queue.length) schedule();
}, Math.max(0, nextTime - new Date().getTime()));
}
}
$.throttled = makeThrottled($.get, 1000);
for (var i = 0; i < 10; i++)
$.throttled('/services/time', log);
Ā
Ā
67. Caching (2)
var gPendingRequests = {};
var gRequestCache = {}; $.cachedGet('/services/random', log);
$.cachedGet = function(url, k) { $.cachedGet('/services/random', log);
if (url in gRequestCache) $.cachedGet('/services/echo/1', log);
$.cachedGet('/services/echo/2', log);
k(gRequestCache[url], 'success');
$.cachedGet('/services/random', log);
else if (url in gPendingRequests)
gPendingRequests[url].push(k);
else {
var queue = [k];
gPendingRequests[url] = queue;
$.get(url, function(result, status) {
if (status == 'success')
gRequestCache[url] = result;
while (queue.length)
queue.shift().call(this, result, status);
delete gPendingRequests[url];
});
}
};Ā
68. Caching (3)
function memoizedContinuation(fn) {
$.cachedGet('/services/random', log);
var cache = {};
return function(key, k) { $.cachedGet('/services/random', log);
if (key in cache) $.cachedGet('/services/echo/1', log);
k(cache[key]); $.cachedGet('/services/echo/2', log);
else $.cachedGet('/services/random', log);
fn(key, k); Ā
}
}
function consolidateContinuations(fn) {
var queues = {};
return function(key, k) {
if (key in queues)
queues[key].push(k);
else {
var queue = queues[key] = [k];
fn(key, function(value) {
while (queue.length)
queue.shift().call(this, value);
delete queues[key];
});
}
}
}
$.cachedGet = consolidateContinuations(memoizedContinuation($.get));
69. Summary
ā¢ Functions-as-objects allow separation of
concerns
ā¢ Factor how, when, and whether from what
ā¢ Functions are to interaction patterns as objects
are to domains