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 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 - 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 & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests.
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 - 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
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 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 - 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 & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests.
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 - 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
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.
The document discusses how contributors can get involved with the YUI project, including obtaining the source code by forking the GitHub repository, submitting pull requests and bug fixes, writing test cases, and providing support through forums and issue tracking. It also outlines the development process, from signing a CLA to getting changes merged after code review. The status of contributions is provided, showing increased committers, builds, and adoption of practices like daily builds.
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.
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
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.
Dries Buytaert, founder of Drupal and CTO of Acquia, discusses the history and future of the open web. He notes that the web has alternated between more open and closed periods over time, with the current mobile/app era favoring a more closed experience. However, trends in AI, data, devices, and user experience are driving the web toward closed platforms controlled by a few large companies. Buytaert argues we must work to build a more open and decentralized web through standards, algorithm oversight, data portability, and tools that give users control over their data and privacy while still providing a great experience. Drupal aims to collaborate with others to help champion a more open future for the web
This document summarizes Dries Buytaert's presentation on opportunities for Drupal in India. It discusses the growth of Drupal communities and events in major Indian cities from 2011 to present. It encourages Indian Drupal contributors to participate more in core development and global community efforts. It also outlines new features and ongoing plans for Drupal 8 and emphasizes the importance of porting modules to help drive adoption. The main takeaways are accelerating Drupal 8 adoption, contributing to the larger community, and providing local leadership to build grassroots communities in India.
State of Drupal keynote, DrupalCon AmsterdamDries Buytaert
The document discusses strategies for sustaining open source projects like Drupal that rely on volunteer contributions. It notes challenges around maintaining motivation as projects grow larger and more complex. It proposes tracking contributions from individuals, organizations, and end users to give them recognition and incentivize continued involvement. Tracking different types of contributions beyond just code could help capture an organization's full participation.
State of Drupal keynote, DrupalCon New OrleansDries Buytaert
Dries Buytaert presented several initiatives at DrupalCon New Orleans to improve Drupal based on community feedback. He proposed initiatives to enhance media handling for content authors, improve content workflows, enhance blocks and layout tools for site builders, and create better data modeling tools. These initiatives were designed to address key areas for improvement identified in a community survey and align with Drupal's vision of building the leading platform for digital experiences. Dries outlined mockups and teams for each initiative and called for community participation.
David will make a recap of the DrupalCon Dublin 2016 with focus on the Frontend Track. Where Drupal is heading and the status of initiatives that aim to improve the UX of Drupal.
http://www.meetup.com/drupal-show-and-tell/events/234290756/
This document summarizes Dries Buytaert's presentation at DrupalCon Dublin. He discusses the upcoming release of Drupal 8.2 in October 2016, which will include improvements to block placement, menu changing, REST API, and JavaScript. Buytaert also talks about how Drupal releases new features through its use of scheduled releases, semantic versioning, and experimental modules. He reflects on his personal journey with Drupal and finding meaning and purpose in life-changing outcomes for others through both positive and difficult experiences. Buytaert discusses scaling Drupal's impact through programs like India's Campus Ambassador Program and the UK Drupal Apprenticeship Program.
Describe how to contribute to open source projects.
Provide example process using two hot open source project, linux and AOSP(Android Open Source Project)
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.
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.
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.
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.
Slides to support a master class on making student thinking visible through practical hands-on activities and structured around Dylan Wiliam's work on formative assessment and active learning.
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.
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.
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.
The document discusses how contributors can get involved with the YUI project, including obtaining the source code by forking the GitHub repository, submitting pull requests and bug fixes, writing test cases, and providing support through forums and issue tracking. It also outlines the development process, from signing a CLA to getting changes merged after code review. The status of contributions is provided, showing increased committers, builds, and adoption of practices like daily builds.
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.
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
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.
Dries Buytaert, founder of Drupal and CTO of Acquia, discusses the history and future of the open web. He notes that the web has alternated between more open and closed periods over time, with the current mobile/app era favoring a more closed experience. However, trends in AI, data, devices, and user experience are driving the web toward closed platforms controlled by a few large companies. Buytaert argues we must work to build a more open and decentralized web through standards, algorithm oversight, data portability, and tools that give users control over their data and privacy while still providing a great experience. Drupal aims to collaborate with others to help champion a more open future for the web
This document summarizes Dries Buytaert's presentation on opportunities for Drupal in India. It discusses the growth of Drupal communities and events in major Indian cities from 2011 to present. It encourages Indian Drupal contributors to participate more in core development and global community efforts. It also outlines new features and ongoing plans for Drupal 8 and emphasizes the importance of porting modules to help drive adoption. The main takeaways are accelerating Drupal 8 adoption, contributing to the larger community, and providing local leadership to build grassroots communities in India.
State of Drupal keynote, DrupalCon AmsterdamDries Buytaert
The document discusses strategies for sustaining open source projects like Drupal that rely on volunteer contributions. It notes challenges around maintaining motivation as projects grow larger and more complex. It proposes tracking contributions from individuals, organizations, and end users to give them recognition and incentivize continued involvement. Tracking different types of contributions beyond just code could help capture an organization's full participation.
State of Drupal keynote, DrupalCon New OrleansDries Buytaert
Dries Buytaert presented several initiatives at DrupalCon New Orleans to improve Drupal based on community feedback. He proposed initiatives to enhance media handling for content authors, improve content workflows, enhance blocks and layout tools for site builders, and create better data modeling tools. These initiatives were designed to address key areas for improvement identified in a community survey and align with Drupal's vision of building the leading platform for digital experiences. Dries outlined mockups and teams for each initiative and called for community participation.
David will make a recap of the DrupalCon Dublin 2016 with focus on the Frontend Track. Where Drupal is heading and the status of initiatives that aim to improve the UX of Drupal.
http://www.meetup.com/drupal-show-and-tell/events/234290756/
This document summarizes Dries Buytaert's presentation at DrupalCon Dublin. He discusses the upcoming release of Drupal 8.2 in October 2016, which will include improvements to block placement, menu changing, REST API, and JavaScript. Buytaert also talks about how Drupal releases new features through its use of scheduled releases, semantic versioning, and experimental modules. He reflects on his personal journey with Drupal and finding meaning and purpose in life-changing outcomes for others through both positive and difficult experiences. Buytaert discusses scaling Drupal's impact through programs like India's Campus Ambassador Program and the UK Drupal Apprenticeship Program.
Describe how to contribute to open source projects.
Provide example process using two hot open source project, linux and AOSP(Android Open Source Project)
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.
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.
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.
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.
Slides to support a master class on making student thinking visible through practical hands-on activities and structured around Dylan Wiliam's work on formative assessment and active learning.
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.
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.
The document discusses an Electron (formerly Atom Shell) meetup. It provides links to documentation on the differences between Electron and Node-webkit. If time permits, an Electron demo may be shown. Electron allows building cross-platform desktop apps using JavaScript, HTML, and CSS by embedding Chromium and io.js. It also references a presentation on embedding Node.js into the Atom editor.
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)
신뢰성 높은 클라우드 기반 서비스 운영을 위한 Chaos Engineering in Action (윤석찬, AWS 테크에반젤리스트) :: ...Amazon Web Services Korea
This document discusses concepts related to chaos engineering including:
1. Many large tech companies like Amazon, Netflix, and Google practice chaos engineering to test system resiliency through failure injection and destruction testing.
2. Netflix developed open source tools like Chaos Monkey and Simian Army to randomly terminate instances and components to ensure applications can withstand infrastructure failures.
3. Chaos engineering involves injecting failures in a controlled way to test recovery capabilities and uncover weaknesses before they impact real users during production outages.
Professional persona project - Banglin CaiBanglin Cai
Banglin Cai is a visual effects artist from Shenzhen, China. His interests include badminton, photography, and skiing. His dream is to become a successful VFX artist and create his own artworks. In the future, he aims to develop his skills further and work for top VFX studios like ILM. He is passionate about visual effects and finding ways to continuously improve his craft.
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.
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?
The document describes the evolution of a company's process for managing customer bug reports and software maintenance releases. Originally, bugs were prioritized and addressed through periodic service packs. This led to long wait times for fixes and an inability to address urgent issues. A new process was introduced with a dedicated team and weekly cumulative hot fixes. This improved collaboration, reduced lead times, and allowed for continuous deployment of fixes. Metrics show the new process improved the number of bugs addressed, homes assigned, and total bugs open over time.
An Ignite Fort Collins presentation showing how to talk to strangers, and touching on why it's so hard for us to do.
See the presentation on YouTube: http://youtu.be/zehoYsVtQNQ
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.
As a Small Business owner, you have taken the first step and decided that WordPress is the engine for your online business. But customizing your business website can be difficult – especially if you don’t know which are the right plugins to use to maximum effect. This presentation will help you find what types of plugins to use for which type of business, and how to customize them.
Heather Wilde is a Coach, Speaker and author of Fundamentals of Evernote as well as the CTO of ROCeteer.
This document summarizes Darren Kuropatwa's presentation at the BYTE Conference in February 2013 about creating easy and engaging learning experiences using technology. It provides examples of mobile apps like Phonto that allow creating and sharing photos with patterns, prompts for recording short audio reflections on questions, and the SonicPics app for creating soundscapes. It also describes projects where teachers had students reflect daily on what they learned in scribe blogs or photo/audio posts and how participating in sharing ideas can help build a learning culture.
Similar to Debugging Effectively - DrupalCon Europe 2016 (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.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Speck&Tech
ABSTRACT: A prima vista, un mattoncino Lego e la backdoor XZ potrebbero avere in comune il fatto di essere entrambi blocchi di costruzione, o dipendenze di progetti creativi e software. La realtà è che un mattoncino Lego e il caso della backdoor XZ hanno molto di più di tutto ciò in comune.
Partecipate alla presentazione per immergervi in una storia di interoperabilità, standard e formati aperti, per poi discutere del ruolo importante che i contributori hanno in una comunità open source sostenibile.
BIO: Sostenitrice del software libero e dei formati standard e aperti. È stata un membro attivo dei progetti Fedora e openSUSE e ha co-fondato l'Associazione LibreItalia dove è stata coinvolta in diversi eventi, migrazioni e formazione relativi a LibreOffice. In precedenza ha lavorato a migrazioni e corsi di formazione su LibreOffice per diverse amministrazioni pubbliche e privati. Da gennaio 2020 lavora in SUSE come Software Release Engineer per Uyuni e SUSE Manager e quando non segue la sua passione per i computer e per Geeko coltiva la sua curiosità per l'astronomia (da cui deriva il suo nickname deneb_alpha).
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
Best 20 SEO Techniques To Improve Website Visibility In SERP
Debugging Effectively - DrupalCon Europe 2016
1. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debugging Effectively
Colin O’Dell
@colinodell
2. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Colin O’Dell
• Lead Web Developer at Unleashed Technologies
• PHP developer since 2002
• PHP League Member
• league/commonmark
• league/html-to-markdown
• PHP 7 Upgrade Guide e-book
@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 tools and code
Experience
Process
12. Photo by Matthew Paulson // cc by-nc-nd 2.0 // https://flic.kr/p/di35xa
Develop a “sixth sense”
“Sixth Sense”
Experience
Process
13. Junior Developers
• Try the “usual” steps
• drush cc all
• composer install
• chmod –R 777 *
• Google the error
• Try every solution
• Ask somebody else
• Co-worker
• StackOverflow post
• Give up
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
•Breakpoints
•Conditional breakpoints
•Step through execution
•Examine variables
•Explore call stack
Photo by florianric // cc by 2.0 // https://flic.kr/p/c4QJzC
@colinodell
35. 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
36. 1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
@colinodell
37. 1. Trace backwards
•Use a debugger
•Identify source of error
•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
•Use a debugger
•Identify source of error
•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
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
40. 1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
a()
b()
c()
d()
Photo by Shawn Harquail // cc by-nc 2.0 // https://flic.kr/p/npxFVw
41. 1. Trace backwards
•Use a debugger
•Identify source of error
•Establish context
•Work backwards
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. 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
45. 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
46. 3. Divide & Conquer
• Identify different code sections
• Set breakpoints at the boundaries
• Isolate issue to one particular area
• Focus efforts on that area
@colinodell
52. 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
53. Variable dumps
Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
•dump()
•kint()
•dpm()
@colinodell
54. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Debug toolbars
@colinodell
55. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
Console Utility
Drupal: drush
Drupal Console
Symfony: bin/console
Magento: n98-magerun
Laravel: artisan
@colinodell
56. 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
57. git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
58. git bisect
v1.7 ? ? ? ? ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
59. git bisect
v1.7 ? ? ? BAD ? ? ? HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
60. git bisect
v1.7 ? ? ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
61. git bisect
v1.7 ? GOOD ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
62. git bisect
v1.7 GOOD GOOD ? BAD BAD BAD BAD HEAD
Photo by unbekannt270 // cc by 2.0 // https://flic.kr/p/oHReqm
@colinodell
63. 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
64. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
netcat
@colinodell
65. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
curl
@colinodell
66. Photo by Joseph B // cc by-nc-nd 2.0 // https://flic.kr/p/7GAMBe
strace
@colinodell
67. 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
68. 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
69. 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
If you build 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