Talks

Naja 3.0

The web platform is ever-evolving. In this talk, I discuss what that has meant for Naja in the recent years, which new features led to a new major release, and what backwards incompatible changes you should be aware of when upgrading. And by the end of the talk, I had released Naja 3.0 into the wild.

How to keep tabs on production

Production is a magical place. People go there and do things, and sometimes, despite the best-typed and tested code, a bug slips through – and it's likely to be all the more bizarre the higher the quality of your code. In such moments, it's invaluable to have a place to find everything that might be relevant to the situation. This talk shows in theory and in practice how to approach logging so that you have perfect oversight of production and no such bug remains an unsolved mystery. Co-presented with Marek Humpolík.

The future is passwordless

This talk introduces passkeys, a technology that brings a solution to all problems of passwords: their are unbelievably convenient to use, resistant to data breaches and phishing, and practically eliminate the possibility of human error. All this building upon open standards and existing APIs.

Generics in PHPStan

Generics: an ingenious tool of abstraction for some, a source of nightmares for some, and a great unknown for others. And yet, it's likely that most of us have used them. This talk explains what generics are and illustrates how to use them in PHP thanks to PHPStan.

Keep yourself DRY: How not to repeat yourself but not 💩 up abstraction

As developers, we deduplicate code to achieve abstraction. But far too often, abstractions tend to stick around even after requirements change in a way that renders the particular abstraction obsolete and impractical. This talk is a gentle reminder to always question your abstractions in the face of requirement changes.

What's new in PHP 8+

This talk shows all the new features of PHP 8, PHP 8.1 and the soo-to-be-released PHP 8.2, and discusses what's new in the ecosystem and funding of PHP's development. Most importantly, it argues why you should upgrade asap and keep upgrading often.

Sealed classes in PHP

A feature likely known to Kotlin developers, sealed classes and interfaces provide a way of enforcing restricted inheritance hierarchies. With the most recent versions of PHPStan, we can use statically analyzed sealed classes in PHP!

Generics in PHPStan

Generics: an ingenious tool of abstraction for some, a nightmare for others. And yet, it's likely that most of us have used them. This talk explains what generics are and illustrates how to use them in PHP thanks to PHPStan, covering everything from the most trivial situations to advanced use cases such as type bounds, variance, type projections, etc.

When DateTime is not enough: working with time comfortably and safely

Pretty much every web application needs to work with date and time values in some way. But time is not as straightforward nor easy as most developers think, and the standard APIs in web languages do not make things any easier. Luckily, there is an alternative, domain-driven solution, thanks to which we won't waste time on finding temporal bugs ever again!

Tables: statically typed access to database

We've found a way to query the database – create, update, and delete rows, and fetch them based on complex conditions – in a way that can be statically analyzed and checked. And all this without writing a single line of boilperplate code.

Generate yourself a strict application

A strict separation or responsibilities usually comes at a cost of writing plenty of boilerplate code: domain value objects, commands, queries, events, DTOs – all immutable and statically typed. This talk introduces a tool that can generate all this boilerplate for you.

Naja: slow start

This talk shows how to AJAX-ify a Nette Framework-powered web application using Naja, and shows and explains its various features and extension points.

DI services don't need names

In this talk, I discuss dependency injection and show how Nette Framework's DI container leverages PHP's type system to truly obsolete artificial service identifiers.

Don't waste time with DateTime: how not to shoot yourself in the foot over time

Pretty much every web application needs to work with date and time values in some way. But time is not as straightforward nor easy as most developers think, and the standard APIs in web languages do not make things any easier. Luckily, there is an alternative, well-thought solution, thanks to which we won't waste time on finding temporal bugs ever again!

Beyond DateTime: a bulletproof approach to date and time

In one way or another, every web application works with date and time. But time is tricky, time zones are trickier, and the standard date-time APIs do not really make things easy. Luckily, Java has already worked it out for us! Let’s find out how to handle date and time values, display them to the user, and store them in the database, all without wasting hours on temporal bugs ever again. This talk discusses the different concepts of time, the problems of standard APIs, and presents an alternative, more robust approach inspired by Java’s proven Date and Time API.

