When developers are introduced to Object Oriented Programming, one of the first things that happens is that they are taught that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real world settings and go beyond cars and dogs, and see how to use Object Oriented Programming properly in PHP. Traits, Composition, Inheritance, none of it is off limits! (No animals were harmed in preparation for this talk, though there was mention of showing how a dog can have wheels. And yes, the title is supposed to be Cars and Dogs.)
When developers are introduced to Object Oriented Programming, one of the first things that happens is that they are taught that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real world settings and go beyond cars and dogs, and see how to use Object Oriented Programming properly in PHP. Traits, Composition, Inheritance, none of it is off limits!
OOP Is More Then Cars and Dogs - Midwest PHP 2017Chris Tankersley
When developers are introduced to Object Oriented Programming, one of the first things that happens is that they are taught that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real world settings and go beyond cars and dogs, and see how to use Object Oriented Programming properly in PHP. Traits, Composition, Inheritance, none of it is off limits!
When developers are introduced to object-oriented programming, one of the first things they are taught is that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real-world settings and go beyond cars and dogs to see how to use object-oriented programming properly in PHP. Traits, composition, inheritance – none of it is off limits!
Back to the basics: Modelando nuestro dominio #scbcn19CodelyTV
SOLID, Arquitectura Hexagonal, CQRS, DDD… total, que llega el momento de modelar nuestras entidades y servicios, y nos hacemos un lío que no sabemos ni por dónde empezar .
Sensación de bloqueo. ""Hostia, llevo 3 horas pensando y dibujando posibles alternativas y ninguna me convence. Al final será verdad que no tengo ni idea "".
Planteamos hipótesis erróneas del estilo… _si lo hago con DDD ""de verdad"" la query no aguanta ni 100 peticiones concurrentes, pero esto otro me parece una chapuza, y esto otro viola 7 de los 5 principios SOLID… ¡¡¡mmmmmamaaaaaa!!! ._
Keep calm.
En esta charla plantearemos distintos escenarios prácticos y reales. Casos de uso de esos que se pueden ver en un screenshot y donde la gran mayoría de desarrolladores web y móviles nos podemos ver identificados:
* Listado de items con 652342 filtros y combinatorias (backoffices, páginas de categoría o filtrados, búsquedas…)
* Tipologías de items con partes comunes pero pequeños matices (productos de distintas categorías por ejemplo)
* Distintas opciones a la hora de modelar nuestras interfaces para hacerlas realmente agnósticas de la infraestructura que hay detrás
En fin. Cositas que nos han supuesto un reto a la hora de plantearlas, que hemos fallado modelando y hasta que no lo hemos tenido picado no nos hemos dado cuenta de la magnitud de la tragedia, y batallitas que ojalá puedan serle útiles a alguien
Everyone talks about raising the bar on the quality of code, but it’s hard to implement when you have no clue where to start. This talk is geared toward all levels of developers, and will teach you how to improve by using the right tools effectively – a must-attend for any PHP developer who wants to scale up their quality.
Michelangelo will tell us about Quality Assurance for PHP in general and show how different QA-related actions can be performed using PhpStorm IDE. The webinar will cover topics including:
Revision control
Syntax checking
Code documentation
Unit Testing with PHPUnit
Measuring code health with a variety of tools
Profiling and debugging with Xdebug
Automation with Phing
Team work and more.
When developers are introduced to Object Oriented Programming, one of the first things that happens is that they are taught that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real world settings and go beyond cars and dogs, and see how to use Object Oriented Programming properly in PHP. Traits, Composition, Inheritance, none of it is off limits!
OOP Is More Then Cars and Dogs - Midwest PHP 2017Chris Tankersley
When developers are introduced to Object Oriented Programming, one of the first things that happens is that they are taught that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real world settings and go beyond cars and dogs, and see how to use Object Oriented Programming properly in PHP. Traits, Composition, Inheritance, none of it is off limits!
When developers are introduced to object-oriented programming, one of the first things they are taught is that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real-world settings and go beyond cars and dogs to see how to use object-oriented programming properly in PHP. Traits, composition, inheritance – none of it is off limits!
Back to the basics: Modelando nuestro dominio #scbcn19CodelyTV
SOLID, Arquitectura Hexagonal, CQRS, DDD… total, que llega el momento de modelar nuestras entidades y servicios, y nos hacemos un lío que no sabemos ni por dónde empezar .
Sensación de bloqueo. ""Hostia, llevo 3 horas pensando y dibujando posibles alternativas y ninguna me convence. Al final será verdad que no tengo ni idea "".
Planteamos hipótesis erróneas del estilo… _si lo hago con DDD ""de verdad"" la query no aguanta ni 100 peticiones concurrentes, pero esto otro me parece una chapuza, y esto otro viola 7 de los 5 principios SOLID… ¡¡¡mmmmmamaaaaaa!!! ._
Keep calm.
En esta charla plantearemos distintos escenarios prácticos y reales. Casos de uso de esos que se pueden ver en un screenshot y donde la gran mayoría de desarrolladores web y móviles nos podemos ver identificados:
* Listado de items con 652342 filtros y combinatorias (backoffices, páginas de categoría o filtrados, búsquedas…)
* Tipologías de items con partes comunes pero pequeños matices (productos de distintas categorías por ejemplo)
* Distintas opciones a la hora de modelar nuestras interfaces para hacerlas realmente agnósticas de la infraestructura que hay detrás
En fin. Cositas que nos han supuesto un reto a la hora de plantearlas, que hemos fallado modelando y hasta que no lo hemos tenido picado no nos hemos dado cuenta de la magnitud de la tragedia, y batallitas que ojalá puedan serle útiles a alguien
Everyone talks about raising the bar on the quality of code, but it’s hard to implement when you have no clue where to start. This talk is geared toward all levels of developers, and will teach you how to improve by using the right tools effectively – a must-attend for any PHP developer who wants to scale up their quality.
Michelangelo will tell us about Quality Assurance for PHP in general and show how different QA-related actions can be performed using PhpStorm IDE. The webinar will cover topics including:
Revision control
Syntax checking
Code documentation
Unit Testing with PHPUnit
Measuring code health with a variety of tools
Profiling and debugging with Xdebug
Automation with Phing
Team work and more.
Towards Functional Programming through Hexagonal ArchitectureCodelyTV
Slides of for the talk "Towards Functional Programming through Hexagonal Architecture" delivered at the Software Crafters Barcelona 2018 conference #scbcn18 by Juanma Serrano from Habla Computing and Javier Ferrer from CodelyTV
PHP 7 will be the stricter PHP version, with over 400 error messages. They range from reporting a fatal compilation error to helping with strict standards. During the session, we'll review old-timer messages that are still plaguing us, new ones that are not linked to new features, and even a few that are disappearing. Funny at times, more serious at others, this session will help understand the messages that PHP reports and how to take advantage of them for better coding.
These are the slides for a workshop I’ve given at a couple conferences, explaining how Twig works to people who don’t necessarily come from a programming background.
Caldera Learn - LoopConf WP API + Angular FTW WorkshopCalderaLearn
The WordPress REST API combined with a JavaScript MVC framework opens up new possibilities for better, more intuitive interfaces that solve scaling and other challenges. In this workshop we will use AngularJS, the best — because we said so — and the WordPress REST API to create custom applications. First we will walk through creating custom API routes and endpoints to interact with your data, followed by two unique ways to use AngularJS to create better interfaces for your projects. This will include a decoupled front-end and single page web app as a plugin interface.
Learn about some of the new features in Laravel 5, with a focus on the command pipeline, including a few opinions about how to use the pipeline in the best possible way to enforce a solid separation of concerns.
Diving into HHVM Extensions (PHPNW Conference 2015)James Titcumb
HHVM is currently gaining popularity at quite a pace, and it's a pretty exciting time for PHP runtimes. Have you ever wondered what is going on beneath this slick and super-speedy engine? I wondered that myself, so I dived into the internals of HHVM, discovering a treasure trove of awesome stuff. In this talk, I'll show you how HHVM itself works with a guided tour of the codebase, demonstrating how it all pieces together. I'll also show you a couple of ways to write your own incredible HHVM extension. You don't need to know C++ to understand this talk - just PHP language knowledge is enough.
PHP 7 will be the stricter PHP version, with over 400 error messages. They range from reporting a fatal compilation error to helping with strict standards. During the session, we'll review old-timer messages that are still plaguing us, new ones that are not linked to new features, and even a few that are disappearing. Funny at times, more serious at others, this session will help understand the messages that PHP reports and how to take advantage of them for better coding.
Introduction for beginners how to start laravel5 application in easy way and what to be known before start working with laravel5. Prerequisite for this course is basic oops concepts, PHP 5.4 + knowledge , MVC pattern knowledge will be advantage.
Keeping the frontend under control with Symfony and WebpackIgnacio Martín
Webpack tutorial with tips for Symfony users. Topics covered include: current frontend trends, setup, loaders, dev tools, optimization in production, bundle splitting and tips and tricks for using webpack with existing projects.
Symfony Munich Meetup 2016.
Contact Activity Visualization for SeniorsJoaquim Jorge
Over the years, people raise their children and watch them as they make their adult lives away from home.
Because of that, seniors lose contact and intimacy with their loved ones, as physical presence isn’t as possible as desirable. Also, because of physical impairments that may arrive as years pass by, seniors may experience difficulties in communicating and interacting. Thus, a research project called PAELife (Personal Assistant for the Elderly Life) was created with the aim of fighting isolation and exclusion. Our personal contribution to this project is displaying the most active contacts in a visual, powerful way so that they notice which friends are contacting them more and which ones don’t contact in a long time. To achieve that, we built a set of prototypes that display contacts’ activity from different sources (email, social
networks, etc.) and performed two user tests, in order to identify the best alternatives and understand if the senior citizens can correctly perceive the contacts’ activity. The tests’ feedback allowed us to know what prototypes to choose and the ones to discard. After analyzing the results we implemented a final functional prototype that matched all the requirements collected from the users.
Towards Functional Programming through Hexagonal ArchitectureCodelyTV
Slides of for the talk "Towards Functional Programming through Hexagonal Architecture" delivered at the Software Crafters Barcelona 2018 conference #scbcn18 by Juanma Serrano from Habla Computing and Javier Ferrer from CodelyTV
PHP 7 will be the stricter PHP version, with over 400 error messages. They range from reporting a fatal compilation error to helping with strict standards. During the session, we'll review old-timer messages that are still plaguing us, new ones that are not linked to new features, and even a few that are disappearing. Funny at times, more serious at others, this session will help understand the messages that PHP reports and how to take advantage of them for better coding.
These are the slides for a workshop I’ve given at a couple conferences, explaining how Twig works to people who don’t necessarily come from a programming background.
Caldera Learn - LoopConf WP API + Angular FTW WorkshopCalderaLearn
The WordPress REST API combined with a JavaScript MVC framework opens up new possibilities for better, more intuitive interfaces that solve scaling and other challenges. In this workshop we will use AngularJS, the best — because we said so — and the WordPress REST API to create custom applications. First we will walk through creating custom API routes and endpoints to interact with your data, followed by two unique ways to use AngularJS to create better interfaces for your projects. This will include a decoupled front-end and single page web app as a plugin interface.
Learn about some of the new features in Laravel 5, with a focus on the command pipeline, including a few opinions about how to use the pipeline in the best possible way to enforce a solid separation of concerns.
Diving into HHVM Extensions (PHPNW Conference 2015)James Titcumb
HHVM is currently gaining popularity at quite a pace, and it's a pretty exciting time for PHP runtimes. Have you ever wondered what is going on beneath this slick and super-speedy engine? I wondered that myself, so I dived into the internals of HHVM, discovering a treasure trove of awesome stuff. In this talk, I'll show you how HHVM itself works with a guided tour of the codebase, demonstrating how it all pieces together. I'll also show you a couple of ways to write your own incredible HHVM extension. You don't need to know C++ to understand this talk - just PHP language knowledge is enough.
PHP 7 will be the stricter PHP version, with over 400 error messages. They range from reporting a fatal compilation error to helping with strict standards. During the session, we'll review old-timer messages that are still plaguing us, new ones that are not linked to new features, and even a few that are disappearing. Funny at times, more serious at others, this session will help understand the messages that PHP reports and how to take advantage of them for better coding.
Introduction for beginners how to start laravel5 application in easy way and what to be known before start working with laravel5. Prerequisite for this course is basic oops concepts, PHP 5.4 + knowledge , MVC pattern knowledge will be advantage.
Keeping the frontend under control with Symfony and WebpackIgnacio Martín
Webpack tutorial with tips for Symfony users. Topics covered include: current frontend trends, setup, loaders, dev tools, optimization in production, bundle splitting and tips and tricks for using webpack with existing projects.
Symfony Munich Meetup 2016.
Contact Activity Visualization for SeniorsJoaquim Jorge
Over the years, people raise their children and watch them as they make their adult lives away from home.
Because of that, seniors lose contact and intimacy with their loved ones, as physical presence isn’t as possible as desirable. Also, because of physical impairments that may arrive as years pass by, seniors may experience difficulties in communicating and interacting. Thus, a research project called PAELife (Personal Assistant for the Elderly Life) was created with the aim of fighting isolation and exclusion. Our personal contribution to this project is displaying the most active contacts in a visual, powerful way so that they notice which friends are contacting them more and which ones don’t contact in a long time. To achieve that, we built a set of prototypes that display contacts’ activity from different sources (email, social
networks, etc.) and performed two user tests, in order to identify the best alternatives and understand if the senior citizens can correctly perceive the contacts’ activity. The tests’ feedback allowed us to know what prototypes to choose and the ones to discard. After analyzing the results we implemented a final functional prototype that matched all the requirements collected from the users.
To learn and create among the treasuresVera Boneva
A short story about five Bulgarian museums and an European project, presented at the conference "Contemporary Museum and Gallery Education practices: Local Communities meet Global Narratives", Nicosia, May 22-23, 2015
Maschera a pieno facciale antigas di protezione per uso industriale, Nell'industria chimica, della lavorazione dei metalli e automobilistica, nella cantieristica navale, nelle operazioni di fornitura o smaltimento
Coneklab (www.coneklab.com) organizó la jornada ¿Quien mató a la innovación? para la APD (Asociación para el Progreso de la Dirección), donde se explicó las causas por las que las empresas no innovan. En esta jornada se profundizó en cuáles son las causas por las que hay personas que son capaces de innovar y otras no, los motivos que hacen que no se tenga una actitud innovadora en la empresa y cómo identificar las razones que les impulsan a no generar una postura innovadora en sus organizaciones.
El acto contó con la presencia de los actores Oscar Terol y Asier Hormaza, así como con Gonzalo Alonso-Alegre y Nerea Sesumaga, de Coneklab, Angel Jareño, del Grupo Uvesco, y Gorka Ruesgas, de Prodisle Asociados.
En el ámbito empresarial, utilizamos constantemente la palabra innovación ya que somos conscientes de que, sin ella, no hay futuro. La impresión general es que se trata de algo externo y que requiere gran dedicación y cantidades ingentes de capital. Pero, y si dispusiéramos de una cantidad de dinero para dedicar a la innovación en nuestra organización ¿tendríamos claro a qué lo destinaríamos?
Elijamos lo que elijamos, hay que tener en cuenta que la base de la innovación son las personas. Es, su compromiso y actitud, lo que hace que surja en las organizaciones. Crear una cultura innovadora no es una tarea fácil y solo se consigue haciendo que las personas sean su eje central.
Pero si se trata de algo tan “evidente” como esto, ¿cómo es posible que solo algunas empresas sean capaces de avanzar mientras a otras les cuesta tanto? ¿Por qué la innovación parece haber desaparecido de algunas organizaciones?
(www.coneklab.com)
Career: A Shorex Career - a Visual Review 2015Jacob Lyngsøe
Do you know what a Shore Excursion Manager on a cruise ships does? No, I didn't think so! To circumvent the glassy-eyed stare in the eyes of prospective employers during interviews, I produced the following visual review. Produced 2015.
Using WordPress Blogging Features to Build a WebsiteEileen Weinberg
A detailed demonstration of how to build a website that benefits from WordPress' built-in blogging features, without making the website look like a blog. The presentation provides hands-on tips for modifying your site's visual display and choosing between Posts and Pages.
http://www.coral-technologies.com/ Tips para el éxito de un sitio web para vender en línea. Contiene estrategias para mercadeo el sitio en redes sociales, SEO, social bookmarking, foros, links. Además herramientas para mejorar la conversión de su sitio web como la reserva en línea o el chat.
Coming to Terms with OOP In Drupal - php[world] 2016Chris Tankersley
Drupal 8 has not only brought to the table a much improved admin experience, but has now moved on from its procedural roots into the realm of Object Oriented Programming. While this is a great thing for developers, many Drupal developers have never been introduced to OOP. This talk will explore a very high-level overview of objects, inheritance, composition, and how to architect your code as it relates to Drupal 8.
4Developers 2015: Be pragmatic, be SOLID - Krzysztof MenżykPROIDEA
Krzysztof Menżyk
Language: Polish
Wiemy jak projektować dobry kod obiektowy? Ilu z nas zna 5 zasad SOLID? Ilu z nas przestrzega ich w codziennej pracy z kodem? Nie tylko wyjaśnię co to SOLID, ale również pokażę, że to nie sucha teoria a praktyczne rady, które warto aplikować w naszych projektach.
Podczas prezentacji szczegółowo omówię każdą z pięciu zasad. Pokażę konkretne przykłady, które naruszają ww. zasady. Zaprezentuję przykładowe rozwiązania i techniki refaktorowania kodu. Omówię również, w jakich sytuacjach można pominąć niektóre z zasad oraz jaki może to mieć wpływ na projekt.
Come to this talk prepared to learn about the Doctrine PHP open source project. The Doctrine project has been around for over a decade and has evolved from database abstraction software that dates back to the PEAR days. The packages provided by the Doctrine project have been downloaded almost 500 million times from packagist. In this talk we will take you through how to get started with Doctrine and how to take advantage of some of the more advanced features.
Drupal 8 ha llegado con un montón de novedades. Tras poner en producción mi primer proyecto en Drupal 8, presento algunas de las cosas que he aprendido durante el desarrollo y que me han hecho perder tiempo.
Hablo de Render API, Form API, Dependency injection, CMI y algunas otras cosillas de introducción.
Las diapositivas están repletas de código de ejemplo de cada cosa.
Charla impartida en las oficinas de Idealista para el grupo Drupal Madrid en Marzo de 2016.
PHPID online Learning #6 Migration from procedural to OOPAchmad Mardiansyah
In this presentation, we will be talking about a migration of PHP development model from Procedural to OOP (Object Oriented Programming). This slide is a part of PHP ID (PHP Indonesia) Online Learning #6
I present four design patterns that make your development easier and better. Design patterns are a fantastic way to make more readable code, as they make use of common ideas that many developers know and use. These patterns are tried and tested in the enterprise world.
The first one is dependency injection. This covers putting the variables that a class needs to function preferably inside a constructor.
The second one is the factory pattern. A factory moves the responsibility of instantiating an object to a third-party class.
The third one is dependency injection. This allows us to place a class' dependencies at one time, making it easy to come back and see what the class needs to survive.
Finally, we discuss the chain of responsibility. This allows complex operations to be handled by a chain of classes. Each class in the chain determines whether it is capable of handling the request and, if so, it returns the result.
Webinar topic: Migration from Procedural to OOP (Indonesian)
Presenter: Achmad Mardiansyah
In this webinar series, We are discussing a migration of the PHP development model from Procedural to OOP (Object Oriented Programming). This slide is a part of PHP ID (PHP Indonesia) Online Learning #6.
Please share your feedback or webinar ideas here: http://bit.ly/glcfeedback
Check our schedule for future events: https://www.glcnetworks.com/schedule/
Follow our social media for updates: Facebook, Instagram, YouTube Channel, and telegram
Recording available on Youtube
https://youtu.be/y3w6H04yPDU
Since Docker burst onto the scene, programmers have seen a radical shift in almost every ecosystem. From setting up environments to tooling to deployment, containers now influence many applications. The good news is that the idea of containers has taken hold, and we are no longer beholden to a technological monopoly. Let's look at the container ecosystem outside Docker and what a genuinely open, containerized future holds.
Most people understand the basics of git. Creating a repository, branching, merging... those are all pretty simple tasks. Part of the power of git resides in its ability to actually manipulate the history of a repository and clean things up, remove things that should not have been there, and do detective work. Let's spin up our time machine and mess around with the past.
Using PHP Functions! (Not those functions, Google Cloud Functions)Chris Tankersley
Serverless computing has taken web development by storm, and Google has recently updated their Google Cloud Functions to support PHP 7.4! We'll walk through setting up a function and how it all works.
We live in a world that is powered by APIs. OpenAPI is a specification and set of related tooling that can make it easy to design, describe, and help build an API in many different languages. See how easy it is to hit the ground running using OpenAPI, Spotlight, and OpenAPI Generator to drop in an API into any project.
Docker is not just about deploying containers to hundreds of servers. Developers need tools that help with day-to-day tasks and to do their job more effectively. Docker is a great addition to most workflows, from starting projects to writing utilities to make development less repetitive. Docker can help take care of many problems developers face during development such as “it works on my machine” as well as keeping tooling consistent between all of the people working on a project. See how easy it is to take an existing development setup and application and move it over to Docker, no matter your operating system.
Web applications are becoming the norm for users, and being able to handle thousands of requests per second is happening more and more. Developers spend an enormous amount of time making sure that their applications are as fast as possible, but tuning your web server can only go so far. Async Programming is being used by many languages as a quick and easy way to serve web applications, and PHP is no exception. Libraries like ReactPHP and Amp, alongside extensions like Swoole, give developers broad choices for how to build their applications using async principles. See how these tools and async programming can help your application stay quick and agile.
Docker is quickly becoming an invaluable development and deployment tool for many organizations. Come and spend the day learning about what Docker is, how to use it, how to integrate it into your workflow, and build an environment that works for you and the rest of your team. This hands-on tutorial will give you the kick-start needed to start using Docker effectively.
Thanks to tools like Vagrant, Puppet/Chef, and Platform as a Service services like Heroku, developers are extremely used to being able to spin up a development environment that is the same every time. What if we could go a step further and make sure our development environment is not only using the same software, but 100% configured and set up like production. Docker will let us do that, and so much more.
Docker is fast becoming an important part of many developers toolkits. Not only are more developers using it day-to-day, but it is also becoming an important tool for deployments. We'll look at what Docker is, why you should consider using it, and all of the features developers can take advantage of.
Humanity has seen an explosion of technology over the span of almost no time. We have gone from computers being mechanical devices for crunching trajectories to computers making decisions on whether or not we are dressing fashionably. We have also seen an explosion of services that resolve around massive amounts of data about ourselves. At the same time we see developers working on Tor, ad blockers, privacy tools, and ways to keep your data yours. Programmers just like us are building these systems. What are our moral obligations to the technology that we are building? Strap on your tinfoil hat and [REDACTED]
The Command Line should be a developer's best friend, but many times it sits there, sad and lonely as we use to call other programs. Behind that unassuming little blinking cursor is an entire world of productivity, just waiting to be strung together. There is even an entire scripting language hidden underneath that is just waiting for you to use it! Let's investigate BASH, the shell that's syntax is universal across almost all systems (and find out why your Linux scripts do not always work on OSX).
Many know of the famous quote, "Premature optimization is the root of all evil," but most people do not know the full quote or understand the context in which optimization is considered evil. As with anything in programming optimization is evil, maybe. Stop using excuses for slow code, and start to think about the places and tools that you can use to optimize. Thankfully there are are many different tools like xhprof, Valgrind, and others to help us out and properly optimize our code for those times when we need to dig deep into our code.
Docker is quickly becoming an invaluable development and deployment tool for many organizations. Come and spend the day learning about what Docker is and how to use it. Discover how to integrate it into your workflow and build an environment that works for you and your team. This hands-on training will give you the kick-start needed to begin using Docker effectively.
Docker is quickly becoming an invaluable development and deployment tool for many organizations. Come and spend the day learning about what Docker is, how to use it, how to integrate it into your workflow, and build an environment that works for you and the rest of your team. This hands-on tutorial will give you the kick-start needed to start using Docker effectively.
ocker is quickly becoming an invaluable development and deployment tool for many organizations. Come and spend the day learning about what Docker is and how to use it. Discover how to integrate it into your workflow and build an environment that works for you and your team. This hands-on training will give you the kick-start needed to begin using Docker effectively.
As developers, we are blessed with a huge variety of tools to help us in our daily jobs. One of the most popular ones that has shown up over the last few years is Docker. How does one go about getting started with Docker? Why should you invest your time in this new technology? What can you do with Docker? Let's find out!
Congrats! You and your coworkers love Docker. Docker has become an increasingly helpful tool when it comes to devops. We can now build smaller, more robust local development setups with the promise of mirroring production. One thing that still plagues many situations is how to get those containers into production and update them over time. We will explore different tools for setting up, configuring, and maintaining containers as they go live.
Thanks to tools like vagrant, puppet/chef, and Platform as a Service services like Heroku, developers are extremely used to being able to spin up a development environment that is the same every time. What if we could go a step further and make sure our development environment is not only using the same software, but 100% configured and set up like production. Docker will let us do that, and so much more. We'll look at what Docker is, why you should look into using it, and all of the features that developers can take advantage of.
Open Source is one of the core tenets of the PHP language and the community. PHP would not be here if it was not for some of the ideals around software development that occurred in the 50's, 60's, and 70's. How did the open source movement start, and why is PHP one of the few languages that still hold true to those early days of programming? Let's talk about where open source started, and find out how we got here.
Thanks to tools like Vagrant, Puppet/Chef, and Platform as a Service (PaaS) services like Heroku, developers are extremely used to being able to spin up a development environment that is the same every time. What if we could go a step further and make sure our development environment is not only using the same software, but it's 100 percent configured and set up like production. Docker will let us do that, and so much more. We'll look at what Docker is, why you should look into using it, and all of the features that developers can take advantage of.
Congrats! You and your coworkers love Docker. Docker has become an increasingly helpful tool when it comes to DevOps. We can now build smaller, more robust local development setups with the promise of mirroring production. One thing that still plagues many situations is how to get those containers into production and update them over time. We'll explore different tools for setting up, configuring, and maintaining containers as they go live.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
OOP Is More Than Cars and Dogs
1. OOP is More Than Cars
and Dogs
Chris
Tankersley
MadisonPHP
2015
MadisonPHP
2015
1
2. Who Am I
• PHP
Programmer
for
over
10
years
• Work/know
a
lot
of
different
languages,
even
COBOL
• Primarily
do
Zend
Framework
2
• hGps://github.com/dragonmantank
MadisonPHP
2015
2
3. Quick Vocabulary Lesson
• Class
–
DefiniPon
of
code
• Object
–
InstanPaPon
of
a
Class
• Member
–
Variable
belonging
to
a
class
• Method
–
FuncPon
belonging
to
a
class
There
will
be
more
as
we
go
along
MadisonPHP
2015
3
4. MadisonPHP
2015
4
Class
class Employee {
protected $name; // This is a member
protected $number;
// This is a Method
public function setData($data) {
$this->name = $data['name'];
$this->number = $data['number'];
}
public function viewData() {
echo <<<ENDTEXT
Name: {$this->name}
Number: {$this->number}
ENDTEXT;
}
}
7. Let’s count the reasons
• Because
we’re
told
to,
procedural
programming
leads
to
spagheX
code
• We
deal
with
objects
every
day,
so
it
shouldn’t
be
too
hard
• We
want
to
allow
for
code
re-‐use
• We
want
to
group
like
code
together
• We
want
to
easily
extend
our
code
• We
want
to
be
able
to
easily
test
our
code
MadisonPHP
2015
7
17. What we’re all taught
• Classes
are
“things”
in
the
real
world
• We
should
construct
class
members
based
on
AGributes
• Number
of
wheels
• Sound
it
makes
• We
should
construct
class
methods
based
on
“AcPons”
• Running
• Speaking
• Jumping
MadisonPHP
2015
17
18. New Vocabulary
• Parent
Class
–
Class
that
is
extended
• Child
Class
–
Class
that
is
extending
another
class
In
PHP,
a
class
can
be
both
a
Child
and
a
Parent
at
the
same
Pme
MadisonPHP
2015
18
21. The Employee Class
MadisonPHP
2015
21
abstract class Employee {
protected $name; // Employee Name
protected $number; // Employee Number
public function setData($data) {
$this->name = $data['name'];
$this->number = $data['number'];
}
public function viewData() {
echo <<<ENDTEXT
Name: {$this->name}
Number: {$this->number}
ENDTEXT;
}
}
22. The Manager Class
MadisonPHP
2015
22
class Manager extends Employee {
protected $title; // Employee Title
protected $dues; // Golf Dues
public function setData($data) {
parent::setData($data);
$this->title = $data['title'];
$this->dues = $data['dues'];
}
public function viewData() {
parent::viewData();
echo <<<ENDTEXT
Title: {$this->title}
Golf Dues: {$this->dues}
ENDTEXT;
}
}
23. The Scientist Class
MadisonPHP
2015
23
class Scientist extends Employee {
protected $pubs; // Number of Publications
public function setData($data) {
parent::setData($data);
$this->pubs = $data['pubs'];
}
public function viewData() {
parent::viewData();
echo <<<ENDTEXT
Publications: {$this->pubs}
ENDTEXT;
}
}
25. What does this teach us?
• Inheritance
• Makes
it
easier
to
group
code
together
and
share
it
amongst
classes
• Allows
us
to
extend
code
as
needed
• PHP
allows
Single
inheritance
MadisonPHP
2015
25
26. We use it all the time
namespace ApplicationController;!
!
use ZendMvcControllerAbstractActionController;!
use ZendViewModelViewModel;!
!
Class IndexController extends AbstractActionController {!
public function indexAction() {!
/** @var VendorVendorService $vendor */!
$vendor = $this->serviceLocator->get('VendorVendorService');!
!
$view = new ViewModel();!
return $view;!
}!
}
MadisonPHP
2015
26
27. Why it Works (Most of the time, Kinda)
• Allows
us
to
extend
things
we
didn’t
necessarily
create
• Encourages
code
re-‐use
• Allows
developers
to
abstract
away
things
MadisonPHP
2015
27
28. How to use it
• Understand
the
difference
between
Public,
Protected,
and
Private
• Public
–
Anyone
can
use
this,
even
children
• Protected
–
Anything
internal
can
use
this,
even
children
• Private
–
This
is
mine,
hands
off
• Abstract
vs
Concrete
Classes
• Abstract
classes
cannot
be
instanPated
directly,
they
must
be
extended
MadisonPHP
2015
28
29. The Employee Class
MadisonPHP
2015
29
abstract class Employee {
protected $name; // Employee Name
protected $number; // Employee Number
public function setData($data) {
$this->name = $data['name'];
$this->number = $data['number'];
}
public function viewData() {
echo <<<ENDTEXT
Name: {$this->name}
Number: {$this->number}
ENDTEXT;
}
}
30. The Manager Class
MadisonPHP
2015
30
class Manager extends Employee {
protected $title; // Employee Title
protected $dues; // Golf Dues
public function setData($data) {
parent::setData($data);
$this->title = $data['title'];
$this->dues = $data['dues'];
}
public function viewData() {
parent::viewData();
echo <<<ENDTEXT
Title: {$this->title}
Golf Dues: {$this->dues}
ENDTEXT;
}
}
31. An Example
// Fatal error: Cannot instantiate abstract class Employee!
$employee = new Employee(); !
!
// We can do this though!!
$manager = new Manager(); !
!
// Fatal error: Cannot access protected property Manager::$name!
$manager->name = 'Bob McManager’;!
!
// setData is public, so we can use that!
$manager->setData(['name' => 'Bob McManager’,'number' => 1]);!
!
// We can also view the data, since it's public!
$manager->viewData();
MadisonPHP
2015
31
32. Why can Inheritance Be Bad
• PHP
only
allows
Single
Inheritance
on
an
Class
• You
can
have
a
series
of
Inheritance
though,
for
example
CEO
extends
Manager,
Manager
extends
Employee
• Long
inheritance
chains
can
be
a
code
smell
• Private
members
and
methods
cannot
be
used
by
Child
classes
• Single
Inheritance
can
make
it
hard
to
‘bolt
on’
new
funcPonality
between
disparate
classes
MadisonPHP
2015
32
34. The General Idea
• Classes
contain
other
classes
to
do
work
and
extend
that
way,
instead
of
through
Inheritance
• Interfaces
define
“contracts”
that
objects
will
adhere
to
• Your
classes
implement
interfaces
to
add
needed
funcPonality
MadisonPHP
2015
34
35. Interfaces
interface EmployeeInterface {!
protected $name;!
protected $number;!
!
public function getName();!
public function setName($name);!
public function getNumber();!
public function setNumber($number);!
}!
!
interface ManagerInterface {!
protected $golfHandicap;!
!
public function getHandicap();!
public function setHandicap($handicap);!
}
MadisonPHP
2015
35
36. Interface Implementation
class Employee implements EmployeeInterface {!
public function getName() {!
return $this->name;!
}!
public function setName($name) {!
$this->name = $name;!
}!
}!
class Manager implements EmployeeInterface, ManagerInterface {!
// defines the employee getters/setters as well!
public function getHandicap() {!
return $this->handicap; !
}!
public function setHandicap($handicap) {!
$this->handicap = $handicap;!
}!
}
MadisonPHP
2015
36
37. This is Good and Bad
• “HAS-‐A”
is
tends
to
be
more
flexible
than
“IS-‐A”
• Somewhat
easier
to
understand,
since
there
isn’t
a
hierarchy
you
have
to
backtrack
• Each
class
must
provide
their
own
ImplementaPon,
so
can
lead
to
code
duplicaPon
MadisonPHP
2015
37
38. Traits
• Allows
small
blocks
of
code
to
be
defined
that
can
be
used
by
many
classes
• Useful
when
abstract
classes/inheritance
would
be
cumbersome
• My
Posts
and
Pages
classes
shouldn’t
need
to
extend
a
Slugger
class
just
to
generate
slugs.
MadisonPHP
2015
38
39. Avoid Code-Duplication with Traits
trait EmployeeTrait {!
public function getName() {!
return $this->name;!
}!
public function setName($name) {!
$this->name = $name;!
}!
}!
class Employee implements EmployeeInterface {!
use EmployeeTrait;!
}!
class Manager implements EmployeeInterface, ManagerInterface {!
use EmployeeTrait;!
use ManagerTrait;!
}
MadisonPHP
2015
39
42. What is Coupling?
• Coupling
is
how
dependent
your
code
is
on
another
class
• The
more
classes
you
are
coupled
to,
the
more
changes
affect
your
class
MadisonPHP
2015
42
43. namespace ApplicationController;!
!
use ZendMvcControllerAbstractActionController;!
use ZendViewModelViewModel;!
!
class MapController extends AbstractActionController!
{!
public function indexAction()!
{!
// Position is an array with a Latitude and Longitude object!
$position = $this->getServiceLocator()->get('MapService’)!
->getLatLong('123 Main Street', 'Defiance', 'OH');!
echo $position->latitude->getPoint();!
}!
}
MadisonPHP
2015
43
46. What is Dependency Injection?
• InjecPng
dependencies
into
classes,
instead
of
having
the
class
create
it
• Allows
for
much
easier
tesPng
• Allows
for
a
much
easier
Pme
swapping
out
code
• Reduces
the
coupling
that
happens
between
classes
MadisonPHP
2015
46
47. Method Injection
class MapService {!
public function getLatLong(GoogleMaps $map, $street, $city, $state) {!
return $map->getLatLong($street . ' ' . $city . ' ' . $state);!
}!
!
public function getAddress(GoogleMaps $map, $lat, $long) {!
return $map->getAddress($lat, $long);!
}!
}
MadisonPHP
2015
47
48. Constructor Injection
class MapService {!
protected $map;!
public function __construct(GoogleMaps $map) {!
$this->map = $map;!
}!
public function getLatLong($street, $city, $state) {!
return $this!
->map!
->getLatLong($street . ' ' . $city . ' ' . $state);!
}!
}!
!
MadisonPHP
2015
48
49. Setter Injection
class MapService {!
protected $map;!
!
public function setMap(GoogleMaps $map) {!
$this->map = $map;!
}!
public function getMap() {!
return $this->map;!
}!
public function getLatLong($street, $city, $state) {!
return $this->getMap()->getLatLong($street . ' ' . $city . ' ' . $state);!
}!
}!
MadisonPHP
2015
49
51. Single Responsibility Principle
• Every
class
should
have
a
single
responsibility,
and
that
responsibility
should
be
encapsulated
in
that
class
MadisonPHP
2015
51
52. What is a Responsibility?
• Responsibility
is
a
“Reason
To
Change”
–
Robert
C.
MarPn
• By
having
more
than
one
“Reason
to
Change”,
code
is
harder
to
maintain
and
becomes
coupled
• Since
the
class
is
coupled
to
mulPple
responsibiliPes,
it
becomes
harder
for
the
class
to
adapt
to
any
one
responsibility
MadisonPHP
2015
52
53. An Example
/**
* Create a new invoice instance.
*
* @param LaravelCashierContractsBillable $billable
* @param object
* @return void
*/
public function __construct(BillableContract $billable, $invoice)
{
$this->billable = $billable;
$this->files = new Filesystem;
$this->stripeInvoice = $invoice;
}
/**
* Create an invoice download response.
*
* @param array $data
* @param string $storagePath
* @return SymfonyComponentHttpFoundationResponse
*/
public function download(array $data, $storagePath = null)
{
$filename = $this->getDownloadFilename($data['product']);
$document = $this->writeInvoice($data, $storagePath);
$response = new Response($this->files->get($document), 200, [
'Content-Description' => 'File Transfer',
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
'Content-Transfer-Encoding' => 'binary',
'Content-Type' => 'application/pdf',
]);
$this->files->delete($document);
return $response;
}
MadisonPHP
2015
53
hGps://github.com/laravel/cashier/blob/master/src/Laravel/Cashier/Invoice.php
54. Why is this Bad?
• This
single
class
has
the
following
responsibiliPes:
• GeneraPng
totals
for
the
invoice
(including
discounts/coupons)
• GeneraPng
an
HTML
View
of
the
invoice
(Invoice::view())
• GeneraPng
a
PDF
download
of
the
invoice(Invoice::download())
• This
is
coupled
to
a
shell
script
as
well
• Two
different
displays
handled
by
the
class.
Adding
more
means
more
responsibility
• Coupled
to
a
specific
HTML
template,
the
filesystem,
the
Laravel
Views
system,
and
PhantomJS
via
the
shell
script
MadisonPHP
2015
54
55. How to Improve
• Change
responsibility
to
just
building
the
invoice
data
• Move
the
‘output’
stuff
to
other
classes
MadisonPHP
2015
55
57. [Could
not
afford
licensing
fee
for
Grumpy
TesPng
Picture]
MadisonPHP
2015
57
58. This is not a testing talk
• Using
Interfaces
makes
it
easier
to
mock
objects
• Reducing
coupling
and
following
Demeter’s
Law
makes
you
have
to
mock
less
objects
• Dependency
InjecPon
means
you
only
mock
what
you
need
for
that
test
• Single
Responsibility
means
your
test
should
be
short
and
sweet
• Easier
tesPng
leads
to
more
tesPng
MadisonPHP
2015
58
60. We can make a dog with wheels!
• Abstract
class
for
Animal
• Class
for
Dog
that
extends
Animal
• Trait
for
Wheels
• With
the
write
methodology,
we
could
even
unit
test
this
In
the
real
world,
we
can
now
represent
a
crippled
dog
MadisonPHP
2015
60