thank y'all for coming your in mate
Drupal 7 development modern and fun are
fun and modern I don't know I switch the
words up back and forth you know and our
associative so there we go a little bit
about myself if you haven't noticed me
from the mario mario talk last night or
see me on any other camp i go by the
alias general redneck i get up here and
talk technical talks and my overalls
because us Hillbillies and rednecks
don't know much but i'm just a good old
country boy just happen to know a little
bit about computers and i'm also the
seniors senior support technical lead
over at four kitchens it's making it
four kitchens here's what we do we build
websites that depend on large scale
unconventional content and we tried to
help you figure out what you need to be
able to make that work we make content
go specifically in the support
department i help you do that on a day
to day basis your drupal seven site your
Drupal eight site and your WordPress
sites come talk to me if you need some
help doing some support work that's what
I do
so a little bit that's a little bit
about me let's talk about y'all what
y'all doing here no I know that it's
kind of abrupt what brings you to this
place what are you looking to find out
in this talk I mean you have life oh man
I don't know if I can help you there I
can give you my professional opinion on
what the meaning of life is but you
might not like it yes got a majority of
our sites are dual seven states still
most of them were put up without proper
planning without a proper organization
what is the hope of retroactive will be
bringing some organization to bringing
in some composure and things like that
all right so we're looking for hope hope
with bringing in some structure using
composure and some object-oriented
programming so I was kind of half I was
hoping that that was what was going to
bring you here so this is what we're
going to talk about how many of y'all
have used X autoload before or even know
what it is okay that's cool I'll tell
you all about it today exhaustively even
just tell me when to shut up because
it's a fun one I'm really passionate
about it I also want to talk to you
about third party PHP libraries because
in Drupal 7 this is really hard in
almost every instance of it requires
someone to wrap a module around it and
I'm not particularly fond of that idea
and then we'll talk a little bit about
composure how many of y'all use
composure for your day-to-day work is
that all on Drupal 8 sites or PHP in
general
you know I've been using composer for
drupal seven for five years now ever
even before web flow put out the
official Drupal composer Drupal project
out there the reason why I want to talk
about this is on I want us to try and
keep our skills fresh I want to keep
keep on modern and I want to keep them
compatible with the frameworks that are
coming out I say coming out came out
like so the drupal's got that lag behind
a little bit we're starting to get up to
date with object-oriented programming so
it helps you it helps me kind of get our
skills like in line with that and it
helps you if you're looking for another
job in the PHP world helps you
transition over to that as well helps
you make bigger better design choices
also want to make our code more reusable
for more situations who says it has to
be a Drupal module it could be a PHP
library that's put on - I don't know a
laravel site just think about that I
also want to be able to use third-party
libraries in my code it makes my life
easier someone's already built that
wheel and I also want to push the
boundaries of my you know patterns and
designs so that's why I do this I find
that kind of stuff fun I don't know
about y'all let's talk about autoload so
I got kind of ballsy with this one and I
made this entire presentation a live
demo so we'll see how this all goes down
I'm pretty sure that's you'll that you
won't be disappointed so we were talking
about Lando at the last at the session
before this I use it really have lived
for my development
because it makes things easy but let's
talk about ex autoload for a minute ex
autoload is a module that you can go
download from Dido
the whole point of it is and it seems
like really big complex code but it
really does one thing if a while it adds
Auto loading using PSR standards PSR 0
or PSR 4 just like your composer
projects do just like your Blake does
this way you can now build your library
in object-oriented code without having
to go and you know say include this file
include that file or listen out a whole
bunch of files or or jumbling all your
classes up in there
in a single file it lets you use your
normal object-oriented autoloading
capabilities and it does it and it
doesn't independently under using
composer you can put this on your site
right now and it'll just it'll give you
that ability and you can start start
injecting some code into your site that
way let's let's go take a little example
real quick or look at an example real
quick so this is a modular rope you can
hackle me about it if you want to if
there's not a whole lot of functionality
in this module the whole idea is I want
to show you an example in a really easy
way consumable way of how we can use
object-oriented programming within our
modules so this this this module is
pretty standard module stuff I took and
I abstracted out the block
functionalities with you know block info
block view and I made it to where I
could use a class to import the
implement a block now I know like ctools
has something very similar and I just
wanted I wanted to recreate the wheel a
little bit here just to show you that it
could be done and it can be done pretty
easily so it's not the best design
pattern in the world I did it really
what's the word in a way that we in a
way to be really quick prototype that's
the word I was looking for in a
prototype type way so for instance like
whenever I created my my registry here
it's simply just an array it's a ray of
classes that I can use to define my
blocks we could have done this something
done something a little bit more fancy
here to go look for the blocks but this
is all module stuff to support my
object-oriented code which is all over
here in the source directory which you
can see right here and it's just like
your Drupal 8 mod just like your dribble
like code you have a namespace Drupal
module name
you add your classes just like this and
then so in my case I'm using a standard
hierarchical structure of code I created
my base class when my interfaces for XE
Block XE block is really simple all it
does is it it like I said abstracted out
those particular functionalities of the
block get info get machine name get
subject and render for a block and then
I added some base functionality so you
know just like your standard Drupal 8
practices for developing then I added
implementation that so this is example
so now let's go back to my module really
quick and let's take a look see what
this does this registry says this is one
of the blocks that I want to import into
my site
like I want Drupal to be aware that this
block exists so I told it look for this
look for this class now I did in to form
the screen because like I said I
prototype in this thing but we can use
our classes just like you do in your
Drupal 8 site this is PHP we're talking
PHP that's the whole whole point here so
I do that and now the now the fun begins
that all I've got to do now is type a
minute
let me see exude example enable do my
job okay so what happened there is I he
has a dependency on X autoload so X
autoload was was enabled and my X
autoload example module was enabled now
I can go and I know this is the end
result and it's not super super
elaborate it's going to add a dum-dum
block so we'll be able to go up there
and see
and I haven't set up my my URL there see
if I can not you see using this drone
and me momento so I'm gonna go in here
I'm gonna go to my structure go to my
blocks and then I can find my dump ton
block right here and let's put in the
content now like I said this is this was
all for the sake to show you that I can
do object-oriented code so now I've got
my dummy block and it says what it done
done you can see that all over here in
my class of XE block base
so object or any cut any questions so
far okay we're good I'm gonna move I'm
gonna move on a little bit further so we
talked about ex auto loan ex auto loan
comes with some pretty neat features
around libraries who uses libraries
module okay if you haven't gotten into
the compose you know gotten onto the
composer bandwagon for Drupal 7 it's
okay you can still use your drush make
work flowed a whole bit to download your
libraries into your libraries folder and
stuff like that the next thing I want to
talk about in that regard is actually
third-party libraries now I took the
liberty to get a really really simple
library it's called the Laurel epsilen
generator and that's all it does it
generates lorem ipsum test text this is
just to show you an example of i was
able to go out to interwebs grab myself
for the library put it into my site and
then use it in my object or you can see
that over here my libraries folder i
have let me see yeah this is me a second
I gotta
I'm trying to figure out where I'm at
there it is okay so Laura the PHP lorem
ipsum library is right here my sites all
libraries and you see I just downloaded
it verbatim now whenever you use in
exile alone without composer you have to
set up the library's module to figure
out where your code is X on a load then
allows you to use namespaces within that
library without the use of composer so
for instance in my case I wanted to use
the Laura epsilen so I'm going to go
over here to my other module that I
built to demonstrate this which is
called a library example block
so it adds a little parameter to the
library's info hook it's called ex
autoload and I can tell it how to grab
the information to do ex auto loads Auto
loading stuff for lack of better words
English is hard program is easier so in
this case I said hey using your little
adapter function thing you there go look
at the composer file that's inside the
library and use that class information
that way I don't have to go and redefine
it you can also do some other things
like if we go look at ex auto loads API
documentation really quick you can do
all sorts of ways of loading libraries
and I'll show you that here
so free for example you can load it
direct you don't have to use libraries
at all you can use straight up exile the
load if you want to that's what they're
showing here use exile load to load auto
load this this namespace okay you can
tell it to use the compose the compose
or tell it where a composer directory is
but let's go look at the library's
information really quick here's one way
they do it they said hey this ribbon
crowd library is going to is going to be
at this at this at this place which is
the library's Reuben crap folder and
it's gonna load this name space out of
the source directory or you can tell it
to use the composer JSON which is what I
did now let's go take a look at the JSON
file that's within this library time
user which the library's module is
throwing me off because it's also called
libraries nice okay so let's take it so
I'm not using composer I know that's
kind of confusing I'm using the composer
JSON to define auto name spacing right
because in composer JSON they say hey
look over here to auto load this thing
we're gonna use this name space if psr-4
so why do I want to go back and redefine
that when the libraries already giving
me that information you're going to
probably commit this button this anyway
at least in your artifact so it can go
pull it out so we did that okay and all
that to be said I have now set libraries
up so that it can load this library an
ex auto load will do the auto loading
whenever I call that class name does
that make sense everybody
okay cool I get a little long-winded
sometimes you got to tell me and get to
the point so on down here so I did the
exact same things I did an altar here
because I want to add this block into it
into my registry that I prototype tout
for us earlier and I add a little helper
function here now long story short I
created this loading function so that I
can use this use this module if I have
that library loaded via composer or any
other means and if it's not loaded
already let's go ahead and load it using
the libraries module this way depending
on how someone sets up their site they
might not have composer they might I
will be sure to load this class
regardless that's the whole point of
that so let's go over here and let's go
look let's go look and see what this
library example block looks like oh it
does eh you know info gives me Elora met
some block machine name you seen this
before in my in my interface that I
built earlier standard object-oriented
programming then I said new oral aural
epsilen which I used the you statement
up here Auto loading in action and then
I said give me a paragraph so the whole
point of that is now I can go ahead and
do a
[Music]
Nando thrush enabled libraries and let
me see what's this one called library
example
i misspelled something walk thank you
that's a good way to make sure people
are hey look I can't time dyslexic or
something
it's an example example all right cool
so now the the whole point is is now I
can go in here and do this
do the same thing refresh this go to
structure go to blocks go down here to
my blocks and you see the lorem ipsum
block let's go ahead and put it in our
content just so you can see now I know
this is a very lame example because I
just recreated the will of how to build
a block but it's just to show you that
object oriented is possible now and now
I can take this library that I built
here and abstract it out to do other
things like you on other systems
theoretically you could take your Drupal
Drupal 7 sites
easier now given that there's a lot of a
lot like the plug-in system and stuff
you have to deal with whenever your
important code back however the benefits
of having like structured code between
Drupal 7 Drupal 8 modules is phenomenal
because you can literally copy and paste
or you could potentially do like a
cherry pick out of a commit or something
of that nature
it makes maintenance so much easier and
it lets you do more of the fun stuff
right you've lowered your maintenance
costs so now you can go do more R&D
stuff and you can go through do more
object-oriented code etc so that's to
show you I've done all this without
composer so far now the fun part is
let's add composer to it your full 7
side how many people have actually done
that before
okay so this is a new one probably for
you do do any of y'all use the composer
the composer Drupal project template for
Drupal 8 at all or do y'all download
your Drupal 8 core and then use the
composer file that's within the chord
that you you download like out of the
zip okay yeah yeah I'm just I'm just
trying to try and get a feel of how yeah
what your workflows are so here's here's
the thing
so you can go over here to see composer
I should have had this one hurry up but
you can go to Drupal composer Drupal
project
here's your instructions on how to make
a fully composed composer based project
and what it does for you is it allows
you to pull into the pendants ease
independent of the dependencies that
come with the zip file and your
composure composure JSON there and it
also abstracts everything out side of
the web root because one of the biggest
challenges is in Drupal website is
security if you have all your libraries
and things outside of the Drupal space
outside in a web root it's a lot more
secure you don't have people you won't
have people in there able to to mess
with or look at your code I know
that there's there's things to prevent
that namely your HD access files and so
on so forth but if you don't have in the
web route at all there's nothing that
you need to protect that's my little
spiel for that really quick it also
allows you to create a source and an
artifact build do you all know what I'm
talking about there that's where a
source build is hey I'm a developer I
changed this one requirement and then I
hit commit I put it in a PR and I have
one line of change and it says I include
I created a new I think I installed a
new library as a developer I don't care
what kind of code is in that library I
don't want to commit all that to my
project so as a code reviewer hey good
job you installed or you upgraded that
library that's all the review I've got
to do instead of weeding through how
many of you have had to weed through
views molecule to try to find that one
file someone updated you know they
updated views at the same time that they
created a feature and then you have to
go find that feature code and in amongst
of module upgrades and then github says
oh you have over 3,000 changes I'm not
going to show you what these changes
look like you don't have that with a
source and artifact build is what I'm
getting at
so it literally if I was to go look at
go commit what I have now I would with
the composer project I would only get my
custom modules
and a little bit of structure and the
scaffolding files so scaffolding
scaffolding files are your index dot PHP
your robots.txt those things so that
would be committed to my project but
like core you wouldn't see any of core
you won't see any other contributed
modules and that would be my whole
project it's really easy to do - all you
have to do is come on wait well you
don't know how to set up a Drupal 8 site
so let's go set up a Drupal 7 site all
we got to do is do a composer create and
then we have our site our scaffolding
then from there we go over here to
composure dot JSON I start adding my
requirements
wrong one
all right so most of these composure
requirements come in ahead of time with
the project
I added libraries
I added X autoload and I added my
third-party library which was the Laura
Itzel generator so this is a Drupal 7
site the difference is if you go to the
packages you put seven here instead of
eight you get a couple you go a little
bit more configuration down here which
comes with with the project so you don't
you normally don't have to touch that
and you also there's a there's a little
bit of so one of the biggest challenges
with setting up a Drupal 7 site with
composer is that you have all of the
directories inside of Drupal so like in
Drupal 8 they've mitigated all that by
taking core and setting it in the core
directory right in Drupal 7 Drupal is
spread out across the root so you don't
have like a core so what we have to do
is we have to do some do some we have to
set up our installers and we have to
preserve some paths which is trying to
find that one real quick the path up
there is preserve your sites so we have
to we have to preserve our sites folder
and that's it now at this point once you
did that composer create and you brought
that down I mean like I said it's it's
literally one command then you start
doing your requires then you can start
doing your then you start set up your
lando all that jazz and you get a
project that looks like this over here
it's your standard Drupal site and I can
show it to you and
and a file manager so it may be a little
bit easier to see let's see let's go to
my workspace and let's go down to my mid
camp and see this is this is my project
web this is my gerbil pretty simple
alright so all that long spill to say
okay I've loaded my my library up via
composer there's one little problem
though
composers not autoloading because we got
to say include auto load up PHP ex auto
loop doesn't do that for us remember I
was telling you about how you can use it
independently your composure well
there's a neat little module that comes
with this project called compose their
auto loader it's already built in all
you got to do is enable it so we go over
here and we do come pope we do a brush
and oat rush enable composer auto loader
okay now I'm going to I'm going to
disable libraries because I don't need
it anymore I loaded my library and
composer so why use it so I do Lando
brush
I always forget the shortcut for that
one yes D is okay and so I don't disable
very often so yeah so let we've disabled
it and now in theory I'm gonna go ahead
and do a CC all just
and let's go to the website let's
refresh this page look we still got
lorem ipsum text that's using composer
so all that said there's a bunch of
benefits to using composer um in
particular you get your patches and all
that jazz for free just like you do in
Drupal 8 use the the patches down in
your composer file they're documented it
applies when you do a composer like
composer update etc yeah and you you can
use anyone heard of the composer the
composer merge composer plug-in before
the whole point that that is to take a
Drupal core uses it and it takes another
composer doc JSON and pulls it into your
main one it's like include this composer
about JSON and what you use that for is
your custom modules so you're not
committing your custom modules to their
own projects let's let's commit them to
this project which is our Drupal site
then define all of my requirements for
that module within that module because
why do we want to put it up on the site
level you can if you want to say like
ease of use and not high dome or
whatever but you can also put them with
the module and that way you don't you
can manage all that code within chunks
and so if you remove the module you
remove that dependency and therefore it
cleans up cruft you don't have to go
through all your libraries to figure out
Oh
which ones did this one depend on and
clean it up just just a thought um yeah
so are there any questions about
composer like this did it seem like I
oversimplified it too much do you feel
confident you'd be able to go start your
own Drupal 7 site
yeah and that's the point
yeah I don't want to try it now I looked
into like the like how to do like
patches and stuff like you would do and
rush me and it sounded like there was
some kind of limitations with that
capability compared to dress make that
this was probably about a year ago or so
that I looked into it mm-hm
not as far as I know yeah not as hard to
know that there's I don't know of any
limitations to patching ability as of
now that that composure patches plugins
you know ads of course it does remove
the project every time you do an upgrade
it removes the whole project so say
we're patching the views module it
removes the whole views module because
it's probably patched downloads the new
one or the whichever one that you told
it to and then it patches it so you have
that now what we normally do when we're
using Pantheon we use like built tools
and and they're built out a circle CI
process to do what they call a what I
call a artifact commit they call it in
the in the scripts building assets okay
so we all know that when you're working
on Pantheon or you're working on aqua
you have to commit everything otherwise
it's not there right so like I have to
go and commit all the modules etc the
way built way built total tools workflow
works is you do that like on your CI and
it goes and changes part of your get
ignore so that now you're committing all
your modules of stuff so when I'm
reviewing my code the code is a source
it only has like custom modules my
composer file and so my tool right
whenever we do an artifact commit it
then goes head runs all that composure
install all that jazz and then does a
force commit of with all the modules as
a separate commit so what happens there
is they push that up to the pen T on and
then you have all that you can roll back
to the source commit or whatever and the
orphans a bunch of commits up there but
that's you know it's okay it's a it's a
way to maintain your history so to speak
and I can I could show you something
like that pretty easily let me let me
think what is a good one that I have
that's that way
I like get cracking because it's a
really good visualization under get
history and you'll be able to see that
here let me get a let me get one of our
Drupal 7 sites up
I'm drawing a blank for a quick I want
and that's what happens whenever I do
something on the fly like this so I'm
gonna go into one of our clients really
quick but I mean they they're not
they're okay with with me sharing this
see so this should show you what I'm
talking about as far you see all these
bender Drogba commits right here these
are what I'm talking about
so if you were to look at the commit
it's literally it be something like okay
what's this one this one's not so much
that way because we're using an artifact
field but it would be all the modules
like the whole contributes folder the
vendor folder everything let go in that
commit then it'd be that for every
single one of these now these are multi
dev commits like we push up on each PR
we push up we run the build tools
through our CI which pushes up a branch
to Pantheon which then spins up a multi
dev so that we can test it on the fly
it's really nice because then one of us
don't have to manually do that that's
less work we have to do but using
composer a composer works really well in
conjunction with all this as one get
because you tell you tell your CI to do
a composer install you commit all that
push it up the Pantheon hey you've got a
site that you can test
I know it's a it's a lot to take in so
if you want to talk about it in
particular doll I do DevOps really
heavily I specialize in it in fact and I
find it lots of fun so we can talk about
this offline if we want to and talk a
little bit more about composure if you
want to so where do we go with that at
this point I'm pretty much out of
content we've talked about composure we
talked about adding third-party
libraries to our code and we've talked
about object-oriented object-oriented
coding and Drupal 7 I find out lots of
fun I find that it makes my day the day
more exciting because I get to flex
those muscles that I don't normally get
to do on the triple set aside because
I'm a Support Engineer I hope that this
helped you all in the same capacity as
it does me and I hope that it makes any
sites that you support more of a joy
than going through the old functional
programming do y'all have any other
questions we've got we've still got a
little bit of time
have you converted Drupal seven sites
and added the composer workflow and then
use that for module updates and so so
the question is have I taken an existing
site and converted it to composer yes
now there's a challenge here we have to
talk about and that's how do you get all
these modules that these people have
amassed over the years into a composer
file zing by know that off the top of
their head well I mean that the very
manual way is is go in there and do
uh-oh
come you know droop you know composer
require drupal slash this name that name
going through the modules folder doing
it manually it's that's really annoying
a tool that's really handy for it
there's two of them I can't remember
what the second one's called but the
first one is actually using just make to
do it so just make has a really handy
command and that's you know dress make
but it's also got a flag that you can
specify the format that flag is ein I
file old-school yam will file that's
better and composer file you can get
composer dot JSON straight out dress
made caveat it doesn't make it pretty
and you have to go and edit it what it's
really good for is it takes the bulk of
the work out of what you're doing though
you can go copy and paste all of the
requirements that gave you because it's
it's gonna go in there and make one
that's like Drupal module name and it's
going to assign it the wrong version of
seven dot something dot something
in our pack in the old packages before
you know drew ddoddo took it over
we had one packages it contained Drupal
seven and Drupal eight modules so the
way you specified your module versions
was 7.10 or you know you took you just
took out the - you know dot X - yes so
it was a Drupal 7 module if it was seven
dot something if the Drupal eight module
says eight dot something since they
separated out the two sets of modules
and - two separate packages now you just
type in everything except for the seven
you know like seven X or eight dot X all
right so whenever I want to required
let's say fuse 3.0 I just say fuse 3.0
instead of seven 3.0 but just make was
made on the old workflow so it puts in
those numbers so you have to go through
and do some cleanup another thing it
does is it includes your custom modules
so you have to go take those out after
you do that little bit of work plaster
it into your into the composer project
template go to town it's that simple I
say it's that simple yeah a little bit
bootleg work but it's not me going in
there saying oh let's see where are they
where did they put the views module is
that in sites default oh really
Oh where's they put it over there it's
in the custom folder you know that kind
of thing you know
and then also the freebie you get out of
this so we come with a composer a
composer build and everything's
organized
all your contributed modules go into the
contribs alder all of your custom
modules go wherever you want put on
technically but I put them in the custom
folder really nice
yes the directories from all the
computer models yes so let's let's talk
about that really quick Pantheon has
their very own composer project okay
they've taken the Drupal project version
you know the default one and they've
modified it so we can go over here and
go to Drupal composer handsy on there it
is
get over there so this is yeah one
second
thinking about it this is drop seven
what composer files so this this is what
it's including and the composer but the
Drupal 7 version of it
there it is here you go
same same process you do a composer
create project you get the little bit
specialized composer JSON one of the
biggest things are that's different here
is that instead of including Drupal
Drupal version 7 you're including drops
it is so there's this guy right here
that's the that's the big difference and
then over here if you look in your
looking our scripts we have our build
assets which is prepare for pantheon and
composer install and all that jazz just
like you're used to
anything else cool well I hope y'all
what's that you know in duple seventh
we're still using a lot of features
uh-huh is that can you play features in
yeah why not
yeah it's your custom code it's just
like just like any other custom module
yeah throw it over there features is
part of your deployed process at that
point yeah and you can do that how many
people there's a plugin Pantheon pretty
hard right now how many people use
Quicksilver you know Quicksilver is
really perfect for deployment processes
so what you can do is you can use their
hook system to say hey when I update
code go around some dress commands like
just CCO and features reverb and DB up
that kind of stuff and so what happens
is you get this for free I update my
code manually through the interface it
runs the deployment process I put
something automated through CDI it runs
the employment process and then I don't
ever have to go worry about telling
Circle CI oh yeah make sure you do the
thing where you dress DC y'all on the
multi dev even terminus and all that
jazz or when I push to production I
don't have to say oh yeah I'm I push
code up now I have to go to my local
machine and say terminus drudge CCO all
that jazz use Quicksilver do yourself a
favor
so if you wouldn't have like a circle CI
process you would just push to your
repository then Quicksilver Quicksilver
would take care push it version to do
all those steps and push it version
Pantheon well it Quicksilver it would
already be on Pantheon at that point and
Quicksilver would just take care of the
rest of the deployment process stuff
like yeah yes sir it's the it's the way
you get your you know little slack
messages whenever you do a deployment
it's the way you can get get your oh I'm
going drawing the blank not testing but
I'm thinking about what's the system we
go into new relic that's it
he that flag your new relic with
releases all that yes they have a whole
library thing now I to go on the other
side of fence aqua has something really
similar it's called cloud hooks use that
for your deployment process as well that
way anytime you do any deployments go
there this is this is advice for free
outside of the talk I'm sorry but you
know that's a yeah that's a it's
something that's a really helpful that
way you don't have to go and and
remember to do that things and it's
repeatable
repository and I'd say another kind of
independent hosting where you'd have
some folks that would do some process
like that I think you'd have to rely on
your continuous integration at that
point the question was is are there any
independent like for independent or
custom hosting is there any services
like Quicksilver hooks or or Quicksilver
or Cloud hooks for aqua and the answer
to that would literally be Jenkins or
Travis or Circle CI at that point
alright guys I know that I probably went
on the Ameren for a little while
I really appreciate y'all you know
coming up here and uh let me yet let me
do that um if you would please provide
feedback for the talk I it doesn't it
helps me a lot
it also helps the camera so get on there
if you want to talk to me further about
continuous integration or a composer
workflow or you wanna be s over a beer
hit me up on Twitter or go over there to
the drupal.org and send me a message
thank y'all very much
[Applause]
Captions made possible by ClarityPartners.com. Chicago area Drupal consultants