Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests.
Debugging Effectively - ConFoo Montreal 2019Colin O'Dell
Software bugs are inevitable; some are especially difficult to track down causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! Fatigue and wasted time can be avoided with strategies and techniques to break through those mental barriers. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively
Debugging Effectively - All Things Open 2017Colin O'Dell
The document discusses debugging effectively. It begins with an overview of the importance of debugging and the debugging process. It then covers specific debugging tools and techniques, including using an integrated development environment (IDE) and interactive debugger. It outlines a systematic debugging approach and provides tips for junior developers. Specific techniques like tracing code backwards and forwards are presented. The importance of gathering information, replicating issues, and ruling out assumptions is emphasized.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most appropriate tool, taking a logical and objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Debugging Effectively - DrupalCon Europe 2016Colin O'Dell
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Debugging Effectively - SymfonyLive San Francisco 2015Colin O'Dell
Software bugs are inevitable - it doesn't matter how experienced you are or how well you follow best-practices. Some bugs are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way though! The mental fatigue and wasted time can be avoided by implementing effective debugging strategies like: identifying & using the most-appropriate tool; taking a logical & objective approach; challenging assumptions; listening to variables; isolating the code path; rubber ducking; and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code effectively.
Debugging Effectively - ConFoo Montreal 2019Colin O'Dell
Software bugs are inevitable; some are especially difficult to track down causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! Fatigue and wasted time can be avoided with strategies and techniques to break through those mental barriers. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively
Debugging Effectively - All Things Open 2017Colin O'Dell
The document discusses debugging effectively. It begins with an overview of the importance of debugging and the debugging process. It then covers specific debugging tools and techniques, including using an integrated development environment (IDE) and interactive debugger. It outlines a systematic debugging approach and provides tips for junior developers. Specific techniques like tracing code backwards and forwards are presented. The importance of gathering information, replicating issues, and ruling out assumptions is emphasized.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most appropriate tool, taking a logical and objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Debugging Effectively - DrupalCon Europe 2016Colin O'Dell
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Debugging Effectively - SymfonyLive San Francisco 2015Colin O'Dell
Software bugs are inevitable - it doesn't matter how experienced you are or how well you follow best-practices. Some bugs are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way though! The mental fatigue and wasted time can be avoided by implementing effective debugging strategies like: identifying & using the most-appropriate tool; taking a logical & objective approach; challenging assumptions; listening to variables; isolating the code path; rubber ducking; and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code effectively.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Debugging Effectively - Frederick Web Tech 9/6/16Colin O'Dell
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
This document provides an overview of continuous integration (CI) and Jenkins 2. It introduces the speaker and their experience with Hudson and Jenkins. It discusses CI practices like maintaining a single source repository and automating builds. It also covers related practices like continuous delivery and the Jenkins pipeline plugin. The document contains screenshots and diagrams to illustrate CI and Jenkins concepts and configuration options.
Feedback en continu grâce au TDD et au AsCodeHaja R
The document discusses the concepts of test-driven development (TDD), continuous integration, infrastructure as code, and documentation as code. It provides examples of writing specifications, documentation, build pipelines, and infrastructure using code and formats like Markdown, YAML, Puppet, Ansible, Dockerfiles, and Docker Compose files. Emphasizing that treating all aspects of software development as code enables continuous feedback, communication, and versioning.
Effective Git - EclipseCon 2011 tutorial
Tutorial slides, the corresponding tutorial exercises are published here https://docs.google.com/leaf?id=0B4F_gjXVrHZVMzE5MWNmNjktMDcxMS00NDM3LWI4NDQtYmE1YzZkM2RkY2Rl&hl=en
Tim Martin presented on Project Tin Can at the ASTD TechKnowledge 2012 conference. Project Tin Can is a new specification that aims to track learning activities across different systems and devices. It allows for on the fly entity creation, device transitions, and decoupled data models to address limitations of previous specifications like SCORM. However, fully realizing its potential will require addressing challenges like out of browser experiences, offline access, security, and alternate device formats.
2011 Learning Age – SCORM for Games and Simulations – Mike RusticiRustici Software
This document discusses how SCORM (Sharable Content Object Reference Model) can be used for games and simulations. It provides examples of how SCORM data can be captured for different learning activities like completing courses, teaching courses, attending events, participating in simulations, and more. It also outlines some limitations of the current SCORM standard and introduces new specifications like Tin Can and ADL Flex that aim to address these limitations and expand what can be tracked for learning activities.
The document discusses Dockerized system testing using Arquillian Cube. It provides an overview of Arquillian Cube, which allows testing applications running in Docker containers or container-less environments. It demonstrates configuring Arquillian XML to specify Docker containers and properties, as well as writing tests that target applications deployed to Docker containers using Arquillian resources.
The Seven Wastes of Software DevelopmentMatt Stine
This document summarizes Matt Stine's presentation on the seven wastes of software development based on lean manufacturing principles. The seven wastes are: partially done work, extra processes, extra features, handoffs, delays, task switching, and defects. Stine provides examples of each waste and solutions to eliminate them, such as limiting work in progress, continuous integration, avoiding handoffs, minimizing task switching, and early defect detection. The goal is to reduce non-value adding activities and continuously improve productivity and quality.
Describe how to contribute to open source projects.
Provide example process using two hot open source project, linux and AOSP(Android Open Source Project)
Making the Web Fireproof: A Building Code for WebsitesDylan Wilbanks
The moment we start creating a website, we’re setting ourselves up for failure later. Bad code creates middle of the night fire drills. Lack of thinking about accessibility gets our employer sued. Not thinking ahead on mobile generates rework. We accept this as the normal course of business – but is there any way we could prevent (or lower) this cost? Is there anything we can learn from the building codes that dictate how our built environment is constructed?
We will talk about the lessons of building codes and what we can do today to build more robust web applications and sites, including:
- The need for design patterns in websites
- The need for patterns in user stories so that we build websites consistently
- Baking accessibility into websites comes from putting accessibility into user stories
- Planning a web application is different from planning a building, but it does share similar aspects of work
- The better we can becoming at creating best practices (building codes) the better we will get at building sites, and the closer we will come to Berners-Lee’s “one web for all” dream
Presented at MinneWebCon 2015.
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 Channy Yun
This document contains information about chaos engineering and experimenting with latency injection between microservices. It discusses distributing traffic between production, control, and experimental versions of a service called Service A. 98% of traffic would go to the production version, 1% to the control version, and 1% to the experimental version where latency is injected between Service A and downstream services using an injector. This allows experimenting with how systems react to different latency conditions to test resilience and identify problems.
Let the contribution begin (EST futures)SeongJae Park
The document discusses contributing to open source software as a newcomer. It recommends getting the source code, making small, targeted changes like fixing coding style issues, and submitting patches for review. The Linux kernel is presented as a popular project to start contributing to. Topic branches in version control are introduced as a way to develop changes separately before submitting them for merging.
This document summarizes a presentation about managing Docker images with Concourse. It discusses building Docker images from a Dockerfile, triggering image builds when the Dockerfile or dependencies change. It also covers storing and pushing images, and using a Concourse pipeline to check for new images and code commits, rebuild images, tag images and the code repository with the new version.
Step by step how to start the Photo Grid configuration, after acquiring a copy of the source code. Illustrated manual, with all the details for you to start your development using Ionic Framework, along with the backend Parse.com.
Is Docker really the security risk that is generally raged about? Or, is this more about understanding where and when a business should consider adoption new and revolutionary infrastructure?
- Concourse is a CI/CD tool that uses pipelines defined in YAML to automate workflows. It runs builds inside containers for isolation.
- It has three main concepts: resources that define inputs/outputs, tasks that define individual build steps, and jobs that define the actions in the pipeline.
- Concourse uses a pluggable resource model so many types of resources can be used as inputs or outputs like Git, Docker images, S3, etc. It can also integrate custom resource types.
- Tasks always behave the same way if inputs are the same. Jobs determine the order of tasks and resources in the pipeline.
- Concourse is installed either locally with Vagrant or on a cluster with Bosh
Virtual machines and volunteer computing platforms like BOINC allow researchers to utilize idle computing resources from home PCs. Projects like LHC@Home and Test4Theory have harnessed thousands of PCs through BOINC, generating CPU years worth of computing. While running actual LHC experiments is challenging due to code porting and library issues, Test4Theory demonstrates BOINC's ability to run physics simulations. It has engaged over 4,500 users who have generated over 230 billion simulation events. BOINC supports virtualization which provides custom execution environments and security while enabling multi-core processing and development on a single platform. Community feedback is also important for improving volunteer computing projects.
This document discusses agile planning and requirements gathering. It begins with an overview of iterative development processes and user stories. Users then engage in activities to write and revise their own user stories for a sample system. Principles of user stories are explained, such as being minimalist and backed by acceptance tests. Methods for gathering, estimating, and prioritizing user stories are then covered, including planning poker. The goal is for engineers to provide honest estimates that customers can trust and refine over time at a sustainable pace.
Peter Kofler gave a presentation to the Java Student User Group in April 2010 about the Prime Factors Kata coding exercise proposed by Robert C. Martin. The exercise involves writing a class with a static method that takes an integer as input and returns its prime factors. Kofler demonstrated an implementation of the Kata and emphasized the importance of code quality and software craftsmanship.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
Debugging Effectively - Frederick Web Tech 9/6/16Colin O'Dell
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
This document provides an overview of continuous integration (CI) and Jenkins 2. It introduces the speaker and their experience with Hudson and Jenkins. It discusses CI practices like maintaining a single source repository and automating builds. It also covers related practices like continuous delivery and the Jenkins pipeline plugin. The document contains screenshots and diagrams to illustrate CI and Jenkins concepts and configuration options.
Feedback en continu grâce au TDD et au AsCodeHaja R
The document discusses the concepts of test-driven development (TDD), continuous integration, infrastructure as code, and documentation as code. It provides examples of writing specifications, documentation, build pipelines, and infrastructure using code and formats like Markdown, YAML, Puppet, Ansible, Dockerfiles, and Docker Compose files. Emphasizing that treating all aspects of software development as code enables continuous feedback, communication, and versioning.
Effective Git - EclipseCon 2011 tutorial
Tutorial slides, the corresponding tutorial exercises are published here https://docs.google.com/leaf?id=0B4F_gjXVrHZVMzE5MWNmNjktMDcxMS00NDM3LWI4NDQtYmE1YzZkM2RkY2Rl&hl=en
Tim Martin presented on Project Tin Can at the ASTD TechKnowledge 2012 conference. Project Tin Can is a new specification that aims to track learning activities across different systems and devices. It allows for on the fly entity creation, device transitions, and decoupled data models to address limitations of previous specifications like SCORM. However, fully realizing its potential will require addressing challenges like out of browser experiences, offline access, security, and alternate device formats.
2011 Learning Age – SCORM for Games and Simulations – Mike RusticiRustici Software
This document discusses how SCORM (Sharable Content Object Reference Model) can be used for games and simulations. It provides examples of how SCORM data can be captured for different learning activities like completing courses, teaching courses, attending events, participating in simulations, and more. It also outlines some limitations of the current SCORM standard and introduces new specifications like Tin Can and ADL Flex that aim to address these limitations and expand what can be tracked for learning activities.
The document discusses Dockerized system testing using Arquillian Cube. It provides an overview of Arquillian Cube, which allows testing applications running in Docker containers or container-less environments. It demonstrates configuring Arquillian XML to specify Docker containers and properties, as well as writing tests that target applications deployed to Docker containers using Arquillian resources.
The Seven Wastes of Software DevelopmentMatt Stine
This document summarizes Matt Stine's presentation on the seven wastes of software development based on lean manufacturing principles. The seven wastes are: partially done work, extra processes, extra features, handoffs, delays, task switching, and defects. Stine provides examples of each waste and solutions to eliminate them, such as limiting work in progress, continuous integration, avoiding handoffs, minimizing task switching, and early defect detection. The goal is to reduce non-value adding activities and continuously improve productivity and quality.
Describe how to contribute to open source projects.
Provide example process using two hot open source project, linux and AOSP(Android Open Source Project)
Making the Web Fireproof: A Building Code for WebsitesDylan Wilbanks
The moment we start creating a website, we’re setting ourselves up for failure later. Bad code creates middle of the night fire drills. Lack of thinking about accessibility gets our employer sued. Not thinking ahead on mobile generates rework. We accept this as the normal course of business – but is there any way we could prevent (or lower) this cost? Is there anything we can learn from the building codes that dictate how our built environment is constructed?
We will talk about the lessons of building codes and what we can do today to build more robust web applications and sites, including:
- The need for design patterns in websites
- The need for patterns in user stories so that we build websites consistently
- Baking accessibility into websites comes from putting accessibility into user stories
- Planning a web application is different from planning a building, but it does share similar aspects of work
- The better we can becoming at creating best practices (building codes) the better we will get at building sites, and the closer we will come to Berners-Lee’s “one web for all” dream
Presented at MinneWebCon 2015.
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트 Channy Yun
This document contains information about chaos engineering and experimenting with latency injection between microservices. It discusses distributing traffic between production, control, and experimental versions of a service called Service A. 98% of traffic would go to the production version, 1% to the control version, and 1% to the experimental version where latency is injected between Service A and downstream services using an injector. This allows experimenting with how systems react to different latency conditions to test resilience and identify problems.
Let the contribution begin (EST futures)SeongJae Park
The document discusses contributing to open source software as a newcomer. It recommends getting the source code, making small, targeted changes like fixing coding style issues, and submitting patches for review. The Linux kernel is presented as a popular project to start contributing to. Topic branches in version control are introduced as a way to develop changes separately before submitting them for merging.
This document summarizes a presentation about managing Docker images with Concourse. It discusses building Docker images from a Dockerfile, triggering image builds when the Dockerfile or dependencies change. It also covers storing and pushing images, and using a Concourse pipeline to check for new images and code commits, rebuild images, tag images and the code repository with the new version.
Step by step how to start the Photo Grid configuration, after acquiring a copy of the source code. Illustrated manual, with all the details for you to start your development using Ionic Framework, along with the backend Parse.com.
Is Docker really the security risk that is generally raged about? Or, is this more about understanding where and when a business should consider adoption new and revolutionary infrastructure?
- Concourse is a CI/CD tool that uses pipelines defined in YAML to automate workflows. It runs builds inside containers for isolation.
- It has three main concepts: resources that define inputs/outputs, tasks that define individual build steps, and jobs that define the actions in the pipeline.
- Concourse uses a pluggable resource model so many types of resources can be used as inputs or outputs like Git, Docker images, S3, etc. It can also integrate custom resource types.
- Tasks always behave the same way if inputs are the same. Jobs determine the order of tasks and resources in the pipeline.
- Concourse is installed either locally with Vagrant or on a cluster with Bosh
Virtual machines and volunteer computing platforms like BOINC allow researchers to utilize idle computing resources from home PCs. Projects like LHC@Home and Test4Theory have harnessed thousands of PCs through BOINC, generating CPU years worth of computing. While running actual LHC experiments is challenging due to code porting and library issues, Test4Theory demonstrates BOINC's ability to run physics simulations. It has engaged over 4,500 users who have generated over 230 billion simulation events. BOINC supports virtualization which provides custom execution environments and security while enabling multi-core processing and development on a single platform. Community feedback is also important for improving volunteer computing projects.
This document discusses agile planning and requirements gathering. It begins with an overview of iterative development processes and user stories. Users then engage in activities to write and revise their own user stories for a sample system. Principles of user stories are explained, such as being minimalist and backed by acceptance tests. Methods for gathering, estimating, and prioritizing user stories are then covered, including planning poker. The goal is for engineers to provide honest estimates that customers can trust and refine over time at a sustainable pace.
Peter Kofler gave a presentation to the Java Student User Group in April 2010 about the Prime Factors Kata coding exercise proposed by Robert C. Martin. The exercise involves writing a class with a static method that takes an integer as input and returns its prime factors. Kofler demonstrated an implementation of the Kata and emphasized the importance of code quality and software craftsmanship.
Web Components: The Future of Web Development is HereJohn Riviello
With the updates to iOS and Android phones released earlier this year, Web Components are now supported natively. With libraries such as Polymer that are built on top of Web Components, it is now possible to easily create fast Progressive Web Apps (PWAs) without the overhead of a framework. In this workshop, we'll begin with a brief introduction to Web Components and Polymer, and then dive into hands-on experiences with the core aspects of Web Components: the <template> tag, Custom Elements, and the Shadow DOM.
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOpsBaruch Sadogursky
No relationship in DevOps is more important than that between your CI/CD server and your Binary Repository. Jenkins has long been the go-to server for CI/CD, and JFrog Artifactory has long been one of the most popular integrations with it. This webinar focuses on the new features of the integration, leveraging the Jenkins Pipeline DSL for infrastructure-as-code of your favorite artifactory features whether it be generic, maven, gradle or Docker, and will show an end-to-end example of pipelines across multiple technologies and how powerful these new capabilities are.
YQL - Christian Heilmann Open Hack London presentationKorben00
YQL (Yahoo Query Language) provides an easy way to access and remix data from various web services using an SQL-like syntax. It has a public REST API that allows querying data without authentication. Developers can also create their own data tables and expose them through YQL. This allows aggregating data from multiple sources into a single query and makes it simple to build prototypes and hacks quickly using existing web APIs and data.
Even when the scope, the budget and the schedule of a project is fixed, there are plenty of dimensions on which you have freedom.
This presentation relates the story of a project that explored some of those other dimensions by adopting various agile aproaches.
(Pecha Kucha version)
This document outlines common anti-patterns and challenges the speaker has encountered when working with Node.js, including issues with modules and dependencies, project structure, asynchronous code, error handling, testing, debugging, and deployment. The speaker shares lessons learned and best practices for addressing these problems, such as locking down dependencies, using promises for asynchronous code, and leveraging tools like Nginx, Docker, and logging services to improve debugging and deployment. Overall, the speaker believes Node.js is powerful but asynchronous programming and error handling can be difficult, and the platform is still improving in these areas.
The Evolution of Glance API: On the Way From v1 to v3Brian Rosmaita
OpenStack Image Service (aka Glance) has been around from the earliest days of OpenStack and has been evolving ever since.
It's been three years since the last major update of its API - the v2 - went live with the Folsom release, and it is time now to move forward. With the recent introduction of new large features, such as Meta Definitions and Artifacts, the time has come to introduce a new version of Glance public API - V3.
In this session, Glance driver Brian Rosmaita and Artifacts driver Alexander Tivelkov will talk about the history of Glance API, the way it made since the initial release and the challenges it now has. The attendees will learn about the new experimental version of Glance API, the plans to deprecate the v1 and the new amazing features which are available for Glance users.
Similar to Debugging Effectively - DrupalCon Nashville 2018 (20)
ASCII is so 1963. Nowadays, computers must support a broad range of different characters beyond the 128 we had in the early days of computing - not just accents and emojis but also completely different writing systems used around the globe. The Unicode standard packs a whopping 143,859 characters into an elegant system used by over 95% of the Internet, but PHP's string functions don't play nicely with Unicode by default, making it difficult for developers to properly handle such a wide array of possible user inputs.
In this talk, we'll explore why Unicode is important, how the various encodings like UTF-8 work under-the-hood, how to handle them within PHP, and some nifty tricks and shortcuts to preserve performance.
Releasing High Quality Packages - Longhorn PHP 2021Colin O'Dell
The document provides guidance on creating and maintaining high-quality PHP packages. It discusses defining quality standards, project structure, testing, documentation, releasing packages, and ongoing maintenance. Key aspects include using semantic versioning, writing automated tests, generating documentation, following best practices for code quality, and being responsive to issues and pull requests. The goal is to create packages that are easily installed, well-maintained, and meet community standards.
Releasing High Quality PHP Packages - ConFoo Montreal 2019Colin O'Dell
Releasing open-source libraries is more than sharing your Github URL with the world. There are many considerations and steps involved especially for successful and long-lived projects.
In this talk we’ll cover the principles behind creating, releasing and maintaining high-quality libraries. Topics will include structuring the repository, implementing modern PHP standards, maintaining changelogs, using CI tests, releasing new versions and more.
Automating Deployments with Deployer - php[world] 2018Colin O'Dell
Have you ever botched a deployment and taken a site offline? I have - more times then I'd like to admit. What if we could completely automate the deployment process, make it lightning fast, remove most of the risk, and do it all without custom bash scripts? Better yet, what if we could use the same exact deployment process locally or trigger it via CI? All of this is possible with Deployer - a PHP-based deployment tool which supports virtually every CMS and framework! Attendees will learn the basics of Deployer, how to customize deployments to fit their needs, and how to handle situations if things go wrong.
Releasing open-source libraries involves much more than sharing your Github URL with the world. There are many considerations and steps involved, especially if you want your project to be successful and long-lived. In this talk, we'll cover the principles behind creating, releasing, and maintaining high-quality libraries. Topics will include structuring the repository, implementing modern PHP standards, maintaining changelogs, using CI tests, releasing new versions, and other best practices. Attendees will walk away with enough knowledge to publish their own quality PHP packages on Packagist for others to use.
CommonMark: Markdown Done Right - ZendCon 2017Colin O'Dell
Markdown is one of the most popular markup languages on the web. Unfortunately, with no standard specification, every implementation works differently, producing varying results across different platforms. The CommonMark specification fixes this by providing an unambiguous syntax specification and a comprehensive suite of tests. In this session you'll learn about this standard and how to integrate the league/commonmark parser into their PHP applications. We'll also cover how to customize the library to implement new features like custom Markdown syntax or advanced renderers.
Rise of the Machines: PHP and IoT - ZendCon 2017Colin O'Dell
The Internet of Things (IoT) is fundamentally changing how we interact with the digital world. In this session we’ll explore the implementation of real examples which bridge the gap between the physical and digital world using PHP: asking Alexa for information within a PHP application; displaying API data on an Arduino-powered display; using PHP to control LEDs on a Raspberry Pi to monitor application uptime; and connecting IR sensors to Slack to see whether a conference room is in use.
Hacking Your Way To Better Security - DrupalCon Baltimore 2017Colin O'Dell
This talk educates junior and mid-level developers on common security vulnerabilities, how they are exploited, and how to protect against them. We'll explore several of the OWASP Top 10 attack vectors like SQL injection, XSS, CSRF, and others. Each topic will be approached from the perspective of an attacker to see how these vulnerabilities are detected and exploited using several realistic examples. We'll then apply this knowledge to see how web applications can be secured against such vulnerabilities.
Automating Your Workflow with Gulp.js - php[world] 2016Colin O'Dell
Gulp is a powerful utility for automating development workflows. Tasks are written using code, not configuration, enabling the easy creation of highly-custom and flexible automations. This talk introduces developers to the core concepts of gulp.js, and how to leverage it for new & existing projects. We’ll cover several examples of common tasks for managing CSS, JS and PHP, including: compiling Sass, minifying files, running PHP tests, checking code styles, ensuring legacy browser support & more.
Rise of the Machines: PHP and IoT - php[world] 2016Colin O'Dell
The Internet of Things (IoT) is fundamentally changing how we interact with the digital world. In this talk, we’ll explore the implementation of live examples which bridge the gap between the physical and digital world using PHP: asking Alexa for information on php[world] conference sessions; displaying API data on an Arduino-powered display; using PHP to control LEDs on a Raspberry Pi to monitor application uptime; and connecting IR sensors to Slack to see whether a conference room is in use.
Hacking Your Way to Better Security - ZendCon 2016Colin O'Dell
This document discusses various web application security vulnerabilities like SQL injection and cross-site scripting (XSS) from the perspective of an attacker. It begins by introducing SQL injection and demonstrates how it can be used to extract hidden data like usernames and credit card numbers. It then covers XSS and how malicious scripts can be injected onto a page to hijack user sessions. Finally, it discusses ways to protect against these vulnerabilities like input filtering, output encoding, and prepared statements. The overall goal is to help understand common attacks and how to build more secure applications.
Hacking Your Way to Better Security - PHP South Africa 2016Colin O'Dell
This talk educates developers on common security vulnerabilities, how they are exploited, and how to protect against them. We'll explore several of the OWASP Top 10 attack vectors like SQL injection, XSS, CSRF, and more. Each topic will be approached from the perspective of an attacker to see how these vulnerabilities are detected and exploited using several realistic examples. We'll then apply this knowledge to see how web applications can be secured against such vulnerabilities.
CommonMark: Markdown done right - Nomad PHP September 2016Colin O'Dell
Markdown is one of the most popular markup languages on the Web. Unfortunately, with no standard specification, every implementation works differently, producing varying results across different platforms. The CommonMark specification fixes this by providing an unambiguous syntax specification and a comprehensive suite of tests. Attendees will learn about this standard and how to integrate the league/commonmark parser into their applications. We will also cover how to add new syntax and other features to the parser to fit your custom needs.
Hacking Your Way To Better Security - Dutch PHP Conference 2016Colin O'Dell
The goal of this talk is to educate developers on common security vulnerabilities, how they are exploited, and how to protect against them. We'll explore several of the OWASP Top 10 attack vectors like SQL injection, XSS, CSRF, session hijacking, and insecure direct object references. Each topic will be approached from the perspective of an attacker to see how these vulnerabilities are detected and exploited using several realistic examples. Once we've established an understanding of how these attacks work, we'll look at concrete steps you can take to secure web applications against such vulnerabilities. The knowledge gained from this talk can also be used for participating in "Capture the Flag" security competitions.
Hacking Your Way To Better Security - php[tek] 2016Colin O'Dell
This talk educates developers on common security vulnerabilities, how they are exploited, and how to protect against them. We will explore several of the OWASP top 10 attack vectors, such as SQL injection, XSS, CSRF, and session hijacking. Each topic will be approached from the perspective of an attacker to learn how these vulnerabilities are detected and exploited using several realistic examples. We will then apply this knowledge to learn how web applications can be secured against such vulnerabilities.
Markdown is one of the most popular markup languages on the Web. Unfortunately, with no standard specification, every implementation works differently, producing varying results across different platforms. The CommonMark specification fixes this by providing an unambiguous syntax specification and a comprehensive suite of tests. Attendees will learn about this standard and how to integrate the league/commonmark parser into their applications. We will also cover how to add new custom features.
The document provides an overview of new features, changes, deprecations, and removals in PHP 7, as well as how to install PHP 7. Key points covered include:
1. New features such as scalar type hints, return type declarations, the spaceship operator, null coalesce operator, and anonymous classes.
2. Changes like improved performance, uniform variable syntax, semi-reserved keywords, and exceptions being thrown for fatal errors.
3. Deprecated features such as PHP 4 constructors and the salt option for password_hash.
4. Removed features like alternative PHP tags and the date.timezone warning.
5. Installing PHP 7 via packages, compiling from source, or
The goal of this talk is to educate developers on common security vulnerabilities, how they are exploited, and how to protect against them. We'll explore several of the OWASP Top 10 attack vectors like SQL injection, XSS, CSRF, session hijacking, and insecure direct object references. Each topic will be approached from the perspective of an attacker to see how these vulnerabilities are detected and exploited using several realistic examples. Once we've established an understanding of how these attacks work, we'll look at concrete steps you can take to secure web applications against such vulnerabilities. The knowledge gained from this talk can also be used for participating in "Capture the Flag" security competitions.
league/commonmark is a well-written, super-configurable Markdown parser for PHP based on the CommonMark spec. In this lightning talk, we'll introduce the CommonMark spec, discuss why it's important, and demonstrate how the league/commonmark project can be used and extended for your own PHP projects
The PHP 7 release is just around the corner, bringing some much-desired changes and improvements to the language. However, many developers simply aren't aware of what's coming. We'll remedy this by checking out the new "spaceship operator," demonstrating how static type hints produce clean code, and using anonymous classes to quickly implement interfaces on the fly. Attendees will also learn about breaking changes and "gotchas" to watch out for when making the upgrade and will receive pointers on getting started with PHP 7 today.
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfUndress Baby
The quest for the best AI face swap solution is marked by an amalgamation of technological prowess and artistic finesse, where cutting-edge algorithms seamlessly replace faces in images or videos with striking realism. Leveraging advanced deep learning techniques, the best AI face swap tools meticulously analyze facial features, lighting conditions, and expressions to execute flawless transformations, ensuring natural-looking results that blur the line between reality and illusion, captivating users with their ingenuity and sophistication.
Web:- https://undressbaby.com/
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
Takashi Kobayashi and Hironori Washizaki, "SWEBOK Guide and Future of SE Education," First International Symposium on the Future of Software Engineering (FUSE), June 3-6, 2024, Okinawa, Japan
Atelier - Innover avec l’IA Générative et les graphes de connaissancesNeo4j
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Allez au-delà du battage médiatique autour de l’IA et découvrez des techniques pratiques pour utiliser l’IA de manière responsable à travers les données de votre organisation. Explorez comment utiliser les graphes de connaissances pour augmenter la précision, la transparence et la capacité d’explication dans les systèmes d’IA générative. Vous partirez avec une expérience pratique combinant les relations entre les données et les LLM pour apporter du contexte spécifique à votre domaine et améliorer votre raisonnement.
Amenez votre ordinateur portable et nous vous guiderons sur la mise en place de votre propre pile d’IA générative, en vous fournissant des exemples pratiques et codés pour démarrer en quelques minutes.
What is Master Data Management by PiLog Groupaymanquadri279
PiLog Group's Master Data Record Manager (MDRM) is a sophisticated enterprise solution designed to ensure data accuracy, consistency, and governance across various business functions. MDRM integrates advanced data management technologies to cleanse, classify, and standardize master data, thereby enhancing data quality and operational efficiency.
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
2. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Colin O’Dell / @colinodell
• Lead Web Developer & DevOps Engineer
at Unleashed Technologies
• Primary language is PHP
• PHP developer for 16 years
• PHP League Leadership Team
• Author/maintainer of PHP CommonMark library
• PHP 7 Upgrade Guide e-book author
• Also experienced in JavaScript, Java, C#, and Python
@colinodell
3. Overview
I. Importance of debugging
II. Debugging process
III. Tools & Techniques
IV. Q&A
Photo by Roman Boed // cc by 2.0 // https://flic.kr/p/ngwcf1
@colinodell
5. Debugging is...
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
important
@colinodell
6. Debugging is...
Photo by Ewan Cross // cc by-nc-nd 2.0 // https://flic.kr/p/7MCt3m
the single most
important skill in
programming.
@colinodell
7. Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
PlanningCoding
@colinodell
8. Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
Planning
Testing &
Debugging
Coding
@colinodell
9. Debugging is the process of finding and resolving bugs
or defects that prevent correct operation of computer
software or a system.
– Wikipedia
Photo by Stephen Dyrgas // cc by-nc-nd 2.0 // https://flic.kr/p/3eTfWU
10. Process is the foundation of effective debugging
Process
Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
11. Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
Gain experience with code and tools
Experience
Process
12. Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
Develop your intuition
Intuition
Experience
Process
13. Junior Developers
• Try the “usual” steps
• Clear caches
• Re-install dependencies
• chmod –R 777 *
• Ask somebody else
• Co-worker
• Google
• StackOverflow post
Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL
@colinodell
14. XY Problem
Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL
•I want to solve problem X
•How do I solve X?
@colinodell
15. XY Problem
Photo by Yoel Ben-Avraham, with changes // cc by--nd 2.0 // https://flic.kr/p/6pmtQL
•I want to solve problem X
•How do I solve X?
•Solution Y might work
•How can I do Y?
@colinodell
16. Photo by quattrostagioni // cc by 2.0 // https://flic.kr/p/aGjVq8
1.Don’t parse HTML with regex
2.Solve problems the right way @colinodell
17. “I don’t know why”
“For some reason”
“Doesn’t make sense”
Photo by Stanley Yuu // cc by-nc-nd 2.0 // https://flic.kr/p/pMnfNu
@colinodell
19. “The bug is not moving around in your code,
trying to trick or evade you. It is just siting in
one place, doing the wrong thing in the same
way every time.” – Nick Parlante, Debugging Zen
Photo by GrahamC57 // cc by-nc-nd 2.0 // https://flic.kr/p/cwJi9Q
@colinodell
20. Assume your
code is the
problem
Photo by Sergio Flores Rosales // cc by-nc-nd 2.0 // https://flic.kr/p/5UHkaW
@colinodell
21. Systematic Approach
1. Gather information
2. Replicate the issue
3. Identify the culprit
4. Fix it & re-test
5. Mitigate future occurrences
Photo from EduSpiral // cc by-nc-nd 3.0
@colinodell
22. 1. Gather information
• Expected behavior vs.
actual behavior
• Error messages
• Stack traces
Photo from youmustdesireit.wordpress.com
•Screenshots
•Browser & OS
•Date & time
•Log entries
@colinodell
23. 2. Replicate the Issue
Be able to replicate with 100% certainty
Photo by Nick Royer // cc by-sa // https://flic.kr/p/d41ASC
@colinodell
24. 3. Identify the Culprit
Photo by U.S. Navy // cc 2.0 // https://flic.kr/p/n6Wgks
• Be methodical
• Make no assumptions
• Understand the bug @colinodell
25. 4. Fix it & Re-test
• Attempt to replicate again
• Avoid XY problem
• No temporary workarounds!
• Add technical debt
• May introduce other issues
• Never get replaced with true solutions
Photo by Jeff Eaton // cc by-sa 2.0 // https://flic.kr/p/b33rSx
@colinodell
26. 5. Mitigate Future Occurrences
• Add an automated test
• Share your new knowledge
• Project documentation
• Blog post
• StackOverflow
• Submit patch upstream
Photo by marcokalmann // cc by-nc-nd 2.0 // https://flic.kr/p/4CqLMQ
@colinodell
27. Recap
1. Gather information
2. Replicate the issue
3. Identify the culprit
4. Fix it & re-test
5. Mitigate future occurrences
Photo from EduSpiral // cc by-nc-nd 3.0
@colinodell
28. Long-Term Results
• Gain experience
• Learn how the system works
• Build heuristics
• Boost confidence
Photo by Glenn Beltz // cc by 2.0 // https://flic.kr/p/i7Csdx
@colinodell
30. Two essential tools
• Integrated development
environment (IDE)
• Interactive debugger
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
@colinodell
31. Integrated Development Environment
•Minimum features:
•Syntax highlighting
•Auto-completion
•Fast code navigation
•Debugger
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
@colinodell
32. Interactive Debugger
•Pause code execution
•Step through execution
•Examine variables
•Explore call stack
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
@colinodell
33. Techniques
1. Trace backwards from known issue
2. Trace forwards from start
3. Binary search
4. Use tools
5. Get help
6. Take a break
Photo by Massmo Relsig // cc by-nc-nd 2.0 // https://flic.kr/p/pFrJCe
@colinodell
34. 1. Trace backwards
•Error is thrown from known location
•Use a debugger
•Establish context
•Work backwards
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
@colinodell
35. 1. Trace backwards
•Error is thrown from known location
•Use a debugger
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
36. 1. Trace backwards
•Error is thrown from known location
•Use a debugger
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
37. 1. Trace backwards
•Error is thrown from known location
•Use a debugger
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
38. 1. Trace backwards
•Error is thrown from known location
•Use a debugger
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
39. 1. Trace backwards
•Error is thrown from known location
•Use a debugger
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
40. 2. Trace forwards
•Opposite direction
•Problematic line
isn’t known
•Use debugger or logging
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
41. 2. Trace forwards
•Opposite direction
•Problematic line
isn’t known
•Use debugger or logging
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
42. 2. Trace forwards
•Opposite direction
•Problematic line
isn’t known
•Use debugger or logging
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
43. 2. Trace forwards
•Opposite direction
•Problematic line
isn’t known
•Use debugger or logging
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
44. 3. Divide & Conquer
• Identify different code sections
• Set breakpoints at the boundaries
• Isolate issue to one particular area
• Focus efforts on that area
@colinodell
50. 4. Use tools
•Variable dumps
•Debug toolbars
•Console utility
•Profilers
•git bisect
•netcat
•curl
•strace
•etc.
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
@colinodell
51. Variable dumps
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
•Print to output:
•var_dump()
•pprint()
•puts()
•Log to file
•file_put_contents()
•Logger.debug()
@colinodell
52. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debug toolbars
@colinodell
53. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Console Utility
Drupal: drush
Drupal Console
Symfony: bin/console
Laravel: artisan
Magento: n98-magerun
@colinodell
54. Performance Profiling
Identify slowness:
• Bottlenecks
• Resource hogs
• Inefficient code
Photo by Alan Stark // cc by-sa 2.0 // https://flic.kr/p/dn3qjx
Tools:
• Blackfire (freemium)
• New Relic (freemium)
• xhprof (open-source)
@colinodell
55. git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
56. git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
57. git bisect
v1.7 ? ? ? BAD ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
58. git bisect
v1.7 ? ? ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
59. git bisect
v1.7 ? GOOD ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
60. git bisect
v1.7 GOOD GOOD ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
61. git bisect
v1.7 GOOD GOOD
X BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
abcd123 is the first bad commit
@colinodell
62. git bisect
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
# of Commits # of Tests
9 4
90 8
900 16
Scales logarithmically – runs in O(log N)
63. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
netcat
@colinodell
64. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
strace
@colinodell
65. 5. Get help
• RTFM / RTFD
• Project forums or issue queue
• StackOverflow, IRC, etc.
• Ask a colleague
• Expert in that area
• Senior developer
• Rubber ducking
Photo by Hiromitsu Morimoto // cc by-sa 2.0 // https://flic.kr/p/6Vzzaa
@colinodell
66. 6. Take a break
Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/cFEcDC
• Clear your mind; start fresh
• Forget invalid assumptions
• Recharge your batteries
• Let your subconscious work on it
@colinodell
67. Four things to walk away with
1. Computers aren’t random,
and neither are bugs
2. Persistence will always pay off
3. Don’t be afraid to dive deep
4. Don’t make assumptions or
take things for granted
Photo by Kristina Alexadnerson // cc by-nc-nd 2.0 // https://flic.kr/p/dvEpfY
@colinodell
According to the Mythical Man Month, 1/6th
½ is testing/debugging
How much - actually writing code vs getting it working
Area where it’s worthwhile to become efficient
READ SLOWLY
Shouldn’t be done haphazardly
Like intuition, but not
Understanding without proof
Clarity; accuracy; precision
--
Focus on the process
Experience and “sixth sense” will come with time
NEXT: Debugging process
BE NICE / CONSTRUCTIVE
TODO ADD NOTES
When you give up on the proper approach
Apply workaround instead
Improper solutions will cause issues later
NEXT - EXAMPLE
Base85-encoded
Don’t be clever
TRANSITION NEEDED!!
Magical thinking
Article
sneaky
Bugs are almost always based on faulty assumptions
95% in your code
If helping others, assume their code is problem
Challenge their assumptions
Take with grain of salt
Define the symptoms
Collect everything you can
Automated tests preferred, but manual is okay too
LEGOS
Understand the fundamental nature
Exactly why
Other nice-to-haves:
File syncing
Git integration
Run tools
PhpStorm, Sublime Text, vim
NOT Notepad++ or Dreamweaver
Debuggers are awesome tool
…
Better than primitive approaches
Examine in real time
Xdebug
Chrome developer tools
Click 4 times
Dive in
Look at call stack
Advanced breakpoints
Grouping
Conditions
Stack trace
Grep for error message
Set breakpoint
For example
Examine variables
How did I get here? – call stack
Log/output results at different steps
Identify where things start going wrong
Log/output results at different steps
Identify where things start going wrong
Log/output results at different steps
Identify where things start going wrong
Log/output results at different steps
Identify where things start going wrong
Debugger is critical
Not only tool
Tools are not a substitute for thinking