Beyond Date: no more temporal bugs

Pretty much every web application needs to work with date and time values in some way. But time is not as straightforward nor easy as most developers think, and the standard APIs in web languages do not make things any easier. Luckily, there is an alternative, well-thought solution, thanks to which we won't waste time on finding temporal bugs ever again!

Naja 2.0

This talk discusses the past of Naja, an AJAX library for Nette Framework, and reveals the future – Naja 2.0. Major changes and BC breaks are shown along with migration paths, and a timeframe is given for the end of life of Naja 1.x.

Beyond DateTime: a bulletproof approach to date and time

Pretty much every web application needs to work with date and time values in some way. But time is not as straightforward nor easy as most developers think, and the standard APIs in web languages do not make things any easier. This talk discusses different concepts of time and presents a more robust and less error-prone approach to working with date and time in PHP.

Don’t just float, swim with the floating point

They say you should understand floating-point precision by 35.0000000000014. This talk discusses how floats are (im)precise and why, demonstrates the problems you inevitably encounter when doing math with floats, and presents ways to prevent those problems by using more proper data types and structures.

AJAX (and front-end) in Nette, the simple and modern way

This talk brings a practical example of how to use Naja to implement AJAX in a Nette Framework application. On top of that, it touches related topics of the front-end development ecosystem in 2019, namely Webpack and its integration into Nette Framework.

Naja: thin, modern AJAX library for Nette

A year and a half after I had introduced first public release of Naja, a tiny AJAX library for Nette Framework, this talk gives a recap of what the library can and cannot do, and provides a sneak peek into its future.

The frameworkless application

The activities of PHP communities made it possible to build robust applications, uniquely composed of little bits, without relying on a big framework. This talk discusses how they work and if they are a good approach.

Editor-based HTTP client in PHPStorm

This very short demo introduces the editor-based HTTP client in PhpStorm (or other JetBrains IDEs) and its capabilities, especially using response handler scripts to test a chain of successive requests.

How to write even thinner APIs in PHP

In a previous talk about HTTP APIs in PHP, I showed a middleware-based approach using Slim Framework. A year later, this talk discusses what's new and how APIs can be written even thinner without any framework at all, utilizing PSR-15 interfaces.

Message queues: Leave the hard work for later

This talk is basically a message queues 101. It introduces the concept of message queues, discusses when and how they are useful, and talks about various message queue implementations and their bindings to both vanilla PHP and some of the most popular PHP frameworks.

Tick tock, goes the clock

Pretty much every web application needs to work with date and time values. Time is, however, a tricky thing and there are many challenging issues one has to remember. This talk discusses them and tries to aid people towards bulletproof datetime handling.

Don’t be afraid of JavaScript

I have been slowly transitioning from PHP towards JavaScript. I had to overcome the so-called Javascript fatigue and learn my way around the plethora of packages. This talk walks you through the essentials of the modern JS ecosystem and why they are needed.

Naja: modern AJAX library for Nette Framework

When I needed an AJAX library for Nette Framework, nette.ajax.js had unnecessary dependencies (jQuery) and nittro was too complex. Naja comes inbetween: it is a simple modern library, but at the same time it’s easily extensible for any use case.

Writing truly slim APIs in Nette Framework

Writing APIs using Nette Framework’s presenters can easily lead to bloated code and badly distributed responsibilites. This talk shows a different approach using Slim Framework, PSR-7 and middlewares, wired into Nette DI container to allow reuse of services.

Webpack ♥ Nette Framework

Webpack is a module bundler for more than just Javascript. This talk explains the concepts and usage of Webpack and introduces a library that helps integrate Webpack-built assets into Nette Framework in a way that both developers and users are happy.

File upload for the 21st century

Handling large amounts of file uploads is quite a challenge for both ends of web development. This talk shows a solution using pure HTML5 awesomeness on the front-end and Nginx’s efficient upload module on the back-end.

Hello, I am Jiří Pudil

My photo

I am a full-stack web developer from Brno, Czech Republic. I contribute to open-source projects, write a technical blog, and speak at meetups and conferences.

Learn more about me
Content licensed under