SlideShare a Scribd company logo
1 of 8
Download to read offline
%title: Miscelaneous Debris %author: fREW Schmidt %date: 2015-03-19
-> Outline <-
Docker
Tools
zsh, vi, awesome, smaller stuff
DBIx::Class
DBIx::Class::Helpers
drinkup
Dogma
Simplicity, Async %title: µDocker %author: fREW Schmidt %date: 2015-03-19
-> Docker: Agenda <-
What even is this thing
Brief History
In the small
In the large
Misc
Example / Demo
-> What even is this <-
Process grouping
Process isolation
sorta like crappy virtualization
docker makes this accessible and even fun
-> History <-
chroot
jails See history here
cgroups
LXC
Docker / LMCTFY wow lots of containers
-> In the small <-
Dockerfiles
images
layered
a surprising amount of options (AUFS, OverlayFS, lvm, BTRFS, interesting info)
docker {build,run,stop,rm,rmi,images,ps}
awesome for out-of-the-box dev
(like databases or other deps like that)
haven't had much luck with own code in dev
-f probably helps
no silver bullet for repeatability
esp when initially containerizing
carton
-> In the "large" <-
You'll really want a registry
docker push mapapp.registry.my.domain.com:5000
docker pull mapapp.registry.my.domain.com:5000
run.sh (sortav a bummer)
(this is where the moving parts are)
-> Misc <-
pause / unpause - I use this to save battery
sysdig - great observability tool w/ container support
linking containers
complicated but powerful, "safe", and composible
I've only used it for network access
testing
ironically, this can be frustratingly hard
unless you already have CI
mock linking helps
each needed port and volume is a moving part
basically means that image is "incomplete"
-> DEMOS <-
Dockerfile
build it!
run it!
sysdig it!
tail logs! %title: µTools %author: fREW Schmidt %date: 2015-03-19
-> Tools <-
vim
zsh
awesome
wrappers
remote stuff
-> vim Core <-
know your text objects (w, iw, aw, ip, i()
these are actually pluggable (ie, i_, ife)
quickfix
(see unimpaired for fast usage)
I use it daily with Fugitive
gv
-> vim plugins <-
repeat
surround
fugitive
commentary
ultisnips (needs python)
neocomplete (needs lua)
ctrlp
dispatch/projectionist(/haystack)
synastic
matchmaker
unimpaired
Custom textobjs: textobj-between, textobj-underscore, textobj-lastpat, textobj-entire
visual-star-search
-> zsh <-
Cool prompt
Selected options
AUTO_CD
AUTO_PUSHD
NO_CASE_GLOB
{PUSHD,HIST}_IGNORE{_ALL,}_DUPS
APPEND_HISTORY
EXTENDED_HISTORY
HIST_FIND_NO_DUPS
HIST_IGNORE_SPACE
SHARE_HISTORY
-> zsh <-
Global aliases
alias -g G="| grep"
alias -g L="| less -F"
alias -g UP="@{upstream}"
alias -g PT="2>&1"
alias -g PTV="2>&1 | vim -"
-> awesome <-
xmonad - haskell
weather
win+u
-> wrappers <-
(git)[https://github.com/frioux/dotfiles/blob/6cee48b27216945d79fc288d1fb2b8f8b0eaafa4/bin/wrap-git]
(tar)[https://github.com/frioux/dotfiles/blob/6cee48b27216945d79fc288d1fb2b8f8b0eaafa4/bin/wrap-tar]
(unzip)[https://github.com/frioux/dotfiles/blob/6cee48b27216945d79fc288d1fb2b8f8b0eaafa4/bin/replace-unzip]
-> remote stuff <-
(corn)[https://github.com/frioux/corn/blob/master/app.psgi]
Docker (Linode vs OVH)
gitolite %title: µDBIC %author: fREW Schmidt %date: 2015-03-19
-> DBIC <-
This is the smallest of overviews
I'm sorta bored of doing DBIC talks
... but feel free to ask questions afterwards!
-> DBIC parts <-
Schema
set of tables
ResultSource
table (go away "actually" guy)
ResultSet
query
Result
Row
-> Relationship Types <-
has_many
other rows have references to my PK
belongs_to
I have a references to some other PK
has_one
single special case of has_many
might_have
zero/one special case of has_many
many_to_many
for join tables (not a real rel)
-> THAT'S ENOUGH <-
-> QUESTIONS <-
%title: µDBIx::Class::Helpers %author: fREW Schmidt %date: 2015-03-19
-> DBIx::Class::Helpers <-
A bunch of handy little components I made for DBIC
This talk will go over some of my favorites
There may be more useful ones you should look at, so take a peek
-> ::ResultSet::CorrelateRelationship <-
$cd_rs
->correlate('tracks')
->related_resultset('plays')
->count_rs
Can be used in lots of places like order_by or columns
See especially later slide, ::Row::ProxyResultSetMethod
-> ::ResultSet::DateMethods1 <-
$rs->search(undef, {
columns => {
count => '*',
year => $rs->dt_SQL_pluck({ -ident => '.start' }, 'year'),
month => $rs->dt_SQL_pluck({ -ident => '.start' }, 'month'),
},
group_by => [
$rs->dt_SQL_pluck({ -ident => '.start' }, 'year'),
$rs->dt_SQL_pluck({ -ident => '.start' }, 'month'),
],
});
Simplifies date math for your brain (before/after vs </>)
Converts DT objects for your DB
Extracts Date Parts
Adds dates together
No subtraction yet (super varied, dubious usefulness)
-> ::ResultSet::IgnoreWantarray <-
my @values = paginate($rs->search(...))
Fixes that bug
-> ::ResultSet::SearchOr <-
sub not_passed ($self) {
$self->search_or([$self->failed, $self->untested])
}
Sortav a ghetto union
-> ::ResultSet::SetOperations <-
$rs->union($rs2)
->intersect($rs3)
->except($rs4)
Not a ghetto union
The weirdest feature not to be in core
-> DBIx::Class::Candy <-
package MyApp::Schema::Result::Artist;
use DBIx::Class::Candy -autotable => v1;
primary_column id => {
data_type => 'int',
is_auto_increment => 1,
};
column name => {
data_type => 'varchar',
size => 25,
is_nullable => 1,
};
has_many albums => 'A::Schema::Result::Album', 'artist_id';
1;
Great for slides!
(All the following slides assume it)
-> ::Row::OnColumnChange <-
before_column_change amount => {
method => 'bank_transfer',
txn_wrap => 1,
};
sub bank_transfer ($self, $old, $new) {
my $delta = abs($old - $new);
if ($old < $new) {
Bank->subtract($delta)
} else {
Bank->add($delta)
}
}
Just a really useful generic helper ~~ a trigger
-> ::Row::ProxyResultSet{Method,Update} <-
RS Method
sub with_friend_count {
shift->search(undef, {
'+columns' => {
friend_count =>
$self->correlate('friends')
->count_rs
->as_query
},
})
}
In Row
proxy_resultset_method 'friend_count';
Access already selected data
Or fetch if it wasn't, and cache it!
(Considering making this warn)
-> QUESTIONS? <-
(you can ask about DBIx::Class::DeploymentHandler if you want) %title: µdrinkup %author: fREW Schmidt %date: 2015-03-
19
-> drinkup <-
Just a thing I made a while ago that's fun to talk about
Was recently asked about cool stuff I'd made
Thankful that one of those things is OSS
List of cool things in no particular order
-> Cool Thing É‘ <-
Cute URLs:
/drinks/ /drinks/data/1 /drinks/find_by_name?name=Mojito /drinks/search_by_name?name=*tini
/drinks/with_some_ingredients?ingredient_id=1&ingredient_id=2 /drinks/with_only_ingredients?ingredient_id=1
/drinks/without_ingredients?ingredient_id=1
Pretty old hat these days I guess...
-> Cool Thing β <-
Nice web backend
Skeleton: https://github.com/frioux/drinkup/blob/master/lib/DU/WebApp.pm
Guts: https://github.com/frioux/drinkup/tree/master/lib/DU/WebApp/Resource
Vaguely the inspiration for Tim's WebAPI::DBIC, (which does much more I promise)
-> Cool Thing ɣ <-
Ingredients are all automatically interchangeable
Matpath!
Too bad taxonomies are the worst
-> Cool Thing δ <-
Efficient set based searching https://github.com/frioux/drinkup/blob/master/lib/DU/Schema/ResultSet/Drink.pm#L164
Fundamentally based on:
What drinks can be made from the ingredients in a given RS
Plus a range of other ingredients
eg if I want to go to the store but only buy a few things:
what drinks can I make if I am ok with buying 1 to 3 ingredients
$drinks->ineq($inventory_rs, 1, 3) %title: µDogma %author: fREW Schmidt %date: 2015-03-19
-> µDogma: Agenda <-
Simplicity
Async linked, not sure why
-> Simplicity <-
DBIx::Class is great
Catalyst is great
ExtJS is great
But sometimes, they are all overkill
-> Simplicity <-
project runs only one DB query → DBIx::Class is overkill
project with only 5 endpoints → Catalyst is overkill
etc
-> Simplicity <-
Big frameworks can make you feel more productive
... while making you less productive
... don't use them for everything!
-> Simplicity <-
Hard to define
Examples: Proof, LNM
µServices can help here
(forking (probably) helps RAM usage)
-> Right tool for the job <-
Vanilla DBI (or maybe at least DBIx::Connector) is fine!
Small web frameworks are fine!
Again, µServices can be of benefit here
... use what works in each context
-> Async <-
async is simpler than polling
(I think?)
async can definitely add complexity
Hide it with OO!
Async requires a lot of mental reconfiguration
... but that reconfiguration more accurately matches the real world
-> Async vs Sync <-
Sync
writer → DB → while(1)
Problems:
sleep 1
Write contention
Async
writer → MQ → reader
SOLUTIONS!
Look ma, no sleep!
MQ's tend to be able to handle heavy writes better
-> Futures <-
Callbacks sub { ... sub { ... sub { ... } } }
Futures my $f = $http->do_request(...) ->then(sub { ... }) ->then(sub { ... }) ->then(sub { ... })
-> Futures 2 <-
Callbacks are the MOST BASIC and will likely need to be around forever
everything else is an abstraction of these
Futures
represent a single outstanding action from a single direction
you have to store them
There are other abstractions that barely exist in perl
Check this out for a really great overview
-> The End <-

More Related Content

What's hot

Ansible fest Presentation slides
Ansible fest Presentation slidesAnsible fest Presentation slides
Ansible fest Presentation slidesAaron Carey
 
Terraform 0.9 + good practices
Terraform 0.9 + good practicesTerraform 0.9 + good practices
Terraform 0.9 + good practicesRadek Simko
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsMike Hagedorn
 
Redis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationRedis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationrjsmelo
 
Lightweight wrapper for Hive on Amazon EMR
Lightweight wrapper for Hive on Amazon EMRLightweight wrapper for Hive on Amazon EMR
Lightweight wrapper for Hive on Amazon EMRShinji Tanaka
 
Creating Reusable Puppet Profiles
Creating Reusable Puppet ProfilesCreating Reusable Puppet Profiles
Creating Reusable Puppet ProfilesBram Vogelaar
 
Redis as a message queue
Redis as a message queueRedis as a message queue
Redis as a message queueBrandon Lamb
 
Practical Testing of Ruby Core
Practical Testing of Ruby CorePractical Testing of Ruby Core
Practical Testing of Ruby CoreHiroshi SHIBATA
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....Alessandro Cinelli (cirpo)
 
Redis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHPRedis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHPChen Huang
 
Ansible leveraging 2.0
Ansible leveraging 2.0Ansible leveraging 2.0
Ansible leveraging 2.0bcoca
 
Trading with opensource tools, two years later
Trading with opensource tools, two years laterTrading with opensource tools, two years later
Trading with opensource tools, two years laterclkao
 
Infrastructure as Code in Google Cloud
Infrastructure as Code in Google CloudInfrastructure as Code in Google Cloud
Infrastructure as Code in Google CloudRadek Simko
 
Integrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suiteIntegrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suiteBram Vogelaar
 

What's hot (20)

Ansible fest Presentation slides
Ansible fest Presentation slidesAnsible fest Presentation slides
Ansible fest Presentation slides
 
Terraform 0.9 + good practices
Terraform 0.9 + good practicesTerraform 0.9 + good practices
Terraform 0.9 + good practices
 
groovy & grails - lecture 4
groovy & grails - lecture 4groovy & grails - lecture 4
groovy & grails - lecture 4
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.js
 
JavaScript on the Desktop
JavaScript on the DesktopJavaScript on the Desktop
JavaScript on the Desktop
 
Redis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationRedis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your application
 
Sprockets
SprocketsSprockets
Sprockets
 
Lightweight wrapper for Hive on Amazon EMR
Lightweight wrapper for Hive on Amazon EMRLightweight wrapper for Hive on Amazon EMR
Lightweight wrapper for Hive on Amazon EMR
 
Creating Reusable Puppet Profiles
Creating Reusable Puppet ProfilesCreating Reusable Puppet Profiles
Creating Reusable Puppet Profiles
 
Redis as a message queue
Redis as a message queueRedis as a message queue
Redis as a message queue
 
Nginx-lua
Nginx-luaNginx-lua
Nginx-lua
 
Practical Testing of Ruby Core
Practical Testing of Ruby CorePractical Testing of Ruby Core
Practical Testing of Ruby Core
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
 
Redis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHPRedis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHP
 
Ansible leveraging 2.0
Ansible leveraging 2.0Ansible leveraging 2.0
Ansible leveraging 2.0
 
Trading with opensource tools, two years later
Trading with opensource tools, two years laterTrading with opensource tools, two years later
Trading with opensource tools, two years later
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Infrastructure as Code in Google Cloud
Infrastructure as Code in Google CloudInfrastructure as Code in Google Cloud
Infrastructure as Code in Google Cloud
 
Top Node.js Metrics to Watch
Top Node.js Metrics to WatchTop Node.js Metrics to Watch
Top Node.js Metrics to Watch
 
Integrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suiteIntegrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suite
 

Viewers also liked

Examen final cp y cpk
Examen final cp y cpkExamen final cp y cpk
Examen final cp y cpkKike Palacio
 
About Ariel Dagan
About Ariel DaganAbout Ariel Dagan
About Ariel DaganAriel Dagan
 
Present a-presentation updated by Adnan Hadi
Present a-presentation updated by Adnan Hadi Present a-presentation updated by Adnan Hadi
Present a-presentation updated by Adnan Hadi Adnan Hadi
 
Semester exam quick review
Semester exam quick review Semester exam quick review
Semester exam quick review sws4618
 
Chp 3 leadership new
Chp 3 leadership newChp 3 leadership new
Chp 3 leadership newsws4618
 
4. disiplin pelaksanaan program
4. disiplin pelaksanaan program4. disiplin pelaksanaan program
4. disiplin pelaksanaan programPuryanto SS
 
Presentación herramientas gratuitas de análisis y medición en twitter
Presentación herramientas gratuitas de análisis y medición en twitterPresentación herramientas gratuitas de análisis y medición en twitter
Presentación herramientas gratuitas de análisis y medición en twitterFrancisco Jordán
 
the best ever TPR by Adnan Hadi
the best ever TPR by Adnan Hadi the best ever TPR by Adnan Hadi
the best ever TPR by Adnan Hadi Adnan Hadi
 
5 strategies of close reading
5 strategies of close reading5 strategies of close reading
5 strategies of close readingSLaPradeTCW
 

Viewers also liked (13)

Oecd
OecdOecd
Oecd
 
Examen final cp y cpk
Examen final cp y cpkExamen final cp y cpk
Examen final cp y cpk
 
About Ariel Dagan
About Ariel DaganAbout Ariel Dagan
About Ariel Dagan
 
Present a-presentation updated by Adnan Hadi
Present a-presentation updated by Adnan Hadi Present a-presentation updated by Adnan Hadi
Present a-presentation updated by Adnan Hadi
 
Lanpro Archaeology + Heritage
Lanpro Archaeology + HeritageLanpro Archaeology + Heritage
Lanpro Archaeology + Heritage
 
Leitura na era digital
Leitura na era digitalLeitura na era digital
Leitura na era digital
 
calculo intergral
calculo intergralcalculo intergral
calculo intergral
 
Semester exam quick review
Semester exam quick review Semester exam quick review
Semester exam quick review
 
Chp 3 leadership new
Chp 3 leadership newChp 3 leadership new
Chp 3 leadership new
 
4. disiplin pelaksanaan program
4. disiplin pelaksanaan program4. disiplin pelaksanaan program
4. disiplin pelaksanaan program
 
Presentación herramientas gratuitas de análisis y medición en twitter
Presentación herramientas gratuitas de análisis y medición en twitterPresentación herramientas gratuitas de análisis y medición en twitter
Presentación herramientas gratuitas de análisis y medición en twitter
 
the best ever TPR by Adnan Hadi
the best ever TPR by Adnan Hadi the best ever TPR by Adnan Hadi
the best ever TPR by Adnan Hadi
 
5 strategies of close reading
5 strategies of close reading5 strategies of close reading
5 strategies of close reading
 

Similar to Miscelaneous Debris

CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak PROIDEA
 
How to Use the Command Line to Increase Speed of Development
How to Use the Command Line to Increase Speed of DevelopmentHow to Use the Command Line to Increase Speed of Development
How to Use the Command Line to Increase Speed of DevelopmentAcquia
 
How to admin
How to adminHow to admin
How to adminyalegko
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis OverviewLeo Lorieri
 
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuPostgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuRedis Labs
 
Aws Quick Dirty Hadoop Mapreduce Ec2 S3
Aws Quick Dirty Hadoop Mapreduce Ec2 S3Aws Quick Dirty Hadoop Mapreduce Ec2 S3
Aws Quick Dirty Hadoop Mapreduce Ec2 S3Skills Matter
 
Daniel Sikar: Hadoop MapReduce - 06/09/2010
Daniel Sikar: Hadoop MapReduce - 06/09/2010 Daniel Sikar: Hadoop MapReduce - 06/09/2010
Daniel Sikar: Hadoop MapReduce - 06/09/2010 Skills Matter
 
Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010
Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010
Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010Skills Matter
 
Naughty And Nice Bash Features
Naughty And Nice Bash FeaturesNaughty And Nice Bash Features
Naughty And Nice Bash FeaturesNati Cohen
 
Apache Flink internals
Apache Flink internalsApache Flink internals
Apache Flink internalsKostas Tzoumas
 
Performance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best PracticesPerformance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best PracticesDoris Chen
 
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation CenterDUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation CenterAndrey Kudryavtsev
 
FP - Découverte de Play Framework Scala
FP - Découverte de Play Framework ScalaFP - Découverte de Play Framework Scala
FP - Découverte de Play Framework ScalaKévin Margueritte
 
Zero to scaleable in ten minutes
Zero to scaleable in ten minutesZero to scaleable in ten minutes
Zero to scaleable in ten minutesMatt Walters
 
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...DevSecCon
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby TeamArto Artnik
 
Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4Ilya Haykinson
 

Similar to Miscelaneous Debris (20)

CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
 
Malcon2017
Malcon2017Malcon2017
Malcon2017
 
How to Use the Command Line to Increase Speed of Development
How to Use the Command Line to Increase Speed of DevelopmentHow to Use the Command Line to Increase Speed of Development
How to Use the Command Line to Increase Speed of Development
 
How to admin
How to adminHow to admin
How to admin
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
dotCloud and go
dotCloud and godotCloud and go
dotCloud and go
 
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuPostgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
 
Aws Quick Dirty Hadoop Mapreduce Ec2 S3
Aws Quick Dirty Hadoop Mapreduce Ec2 S3Aws Quick Dirty Hadoop Mapreduce Ec2 S3
Aws Quick Dirty Hadoop Mapreduce Ec2 S3
 
Daniel Sikar: Hadoop MapReduce - 06/09/2010
Daniel Sikar: Hadoop MapReduce - 06/09/2010 Daniel Sikar: Hadoop MapReduce - 06/09/2010
Daniel Sikar: Hadoop MapReduce - 06/09/2010
 
Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010
Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010
Hadoop mapreduce user_group_daniel_sikar_presentation_06.09.2010
 
Naughty And Nice Bash Features
Naughty And Nice Bash FeaturesNaughty And Nice Bash Features
Naughty And Nice Bash Features
 
Apache Flink internals
Apache Flink internalsApache Flink internals
Apache Flink internals
 
Performance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best PracticesPerformance Optimization and JavaScript Best Practices
Performance Optimization and JavaScript Best Practices
 
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation CenterDUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
 
FP - Découverte de Play Framework Scala
FP - Découverte de Play Framework ScalaFP - Découverte de Play Framework Scala
FP - Découverte de Play Framework Scala
 
Zero to scaleable in ten minutes
Zero to scaleable in ten minutesZero to scaleable in ten minutes
Zero to scaleable in ten minutes
 
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4
 
RediSearch Mumbai Meetup 2020
RediSearch Mumbai Meetup 2020RediSearch Mumbai Meetup 2020
RediSearch Mumbai Meetup 2020
 

Recently uploaded

Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)simmis5
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSSIVASHANKAR N
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escortsranjana rawat
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).pptssuser5c9d4b1
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college projectTonystark477637
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxpranjaldaimarysona
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...ranjana rawat
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSKurinjimalarL3
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxupamatechverse
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...Call Girls in Nagpur High Profile
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130Suhani Kapoor
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Christo Ananth
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINESIVASHANKAR N
 

Recently uploaded (20)

Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptx
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptx
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 

Miscelaneous Debris

  • 1. %title: Miscelaneous Debris %author: fREW Schmidt %date: 2015-03-19 -> Outline <- Docker Tools zsh, vi, awesome, smaller stuff DBIx::Class DBIx::Class::Helpers drinkup Dogma Simplicity, Async %title: µDocker %author: fREW Schmidt %date: 2015-03-19 -> Docker: Agenda <- What even is this thing Brief History In the small In the large Misc Example / Demo -> What even is this <- Process grouping Process isolation sorta like crappy virtualization docker makes this accessible and even fun -> History <- chroot jails See history here cgroups LXC Docker / LMCTFY wow lots of containers -> In the small <- Dockerfiles images layered a surprising amount of options (AUFS, OverlayFS, lvm, BTRFS, interesting info) docker {build,run,stop,rm,rmi,images,ps} awesome for out-of-the-box dev (like databases or other deps like that) haven't had much luck with own code in dev -f probably helps no silver bullet for repeatability esp when initially containerizing carton -> In the "large" <- You'll really want a registry docker push mapapp.registry.my.domain.com:5000 docker pull mapapp.registry.my.domain.com:5000 run.sh (sortav a bummer) (this is where the moving parts are)
  • 2. -> Misc <- pause / unpause - I use this to save battery sysdig - great observability tool w/ container support linking containers complicated but powerful, "safe", and composible I've only used it for network access testing ironically, this can be frustratingly hard unless you already have CI mock linking helps each needed port and volume is a moving part basically means that image is "incomplete" -> DEMOS <- Dockerfile build it! run it! sysdig it! tail logs! %title: µTools %author: fREW Schmidt %date: 2015-03-19 -> Tools <- vim zsh awesome wrappers remote stuff -> vim Core <- know your text objects (w, iw, aw, ip, i() these are actually pluggable (ie, i_, ife) quickfix (see unimpaired for fast usage) I use it daily with Fugitive gv -> vim plugins <- repeat surround fugitive commentary ultisnips (needs python) neocomplete (needs lua) ctrlp dispatch/projectionist(/haystack) synastic matchmaker unimpaired Custom textobjs: textobj-between, textobj-underscore, textobj-lastpat, textobj-entire visual-star-search -> zsh <- Cool prompt Selected options AUTO_CD AUTO_PUSHD
  • 3. NO_CASE_GLOB {PUSHD,HIST}_IGNORE{_ALL,}_DUPS APPEND_HISTORY EXTENDED_HISTORY HIST_FIND_NO_DUPS HIST_IGNORE_SPACE SHARE_HISTORY -> zsh <- Global aliases alias -g G="| grep" alias -g L="| less -F" alias -g UP="@{upstream}" alias -g PT="2>&1" alias -g PTV="2>&1 | vim -" -> awesome <- xmonad - haskell weather win+u -> wrappers <- (git)[https://github.com/frioux/dotfiles/blob/6cee48b27216945d79fc288d1fb2b8f8b0eaafa4/bin/wrap-git] (tar)[https://github.com/frioux/dotfiles/blob/6cee48b27216945d79fc288d1fb2b8f8b0eaafa4/bin/wrap-tar] (unzip)[https://github.com/frioux/dotfiles/blob/6cee48b27216945d79fc288d1fb2b8f8b0eaafa4/bin/replace-unzip] -> remote stuff <- (corn)[https://github.com/frioux/corn/blob/master/app.psgi] Docker (Linode vs OVH) gitolite %title: µDBIC %author: fREW Schmidt %date: 2015-03-19 -> DBIC <- This is the smallest of overviews I'm sorta bored of doing DBIC talks ... but feel free to ask questions afterwards! -> DBIC parts <- Schema set of tables ResultSource table (go away "actually" guy) ResultSet query Result Row -> Relationship Types <- has_many other rows have references to my PK belongs_to I have a references to some other PK has_one
  • 4. single special case of has_many might_have zero/one special case of has_many many_to_many for join tables (not a real rel) -> THAT'S ENOUGH <- -> QUESTIONS <- %title: µDBIx::Class::Helpers %author: fREW Schmidt %date: 2015-03-19 -> DBIx::Class::Helpers <- A bunch of handy little components I made for DBIC This talk will go over some of my favorites There may be more useful ones you should look at, so take a peek -> ::ResultSet::CorrelateRelationship <- $cd_rs ->correlate('tracks') ->related_resultset('plays') ->count_rs Can be used in lots of places like order_by or columns See especially later slide, ::Row::ProxyResultSetMethod -> ::ResultSet::DateMethods1 <- $rs->search(undef, { columns => { count => '*', year => $rs->dt_SQL_pluck({ -ident => '.start' }, 'year'), month => $rs->dt_SQL_pluck({ -ident => '.start' }, 'month'), }, group_by => [ $rs->dt_SQL_pluck({ -ident => '.start' }, 'year'), $rs->dt_SQL_pluck({ -ident => '.start' }, 'month'), ], }); Simplifies date math for your brain (before/after vs </>) Converts DT objects for your DB Extracts Date Parts Adds dates together No subtraction yet (super varied, dubious usefulness) -> ::ResultSet::IgnoreWantarray <- my @values = paginate($rs->search(...)) Fixes that bug -> ::ResultSet::SearchOr <- sub not_passed ($self) { $self->search_or([$self->failed, $self->untested]) } Sortav a ghetto union
  • 5. -> ::ResultSet::SetOperations <- $rs->union($rs2) ->intersect($rs3) ->except($rs4) Not a ghetto union The weirdest feature not to be in core -> DBIx::Class::Candy <- package MyApp::Schema::Result::Artist; use DBIx::Class::Candy -autotable => v1; primary_column id => { data_type => 'int', is_auto_increment => 1, }; column name => { data_type => 'varchar', size => 25, is_nullable => 1, }; has_many albums => 'A::Schema::Result::Album', 'artist_id'; 1; Great for slides! (All the following slides assume it) -> ::Row::OnColumnChange <- before_column_change amount => { method => 'bank_transfer', txn_wrap => 1, }; sub bank_transfer ($self, $old, $new) { my $delta = abs($old - $new); if ($old < $new) { Bank->subtract($delta) } else { Bank->add($delta) } } Just a really useful generic helper ~~ a trigger -> ::Row::ProxyResultSet{Method,Update} <- RS Method sub with_friend_count { shift->search(undef, { '+columns' => { friend_count => $self->correlate('friends') ->count_rs ->as_query }, }) } In Row proxy_resultset_method 'friend_count';
  • 6. Access already selected data Or fetch if it wasn't, and cache it! (Considering making this warn) -> QUESTIONS? <- (you can ask about DBIx::Class::DeploymentHandler if you want) %title: µdrinkup %author: fREW Schmidt %date: 2015-03- 19 -> drinkup <- Just a thing I made a while ago that's fun to talk about Was recently asked about cool stuff I'd made Thankful that one of those things is OSS List of cool things in no particular order -> Cool Thing É‘ <- Cute URLs: /drinks/ /drinks/data/1 /drinks/find_by_name?name=Mojito /drinks/search_by_name?name=*tini /drinks/with_some_ingredients?ingredient_id=1&ingredient_id=2 /drinks/with_only_ingredients?ingredient_id=1 /drinks/without_ingredients?ingredient_id=1 Pretty old hat these days I guess... -> Cool Thing β <- Nice web backend Skeleton: https://github.com/frioux/drinkup/blob/master/lib/DU/WebApp.pm Guts: https://github.com/frioux/drinkup/tree/master/lib/DU/WebApp/Resource Vaguely the inspiration for Tim's WebAPI::DBIC, (which does much more I promise) -> Cool Thing É£ <- Ingredients are all automatically interchangeable Matpath! Too bad taxonomies are the worst -> Cool Thing δ <- Efficient set based searching https://github.com/frioux/drinkup/blob/master/lib/DU/Schema/ResultSet/Drink.pm#L164 Fundamentally based on: What drinks can be made from the ingredients in a given RS Plus a range of other ingredients eg if I want to go to the store but only buy a few things: what drinks can I make if I am ok with buying 1 to 3 ingredients $drinks->ineq($inventory_rs, 1, 3) %title: µDogma %author: fREW Schmidt %date: 2015-03-19 -> µDogma: Agenda <- Simplicity Async linked, not sure why -> Simplicity <- DBIx::Class is great
  • 7. Catalyst is great ExtJS is great But sometimes, they are all overkill -> Simplicity <- project runs only one DB query → DBIx::Class is overkill project with only 5 endpoints → Catalyst is overkill etc -> Simplicity <- Big frameworks can make you feel more productive ... while making you less productive ... don't use them for everything! -> Simplicity <- Hard to define Examples: Proof, LNM µServices can help here (forking (probably) helps RAM usage) -> Right tool for the job <- Vanilla DBI (or maybe at least DBIx::Connector) is fine! Small web frameworks are fine! Again, µServices can be of benefit here ... use what works in each context -> Async <- async is simpler than polling (I think?) async can definitely add complexity Hide it with OO! Async requires a lot of mental reconfiguration ... but that reconfiguration more accurately matches the real world -> Async vs Sync <- Sync writer → DB → while(1) Problems: sleep 1 Write contention Async writer → MQ → reader SOLUTIONS! Look ma, no sleep! MQ's tend to be able to handle heavy writes better
  • 8. -> Futures <- Callbacks sub { ... sub { ... sub { ... } } } Futures my $f = $http->do_request(...) ->then(sub { ... }) ->then(sub { ... }) ->then(sub { ... }) -> Futures 2 <- Callbacks are the MOST BASIC and will likely need to be around forever everything else is an abstraction of these Futures represent a single outstanding action from a single direction you have to store them There are other abstractions that barely exist in perl Check this out for a really great overview -> The End <-