PHP Yorkshire returns for its third year
CQRS and Event Sourcing: from concepts to working concept
Workshop by Marco Pivetta in Workshop (12 hour)
CQRS and Event Sourcing are challenging if approached for the first time, and especially if done from scratch. This tutorial will give you an understanding of what CQRS and ES are, including their complexities, advantages and pitfalls. We will help you with modelling, designing and implementing an application relying on these architectural patterns, guiding you through: Domain analysis Involved architectural components Data flow Synchronous/Asynchronous dispatching Implementing domain logic with aggregates Projections Scaling Testing https://www.phpyorkshire.co.uk/people/marco-pivetta/
Jenkins CI/CD with Jenkins X
Workshop by Paul Dragoonis in Workshop (12 hour)
Jenkins X is a project built on top of Jenkins designed to work in conjunction with Docker and Kubernetes. In this workshop, you will learn how to set up your own continuous integration and deployment pipelines using Jenkins X During the first day, you'll learn everything you need to know - all the underlying technologies; Docker, Jenkins and Kubernetes. In the second day, we'll build upon this knowledge while setting up our own Jenkins X cluster in the cloud. Workshop attendees should have a basic understanding of Docker and CI/CD already, however no existing knowledge of Kubernetes is required (although beneficial) https://www.phpyorkshire.co.uk/people/paul-dragoonis/
Websockets calling: Building a Real-time application with PHP
Workshop by Mike Lehan in Workshop (6 hour)
GraphQL Server in PHP with Symfony Flex
Workshop by Renato Mefi in Workshop (6 hour)
"GraphQL represents a massive leap forward for API development." says GitHub. What can we do with it in PHP? This workshop will show you from the basic setup of your GraphQL Server with Symfony, possibly teach you some tricks on Symfony Flex and then start exploring a lot of the powers of GraphQL, handling a more complex schema, treating performance, security and versioning (Schema deprecation), if in time we'll also check some cool tech using promises to fetch data and get a grasp on how to avoid the n+1 issue on APIs. If you're an API developer this workshop might change your way of thinking about it! https://www.phpyorkshire.co.uk/people/renato-mefi/
TDD, DDD & Teamwork
Workshop by Pim Elshoff, Joop Lammerts in Workshop (3 hour)
Do you have difficulties writing effective, helpful tests up front? Have you heard of Domain Driven Design, but are you still unsure when and where to use value objects? Perhaps you've read some books or blog posts, but practical experience can be hard to come by. TDD and DDD are key skills for team members of highly effective, performant teams. Joop and Pim have done dozens of smaller and larger projects using TDD and DDD. They would love to share these good (and bad!) experiences with you! In this workshop you will learn the skills of TDD and DDD, and how to apply them effectively in a team. Asking the rights questions, writing useful tests and creating meaningful code. We can't wait to help you grasp TDD, DDD & Teamwork! https://www.phpyorkshire.co.uk/people/pim-elshoff-joop-lamerts/
Building privacy-conscious projects
Workshop by Heather Burns in Workshop (3 hour)
Protecting your users’ data is the most important thing you will ever do as a developer, but it isn’t always easy to know where to start. Last year at PHP Yorkshire, we learned how to integrate the Privacy by Design framework into your development workflow. This year we're expanding on those lessons to learn how to integrate best privacy practice across your project on the governance, project, and code levels. You'll learn how to define a healthy approach to project privacy; integrate privacy as a fundamental project value; evaluate your project for gaps in resourcing and expertise; and access the growing body of code, design, and resource libraries available to help you along the way. https://www.phpyorkshire.co.uk/people/heather-burns/
Talk by Chris Riley in Track 1 (30 minutes)
Welcome to PHP Yorkshire 2019.
A Meritocracy of Pull Requests
Talk by Lorna Mitchell in Track 1 (50 minutes)
We often speak of open source as a meritocracy; everyone's patches are welcome. However with git used in the workplace as well as open source, being good at pull requests is a key career skill for all developers. This talk combines git tips, psychology and years of experience to present key information on working with pull requests. How to open one in a way that will make it more likely to be accepted without drama. How to review and evaluate a pull request so you don't regret it in the morning. How (and if) to merge pull requests, including those big words like rebasing and squashing. And how to close them, merged or not. This talk recommended for everyone who uses pull requests and wants to work on this key skill.
An introduction to Graph Databases in PHP, using Neo4j
Talk by Michelle Sanver in Track 2 (50 minutes)
Traditional relational databases — ironically — are not that good at the complex relationships some modern applications need. Multiple joins and complex sub-queries can gradually take a toll on performance. Graph Databases, on the other hand, are all about relationships. In this talk we will look at using the popular Neo4j graph database with PHP to build efficient relational data for OmNomHub: not your average recipe site.
Top 10 PHP Classic Traps
Talk by Damien Seguy in Track 1 (50 minutes)
PHP has its own treasure chest of classic mistakes that surprises even the most seasoned expert : code that dies just by changing its namespace, strpos() that fails to find strings or arrays that changes without touching them. Do that get on your nerves too? Let’s make a list of them, so we can always teach them to the new guys, spot them during code reviews and kick them out of our code once and for all. Come on, you’re not frightening us?
Build your own Neural Network, with PHP!
Talk by Vítor Brandão in Track 2 (50 minutes)
Curious about all the hype around Machine Learning and Artificial Intelligence? Heard of "Neural Networks" and "Deep Learning" but confused about what it really means? In this talk, you'll see what Artificial Neural Networks (ANN) look like and how they can "learn". And along the way, you'll discover how you can build your own ANN, with PHP of course!
Testing Legacy Code & Safe Refactoring
Talk by Katy Ereira in Track 1 (50 minutes)
"I can't test this code because it's legacy. I need to update the code to make it testable. How can I manage that, without breaking existing functionality? I'll need to write some tests, but... argh!" We've all been there! In this talk we'll look at safe ways to refactor 'untestable' code to make it testable - without breaking any existing functionality. Promise! Then, further changes will be much easier!
Building a cloud-friendly application
Talk by Larry Garfield in Track 2 (50 minutes)
The days of hand-crafted artisanal servers are long over. Modern web applications need to be able to run on many different servers without code changes. Not just different hosting providers, but different environments on the same hosting provider. Whether you're using a legacy dev/stage/prod setup or a modern branch-is-environment host, modern hosting imposes some requirements on your application design but also offers a huge potential for new and powerful tools. In this session, we'll explore some key guidelines for building a cloud-friendly application, as well as look at some architectural options that a modern hosting platform enables.
(1 hour, 20 minutes)
Food to eat.
The Big "Why Equal doesn't Equal" Quiz
Talk by Juliette Reinders Folmer in Track 1 (1 hour)
So you think you know PHP? But do you really? We all compare and test data on nearly every other line in our code, be it input validation, an if-statement, a switch or determining what to display and how. So of course we are all experts on how to do these tests and comparisons…. Or are we? No matter whether you are a beginner or an expert, come and join in the fun for the Big “Why equal doesn’t equal” Quiz, test your knowledge and learn about defensive programming and the quirks of a loose type programming language along the way.
Building Modular Architectures
Talk by Asmir Mustafic in Track 1 (50 minutes)
Long story short: an application is born, an application grows, an application becomes unmaintainable. Often the functionalities added to the application are independent-enough but they end up anyway in the main code base increasing the code size, complexity and coupling. A common strategy to raise application maintainability and extensibility is to have external plugins/bundles/modules keeping the application core as smallest as possible. In this session you will see challenges and solutions when building plugin-based application architectures. By allowing “plugins” you will get third party extensions, independent release cycles, less dependencies and many other advantages.
API Standards 2.0
Talk by Michael Heap in Track 2 (50 minutes)
We’re all familiar with things like HTTP codes and content types, but there’s so much more we can do when developing an API to make life easier for consumers. How many times have you used an API only to find out that every endpoint is slightly different - some use snake_case, others camelCase, sometimes the field is called id, sometimes it’s user_id. How about pagination? Error responses? What about API documentation? Trying to standardise on all these things can kill an engineering team. There are so many options out there it’s difficult to know where to start. Come along and learn what works for our team! We’ll cover contentious topics (should the version be in the URL or a header?), lesser-known standards that are great (RFC 7807 springs to mind) and a couple of things that aren’t an issue right up until they’re a really big issue (like pagination).
SOCcing: Responding to a Cyber Incident
Talk by Clinton Ingrams in Track 2 (50 minutes)
The media is full of stories about “hackers” finding and exploiting vulnerabilities in web-accessible systems – not just web applications. You may also have been the target of such an attack. How can you prepare to deal with such incidents, and who are you going to call when you notice you are the latest victim? What is a SOC and how does it relate to CKC analysis? What is the lifecycle of a cyber security incident? Who should be responsible for overseeing a coordinated response? All these questions, and many more, will be answered in the talk.
Thinker, Tester, Lawyer, Spy
Talk by Daniel Shaw in Track 1 (50 minutes)
Those teams working in an agile fashion will usually bring the tester in as early as possible in the development cycle — often during the planning stages — to find potential problems before they create work to fix. But checking for potential technical problems is only a small part of what the QA team can do in this stage. The QA team has a wide scope to make the product as good as it can be. This allows the tester to use not just their technical knowledge, but their non-technical knowledge, in their quest for quality. In this talk, we will be outlining those non technical disciplines that a tester has, from historian to lawyer, and even spy. Testers will come away from this talk full of ideas of questions to ask of their product, while other members of the team will come away with a greater understanding of the knowledge a good tester can bring to the table. Items covered will include accessibility, data protection, misuse of a product, and being culturally sensitive.
The Way We Teach Tech
Talk by Jeroen v.d Gulik in Track 1 (1 hour)
Starting your journey as a programmer can be daunting and overwhelming. There is so much to learn, so many contradicting sources of information, and so many different opinions about everything. Most of the time we don’t get the answers we need or want, but we get vague options that don’t really help us all that much. In this talk I discuss the problems we face when teaching others, the problems we face as an industry in a disparity between juniors and seniors and how we can vastly improve the way in which we teach our peers and educate our juniors.