Introduction to API development with Taffy, a developer-friendly and convention-based framework for ColdFusion and Lucee.
Code samples at: https://github.com/TheRealAgentK/taffydemos
The document discusses tube structures, which are buildings designed to act like hollow tubes to resist lateral loads from wind and earthquakes. The tube structure concept involves using closely spaced exterior columns connected by deep beams to form a rigid perimeter tube. This allows the interior of the building to be framed only for gravity loads. The first example was the DeWitt-Chestnut Apartment Building completed in 1963. Tube structures can be constructed of steel, concrete, or both and are used for tall office, apartment and mixed-use buildings. Common tube structure types include framed tubes, tube within a tube, bundled tubes, and braced tubes.
The document summarizes the National Stadium in Beijing, China, nicknamed the "Bird's Nest". It has the following key details:
- It has a 330m long and 220m wide steel frame with a 69m tall lattice roof supported by 24 massive 500-ton precast steel truss columns up to 224m tall.
- The 360km of steel was used to construct the outer shell and roof, with the inner shell constructed of concrete. An ETFE membrane was installed between the steel for the roof.
- The irregular lattice roof pattern follows geometric rules and is composed of intersecting horizontal and diagonal trusses that crisscross and cantilever to support the 320m by 297
The document discusses the structural design of the China Central Television (CCTV) Headquarters building in Beijing. It describes the unique structural system of the building, which features two leaning towers connected by top and bottom links. Wind tunnel testing was required to determine critical wind load patterns, including twist loading between the towers and vertical loading of the top links. The building structure employs a continuous tube system formed by the entire facade to resist huge forces from the building's cranked and leaning form.
Taipei 101 is a 101-story skyscraper in Taipei, Taiwan that uses several innovative engineering solutions to withstand earthquakes and typhoons. A key feature is a 730-ton steel ball located inside the building that acts as a tuned mass damper, counteracting swaying of the building. The ball hangs inside steel cables and has shock absorbers. This tuned mass damper system helps ensure the structural integrity of Taipei 101 during seismic activity.
High-rise buildings are tall structures that require elevators due to their height. They first emerged in dense urban areas in the 1880s in the US as land prices rose and steel frames and glass facades made taller buildings possible. By mid-20th century, high-rises had become standard in many countries. Key aspects of high-rise design include structural systems, unique design features using steel and concrete, and managing heavy vertical and wind loads on foundations and frames.
Dokumen tersebut membahas tentang difusi dan inovasi pendidikan. Secara ringkas, difusi dijelaskan sebagai proses komunikasi penyebaran ide baru antara anggota masyarakat menggunakan saluran tertentu. Jenis keputusan inovasi mencakup opsional, kolektif, otoritas, dan kontingensi. Perspektif global dalam pendidikan bertujuan meningkatkan pemahaman global siswa dengan tantangan seperti keterbatasan kurikulum dan sum
El documento proporciona información sobre un estudiante en SENATI. Incluye el nombre completo del estudiante, Gilbert Daniel Tar Tarazona Apolinario, su carrera en Mecánica Automotriz y el nombre de su instructor, Quispe Jael Carlos Ivan.
Extinción de los Actos Administrativos en VenezuelaCrojas17
El documento resume los diferentes tipos de extinción de actos administrativos como la revocación, anulación y decaimiento. La revocación la puede hacer el mismo órgano que dictó el acto o uno jerárquicamente superior y consiste en la extinción total o parcial del acto siempre que no genere derechos subjetivos. La anulación ocurre cuando el acto va en contra de la ley o normativa o es imposible de ejecutar. El decaimiento se da cuando desaparece la condición fundamental para la validez del acto.
El documento presenta los planos y diseños propuestos para la renovación del Complejo Deportivo Lourdes, incluyendo planos del conjunto, vialidad, topografía modificada, fachadas, cortes, distribución espacial del mercado con leyenda, perspectivas, renders e imágenes del sector actual. El proyecto fue desarrollado por Enrique González e Isamar Ruiz del Taller de Diseño V del Instituto Universitario Politécnico “Santiago Mariño”.
El documento resume los principales avances tecnológicos en Venezuela desde el comienzo de la industria petrolera en 1911 hasta la actualidad, incluyendo el lanzamiento de satélites venezolanos y la influencia de la tecnología en la sociedad desde los años 90. Describe cómo la llegada de la industria petrolera impulsó cambios económicos, sociales y culturales en Venezuela y cómo el estado y empresas privadas han contribuido a avances tecnológicos e inversiones para beneficiar a la sociedad.
El documento habla sobre Romanos 2:1-16 y explica que todos los hombres, tanto judíos como gentiles, están condenados ante Dios. Señala que la condenación de los pecados de los gentiles no justifica a los judíos, y que Dios juzgará las obras de judíos y gentiles por igual encontrándolos a todos impíos.
This document provides an overview of posting transactions to general and subsidiary ledgers. It defines key terms like subsidiary ledger, accounts payable ledger, and controlling account. It also provides examples of how to post transactions to the general ledger, accounts payable ledger, and accounts receivable ledger. Specifically, it shows how to record debits, credits, balances, and journal references in the appropriate ledgers. It concludes with a discussion of proving the accounts payable and accounts receivable ledgers using schedules of accounts.
API Athens Meetup - API standards 22.03.2016Ivan Goncharov
APIs.guru is a platform that aims to serve as a Wikipedia for web APIs by providing documentation for APIs in one centralized location. It filters out private and unreliable APIs, standardizes documentation into the Swagger 2.0 format, and allows contributors to add and improve API descriptions. APIs.guru also seeks to address challenges of data and schema incompatibility between APIs by developing a system of common scalar and complex data types that can be referenced and converted between APIs.
This document discusses fundamental philosophical questions and the nature of philosophy. It begins by listing 14 fundamental questions, such as "What is truth?" and "How should we live?". It then defines philosophy as the love of wisdom and the rational analysis of concepts. The document outlines some key philosophers like Plato, Aristotle, Descartes, and Marx and their views on philosophy. It also lists some functions of philosophy like clarity of ideas, use of logic, and developing understanding.
The document discusses updates needed for SIP to work effectively in modern environments. It recommends: 1) requiring support for SIP Outbound and TLS/DTLS key exchange to address challenges of NAT and encryption; 2) requiring full support for Opus codec and RTCP feedback to optimize media; and 3) supporting IETF work on standards like STIR, SIPCORE, and stronger authentication. The document also outlines upcoming SIP features from the IETF and SIP Forum around improved identities, dual-stack support, and TLS in SIPConnect 2.0.
MI ESTUDIO DE CASO, lo base en la mala utilización que le dan en las empresas al uso de la información y del hecho de que todo lo quieren tener en forma física (impresa), y del como con pequeños cambios podemos ayudar a reducir costos y a su vez ayudar a la naturaleza.
This document discusses using Flask and Eve to build a REST API with Python in 3 days. It introduces Flask as a microframework for building web applications with Python. Eve is presented as a Python framework built on Flask that allows building RESTful APIs with MongoDB in a simple way. The document provides examples of creating basic Flask and Eve apps, configuring Eve settings like schemas and authentication, and describes many features of Eve like filtering, sorting, pagination and validation.
Faster PHP apps using Queues and WorkersRichard Baker
PHP apps typically perform tasks in a synchronous manner; Resizing an image or sending a push notification. For most applications this works well, but as apps grow or experience increased traffic, each task adds extra milliseconds to a request, leaving users waiting.
A common solution is to defer these tasks to the background using a cron task. However, there is a better way. Job queues not only help to decouple your application and improve resilience but will also cut request times.
In this talk I we’ll explore some common queue systems; the features and tradeoffs of each solution, what to queue, refactoring existing code into jobs, and running workers. By the end you’ll be ready to build your next app one job at a time.
12 core technologies you should learn, love, and hate to be a 'real' technocratJonathan Linowes
1. The document discusses 12 core technologies that one should learn as a technocrat, including the command line, HTML, CSS, HTTP, programming, JavaScript, MVC frameworks, databases, hosting, and media technologies.
2. It provides brief explanations and examples for each technology, such as describing HTML tags and the DOM, CSS selectors and media types, components of an HTTP request and response, concepts in programming like objects and control flow, and basics of media resolution, compression and formats.
3. The document emphasizes learning the technologies through both understanding concepts as well as gaining hands-on experience with examples and tools for each one.
This document discusses tools for testing web services over HTTP in Python. It introduces HTTPie, a command line tool for making HTTP requests, and Behave, a behavior-driven development tool that uses the Gherkin language to write human-readable test cases. The document provides examples of using HTTPie to debug services and Behave steps to test authentication on a sample API.
Companion slides for Stormpath CTO and Co-Founder Les Hazlewood's Elegant REST Design Webinar. This presentation covers all the RESTful best practices learned building the Stormpath APIs. Whether you’re writing your first API, or just need to figure out that last piece of the puzzle, this is a great opportunity to learn more.
Stormpath is a User Management API that reduces development time with instant-on, scalable user infrastructure. Stormpath's intuitive API and expert support make it easy for developers to authenticate, manage and secure users and roles in any application.
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...Big Data Spain
This talk describes how open source Hue [1] was built in order to provide a better Hadoop User Experience. The underlying technical details of its architecture, the lessons learned and how it integrates with Impala, Search and Spark under the cover will be explained.
Session held by Asbjørn Ulsberg at PayEx and Nordic APIs event "Secure, flexible and modern APIs for Payments" event in Oslo, May 10th.
Description:
If you’ve ever had these questions:
- What can I do to make the URL most RESTful?
- How do I best describe the URLs and operations of my API in the documentation?
- Should I put the version number of the API into the URL or an HTTP header
- How do I model CRUD on top of HTTP?
- How can I expose my objects over HTTP?
- How can I give enough information to the client so it knows what actions it can perform next?
- How come SOAP had this cool WSDL that allowed me to autogenerate a strongly typed client proxy while REST is a only stringly typed mess?
…then this talk will show you that there has existed a technology for decades that makes all of these questions invalid. The technology is called Hypermedia and this talk will demystify it and explore it in detail.
This talk is for developers dabbling in REST, but who aren’t yet invited to Roy Fielding’s thanksgiving dinner. It will go through the history of REST and how it relates to RPC-style APIs before delving down into the concepts of hypertext and hypermedia, how to implement them in your API and last, but not least; Why!
Hue: Big Data Web applications for Interactive Hadoop at Big Data Spain 2014gethue
This talk describes how open source Hue was built in order to provide a better Hadoop User Experience. The underlying technical details of its architecture, the lessons learned and how it integrates with Impala, Search and Spark under the cover will be explained.
The presentation continues with real life analytics business use cases. It will show how data can be easily imported into the cluster and then queried interactively with SQL or through a visual search dashboard. All through your Web Browser or your own custom Web application!
This talk aims at organizations trying to put a friendly “face” on Hadoop and get productive. Anybody looking at being more effective with Hadoop will also learn best practices and how to quickly get ramped up on the main data scenarios. Hue can be integrated with existing Hadoop deployments with minimal changes/disturbances. We cover details on how Hue interacts with the ecosystem and leverages the existing authentication and security model of your company.
To sum-up, attendees of this talk will learn how Hadoop can be made more accessible and why Hue is the ideal gateway for using it more efficiently or being the starting point of your own Big Data Web application.
This document provides an overview of getting started with the FW/1 framework. It discusses installing and setting up the framework, the basic application structure and folder organization, controllers and commonly used functions. It also covers more advanced FW/1 features like subsystems, dependency injection with DI/1, aspect-oriented programming with AOP/1, and REST support. The document concludes with notes on customizing FW/1 through skinning and multi-site setups.
Dokumen tersebut membahas tentang difusi dan inovasi pendidikan. Secara ringkas, difusi dijelaskan sebagai proses komunikasi penyebaran ide baru antara anggota masyarakat menggunakan saluran tertentu. Jenis keputusan inovasi mencakup opsional, kolektif, otoritas, dan kontingensi. Perspektif global dalam pendidikan bertujuan meningkatkan pemahaman global siswa dengan tantangan seperti keterbatasan kurikulum dan sum
El documento proporciona información sobre un estudiante en SENATI. Incluye el nombre completo del estudiante, Gilbert Daniel Tar Tarazona Apolinario, su carrera en Mecánica Automotriz y el nombre de su instructor, Quispe Jael Carlos Ivan.
Extinción de los Actos Administrativos en VenezuelaCrojas17
El documento resume los diferentes tipos de extinción de actos administrativos como la revocación, anulación y decaimiento. La revocación la puede hacer el mismo órgano que dictó el acto o uno jerárquicamente superior y consiste en la extinción total o parcial del acto siempre que no genere derechos subjetivos. La anulación ocurre cuando el acto va en contra de la ley o normativa o es imposible de ejecutar. El decaimiento se da cuando desaparece la condición fundamental para la validez del acto.
El documento presenta los planos y diseños propuestos para la renovación del Complejo Deportivo Lourdes, incluyendo planos del conjunto, vialidad, topografía modificada, fachadas, cortes, distribución espacial del mercado con leyenda, perspectivas, renders e imágenes del sector actual. El proyecto fue desarrollado por Enrique González e Isamar Ruiz del Taller de Diseño V del Instituto Universitario Politécnico “Santiago Mariño”.
El documento resume los principales avances tecnológicos en Venezuela desde el comienzo de la industria petrolera en 1911 hasta la actualidad, incluyendo el lanzamiento de satélites venezolanos y la influencia de la tecnología en la sociedad desde los años 90. Describe cómo la llegada de la industria petrolera impulsó cambios económicos, sociales y culturales en Venezuela y cómo el estado y empresas privadas han contribuido a avances tecnológicos e inversiones para beneficiar a la sociedad.
El documento habla sobre Romanos 2:1-16 y explica que todos los hombres, tanto judíos como gentiles, están condenados ante Dios. Señala que la condenación de los pecados de los gentiles no justifica a los judíos, y que Dios juzgará las obras de judíos y gentiles por igual encontrándolos a todos impíos.
This document provides an overview of posting transactions to general and subsidiary ledgers. It defines key terms like subsidiary ledger, accounts payable ledger, and controlling account. It also provides examples of how to post transactions to the general ledger, accounts payable ledger, and accounts receivable ledger. Specifically, it shows how to record debits, credits, balances, and journal references in the appropriate ledgers. It concludes with a discussion of proving the accounts payable and accounts receivable ledgers using schedules of accounts.
API Athens Meetup - API standards 22.03.2016Ivan Goncharov
APIs.guru is a platform that aims to serve as a Wikipedia for web APIs by providing documentation for APIs in one centralized location. It filters out private and unreliable APIs, standardizes documentation into the Swagger 2.0 format, and allows contributors to add and improve API descriptions. APIs.guru also seeks to address challenges of data and schema incompatibility between APIs by developing a system of common scalar and complex data types that can be referenced and converted between APIs.
This document discusses fundamental philosophical questions and the nature of philosophy. It begins by listing 14 fundamental questions, such as "What is truth?" and "How should we live?". It then defines philosophy as the love of wisdom and the rational analysis of concepts. The document outlines some key philosophers like Plato, Aristotle, Descartes, and Marx and their views on philosophy. It also lists some functions of philosophy like clarity of ideas, use of logic, and developing understanding.
The document discusses updates needed for SIP to work effectively in modern environments. It recommends: 1) requiring support for SIP Outbound and TLS/DTLS key exchange to address challenges of NAT and encryption; 2) requiring full support for Opus codec and RTCP feedback to optimize media; and 3) supporting IETF work on standards like STIR, SIPCORE, and stronger authentication. The document also outlines upcoming SIP features from the IETF and SIP Forum around improved identities, dual-stack support, and TLS in SIPConnect 2.0.
MI ESTUDIO DE CASO, lo base en la mala utilización que le dan en las empresas al uso de la información y del hecho de que todo lo quieren tener en forma física (impresa), y del como con pequeños cambios podemos ayudar a reducir costos y a su vez ayudar a la naturaleza.
This document discusses using Flask and Eve to build a REST API with Python in 3 days. It introduces Flask as a microframework for building web applications with Python. Eve is presented as a Python framework built on Flask that allows building RESTful APIs with MongoDB in a simple way. The document provides examples of creating basic Flask and Eve apps, configuring Eve settings like schemas and authentication, and describes many features of Eve like filtering, sorting, pagination and validation.
Faster PHP apps using Queues and WorkersRichard Baker
PHP apps typically perform tasks in a synchronous manner; Resizing an image or sending a push notification. For most applications this works well, but as apps grow or experience increased traffic, each task adds extra milliseconds to a request, leaving users waiting.
A common solution is to defer these tasks to the background using a cron task. However, there is a better way. Job queues not only help to decouple your application and improve resilience but will also cut request times.
In this talk I we’ll explore some common queue systems; the features and tradeoffs of each solution, what to queue, refactoring existing code into jobs, and running workers. By the end you’ll be ready to build your next app one job at a time.
12 core technologies you should learn, love, and hate to be a 'real' technocratJonathan Linowes
1. The document discusses 12 core technologies that one should learn as a technocrat, including the command line, HTML, CSS, HTTP, programming, JavaScript, MVC frameworks, databases, hosting, and media technologies.
2. It provides brief explanations and examples for each technology, such as describing HTML tags and the DOM, CSS selectors and media types, components of an HTTP request and response, concepts in programming like objects and control flow, and basics of media resolution, compression and formats.
3. The document emphasizes learning the technologies through both understanding concepts as well as gaining hands-on experience with examples and tools for each one.
This document discusses tools for testing web services over HTTP in Python. It introduces HTTPie, a command line tool for making HTTP requests, and Behave, a behavior-driven development tool that uses the Gherkin language to write human-readable test cases. The document provides examples of using HTTPie to debug services and Behave steps to test authentication on a sample API.
Companion slides for Stormpath CTO and Co-Founder Les Hazlewood's Elegant REST Design Webinar. This presentation covers all the RESTful best practices learned building the Stormpath APIs. Whether you’re writing your first API, or just need to figure out that last piece of the puzzle, this is a great opportunity to learn more.
Stormpath is a User Management API that reduces development time with instant-on, scalable user infrastructure. Stormpath's intuitive API and expert support make it easy for developers to authenticate, manage and secure users and roles in any application.
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...Big Data Spain
This talk describes how open source Hue [1] was built in order to provide a better Hadoop User Experience. The underlying technical details of its architecture, the lessons learned and how it integrates with Impala, Search and Spark under the cover will be explained.
Session held by Asbjørn Ulsberg at PayEx and Nordic APIs event "Secure, flexible and modern APIs for Payments" event in Oslo, May 10th.
Description:
If you’ve ever had these questions:
- What can I do to make the URL most RESTful?
- How do I best describe the URLs and operations of my API in the documentation?
- Should I put the version number of the API into the URL or an HTTP header
- How do I model CRUD on top of HTTP?
- How can I expose my objects over HTTP?
- How can I give enough information to the client so it knows what actions it can perform next?
- How come SOAP had this cool WSDL that allowed me to autogenerate a strongly typed client proxy while REST is a only stringly typed mess?
…then this talk will show you that there has existed a technology for decades that makes all of these questions invalid. The technology is called Hypermedia and this talk will demystify it and explore it in detail.
This talk is for developers dabbling in REST, but who aren’t yet invited to Roy Fielding’s thanksgiving dinner. It will go through the history of REST and how it relates to RPC-style APIs before delving down into the concepts of hypertext and hypermedia, how to implement them in your API and last, but not least; Why!
Hue: Big Data Web applications for Interactive Hadoop at Big Data Spain 2014gethue
This talk describes how open source Hue was built in order to provide a better Hadoop User Experience. The underlying technical details of its architecture, the lessons learned and how it integrates with Impala, Search and Spark under the cover will be explained.
The presentation continues with real life analytics business use cases. It will show how data can be easily imported into the cluster and then queried interactively with SQL or through a visual search dashboard. All through your Web Browser or your own custom Web application!
This talk aims at organizations trying to put a friendly “face” on Hadoop and get productive. Anybody looking at being more effective with Hadoop will also learn best practices and how to quickly get ramped up on the main data scenarios. Hue can be integrated with existing Hadoop deployments with minimal changes/disturbances. We cover details on how Hue interacts with the ecosystem and leverages the existing authentication and security model of your company.
To sum-up, attendees of this talk will learn how Hadoop can be made more accessible and why Hue is the ideal gateway for using it more efficiently or being the starting point of your own Big Data Web application.
This document provides an overview of getting started with the FW/1 framework. It discusses installing and setting up the framework, the basic application structure and folder organization, controllers and commonly used functions. It also covers more advanced FW/1 features like subsystems, dependency injection with DI/1, aspect-oriented programming with AOP/1, and REST support. The document concludes with notes on customizing FW/1 through skinning and multi-site setups.
Play is a web framework that supports Scala and Java. It provides features like easy error reporting, hot reloading of code and configuration changes, RESTful architecture, powerful routing, and horizontal scalability. Play uses Akka and Netty for asynchronous and non-blocking I/O. It has a MVC structure with template rendering and supports features like database evolutions, dependency injection, and unit testing.
Room with a Vue - Introduction to Vue.jsZachary Klein
The document provides an introduction to Vue.js, a progressive framework for building user interfaces. It discusses Vue's core concepts like the Vue instance, templates, components, and the ecosystem of libraries that support Vue like Vuex for state management and Vue Router for routing. The document compares Vue to Angular and React, noting Vue aims for a balance between rich features and clean code. It promotes Vue as a good option for both beginners and experienced developers looking for a new view on single-page apps.
Rapid Application Development with SwiftUI and FirebasePeter Friese
Firebase is Google's mobile development platform for Android, iOS, and the web. SwiftUI is Apple's user interface toolkit that lets developers design apps in a declarative way. In this session, we will bring the two together and take a look at how easy it is to develop a new application from scratch.
Slides for my talk at CocoaHeads Berlin (https://www.meetup.com/Cocoaheads-Berlin/events/266764473/)
Best Practices for Architecting a Pragmatic Web API.Mario Cardinal
This presentation teach how to design a real-world and pragmatic web API. It draws from the experience Mario Cardinal have gained over the years being involved architecting many Web API. This presentation begins by differencing between a Web and a REST API, and then continue with the design process. We conclude with the core learnings of the session which is a review of the best practices when designing a web API. Armed with skills acquired, you can expect to see significant improvements in your ability to design a pragmatic web API.
Monitoring OSGi Applications with the Web Console - Carsten Ziegelermfrancis
OSGi Community Event 2013 (http://www.osgi.org/CommunityEvent2013/Schedule)
ABSTRACT
This session introduces the latest version of the famous Apache Felix web console which allows to monitor and inspect OSGi web applications through the browser. The web console is based on a flexible plugin mechanism to add custom information and functionality. Learn how to write your own extensions and how to leverage the available functionality for monitoring and troubleshooting OSGi installations.
SPEAKER BIO
Carsten Ziegeler is senior developer at Adobe Research Switzerland and spends most of his time on architectural and infrastructure topics. Working for over 25 years in open source projects, Carsten is a member of the Apache Software Foundation and heavily participates in several Apache communities including Sling, Felix and ACE. He is a frequent speaker on technology and open source conferences and participates in the OSGi Core Platform and Enterprise expert groups.
Monitoring OSGi Applications with the Web ConsoleCarsten Ziegeler
Presentation from the OSGi Community Event / EclipseCon Europe 2013
This session introduces the latest version of the famous Apache Felix web console which allows to monitor and inspect OSGi web applications through the browser. The web console is based on a flexible plugin mechanism to add custom information and functionality. Learn how to write your own extensions and how to leverage the available functionality for monitoring and troubleshooting OSGi installations.
The document provides instructions for installing and testing a WebGUI developer workshop that demonstrates how to create macros, content handlers, and utilize other WebGUI plugins like URL handlers and assets, allowing developers to extend WebGUI's functionality and build custom applications. It outlines steps for installing the workshop files, accessing the virtual machine, and includes examples of simple "Hello World" macros and content handlers to get started with WebGUI development.
The document discusses CodeIgniter, an open source PHP MVC framework, and provides information about CodeIgniter features such as controllers, models, views, helpers, libraries, and working with databases using CodeIgniter's active record functions. It also covers topics like installing CodeIgniter, creating controllers and models, and loading views, helpers, and libraries.
Jeff Scudder, Eric Bidelman
The number of APIs made available for Google products has exploded from a handful to a slew! Get
the big picture on what is possible with the APIs for everything from YouTube, to Spreadsheets, to
Search, to Translate. We'll go over a few tools to help you get started and the things these APIs share
in common. After this session picking up new Google APIs will be a snap.
Building a Cloud Native Stack with EMR Spark, Alluxio, and S3Alluxio, Inc.
This document summarizes a presentation about building a cloud native stack with EMR Spark, Alluxio, and S3. It discusses using Alluxio to provide better performance than S3 by adding a caching tier and keeping data local to applications like Spark. Alluxio provides familiar file system semantics and can mount multiple data sources. The document demonstrates Alluxio's architecture and how it provides memory speed access to data. It also covers integrating Alluxio with EMR using bootstrap actions and upcoming features in Alluxio 2.0 and 2.1.
iOS 9 introduces several new features including App Transport Security, universal links, search improvements, and iPad multitasking support. App Transport Security enforces secure connections by default, while universal links allow apps to handle deep links. Search is expanded through Core Spotlight, NSUserActivity, and web indexing. iPad multitasking allows iPad apps to support multiple window sizes and orientations. UIStackViews also make layout easier by automatically handling constraints between views.
Why a whole country skipped a day - Fun with Timezones Kai Koenig
Droidcon UK 2018
The correct handling of timezones and locales is one of the most under-appreciated parts of software development. Commonly known as internationalisation (i18n), a lot of people underestimate the impact that getting it wrong can have for your users as well as your systems.
Drawn from experiences with working on a global network of backend systems, websites and mobile apps in more than 30 locales for the last 10 years, this talk will start with an introduction to the concepts behind time zones and locales.
You’re going to learn about the history of time measurement and time synchronisation and how the world eventually ended up with the global system of time zones of today. Today’s model is full of interesting and sometimes outright bizarre quirks and you’ll look at some of best and worst of them. From there you’ll learn about the ideas behind locales and why cultural context is at least as important as a locale’s common collection of purely technical data such a number formats or text direction. After this, the talk will cover how common runtime environments like Android and Java represent these ideas.
Android 101 - Building a simple app with Kotlin in 90 minutesKai Koenig
The document provides an overview of a 90-minute workshop on building a simple Android app with Kotlin. It introduces Kotlin and the Anko DSL, discusses Kotlin language concepts and idioms, and outlines the steps to build an app that loads and displays sample JSON data using Kotlin and Anko. The workshop covers Kotlin setup, refactoring existing Java code to Kotlin, using Kotlin Android extensions and Butterknife for view binding, adding a RecyclerView with sample data, loading and parsing JSON data with Gson, and introducing the Anko DSL and command pattern for asynchronous operations.
Kotlin Coroutines and Android sitting in a tree - 2018 versionKai Koenig
Since the release of Kotlin 1.1 there is now the language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table.
A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android.
This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko and how they stack up against other concepts of asynchrony such as rxJava.
Kotlin Coroutines and Android sitting in a treeKai Koenig
Since the release of Kotlin 1.1 there is now the new language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table.
A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android.
This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko.
The document discusses tools for improving CFML code quality through static code analysis, specifically focusing on the CFLint tool which analyzes CFML code by checking it against configurable linting rules to identify potential issues, it also discusses other metrics and tools for measuring code quality factors like complexity, performance and maintainability.
Summer of Tech 2017 - Kotlin/Android bootcampKai Koenig
Kotlin is a statically typed programming language that compiles to Java bytecode and runs on the Java Virtual Machine. It is designed to interoperate fully with Java, but aims to be less verbose and improve on some of Java's weaknesses. Anko is a Kotlin library that provides a domain-specific language for defining Android user interface layouts in a declarative manner, similar to XML layout files but using Kotlin code. The presentation introduces Kotlin language concepts like null safety, properties, type inference, and extension functions. It then demonstrates how to build a simple Android app using Kotlin and Anko to define UI layouts without requiring XML.
It's 2017. Kotlin, a great language for the JVM, has been around for more than 6 years now and has changed the way a lot of developers look at the features and evolutionary progress of Java. Kotlin has become a very popular alternative to Java for Android developers and with Kotlin 1.1 being on its way, thing are going to become more exciting.
This talk will start with a brief introduction into Kotlin and its core language features. After this brief foray into concepts like Kotlin's immutable variables, null behaviour and other smarts like the syntactic sugar it provides for dealing with types and properties we'll have a look into what in store for Android developers and into new features in Kotlin 1.1, such as Kotlin Coroutines, Jack support for Android and lots of improvements to the standard library.
Anko - The Ultimate Ninja of Kotlin Libraries?Kai Koenig
Kotlin is a new language for the JVM that aims to be a ””better Java”“. Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it’s been in development for more than 5 years. Just a few weeks ago the final version of Kotlin 1.0 saw the light of day.
The language itself gives one so much niceness and syntactic sugar that you’d probably never want to go back to coding in Java again. Things get even better with Anko. Anko is pretty much the ultimate Ninja of Kotlin libraries. The feature it’s best know for is its Layout DSL that allows one to programatically write UI code in Kotlin. No more XML layout and no awkward piecing together of your UI through clunky Java APIs. We will look at how to use and how to extend the Layout DSL for your own requirements and then move on to Anko’s advanced, non-layout-related features:
- Intent wrappers
- Shortcuts to system services
- Asynchronous task management
- Anko SQLite and more
Coding for Android on steroids with KotlinKai Koenig
Kotlin is a new language for the JVM that aims to be a "better Java". Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it's been in development for more than 5 years. Just a few weeks ago the final version of Kotlin 1.0 saw the light of day.
This talk will start with a brief introduction into Kotlin and its core language features. After this brief foray into concepts like Kotlin's immutable variables, null behaviour and other smarts like the syntactic sugar it provides for dealing with types and properties you'll discover what's in store for Android developers.
Particularly noteworthy are the decrease in annoying Java boilerplate code, fewer of the irritating "Process has stopped unexpectedly" messages and the easily available Kotlin Android Extensions. You will also explore the toolchain and compiler tools Kotlin provides for Android development, the differences to using Kotlin for Java development as well as the integration into Android Studio.
Little Helpers for Android Development with KotlinKai Koenig
Kotlin is a new language for the JVM that aims to be a "better Java". Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it's been in development for more than 5 years. Just a few months ago the final version of Kotlin 1.0 saw the light of day.
Starting off with Kotlin for Java development and for Android is actually quite straight forward. There's a lot of well written documentation, there are the Kotlin Koans and blogs seem to pick up Kotlin-related topics more and more. What a lot of people are not aware of though is that there are a bunch of really useful libraries and tools for Kotlin developers, in particular on Android (the most common and well known one being Ando).
This session from Droidcon Germany 2016 in Berlin will start with a quick introduction into Kotlin and its benefits over Java. Then we'll dive into the Kotlin-Android-ecosystem and look at a variety of Kotlin tools and libraries that can make one's life much easier - even to a level going beyond what core Kotlin already has to offer.
A lot of people talk about Data Mining, Machine Learning and Big Data. It clearly must be important, right?
A lot of people are also trying to sell you snake oil - sometimes half-arsed and overpriced products or solutions promising a world of insight into your customers or users if you handover your data to them. Instead, trying to understanding your own data and what you could do with it, should be the first thing you’d be looking at.
In this talk, we’ll introduce some basic terminology about Data and Text Mining as well as Machine Learning and will have a look at what you can on your own to understand more about your data and discover patterns in your data.
An introduction into the Garbage First (G1) garbage collector for the JVM. The session covers general GC concepts, the fundamentals of G1 and how to setup and tune the JVM for G1.
The document provides an overview and lessons learned about developing applications with jQuery Mobile, a framework for building mobile websites and apps. It discusses jQuery Mobile concepts and architecture considerations, including using responsive design principles. It also covers challenges of testing on different devices and addressing device-specific issues like animations. The document provides code snippets and recommendations around areas like loading scripts on every page and leveraging grids.
The document provides an overview of Java Virtual Machine (JVM) memory management and garbage collection strategies. It discusses the basic architecture of the JVM and how memory is divided into generations (young and old). The young generation uses strategies like mark-and-sweep and mark-and-copy for fast garbage collection of short-lived objects. The old generation uses mark-and-compact for longer-lived objects, which has higher overhead. It also describes different garbage collector implementations and considerations for selecting and tuning collectors based on application needs.
The document discusses timezones and internationalization (i18n). It provides background on the history of timezones, how they are defined and formatted, and challenges around timezones like daylight saving time and political changes. It also discusses i18n topics like Unicode, encodings, locales, and using resource bundles to support multiple languages.
Clojure - an introduction (and some CFML)Kai Koenig
This is a talk I gave at CFCAMP 2012 in Munich. It's an introduction to Clojure for CFML developers and how to leverage Clojure from a CFML developer's point of view.
There are various examples and demo code that's not on the slides, contact me if you're interested in it.
This document provides an overview of AngularJS, including its philosophy and architecture. AngularJS aims to simplify development by providing model-view-controller frameworks and dependency injection. It advocates for declarative code for building user interfaces rather than imperative code. The document also discusses AngularJS concepts like templates, scopes, models, repeaters, filters and custom directives to build single page applications.
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)Andre Hora
Software testing plays a crucial role in the contribution process of open-source projects. For example, contributions introducing new features are expected to include tests, and contributions with tests are more likely to be accepted. Although most real-world projects require contributors to write tests, the specific testing practices communicated to contributors remain unclear. In this paper, we present an empirical study to understand better how software testing is approached in contribution guidelines. We analyze the guidelines of 200 Python and JavaScript open-source software projects. We find that 78% of the projects include some form of test documentation for contributors. Test documentation is located in multiple sources, including CONTRIBUTING files (58%), external documentation (24%), and README files (8%). Furthermore, test documentation commonly explains how to run tests (83.5%), but less often provides guidance on how to write tests (37%). It frequently covers unit tests (71%), but rarely addresses integration (20.5%) and end-to-end tests (15.5%). Other key testing aspects are also less frequently discussed: test coverage (25.5%) and mocking (9.5%). We conclude by discussing implications and future research.
Copy & Paste On Google >>> https://dr-up-community.info/
EASEUS Partition Master Final with Crack and Key Download If you are looking for a powerful and easy-to-use disk partitioning software,
How can one start with crypto wallet development.pptxlaravinson24
This presentation is a beginner-friendly guide to developing a crypto wallet from scratch. It covers essential concepts such as wallet types, blockchain integration, key management, and security best practices. Ideal for developers and tech enthusiasts looking to enter the world of Web3 and decentralized finance.
Meet the Agents: How AI Is Learning to Think, Plan, and CollaborateMaxim Salnikov
Imagine if apps could think, plan, and team up like humans. Welcome to the world of AI agents and agentic user interfaces (UI)! In this session, we'll explore how AI agents make decisions, collaborate with each other, and create more natural and powerful experiences for users.
Adobe Master Collection CC Crack Advance Version 2025kashifyounis067
🌍📱👉COPY LINK & PASTE ON GOOGLE http://drfiles.net/ 👈🌍
Adobe Master Collection CC (Creative Cloud) is a comprehensive subscription-based package that bundles virtually all of Adobe's creative software applications. It provides access to a wide range of tools for graphic design, video editing, web development, photography, and more. Essentially, it's a one-stop-shop for creatives needing a broad set of professional tools.
Key Features and Benefits:
All-in-one access:
The Master Collection includes apps like Photoshop, Illustrator, InDesign, Premiere Pro, After Effects, Audition, and many others.
Subscription-based:
You pay a recurring fee for access to the latest versions of all the software, including new features and updates.
Comprehensive suite:
It offers tools for a wide variety of creative tasks, from photo editing and illustration to video editing and web development.
Cloud integration:
Creative Cloud provides cloud storage, asset sharing, and collaboration features.
Comparison to CS6:
While Adobe Creative Suite 6 (CS6) was a one-time purchase version of the software, Adobe Creative Cloud (CC) is a subscription service. CC offers access to the latest versions, regular updates, and cloud integration, while CS6 is no longer updated.
Examples of included software:
Adobe Photoshop: For image editing and manipulation.
Adobe Illustrator: For vector graphics and illustration.
Adobe InDesign: For page layout and desktop publishing.
Adobe Premiere Pro: For video editing and post-production.
Adobe After Effects: For visual effects and motion graphics.
Adobe Audition: For audio editing and mixing.
Not So Common Memory Leaks in Java WebinarTier1 app
This SlideShare presentation is from our May webinar, “Not So Common Memory Leaks & How to Fix Them?”, where we explored lesser-known memory leak patterns in Java applications. Unlike typical leaks, subtle issues such as thread local misuse, inner class references, uncached collections, and misbehaving frameworks often go undetected and gradually degrade performance. This deck provides in-depth insights into identifying these hidden leaks using advanced heap analysis and profiling techniques, along with real-world case studies and practical solutions. Ideal for developers and performance engineers aiming to deepen their understanding of Java memory management and improve application stability.
Join Ajay Sarpal and Miray Vu to learn about key Marketo Engage enhancements. Discover improved in-app Salesforce CRM connector statistics for easy monitoring of sync health and throughput. Explore new Salesforce CRM Synch Dashboards providing up-to-date insights into weekly activity usage, thresholds, and limits with drill-down capabilities. Learn about proactive notifications for both Salesforce CRM sync and product usage overages. Get an update on improved Salesforce CRM synch scale and reliability coming in Q2 2025.
Key Takeaways:
Improved Salesforce CRM User Experience: Learn how self-service visibility enhances satisfaction.
Utilize Salesforce CRM Synch Dashboards: Explore real-time weekly activity data.
Monitor Performance Against Limits: See threshold limits for each product level.
Get Usage Over-Limit Alerts: Receive notifications for exceeding thresholds.
Learn About Improved Salesforce CRM Scale: Understand upcoming cloud-based incremental sync.
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...Egor Kaleynik
This case study explores how we partnered with a mid-sized U.S. healthcare SaaS provider to help them scale from a successful pilot phase to supporting over 10,000 users—while meeting strict HIPAA compliance requirements.
Faced with slow, manual testing cycles, frequent regression bugs, and looming audit risks, their growth was at risk. Their existing QA processes couldn’t keep up with the complexity of real-time biometric data handling, and earlier automation attempts had failed due to unreliable tools and fragmented workflows.
We stepped in to deliver a full QA and DevOps transformation. Our team replaced their fragile legacy tests with Testim’s self-healing automation, integrated Postman and OWASP ZAP into Jenkins pipelines for continuous API and security validation, and leveraged AWS Device Farm for real-device, region-specific compliance testing. Custom deployment scripts gave them control over rollouts without relying on heavy CI/CD infrastructure.
The result? Test cycle times were reduced from 3 days to just 8 hours, regression bugs dropped by 40%, and they passed their first HIPAA audit without issue—unlocking faster contract signings and enabling them to expand confidently. More than just a technical upgrade, this project embedded compliance into every phase of development, proving that SaaS providers in regulated industries can scale fast and stay secure.
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...Andre Hora
Unittest and pytest are the most popular testing frameworks in Python. Overall, pytest provides some advantages, including simpler assertion, reuse of fixtures, and interoperability. Due to such benefits, multiple projects in the Python ecosystem have migrated from unittest to pytest. To facilitate the migration, pytest can also run unittest tests, thus, the migration can happen gradually over time. However, the migration can be timeconsuming and take a long time to conclude. In this context, projects would benefit from automated solutions to support the migration process. In this paper, we propose TestMigrationsInPy, a dataset of test migrations from unittest to pytest. TestMigrationsInPy contains 923 real-world migrations performed by developers. Future research proposing novel solutions to migrate frameworks in Python can rely on TestMigrationsInPy as a ground truth. Moreover, as TestMigrationsInPy includes information about the migration type (e.g., changes in assertions or fixtures), our dataset enables novel solutions to be verified effectively, for instance, from simpler assertion migrations to more complex fixture migrations. TestMigrationsInPy is publicly available at: https://github.com/altinoalvesjunior/TestMigrationsInPy.
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Andre Hora
Exceptions allow developers to handle error cases expected to occur infrequently. Ideally, good test suites should test both normal and exceptional behaviors to catch more bugs and avoid regressions. While current research analyzes exceptions that propagate to tests, it does not explore other exceptions that do not reach the tests. In this paper, we provide an empirical study to explore how frequently exceptional behaviors are tested in real-world systems. We consider both exceptions that propagate to tests and the ones that do not reach the tests. For this purpose, we run an instrumented version of test suites, monitor their execution, and collect information about the exceptions raised at runtime. We analyze the test suites of 25 Python systems, covering 5,372 executed methods, 17.9M calls, and 1.4M raised exceptions. We find that 21.4% of the executed methods do raise exceptions at runtime. In methods that raise exceptions, on the median, 1 in 10 calls exercise exceptional behaviors. Close to 80% of the methods that raise exceptions do so infrequently, but about 20% raise exceptions more frequently. Finally, we provide implications for researchers and practitioners. We suggest developing novel tools to support exercising exceptional behaviors and refactoring expensive try/except blocks. We also call attention to the fact that exception-raising behaviors are not necessarily “abnormal” or rare.
Download YouTube By Click 2025 Free Full Activatedsaniamalik72555
Copy & Past Link 👉👉
https://dr-up-community.info/
"YouTube by Click" likely refers to the ByClick Downloader software, a video downloading and conversion tool, specifically designed to download content from YouTube and other video platforms. It allows users to download YouTube videos for offline viewing and to convert them to different formats.
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...Eric D. Schabell
It's time you stopped letting your telemetry data pressure your budgets and get in the way of solving issues with agility! No more I say! Take back control of your telemetry data as we guide you through the open source project Fluent Bit. Learn how to manage your telemetry data from source to destination using the pipeline phases covering collection, parsing, aggregation, transformation, and forwarding from any source to any destination. Buckle up for a fun ride as you learn by exploring how telemetry pipelines work, how to set up your first pipeline, and exploring several common use cases that Fluent Bit helps solve. All this backed by a self-paced, hands-on workshop that attendees can pursue at home after this session (https://o11y-workshops.gitlab.io/workshop-fluentbit).
Avast Premium Security Crack FREE Latest Version 2025mu394968
🌍📱👉COPY LINK & PASTE ON GOOGLE https://dr-kain-geera.info/👈🌍
Avast Premium Security is a paid subscription service that provides comprehensive online security and privacy protection for multiple devices. It includes features like antivirus, firewall, ransomware protection, and website scanning, all designed to safeguard against a wide range of online threats, according to Avast.
Key features of Avast Premium Security:
Antivirus: Protects against viruses, malware, and other malicious software, according to Avast.
Firewall: Controls network traffic and blocks unauthorized access to your devices, as noted by All About Cookies.
Ransomware protection: Helps prevent ransomware attacks, which can encrypt your files and hold them hostage.
Website scanning: Checks websites for malicious content before you visit them, according to Avast.
Email Guardian: Scans your emails for suspicious attachments and phishing attempts.
Multi-device protection: Covers up to 10 devices, including Windows, Mac, Android, and iOS, as stated by 2GO Software.
Privacy features: Helps protect your personal data and online privacy.
In essence, Avast Premium Security provides a robust suite of tools to keep your devices and online activity safe and secure, according to Avast.
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AIdanshalev
If we were building a GenAI stack today, we'd start with one question: Can your retrieval system handle multi-hop logic?
Trick question, b/c most can’t. They treat retrieval as nearest-neighbor search.
Today, we discussed scaling #GraphRAG at AWS DevOps Day, and the takeaway is clear: VectorRAG is naive, lacks domain awareness, and can’t handle full dataset retrieval.
GraphRAG builds a knowledge graph from source documents, allowing for a deeper understanding of the data + higher accuracy.
Adobe After Effects Crack FREE FRESH version 2025kashifyounis067
🌍📱👉COPY LINK & PASTE ON GOOGLE http://drfiles.net/ 👈🌍
Adobe After Effects is a software application used for creating motion graphics, special effects, and video compositing. It's widely used in TV and film post-production, as well as for creating visuals for online content, presentations, and more. While it can be used to create basic animations and designs, its primary strength lies in adding visual effects and motion to videos and graphics after they have been edited.
Here's a more detailed breakdown:
Motion Graphics:
.
After Effects is powerful for creating animated titles, transitions, and other visual elements to enhance the look of videos and presentations.
Visual Effects:
.
It's used extensively in film and television for creating special effects like green screen compositing, object manipulation, and other visual enhancements.
Video Compositing:
.
After Effects allows users to combine multiple video clips, images, and graphics to create a final, cohesive visual.
Animation:
.
It uses keyframes to create smooth, animated sequences, allowing for precise control over the movement and appearance of objects.
Integration with Adobe Creative Cloud:
.
After Effects is part of the Adobe Creative Cloud, a suite of software that includes other popular applications like Photoshop and Premiere Pro.
Post-Production Tool:
.
After Effects is primarily used in the post-production phase, meaning it's used to enhance the visuals after the initial editing of footage has been completed.
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentShubham Joshi
A secure test infrastructure ensures that the testing process doesn’t become a gateway for vulnerabilities. By protecting test environments, data, and access points, organizations can confidently develop and deploy software without compromising user privacy or system integrity.
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdfTechSoup
In this webinar we will dive into the essentials of generative AI, address key AI concerns, and demonstrate how nonprofits can benefit from using Microsoft’s AI assistant, Copilot, to achieve their goals.
This event series to help nonprofits obtain Copilot skills is made possible by generous support from Microsoft.
What You’ll Learn in Part 2:
Explore real-world nonprofit use cases and success stories.
Participate in live demonstrations and a hands-on activity to see how you can use Microsoft 365 Copilot in your own work!
2. AGENDA
▸ What is Taffy?
▸ REST in a nutshell
▸ But is it “RESTful ENOUGH”?
▸ Taffy setup and basic flow
▸ Advanced configuration
▸ API Blueprint and other tools
4. WHAT IS TAFFY?
TAFFY
▸ TLDR version: Taffy is a framework to build REST-based APIs in CFML
▸ Developed by Adam Tuttle
▸ Currently in version 3.1, incepted around 2011 (MIT license)
▸ Very stable, very powerful
▸ Allows the creation of REST-based APIs in CFML independent of any vendor
implementation - works with Lucee and ACF
▸ Can be integrated with other frameworks
5. WHAT IS TAFFY?
WHY TAFFY?
“But hey, both Lucee and Adobe CF have their own implementation of REST-
API handling and it’s SO EASY to use and it has SELF-DOCUMENTATION!
That’s great, ey?”
▸ At first glance it might seem like a great idea for getting started. But:
▸ Various issues (created URL structures, JSON handling, clunky syntax)
▸ Significantly lock-in to a vendor’s implementation
▸ Overall developer-unfriendly approaches
6. WHAT IS TAFFY?
BENEFITS OF TAFFY
▸ This is not a talk about the deficiencies of REST in ACF or Lucee
▸ This is why Taffy is great:
▸ Developer-friendly and easy to get started with
▸ Backwards-compatible to ACF 8
▸ Convention over configuration
▸ Hardly any boilerplate code
7. REST IN A NUTSHELL
https://www.flickr.com/photos/kikasz/2891113802/
8. REST IN A NUTSHELL
WHAT IS REST?
▸ REpresentational State Transfer - a method to communicate over a network
▸ Mostly used over HTTP, technically protocol-independent
▸ 2 phases:
▸ Request - noun, verb, MIME type, headers, data
▸ Response - status code, status text, headers, data
9. REST IN A NUTSHELL
THE REQUEST (I)
▸ Nouns - identifier of the data we want to work with, e.g. /users or /users/232
▸ Main verbs:
▸ POST: creating a new record (unsafe)
▸ PUT: updating existing record (idempotent)
▸ GET: retrieving existing record (safe)
▸ DELETE: deleting record (idempotent)
10. REST IN A NUTSHELL
THE REQUEST (II)
▸ Less commonly used verbs:
▸ HEAD: similar to GET, but only returns headers (safe)
▸ OPTIONS: used to check which verbs are available (safe)
▸ PATCH: similar to PUT, updating individual properties (idempotent)
▸ MIME type:
▸ Client and API server agree on the data types for exchange, e.g. text/html,
application/xml etc
11. REST IN A NUTSHELL
THE REQUEST (III)
▸ Headers - supply metadata with the request (Accept, Content-Type)
▸ Data - the data sent from the client to the server
▸ Can conceptually be of any format
▸ Most common: JSON
12. REST IN A NUTSHELL
THE RESPONSE
▸ Status code & Status text:
▸ “200 OK”
▸ “404 Not Found”
▸ “500 Server Error” …
▸ There are a lot more specific status codes, such as 201, 301, 302, 400, 401
etc.
▸ Headers and Data
13. REST IN A NUTSHELL
WHY DO PEOPLE LIKE AND USE REST?
▸ Works naturally with the HTTP protocol
▸ Other alternatives:
▸ SOAP-XML: very enterprise-y, bloated and complex
▸ XML-RPC: similar to REST, but ignores the power of the verb
15. BUT IS IT RESTFUL ENOUGH?
THE REALITY IS MORE COMPLEX
▸ Roy Fielding’s 2000 dissertation about what we today know as REST
▸ Followed up by a series of blog posts from ~2008 about HATEOAS
(Hypermedia As The Engine Of Application State)
▸ prescribing additional requirements and behaviours
▸ often considered as ideal, but impractical in a lot of ways
▸ Leads to a lot of discussion what REST is and how one has to use it
16. BUT IS IT RESTFUL ENOUGH?
MORE MATURE?
▸ Plain JSON
▸ HATEOAS
{
"name" : “iPhone 7"
}
{
"name": “iPhone 7",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/product/1"
} ]
}
18. BUT IS IT RESTFUL ENOUGH?
RICHARDSON MATURITY LEVEL
http://martinfowler.com/articles/richardsonMaturityModel.html
19. TAFFY SETUP AND
BASIC FLOW
https://www.flickr.com/photos/joanna_young/
4515399787/
20. TAFFY SETUP AND BASIC FLOW
INSTALLATION
▸ Download .zip-file from Github or taffy.io
▸ Installation options:
▸ Global mapping /taffy
▸ /taffy physically in webroot
▸ Installation in sub-directory of site (needs application-specific mappings)
21. TAFFY SETUP AND BASIC FLOW
DRIVEN BY APPLICATION.CFC
▸ Extends taffy.core.api
▸ Needs to call onApplicationStart() and
onRequestStart() on the parent CFC
▸ Earlier versions of Taffy had their own
Application.cfc events - it was
recommended to actually not implement
onApplicationStart() etc
▸ That’s gone since Taffy 2.0
component extends="taffy.core.api"
{
this.name = "TaffyDemo";
function onApplicationStart()
{
application.productList = [
{ "id":1, "name":"iPhone 7" },
{ "id":2, "name":"iPhone 7+" },
{ "id":3, "name":"iPad Pro 9.7inch" }
];
return super.onApplicationStart();
}
function onRequestStart()
{
return super.onRequestStart();
}
}
22. TAFFY SETUP AND BASIC FLOW
CONVENTION OVER CONFIGURATION
▸ Taffy tries to NOT be in your way
▸ Examples:
▸ Default function names for resources are get(), post(), put(), delete()
▸ Looks for resources in a /resources directory
▸ Lots of things are just fine and work out of the box naturally because of
sensible conventions
24. TAFFY SETUP AND BASIC FLOW
RESOURCES (I)
▸ Extend taffy.core.resource
▸ Live in the /resources directory or a /resources mapping
▸ Can be changed - requires dropping the default bean factory
▸ Good practice:
▸ Have a CFC for a “thing” and for a “collection of things” each
▸ My convention: “SomeThing” and “SomeThingCollection”
▸ A resource should at least implement one verb function
25. TAFFY SETUP AND BASIC FLOW
RESOURCES (II)
▸ taffy_uri defines the public URL of your resource
▸ representationOf() triggers the default serialiser
▸ withStatus() sets the HTTP status of the response (defaults to “200 OK”)
component extends="taffy.core.resource" taffy_uri="/product"
{
public function get(){
return representationOf(application.productList).withStatus(200);
}
}
26. TAFFY SETUP AND BASIC FLOW
RESOURCES (III)
▸ Passing {productId} token into the resource’s URL
▸ Returning 404 if there’s no record found
component extends="taffy.core.resource" taffy_uri="/product/{productId}"
{
public function get(numeric productId){
for (var product in application.productList) {
if (product["id"] == arguments.productId) {
return representationOf(product).withStatus(200, "OK");
}
}
return noData().withStatus(404, "Not Found");
}
}
27. TAFFY SETUP AND BASIC FLOW
RESOURCES (IV)
▸ If a verb is not implemented in a resource, Taffy will return “405 Not Allowed”
▸ Tokens will automatically become part of the arguments scope
▸ Tokens support regular expressions: /product/{pId:d{4}} - /product/{pId:[A-Za-z]+}
▸ Query string parameters will ALSO automatically become part of the arguments scope
▸ Use .noData() if the intention is to not return data
▸ Similar to .withStatus(…), it’s possible to chain .withHeaders(…) to the return
statement
29. TAFFY SETUP AND BASIC FLOW
TAFFY DASHBOARD
▸ Dashboard allows to:
▸ execute requests (incl. Query Params, Headers and Basic Auth)
▸ inspect the response
▸ see a limited amount of documentation
▸ Should (usually) be switched off in production
▸ Default: caches API, needs explicit reloads
30. TAFFY SETUP AND BASIC FLOW
CHANGING DATA - WHERE TO PUT POST?
▸ If the POST method was in Product.cfc - we’d have an issue.
▸ The URL route requires us to use /product/{productId}
▸ POST therefore has to life in ProductCollection.cfc
▸ PUT however (updating existing data) can happily go into Product.cfc
▸ URL matching: /product/search will match before /product/{productId}
31. TAFFY SETUP AND BASIC FLOW
GOOD PRACTICES FOR PUT AND POST
▸ If you created a record with POST:
▸ return “201 Created” with the created data
▸ potentially return x-inserted-id in the header
▸ If you updated a record with PUT:
▸ return “200 OK” with the updated data
▸ if the record to be updated didn’t exist, create it (see above)
33. ADVANCED TASKS AND CONFIG
BREAKING AWAY FROM THE CONVENTIONS
▸ Metadata:
▸ Annotate functions to be triggered by a specific verb: taffy_verb=“<VERB>”
▸ Necessary for extended verbs like OPTIONS, HEAD, PATCH. Optional for
standard verbs.
▸ There’s more metadata in serialisers (later)
34. ADVANCED TASKS AND CONFIG
BREAKING AWAY FROM THE CONVENTIONS
▸ Configuration: variables.framework struct in Taffy’s Application.cfc
▸ reloadKey/reloadPassword vs. reloadOnEveryRequest
▸ serializer/deserializer (later)
▸ disableDashboard
▸ jsonp/allowCrossDomain
▸ beanFactory - allows hooking into Coldspring, DI/1 etc…
35. ADVANCED TASKS AND CONFIG
AUTHENTICATION AND SECURITY
▸ Firstly - what do you want to achieve?
▸ Requiring an API Token?
▸ Fine-grain security?
▸ oAuth
▸ HTTP Basic Auth
▸ SSL
36. ADVANCED TASKS AND CONFIG
API TOKEN (I)
▸ Best place to start is onTaffyRequest(…)
▸ Return true to continue processing the request
▸ Return a representation object to abort the request
▸ Two common options for passing token:
▸ URI parameters and/or as part of the data
▸ In the header
37. ADVANCED TASKS AND CONFIG
API TOKEN (II)
function onTaffyRequest(verb, cfc, requestArguments, mimeExt,
headers, methodMetadata, matchedURI) {
if (not structKeyExists(arguments.requestArguments, "apiKey") ||
!Len(arguments.requestArguments["apiKey"])) {
return noData().withStatus(401, "Unauthorized");
}
if (!arrayFind(application.validAPIKeys,
arguments.requestArguments["apiKey"])) {
return noData().withStatus(403, "Forbidden");
}
return true;
}
38. ADVANCED TASKS AND CONFIG
CUSTOM SERIALISERS (I)
▸ Default serialiser is JSON (CFML-server built-in)
▸ Extend from taffy.core.baseRepresentation
▸ Implement getAsX functions
▸ getAsXML, getAsJSON, getAsYML etc
39. ADVANCED TASKS AND CONFIG
CUSTOM SERIALISERS (II)
component extends="taffy.core.baseSerializer"
{
variables.anythingToXML = application.anythingToXML;
variables.jsonUtil = application.jsonUtil;
function getAsXML() output="false" taffy_mime="application/xml" taffy_default="false" {
return variables.anythingToXML.toXml(variables.data);
}
function getAsJSON() output="false" taffy_mime="application/json" taffy_default="true" {
return variables.jsonUtil.serialize(variables.data);
}
}
40. ADVANCED TASKS AND CONFIG
RATE LIMITS
▸ In a nutshell:
▸ manage access log (api key & time) in DB or key/value storage
▸ onTaffyRequest logs requests and check if limits are exceeded
▸ if not exceeded, process incoming request
▸ if exceeded, return status code “429 Too Many Requests”
41. ADVANCED TASKS AND CONFIG
API VERSIONING
▸ Multiple schools of thought:
▸ URI vs header
▸ Make sure you version from day 0!
▸ I tend to use /v1/product, /v2/product etc.
▸ Maps nicely on directory structures in /resources
▸ Update version when breaking compatibility
▸ Consider SemVer (Semantic Versioning) if your API is changing a lot
42. API BLUEPRINT AND
OTHER TOOLS
https://www.flickr.com/photos/cardoso/2196726835/
43. API BLUEPRINT
WHAT IS IT?
▸ Description and specification language for web APIs (http://apiblueprint.org)
▸ From Apiary.io - but can be used independently from that
▸ Language spec: https://github.com/apiaryio/api-blueprint
▸ Offers platform-neutral documentation and additional tooling
▸ Aglio
▸ API-Mock
44. API BLUEPRINT
DOCUMENTATION WITH AGLIO
▸ Very simple markup language
▸ npm install -g aglio (https://www.npmjs.com/package/aglio)
▸ aglio -i documentation.md -o documentation.html
▸ MD structure:
▸ # Group
▸ ## Resource
▸ ### Action
45. API BLUEPRINT
MOCK SERVER WITH API-MOCK
▸ Creates a mock server for your API (https://github.com/localmed/api-mock)
▸ npm install -g api-mock
▸ api-mock ./documentation.md
▸ Defaults to port 3000
46. API BLUEPRINT
PAW
▸ REST API test and management tool on OS X
▸ Recording/Playback/Testing etc
▸ Has API Blueprint support through extensions
48. FINAL THOUGHTS
WHAT DID WE COVER?
▸ Taffy - what is it?
▸ How to setup and the foundations
▸ Discussed some advanced topics in more detail
▸ High-level overview of API Blueprint