Want to learn web development from the comfort of your chair, car, when you're out for a run, or doing some random house work? This is the show for you. Every week, in 20 - 40 minutes, I help you improve your web development skills with new knowledge, tips, pointers, random facts, inspiration, and some general chit chat. Tune in to have a fun, engaging, and friendly conversation about web development.
…
continue reading
Interesting, engaging, exciting, and thought-provoking stories from those in tech; because all of us have a story or two to tell.
…
continue reading
Get quick bites of Zend Framework – the leading development framework for PHP. Find out what's new, what's going on, and how to use it, in less time than it takes to drink a coffee — every Thursday.
…
continue reading
The Undercover ElePHPant is a podcast about scaling and optimizing your PHP applications. Each week, Benjamin Eberlei and Matthew Setter sit down with an expert from the PHP community to discuss a specific aspect of highly performant PHP applications.
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Composer's show command and why you should use it
9:27
9:27
Play later
Play later
Lists
Like
Liked
9:27
Composer is an amazing tool that makes working with PHP so much simpler than it ever was before! In this short(-ish) episode, I want to introduce you to Composer's show command, and how it helps you find out about all of the dependencies on which your project depends. Links from the episode Composer's show command The Linux/UNIX ps command Want to …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
What it is (or can be) like learning Java as a PHP developer
20:19
20:19
Play later
Play later
Lists
Like
Liked
20:19
In this episode, I'm discussing a recent post that I wrote on my blog about what it's like to learn Java as a PHP developer. If you're, primarily a PHP developer and have considered or spent time learning Java (or brushing back up on Java) then you might well relate to some or all of my recent experiences doing so. Links from the episode Learning J…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
I'm working on a new video and tutorial series showing how to build and deploy a web app in PHP
9:09
9:09
Play later
Play later
Lists
Like
Liked
9:09
It's early days, so I don't know how detailed the project will end up being, yet. But, I wanted to share what I'm thinking with you, in this week's episode of the podcast. So, here's my overview of what I'm planning to do. Links from the episode The introductory LinkedIn post, with the first mockup pencil sketch Want to grow your knowledge further?…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking with Shelley Benhoff about Docker and Docker Compose, being a Docker Captain, Kubernetes, and more!
58:25
58:25
Play later
Play later
Lists
Like
Liked
58:25
In this episode, I'm talking with my friend Shelley Benhoff about Docker and Docker Compose, being a Docker Captain, and Kubernetes. It's a fun, warm episode, recorded some time back, where we talk about all of those topics, plus a look back on tech life, post-pandemic, work ethics in different countries, and more. Guest(s): Shelley Benhoff. Links …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
StackOverflow partners with OpenAI. What do you think?
11:25
11:25
Play later
Play later
Lists
Like
Liked
11:25
If you're not aware, on May 6th, StackOverflow and OpenAI announced a partnership where OpenAI will have access to StackOverflow's API. This will allow ChatGPT to be trained, with attribution, from StackOverflow's large corpus of data. If you're a StackOverflow user, are you okay with this? Do you feel comfortable knowing that your contributions, w…
…
continue reading
As software designers and developers, how often do we think about — or even put ourselves in the position of — the users whom we’re creating software for? How often have we had to use a poorly designed software, regardless of whether it was a native or web-based app or API? In this episode, I'm sharing my frustration with poorly designed apps and q…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Will we end up with AI-generated technical debt?
49:13
49:13
Play later
Play later
Lists
Like
Liked
49:13
In this episode, unlike in previous ones, I have a guest on the show. I sit down with my friend Andrew Kew to talk about whether AI is a net positive or negative for us as developers, and for society more widely. It was such a solid discussion that I felt my position become a little more open-minded to AI having a positive impact. That said, it was…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Live Reload Go Projects with wgo is so worth it. Here's why.
5:49
5:49
Play later
Play later
Lists
Like
Liked
5:49
Building web apps in Go is extremely rewarding. No surprise there, right?! However, as Go’s a compiled language, to see changes, you need to recompile and restart them. Needless to say that’s quite tedious! With live reloading, it doesn’t need to be. In this episode, I'm talking about what live reloading is, what the benefits are, and how to get st…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
How to set build arguments in Docker Compose's config file
4:40
4:40
Play later
Play later
Lists
Like
Liked
4:40
You can specify build arguments in Dockerfiles to set variables required at build time. However, when you're using Docker Compose and one (or more) of the services in the configuration builds based on a Dockerfile, how do you specify build arguments for it? In this episode, I step through how to specify them in Compose configuration files. Links fr…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Deploy a Go app With a SQLite Database on Fly.io
10:58
10:58
Play later
Play later
Lists
Like
Liked
10:58
In this episode, the first for season 2, I talk about my recent experience deploying a Go app, backed by a SQLite database to Fly.io. Warts and all. Links from the episode Fly.io Persistable Volumes Fly.toml configuration The deployed application Want to grow your knowledge further? Check out the books and courses below, where you can grow your web…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking Software Consulting, Getting Into PHP, AWS, Laravel, and So Much More!
1:22:41
1:22:41
Play later
Play later
Lists
Like
Liked
1:22:41
In this episode, I had a wonderful chat with fellow Australian and former expat, Nigel James, about his journey from SAP consulting to PHP, and what life was like as a consultant over so many years in London. Our time there overlapped, but we never met. We also talked about why PHP is still an excellent choice to develop with, how Laravel is a Mark…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Chris Hartjes. Discussing How to Learn Software Testing, Pest PHP, PHPUnit & More!
1:39:24
1:39:24
Play later
Play later
Lists
Like
Liked
1:39:24
In this episode, I had a long and winding discussion about software testing with the legendary Grumpy Programmer Chris Hartjes. We talked about the importance of learning the essentials of software testing rather than focusing on a particular framework, as that makes your skills so much more transferable. We discussed how to approach testing; it's …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Arne Blankerts. Talking Container, Podman, Kubernetes, Linux Containers, and so much more!
54:56
54:56
Play later
Play later
Lists
Like
Liked
54:56
In this episode, I had the pleasure of continuing to talk with Arne Blankerts about one of my favourite topics: containers. We talked about his misgivings with Docker, his love of Podman, some of the history of containers and container plumbing in the Linux kernel, how Docker's architecture can lead to security issues, and so much more. If you're i…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Darryl Ware. The Changing Tech Landscape in Brisbane, Australia, Tech is Very Transitory, and C-based Languages
1:13:13
1:13:13
Play later
Play later
Lists
Like
Liked
1:13:13
In this episode, I had the pleasure of talking with my mate and colleague Darryl Ware, who I worked with in Brisbane (Australia) oh so many years ago, about the changing face of tech in Brisbane. He shared with me (as I've been living in Europe for the last 15 years) that it's changed from a broadly PHP-based city to a much more Golang-centric plac…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Doug Bierer. Teaching Yourself to Code, Microsoft vs. Unix/Linux, and Not Throwing More Hardware at the Problem
1:11:43
1:11:43
Play later
Play later
Lists
Like
Liked
1:11:43
In this episode, I had the pleasure of talking with Doug Bierer about his history in computing, a history which if you're a computing hardware or programming nerd, you're going to love. Doug shares how he got in to computing with the TRS-80 and Commodore 64. How he taught himself to program in Assembler during shifts when he had some quiet time, an…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Mihalis Tsoukalos. C-based Languages, Code Documentation, & Unix Over Windows
1:03:13
1:03:13
Play later
Play later
Lists
Like
Liked
1:03:13
In this episode, I had the absolute pleasure of talking with Mihalis Tsoukalos, a long-time Twitter friend and someone who's given me loads of advice, about software development. He shared with me so much about his journey with C-based languages, particularly Python, C, Go, & Rust. He talked about Linux shells including Bash and Zsh (and of course …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Oliver Davies. Horror Stories From the Road
1:17:19
1:17:19
Play later
Play later
Lists
Like
Liked
1:17:19
It was a pleasure to sit down and chat with Oliver, a full-stack software consultant based in South Wales, in the UK. We talked about so many things which I'm sure so many developers can relate to, even those who've only been developing for a relatively short period of time. Some key takeaways are: Both working remotely and working in an office hav…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Karl Hughes. Working With Intention In Your Career
54:33
54:33
Play later
Play later
Lists
Like
Liked
54:33
It was a pleasure to sit down and chat with Karl for this episode which went off on such a massive tangent at the start. Despite that, we felt it was worth keeping, as sometimes it's worth doing things a little differently. If you want to skip to the more tech/work/career aspect of the episode, jump up to about the 21 or 32 minute mark. Some points…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Andreas Heigl. How to Be a Better Public Speaker and Documentation-Driven Development
55:47
55:47
Play later
Play later
Lists
Like
Liked
55:47
It was a pleasure to sit down and chat with Andreas. He shared what it was like taking over phpugffm (the PHP user group in Frankfurt, Germany), why he believes some devs aren't involved in user groups, how to become a better public speaker, and an excellent form of development: Documentation-driven Development. Some key takeaways are: When you los…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Andrey Breslav. Designing Kotlin and How to Learn Software Development
53:43
53:43
Play later
Play later
Lists
Like
Liked
53:43
It was great to be able to talk to Andrey for this episode. He shared some of his journey to becoming a professional software developer (starting off with QBasic and Delphi), teaching software development to school kids, before moving to JetBrains to be the lead designer of the Kotlin language. Links Design Patterns: Elements of Reusable Object-Ori…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Cal Evans. How to Be a Better Communicator & WordPress Fun
46:21
46:21
Play later
Play later
Lists
Like
Liked
46:21
It was great to be able to sit down and chat with Cal again, as he shared so much great information, including: How he got started using WordPress How the WordPress API has changed WordPress How he gets podcasts out the door so quickly through scripting and proper processes; and How to be a better communicator. Some of the key things to know about …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Joel Clermont. The Principles of Effective Learning, Mastering Laravel + Much More!
54:57
54:57
Play later
Play later
Lists
Like
Liked
54:57
Links Mastering Laravel Learning How to Learn NoCompromises.io No Compromises podcast SourceDive.com Midwest PHP ncurses installer Guests: Joel Clermont (@jclermont). Hosted By: Matthew Setter. Thanks for tuning in to Free the Geek. If you'd like to be a guest on the podcast or know someone who'd make a great guest, email me: matthew@matthewsetter.…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Stuart Herbert. Psychological Safety, Before there were PRs + Loads More!
33:57
33:57
Play later
Play later
Lists
Like
Liked
33:57
Links NASA The Australian Weather Service (now the Bureau of Meteorology) Psychological Safety Code Reviews Pull Requests (PRs) Red Hat Alta Vista Windows 95a The Gnome Bar Ganbaro Digital Ltd Guests: Stuart Herbert (@stuherbert). Hosted By: Matthew Setter. Thanks for tuning in to Free the Geek. If you'd like to be a guest on the podcast or know so…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Steve McDougall. Streaming, Learning Laravel and PHP + Much More!
50:24
50:24
Play later
Play later
Lists
Like
Liked
50:24
Links Steve on YouTube Laravel Go Rust minicli Bash Call of Duty Laravel News Guests: Steve McDougall (@JustSteveKing). Hosted By: Matthew Setter. Thanks for tuning in to Free the Geek. If you'd like to be a guest on the podcast or know someone who'd make a great guest, email me: matthew@matthewsetter.com. This podcast is produced by Matthew Setter…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Matthew Turland. TypeScript, Functional Programming + Loads More!
36:06
36:06
Play later
Play later
Lists
Like
Liked
36:06
Links Functional Programming The Principle of Least Surprise TypeScript Web Scraping with PHP, 2nd Edition The Spark framework The Sinatra framework The Ada language Linus Torvald's talk at Google Guests: Matthew Turland (@elazar). Hosted By: Matthew Setter. Thanks for tuning in to Free the Geek. If you'd like to be a guest on the podcast or know s…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
How to Create a Markdown Blog in PHP With the Slim Framework and Why You Should Love the Slim Framework
38:50
38:50
Play later
Play later
Lists
Like
Liked
38:50
In this episode, I step through a recent post that I wrote for the Twilio blog showing how to build a Markdown-based blog with the Slim Framework and PHP's Iterators - and really show the love for Slim Framework. Why? Because I invested so much time in writing the code behind the tutorial, researching the various components that I used, writing, ed…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Using Composer Path Repositoriess While Running PHP Apps With Docker Compose
17:50
17:50
Play later
Play later
Lists
Like
Liked
17:50
Docker Compose is an excellent way of deploying apps both on local development machines and to remote environments, but does it play nice with Composer path repositories. Yes. They sure do. In this week's episode I shared a little experience I had during the week where I didn't update my docker-compose.yml file to account for the fact that the path…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Docker Essentials (the book) is READY. Let's have a celebratory episode
39:24
39:24
Play later
Play later
Lists
Like
Liked
39:24
This is a bit of a fireside-chat style episode, with not much tech talk going on. Rather, it's a bit of a look behind-the-scenes at what goes in to creating technical books and courses, such as a bit about what it takes to set up a home recording studio (on a budget) that still delivers the level of professionalism that you'd expect. So grab your f…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Docker Essentials (the Book) is READY (and what I learned about docker build recently)
28:47
28:47
Play later
Play later
Lists
Like
Liked
28:47
It sure feels like a lifetime since I began planning out Docker Essentials all those months ago. But it's ready. So, I feel that it's only fair to talk about it, given the number of hours that have gone in to create it. If you haven't already, grab your copy today and get in to the fun that is Docker! But it's not all self-promotion in this episode…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Recent experiences and learnings with tailwindcss
24:27
24:27
Play later
Play later
Lists
Like
Liked
24:27
In this episode, I share some of my recent experiences and learnings with tailwindcss, my frontend, css framework of choice, specifically building a fully responsive design for a new page on https://webdevwithmatt.com. The lowdown is that I didn't follow the key advice from tailwindcss and start with a small device first, and then work up to a larg…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Sharing the love for the responsive design mode in modern web browsers
25:17
25:17
Play later
Play later
Lists
Like
Liked
25:17
In this episode, I share my absolute love and affection for responsive design mode in modern browsers, talk about what it is, how it works, some of its limitations, but most importantly, why you should use it, if you're not already. Links from the episode Firefox's Responsive Design Mode Chrome/Chromium's Device Mode Safari's Responsive Design Mode…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
How to tell a Docker client to communicate with a remote Docker daemon
18:10
18:10
Play later
Play later
Lists
Like
Liked
18:10
While building my first GitHub Action-based workflow recently, I struggled until I took the time to relearn - and re-appreciate - how the Docker client and daemon communicate. In this episode, I share: How they work How the understanding helped me build a solid workflow to deploy webdevwithmatt.com Some of the different ways you can tell the Docker…
…
continue reading
In this, the series introduction, I wanted to tell you what the podcast is all about, what you're going to get by subscribing; generally, give you a feel so that you "try before you buy", if you will. Hosted and produced by: Matthew Setter. Website: https://webdevwithmatt.com Follow us on: Twitter, Instagram, and LinkedIn. If you like the podcast, …
…
continue reading
We should be back with a new season of the podcast after the Summer but will let you know, exactly, when that will be when we have a firm date set. Hosted By: Benjamin Eberlei and Matthew Setter. Thanks for tuning in to the Undercover ElePHPant. If you'd like to be a guest on the podcast or know someone very knowledgeable in writing highly performa…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Five Tips When Starting To Work From Home
21:21
21:21
Play later
Play later
Lists
Like
Liked
21:21
So, what are those tips? Have a dedicated workspace, or work area - one that is separate from the rest of your home Get the tools you need - and make sure you have a decent internet connection! Have a regular routine (both a start and end time and how you kick off your day) Talk to those who you live with so that you educate them about how working …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking Background Processes and Workers in PHP With Samuel Roze
29:55
29:55
Play later
Play later
Lists
Like
Liked
29:55
Samuel shared a load of excellent advice that you can start using today in your PHP applications, including: The common challenges with background processes and PHP? Why background processes & workers can be an important aspect of PHP applications? What angel processes are How to handle failed background processes How to handle memory in PHP with l…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking about PHP-FPM Tuning with Arne Blankerts
28:38
28:38
Play later
Play later
Lists
Like
Liked
28:38
Arne shared a load of excellent advice that you can start using today in your PHP applications, including: What PHP-FPM is What differentiates PHP-FPM from Apache/mod_php? NGINX's different pool types (dynamic, static, and ondemand) How to configure PHP-FPM for high-performance and throughput Using multiple PHP-FPM pools in the same application? Pl…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Stefan Koopmanschap. Starting a Software Dev Company, Conference Speaking, Running User Groups and Loads More
46:44
46:44
Play later
Play later
Lists
Like
Liked
46:44
Here are some key takeaways: To start a user group, you only need three things: 1) a location, 2) a speaker, and 3) food. That’s it! What's also helpful is a mailing list to stay in touch. In his talks he tells a story. But he's also a perfectionist; He wants to make as much of an effort as he can. In the early days, he enjoyed speaking and did it …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking Logging for Production Applications + Best Practices with Jordi Boggiano
32:56
32:56
Play later
Play later
Lists
Like
Liked
32:56
In this episode, Benjamin and Matthew talk with Jordi Boggiano about logging in production applications as well as logging best practices. We also talk about logging formats, filtering log messages, Monolog and loads more! Jordi shared a load of excellent advice that you can start using today in your PHP applications, including: How to get started …
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Matthew Turland. Updating Technical Books and Programming in Multiple Languages + Loads More!
41:55
41:55
Play later
Play later
Lists
Like
Liked
41:55
In this episode, I talk with Matthew Turland about the effort involved in updating one of his technical books and programming in multiple languages (PHP and Ruby) plus loads more! Matthew shared a load of excellent advice in this warm, fireside chat. Links Matthew on Twitter (@elazar) matthewturland.com Web Scraping with PHP, 2nd Edition | php[arch…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Matt Stauffer. Laravel, Hiring Developers + Loads More!
46:54
46:54
Play later
Play later
Lists
Like
Liked
46:54
In this episode, I talk with Matt Stauffer about how he started Tighten, how he got into Laravel, why he's such an active member of the community, what he looks for when hiring developers and loads more! Matt shared a load of excellent advice that you can start using today in your career. Links Tighten onramp.dev Laravel Up and Running, by O’Reilly…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking Shared-nothing and Shared Everything Architectures + Bref with Matthieu Napoli
27:38
27:38
Play later
Play later
Lists
Like
Liked
27:38
In this episode, Benjamin and Matthew talk with Matthieu Napoli about Shared-nothing and Shared Everything Architectures. We also talk about Bref, Swoole, ReactPHP and loads more! Matthieu shared a load of excellent advice that you can start using today in your PHP applications, including: What Shared-nothing and Shared Everything architectures are…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Integrating with Third-Party APIs with Nils Adermann
24:48
24:48
Play later
Play later
Lists
Like
Liked
24:48
In this episode, Benjamin and Matthew talk with Nils Adermann about integrating with third-party APIs in PHP. Nils shares some excellent advice, including: Handling retries and timeouts Efficiently and effectively working with multiple API vendors How to work with vendors when their actions break your apps Different types of responses (the good and…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Retries and Timeouts with Bastian Hofmann
23:41
23:41
Play later
Play later
Lists
Like
Liked
23:41
In this episode, Benjamin and Matthew talk with Bastian Hofmann about handling retries and timeouts in PHP. Bastian shares a load of great advice, including: Having dedicated hosts for certain traffic Distinguishing between normal users and admin users Offloading work to asynchronous jobs Default socket timeouts and max execution times Automatic re…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
How to Run PHP Applications on Multiple Servers
46:20
46:20
Play later
Play later
Lists
Like
Liked
46:20
In this episode, Benjamin and Matthew talk with Robert Douglass and Larry Garfield from Platform.sh about running PHP applications on multiple servers. Robert and Larry share a load of excellent advice, including: - Why you need to use Load Balancers (along with what they are and some of the key options) - How PHP is exceptionally well suited to be…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
PHP Performance with Marco Pivetta (ocramius)
29:53
29:53
Play later
Play later
Lists
Like
Liked
29:53
In this episode, Benjamin and Matthew, talk with Marco Pivetta (ocramius) about: PHP 7.4's new preloading feature: what it is, how it works, the benefits and drawbacks of using it The speed differences between different versions of PHP (especially in 7.x) The difference between OPcache and Preloading How Composer's autoloader may soon be a thing of…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Talking Garbage Collection with Derick Rethans
25:22
25:22
Play later
Play later
Lists
Like
Liked
25:22
Thanks to PHP being an interpreted language and it that it has a garbage collector, PHP developers don't often have to think about memory management. Unlike developers in compiled languages, such as C/C++, we don't have to give that much thought to memory allocation and deallocation. However, it's helpful to have a broad understanding of how garbag…
…
continue reading
Welcome to the introductory episode of The Undercover ElePHPant. This is the welcome episode, where we give you the rundown on what the podcast is about, who we, your lovely podcast hosts, are and what you can expect to hear. So, let's get started. This podcast aims to do three, core, things: Uncover details and secrets of scaling PHP and how to ma…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
Episode 44 - What Are Delegator Factories and Why You Should Use Them
2:49
2:49
Play later
Play later
Lists
Like
Liked
2:49
Ever wanted to dynamically add functionality to services you retrieve fromyour DI container — without creating custom versions or long inheritancehierarchies? Do you want to do it in a simple, clear, and well structured way? If so,then tune into this episode and learn about delegator factories. They're anadvanced and very powerful technique for han…
…
continue reading
![Artwork](/static/images/128pixel.png)
1
With Najaf Ali. Do I Start a Software Consultancy? The Warts and All Account.
51:41
51:41
Play later
Play later
Lists
Like
Liked
51:41
In this episode, I have an extremely interesting, inspiring, but most of all educational chat with my mate Najaf Ali, founder of Happy Bear Software, about what it's like to go from being an independent software consultant and freelancer to running a software consulting business. ★ Support this podcast ★…
…
continue reading