The document discusses using NodeJS and Ruby to build a REST API that interacts with a Cassandra database. It provides code examples for connecting to Cassandra using the DataStax drivers for NodeJS and Ruby, and implementing CRUD operations on a "users" table. For NodeJS, it shows setting up an Express server and executing queries using the Cassandra driver. For Ruby, it shows using Sinatra and executing queries via the Ruby driver session. The document also covers topics like load balancing, retry policies, and prepared statements when interacting with Cassandra.
Whether running load tests or migrating historic data, loading data directly into Cassandra can be very useful to bypass the system’s write path.
In this webinar, we will look at how data is stored on disk in sstables, how to generate these structures directly, and how to load this data rapidly into your cluster using sstableloader. We'll also review different use cases for when you should and shouldn't use this method.
Cassandra Community Webinar | Become a Super ModelerDataStax
Sure you can do some time series modeling. Maybe some user profiles. What's going to make you a super modeler? Let's take a look at some great techniques taken from real world applications where we exploit the Cassandra big table model to it's fullest advantage. We'll cover some of the new features in CQL 3 as well as some tried and true methods. In particular, we will look at fast indexing techniques to get data faster at scale. You'll be jet setting through your data like a true super modeler in no time.
Speaker: Patrick McFadin, Principal Solutions Architect at DataStax
(BDT401) Big Data Orchestra - Harmony within Data Analysis Tools | AWS re:Inv...Amazon Web Services
Yes, you can build a data analytics solution with a relational database, but should you? What about scalability? What about flexibility? What about cost? In this session, we demonstrate how to build a real world solution for location-based data analytics, with the combination of Amazon Kinesis, Amazon DynamoDB, Amazon Redshift, Amazon CloudSearch, and Amazon EMR. We discuss how to integrate these services to create a robust solution in terms of security, simplicity, speed, and low cost.
Further discussion on Data Modeling with Apache Cassandra. Overview of formal data modeling techniques as well as practical. Real-world use cases and associated data models.
Whether running load tests or migrating historic data, loading data directly into Cassandra can be very useful to bypass the system’s write path.
In this webinar, we will look at how data is stored on disk in sstables, how to generate these structures directly, and how to load this data rapidly into your cluster using sstableloader. We'll also review different use cases for when you should and shouldn't use this method.
Cassandra Community Webinar | Become a Super ModelerDataStax
Sure you can do some time series modeling. Maybe some user profiles. What's going to make you a super modeler? Let's take a look at some great techniques taken from real world applications where we exploit the Cassandra big table model to it's fullest advantage. We'll cover some of the new features in CQL 3 as well as some tried and true methods. In particular, we will look at fast indexing techniques to get data faster at scale. You'll be jet setting through your data like a true super modeler in no time.
Speaker: Patrick McFadin, Principal Solutions Architect at DataStax
(BDT401) Big Data Orchestra - Harmony within Data Analysis Tools | AWS re:Inv...Amazon Web Services
Yes, you can build a data analytics solution with a relational database, but should you? What about scalability? What about flexibility? What about cost? In this session, we demonstrate how to build a real world solution for location-based data analytics, with the combination of Amazon Kinesis, Amazon DynamoDB, Amazon Redshift, Amazon CloudSearch, and Amazon EMR. We discuss how to integrate these services to create a robust solution in terms of security, simplicity, speed, and low cost.
Further discussion on Data Modeling with Apache Cassandra. Overview of formal data modeling techniques as well as practical. Real-world use cases and associated data models.
This presentation covers how I wrote a little 39 line Node program and adapted it into an 88 line Go program. Serves as a "show me the code" example of getting started with Go.
Code is available at: https://github.com/agileleague/httpwebsockettest
The Node server in this project is hosted on Heroku at: http://httpwebsocketspeedtest.herokuapp.com/
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...Codemotion
We are entering an era where interactions with computers will drastically change. Standard I/O will be replaced by solutions that interact with natural language either spoken or written. The signs of this change are the numerous bots that appear everywhere. The most popular are chatbots. This session focusses on bots, to access them with any client and to create meaningful dialogs respecting the language and emotion of the user.
Cassandra Community Webinar | In Case of Emergency Break GlassDataStax
The design of Apache Cassandra allows applications to provide constant uptime. Peer-to-Peer technology ensures there are no single points of failure, and the Consistency guarantees allow applications to function correctly while some nodes are down. There is also a wealth of information provided by the JMX API and the system log. All of this means that when things go wrong you have the time, information and platform to resolve them without downtime. This presentation will cover some of the common, and not so common, performance issues, failures and management tasks observed in running clusters. Aaron will discuss how to gather information and how to act on it. Operators, Developers and Managers will all benefit from this exposition of Cassandra in the wild.
LinkRest (http://linkrest.io) is a small HTTP-based protocol and a Java framework that rethinks how REST APIs should be built and consumed. It turns each API endpoint into a graph query engine, giving the client full control over the shape and contents of the requested data sets, while the server controls query strategy and security. The talk will start with the easy parts – how to reuse an existing Apache Cayenne ORM model for the REST service and write simple Java one-liners to get it up and running. Then we will delve into alternative backends, graph access security and parallel data processing.
Apache Cassandra 2.0 is out - now there's no reason not to ditch that ol' legacy relational system for your important online applications. Cassandra 2.0 includes big impact features like Light Weight Transactions and Triggers. Do you know about the other new enhancements that got lost in the noise. Let's put the spotlight on all the things! Changes in memory management, file handling and internals. Low hype but they pack a big punch. While we were at it, we also did a bit of house cleaning.
This presentation discusses how Kafka Streams can expose the data from stateful operations, which can enable robust and more streamlined microservices.
Functional data models are great, but how can you squeeze out more performance and make them awesome! Let's talk through some example models, go through the tuning steps and understand the tradeoffs. Many time's just a simple understanding of the underlying internals can make all the difference. I've helped some of the biggest companies in the world do this and I can help you. Do you feel the need for Cassandra 2.0 speed?
Things like Infrastructure as Code, Service Discovery and Config Management can and have helped us to quickly build and rebuild infrastructure but we haven't nearly spend enough time to train our self to review, monitor and respond to outages. Does our platform degrade in a graceful way or what does a high cpu load really mean? What can we learn from level 1 outages to be able to run our platforms more reliably.
We all love infrastructure as code, we automate everything ™. However making sure all of our infrastructure assets are monitored effectively can be slow and resource intensive multi stage process. During this talk we will investigate how we can setup and observe a service mesh platform using HashiCorp's Consul Connect by recording its metrics. logs and traces.
This talk will focus on configuring and analysing the metrics, logs and traces Consul Connect produces using Prometheus, Loki, Tempo and Grafana.
Cassandra 3.0 - JSON at scale - StampedeCon 2015StampedeCon
This session will explore the new features in Cassandra 3.0, starting with JSON support. Cassandra now allows storing JSON directly to Cassandra rows and vice versa, making it trivial to deploy Cassandra as a component in modern service-oriented architectures.
Cassandra 3.0 also delivers other enhancements to developer productivity: user defined functions let developers deploy custom application logic server side with any language conforming to the Java scripting API, including Javascript. Global indexes allow scaling indexed queries linearly with the size of the cluster, a first for open-source NoSQL databases.
Finally, we will cover the performance improvements in Cassandra 3.0 as well.
Integrate Solr with real-time stream processing applicationslucenerevolution
Presented by Timothy Potter, Founder, Text Centrix
Storm is a real-time distributed computation system used to process massive streams of data. Many organizations are turning to technologies like Storm to complement batch-oriented big data technologies, such as Hadoop, to deliver time-sensitive analytics at scale. This talk introduces on an emerging architectural pattern of integrating Solr and Storm to process big data in real time. There are a number of natural integration points between Solr and Storm, such as populating a Solr index or supplying data to Storm using Solr’s real-time get support. In this session, Timothy will cover the basic concepts of Storm, such as spouts and bolts. He’ll then provide examples of how to integrate Solr into Storm to perform large-scale indexing in near real-time. In addition, we'll see how to embed Solr in a Storm bolt to match incoming tuples against pre-configured queries, commonly known as percolator. Attendees will come away from this presentation with a good introduction to stream processing technologies and several real-world use cases of how to integrate Solr with Storm.
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017Codemotion
What if someone told you that you could use the full capacity of your server? That you could have the same performance on the backend as your react frontend? Don't you believe it? That you could choose the best language/tool for the task and you were not limited by what you already know? In this talk, I'll show you that you can use the full power of React on the frontend and Vert.x on the backend. You will see a fast full stack development workflow with Rollup/Webpack + Babel + React. How you can mix JavaScript with any other language. Build microservice applications in minutes.
PostgreSQL High-Availability and Geographic Locality using consulSean Chittenden
Virtual IPs or floating IPs have long been the workhorse mechanism for providing high-availability for database systems, however floating IP addresses have several limitations that make it problematic in modern data centers and cloud environments, notably that it requires all members be in the same Layer-2 domain. consul is a strongly consistent way of providing high-availability services in Layer-3 environments and provides fail-over across different geographic regions. In this talk we will discuss the benefits, setup, and use of consul for fail-over of PostgreSQL, both in a local data center scenario and a geographic redundancy scenario where databases are split across multiple data centers.
Ready to build something with Cassandra but don't want to use something heavy like Java or C#? Let's take a quick tour though the DataStax Ruby and NodeJS drivers. You'll see how they are easy to use and just as powerful as any other driver. Connect, insert, query like a pro, and if there is a server failure? No problem. I'll show you how these drivers keep your app online despite server failures. This is a quick talk, but we'll have plenty of time to make you productive. It's that easy!
This presentation covers how I wrote a little 39 line Node program and adapted it into an 88 line Go program. Serves as a "show me the code" example of getting started with Go.
Code is available at: https://github.com/agileleague/httpwebsockettest
The Node server in this project is hosted on Heroku at: http://httpwebsocketspeedtest.herokuapp.com/
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...Codemotion
We are entering an era where interactions with computers will drastically change. Standard I/O will be replaced by solutions that interact with natural language either spoken or written. The signs of this change are the numerous bots that appear everywhere. The most popular are chatbots. This session focusses on bots, to access them with any client and to create meaningful dialogs respecting the language and emotion of the user.
Cassandra Community Webinar | In Case of Emergency Break GlassDataStax
The design of Apache Cassandra allows applications to provide constant uptime. Peer-to-Peer technology ensures there are no single points of failure, and the Consistency guarantees allow applications to function correctly while some nodes are down. There is also a wealth of information provided by the JMX API and the system log. All of this means that when things go wrong you have the time, information and platform to resolve them without downtime. This presentation will cover some of the common, and not so common, performance issues, failures and management tasks observed in running clusters. Aaron will discuss how to gather information and how to act on it. Operators, Developers and Managers will all benefit from this exposition of Cassandra in the wild.
LinkRest (http://linkrest.io) is a small HTTP-based protocol and a Java framework that rethinks how REST APIs should be built and consumed. It turns each API endpoint into a graph query engine, giving the client full control over the shape and contents of the requested data sets, while the server controls query strategy and security. The talk will start with the easy parts – how to reuse an existing Apache Cayenne ORM model for the REST service and write simple Java one-liners to get it up and running. Then we will delve into alternative backends, graph access security and parallel data processing.
Apache Cassandra 2.0 is out - now there's no reason not to ditch that ol' legacy relational system for your important online applications. Cassandra 2.0 includes big impact features like Light Weight Transactions and Triggers. Do you know about the other new enhancements that got lost in the noise. Let's put the spotlight on all the things! Changes in memory management, file handling and internals. Low hype but they pack a big punch. While we were at it, we also did a bit of house cleaning.
This presentation discusses how Kafka Streams can expose the data from stateful operations, which can enable robust and more streamlined microservices.
Functional data models are great, but how can you squeeze out more performance and make them awesome! Let's talk through some example models, go through the tuning steps and understand the tradeoffs. Many time's just a simple understanding of the underlying internals can make all the difference. I've helped some of the biggest companies in the world do this and I can help you. Do you feel the need for Cassandra 2.0 speed?
Things like Infrastructure as Code, Service Discovery and Config Management can and have helped us to quickly build and rebuild infrastructure but we haven't nearly spend enough time to train our self to review, monitor and respond to outages. Does our platform degrade in a graceful way or what does a high cpu load really mean? What can we learn from level 1 outages to be able to run our platforms more reliably.
We all love infrastructure as code, we automate everything ™. However making sure all of our infrastructure assets are monitored effectively can be slow and resource intensive multi stage process. During this talk we will investigate how we can setup and observe a service mesh platform using HashiCorp's Consul Connect by recording its metrics. logs and traces.
This talk will focus on configuring and analysing the metrics, logs and traces Consul Connect produces using Prometheus, Loki, Tempo and Grafana.
Cassandra 3.0 - JSON at scale - StampedeCon 2015StampedeCon
This session will explore the new features in Cassandra 3.0, starting with JSON support. Cassandra now allows storing JSON directly to Cassandra rows and vice versa, making it trivial to deploy Cassandra as a component in modern service-oriented architectures.
Cassandra 3.0 also delivers other enhancements to developer productivity: user defined functions let developers deploy custom application logic server side with any language conforming to the Java scripting API, including Javascript. Global indexes allow scaling indexed queries linearly with the size of the cluster, a first for open-source NoSQL databases.
Finally, we will cover the performance improvements in Cassandra 3.0 as well.
Integrate Solr with real-time stream processing applicationslucenerevolution
Presented by Timothy Potter, Founder, Text Centrix
Storm is a real-time distributed computation system used to process massive streams of data. Many organizations are turning to technologies like Storm to complement batch-oriented big data technologies, such as Hadoop, to deliver time-sensitive analytics at scale. This talk introduces on an emerging architectural pattern of integrating Solr and Storm to process big data in real time. There are a number of natural integration points between Solr and Storm, such as populating a Solr index or supplying data to Storm using Solr’s real-time get support. In this session, Timothy will cover the basic concepts of Storm, such as spouts and bolts. He’ll then provide examples of how to integrate Solr into Storm to perform large-scale indexing in near real-time. In addition, we'll see how to embed Solr in a Storm bolt to match incoming tuples against pre-configured queries, commonly known as percolator. Attendees will come away from this presentation with a good introduction to stream processing technologies and several real-world use cases of how to integrate Solr with Storm.
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017Codemotion
What if someone told you that you could use the full capacity of your server? That you could have the same performance on the backend as your react frontend? Don't you believe it? That you could choose the best language/tool for the task and you were not limited by what you already know? In this talk, I'll show you that you can use the full power of React on the frontend and Vert.x on the backend. You will see a fast full stack development workflow with Rollup/Webpack + Babel + React. How you can mix JavaScript with any other language. Build microservice applications in minutes.
PostgreSQL High-Availability and Geographic Locality using consulSean Chittenden
Virtual IPs or floating IPs have long been the workhorse mechanism for providing high-availability for database systems, however floating IP addresses have several limitations that make it problematic in modern data centers and cloud environments, notably that it requires all members be in the same Layer-2 domain. consul is a strongly consistent way of providing high-availability services in Layer-3 environments and provides fail-over across different geographic regions. In this talk we will discuss the benefits, setup, and use of consul for fail-over of PostgreSQL, both in a local data center scenario and a geographic redundancy scenario where databases are split across multiple data centers.
Ready to build something with Cassandra but don't want to use something heavy like Java or C#? Let's take a quick tour though the DataStax Ruby and NodeJS drivers. You'll see how they are easy to use and just as powerful as any other driver. Connect, insert, query like a pro, and if there is a server failure? No problem. I'll show you how these drivers keep your app online despite server failures. This is a quick talk, but we'll have plenty of time to make you productive. It's that easy!
Just a few years ago all software systems were designed to be monoliths running on a single big and powerful machine. But nowadays most companies desire to scale out instead of scaling up, because it is much easier to buy or rent a large cluster of commodity hardware then to get a single machine that is powerful enough. In the database area scaling out is realized by utilizing a combination of polyglot persistence and sharding of data. On the application level scaling out is realized by microservices. In this talk I will briefly introduce the concepts and ideas of microservices and discuss their benefits and drawbacks. Afterwards I will focus on the point of intersection of a microservice based application talking to one or many NoSQL databases. We will try and find answers to these questions: Are the differences to a monolithic application? How to scale the whole system properly? What about polyglot persistence? Is there a data-centric way to split microservices?
Just a few years ago all software systems were designed to be monoliths running on a single big and powerful machine. But nowadays most companies desire to scale out instead of scaling up, because it is much easier to buy or rent a large cluster of commodity hardware then to get a single machine that is powerful enough. In the database area scaling out is realized by utilizing a combination of polyglot persistence and sharding of data. On the application level scaling out is realized by microservices. In this talk I will briefly introduce the concepts and ideas of microservices and discuss their benefits and drawbacks. Afterwards I will focus on the point of intersection of a microservice based application talking to one or many NoSQL databases. We will try and find answers to these questions: Are the differences to a monolithic application? How to scale the whole system properly? What about polyglot persistence? Is there a data-centric way to split microservices?
Just a few years ago all software systems were designed to be monoliths running on a single big and powerful machine. But nowadays most companies desire to scale out instead of scaling up, because it is much easier to buy or rent a large cluster of commodity hardware then to get a single machine that is powerful enough. In the database area scaling out is realized by utilizing a combination of polyglot persistence and sharding of data. On the application level scaling out is realized by microservices. In this talk I will briefly introduce the concepts and ideas of microservices and discuss their benefits and drawbacks. Afterwards I will focus on the point of intersection of a microservice based application talking to one or many NoSQL databases. We will try and find answers to these questions: Are the differences to a monolithic application? How to scale the whole system properly? What about polyglot persistence? Is there a data-centric way to split microservices?
Unit Testing Express and Koa Middleware in ES2015Morris Singer
Even for JavaScript software developers well-versed in Agile practices, using test-driven development in the development of Node.js-based webservers can be challenging. In this presentation, I identify solutions to some of the most significant challenges to using TDD to build middleware stacks, with a focus on Express and Koa.
An introduction to Express, the Sinatra-inspired MVC framework for Node.JS. You'll learn how Express manages and processes routes, how to use the Jade template engine, and how to design data models aimed to play nice with Express.
Presented this talk at AltConf 2019. Covers typical REST API approach to syncing data between servers and mobile apps; then discusses how new eventually consistent databases with syncing technology built in can be used to make syncing simpler and easier to work with.
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofsAlex Pruden
This paper presents Reef, a system for generating publicly verifiable succinct non-interactive zero-knowledge proofs that a committed document matches or does not match a regular expression. We describe applications such as proving the strength of passwords, the provenance of email despite redactions, the validity of oblivious DNS queries, and the existence of mutations in DNA. Reef supports the Perl Compatible Regular Expression syntax, including wildcards, alternation, ranges, capture groups, Kleene star, negations, and lookarounds. Reef introduces a new type of automata, Skipping Alternating Finite Automata (SAFA), that skips irrelevant parts of a document when producing proofs without undermining soundness, and instantiates SAFA with a lookup argument. Our experimental evaluation confirms that Reef can generate proofs for documents with 32M characters; the proofs are small and cheap to verify (under a second).
Paper: https://eprint.iacr.org/2023/1886
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
In his public lecture, Christian Timmerer provides insights into the fascinating history of video streaming, starting from its humble beginnings before YouTube to the groundbreaking technologies that now dominate platforms like Netflix and ORF ON. Timmerer also presents provocative contributions of his own that have significantly influenced the industry. He concludes by looking at future challenges and invites the audience to join in a discussion.
1. 0 to App faster with NodeJS and Ruby
Rebecca Mills @RebccaMills
Patrick McFadin @PatrickMcFadin
2. The situation
• REST interface to Cassandra data
• Support CRUD operations
• It’s Friday and…
2
Umm yeah, and I’m going to
need that by Monday morning.
3. Choose your language
• Support for all Cassandra features
• Easy to work with
• Performant
3
7. DataStax NodeJS driver
• Works with current OSS Cassandra
• Apache Licensed
7
https://github.com/datastax/nodejs-driver
Based on node-cassandra-cql
by Jorge Bay
11. DataStax Cassandra Drivers
• Load Balancing Policies
• Retry Policies
• Asynchronous
• Prepared statements
• Connection and cluster management
11
A Cassandra Driver should have…
12. On to the code!
• RESTful web server
• Need a few helpers
12
+ +
13. REST methods
• Operates on the “USERS” table in Cassandra
13
POST Insert a user
GET Select a user
PUT Update a user
DELETE Delete a user
CREATE TABLE users (
firstname text,
lastname text,
age int,
email text,
city text,
PRIMARY KEY (lastname)
);
15. Connection for NodeJS
• Express as the web server
• body-parser to get POST data
15
var client = new cassandra.Client({
contactPoints: ['127.0.0.1'],
keyspace: 'demo',
policies: {
retry: new cassandra.policies.retry.RetryPolicy(),
loadBalancing: new cassandra.policies.loadBalancing.DCAwareRoundRobinPolicy('datacenter1')
}
}
);
var express = require('express')
var bodyParser = require('body-parser');
var cassandra = require('cassandra-driver');
16. var client = new cassandra.Client({
contactPoints: ['127.0.0.1'],
keyspace: 'demo',
policies: {
retry: new cassandra.policies.retry.RetryPolicy(),
loadBalancing: new cassandra.policies.loadBalancing.DCAwareRoundRobinPolicy('datacenter1')
}
}
);
Connection for NodeJS
• Express as the web server
• body-parser to get POST data
16
var express = require('express')
var bodyParser = require('body-parser');
var cassandra = require('cassandra-driver');
17. var client = new cassandra.Client({
contactPoints: ['127.0.0.1'],
keyspace: 'demo',
policies: {
retry: new cassandra.policies.retry.RetryPolicy(),
loadBalancing: new cassandra.policies.loadBalancing.DCAwareRoundRobinPolicy('datacenter1')
}
}
);
Connection for NodeJS
• Express as the web server
• body-parser to get POST data
17
var express = require('express')
var bodyParser = require('body-parser');
var cassandra = require('cassandra-driver');
18. var client = new cassandra.Client({
contactPoints: ['127.0.0.1'],
keyspace: 'demo',
policies: {
retry: new cassandra.policies.retry.RetryPolicy(),
loadBalancing: new cassandra.policies.loadBalancing.DCAwareRoundRobinPolicy('datacenter1')
}
}
);
Connection for NodeJS
• Express as the web server
• body-parser to get POST data
18
var express = require('express')
var bodyParser = require('body-parser');
var cassandra = require('cassandra-driver');
20. Insert a user with a POST
20
app.post('/users', function (req, res) {
var lastname = req.body.lastname;
var age = req.body.age;
var city = req.body.city;
var email = req.body.email;
var firstname = req.body.firstname;
var query = "INSERT INTO users (lastname, age, city, email, firstname) VALUES ( ?,?,?,?,?)";
var params = [lastname, age, city, email, firstname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err) {
res.send("Inserted");
} else {
res.sendStatus(404)
}
})
})
21. Insert a user with a POST
21
app.post('/users', function (req, res) {
var lastname = req.body.lastname;
var age = req.body.age;
var city = req.body.city;
var email = req.body.email;
var firstname = req.body.firstname;
var query = "INSERT INTO users (lastname, age, city, email, firstname) VALUES ( ?,?,?,?,?)";
var params = [lastname, age, city, email, firstname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err) {
res.send("Inserted");
} else {
res.sendStatus(404)
}
})
})
22. Insert a user with a POST
22
app.post('/users', function (req, res) {
var lastname = req.body.lastname;
var age = req.body.age;
var city = req.body.city;
var email = req.body.email;
var firstname = req.body.firstname;
var query = "INSERT INTO users (lastname, age, city, email, firstname) VALUES ( ?,?,?,?,?)";
var params = [lastname, age, city, email, firstname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err) {
res.send("Inserted");
} else {
res.sendStatus(404)
}
})
})
23. Insert a user with a POST
23
app.post('/users', function (req, res) {
var lastname = req.body.lastname;
var age = req.body.age;
var city = req.body.city;
var email = req.body.email;
var firstname = req.body.firstname;
var query = "INSERT INTO users (lastname, age, city, email, firstname) VALUES ( ?,?,?,?,?)";
var params = [lastname, age, city, email, firstname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err) {
res.send("Inserted");
} else {
res.sendStatus(404)
}
})
})
24. Select user with GET
24
app.get('/users/:lastname',function (req, res) {
var query = "SELECT lastname, age, city, email, firstname FROM users WHERE lastname= ?";
var params = [req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err){
if ( result.rows.length > 0 ) {
var user = result.rows[0];
console.log("name = %s, age = %d", user.firstname, user.age);
res.send(user)
} else {
res.sendStatus(404);
}
}
});
})
25. Select user with GET
25
app.get('/users/:lastname',function (req, res) {
var query = "SELECT lastname, age, city, email, firstname FROM users WHERE lastname= ?";
var params = [req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err){
if ( result.rows.length > 0 ) {
var user = result.rows[0];
console.log("name = %s, age = %d", user.firstname, user.age);
res.send(user)
} else {
res.sendStatus(404);
}
}
});
})
26. Select user with GET
26
app.get('/users/:lastname',function (req, res) {
var query = "SELECT lastname, age, city, email, firstname FROM users WHERE lastname= ?";
var params = [req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err){
if ( result.rows.length > 0 ) {
var user = result.rows[0];
console.log("name = %s, age = %d", user.firstname, user.age);
res.send(user)
} else {
res.sendStatus(404);
}
}
});
})
27. Select user with GET
27
app.get('/users/:lastname',function (req, res) {
var query = "SELECT lastname, age, city, email, firstname FROM users WHERE lastname= ?";
var params = [req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err){
if ( result.rows.length > 0 ) {
var user = result.rows[0];
console.log("name = %s, age = %d", user.firstname, user.age);
res.send(user)
} else {
res.sendStatus(404);
}
}
});
})
28. Select user with GET
28
app.get('/users/:lastname',function (req, res) {
var query = "SELECT lastname, age, city, email, firstname FROM users WHERE lastname= ?";
var params = [req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err){
if ( result.rows.length > 0 ) {
var user = result.rows[0];
console.log("name = %s, age = %d", user.firstname, user.age);
res.send(user)
} else {
res.sendStatus(404);
}
}
});
})
29. Update a user with PUT
29
app.put('/users/:lastname', function (req, res) {
var age = req.body.age;
console.log("lastname = " + req.params.lastname + ", age= " + age);
var query = "UPDATE users SET age = ? WHERE lastname = ?";
var params = [age, req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err) {
res.send("Updated");
} else {
res.sendStatus(404)
}
});
})
30. Remove a user with DELETE
30
app.delete('/users/:lastname', function (req, res) {
var query = "DELETE FROM users WHERE lastname = ?";
var params = [req.params.lastname];
client.execute(query, params, {prepare: true}, function (err, result) {
if (!err) {
res.send("Deleted");
} else {
res.sendStatus(404)
}
});
})
32. Connection with Ruby
• Sinatra as the web server
• JSON for returning formatted results
32
cluster = Cassandra.cluster(
:hosts => ['127.0.01'],
:load_balancing_policy => Cassandra::LoadBalancing::Policies::RoundRobin.new,
:retry_policy => Cassandra::Retry::Policies::Default.new,
logger: log)
keyspace = 'demo'
session = cluster.connect(keyspace)
require 'sinatra'
require 'JSON'
require 'cassandra'
require 'logger'
33. Connection with Ruby
• Sinatra as the web server
• JSON for returning formatted results
33
cluster = Cassandra.cluster(
:hosts => ['127.0.01'],
:load_balancing_policy => Cassandra::LoadBalancing::Policies::RoundRobin.new,
:retry_policy => Cassandra::Retry::Policies::Default.new,
logger: log)
keyspace = 'demo'
session = cluster.connect(keyspace)
require 'sinatra'
require 'JSON'
require 'cassandra'
require 'logger'
34. Connection with Ruby
• Sinatra as the web server
• JSON for returning formatted results
34
cluster = Cassandra.cluster(
:hosts => ['127.0.01'],
:load_balancing_policy => Cassandra::LoadBalancing::Policies::RoundRobin.new,
:retry_policy => Cassandra::Retry::Policies::Default.new,
logger: log)
keyspace = 'demo'
session = cluster.connect(keyspace)
require 'sinatra'
require 'JSON'
require 'cassandra'
require 'logger'
35. Retry Policies
• Retry requests on server errors
• Write Timeout
• Read Timeout
• Unavailable
35
36. Connection with Ruby
• Sinatra as the web server
• JSON for returning formatted results
36
cluster = Cassandra.cluster(
:hosts => ['127.0.01'],
:load_balancing_policy => Cassandra::LoadBalancing::Policies::RoundRobin.new,
:retry_policy => Cassandra::Retry::Policies::Default.new,
logger: log)
keyspace = 'demo'
session = cluster.connect(keyspace)
require 'sinatra'
require 'JSON'
require 'cassandra'
require 'logger'
37. Insert a user with a POST
37
post '/users' do
begin
session.execute(userInsertStatement, :arguments => [params[:firstname], params[:lastname],
params[:age].to_i, params[:city], params[:email]])
"Inserted"
rescue Exception => e
log.error 'Error in insert a user'
log.error(e)
halt(404)
end
end
userInsertStatement = session.prepare("INSERT INTO users (firstname, lastname, age, city, email)
VALUES (?,?,?,?,?)")
38. Insert a user with a POST
38
post '/users' do
begin
session.execute(userInsertStatement, :arguments => [params[:firstname], params[:lastname],
params[:age].to_i, params[:city], params[:email]])
"Inserted"
rescue Exception => e
log.error 'Error in insert a user'
log.error(e)
halt(404)
end
end
userInsertStatement = session.prepare("INSERT INTO users (firstname, lastname, age, city, email)
VALUES (?,?,?,?,?)")
…
39. Insert a user with a POST
39
post '/users' do
begin
session.execute(userInsertStatement, :arguments => [params[:firstname], params[:lastname],
params[:age].to_i, params[:city], params[:email]])
"Inserted"
rescue Exception => e
log.error 'Error in insert a user'
log.error(e)
halt(404)
end
end
userInsertStatement = session.prepare("INSERT INTO users (firstname, lastname, age, city, email)
VALUES (?,?,?,?,?)")
…
40. Select user with GET
40
get '/users/:lastname' do
begin
result = session.execute(userSelectStatement, :arguments => [params[:lastname]])
if result.size < 1
halt(404)
end
result.first.to_json
rescue Exception => e
log.error 'Error in select a user'
log.error(e)
halt(404)
end
end
userSelectStatement = session.prepare("SELECT firstname,lastname, age, email, city
FROM users where lastname = ?")
41. Select user with GET
41
get '/users/:lastname' do
begin
result = session.execute(userSelectStatement, :arguments => [params[:lastname]])
if result.size < 1
halt(404)
end
result.first.to_json
rescue Exception => e
log.error 'Error in select a user'
log.error(e)
halt(404)
end
end
userSelectStatement = session.prepare("SELECT firstname,lastname, age, email, city
FROM users where lastname = ?")…
42. Select user with GET
42
get '/users/:lastname' do
begin
result = session.execute(userSelectStatement, :arguments => [params[:lastname]])
if result.size < 1
halt(404)
end
result.first.to_json
rescue Exception => e
log.error 'Error in select a user'
log.error(e)
halt(404)
end
end
userSelectStatement = session.prepare("SELECT firstname,lastname, age, email, city
FROM users where lastname = ?")
…
43. Select user with GET
43
get '/users/:lastname' do
begin
result = session.execute(userSelectStatement, :arguments => [params[:lastname]])
if result.size < 1
halt(404)
end
result.first.to_json
rescue Exception => e
log.error 'Error in select a user'
log.error(e)
halt(404)
end
end
userSelectStatement = session.prepare("SELECT firstname,lastname, age, email, city
FROM users where lastname = ?")
…
44. Quick note on Async
• Generates a Future
• Non-blocking until get
44
future = session.execute_async(statement)
# register success listener
future.on_success do |rows|
rows.each do |row|
puts "#{row["artist"]}: #{row["title"]} / #{row["album"]}"
end
end
45. Quick note on Async
• Generates a Future
• Non-blocking until get
45
future = session.execute_async(statement)
# register success listener
future.on_success do |rows|
rows.each do |row|
puts "#{row["artist"]}: #{row["title"]} / #{row["album"]}"
end
end
46. Quick note on Async
• Generates a Future
• Non-blocking until get
46
future = session.execute_async(statement)
# register success listener
future.on_success do |rows|
rows.each do |row|
puts "#{row["artist"]}: #{row["title"]} / #{row["album"]}"
end
end
47. Update a user with PUT
47
put '/users' do
begin
session.execute(userUpdateStatement, :arguments => [params[:age].to_i, params[:lastname]])
"Updated"
rescue Exception => e
log.error 'Error in update a user'
log.error(e)
halt(404)
end
end
userUpdateStatement = session.prepare("UPDATE users SET age = ? WHERE lastname = ?")
48. Remove a user with DELETE
48
delete '/users/:lastname' do
begin
session.execute(userDeleteStatement, :arguments => [params[:lastname]])
"Deleted"
rescue Exception => e
log.error 'Error in delete a user'
log.error(e)
halt(404)
end
end
userDeleteStatement = session.prepare("DELETE FROM users WHERE lastname = ?")