This document provides an introduction to REST and Jersey. It summarizes a presentation given by Chris Winters to the Pittsburgh Java User Group on April 21, 2009. The presentation introduces REST concepts, discusses why HTTP is successful, and provides an overview of the Jersey framework for building RESTful web services in Java. It also demonstrates a simple note taking application built with REST and Jersey.
Rapid Prototyping with Solr:
- The presentation will demonstrate how to quickly get documents into Solr, adjust the schema, and build a search user interface leveraging facets, highlighting, and other features.
- Examples will be shown of ingesting different data types like CSV, rich text files, and structured APIs into Solr for rapid prototyping of search applications.
- Tools discussed include using the Solr update handlers, Velocity templates, and Blacklight for building prototypes to get early feedback before full development.
OSMC 2013 | Log- und Eventmanagement by Bernd ErkNETWAYS
Das Handling von passiven Events und deren Korrelation gehört nicht gerade zu den großen Stärken von Nagios und Icinga. Natürlich ist es mit Hilfe verschiedener Plugins und Addons möglich unterschiedlichste Quellen zu überwachen und auszuwerten, eine regelbasierte Verarbeitung und Langzeitspeicherung gestaltet sich jedoch meist schwierig.
Um eine lückenlos nachvollziehbare Kette an Logs und Events von Entstehung bis zur Speicherung sicherzustellen, stehen diverse Open Source Lösungen zur Verfügung. Werkzeuge wie Logstash, EDBC und statsd genießen in den letzten Monaten größer werdende Beliebtheit, werden jedoch häufig isoliert konfiguriert und betrieben. Die große Herausforderung besteht darin, die vorhandenen Werkzeuge miteinander zu verbinden um die individuellen Stärken optimal zu nutzen.
Neben einer Einführung in die verwendeten Tools, demonstriert der Vortrag eine konkrete Implementierung der beschriebenen Komponenten und deren Anbindung an Nagios und Icinga. Dies geht von der Installation und Konfiguration bis hin zu erweiterten Filter- und Korrelationsregeln.
The document discusses Yahoo!'s open strategy and use of open source technologies and standards. It highlights Yahoo!'s embrace of open source through its contributions to projects like YUI and support of standards like OAuth, OpenID, and YQL. It also details Yahoo!'s Developer Network which provides tools, APIs, and resources for developers to build applications and mashups using Yahoo!'s open platforms and data.
The document discusses HTML5 and its features. It describes how HTML5 introduces new semantic elements that are clearer and more semantic than traditional HTML tags, and shows an example HTML5 document structure. It also discusses some of HTML5's new features like audio, video, canvas, forms, and APIs for local storage, geolocation and web SQL databases. Finally, it provides examples of using some of these new features in HTML5.
This document discusses Boolean logic and Boolean search techniques. It provides an overview of Boolean logic operators such as AND, OR, and NOT. It then explains how Boolean logic is used for digital circuits and search engines. The document gives several examples of Boolean searches and tips for optimizing searches. Key topics include Boolean logic, search engine optimization, Boolean operators, truncation, wildcards, nesting, and Boolean searches for common roles.
The basics to start developing Rich Internet applications.
This presentation talks about some of the important stuff to follow to make the web application both interactive and robust
Stop Making The Web Harder Than It Is; Real-world REST, HATEOAS, and Hypermed...kiphampton
Developing for the Web shouldn't be hard. Yet, many smart developers make it more difficult than it needs to be by choosing tools and frameworks that do not fully take advantage of all that HTTP has to offer. This talk demonstrates how projects at all levels-- from the simplest brochureware site to the most advanced Hypermedia APIs--can be made simpler by getting back to the basics of HTTP. We introduce Tamarou's internal application development and publishing framework, Magpie (scheduled for public release to coincide with YAPC::NA) and step through a series of real-world examples to show how its resource-oriented approach to development keeps simple things simple and makes hard things easier.
Topics include:
* Why MVC is the wrong way to think about Web development.
* Why most frameworks that claim to be RESTful aren't (and how that makes life harder)
* An brief introduction to Resource-oriented development.
* A series of production-tested Magpie recipes covering the gamut of Web-dev from simple templated sites through advanced Hypermedia applications.
Rapid Prototyping with Solr:
- The presentation will demonstrate how to quickly get documents into Solr, adjust the schema, and build a search user interface leveraging facets, highlighting, and other features.
- Examples will be shown of ingesting different data types like CSV, rich text files, and structured APIs into Solr for rapid prototyping of search applications.
- Tools discussed include using the Solr update handlers, Velocity templates, and Blacklight for building prototypes to get early feedback before full development.
OSMC 2013 | Log- und Eventmanagement by Bernd ErkNETWAYS
Das Handling von passiven Events und deren Korrelation gehört nicht gerade zu den großen Stärken von Nagios und Icinga. Natürlich ist es mit Hilfe verschiedener Plugins und Addons möglich unterschiedlichste Quellen zu überwachen und auszuwerten, eine regelbasierte Verarbeitung und Langzeitspeicherung gestaltet sich jedoch meist schwierig.
Um eine lückenlos nachvollziehbare Kette an Logs und Events von Entstehung bis zur Speicherung sicherzustellen, stehen diverse Open Source Lösungen zur Verfügung. Werkzeuge wie Logstash, EDBC und statsd genießen in den letzten Monaten größer werdende Beliebtheit, werden jedoch häufig isoliert konfiguriert und betrieben. Die große Herausforderung besteht darin, die vorhandenen Werkzeuge miteinander zu verbinden um die individuellen Stärken optimal zu nutzen.
Neben einer Einführung in die verwendeten Tools, demonstriert der Vortrag eine konkrete Implementierung der beschriebenen Komponenten und deren Anbindung an Nagios und Icinga. Dies geht von der Installation und Konfiguration bis hin zu erweiterten Filter- und Korrelationsregeln.
The document discusses Yahoo!'s open strategy and use of open source technologies and standards. It highlights Yahoo!'s embrace of open source through its contributions to projects like YUI and support of standards like OAuth, OpenID, and YQL. It also details Yahoo!'s Developer Network which provides tools, APIs, and resources for developers to build applications and mashups using Yahoo!'s open platforms and data.
The document discusses HTML5 and its features. It describes how HTML5 introduces new semantic elements that are clearer and more semantic than traditional HTML tags, and shows an example HTML5 document structure. It also discusses some of HTML5's new features like audio, video, canvas, forms, and APIs for local storage, geolocation and web SQL databases. Finally, it provides examples of using some of these new features in HTML5.
This document discusses Boolean logic and Boolean search techniques. It provides an overview of Boolean logic operators such as AND, OR, and NOT. It then explains how Boolean logic is used for digital circuits and search engines. The document gives several examples of Boolean searches and tips for optimizing searches. Key topics include Boolean logic, search engine optimization, Boolean operators, truncation, wildcards, nesting, and Boolean searches for common roles.
The basics to start developing Rich Internet applications.
This presentation talks about some of the important stuff to follow to make the web application both interactive and robust
Stop Making The Web Harder Than It Is; Real-world REST, HATEOAS, and Hypermed...kiphampton
Developing for the Web shouldn't be hard. Yet, many smart developers make it more difficult than it needs to be by choosing tools and frameworks that do not fully take advantage of all that HTTP has to offer. This talk demonstrates how projects at all levels-- from the simplest brochureware site to the most advanced Hypermedia APIs--can be made simpler by getting back to the basics of HTTP. We introduce Tamarou's internal application development and publishing framework, Magpie (scheduled for public release to coincide with YAPC::NA) and step through a series of real-world examples to show how its resource-oriented approach to development keeps simple things simple and makes hard things easier.
Topics include:
* Why MVC is the wrong way to think about Web development.
* Why most frameworks that claim to be RESTful aren't (and how that makes life harder)
* An brief introduction to Resource-oriented development.
* A series of production-tested Magpie recipes covering the gamut of Web-dev from simple templated sites through advanced Hypermedia applications.
This document introduces Bazaar, an open source distributed version control system. It describes key Bazaar concepts like branches, revisions, repositories, working trees, and formats. It explains how to perform common version control tasks with Bazaar like committing changes, sharing work with others, and collaborating through merging. The document also discusses how to use Launchpad for hosting Bazaar projects and integrating with other tools.
These are the slides from a free workshop I gave of April 29, 2009 on using wordpress to manage your website. For more information visit http://downeastlearning.org/
API's, Freebase, and the Collaborative Semantic webDan Delany
A presentation about the state of the collaborative semantic web, including:
- What?
- Why?
- Where do we stand?
- A case study on Metaweb's Freebase project
A presentation I gave at the International PHP Conference 2008 in Mainz, Germany.
Marjory is a webservice for building and searching in full text indexes, implemented in PHP.
This document discusses applying REST principles to integrate systems. It provides examples of using REST for basic web publishing, data-intensive integration through microformats and mashups, and process-intensive integration through RESTful workflows. It also describes a case study of developing a RESTful architecture for the Australian lending industry to publish and share loan data in a standardized way.
Everyone is mashing up in Flex these days, why aren't you? Drop in and learn how to mash up various cloud or other APIs from MTV, Amazon, Twitter, eBay, or various others listed on programmableweb.com. Emphasis will be placed on consuming XML by way of e4x utilizing REST or Soap.
ReST is an architectural style defined by a set of constraints including being client-server, stateless, cacheable, and having a uniform interface. It favors directly addressing resources over remote procedure calls and aims to make systems more scalable and loosely coupled. While sometimes seen as weak due to performance and customization issues, ReST architectures also provide benefits like low barriers to entry and being easier to develop and maintain.
Text indexing and search libraries for PHP - Zoë Slattery - Barcelona PHP Con...phpbarcelona
The document discusses a presentation about improving indexing speed for PHP applications. It begins by introducing common information retrieval libraries like Lucene, and compares the indexing speed of PHP and Java implementations of Lucene. Profiling tools show that the PHP implementation takes much longer than Java, largely due to overhead from PHP's dynamic nature which makes function calls slower compared to Java's optimized approach using virtual dispatch tables. The document explores reasons for the performance differences and aims to help PHP programmers understand execution times.
Creating Semantic Mashups Bridging Web 2 0 And The Semantic Web Presentation 1jward5519
The document discusses creating semantic mashups by bridging Web 2.0 and the Semantic Web. It provides examples of how semantic data can be used flexibly from multiple sources to build applications and demonstrations. The key advantages of semantic data include increased utility of applications by helping users accomplish tasks more easily, and allowing for greater efficiency by reusing existing data sources where possible.
Creating Semantic Mashups Bridging Web 2 0 And The Semantic Web Presentation 1jward5519
The document discusses creating semantic mashups by bridging Web 2.0 and the Semantic Web. It provides examples of how semantic data can be used flexibly across different domains and applications. The key benefits of semantic data include increased utility of applications by helping users complete tasks more easily, and allowing for greater efficiency by reusing existing data sources where possible.
This document discusses Facebook's use of Hadoop and Hive for storing and analyzing large amounts of user-generated data. Key points include:
- Facebook stores petabytes of user data including statuses, photos, videos in its Hadoop/Hive warehouse and other Hadoop clusters.
- The data is used for business intelligence to inform strategies and decisions, and power artificial intelligence like recommendations and ads optimization.
- Hive is used for ad hoc querying, building machine learning models at scale, and performing text analytics on large corpora.
- Examples demonstrate how metrics dashboards and recommendation systems were built on Hadoop/Hive.
This document discusses Representational State Transfer (REST) and compares it to Service Oriented Architecture (SOA). It provides background on the early web and how REST emerged as a set of constraints for networked applications. It notes that REST is not a technology, standard, or product, but rather an architectural style. The document discusses core REST concepts like resources, representations, and stateless interactions over the uniform interface of HTTP. It addresses some common misconceptions about REST and whether it is only suited for simple use cases.
Streamlining Your Applications with Web Frameworksguestf7bc30
The document discusses web frameworks and how they provide libraries and structure for common tasks in web application development to promote best practices and allow developers to focus on their specific application needs rather than solving common problems. It provides an overview of features of web frameworks like CakePHP including MVC architecture, AJAX functionality, and RESTful resource-oriented design.
This document discusses PHP Data Objects (PDO), a database abstraction layer for PHP. PDO provides a common interface for accessing various database systems and aims to eliminate inconsistencies in different database extensions. It allows prepared statements and bound parameters to help prevent SQL injection attacks. PDO is included with PHP 5.1 and later and provides drivers for many database systems including MySQL, PostgreSQL, SQLite, and SQL Server.
Blueprint talk at Open Hackday London 2009Ricardo Varela
The document describes Yahoo Blueprint, a platform for simplifying mobile development. Blueprint is an XML markup language that abstracts developers from device details and allows focusing on the task. It can generate code for common mobile controls like maps, video, and location. Developers can use Blueprint to easily build mobile apps that run across different devices and platforms.
This document provides instructions for installing the Meandre infrastructure, which is used to run services and analytics for the SEASR project. It can be installed on a laptop in 3 steps to run services locally, or deployed on a server to provide services to others. The installation includes the Meandre server, Workbench interface, Community Hub plugin for Wordpress, and Zotero plugin to analyze bibliographic collections. The backend database can be configured as Derby or MySQL. Additional bundles are available to simplify installation on different platforms.
This document summarizes a presentation about scaling Ruby on Rails applications. It discusses using fragment caching to improve performance, building custom traffic analytics, and setting up a Rails application to use multiple databases including a slave database for running analytics queries. Key recommendations included using Memcached for fragment caching, writing SQL queries by hand for analytics data, and connecting to a slave database in Rails using a small amount of code.
This document summarizes a presentation about scaling Ruby on Rails applications. It discusses using fragment caching to improve performance, building custom traffic analytics, and setting up a Rails application to use multiple databases including a slave database for running analytics queries. Key recommendations included using Memcached for fragment caching, writing SQL queries by hand for analytics data collection and analysis, and connecting to a slave database in Rails to offload expensive queries.
ClojureScript allows developers to use the Clojure programming language to build applications that compile to JavaScript. This enables Clojure code to run in environments where JavaScript is supported, like web browsers and mobile apps. ClojureScript leverages the Google Closure compiler and library to provide whole program optimization of Clojure code compiling to JavaScript.
Why you should be excited about ClojureScriptelliando dias
ClojureScript allows Clojure code to compile to JavaScript. Created by Rich Hickey and friends, it provides optimizations for performance while maintaining readability and abstraction. As a Lisp for JavaScript, ClojureScript controls complexity on the web and benefits from JavaScript's status as a compilation target for many languages.
More Related Content
Similar to Cwinters Intro To Rest And JerREST and Jersey Introductionsey
This document introduces Bazaar, an open source distributed version control system. It describes key Bazaar concepts like branches, revisions, repositories, working trees, and formats. It explains how to perform common version control tasks with Bazaar like committing changes, sharing work with others, and collaborating through merging. The document also discusses how to use Launchpad for hosting Bazaar projects and integrating with other tools.
These are the slides from a free workshop I gave of April 29, 2009 on using wordpress to manage your website. For more information visit http://downeastlearning.org/
API's, Freebase, and the Collaborative Semantic webDan Delany
A presentation about the state of the collaborative semantic web, including:
- What?
- Why?
- Where do we stand?
- A case study on Metaweb's Freebase project
A presentation I gave at the International PHP Conference 2008 in Mainz, Germany.
Marjory is a webservice for building and searching in full text indexes, implemented in PHP.
This document discusses applying REST principles to integrate systems. It provides examples of using REST for basic web publishing, data-intensive integration through microformats and mashups, and process-intensive integration through RESTful workflows. It also describes a case study of developing a RESTful architecture for the Australian lending industry to publish and share loan data in a standardized way.
Everyone is mashing up in Flex these days, why aren't you? Drop in and learn how to mash up various cloud or other APIs from MTV, Amazon, Twitter, eBay, or various others listed on programmableweb.com. Emphasis will be placed on consuming XML by way of e4x utilizing REST or Soap.
ReST is an architectural style defined by a set of constraints including being client-server, stateless, cacheable, and having a uniform interface. It favors directly addressing resources over remote procedure calls and aims to make systems more scalable and loosely coupled. While sometimes seen as weak due to performance and customization issues, ReST architectures also provide benefits like low barriers to entry and being easier to develop and maintain.
Text indexing and search libraries for PHP - Zoë Slattery - Barcelona PHP Con...phpbarcelona
The document discusses a presentation about improving indexing speed for PHP applications. It begins by introducing common information retrieval libraries like Lucene, and compares the indexing speed of PHP and Java implementations of Lucene. Profiling tools show that the PHP implementation takes much longer than Java, largely due to overhead from PHP's dynamic nature which makes function calls slower compared to Java's optimized approach using virtual dispatch tables. The document explores reasons for the performance differences and aims to help PHP programmers understand execution times.
Creating Semantic Mashups Bridging Web 2 0 And The Semantic Web Presentation 1jward5519
The document discusses creating semantic mashups by bridging Web 2.0 and the Semantic Web. It provides examples of how semantic data can be used flexibly from multiple sources to build applications and demonstrations. The key advantages of semantic data include increased utility of applications by helping users accomplish tasks more easily, and allowing for greater efficiency by reusing existing data sources where possible.
Creating Semantic Mashups Bridging Web 2 0 And The Semantic Web Presentation 1jward5519
The document discusses creating semantic mashups by bridging Web 2.0 and the Semantic Web. It provides examples of how semantic data can be used flexibly across different domains and applications. The key benefits of semantic data include increased utility of applications by helping users complete tasks more easily, and allowing for greater efficiency by reusing existing data sources where possible.
This document discusses Facebook's use of Hadoop and Hive for storing and analyzing large amounts of user-generated data. Key points include:
- Facebook stores petabytes of user data including statuses, photos, videos in its Hadoop/Hive warehouse and other Hadoop clusters.
- The data is used for business intelligence to inform strategies and decisions, and power artificial intelligence like recommendations and ads optimization.
- Hive is used for ad hoc querying, building machine learning models at scale, and performing text analytics on large corpora.
- Examples demonstrate how metrics dashboards and recommendation systems were built on Hadoop/Hive.
This document discusses Representational State Transfer (REST) and compares it to Service Oriented Architecture (SOA). It provides background on the early web and how REST emerged as a set of constraints for networked applications. It notes that REST is not a technology, standard, or product, but rather an architectural style. The document discusses core REST concepts like resources, representations, and stateless interactions over the uniform interface of HTTP. It addresses some common misconceptions about REST and whether it is only suited for simple use cases.
Streamlining Your Applications with Web Frameworksguestf7bc30
The document discusses web frameworks and how they provide libraries and structure for common tasks in web application development to promote best practices and allow developers to focus on their specific application needs rather than solving common problems. It provides an overview of features of web frameworks like CakePHP including MVC architecture, AJAX functionality, and RESTful resource-oriented design.
This document discusses PHP Data Objects (PDO), a database abstraction layer for PHP. PDO provides a common interface for accessing various database systems and aims to eliminate inconsistencies in different database extensions. It allows prepared statements and bound parameters to help prevent SQL injection attacks. PDO is included with PHP 5.1 and later and provides drivers for many database systems including MySQL, PostgreSQL, SQLite, and SQL Server.
Blueprint talk at Open Hackday London 2009Ricardo Varela
The document describes Yahoo Blueprint, a platform for simplifying mobile development. Blueprint is an XML markup language that abstracts developers from device details and allows focusing on the task. It can generate code for common mobile controls like maps, video, and location. Developers can use Blueprint to easily build mobile apps that run across different devices and platforms.
This document provides instructions for installing the Meandre infrastructure, which is used to run services and analytics for the SEASR project. It can be installed on a laptop in 3 steps to run services locally, or deployed on a server to provide services to others. The installation includes the Meandre server, Workbench interface, Community Hub plugin for Wordpress, and Zotero plugin to analyze bibliographic collections. The backend database can be configured as Derby or MySQL. Additional bundles are available to simplify installation on different platforms.
This document summarizes a presentation about scaling Ruby on Rails applications. It discusses using fragment caching to improve performance, building custom traffic analytics, and setting up a Rails application to use multiple databases including a slave database for running analytics queries. Key recommendations included using Memcached for fragment caching, writing SQL queries by hand for analytics data, and connecting to a slave database in Rails using a small amount of code.
This document summarizes a presentation about scaling Ruby on Rails applications. It discusses using fragment caching to improve performance, building custom traffic analytics, and setting up a Rails application to use multiple databases including a slave database for running analytics queries. Key recommendations included using Memcached for fragment caching, writing SQL queries by hand for analytics data collection and analysis, and connecting to a slave database in Rails to offload expensive queries.
Similar to Cwinters Intro To Rest And JerREST and Jersey Introductionsey (20)
ClojureScript allows developers to use the Clojure programming language to build applications that compile to JavaScript. This enables Clojure code to run in environments where JavaScript is supported, like web browsers and mobile apps. ClojureScript leverages the Google Closure compiler and library to provide whole program optimization of Clojure code compiling to JavaScript.
Why you should be excited about ClojureScriptelliando dias
ClojureScript allows Clojure code to compile to JavaScript. Created by Rich Hickey and friends, it provides optimizations for performance while maintaining readability and abstraction. As a Lisp for JavaScript, ClojureScript controls complexity on the web and benefits from JavaScript's status as a compilation target for many languages.
Functional Programming with Immutable Data Structureselliando dias
1. The document discusses the advantages of functional programming with immutable data structures for multi-threaded environments. It argues that shared mutable data and variables are fundamentally flawed concepts that can lead to bugs, while immutable data avoids these issues.
2. It presents Clojure as a functional programming language that uses immutable persistent data structures and software transactional memory to allow for safe, lock-free concurrency. This approach allows readers and writers to operate concurrently without blocking each other.
3. The document makes the case that Lisp parentheses in function calls uniquely define the tree structure of computations and enable powerful macro systems, homoiconicity, and structural editing of code.
O documento lista e descreve as principais partes de um contêiner de carga seco, incluindo o painel frontal, laterais, traseira, teto, piso e estrutura inferior. Muitos componentes como painéis laterais, travessas do teto e fundo são numerados de acordo com sua localização. As portas traseiras contêm quadros, painéis, dobradiças e barras de fechamento.
O documento discute a história da geometria projetiva, desde Euclides até seu uso em computação gráfica. Aborda figuras-chave como Pascal, que foi pioneiro na área, e como a perspectiva foi aplicada nas artes ao longo dos séculos.
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
This document discusses the benefits of polyglot and poly-paradigm programming approaches for building more agile applications. It describes how using multiple languages and programming paradigms can optimize both performance and developer productivity. Specifically, it suggests that statically-typed compiled languages be used for core application components while dynamically-typed scripting languages connect and customize these components. This approach allows optimizing areas that require speed/efficiency separately from those requiring flexibility. The document also advocates aspects and functional programming to address cross-cutting concerns and concurrency challenges that arise in modern applications.
This document discusses JavaScript libraries and frameworks. It provides an overview of some popular options like jQuery, Prototype, Dojo, MooTools, and YUI. It explains why developers use libraries, such as for faster development, cross-browser compatibility, and animation capabilities. The document also discusses how libraries resemble CSS and use selector syntax. Basic examples are provided to demonstrate common tasks like hover effects and row striping. Factors for choosing a library are outlined like maturity, documentation, community, and licensing. The document concludes by explaining how to obtain library code from project websites or Google's AJAX Libraries API.
How to Make an Eight Bit Computer and Save the World!elliando dias
This document summarizes a talk given to introduce an open source 8-bit computer project called the Humane Reader. The talk outlines the goals of providing a cheap e-book reader and computing platform using open source tools. It describes the hardware design which uses an AVR microcontroller and interfaces like video output, SD card, and USB. The talk also covers using open source tools for development and sourcing low-cost fabrication and assembly. The overall goals are to create an inexpensive device that can provide educational resources in developing areas.
Ragel is a parser generator that compiles to various host languages including Ruby. It is useful for parsing protocols and data formats and provides faster parsing than regular expressions or full LALR parsers. Several Ruby projects like Mongrel and Hpricot use Ragel for tasks like HTTP request parsing and HTML parsing. When using Ragel with Ruby, it can be compiled to Ruby code directly, which is slow, or a C extension can be written for better performance. The C extension extracts the parsed data from Ragel and makes it available to Ruby.
A Practical Guide to Connecting Hardware to the Webelliando dias
This document provides an overview of connecting hardware devices to the web using the Arduino platform. It discusses trends in electronics and computing that make this easier, describes the Arduino hardware and software, and covers various connection methods including directly to a computer, via wireless modems, Ethernet shields, and services like Pachube that allow sharing sensor data over the internet. The document aims to demonstrate how Arduinos can communicate with other devices and be used to build interactive systems.
O documento introduz o Arduino, uma plataforma de desenvolvimento open-source. Discute as características e componentes do Arduino, incluindo microcontroladores, software e exemplos de código. Também fornece instruções básicas sobre como programar o Arduino usando linguagem C.
O documento apresenta um mini-curso introdutório sobre Arduino, abordando o que é a plataforma Arduino, como é estruturado seu hardware, como programá-lo, exemplos básicos de código e aplicações possíveis como controle residencial e robótica.
The document discusses various functions for working with datasets in the Incanter library for Clojure. It describes how to create, read, save, select rows and columns from, and sort datasets. Functions are presented for building datasets from sequences, reading datasets from files and URLs, saving datasets to files and databases, selecting single or multiple columns, and filtering rows based on conditions. The document also provides an overview of the Incanter library and its various namespaces for statistics, charts, and other functionality.
Rango is a lightweight Ruby web framework built on Rack that aims to be more robust than Sinatra but smaller than Rails or Merb. It is inspired by Django and Merb, uses Ruby 1.9, and supports features like code reloading, Bundler, routing, rendering, and HTTP error handling. The documentation provides examples and details on using Rango.
Fab.in.a.box - Fab Academy: Machine Designelliando dias
This document describes the design of a multifab machine called MTM. It includes descriptions of the XY stage and Z axis drive mechanisms, as well as the tool heads and network used to control the machine. Key aspects of the design addressed include the stepper motor selection, drive electronics, motion control firmware, and use of a virtual machine environment and circular buffer to enable distributed control of the machine. Strengths of the design include low inertia enabling high acceleration, while weaknesses include low basic resolution and stiffness unsuitable for heavy milling.
The Digital Revolution: Machines that makeselliando dias
The document discusses the results of a study on the effects of a new drug on memory and cognitive function in older adults. The double-blind study involved giving either the new drug or a placebo to 100 volunteers aged 65-80 over a 6 month period. Testing showed those receiving the drug experienced statistically significant improvements in short-term memory retention and processing speed compared to the placebo group.
The document discusses using Clojure for Hadoop programming. Clojure is a dynamic functional programming language that runs on the Java Virtual Machine. The document provides an overview of Clojure and how its features like immutability and concurrency make it well-suited for Hadoop. It then shows examples of implementing Hadoop MapReduce jobs using Clojure by defining mapper and reducer functions.
This document provides an overview of Hadoop, including:
1) Hadoop solves the problems of analyzing massively large datasets by distributing data storage and analysis across multiple machines to tolerate node failure.
2) Hadoop uses HDFS for distributed data storage, which shards massive files across data nodes with replication for fault tolerance, and MapReduce for distributed data analysis by sending code to the data.
3) The document demonstrates MapReduce concepts like map, reduce, and their composition with an example job.
Hadoop and Hive Development at Facebookelliando dias
Facebook generates large amounts of user data daily from activities like status updates, photo uploads, and shared content. This data is stored in Hadoop using Hive for analytics. Some key facts:
- Facebook adds 4TB of new compressed data daily to its Hadoop cluster.
- The cluster has 4800 cores and 5.5PB of storage across 12TB nodes.
- Hive is used for over 7500 jobs daily and by around 200 engineers/analysts monthly.
- Performance improvements to Hive include lazy deserialization, map-side aggregation, and joins.
Multi-core Parallelization in Clojure - a Case Studyelliando dias
The document describes a case study on using Clojure for multi-core parallelization of the K-means clustering algorithm. It provides background on parallel programming concepts, an introduction to Clojure, and details on how the authors implemented a parallel K-means algorithm in Clojure using agents and software transactional memory. They present results showing speedups from parallelization and accuracy comparable to R's implementation on both synthetic and real-world datasets.
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsDianaGray10
Join us to learn how UiPath Apps can directly and easily interact with prebuilt connectors via Integration Service--including Salesforce, ServiceNow, Open GenAI, and more.
The best part is you can achieve this without building a custom workflow! Say goodbye to the hassle of using separate automations to call APIs. By seamlessly integrating within App Studio, you can now easily streamline your workflow, while gaining direct access to our Connector Catalog of popular applications.
We’ll discuss and demo the benefits of UiPath Apps and connectors including:
Creating a compelling user experience for any software, without the limitations of APIs.
Accelerating the app creation process, saving time and effort
Enjoying high-performance CRUD (create, read, update, delete) operations, for
seamless data management.
Speakers:
Russell Alfeche, Technology Leader, RPA at qBotic and UiPath MVP
Charlie Greenberg, host
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...Jason Yip
The typical problem in product engineering is not bad strategy, so much as “no strategy”. This leads to confusion, lack of motivation, and incoherent action. The next time you look for a strategy and find an empty space, instead of waiting for it to be filled, I will show you how to fill it in yourself. If you’re wrong, it forces a correction. If you’re right, it helps create focus. I’ll share how I’ve approached this in the past, both what works and lessons for what didn’t work so well.
Conversational agents, or chatbots, are increasingly used to access all sorts of services using natural language. While open-domain chatbots - like ChatGPT - can converse on any topic, task-oriented chatbots - the focus of this paper - are designed for specific tasks, like booking a flight, obtaining customer support, or setting an appointment. Like any other software, task-oriented chatbots need to be properly tested, usually by defining and executing test scenarios (i.e., sequences of user-chatbot interactions). However, there is currently a lack of methods to quantify the completeness and strength of such test scenarios, which can lead to low-quality tests, and hence to buggy chatbots.
To fill this gap, we propose adapting mutation testing (MuT) for task-oriented chatbots. To this end, we introduce a set of mutation operators that emulate faults in chatbot designs, an architecture that enables MuT on chatbots built using heterogeneous technologies, and a practical realisation as an Eclipse plugin. Moreover, we evaluate the applicability, effectiveness and efficiency of our approach on open-source chatbots, with promising results.
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/how-axelera-ai-uses-digital-compute-in-memory-to-deliver-fast-and-energy-efficient-computer-vision-a-presentation-from-axelera-ai/
Bram Verhoef, Head of Machine Learning at Axelera AI, presents the “How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-efficient Computer Vision” tutorial at the May 2024 Embedded Vision Summit.
As artificial intelligence inference transitions from cloud environments to edge locations, computer vision applications achieve heightened responsiveness, reliability and privacy. This migration, however, introduces the challenge of operating within the stringent confines of resource constraints typical at the edge, including small form factors, low energy budgets and diminished memory and computational capacities. Axelera AI addresses these challenges through an innovative approach of performing digital computations within memory itself. This technique facilitates the realization of high-performance, energy-efficient and cost-effective computer vision capabilities at the thin and thick edge, extending the frontier of what is achievable with current technologies.
In this presentation, Verhoef unveils his company’s pioneering chip technology and demonstrates its capacity to deliver exceptional frames-per-second performance across a range of standard computer vision networks typical of applications in security, surveillance and the industrial sector. This shows that advanced computer vision can be accessible and efficient, even at the very edge of our technological ecosystem.
In the realm of cybersecurity, offensive security practices act as a critical shield. By simulating real-world attacks in a controlled environment, these techniques expose vulnerabilities before malicious actors can exploit them. This proactive approach allows manufacturers to identify and fix weaknesses, significantly enhancing system security.
This presentation delves into the development of a system designed to mimic Galileo's Open Service signal using software-defined radio (SDR) technology. We'll begin with a foundational overview of both Global Navigation Satellite Systems (GNSS) and the intricacies of digital signal processing.
The presentation culminates in a live demonstration. We'll showcase the manipulation of Galileo's Open Service pilot signal, simulating an attack on various software and hardware systems. This practical demonstration serves to highlight the potential consequences of unaddressed vulnerabilities, emphasizing the importance of offensive security practices in safeguarding critical infrastructure.
The Microsoft 365 Migration Tutorial For Beginner.pptxoperationspcvita
This presentation will help you understand the power of Microsoft 365. However, we have mentioned every productivity app included in Office 365. Additionally, we have suggested the migration situation related to Office 365 and how we can help you.
You can also read: https://www.systoolsgroup.com/updates/office-365-tenant-to-tenant-migration-step-by-step-complete-guide/
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving
Manufacturing custom quality metal nameplates and badges involves several standard operations. Processes include sheet prep, lithography, screening, coating, punch press and inspection. All decoration is completed in the flat sheet with adhesive and tooling operations following. The possibilities for creating unique durable nameplates are endless. How will you create your brand identity? We can help!
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...Alex Pruden
Folding is a recent technique for building efficient recursive SNARKs. Several elegant folding protocols have been proposed, such as Nova, Supernova, Hypernova, Protostar, and others. However, all of them rely on an additively homomorphic commitment scheme based on discrete log, and are therefore not post-quantum secure. In this work we present LatticeFold, the first lattice-based folding protocol based on the Module SIS problem. This folding protocol naturally leads to an efficient recursive lattice-based SNARK and an efficient PCD scheme. LatticeFold supports folding low-degree relations, such as R1CS, as well as high-degree relations, such as CCS. The key challenge is to construct a secure folding protocol that works with the Ajtai commitment scheme. The difficulty, is ensuring that extracted witnesses are low norm through many rounds of folding. We present a novel technique using the sumcheck protocol to ensure that extracted witnesses are always low norm no matter how many rounds of folding are used. Our evaluation of the final proof system suggests that it is as performant as Hypernova, while providing post-quantum security.
Paper Link: https://eprint.iacr.org/2024/257
"Choosing proper type of scaling", Olena SyrotaFwdays
Imagine an IoT processing system that is already quite mature and production-ready and for which client coverage is growing and scaling and performance aspects are life and death questions. The system has Redis, MongoDB, and stream processing based on ksqldb. In this talk, firstly, we will analyze scaling approaches and then select the proper ones for our system.
4. Who am I?
http://www.cwinters.com/ (not the male model)
Dad of awesome two yearold
Software Architect at Vocollect Healthcare Systems
Most experience on very small teams
AccuNurse: voiceassisted care for nursing homes
We use many, many opensource libraries
Not a REST expert, just very interested
5. REST
Representational State Transfer
Defined in Roy Fielding dissertation
One primary implementation todate: web + HTTP
Why the interest?
Web: ubiquitous, scalable, enabling platform
7. HTTP Success, Deeper
Supports very simple + very complex apps
Lots of options to scale, not just single path
Stateless by default
...which means it's easy to test
Those aren't documents, they're resources!
...and a resource ~~ distributed object
8. So? I'm not building Amazon
Simplicity
Flexibility
Evolvability
Testability
Discoverability
...all good things, not related to scaling
9. A few initial warnings
Resourceoriented very useful approach
...tough to purely implement with browsers
...and it requires some mind bending
Still worthwhile!
REST != HTTP (but we'll use it anyway)
Show a good deal of code
10. Map
What is REST?
REST in Java
What is REST?
REST in Java
...
11. In the beginning...
quot;RESTquot; was created looking back at HTTP
But the guy who created REST
also helped create HTTP
His dissertation is very readable!
12. REST boiled down
Give every quot;thingquot; an ID
Link things together
Use standard methods
Resources with multiple representations
Communicate statelessly
(from Stefan Tilkov, awesome REST guy)
13. Our dorky little application
Notem: record notes, become group memory
Potential: Dynamic notes (~~IRC bots)
15. Notem resources
Resource = 'state with URI' (lots else too)
Every note
Every collection of notes
Initial workspace
16. Jersey intro
RI of JSR311, Sun
folks primary on team
Heavily reliant on
annotations
Skeptical before, but
I'm a believer!
17. Jersey Extensibility
Highly extensible
@Provider means: quot;Hey Jersey, plug this in!quot;
Examples: TemplateProvider, JAXB items
Contextual items can be injected with @Context
Contextual: UriInfo, HttpHeaders, Security
Interesting bit: getting contextual data down to
objects manipulated by other frameworks (JAXB)
18. RBD #1: An ID for
everything
ID == URI
I == Identifier, L == Location
Globally unique, routeable identifier
They don't have to be pretty!
'Thing' can have broad meaning:
Collection of other things
Process that can report state
19. 'Routeable' identifier?
Most think of ID as primary key: 42
Maybe: table:ID
Maybe: server:database:table:ID
...where 'server' lookup into local registry
Even if that worked, what would it return?
20. URI works everywhere
Built on top of basic plumbing (DNS, hostnames)
Protocol specification builtin (http://, ftp://)
Abstraction builtin too:
what I want (URL)
how to shuffle it around (HTTP)
not how to fetch/generate
21. Common misconception: URI
design
quot;Hackablequot; URIs nice, not necessary
Only constraint is that they're unique
BDUF: Lay out entire URI scheme
Agile: Define as you go, refactor mercilessly
22. RBD #1: Jersey help
Every resource has an enforced unique URI
...not much beyond that
23. RBD #2: Link things
together
Use serverprovided URIs as references
Clients building URIs is a common mistake!
Limit URI templates to querybuilding hints
HATEOAS
24. URI templates?
On serverside, hugely useful
Declare variables from URI, map to method params
Also available: regex matching
25. HATEOAS?
Hypertext As The Engine
of Application State
RTF uses quot;the hypermedia
constraintquot; instead
26. HATEOAS!
Servercontrolled links define what clients can do
You can move hosts!
Shard data!
Change URIs!
And potentially all this without taking systems down
27. HATEOAS + refactoring
Refactoring another benefit of HATEOAS
Client dependent on server for state transitions
...immediately change
client behavior
Seems simple, but
we're just used to it
Start simple, grow
organically
28. Clients cannot assume
resource structure!
Everything the client can do is created by server
Client and server can know beforehand about media
types and types of transitions
Different 'rel' types in 'link' element...
OPTIONS informs about allowed methods
Jersey: application.wadl
Ways to know you're not doing HATEOAS...
29. 'REST endpoint'
“Here's the endpoint for our REST API”
REST exposes resources many URIs
Not actions via a few
30. URI scheme up front
“Here are all the URIs in our REST API”
...implies outofband info important to app flow
Client discover resources moving through system
Publishing your URI structure is coupling
31. Clients parse URIs
“Here's the data you'll need from the URI”
URI is opaque identifier
Content of resource should be standalone
Example: /blog/2009/04/20/my_hair_isnt_that_bad
Does content have date in it too?
API forces client to parse URIs: more coupling
32. URIs name actions
Flickr API URIs name actions vs resources
/services/rest/?method=flickr.test.echo...
REST has uniform interface! (more later)
Specifying methods/actions == RPC
34. So bad about coupling?
Evolvability
Dependencies on structure inhibits evolution
Do you expose your database tables?
Or your libraries?
If you choose to, it's a tradeoff
...just one that REST explicitly chooses differently
35. URIs and the real world
Easier to publish API that says quot;Send datablob A to
URI B and X will occurquot;
IMO REST client development, generic or
otherwise, still early days...
...you do what you can
36. More HATEOAS
Lots of recent discussion on this:
restdiscuss posts (including Solomon Duskis)
Subbu: quot;On Linkingquot;
Craig McC on Sun Cloud API
37. Generating links
Underdeveloped area
Componentize link generation?
Should a resource generate its own URI?
How to inject context (host/port) down?
Manipulate rules at runtime?
Example: Reference all Employee objects at host frodo
Example: ...all Buildings with area > 25000 to gondor
38. RBD #2: Jersey Help
“...this is probably the hardest area. JAXRS
provides a bunch of ways to construct URIs but
there is no such URI binding facility with a
modeling API, such as JAXB.”
Paul Sandoz
InfoQ announcement: JSR 311 Final
39. RBD #3: Use standard
methods
AKA, 'uniform interface'
Methods never vary based on resources
Key constraint that allows intermediaries to function
Google knows GET is safe, can spider your site
...except when it's not safe
40. Dangers of unsafe GET
quot;[The Alexa toolbar] logged into the
administrative area and followed the
'delete' link for every entry,quot; the admin
says. quot;My dumbass boss still didn't
want to uninstall Alexa could have
strangled the man.quot;
Stupid user tricks 3: IT admin follies
41. Methods have semantics
Key difference from RPC systems
HTTP defines what GET/PUT/DELETE mean
...on any resource
Idempotent: invoke multiple times with same effect
What will service.updateOrder() do if called twice?
What about service.takeOrder()?
POST is the catchall, the 'process' method
42. Standard methods +
idempotency
Method Purpose Idempotent? Safe?
===================================================
GET Retrieve representation Y Y
PUT Provide representation Y N
POST Create/extend resource N N
DELETE Delete resource Y N
HEAD GET minus body Y Y
OPTIONS Find methods for resource Y Y
43. Which does RPC-over-HTTP
use?
Method Purpose Idempotent? Safe?
===================================================
POST Create/extend resource **N** **N**
44. Benefits of standard
methods
Original name of REST: HTTP Object Model
All objects on the web can be manipulated similarly
Implementation hiding: what language? what
model? who cares?
Generic invocation: no need to generate code for
actions, only data
45. Where are my methods?
Constraint!
Yes, GET/PUT/DELETE/POST are constraints
Ask anyone who writes: can sharpen focus
Thinking in uniform
methods key to ROA
46. Nouning verbs
One pattern for adapting actioncentric designs is
[1]
nouning verbs
Canonical example: transactions
Treat the transaction as a resource with status
Reference the resource in your actions – client
maintains application state! (more later)
[1] Because “resourcing verbs” sounds too Office Space-y
48. TMTOWTDI
Instead of referencing the resource, maybe I could
POST different resources to the transaction?
...transaction resource could passthru resources
There are multiple ways to do it: that's the point
Actionsasresources takes a while, but useful
49. RBD #3: Jersey support
Awesome
Annotations for all major HTTP methods
@HEAD coming in JAXRS 1.1
50. Sidetrack: Jersey resources
“How does Jersey discover my resources?”
Define Application which explicitly names
Tell Jersey to scan your package
Wire into your DI framework (Spring/Guice)
Also true of @Provider implementations
52. Avoiding evil
Great presentation by Steve Vinoski on RPC history
discusses RPC issues
Summary: Avoid
...if remote looks local, you will eventually lose
53. Current distributed systems
Highly dependent on code generation, stubs
Winds up treating
dataoverwire as opaque
...will be difficult to reuse
on the same platform
crossplatform? ha!
55. Problems with remote calls
RPC should have high barrier to entry: it's hard!
Very tight coupling
Synchronization required (pre3.0 entity beans?)
Restricted failure modes
Closed protocol (typically)
And...
56. Fallacies of distributed
computing
1) The network is reliable.
2) Latency is zero.
3) Bandwidth is infinite.
4) The network is secure.
57. Fallacies of distributed
computing
5) Topology doesn't change.
6) There is one administrator.
7) Transport cost is zero.
8) The network is homogeneous.
More: Fallacies of Distributed Computing Explained
58. RPC hopes
System that solves problems inherent in distributed
computing.
Examples Vinoski uses: REST and Erlang
Make explicit tradeoffs to work around limitations
Echoing Fielding dissertation: it's all about tradeoffs
59. Focus on data!
All this means: you're pushing the problem to data.
This is good! You wind up there anyway.
60. Sending data
Historically representation tied to RPC system
IIOP, DCE, RMI, SOAP + XML
Instead, your data identified by media type
Allows you to separate concerns:
Library for processing media type
Library for moving data through logic
61. RBD #4: Multiple
representations
'Resource' is an abstract entity, a concept
You only interact with representations
With HTTP, content negotiation informs
62. HTTP: Accept
Every request has an 'Accept' HTTP header
Useful tools for seeing this in browser
Useful tools for specifying from CLI
RESTful service provides appropriate representation
63. Representations in Notem
Three main ones, not applicable in all cases
text/html, application/xml, application/json
When using programmatic HTTP access it's easier
to control
64. Representation
communicates resource
Others we could use?
65. Representation
communicates resource
audio/mpeg: output of TTS engine
application/ssml+xml: Speech synthesis markup (so
your TTS can speak the note)
application/morsecode (madeup)
Representations can be derived: not every one needs
to be PUTable
66. Designing representations
Behooves you to use widely known media types
quot;Get over the idea that your domain is a unique and
special snowflakequot;
See Bill de Hora
quot;Snowflake APIsquot;
68. RBD #4: Jersey support
Awesome
Declare @Produces and @Accepts for class or
methods
Jersey parses Accept header and dispatches to the
right one
69. What's a valid return value?
No interface required
One known: javax.ws.rs.core.Response: status
+ cookies, etag, entity...
Others: try to match with MessageBodyWriter
...including list/array, though may be useful to have
explicit 'collection representation' to model
additional state
71. Brief digression on JAXB
Nifty technology!
Tutorials focus on XML schemas and code
generation
Skip all that, basic use is pretty easy
72. Marshalling sucks
How many libraries? JiBX, XmlBeans, XStream...
No silver bullet
Marshalling always sucks, anyone who says
differently is selling you something
73. RBD #5: Communicate
statelessly
“...communication must be stateless in
nature...such that each request from client to
server must contain all of the information
necessary to understand the request, and cannot
take advantage of any stored context on the
server. Session state is therefore kept entirely on
the client.”
Roy Fielding, p.789.
75. Different types of state
Client: Application state is 'where' you are
Server: Resource state is what you're manipulating
Possible to represent application state as resource?
76. Examples of state
Phone conversation: all 'application' state
Client/server app: server holds open transactions,
current 'screen', relies on open connection
Web app: current page of results, shopping cart,
current 'item' being worked on, GUI
customizations...
77. Shopping cart example
Assuming a fully featured client
...how might we design a RESTful shopping cart?
78. RBD #5: Jersey support
Really an implementation detail
Jersey helps you DTRT, but you're free to break it
79. Why caching?
The fastest DB query is the one never executed
Nearly all applications are readmostly: optimize!
Transparentlyadded caching even better
(view 'Many intermediaries image')
The network is not transparent
80. Faking statefulness (test)
Form data just key/value pairs
Cookies just text
HTTP Authentication just a header
82. 'Architectural Style'
Abstraction for component interaction
An architecture reflects its environment
...but hard to compare those from different
environments
It is not a set of defined messages
83. 'Architecture Style'
Alan Dean:
A style can be applied to many different architectures.
An architecture can consist of many different styles.
84. Pieces of the Style
Client/Server (separation of concerns)
Stateless communication
Caching
Uniform interface
Layered system
Code on demand
85. Style implications
You will not be buying a 'REST Toolkit'
One level up from tools allows evaluation of fit for
purpose
Fielding dissertation opens with reference to Monty
Python sketch :
quot;It might very well be the best slaughterhouse design ever
conceived, but that would be of little comfort to the
prospective tenants as they are whisked along hallways
containing rotating knives.quot;
Fielding
86. Other styles
POX: Plain old XML: not bad <em>a priori</em>,
but,
... typically everything goes through POST (XMLRPC)
MEST ('processThis()', see Jim Webber for more)
quot;Low RESTquot; vs quot;High RESTquot; (RTF says it's
hogwash)
87. Now what?
Evolvability is underrated
Distributed systems are hard
Try it! Building even a small system will introduce
new 'resources' that you probably haven't thought of
Jersey is proof that JSRs can work