Speaker 1: Hey everyone, and welcome to another deep dive with us. Today.
Speaker 1: We're going to be looking at ngix, oh yeah, which
Speaker 1: is something I've heard so much about over the years.
Speaker 2: It's everywhere these days, it is.
Speaker 1: And we're going to be looking at the NGIX Cookbook
Speaker 1: twenty nineteen to kind of guide us through this.
Speaker 2: Yeah, there's so much in there. We're going to give you.
Speaker 1: The Yeah, we'll boil it down.
Speaker 2: The highlights and make it so you can walk away
Speaker 2: and know what ngix is.
Speaker 1: Yeah, and we'll give you like a cheese sheet of
Speaker 1: this resource.
Speaker 2: Yeah.
Speaker 1: So, first of all, what is ngix and why is
Speaker 1: it such a popular web app tool?
Speaker 2: Well, at its heart in gix is a web server, ok.
Speaker 2: But it's also so much more than that, right, I
Speaker 2: Mean he can act as a reverse proxy, a load balancer,
Speaker 2: a content cash oh wow. And it's really become popular
Speaker 2: because it's just so efficient, Okay, Like it can handle
Speaker 2: just a massive amount of connections without needing a ton
Speaker 2: of resources.
Speaker 1: Okay.
Speaker 2: So it's known for speed, being lightened powerful, it's.
Speaker 1: Like the engine of a race car. I was gonna say. Now,
Speaker 1: in terms of installing it, the cookbook mentions like open
Speaker 1: source NGI n X and then there's also NGI and
Speaker 1: X plus. What are the differences there?
Speaker 2: So the open source version is free, okay, anyone can
Speaker 2: use it, and NDON x plus is a commercial version
Speaker 2: with some more features that are really for enterprises. And
Speaker 2: the cookbook will walk you through installing either one on
Speaker 2: all kinds of different operating systems.
Speaker 1: So it's not super difficult.
Speaker 2: No, it's well documented.
Speaker 1: Okay, great, so you've installed it. What's kind of the
Speaker 1: first indication that this thing's working?
Speaker 2: Yeah, So there's a simple command you can run that
Speaker 2: lets you sort of peek under the hood and you'll
Speaker 2: see the master process, which is like the control center
Speaker 2: of ngon X and you'll see its worker processes and
Speaker 2: that's what's actually handling the requests that are coming in. Okay,
Speaker 2: so you see this little team working.
Speaker 1: Together, right like this is proof of life.
Speaker 2: Yeah, exactly, Okay, awesome.
Speaker 1: So n GIX, what's the deal with load balancing?
Speaker 2: So load balancing is critical if you've got a website
Speaker 2: that's getting any kind of serious traffic. Okay, Basically you
Speaker 2: have multiple servers, yeah, that could handle visitors to your website.
Speaker 2: NGI and X acts like a traffic cop, and it
Speaker 2: distributes those requests coming in across all of those different
Speaker 2: servers to prevent any single server from getting overloaded and watches.
Speaker 1: So it's almost it's like you've got a team of
Speaker 1: servers working together to.
Speaker 2: Kind of exactly, they're sharing the lights for the.
Speaker 1: Burden, so nobody gets overloaded. Yeah, okay, and what kind
Speaker 1: of load balancing can it do?
Speaker 2: So it can actually do load balancing for a variety
Speaker 2: of different types of traffic. Oh so eh, GTP, TCPUDP.
Speaker 2: So it's really versatile.
Speaker 1: Gotcha, like a traffic cop that can handle cars and trucks.
Speaker 2: Yeah, exactly.
Speaker 1: Can you give an example of how this would work
Speaker 1: in practice?
Speaker 2: Yeah? Sure. So imagine you have a database and that
Speaker 2: database is constantly getting read requests. Maybe it's an e
Speaker 2: commerce and it's serving up product information. NGI and X
Speaker 2: can distribute those read requests across multiple database replicas. Oh wow,
Speaker 2: so that no single replica gets overloaded.
Speaker 1: Okay, so it's not just preventing crashes, but it's also
Speaker 1: keeping things super smooth for.
Speaker 2: Yeah, it's about performance, performance and responsiveness for your users.
Speaker 1: And NGNX plus can actually brain connections.
Speaker 2: Yeah, it has this feature called connection draining, which is
Speaker 2: really useful if you have to take a server offline
Speaker 2: for maintenance or something like that. What it does is
Speaker 2: it gracefully redirects any active sessions to other servers before
Speaker 2: taking that server offline. Okay, so you don't end up
Speaker 2: with users getting disconnected gotcha in the middle of doing
Speaker 2: something important.
Speaker 1: That would be bad. Now, we talked about balancing the traffic,
Speaker 1: but it can also actually manage the traffic, that's right, yeah, right,
Speaker 1: and shape it.
Speaker 2: Yeah, Traffic shaping is a way to control the flow
Speaker 2: of data based on a lot of different factors. So
Speaker 2: it could be the user's location, okay, the type of content,
Speaker 2: the time of day, even you can prioritize certain traffic.
Speaker 2: Maybe you want to make sure that video streaming always
Speaker 2: gets enough bandwidth, or you want to limit bandwidth for
Speaker 2: large file downloads.
Speaker 1: Okay.
Speaker 2: So it's a really powerful way to optimize performance.
Speaker 1: It's like it's like a traffic system that can adapt
Speaker 1: to the current conditions exactly. Okay, Now, what about the
Speaker 1: GOIP module.
Speaker 2: Oh, that's a cool one. What's that That lets NGI
Speaker 2: NX know where your user is connecting from geographically, so
Speaker 2: you could do things like personalized content. You could restrict
Speaker 2: access to a website based on country, show targeted ads,
Speaker 2: lots of options.
Speaker 1: So we're moving from a traffic cop to like almost
Speaker 1: like a concierge for your website.
Speaker 2: It knows where everybody's coming from.
Speaker 1: No. In terms of security, ngi X is also pretty powerful.
Speaker 2: Yeah, so NGIX can what are some of the things
Speaker 2: that can do. It can do basic authentication okay, so
Speaker 2: require users to log in before they can access certain content.
Speaker 2: It can validate JWTs, which are tokens that are often
Speaker 2: used for secure communication. And it can control access based
Speaker 2: on IP address, like if you want to allow or
Speaker 2: deny requests coming from a certain range. Okay, so you
Speaker 2: have a lot of options there.
Speaker 1: And what about the secure link modules.
Speaker 2: The secure modules are really neat. It lets you generate
Speaker 2: temporary expiring links to specific files or resources. So imagine
Speaker 2: you have to share some confidential documents with a client.
Speaker 2: You could create a link that expires after a certain
Speaker 2: amount of time.
Speaker 1: Oh wow, that's cool.
Speaker 2: Yeah.
Speaker 1: And it also enforces those secure connections.
Speaker 2: Yeah. So NGNX can be configured to force browsers to
Speaker 2: use HTTPS, which is the secure version of the protocol.
Speaker 1: So it's not just about protecting data that's at rest,
Speaker 1: it's also about data that's like traveling across the internet. Yeah,
Speaker 1: transit content cashing. How does NGNX do that?
Speaker 2: So CASHI is about making things faster by storing copies
Speaker 2: of content that's access frequently closer to the user. And
Speaker 2: GIX can do this in a variety of ways. You
Speaker 2: can create these custom caching zones, and you can actually
Speaker 2: define rules for what gets cashed and how long gets
Speaker 2: cashed for based on things like cookies or request parameters.
Speaker 1: Right, So it's not just blanket cashing everything.
Speaker 2: Right, Yeah, it's more intelligent than that, exactly. Okay, and
Speaker 2: what about this purging.
Speaker 1: So purging lets you remove specific content from the cash instantly.
Speaker 1: So if you've updated a web page and you want
Speaker 1: to make sure that users are seeing the latest version,
Speaker 1: you can purge that old version from the cash.
Speaker 2: Yeah shah, so that they always get the freshest content exactly. Okay,
Speaker 2: So we've got this cashing magic happening. But I imagine
Speaker 2: we can like fine tune it even more.
Speaker 1: Yeah, there are a lot of ways to tweak the
Speaker 1: settings for optimal performance.
Speaker 2: Okay, give me an example.
Speaker 1: One thing you can do is keep connections open.
Speaker 2: Between NGI and X and the clients and servers that
Speaker 2: it's talking to, So that reduces the overhead of constantly
Speaker 2: establishing and tearing down connections.
Speaker 1: Keeping a conversation going yeah exactly.
Speaker 2: You can buffer responses in memory to avoid having to
Speaker 2: write data to disc all the time. You can tweak
Speaker 2: settings in the operating system itself.
Speaker 1: Gotcha. So it's like a more holistic.
Speaker 2: Yeah, it's about optimizing the whole environment.
Speaker 1: Whole environment. Okay. Now, what are some other cool features
Speaker 1: that ngnx has.
Speaker 2: Well, For one thing, it supports HTTP two, which is
Speaker 2: the new or faster version of HTTP. And it has
Speaker 2: support for something called gRPC.
Speaker 1: Okay, gRPC, that's new to me.
Speaker 2: Yeah, it's a modern way to build APIs okay. And
Speaker 2: then there's a really cool feature called server push.
Speaker 1: Okay, what's server push?
Speaker 2: So server push is about anticipating what the user is
Speaker 2: going to need before they even ask for it.
Speaker 1: Wo.
Speaker 2: So it's literally like reading the user's mind okay, and
Speaker 2: then sending that content to the browser in advance, so
Speaker 2: everything loads super fast.
Speaker 1: Okay. So it seems like NGNX is like this multi
Speaker 1: tool it is of web development. It does all sorts
Speaker 1: of really incredible things.
Speaker 2: I mean, we've just scratched the surface here.
Speaker 1: Yeah, we talked about how it can balance loads, manage traffic,
Speaker 1: it can act as like a security gatekeeper, it can
Speaker 1: cash content, and it can really just make websites perform
Speaker 1: at their best.
Speaker 2: Yeah.
Speaker 1: So this is really just a taste of what NGI
Speaker 1: and X can do. Is a big world, Yeah, it is,
Speaker 1: and we're gonna keep exploring it in our next episode.
Speaker 2: I can't wait where we talk.
Speaker 1: About automation and all the cool things you can do
Speaker 1: to make NGIX work even smarter.
Speaker 2: Yeah, we'll dive into the programmability of it, how to
Speaker 2: automate things, So be.
Speaker 1: Sure to join us for that and until then, keep
Speaker 1: on learning.
Speaker 2: Welcome back to our NGI andX deep dive.
Speaker 1: Glad to be back.
Speaker 2: So last time we talked about kind of the core
Speaker 2: functions of GX as a web server and load balancer
Speaker 2: and security features. This time, I think it'd be cool
Speaker 2: to talk about automation.
Speaker 1: Yeah. I love automation.
Speaker 2: Yeah, who doesn't.
Speaker 1: Who wants to do things manually? What can we actually
Speaker 1: automate with ngix?
Speaker 2: So a good place to start is the ngix plus APIA,
Speaker 2: which gives you programmatic control over just about everything in NGIX.
Speaker 1: So, like I could write a script that like adds
Speaker 1: a server exactly, you can remove the server.
Speaker 2: You could add servers to a group, remove servers from
Speaker 2: a group, change configurations on the fly.
Speaker 1: Wow. That's powerful.
Speaker 2: Yeah, super powerful.
Speaker 1: Now the cookbook also mentions that you can integrate it
Speaker 1: with other tools like Puppet and chef and antsable.
Speaker 2: Yeah, all those configuration management tools. Right, you can use
Speaker 2: them to manage your whole NGI and X setup. Okay,
Speaker 2: so you're not manually going in and changing.
Speaker 1: Files, gotcha. So it's like infrastructure as code exactly. What
Speaker 1: about container environments?
Speaker 2: So ngix works really well with containers. Okay, there's a
Speaker 2: official Docker image for NGNX.
Speaker 1: Okay.
Speaker 2: And there's this thing called the ngix ingress controller.
Speaker 1: Okay. I've heard about ingress controllers, but I don't really
Speaker 1: get it.
Speaker 2: Okay, So an ingress controller is basically the front door
Speaker 2: to your application in a Kubernetes cluster. It manages all
Speaker 2: the traffic coming in and then routes it to the
Speaker 2: appropriate service.
Speaker 1: Right.
Speaker 2: So the ngix ingress controller is using NGI nx's power
Speaker 2: to efficiently route that traffic and balance the load.
Speaker 1: Gotcha. And the cookbook also mentions dns SRV records.
Speaker 2: Yeah, those are cool. So DNSSRV records are basically a
Speaker 2: way to define a service by name, okay, instead of
Speaker 2: by IP address.
Speaker 1: Gotcha.
Speaker 2: And this makes it super easy for NGIX to find
Speaker 2: and route traffic to the right services.
Speaker 1: So it's like a phone book for your services exactly.
Speaker 2: It's like a dynamic phone book, and it.
Speaker 1: Just makes things so much more flexible. Now in terms
Speaker 1: of debugging, what are some of the things that NGNX
Speaker 1: can help with.
Speaker 2: So logging is your best friend, okay when you're trying
Speaker 2: to figure out what's going on with NNGI and X right.
Speaker 2: AGNX has really good logging capabilities, okay. And you can
Speaker 2: customize those logs in a lot of different ways, gotcha.
Speaker 2: You can feel to the information, and you can stream
Speaker 2: those logs to a central server, so it's not just
Speaker 2: like looking at a giant text file. It can be
Speaker 2: a little more sophisticated.
Speaker 1: Yeah. And if you're using NNGI and X plus R,
Speaker 1: you actually get this really cool monitoring dashboard that shows
Speaker 1: you everything that's happening in real time.
Speaker 2: Now, we talked a little bit before about performance tuning. Yeah,
Speaker 2: what are some of the key techniques to keep in mind?
Speaker 1: So a lot of the stuff we talked about before
Speaker 1: applies here.
Speaker 2: Okay.
Speaker 1: Keeping connections open between NGI and X and the clients
Speaker 1: and servers is talking to is a big one, Okay.
Speaker 1: That can really reduce overhead buffering responses and memory. It's
Speaker 1: another good one that helps you avoid having to write
Speaker 1: data to disk. Okay, and then tuning the op reading
Speaker 1: system itself can also make a big difference.
Speaker 2: So it's like optimizing the environment.
Speaker 1: Yeah, exactly that ngix.
Speaker 2: Is running in the cookbook also mentions the importance of
Speaker 2: well organized configuration files.
Speaker 1: Oh yeah, this is a big deal. Why is that
Speaker 1: because it's really easy for those files to get out
Speaker 1: of hand.
Speaker 2: Especially if you're working on a big project with a
Speaker 2: complex setup, So you want to make sure that they're
Speaker 2: well organized, they're easy to read and understand, and if.
Speaker 1: You run into problems, it's easier to exactly, it's a
Speaker 1: lot easier to find and fix errors. Right now, speaking
Speaker 1: of troubleshooting, what are some tips for debugging?
Speaker 2: So one thing you could do is use the ngix
Speaker 2: D command which will check the syntax of your configuration file.
Speaker 2: That can catch a lot of the simple errors early on.
Speaker 1: Right before you actually try to restart it.
Speaker 2: Exactly, Okay. You can enable debug logging for specific parts
Speaker 2: of your configuration, and if you get really stuck, you
Speaker 2: can actually get back traces from cordum.
Speaker 1: Wow. So it's like a whole forensic investigation it is. Now,
Speaker 1: let's talk about cloud deployments because it seems like merx
Speaker 1: is super popular, pretty popular in the cloud.
Speaker 2: Yeah, and you know cloud platforms like Aws and Azure,
Speaker 2: they have their own load balancing solutions, but a lot
Speaker 2: of people still prefer to use nngix okay, because it's
Speaker 2: so powerful and flexible.
Speaker 1: So they're almost bringing their own tools.
Speaker 2: Exactly.
Speaker 1: What are some of the scenarios where n gix really shines.
Speaker 2: So on Aws, you can use NGI NX behind a
Speaker 2: network load balancer, ok to create really highly available and
Speaker 2: scalable deployments. You can use it to route traffic to
Speaker 2: different availability zones, which are like geographically separate data centers, gotcha,
Speaker 2: And that gives you resilience against outages. So even if
Speaker 2: one data center.
Speaker 1: Goes down, which one goes down? The other one can
Speaker 1: still handle the traffic.
Speaker 2: Yeah.
Speaker 1: What about Azure?
Speaker 2: So in Azure you can use Nginx with virtual machine
Speaker 2: scale sets and then lets you automatically scale your application
Speaker 2: up or down based on demand.
Speaker 1: Wow.
Speaker 2: So NGIX can really act as the glue between all
Speaker 2: these different parts of your infrastructure. And it can talk
Speaker 2: to AWS, it can talk to Azure, It can even
Speaker 2: talk to on premises systems.
Speaker 1: Wow. So it really ties everything together. Yeah okay, now
Speaker 1: I'm curious what's next for Nginx.
Speaker 2: Well, one area where NNGNX is already making a big
Speaker 2: impact is in micro services architectures.
Speaker 1: Oh yeah, that's a hot topic it is. How does
Speaker 1: nginx help with microservices?
Speaker 2: So in a microservices world, you've got all these little
Speaker 2: services talking to each other, and managing the communication between
Speaker 2: those services can get tricky. GNX can act as like
Speaker 2: a central point of control. It can route requests, balance loads,
Speaker 2: and just make sure everything is running smoothly.
Speaker 1: So it's like almost like a conductor for your micro
Speaker 1: services orchestra.
Speaker 2: I like that.
Speaker 1: But with all these moving pieces in a microservices world,
Speaker 1: how does NGIX stay on top of it?
Speaker 2: So that's where automation and programmability really come in Okay,
Speaker 2: you can use the ngix plus API to dynamically reconfigure
Speaker 2: Nginx as your architecture changes.
Speaker 1: So it can adapt exactly to new services coming online
Speaker 1: and things like that.
Speaker 2: Yep. And there are tools like console template that can
Speaker 2: automate those changes for you.
Speaker 1: Wow, that's cool. So it's almost like self healing.
Speaker 2: Yeah, you can build really robust and resilient systems with gix.
Speaker 1: So we've talked about a lot today, from automation to
Speaker 1: configuration management, to the cloud and micro services. What are
Speaker 1: some key takeaways that our listeners should keep in mind?
Speaker 2: So I think the big takeaway here is that ngix
Speaker 2: is an incredibly powerful and versatile tool Okay, and it
Speaker 2: can be used to build really high performing, secure, reliable
Speaker 2: applications no matter what kind of application you're building, whether
Speaker 2: it's a simple website or a complex distributed system.
Speaker 1: So it's not just for big companies, no, not at all.
Speaker 1: It can be for anybody.
Speaker 2: Anyone can benefit from using ngix.
Speaker 1: Awesome.
Speaker 2: The cookbook is a great place to start, but remember
Speaker 2: that the ngix ecosystem is always evolving, so just stay curious,
Speaker 2: keep learning, keep experimenting.
Speaker 1: Great advice. Be sure to join us for our next
Speaker 1: episode where we talk about Nginx and media streaming.
Speaker 2: Yeah, that's going to be a fun one and.
Speaker 1: Some advanced security features. Until then, keep on learning, and
Speaker 1: we are back for the final part of our NGIX
Speaker 1: deep dive.
Speaker 2: I can't believe we're already here.
Speaker 1: I know it's flown by. We've talked about so many
Speaker 1: things we have, but we saved some of the I
Speaker 1: think most exciting stuff for.
Speaker 2: Last Yeah, they're really fun.
Speaker 1: Media streaming and some advanced security stuff. So let's start
Speaker 1: with streaming. How does NGNX handle media streaming?
Speaker 2: So ngix has become super popular for delivering all kinds
Speaker 2: of media, video, audio, live streams, you name it.
Speaker 1: And what makes it so good at that?
Speaker 2: Well, for one thing, it supports all the major protocols
Speaker 2: like HLS and mpig dash. Those are essential for adaptive streaming, right.
Speaker 1: And adaptive streaming means that it can adjust the quality
Speaker 1: based on the user's connection, so you don't get that
Speaker 1: like buffering and stuttering. It just works now I understand
Speaker 1: ngion x plus can actually and genxlus has some do
Speaker 1: some even cooler stuff.
Speaker 2: Extra features with me, yeah, like dynamic packaging and casing. Okay,
Speaker 2: So imagine you have a big video file. Ngixplus can
Speaker 2: actually split it up into smaller segments on the fly,
Speaker 2: and then those segments can be streamed and cashed more efficiently.
Speaker 1: So it's like taking a big file and breaking it
Speaker 1: down exactly into smaller chunks so they're easier to work with.
Speaker 2: It's like slicing a pizza, Okay, you don't try to
Speaker 2: eat the whole thing at once.
Speaker 1: And you can also set like bandwidth limits.
Speaker 2: Yeah, you can control the download speed for different clients
Speaker 2: or groups of.
Speaker 1: Clients so that you don't get that like.
Speaker 2: Inges exactly.
Speaker 1: Okay, now let's move on to security. Okay, we talked
Speaker 1: about some of the basic security features in the past,
Speaker 1: but what about like some more advanced stuff.
Speaker 2: Yeah. So NGNX has a lot of tools for protecting
Speaker 2: your applications.
Speaker 1: Okay.
Speaker 2: One area where it's really good is mitigating DDoS attacks.
Speaker 1: Okay, and d DOS attacks those are the ones where
Speaker 1: I want someone tries to flood your server trying to
Speaker 1: bring it down, and NGNX can actually help with that.
Speaker 2: NGI and X plus especially has some powerful features for that.
Speaker 1: Okay.
Speaker 2: It can identify and block malicious traffic in real time.
Speaker 2: Using things like rate limiting, IP blacklisting, and even behavioral analysis.
Speaker 1: So it's like it's got a whole team of security
Speaker 1: guards working for it.
Speaker 2: Yeah, it's constantly watching.
Speaker 1: Now, you mentioned JWT validation before, can you explain how
Speaker 1: that works?
Speaker 2: Yeah, So JWTs are these tokens that are used for
Speaker 2: secure communication between different applications.
Speaker 1: Okay.
Speaker 2: X plus can validate these tokens okay, to make sure
Speaker 2: that only authorized requests are allowed through.
Speaker 1: So it's like checking your IDs exactly.
Speaker 2: It's like a bouncer at a club, right.
Speaker 1: And of course we need those secure connections absolutely, So hgtts, YEP.
Speaker 2: Ng I and x can enforce HTTPS and it supports
Speaker 2: really advanced s SLTLS configurations.
Speaker 1: So it's not just like a basic it's HTTPS implementing,
Speaker 1: it's the full package. Okay, So how do we actually monitor.
Speaker 2: All this logging? Logging? Logging, blogging, that's your best friend,
Speaker 2: okay when it comes to security monitoring, Okay, NGI in
Speaker 2: X logs can tell you a lot about what's going on.
Speaker 1: So they're not just like useless.
Speaker 2: Information, No, they're super valuable.
Speaker 1: Okay.
Speaker 2: And if you're using NGI and x plus, you get
Speaker 2: that real time monitoring dashboard that can show you things
Speaker 2: like blocked requests or failed authentication attempts.
Speaker 1: So it's like it's like a security camera that's constantly watching. Now,
Speaker 1: even with all these security features, what happens if something
Speaker 1: goes wrong?
Speaker 2: So ngn is actually built for high availability and fault tolerance.
Speaker 2: You can configure it in active active or active passive
Speaker 2: modes to make sure that your applications stay online even
Speaker 2: if one server goes down.
Speaker 1: So it's like a backup generator kicks in if the
Speaker 1: power goes out, exactly, and I bet we can automate
Speaker 1: that process.
Speaker 2: Oh yeah, absolutely. You can use tools like keep alived
Speaker 2: ok to automatically switch traffic over to a healthy server.
Speaker 2: And nginx plus has this zone sync feature that keeps
Speaker 2: important data synchronized across multiple servers, so.
Speaker 1: It's like a self healing system.
Speaker 2: Yeah, it really is.
Speaker 1: Wow. NGNX is amazing.
Speaker 2: It is a pretty incredible piece of software.
Speaker 1: It is it is. So as we wrap up this
Speaker 1: deep dive, what are some final thoughts for our listeners?
Speaker 2: I think the biggest takeaway is that ngix is an
Speaker 2: incredibly powerful tool, Okay, and it can be used to
Speaker 2: build really high performing, secure, reliable web applications. No matter
Speaker 2: what you're building, whether it's a simple website or a
Speaker 2: complex distributed system.
Speaker 1: The cookbook is a great resource.
Speaker 2: Yeah, it's great place to start, but the ngix ecosystem
Speaker 2: is always evolving, right, So keep learning, keep experimenting, and
Speaker 2: never stop exploring.
Speaker 1: That is fantastic advice. Thank you so much for joining
Speaker 1: us on this deep dive into the world of NGI
Speaker 1: and X. It's been a pleasure, it has and until
Speaker 1: next time, keep on learning.