00:00:13.519
yeah so Marco is making uh developer tooling feel easy let me let me see if I
00:00:21.680
can continue on the same note I'm not sure um yeah thank uh everyone please uh
00:00:29.000
come say hi uh after the talk if you haven't yet uh but first I want to give a shout
00:00:35.600
out to my colleagues fat who is supposed to be here today and could make it uh because of some visas documents and he
00:00:43.120
was really hoping to be here and I hope he can make it next year so yeah and um
00:00:49.719
you'll have a chance to meet him um but um it's a nice weather uh
00:00:56.879
folks um I'm kind of surprised uh pleasantly surprised about this
00:01:03.000
weather for October but uh I had a different feeling back in San Francisco
00:01:08.840
where I'm now based uh the same weather there uh feels very very
00:01:16.360
strange to be honest I went to the beach and the sand was warm it's not supposed to be warm at
00:01:24.000
all um uh but you know I just checked it's going to be it's going to be back to normal tomorrow
00:01:31.560
so back to 60 70 but uh folks before we begin let's do
00:01:37.040
this um I hope it works I'm not sure um
00:01:42.119
so there's this uh cure code if you can try using it and think
00:01:47.360
about this logo if you recognize it but don't don't don't don't uh enter
00:01:53.119
anything yet so just open the page fill out the option and don't send it yet I
00:01:59.399
hope it works let me I don't know uh so we're using so this is the logo again
00:02:05.560
we're trying to guess what it means we're using this website po everyware uh
00:02:10.759
it's a very old y combinator company uh built with
00:02:17.760
rails and powered by something called any cable uh that we're going to be talking
00:02:24.239
about today so let's see all right so now you can
00:02:29.959
send your respons to nice hash rocket
00:02:37.360
wow um so what's going on here we're all connecting to
00:02:42.519
a some server um any cable server right now yeah it's interesting so there's no
00:02:49.239
right oh there is a right right answer I can
00:02:55.000
see um all right
00:03:00.519
okay that's fun Transformers Transformers by the way it it has something right it's like some
00:03:08.560
robots um all right what do you think the right answer
00:03:14.720
is um yeah I I asked my Twitter and very few people guessed right this is the
00:03:20.840
logo of web circuits yeah that's that's web
00:03:26.519
sucket uh so web sucket is uh the main difference between web sockets and HTTP
00:03:32.000
is just that there's request response and then the connection stays open it's
00:03:37.319
not closed and yes connection can be uh kind of shut down on either side of this
00:03:43.560
socket two-way socket but essentially it stays open it stays kind of waiting for
00:03:49.439
what's more yeah what's more uh is you know you you guys have to share and
00:03:56.280
that's why web sockets are perfect for real time because you get updates you get messages
00:04:02.519
as soon as they are uh as soon as you can as soon as they're sent uh and web
00:04:09.360
circuits were introduced in 2011 and if we look at the kind of evolution of
00:04:14.560
different real time tools uh we see something like a Cambrian explosion
00:04:20.400
after web ciruits were introduced and there's a bunch of stuff here and uh
00:04:26.360
we're going to talk about um a few a few of those basically this one and
00:04:34.080
this is um this is a kind of cool story to share for me because it's uh something that
00:04:42.320
I've been going through right this was a big part of my life the last few years uh and our like Journey with Vladimir
00:04:51.639
demen W demen so we met at evil Martian back in
00:04:57.199
2017 he was a vant engineer I joined as a account manager and today he's the head of
00:05:04.880
backend I'm the CEO and I hope you uh
00:05:10.440
know something about the company uh maybe you've used some of our open source uh let let me know if she if you
00:05:18.319
did um some some hands yeah oh nice nice
00:05:23.520
nice all right um thanks thanks guys um so we have yeah we're building a lot of
00:05:28.880
uh a lot of open source and our mission is to support uh startups growing companies building with rails um not
00:05:36.600
just rails but uh this is our big focus and uh yeah if you have problems uh hard
00:05:43.560
problems that we we'd love to solve them help you solve
00:05:48.600
them so this story actually begins in 2015 when ra introduced um kind of first
00:05:55.720
party support for web sockets um as you all know it's called action cable and it was one of the first
00:06:03.319
uh Frameworks that introduced this of course Phoenix was probably the first
00:06:08.720
but this is a kind of realtime first framework and now you could ra said look
00:06:15.280
build realtime features with rails the problem was in 2015 Ruby was kind of not the
00:06:24.599
best that yeah uh well and it was not not Nob
00:06:30.080
brainer W introduced U basically the same thing written in go uh it's any
00:06:37.759
cable originally was um kind of very very similar to action cable but written in
00:06:43.400
go and uh any cable used of course the same protocol was a drop- in replacement
00:06:48.639
was open source MIT licensed and uh also used
00:06:54.319
radus um don't pay too much attention to this it's maybe a little bit too
00:07:00.240
compated just remember this when you running um originally the story was
00:07:06.440
you're running rails application and then you run three additional components
00:07:11.479
redis usually you had redis anyways with rails uh but you also run web circuit uh
00:07:17.919
server go goang server and then you also run something called ra rails in our PC
00:07:24.360
mode let's say so this was a special instance of rails used by any key
00:07:31.440
um so it was a bit complicated but it had 10 times less memory
00:07:37.000
usage and it was much more uh truly real time at scale so when you had like a few
00:07:44.560
thousand connections action cable was already not performing like on subse um
00:07:51.479
uh latency and any cable kept you know subsequent
00:07:56.879
latency it AG pry well yeah kind of action Cable says build realtime
00:08:01.960
features chats notifications all this stuff with um with you inside your own
00:08:08.039
framework and any cable said well and scale them right but something was missing
00:08:14.800
apparently uh apparently Co was missing uh for some reason because what
00:08:21.159
happened is uh after the pandemic it's just an illustration but this company
00:08:26.520
Tito that many of you know because many Tech Conference uh send tickets through Tita it's a
00:08:33.719
including this one so uh Tia is a rails company very respected application of
00:08:40.839
course when the pandemic started and all the well offline events were
00:08:46.440
cancelled they had to think of kind of something else and they invented a
00:08:51.880
virtual events platform veto uh t v and uh V was a
00:09:00.920
basically a EV events platform that was that had a video stream but then a bunch
00:09:07.600
of real time updates realtime content updates notifications and chat so this was all real time and was originally
00:09:14.240
using action cable and of course they had to scale it they reached out for
00:09:19.560
help setting up any cable and this is what we've saw happening with many many
00:09:25.800
other tools that reached for collaboration in uh kind of digital products during
00:09:33.560
pandemic I'm sorry um and yeah so what we were doing we were kind of collecting feedback on
00:09:40.480
GitHub we were Consulting u a bunch of different very different uh companies
00:09:47.480
reached out for Consulting around any cable uh idees uh virtual events platform kind of
00:09:55.120
GPS navigation product uh and you add Tech an add tech
00:10:00.920
product different different things and finally well this is why we saw okay
00:10:07.360
there's demand for any cable and we we released version 1.0 we also learned something about uh
00:10:14.360
scaling web sockets which we kind of didn't originally uh expect to learn we
00:10:20.720
didn't know about that uh how many of you recognize the picture on the
00:10:26.959
right okay okay um don't tell anybody uh let's pretend
00:10:33.680
we don't right um well it's a metaphor um that I'm I'm
00:10:41.399
using to describe this this situation you remember uh when you had a phone line and you
00:10:48.240
had uh like you you're making like normal short normal phone call it's like
00:10:53.720
an HTTP request it's like you call you get your information you hang up right but uh when we have a Diop modem that
00:11:03.160
enabled Us in the early days to connect to the internet um we wanted to be using
00:11:09.920
this line for hours and this is what the kind of persistent connection through
00:11:15.440
websocket feels like to the server so imagine your phone is your server and basically what's what ends up happening
00:11:21.760
is that websockets kind of uh consume all the resources and nothing is left
00:11:28.000
for http and we we saw this on happening um for our clients and um basically the
00:11:38.240
the conclusion was yes there there has to be a uh web circuit requests need to be
00:11:44.480
requests need to be serviced and scaled independently from HTP requests this is
00:11:50.160
the uh turned out to be a a benefit of
00:11:55.240
the architecture where any cable stands uh independent and kind of can scale independently of rails um and yeah I
00:12:02.880
remember I still remember the day when we got fiber uh yeah people people could finally
00:12:09.000
reach us uh at home on our phone um so that's um that's what we learned we also
00:12:16.199
learned that uh a bunch of tooling was missing we we were we built a kind of load testing tooling for web sockets and
00:12:24.079
U uh scenar based testing uh we learned that people wanted uh integration with
00:12:31.360
Apollo graph K subscriptions uh uh fullbacks
00:12:37.600
for it's actually fullbacks through wo and this is needed for private networks that is still kind of uh not friendly to
00:12:46.399
web suckets I didn't know it exists but yeah
00:12:52.079
and and then uh kind of some voice apps so we decided we decided that it looks
00:12:58.639
like we can build a a real product here and we were passionate about building an
00:13:04.279
open source but we also wanted to kind of make it sustainable keep it sustainable and we decided we're going
00:13:11.800
to build we're going to have two versions um one is open source MIT and
00:13:18.920
the other is commercial and uh paid so the one uh on the left is
00:13:28.120
a a communal Garden this is how we sort of um think about open
00:13:34.360
source uh it's available to everybody everybody is welcome to contribute
00:13:39.560
everybody is welcome to use it however they like but then if a company wants uh
00:13:46.040
to use the a big company wants to use this product they essentially want to have a professional Farm which is a bit
00:13:53.240
different something else so this is how we think about um our pro version and
00:13:58.320
cable Pro um it's uh it the the en enable pro has
00:14:05.399
only the features that are only needed by Enterprises so it's stuff in cluster
00:14:12.639
mode stuff related to uh those private networks um and some developer to as
00:14:20.639
well so we launched uh anable Pro in 2021 it had even more memory uh
00:14:28.240
efficiency binary compression algorithms uh apolog graphical uh integration and but we kept
00:14:36.519
very very simple uh we didn't almost build any kind of automation around the
00:14:44.000
product so we didn't have a licensed server we didn't have uh any to be
00:14:49.800
honest like we didn't build an app to sell it uh we we still use GitHub
00:14:55.000
container registry to distribute uh the pro uh we had a flat priz and just used
00:15:02.079
type form for signups that's it uh and again this is still just two people uh
00:15:10.040
having full-time jobs at evil Marsh as a head of v and CEO so kind of
00:15:16.079
a little bit busy so cellu was our first customer it's a French company they do
00:15:23.800
support uh through different uh uh like
00:15:29.519
inboxes like WhatsApp Messenger Telegram and they wanted really instant chat
00:15:36.560
experience and um uh how can you explain like when rails world the first
00:15:44.160
conference you remember it was sold out uh I I I got an extra ticket I gave it
00:15:49.240
to the CTO of cell that's how much I love
00:15:54.880
them yeah um so and by the this was our experience with many paying customers it
00:16:03.639
was just pure love appreciation support feedback I don't know why of course it's
00:16:09.959
like supposed to be an open source but uh I think people who used Pro our pro
00:16:16.399
version valued it maybe even more than people who used open source and they the
00:16:22.199
types of relationship we had with them we have with them are just some reason deeper and more profound
00:16:30.000
often so uh the we release the prsion then we release the client library and
00:16:36.759
we built something for hot wire because hot wire was out and we wanted something
00:16:42.040
extra for for hot wire and we realized if people only use hot wire um there's
00:16:48.600
no need for RPC we can just use uh kind of JW tokens for um owls
00:16:57.120
and basically simply the architecture a lot and this is what we did for uh Hotwire so just two components
00:17:04.839
are left uh spoiler it's now available for non non
00:17:10.520
Hotwire cases as well so the year ended we had six pain
00:17:17.360
customers not too many uh and we also got some Consulting
00:17:22.480
Revenue but it didn't feel it didn't feel like a blast you know it didn't
00:17:28.240
feel like a huge win and we decided next year we don't we didn't really have you
00:17:35.360
know an opportunity to focus on the product too much but we did some marketing so Vol recorded a bunch of uh
00:17:42.559
screencasts we started a newsletter um by the way you can sign up for on our blog um it's a pretty cool
00:17:51.080
newsletter about real time and also uh he was doing this talk at uh RC and
00:17:59.280
what turns out is oh thanks so turns out on base camp if you
00:18:07.200
have a interruption in connectivity and there's some messages
00:18:13.400
being sent comments um while you're offline then you go back
00:18:20.080
online um what do you think you're going to
00:18:25.600
receive so this is a new message um that is sent while you're online
00:18:31.400
basically you only getting only getting the new one you're missing you're missing the messages that were posted
00:18:38.919
while you were offline and this is why because websockets are not giving you
00:18:44.080
delivery guarantees of course um but also action cable is
00:18:49.760
not it's it's a it's not improving on that let's
00:18:55.360
say so what was we basically discovered that there there
00:19:02.120
are in reality many problems with connectivity and with building really
00:19:07.679
kind of reliable real time features if you want to make them reliable they are much harder and it's not just
00:19:14.799
about um you think oh how many times am I going to go offline
00:19:20.720
online well uh if you look closely enough on real time scale you're actually going
00:19:27.320
offline pretty pretty Prett frequently um you know this is a glass half full um
00:19:34.120
right you look at it and you think or it's so uh solid then you look closely and it's
00:19:41.799
made of emptiness okay um well inside items well
00:19:48.960
realtime connectivity is a bit better but it's uh it's very
00:19:55.679
flaky uh and yeah so this is how the year ended we doubled uh the customers
00:20:02.440
and we reached $1 million consultant Revenue so we started thinking okay uh
00:20:08.320
as a consultant Revenue in cable kind of makes sense uh but as a
00:20:13.679
product still not there so we decided marketing is not enough and we're going to be building
00:20:19.880
more building more features for any cable and first thing we built is was
00:20:25.120
this uh reliable uh reliable web sockets inside any cable so now when you're
00:20:32.200
using any cable on the server and on the client so our extended client version uh
00:20:39.440
extended version of action cable client uh which is any cable client um then you
00:20:44.799
have exactly once deliver guarantees uh on web sockets and also what's important um if you have
00:20:51.880
persistent connections and you're redeploying your uh websocket server uh
00:20:57.080
any cable will restore those sessions and so you don't have to reconnect so this is a major uh kind of reliability
00:21:06.039
feature as well so we now recommend any cable not just as a performance boost but as a
00:21:12.799
kind of reliability boost uh for features so it's uh if you're serious
00:21:17.880
about realtime features uh consider using it we migrated uh off of redis so
00:21:25.320
you don't have to use it now uh we're using Nets originally we built it for
00:21:31.279
Flo um because they don't they cannot kind of use redus um but now you can use
00:21:38.080
uh embedded nuts instead of rers uh everywhere there there's some new new
00:21:43.760
use cases foring cable coming up every every year or so uh like this one this is
00:21:50.000
a uh electric vehicles charging stations so apparently there are many rails um
00:21:58.720
based EV uh companies EV charging companies around the world uh and maybe
00:22:08.279
one eeve company uh is using rails I mean Tesla I'm not sure I
00:22:15.919
just well uh and so we we basically somebody asked us to support the
00:22:21.400
protocol U that is uh that the EV station is using to send data to to well
00:22:28.240
in our case to rails application uh that is controlling operating uh operating
00:22:34.640
the station and we supported it and now we have U kind of the largest Malaysia's
00:22:40.559
um EV charging company using us and now the company from the UK is also reached
00:22:46.400
out this is an interesting kind of Market um a bunch of folks are building this it's a voice apps with uh where any
00:22:56.000
cable is extended and we have an an example an article of
00:23:01.279
how you can extend any cable with other modules on the goal side to do more
00:23:06.960
processing um if you want to kind of uh understand for example the content of
00:23:12.880
the of the speech um in t media streams or something like that and this is how we got um any
00:23:20.039
cable uh one of the probably the biggest of our customers doximity which is a
00:23:26.440
part of rails foundation and uh pretty huge company so they they use it for
00:23:32.080
this for this case uh any keepable now supports uh service and events uh
00:23:38.880
because well frankly because of LMS but because we had to use uh that but um
00:23:46.520
yeah you can now kind of create a uh Event Channel
00:23:53.080
um uh with any cable and um this is how last year year ended uh we again doubled
00:24:00.799
ARR and again had 1 million consulant Revenue which is kind of nice but this
00:24:06.960
year we decided okay uh let's do more um and you see uh we decided we're going to
00:24:13.640
go beyond Ruben rails uh we're going to do a universal pops up and we're going to do managing C so beyond Ruben rails
00:24:21.240
we um started with this kind of any cable for Server last JavaScript ver s
00:24:27.080
template yeah that's um that's what we tried um simplified for simplified pops
00:24:34.559
up we said okay um we're going to uh
00:24:40.159
offer a very simple architecture for any cable that is just a webset server uh in
00:24:47.600
pops up mode very simple uh very kind a framework agnostic um but it's a little
00:24:55.200
kind of less efficient and less performant than the original any cable
00:25:00.480
with RPC but for many apps they kind of um it's still better to have a
00:25:08.720
simpler architecture uh while still having much
00:25:14.399
better performance than action cable or any other uh stuff and we introduced Whispers which
00:25:22.679
are messages from client to client that uh Server doesn't care about for example
00:25:29.679
uh cursors live cursors is a um of course
00:25:35.440
your server doesn't care about them right so you just want to send them from client to client uh this was uh I
00:25:41.840
recorded it during our old hands uh I don't know why people uh could do this
00:25:48.240
but it's not SP up um H yeah I don't know maybe they're n
00:25:55.120
nervous for some reason so um okay managed to cable this is was this was
00:26:00.840
our final kind of big um I don't know dream for some fear for
00:26:07.880
somebody else um uh again this is just a we don't even
00:26:14.039
have a full-time engineer so how do we build a managed
00:26:19.159
service um we needed the most pragmatic the most efficient way of doing
00:26:26.520
this um what is think it
00:26:39.320
this is the stack we used to collide flag fly. v action policy and aore
00:26:48.880
um uh and we built a managed service in Alpha uh we are not building for it yet
00:26:56.640
uh but basically you can spin up um instances of any cable and use them in
00:27:02.919
your uh let's say stage in environment
00:27:09.399
yeah that's what uh we started experimenting with and um we introduced
00:27:16.159
uh Telemetry in open source there is an option to opt out of telemetry but um I
00:27:24.679
think it's very important for uh products like us uh that are open source and Commercial to still have Telemetry
00:27:31.799
in open source to understand uh for us it's important to understand how many big uh customers we have an open source
00:27:38.360
in relation to Pro and that's what we are seeing um so
00:27:44.080
this is where we are we're kind of on track to uh double again our AR and
00:27:49.399
we're seeing finally more new free Trails this year um hopefully because of
00:27:56.840
everything we've released um and uh we got a bunch of big companies
00:28:03.200
not all of them I can uh name yet but um yeah theim funnels are uh some of the
00:28:10.000
large rails uh applications and there are more we are working with them to
00:28:16.559
turn those stories into case studies um and yeah this this this is
00:28:23.640
what we have right we have we're solving a real problem uh for really big use cases and we know we noticed that new
00:28:31.399
use cases keep coming up uh and we solved this problem on the back hand
00:28:37.600
side but with like reliability and scalability and all of that but
00:28:44.039
um many things are missing and they I think the main thing and I wonder if you have ideas let me know uh after this you
00:28:52.240
know what you feel is missing well so far we think the number one is just the front and side of things
00:28:58.799
um we're planning this nice kind of UI collaboration UI uh key for different U
00:29:07.000
frontend technologist react nonreact uh makes it a bit harder but
00:29:13.200
yeah we'll see um because we we see people uh implementing those things like
00:29:20.120
presents cursors collaborative editing uh but they have to build it themselves
00:29:27.760
and we want to make it simple uh sort of out of the box as much as
00:29:33.559
possible um we still need to make any ke much simpler um I got to say it
00:29:40.559
is simplified already but you won't tell it by reading the docks
00:29:48.080
yet um just because uh the docks were an accumulation of a lot of um stuff that
00:29:54.080
was going on and kind of collected through over the years um so we're GNA simplify that and finally
00:30:02.000
yeah future transports uh that's what we are also thinking about we want to any people to kind encapsulate this new this
00:30:09.159
this those new things like web transport or whatever comes next um and my last remark would
00:30:18.440
be yeah about my own Journey if you remember I joined evil marins as a
00:30:24.760
account manager and I acted as a kind of like a
00:30:31.000
assistant manager at any cable just kind of somebody helping uh vvo and uh over
00:30:39.440
those years we became uh real co-founders here uh in Practical terms
00:30:45.760
it means we collaborate and contribute equally to this strategy and uh yeah it helped me a lot
00:30:54.120
to connect with many rails companies and with the Ruby Community which I'm
00:31:00.639
grateful for um and I was thinking what helped on what helped
00:31:07.919
most uh because if you think of this I had like a huge imposter syndrome
00:31:14.000
originally um and like let's say a lot of
00:31:19.279
insecurities um I realized what helped is uh like one person who uh trusted me
00:31:29.480
like nobody else completely yeah um
00:31:35.760
and this is vaa but also our company and Ruby
00:31:42.120
Community uh so I had so much strust and support in uh in this on this
00:31:50.240
journey well it wasn't like 100% of time um but but mostly mostly
00:31:58.600
um so this is how uh this is this is how we buildt it and I got I'm going to say
00:32:04.000
this was these are the foundations of aling keyable because there is a lot more
00:32:09.880
uh for us to do um and I'm super excited about this
00:32:16.559
um this is uh this is uh how you can find me please share uh any feedback uh
00:32:24.720
any suggestions for evil martians in cable and um the link on top is to um sign up
00:32:34.799
for the San Francisco Ruby Meetup that I'm running um well in the Bay Area and
00:32:41.519
there's one happening this week um so I hope to see some of you there yeah thank
00:32:58.240
yeah um I gotta say the manag service is not really requiring too much of our time yet um why
00:33:06.639
um we we're not seeing huge um use cases
00:33:11.760
on because it's an alpha and we say it's in Alpha uh and we say it everywhere
00:33:18.480
yeah um so uh what we doing we are using
00:33:24.240
flies API to spin up a new instance for every customer so it's like uh very uh
00:33:30.919
simple to manage if you think about it yeah but um yeah we're still U very much
00:33:39.360
um kind of much more in spending much more time on evil martians than on any
00:33:45.679
keable both of us and yeah that's that's how it is because cuz
00:33:51.760
yeah but hoping to dedicate more time to any K so
00:33:58.559
but yeah the team also helps though um yeah the team helps so we have somebody who's supporting Helm charts somebody
00:34:05.720
who's uh of course uh like we're making like a million doll Consulting Revenue this means this is not me and V are
00:34:13.359
doing consulting projects mostly um it's other teammates who know how to set up
00:34:19.520
scale any cable how to build with any cable so yeah it's a lot of people
00:34:25.240
involved yeah many many other people
00:34:32.480
all right yeah thank you