The document provides an overview of TorqueBox, an application server for Ruby applications. It discusses how TorqueBox allows Ruby applications to leverage features typically found in Java application servers like background jobs, messaging, and clustering. It also provides instructions for setting up TorqueBox, including downloading, configuring environment variables, and using Rake tasks to deploy and run applications on TorqueBox.
Apache Jackrabbit Oak - Scale your content repository to the cloudRobert Munteanu
Apache Jackrabbit Oak is a content repository which supports the most desired features from both SQL and NoSQL approaches. Some of its key features include ACLs, versioning, efficient blob storage, transactions, structured and unstructured content and multiple query languages.
This talk introduces Oak as a new implementation of the Content Repository API for Java, rewritten from scratch to ensure that it can scale out to support massive content repositories.
You will find out how you can start using Oak now to support use cases as varied as content management, document management, digital asset management or business rule management systems.
Apache Jackrabbit Oak - Scale your content repository to the cloudRobert Munteanu
Apache Jackrabbit Oak is a content repository which supports the most desired features from both SQL and NoSQL approaches. Some of its key features include ACLs, versioning, efficient blob storage, transactions, structured and unstructured content and multiple query languages.
This talk introduces Oak as a new implementation of the Content Repository API for Java, rewritten from scratch to ensure that it can scale out to support massive content repositories.
You will find out how you can start using Oak now to support use cases as varied as content management, document management, digital asset management or business rule management systems.
The slide deck for Andrew White's Technical Breakfast Club, covering how past major releases have tripped people up in upgrades and what strategies you need to adopt to make sure your upgrade path is smooth.
Handling RESTful API requests with Laravel PHP Framework resource controllers is already very easy. With Laravel 5, handling request routing has been made even easier by using a configuration-as-annotation approach. Controller annotations may take advantage of doc block-style syntax and then be compiled using Laravel's artisan command-line tool. I'll present this approach by providing a few examples and discussing some of the pros and cons.
by Ian Robinson - In the mid-2000s I was using the web as a platform for building enterprise apps. This led to my co-authoring 'REST in Practice', a guide to applying the tenets of REST in the enterprise. Then, in 2011, I joined a graph database company. Here, we applied the ideas that inspired 'REST in Practice' to a quite different set of architectural problems. In this session I'll discuss some the things I've learnt in implementing a database server Web API, and building the infrastructure we use for testing clusters, reproducing customer scenarios, and benchmarking the database.
Tracking huge files with Git LFS (GlueCon 2016)Tim Pettersen
These are the slides from Tim Pettersen's (@kannonboy) presentation entitled "Tracking huge files with Git LFS" at GlueCon 2016 in Broomfield, Colorado. The video is available at https://www.youtube.com/watch?v=iJ3hXuEVKAc
This webcast covers the theoretical introduction to Web Farms and how to build Drupal Web Farms with IIS. Don't miss the second part of the webcast (also part of this series) where a full demo on creating Drupal Web Farms with 4 virtual machines will be presented. If you are already familiar with Web Farms, Application Request Router, Web Farm Framework you can skip to part 2. Otherwise, this webcast is highly recommended and propaedeutic to grasp all the basic knowledge that you might need later.
The slide deck for Andrew White's Technical Breakfast Club, covering how past major releases have tripped people up in upgrades and what strategies you need to adopt to make sure your upgrade path is smooth.
Handling RESTful API requests with Laravel PHP Framework resource controllers is already very easy. With Laravel 5, handling request routing has been made even easier by using a configuration-as-annotation approach. Controller annotations may take advantage of doc block-style syntax and then be compiled using Laravel's artisan command-line tool. I'll present this approach by providing a few examples and discussing some of the pros and cons.
by Ian Robinson - In the mid-2000s I was using the web as a platform for building enterprise apps. This led to my co-authoring 'REST in Practice', a guide to applying the tenets of REST in the enterprise. Then, in 2011, I joined a graph database company. Here, we applied the ideas that inspired 'REST in Practice' to a quite different set of architectural problems. In this session I'll discuss some the things I've learnt in implementing a database server Web API, and building the infrastructure we use for testing clusters, reproducing customer scenarios, and benchmarking the database.
Tracking huge files with Git LFS (GlueCon 2016)Tim Pettersen
These are the slides from Tim Pettersen's (@kannonboy) presentation entitled "Tracking huge files with Git LFS" at GlueCon 2016 in Broomfield, Colorado. The video is available at https://www.youtube.com/watch?v=iJ3hXuEVKAc
This webcast covers the theoretical introduction to Web Farms and how to build Drupal Web Farms with IIS. Don't miss the second part of the webcast (also part of this series) where a full demo on creating Drupal Web Farms with 4 virtual machines will be presented. If you are already familiar with Web Farms, Application Request Router, Web Farm Framework you can skip to part 2. Otherwise, this webcast is highly recommended and propaedeutic to grasp all the basic knowledge that you might need later.
Each technological age has been marked by a shift in how the industrial platform enables companies to rethink their business processes and create wealth. In the talk I argue that we are limiting our view of what this next industrial/digital age can offer because of how we read, measure and through that perceive the world (how we cherry pick data). Companies are locked in metrics and quantitative measures, data that can fit into a spreadsheet. And by that they see the digital transformation merely as an efficiency tool to the fossil fuel age. But we need to stretch further…
The Six Highest Performing B2B Blog Post FormatsBarry Feldman
If your B2B blogging goals include earning social media shares and backlinks to boost your search rankings, this infographic lists the size best approaches.
사내 발표자료 겸 만들었는데, ECS Fargate를 이용하실 분들이라면, 편리하게 쓰실 수 있도록 최대한 상세하게 만들어 보았습니다.
사실 CloudFormation 등 배포는 좀 더 편리하게 할 수 있지만, 회사 사정도 있고, 제가 일단 그런 기술을 너무 늦게 알았기 때문에 다루지는 않았습니다.
This talk will give you tips and tricks to get better build time performance and smaller images. The most important take-away is: you should be using multi-stage Dockerfiles and enable BuildKit.
Abstract: Composer is a tool for managing dependencies in PHP projects. This talk will introduce Composer and its associated package repository Packagist. The key features and benefits of using Composer will be explored and through practical demonstrations you will gain a working knowledge of using Composer for dependency management.
DockerCon EU 2018 - Dockerfile Best PracticesTibor Vass
UPDATE: DockerCon SF 2019 talk is available at https://www.slideshare.net/Docker/dcsf19-dockerfile-best-practices, it is an updated version of this talk.
DockerCon EU 2018 talk on Dockerfile Best practices by Tibor Vass and Sebastiaan van Stijn
Introduction to Cocoapods as Dependency Management for iOS project using Swift. This slide will also introduce some of common library used in iOS Development: Alamofire, SwiftyJSON, MBProgressHUD.
The features released between Java 11 and Java 17 have brought a greater opportunity for developers to improve application development productivity as well and code expressiveness and readability. In this deep-dive session, you will discover all the recent Project Amber features added to the Java language such as Records (including Records serialization), Pattern Matching for `instanceof`, switch expression, sealed classes, and hidden classes. The main goal of the Amber Project is to bring Pattern Matching to the Java platform, which will impact both the language and the JDK APsI. You will discover record patterns, array patterns, as well as deconstruction patterns, through constructors, factory methods, and deconstructors.
You can find the code shown here: https://github.com/JosePaumard/devoxx-uk-2021
Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Month...Amazon Web Services
In this session, we introduce you to a solution for easily running a Docker-powered microservices architecture on AWS using Elastic Beanstalk. We will also cover the fundamentals of Elastic Beanstalk and how it benefits developers looking for a quick and scalable way to get their applications running on AWS with no infrastructure work required.
Building a microservices architecture using Docker can require a lot of work, from launching and operating the underlying infrastructure to installing and maintaining cluster management software. With AWS Elastic Beanstalk’s multicontainer support feature, many of these tasks are simplified and abstracted away so you can focus on your application code. AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker."
Learning Objectives:
• Learn the basics of AWS Elastic Beanstalk
• Understand how to use Elastic Beanstalk to run containerized applications
• Learn how to use Elastic Beanstalk to start architecting microservices-based applications
Managing dependencies and third-party code in PHP applications is a daily challenge, keeping everyone on the same versions during development and at deploy time a struggle. Meet Composer a tool designed to help you maintain a consistent set of dependencies as well as share and discover new libraries. Let's see how you can use this tool in your Applications and Libraries to wrangle your dependencies with a simple json configuration file and a command line interface.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
GridMate - End to end testing is a critical piece to ensure quality and avoid...ThomasParaiso2
End to end testing is a critical piece to ensure quality and avoid regressions. In this session, we share our journey building an E2E testing pipeline for GridMate components (LWC and Aura) using Cypress, JSForce, FakerJS…
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
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.
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!SOFTTECHHUB
As the digital landscape continually evolves, operating systems play a critical role in shaping user experiences and productivity. The launch of Nitrux Linux 3.5.0 marks a significant milestone, offering a robust alternative to traditional systems such as Windows 11. This article delves into the essence of Nitrux Linux 3.5.0, exploring its unique features, advantages, and how it stands as a compelling choice for both casual users and tech enthusiasts.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
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.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
6. TorqueBox: what?
•A “real” app server for Ruby
•Founded in 2008
•100% open-source, LGPL license
•Based on JBoss AS and JRuby
•Just released 1.0.0.CR2!
14. AS = Application Server
•interpreter” server +
Not just “web
•appshost multiple, disparate
Can
simultaneously
•apps it hosts services to all the
Provides basic
15. JBoss AS6
•Tomcat for web
•Infinispan for caching
•HornetQ for messaging
•Quartz for scheduling
•PicketBox for authentication
•mod_cluster for clustering
21. Easy Install
(download 1.0.0.CR2 from torquebox.org)
$ unzip torquebox-dist-1.0.0.CR1-bin.zip the jruby
Make sure
found in your path
$ export TORQUEBOX_HOME=$PWD/torquebox-1*
is in $JRUBY_HOME/
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby
$ export PATH=$JRUBY_HOME/bin:$PATH
22. Easy Install
(download 1.0.0.CR2 from torquebox.org)
$ unzip torquebox-dist-1.0.0.CR1-bin.zip the jruby
Make sure
found in your path
$ export TORQUEBOX_HOME=$PWD/torquebox-1*
is in $JRUBY_HOME/
$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss
$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby
$ export PATH=$JRUBY_HOME/bin:$PATH
27. Rake Tasks
rake torquebox:run
Run TorqueBox server
rake torquebox:deploy[context_path]
Deploy the app in the current directory
rake torquebox:undeploy
Undeploy the app in the current directory
28. Rake Tasks
Start torquebox:run in its own
shell and leave it running.
Instead of script/server or
shotgun or thin or whatever
else, use torquebox:run.
30. Hot Deployment
$TORQUEBOX_HOME/apps/
• anything added to
apps/ will get deployed
• anything removed from
apps/ will get
undeployed
• anything updated in
apps/ will get
redeployed
• TorqueBox deployers
make JBoss grok YAML
31. Hot Deployment
$TORQUEBOX_HOME/apps/
deployment
•descriptors to
anything added
apps/ will get deployed
• anything removed from
apps/ will get
undeployed
• anything updated in
apps/ will get
redeployed
• TorqueBox deployers
make JBoss grok YAML
32. Hot Deployment
$TORQUEBOX_HOME/apps/
deployment
•descriptors to
anything added
apps/ will get deployed
• anything removed from
apps/ will get
undeployed
• anything updated in
apps/ will get
redeployed
• TorqueBox deployers
make JBoss grok YAML
33. Hot Deployment
$TORQUEBOX_HOME/apps/
• anything added to
apps/ will get deployed
• anything removed from
apps/ will get
undeployed
knob files (zip
•archives)
anything updated in
apps/ will get
redeployed
• TorqueBox deployers
make JBoss grok YAML
34. Hot Deployment
$TORQUEBOX_HOME/apps/
• anything added to
apps/ will get deployed
• anything removed from
apps/ will get
undeployed
knob files (zip
•archives)
anything updated in
apps/ will get
redeployed
• TorqueBox deployers
make JBoss grok YAML
36. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp
env: development
web: The fully-qualified
context: myapp
path to the app.
host: www.yourhost.com
static: public This will be the
environment: value of either
RAILS_ROOT or
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
RACK_ROOT
37. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp
env: development
web: The fully-qualified
context: myapp
path to the app.
host: www.yourhost.com
static: public This will be the
environment: value of either
RAILS_ROOT or
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
RACK_ROOT
38. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp
env: development
web:
context: myapp The runtime mode
host: www.yourhost.com the app. This
of
static: public will be either
environment:
RAILS_ENV or
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com RACK_ENV
39. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp
env: development
web:
context: myapp The runtime mode
host: www.yourhost.com the app. This
of
static: public will be either
environment:
RAILS_ENV or
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com RACK_ENV
40. Deployment Descriptors
The app’s context path
apps/myapp-knob.yml (or “sub URI”):
http://localhost:8080/myapp
application: Can be set via rake:
root: rake torquebox:deploy[myapp]
/path/to/myapp
env: development The default is root:
web: http://localhost:8080/
context: myapp
host: www.yourhost.com
static: public
environment:
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
41. Deployment Descriptors
The app’s context path
apps/myapp-knob.yml (or “sub URI”):
http://localhost:8080/myapp
application: Can be set via rake:
root: rake torquebox:deploy[myapp]
/path/to/myapp
env: development The default is root:
web: http://localhost:8080/
context: myapp
host: www.yourhost.com
static: public
environment:
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
42. Deployment Descriptors
apps/myapp-knob.yml
application:
A list of virtual
root: /path/to/myapp
env: development hostnames to
web: which to bind the
context: myapp
host: www.yourhost.com
static: public
environment:
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
43. Deployment Descriptors
apps/myapp-knob.yml
application:
A list of virtual
root: /path/to/myapp
env: development hostnames to
web: which to bind the
context: myapp
host: www.yourhost.com
static: public
environment:
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
44. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp
env: development The location of
web: the app’s static
context: myapp content, either
host: www.yourhost.com
static: public
absolute or
environment: relative to the
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
45. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp
env: development The location of
web: the app’s static
context: myapp content, either
host: www.yourhost.com
static: public
absolute or
environment: relative to the
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
46. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp Any
env: development
web: environment
context: myapp variables
host: www.yourhost.com
static: public
environment:
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
47. Deployment Descriptors
apps/myapp-knob.yml
application:
root: /path/to/myapp Any
env: development
web: environment
context: myapp variables
host: www.yourhost.com
static: public
environment:
MAIL_HOST: mail.yourhost.com
REPLY_TO: you@yourhost.com
51. jruby-rack
•supported: rails, sinatra, etc
All rack-based frameworks
•deploy from where they apps
No packaging required:
sit on
disk
• No redeploy necessary to see
changes when using rack
reloading, shotgun or rails
development mode
• We use it inside Tomcat
55. Jobs
“Fire every half hour from 10am until
1pm on the third Friday of each
month”
0 */30 10-13 ? * FRI#3
Seconds Minutes Hours DOM Month DOW Year
1-7
1-12 1970-
1-31 SUN-
0-59 0-59 0-23 JAN- 2099
?LW SAT
DEC empty
?L#
56. Jobs
•day ofportable. What is the first
More
the week on BSD again?
What’s cron on Windows?
• Self contained within the app.
No external systems to manage
and keep in sync.
• Full application environment
loaded and available.
67. Backgroundable
lib/something.rb
include TorqueBox::Messaging
class WelcomeEmailer
include Backgroundable
always_background :welcome
def welcome(id)
person = Person.find_by_id(id)
person.send_welcome_spam if person
end
def depart(id)
# do something else
end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
68. Backgroundable
lib/something.rb
include TorqueBox::Messaging
class WelcomeEmailer
include Backgroundable
always_background :welcome
def welcome(id)
person = Person.find_by_id(id)
person.send_welcome_spam if person
end
def depart(id)
# do something else
end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
69. Backgroundable
lib/something.rb
include TorqueBox::Messaging
class WelcomeEmailer
include Backgroundable
always_background :welcome
def welcome(id)
person = Person.find_by_id(id)
person.send_welcome_spam if person
end
def depart(id)
# do something else
end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
70. Backgroundable
lib/something.rb
include TorqueBox::Messaging
class WelcomeEmailer
include Backgroundable
always_background :welcome
def welcome(id)
person = Person.find_by_id(id)
person.send_welcome_spam if person
end
def depart(id)
# do something else
end
end
...
@emailer.welcome(an_id)
@something.background.depart(an_id)
71. Background Processing
Call it from your
controllers, models,
and observers, or even
other tasks. Even in
non-Rails apps!
72. Background Processing
•No extra tables in your database
•No external system to manage
•Little to no config required at all
•System gets redeployed w/app
•Efficient loading of rails
environment
•Automatic load balancing and
retries
•Works on Windows, if you care
73. Queues
Tasks and Backgroundable are
built on top of Queues. Of
course, you may build your
own messaging based apps by
defining your own Queues,
Topics, and their message
Processors yourself.
75. Topics
•interface is different, but
behavior
is the same.
•each message, of a only one
all subscribers
but
topic see
subscriber will see any message
from a queue
• use topics: section of
torquebox.yml to define topics
90. Services
•optional initialize(Hash), start()
Represented as a class with
and stop() methods, which
should each return quickly.
• Typically will start a long-
running loop in a thread and
respond to external events.
• Configured via services: section
in torquebox.yml
92. Services
app/services/time_machine.rb
class TimeMachine
def initialize(opts)
@queue = Queue.new(opts['queue'])
end
def start
Thread.new do
until @done
@queue.publish(Time.now)
sleep(1)
end
end
end
def stop; @done = true; end
end
93. Services
app/services/time_machine.rb
class TimeMachine
def initialize(opts)
@queue = Queue.new(opts['queue'])
end
def start
Thread.new do
until @done
@queue.publish(Time.now)
sleep(1)
end
end
end
def stop; @done = true; end
end
94. Services
app/services/time_machine.rb
class TimeMachine
def initialize(opts)
@queue = Queue.new(opts['queue'])
end
def start
Thread.new do
until @done
@queue.publish(Time.now)
sleep(1)
end
end
end
def stop; @done = true; end
end
95. Services
app/services/time_machine.rb
class TimeMachine
def initialize(opts)
@queue = Queue.new(opts['queue'])
end
def start
Thread.new do
until @done
@queue.publish(Time.now)
sleep(1)
end
end
end
def stop; @done = true; end
end
SLOW THE FUCK DOWN - BUILT ON THE SHOULDERS OF GIANTS\nfocus on the non-web\nthe rest of this talk is the 'why'\n\n
two great technologies\nshoulders of giants\n
1.6.1\n
Why wouldn’t you use it?\nlead with rake/rspec\nFFI support there now, C ext. support soon. Both are slower than on MRI\n
\n
\n
\n
Our goal: bring as much JBoss goodness as we can to Ruby\n- TB is new, but based on stable technologies\n
SLOW THE FUCK DOWN\n
Ensure you have Java 6 installed\n
Ensure you have Java 6 installed\n
Ensure you have Java 6 installed\n
Ensure you have Java 6 installed\n
Ensure you have Java 6 installed\n- rvm\n
jruby's gem_home\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
SLOW THE FUCK DOWN\n
\n
- your app appears to be a java app to Tomcat\n- Sinatra reloading is a bit wonky. Shotgun does work, but a safer bet is to touch your deployment descriptor\n
HIDE THIS SLIDE??\n
\n
Can reside anywhere in the load path, app/jobs is preferred\nOnly a run() method is required\nCommon example: send monthly newsletter\n
\n
more granular than standard cron - L=last day of week/month, W=weekday\nThe last day of the month\nThe last weekday of the month\nThe weekday closest to the 15th\n
instead of each cron job spawning your app\n
SLOW THE FUCK DOWN\nThis is what people use Delayed::Job for\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
/app/tasks or /tasks\nsimilar to Delayed::Job functionality\n
\n
payload is a hash\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Or integrate with a legacy Java app through its queues.\n
\n
\n
\n
\n
\n
\n
These can be anywhere in the load path, but lib and/or app/models is typical\n
concurrency - how many processors are allowed to work at once - default is 1\nconfig - passed to class initializer\n
\n
\n
\n
\n
Ruby messages are Marshaled and Base64-encoded\n
\n
\n
\n
\n
\n
anywhere in the load path, but app/services is preferred\nDON’T EXPLAIN - line by line coming up\n
\n
\n
\n
\n
\n
- built on Infinispan Data Grid\n-clustered requires no hosts config (like memcached)\n-ActiveSupport 3 only\n
\n
\n
How we do it, advantages\ngood blog post on tb.org\n
\n
\n
\n
\n
\n
applies to all runtimes for the app (messaging, jobs, services)\n
SLOW THE FUCK DOWN\narticles posted on torquebox.org detailing clustering config\n\n
reverse proxy / load balancer\nAs server nodes join and leave the cluster, the balancer (mod_cluster) is aware of these changes.\n
As server nodes join and leave the cluster, the balancer (mod_cluster) is aware of these changes.\n
\n
\n
\n
local, invalidation, replicated, distributed\n
\n
\n
\n
80 minute test, # clients increasing every 10m\n
\n
community driven\n
\n
\n
\n
\n
design happens in #torquebox \n
- would you use it?\n- RHT is hiring rubyists in rdu - see me after\n- stickers\n- repeat questions\n