Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Share this guide!
Related to this guide:
How to Set Up Linux on Your PC Using a Virtual MachineHow to Set Up Linux on Your PC Using a Virtual Machine
If you are using Windows on your PC, it may be easier to code or program by running Linux or another Unix-based operating system alongside Windows.
Catherine's profile picture CatherineView
In these interests: linuxvirtualboxwindows
How to Detect Sound Output in Linux and Use It to Call a Program (Or Drive a Motor!)How to Detect Sound Output in Linux and Use It to Call a Program (Or Drive a Motor!)
In these interests: linuxcode
The Perfect (almost) Touchpad Settings on LinuxThe Perfect (almost) Touchpad Settings on Linux
Proceed with caution Some users have reported that these settings have messed up their trackpads.
Dayne's profile picture DayneView
In these interests: linux
People also read:
Boot Camp is a great feature of mcOS, but it won’t help you install Linux. To do that we’re going to use a tool called rEFInd.
The Dirty Cow exploit is a serious exploit in the Linux kernel that allows users to gain root access to the system.
If you spend a lot of time staring at log files, you might want to consider installing CCZE. CCZE is a tool that color highlights your log files making them much easier to read.
Ubuntu MATE Raspberry Pi
Get your favorite open-source OS on the Pi.
Raspberry Pi Gadget Mode
Program your Pi without a keyboard, monitor, or network connection
Posted in these interests:
Discuss this guide:
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Total time: 5 minutes 
Updated: July 22nd, 2020
Automatically Control Your Raspberry Pi Fan (and Temperature) with Python Automatically Control Your Raspberry Pi Fan (and Temperature) with PythonIt’s getting hot in here (so hot), so let’s just write some code.
Calling all writers!

We’re hiring. Write for Howchoo

pi
PRIMARY
215 guides
How to Connect to a Raspberry Pi Remotely via SSH How to Connect to a Raspberry Pi Remotely via SSHThe preferred (and most common) method of connecting to your Pi to run commands.
Calling all writers!

We’re hiring. Write for Howchoo

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
For Raspberry Pi beginners who still love to follow along in a book.
Michael's profile picture MichaelView
In these interests: booksretropiepi
What’s better than an experiment? An experiment in space!
Michael's profile picture MichaelView
In these interests: kidspinews
In these interests: pi
Kali Linux is a great distribution for Raspberry Pi users who want to get to grips with security testing.
The Raspberry Pi micro-computer grows in power with each new model release, with more resources that make it a more capable, low-cost content server for your media and resources.
Laptops, smartphones, tablets, even lightbulbs—an endless number of devices now have the ability to connect to your local network and the wider internet.
The Raspberry Pi was designed to boot from an SD card, but in some cases, it’s convenient to boot from a USB drive.
Get the new official Raspberry Pi OS on your Pi.
New to the Raspberry Pi? Start here.
Blocking ads just got easier with Pi-hole, a network-wide ad blocker for the Raspberry Pi
Don’t skip out on a proper case for your Pi 4.
The only Raspberry Pi Bluetooth guide you’ll ever need.
Your favorite MS OS on the Pi.
pi
PRIMARY
The Raspberry Pi is a small, inexpensive computer developed by the Raspberry Pi Foundation in the United Kingdom.
Analytics and ImprovementsAnalytics and Improvements

Make sure Share iPhone Analytics is toggled on

Tap the “Analytics Data” option.

log-aggregatedlog-aggregated

Scroll down until you reach the last file that begins with log-aggregated.

log-aggregatedlog-aggregated

Drag the cursor down to the bottom and hold your finger there, it will eventually scroll very quickly.

ios notesios notes

Open the built-in Notes app and paste the contents of that file into it.

ios notesios notes

Click the action icon in the top right and then select Find in Note.

ios battery cycle countios battery cycle count

The number immediately following “BatteryCycleCount” is your cycle count!

Next, learn how to back up your iPhone.

Analytics and ImprovementsAnalytics and Improvements

Make sure Share iPhone Analytics is toggled on

Tap the “Analytics Data” option.

log-aggregatedlog-aggregated

Scroll down until you reach the last file that begins with log-aggregated.

log-aggregatedlog-aggregated

Drag the cursor down to the bottom and hold your finger there, it will eventually scroll very quickly.

ios notesios notes

Open the built-in Notes app and paste the contents of that file into it.

ios notesios notes

Click the action icon in the top right and then select Find in Note.

ios battery cycle countios battery cycle count

The number immediately following “BatteryCycleCount” is your cycle count!

Next, learn how to back up your iPhone.

Analytics and ImprovementsAnalytics and Improvements

Make sure Share iPhone Analytics is toggled on

Tap the “Analytics Data” option.

log-aggregatedlog-aggregated

Scroll down until you reach the last file that begins with log-aggregated.

log-aggregatedlog-aggregated

Drag the cursor down to the bottom and hold your finger there, it will eventually scroll very quickly.

ios notesios notes

Open the built-in Notes app and paste the contents of that file into it.

ios notesios notes

Click the action icon in the top right and then select Find in Note.

ios battery cycle countios battery cycle count

The number immediately following “BatteryCycleCount” is your cycle count!

Next, learn how to back up your iPhone.

Simplest Way to Find the Battery Charge Cycle Count on Your iPhone

ios battery cycle countios battery cycle count
Dayne Dayne (57)
Total time: 2 minutes 
Updated: July 22nd, 2020

This is the simplest way to see the health of your iPhone’s battery. For a reminder, after 500 cycles, your battery is operating with roughly 80% of its full capacity*.

* According to this support article.

Posted in these interests:

iphone
PRIMARY
29 guides
ios
27 guides

Simplest Way to Find the Battery Charge Cycle Count on Your iPhone

iphoneios
Dayne Dayne (57)
Total time: 2 minutes 
Updated: July 22nd, 2020
Dayne
 

Posted in these interests:

iphone
PRIMARY
29 guides
ios
27 guides
iphone
PRIMARY
29 guides
ios
27 guides
PRIMARY
Calling all writers!

We’re hiring. Write for Howchoo

 
In these interests
iphone
PRIMARY
29 guides
ios
27 guides
iphone
PRIMARY
29 guides
ios
27 guides
PRIMARY
Analytics and ImprovementsAnalytics and Improvements

Make sure Share iPhone Analytics is toggled on

Tap the “Analytics Data” option.

log-aggregatedlog-aggregated

Scroll down until you reach the last file that begins with log-aggregated.

log-aggregatedlog-aggregated

Drag the cursor down to the bottom and hold your finger there, it will eventually scroll very quickly.

ios notesios notes

Open the built-in Notes app and paste the contents of that file into it.

ios notesios notes

Click the action icon in the top right and then select Find in Note.

ios battery cycle countios battery cycle count

The number immediately following “BatteryCycleCount” is your cycle count!

Next, learn how to back up your iPhone.

Analytics and ImprovementsAnalytics and Improvements

Make sure Share iPhone Analytics is toggled on

Analytics and ImprovementsAnalytics and Improvements

Make sure Share iPhone Analytics is toggled on

Tap the “Analytics Data” option.

Tap the “Analytics Data” option.

Tap Analytics Data

log-aggregatedlog-aggregated

Scroll down until you reach the last file that begins with log-aggregated.

log-aggregatedlog-aggregated

Scroll down until you reach the last file that begins with log-aggregated.

Scroll down to the last file that begins with “log-aggregated”

log-aggregatedlog-aggregated

Drag the cursor down to the bottom and hold your finger there, it will eventually scroll very quickly.

log-aggregatedlog-aggregated

Drag the cursor down to the bottom and hold your finger there, it will eventually scroll very quickly.

Select and copy the contents of the file

ios notesios notes

Open the built-in Notes app and paste the contents of that file into it.

ios notesios notes

Open the built-in Notes app and paste the contents of that file into it.

Open the Notes app and paste the contents of the file

ios notesios notes

Click the action icon in the top right and then select Find in Note.

ios notesios notes

Click the action icon in the top right and then select Find in Note.

Click the action icon (top right) and then “Find in Note”

ios battery cycle countios battery cycle count

The number immediately following “BatteryCycleCount” is your cycle count!

Next, learn how to back up your iPhone.

ios battery cycle countios battery cycle count

The number immediately following “BatteryCycleCount” is your cycle count!

Next, learn how to back up your iPhone.

Type in BatteryCycleCount

Mentioned here
How to Back Up Your iPhone How to Back Up Your iPhoneJust put it on the cloud with everything else.
How to Back Up Your iPhone
Calling all writers!

We’re hiring. Write for Howchoo

Dayne's profile pictureDayne
Joined in 2015
Software engineer, co-founder of Howchoo, and renaissance man. Lifelong amateur woodworker, espresso mechanic, freestyle lyricist, drummer, artist, runner, coffee roaster, electrical engineer, gamer, inventor, churner, psychoanalyst, photographer, pizza chef, pit master, audiophile, guitarist, entrepreneur, dad, yogi, cyclist, and barista.
Dayne's profile picture
Share this guide!
RedditEmailTextPinterest
Related to this guide:
I heart howchoo iPhone messageI heart howchoo iPhone message
Because we all need to change things up from time to time in our digital conversations!
Michael's profile picture MichaelView
In these interests: iosiphonefonts
iPhone Font Size ScrolliPhone Font Size Scroll
Finding the text hard to read on your iPhone? This guide will help you out!
Michael's profile picture MichaelView
In these interests: iosfontsiphone
Arrow to HDRArrow to HDR
Ever notice that little HDR feature that appears for certain photographs on your iPhone? It’s called High Dynamic Range. Check out our guide on HDR and when to use it.
Michael's profile picture MichaelView
In these interests: iosiphone
I heart howchoo iPhone messageI heart howchoo iPhone message
Because we all need to change things up from time to time in our digital conversations!
Michael's profile picture MichaelView
In these interests: iosiphonefonts
Michael's profile pictureViewiosiphonefonts
iPhone Font Size ScrolliPhone Font Size Scroll
Finding the text hard to read on your iPhone? This guide will help you out!
Michael's profile picture MichaelView
In these interests: iosfontsiphone
Michael's profile pictureViewiosfontsiphone
Arrow to HDRArrow to HDR
Ever notice that little HDR feature that appears for certain photographs on your iPhone? It’s called High Dynamic Range. Check out our guide on HDR and when to use it.
Michael's profile picture MichaelView
In these interests: iosiphone
Michael's profile pictureViewiosiphone
People also read:
person holding iPhone taking HDR photo
Hint…it’s NOT high definition resolution.
Delete iPhone apps
Deleting has never been easier
iPhone Backup
Just put it on the cloud with everything else.
Factory Reset iPhone
Wipe your iPhone and start over new.
If you’ve got an iPhone with TouchID, and you’re mourning the loss of the ability to unlock your phone without pressing the home button, there is hope.
Whether you bought the 16GB iPhone on a budget or you like to store thousands of pictures and songs on your phone, you will eventually need to learn how to free up some space.
Whether you’ve shattered your screen, broken your home button, or decided to upgrade to a fancy new iOS device, chances are you’ll want your new iPhone to work like your old one.
person holding iPhone taking HDR photo
Hint…it’s NOT high definition resolution.
Delete iPhone apps
Deleting has never been easier
iPhone Backup
Just put it on the cloud with everything else.
person holding iPhone taking HDR photo
person holding iPhone taking HDR photoWhat is HDR on an iPhone Camera?
Add work email to iPhone.
Add work email to iPhone.How to Add Your Work Email to Your iPhone
iPhone block number
iPhone block numberHow to Block a Number on an iPhone
Delete iPhone apps
Delete iPhone appsHow to Delete Apps on an iPhone
iPhone Backup
iPhone BackupHow to Back Up Your iPhone
Factory Reset iPhone
Wipe your iPhone and start over new.
If you’ve got an iPhone with TouchID, and you’re mourning the loss of the ability to unlock your phone without pressing the home button, there is hope.
Whether you bought the 16GB iPhone on a budget or you like to store thousands of pictures and songs on your phone, you will eventually need to learn how to free up some space.
Whether you’ve shattered your screen, broken your home button, or decided to upgrade to a fancy new iOS device, chances are you’ll want your new iPhone to work like your old one.
Factory Reset iPhone
Factory Reset iPhoneHow to Factory Reset your iPhone
Share WiFi Password iPhone Android
Share WiFi Password iPhone AndroidHow to Share A WiFi Password from iPhone to Android
How to unlock your iPhone the old way in iOS 10
How to Free Up iPhone Storage Space
How to clone your old iPhone to a new iPhone
Posted in these interests:
iphoneiphone
iphone
PRIMARY
iosios
iOS is the mobile operating system used by the iPhone, iPad, and iPod Touch.
iphoneiphone
iphone
PRIMARY
PRIMARY
Explore
iosios
iOS is the mobile operating system used by the iPhone, iPad, and iPod Touch.
Explore
Discuss this guide:
We’re hiring!
Are you a passionate writer? We want to hear from you!
We’re hiring!
Are you a passionate writer? We want to hear from you!
View openings

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Donate

JavaScript Event Bubbling: A Comprehensive Guide

Tyler Tyler (285)
Total time: 5 minutes 
Updated: July 22nd, 2020

As a JavaScript developer, one of the most common things you’ll need to do is react to the user’s events. For example, the user clicks submit on a form and you need to validate it, or the user clicks a button that dynamically adds content to the page. There are many times when the user will interact with your application and you’ll need to respond to their actions. And since DOM elements are always nested within each other, managing the events and targets can be tricky. Enter event bubbling.

Posted in these interests:

javascript
PRIMARY
27 guides
webdev
58 guides

We often nest related DOM elements when we write our markup. For instance, we may have an div containing an img, an h2, and a p tags

My item

Item description

Suppose we wanted to allow the user to click anywhere inside of this div. If we were simply navigating the user to a new page, an a tag with a properly set href would be sufficient. But if we want to perform some other action on the current page, we’ll want to use JavaScript to listen for click events to the entire div and all of it’s children.

Fortunately, we don’t have to listen and respond to a click on each DOM element – div, img, h2, and p. We only have to listen to events on the parent! This is due to event bubbling.

When an event occurs on any DOM element on a page, the event is bubbled up through it’s parent elements triggering the event on each. So in our example above, if a user clicks on the p element, the click event will be triggered on the p followed by the parent div following by the parent of the div all the way to the document object.

As described in the previous step, the event is first triggered on the target element and then on it’s parents moving up the chain. We can prove this with a quick example.

Suppose we have the following markup:

We can set a click event listener on each div like this:

$(function() { $("#outer").on('click', function() { console.log('#outer click event triggered'); }); $("#middle").on('click', function() { console.log('#middle click event triggered'); }); $("#inner").on('click', function() { console.log('#inner click event triggered'); }); });

If I click on the inner div, #inner, I will see this in the console logs:

#inner click event triggered #middle click event triggered #outer click event triggered

Even though it appears that they are logged at the same time, the order is important. The event was triggered first on the inner div, followed by the middle div, followed by the outer div.

Suppose I click on the middle div.

#middle click event triggered #outer click event triggered

You probably assumed the output. The middle div was triggered first followed by it’s parent outer div. The event on the inner div wasn’t triggered.

In JavaScript, events have a target attribute to identify which DOM element was the target of the event. When we listen for events on a specific DOM element we can provide a callback function that is called when the event is triggered. This callback function takes the event as its first argument. This event object contains the target of the event. Here’s a quick example showing how to access the target.

The markup:

And the JavaScript:

$(function() { $("button").on('click', function(event) { console.log(event.target); }); });

Note: Even though we are using jQuery, as it stands the event.target attribute will be a vanilla JavaScript DOM object, not a jQuery object.

In the above example, the target would be the actual button that was clicked.

When we get into nested DOM elements this becomes a little bit more interesting. Take our example from the previous step. Suppose we log the target for each div.

$(function() { $("#outer").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#middle").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#inner").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); });

The above code simply logs the id of the target and the id of thisthis being the element we’re listening to. A click on the #inner element will log this:

inner inner inner middle inner outer

Each line shows target this.

As expected, the target doesn’t change. Even though the event is bubbled up and triggered on parent elements, the target remains the actual element that was clicked on. However, this provides access to the element we’re listening to. As we see, inner inner is first showing that the event on the #inner element was triggered first, and obviously #inner is the target as well.

Sometimes you’ll want to stop an event from bubbling all the way to the top. Maybe you know for sure you’re finished processing the event, or perhaps in some case you don’t want the event to be triggered on the parent.

We can stop bubbling with event.stopPropagation().

Taking the example we’re using throughout this guide, we can test this out:

$(function() { $("#outer").on('click', function(e) { console.log("#outer click event triggered"); }); $("#middle").on('click', function(e) { console.log("#middle click event triggered"); }); $("#inner").on('click', function(e) { console.log("#inner click event triggered"); e.stopPropagation(); }); });

This is similar to what we saw before except that we’ve added e.stopPropagation() to the callback for the #inner div. Before, a click on the #inner element bubbled up to the parent elements and logged 3 lines, but this time it stops with the target and logs:

#inner click event triggered

JavaScript Event Bubbling: A Comprehensive Guide

Tyler Tyler (285)
Total time: 5 minutes 
Updated: July 22nd, 2020

As a JavaScript developer, one of the most common things you’ll need to do is react to the user’s events. For example, the user clicks submit on a form and you need to validate it, or the user clicks a button that dynamically adds content to the page. There are many times when the user will interact with your application and you’ll need to respond to their actions. And since DOM elements are always nested within each other, managing the events and targets can be tricky. Enter event bubbling.

Posted in these interests:

javascript
PRIMARY
27 guides
webdev
58 guides

We often nest related DOM elements when we write our markup. For instance, we may have an div containing an img, an h2, and a p tags

My item

Item description

Suppose we wanted to allow the user to click anywhere inside of this div. If we were simply navigating the user to a new page, an a tag with a properly set href would be sufficient. But if we want to perform some other action on the current page, we’ll want to use JavaScript to listen for click events to the entire div and all of it’s children.

Fortunately, we don’t have to listen and respond to a click on each DOM element – div, img, h2, and p. We only have to listen to events on the parent! This is due to event bubbling.

When an event occurs on any DOM element on a page, the event is bubbled up through it’s parent elements triggering the event on each. So in our example above, if a user clicks on the p element, the click event will be triggered on the p followed by the parent div following by the parent of the div all the way to the document object.

As described in the previous step, the event is first triggered on the target element and then on it’s parents moving up the chain. We can prove this with a quick example.

Suppose we have the following markup:

We can set a click event listener on each div like this:

$(function() { $("#outer").on('click', function() { console.log('#outer click event triggered'); }); $("#middle").on('click', function() { console.log('#middle click event triggered'); }); $("#inner").on('click', function() { console.log('#inner click event triggered'); }); });

If I click on the inner div, #inner, I will see this in the console logs:

#inner click event triggered #middle click event triggered #outer click event triggered

Even though it appears that they are logged at the same time, the order is important. The event was triggered first on the inner div, followed by the middle div, followed by the outer div.

Suppose I click on the middle div.

#middle click event triggered #outer click event triggered

You probably assumed the output. The middle div was triggered first followed by it’s parent outer div. The event on the inner div wasn’t triggered.

In JavaScript, events have a target attribute to identify which DOM element was the target of the event. When we listen for events on a specific DOM element we can provide a callback function that is called when the event is triggered. This callback function takes the event as its first argument. This event object contains the target of the event. Here’s a quick example showing how to access the target.

The markup:

And the JavaScript:

$(function() { $("button").on('click', function(event) { console.log(event.target); }); });

Note: Even though we are using jQuery, as it stands the event.target attribute will be a vanilla JavaScript DOM object, not a jQuery object.

In the above example, the target would be the actual button that was clicked.

When we get into nested DOM elements this becomes a little bit more interesting. Take our example from the previous step. Suppose we log the target for each div.

$(function() { $("#outer").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#middle").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#inner").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); });

The above code simply logs the id of the target and the id of thisthis being the element we’re listening to. A click on the #inner element will log this:

inner inner inner middle inner outer

Each line shows target this.

As expected, the target doesn’t change. Even though the event is bubbled up and triggered on parent elements, the target remains the actual element that was clicked on. However, this provides access to the element we’re listening to. As we see, inner inner is first showing that the event on the #inner element was triggered first, and obviously #inner is the target as well.

Sometimes you’ll want to stop an event from bubbling all the way to the top. Maybe you know for sure you’re finished processing the event, or perhaps in some case you don’t want the event to be triggered on the parent.

We can stop bubbling with event.stopPropagation().

Taking the example we’re using throughout this guide, we can test this out:

$(function() { $("#outer").on('click', function(e) { console.log("#outer click event triggered"); }); $("#middle").on('click', function(e) { console.log("#middle click event triggered"); }); $("#inner").on('click', function(e) { console.log("#inner click event triggered"); e.stopPropagation(); }); });

This is similar to what we saw before except that we’ve added e.stopPropagation() to the callback for the #inner div. Before, a click on the #inner element bubbled up to the parent elements and logged 3 lines, but this time it stops with the target and logs:

#inner click event triggered
Jump to step

JavaScript Event Bubbling: A Comprehensive Guide

Tyler Tyler (285)
Total time: 5 minutes 
Updated: July 22nd, 2020

As a JavaScript developer, one of the most common things you’ll need to do is react to the user’s events. For example, the user clicks submit on a form and you need to validate it, or the user clicks a button that dynamically adds content to the page. There are many times when the user will interact with your application and you’ll need to respond to their actions. And since DOM elements are always nested within each other, managing the events and targets can be tricky. Enter event bubbling.

Posted in these interests:

javascript
PRIMARY
27 guides
webdev
58 guides

We often nest related DOM elements when we write our markup. For instance, we may have an div containing an img, an h2, and a p tags

My item

Item description

Suppose we wanted to allow the user to click anywhere inside of this div. If we were simply navigating the user to a new page, an a tag with a properly set href would be sufficient. But if we want to perform some other action on the current page, we’ll want to use JavaScript to listen for click events to the entire div and all of it’s children.

Fortunately, we don’t have to listen and respond to a click on each DOM element – div, img, h2, and p. We only have to listen to events on the parent! This is due to event bubbling.

When an event occurs on any DOM element on a page, the event is bubbled up through it’s parent elements triggering the event on each. So in our example above, if a user clicks on the p element, the click event will be triggered on the p followed by the parent div following by the parent of the div all the way to the document object.

As described in the previous step, the event is first triggered on the target element and then on it’s parents moving up the chain. We can prove this with a quick example.

Suppose we have the following markup:

We can set a click event listener on each div like this:

$(function() { $("#outer").on('click', function() { console.log('#outer click event triggered'); }); $("#middle").on('click', function() { console.log('#middle click event triggered'); }); $("#inner").on('click', function() { console.log('#inner click event triggered'); }); });

If I click on the inner div, #inner, I will see this in the console logs:

#inner click event triggered #middle click event triggered #outer click event triggered

Even though it appears that they are logged at the same time, the order is important. The event was triggered first on the inner div, followed by the middle div, followed by the outer div.

Suppose I click on the middle div.

#middle click event triggered #outer click event triggered

You probably assumed the output. The middle div was triggered first followed by it’s parent outer div. The event on the inner div wasn’t triggered.

In JavaScript, events have a target attribute to identify which DOM element was the target of the event. When we listen for events on a specific DOM element we can provide a callback function that is called when the event is triggered. This callback function takes the event as its first argument. This event object contains the target of the event. Here’s a quick example showing how to access the target.

The markup:

And the JavaScript:

$(function() { $("button").on('click', function(event) { console.log(event.target); }); });

Note: Even though we are using jQuery, as it stands the event.target attribute will be a vanilla JavaScript DOM object, not a jQuery object.

In the above example, the target would be the actual button that was clicked.

When we get into nested DOM elements this becomes a little bit more interesting. Take our example from the previous step. Suppose we log the target for each div.

$(function() { $("#outer").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#middle").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#inner").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); });

The above code simply logs the id of the target and the id of thisthis being the element we’re listening to. A click on the #inner element will log this:

inner inner inner middle inner outer

Each line shows target this.

As expected, the target doesn’t change. Even though the event is bubbled up and triggered on parent elements, the target remains the actual element that was clicked on. However, this provides access to the element we’re listening to. As we see, inner inner is first showing that the event on the #inner element was triggered first, and obviously #inner is the target as well.

Sometimes you’ll want to stop an event from bubbling all the way to the top. Maybe you know for sure you’re finished processing the event, or perhaps in some case you don’t want the event to be triggered on the parent.

We can stop bubbling with event.stopPropagation().

Taking the example we’re using throughout this guide, we can test this out:

$(function() { $("#outer").on('click', function(e) { console.log("#outer click event triggered"); }); $("#middle").on('click', function(e) { console.log("#middle click event triggered"); }); $("#inner").on('click', function(e) { console.log("#inner click event triggered"); e.stopPropagation(); }); });

This is similar to what we saw before except that we’ve added e.stopPropagation() to the callback for the #inner div. Before, a click on the #inner element bubbled up to the parent elements and logged 3 lines, but this time it stops with the target and logs:

#inner click event triggered

JavaScript Event Bubbling: A Comprehensive Guide

Tyler Tyler (285)
Total time: 5 minutes 
Updated: July 22nd, 2020

As a JavaScript developer, one of the most common things you’ll need to do is react to the user’s events. For example, the user clicks submit on a form and you need to validate it, or the user clicks a button that dynamically adds content to the page. There are many times when the user will interact with your application and you’ll need to respond to their actions. And since DOM elements are always nested within each other, managing the events and targets can be tricky. Enter event bubbling.

Posted in these interests:

javascript
PRIMARY
27 guides
webdev
58 guides

JavaScript Event Bubbling: A Comprehensive Guide

javascriptwebdev
Tyler Tyler (285)
Total time: 5 minutes 
Updated: July 22nd, 2020
Tyler
1
 

Posted in these interests:

javascript
PRIMARY
27 guides
webdev
58 guides
javascript
PRIMARY
27 guides
webdev
58 guides
PRIMARY
Jump to step
Calling all writers!

We’re hiring. Write for Howchoo

1
 
In these interests
javascript
PRIMARY
27 guides
webdev
58 guides
javascript
PRIMARY
27 guides
webdev
58 guides
PRIMARY
Jump to step

We often nest related DOM elements when we write our markup. For instance, we may have an div containing an img, an h2, and a p tags

My item

Item description

Suppose we wanted to allow the user to click anywhere inside of this div. If we were simply navigating the user to a new page, an a tag with a properly set href would be sufficient. But if we want to perform some other action on the current page, we’ll want to use JavaScript to listen for click events to the entire div and all of it’s children.

Fortunately, we don’t have to listen and respond to a click on each DOM element – div, img, h2, and p. We only have to listen to events on the parent! This is due to event bubbling.

When an event occurs on any DOM element on a page, the event is bubbled up through it’s parent elements triggering the event on each. So in our example above, if a user clicks on the p element, the click event will be triggered on the p followed by the parent div following by the parent of the div all the way to the document object.

As described in the previous step, the event is first triggered on the target element and then on it’s parents moving up the chain. We can prove this with a quick example.

Suppose we have the following markup:

We can set a click event listener on each div like this:

$(function() { $("#outer").on('click', function() { console.log('#outer click event triggered'); }); $("#middle").on('click', function() { console.log('#middle click event triggered'); }); $("#inner").on('click', function() { console.log('#inner click event triggered'); }); });

If I click on the inner div, #inner, I will see this in the console logs:

#inner click event triggered #middle click event triggered #outer click event triggered

Even though it appears that they are logged at the same time, the order is important. The event was triggered first on the inner div, followed by the middle div, followed by the outer div.

Suppose I click on the middle div.

#middle click event triggered #outer click event triggered

You probably assumed the output. The middle div was triggered first followed by it’s parent outer div. The event on the inner div wasn’t triggered.

In JavaScript, events have a target attribute to identify which DOM element was the target of the event. When we listen for events on a specific DOM element we can provide a callback function that is called when the event is triggered. This callback function takes the event as its first argument. This event object contains the target of the event. Here’s a quick example showing how to access the target.

The markup:

And the JavaScript:

$(function() { $("button").on('click', function(event) { console.log(event.target); }); });

Note: Even though we are using jQuery, as it stands the event.target attribute will be a vanilla JavaScript DOM object, not a jQuery object.

In the above example, the target would be the actual button that was clicked.

When we get into nested DOM elements this becomes a little bit more interesting. Take our example from the previous step. Suppose we log the target for each div.

$(function() { $("#outer").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#middle").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#inner").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); });

The above code simply logs the id of the target and the id of thisthis being the element we’re listening to. A click on the #inner element will log this:

inner inner inner middle inner outer

Each line shows target this.

As expected, the target doesn’t change. Even though the event is bubbled up and triggered on parent elements, the target remains the actual element that was clicked on. However, this provides access to the element we’re listening to. As we see, inner inner is first showing that the event on the #inner element was triggered first, and obviously #inner is the target as well.

Sometimes you’ll want to stop an event from bubbling all the way to the top. Maybe you know for sure you’re finished processing the event, or perhaps in some case you don’t want the event to be triggered on the parent.

We can stop bubbling with event.stopPropagation().

Taking the example we’re using throughout this guide, we can test this out:

$(function() { $("#outer").on('click', function(e) { console.log("#outer click event triggered"); }); $("#middle").on('click', function(e) { console.log("#middle click event triggered"); }); $("#inner").on('click', function(e) { console.log("#inner click event triggered"); e.stopPropagation(); }); });

This is similar to what we saw before except that we’ve added e.stopPropagation() to the callback for the #inner div. Before, a click on the #inner element bubbled up to the parent elements and logged 3 lines, but this time it stops with the target and logs:

#inner click event triggered

We often nest related DOM elements when we write our markup. For instance, we may have an div containing an img, an h2, and a p tags

My item

Item description

Suppose we wanted to allow the user to click anywhere inside of this div. If we were simply navigating the user to a new page, an a tag with a properly set href would be sufficient. But if we want to perform some other action on the current page, we’ll want to use JavaScript to listen for click events to the entire div and all of it’s children.

Fortunately, we don’t have to listen and respond to a click on each DOM element – div, img, h2, and p. We only have to listen to events on the parent! This is due to event bubbling.

When an event occurs on any DOM element on a page, the event is bubbled up through it’s parent elements triggering the event on each. So in our example above, if a user clicks on the p element, the click event will be triggered on the p followed by the parent div following by the parent of the div all the way to the document object.

We often nest related DOM elements when we write our markup. For instance, we may have an div containing an img, an h2, and a p tags

My item

Item description

Suppose we wanted to allow the user to click anywhere inside of this div. If we were simply navigating the user to a new page, an a tag with a properly set href would be sufficient. But if we want to perform some other action on the current page, we’ll want to use JavaScript to listen for click events to the entire div and all of it’s children.

Fortunately, we don’t have to listen and respond to a click on each DOM element – div, img, h2, and p. We only have to listen to events on the parent! This is due to event bubbling.

When an event occurs on any DOM element on a page, the event is bubbled up through it’s parent elements triggering the event on each. So in our example above, if a user clicks on the p element, the click event will be triggered on the p followed by the parent div following by the parent of the div all the way to the document object.

What is bubbling?

As described in the previous step, the event is first triggered on the target element and then on it’s parents moving up the chain. We can prove this with a quick example.

Suppose we have the following markup:

We can set a click event listener on each div like this:

$(function() { $("#outer").on('click', function() { console.log('#outer click event triggered'); }); $("#middle").on('click', function() { console.log('#middle click event triggered'); }); $("#inner").on('click', function() { console.log('#inner click event triggered'); }); });

If I click on the inner div, #inner, I will see this in the console logs:

#inner click event triggered #middle click event triggered #outer click event triggered

Even though it appears that they are logged at the same time, the order is important. The event was triggered first on the inner div, followed by the middle div, followed by the outer div.

Suppose I click on the middle div.

#middle click event triggered #outer click event triggered

You probably assumed the output. The middle div was triggered first followed by it’s parent outer div. The event on the inner div wasn’t triggered.

As described in the previous step, the event is first triggered on the target element and then on it’s parents moving up the chain. We can prove this with a quick example.

Suppose we have the following markup:

We can set a click event listener on each div like this:

$(function() { $("#outer").on('click', function() { console.log('#outer click event triggered'); }); $("#middle").on('click', function() { console.log('#middle click event triggered'); }); $("#inner").on('click', function() { console.log('#inner click event triggered'); }); });

If I click on the inner div, #inner, I will see this in the console logs:

#inner click event triggered #middle click event triggered #outer click event triggered

Even though it appears that they are logged at the same time, the order is important. The event was triggered first on the inner div, followed by the middle div, followed by the outer div.

Suppose I click on the middle div.

#middle click event triggered #outer click event triggered

You probably assumed the output. The middle div was triggered first followed by it’s parent outer div. The event on the inner div wasn’t triggered.

Bubble order

In JavaScript, events have a target attribute to identify which DOM element was the target of the event. When we listen for events on a specific DOM element we can provide a callback function that is called when the event is triggered. This callback function takes the event as its first argument. This event object contains the target of the event. Here’s a quick example showing how to access the target.

The markup:

And the JavaScript:

$(function() { $("button").on('click', function(event) { console.log(event.target); }); });

Note: Even though we are using jQuery, as it stands the event.target attribute will be a vanilla JavaScript DOM object, not a jQuery object.

In the above example, the target would be the actual button that was clicked.

When we get into nested DOM elements this becomes a little bit more interesting. Take our example from the previous step. Suppose we log the target for each div.

$(function() { $("#outer").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#middle").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#inner").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); });

The above code simply logs the id of the target and the id of thisthis being the element we’re listening to. A click on the #inner element will log this:

inner inner inner middle inner outer

Each line shows target this.

As expected, the target doesn’t change. Even though the event is bubbled up and triggered on parent elements, the target remains the actual element that was clicked on. However, this provides access to the element we’re listening to. As we see, inner inner is first showing that the event on the #inner element was triggered first, and obviously #inner is the target as well.

In JavaScript, events have a target attribute to identify which DOM element was the target of the event. When we listen for events on a specific DOM element we can provide a callback function that is called when the event is triggered. This callback function takes the event as its first argument. This event object contains the target of the event. Here’s a quick example showing how to access the target.

The markup:

And the JavaScript:

$(function() { $("button").on('click', function(event) { console.log(event.target); }); });

Note: Even though we are using jQuery, as it stands the event.target attribute will be a vanilla JavaScript DOM object, not a jQuery object.

In the above example, the target would be the actual button that was clicked.

When we get into nested DOM elements this becomes a little bit more interesting. Take our example from the previous step. Suppose we log the target for each div.

$(function() { $("#outer").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#middle").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); $("#inner").on('click', function(e) { console.log($(e.target).attr('id'), $(this).attr('id')); }); });

The above code simply logs the id of the target and the id of thisthis being the element we’re listening to. A click on the #inner element will log this:

inner inner inner middle inner outer

Each line shows target this.

As expected, the target doesn’t change. Even though the event is bubbled up and triggered on parent elements, the target remains the actual element that was clicked on. However, this provides access to the element we’re listening to. As we see, inner inner is first showing that the event on the #inner element was triggered first, and obviously #inner is the target as well.

The target

Sometimes you’ll want to stop an event from bubbling all the way to the top. Maybe you know for sure you’re finished processing the event, or perhaps in some case you don’t want the event to be triggered on the parent.

We can stop bubbling with event.stopPropagation().

Taking the example we’re using throughout this guide, we can test this out:

$(function() { $("#outer").on('click', function(e) { console.log("#outer click event triggered"); }); $("#middle").on('click', function(e) { console.log("#middle click event triggered"); }); $("#inner").on('click', function(e) { console.log("#inner click event triggered"); e.stopPropagation(); }); });

This is similar to what we saw before except that we’ve added e.stopPropagation() to the callback for the #inner div. Before, a click on the #inner element bubbled up to the parent elements and logged 3 lines, but this time it stops with the target and logs:

#inner click event triggered

Sometimes you’ll want to stop an event from bubbling all the way to the top. Maybe you know for sure you’re finished processing the event, or perhaps in some case you don’t want the event to be triggered on the parent.

We can stop bubbling with event.stopPropagation().

Taking the example we’re using throughout this guide, we can test this out:

$(function() { $("#outer").on('click', function(e) { console.log("#outer click event triggered"); }); $("#middle").on('click', function(e) { console.log("#middle click event triggered"); }); $("#inner").on('click', function(e) { console.log("#inner click event triggered"); e.stopPropagation(); }); });

This is similar to what we saw before except that we’ve added e.stopPropagation() to the callback for the #inner div. Before, a click on the #inner element bubbled up to the parent elements and logged 3 lines, but this time it stops with the target and logs:

#inner click event triggered

Stop event bubbling

Calling all writers!

We’re hiring. Write for Howchoo

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Tyler's profile picture
Share this guide!
RedditEmailText
Related to this guide:
How to Pretty Print JSON in Chrome Developer ConsoleHow to Pretty Print JSON in Chrome Developer Console
In these interests: codejavascriptwebdev
Remove Elements From an Array in JavaScriptRemove Elements From an Array in JavaScript
When working with arrays in JavaScript, we often need to remove elements.
Tyler's profile picture TylerView
In these interests: codejavascript
Enumerable Properties in JavaScriptEnumerable Properties in JavaScript
Enumerable properties are properties whose internal enumerable flag set to true.
Tyler's profile picture TylerView
In these interests: codejavascript
How to Pretty Print JSON in Chrome Developer ConsoleHow to Pretty Print JSON in Chrome Developer Console
In these interests: codejavascriptwebdev
Zach's profile pictureViewcodejavascriptwebdev
Remove Elements From an Array in JavaScriptRemove Elements From an Array in JavaScript
When working with arrays in JavaScript, we often need to remove elements.
Tyler's profile picture TylerView
In these interests: codejavascript
Tyler's profile pictureViewcodejavascript
Enumerable Properties in JavaScriptEnumerable Properties in JavaScript
Enumerable properties are properties whose internal enumerable flag set to true.
Tyler's profile picture TylerView
In these interests: codejavascript
Tyler's profile pictureViewcodejavascript
People also read:
This guide demonstrates multiple ways to iterate over a JavaScript object’s properties and values.
There are two very similar statements in JavaScript: for…in and for…of. And while they can be easily confused, they’re actually quite different.
My journey trying to find the one loop operator to rule them all
As a JavaScript developer, you’ll often need to construct URLs and query string parameters. One sensible way to construct query string parameters is to use a one layer object with key value pairs.
Writing tests is an important part of software development process. Unit tests form a core part of testing process where each functional block is tested as an independent unit.
Making a deep copy of an object in JavaScript is fairly challenging. Fortunately, there are a few ways to accomplish this without much code.
At some point you’ll want to read, set, and remove cookies using JavaScript.
Learn how to split a string into an array.
This guide will teach you how to concatenate, or join, all elements of an array into a single string.
Learn how to merge two arrays together in JavaScript.
This guide demonstrates multiple ways to iterate over a JavaScript object’s properties and values.
There are two very similar statements in JavaScript: for…in and for…of. And while they can be easily confused, they’re actually quite different.
My journey trying to find the one loop operator to rule them all
As a JavaScript developer, you’ll often need to construct URLs and query string parameters. One sensible way to construct query string parameters is to use a one layer object with key value pairs.
Writing tests is an important part of software development process. Unit tests form a core part of testing process where each functional block is tested as an independent unit.
Learn Multiple Ways to Iterate Over JavaScript Object Properties and Values
The Difference Between “for…in” and “for…of” in JavaScript
JavaScript for loops
How to Turn an Object into Query String Parameters in JavaScript
Unit Testing in JavaScript – Mocha, Chai and Sinon – a Beginner’s Guide
Making a deep copy of an object in JavaScript is fairly challenging. Fortunately, there are a few ways to accomplish this without much code.
At some point you’ll want to read, set, and remove cookies using JavaScript.
Learn how to split a string into an array.
This guide will teach you how to concatenate, or join, all elements of an array into a single string.
Learn how to merge two arrays together in JavaScript.
How to Copy an Object in JavaScript
How to Manage Cookies in JavaScript
How to Split a String into an Array in JavaScript
How to Join All Elements of an Array in JavaScript
How to Merge Two Arrays in JavaScript
Posted in these interests:
javascriptjavascript
javascript
PRIMARY
Array(16).join(“wat” – 1) + ” Batman!”;
webdevwebdev
All things web development.
javascriptjavascript
javascript
PRIMARY
Array(16).join(“wat” – 1) + ” Batman!”;
PRIMARY
Explore
webdevwebdev
All things web development.
Explore
Discuss this guide:
We’re hiring!
Are you a passionate writer? We want to hear from you!
We’re hiring!
Are you a passionate writer? We want to hear from you!
View openings

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Donate
Total time: 10 minutes 
Updated: July 22nd, 2020
python
PRIMARY
67 guides
Calling all writers!

We’re hiring. Write for Howchoo

python
PRIMARY
67 guides
Calling all writers!

We’re hiring. Write for Howchoo

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Get the latest edition of Python in just minutes.
Ash's profile picture AshView
In these interests: codewindowspython
Run Python scripts in command prompt without typing the whole path.
Ash's profile picture AshView
In these interests: windowscodepython
You can run any Python script in a command-line interface.
Ash's profile picture AshView
In these interests: python
Got a Python question? We’ve probably answered it here.
Not sure what version of Python you’re running? Time to find out!
Python is a very popular programming language for data visualization.
In Python, comprehensions are a useful construct that allows us to create new sequences in a very concise way.
Slack has become one of the most important tools for communication in many companies, mine included.
If you’re familiar with Python’s keyword-only arguments, then you’ve probably wondered why the same constraint doesn’t exist for positional arguments. This changes with Python 3.
Specify a parallel filesystem cache for compiled bytecode
Learn how to use formatted string literals in Python
While this requirement may seem rare, learning how to nest defaultdicts properly in Python can be extremely powerful and save you from bloated and confusing initialization code.
python
PRIMARY
Python is howchoo’s favorite programming language. We believe python promotes the most organized and performant codebase possible. We also love Django so, naturally, we love Python.

The Ultimate Original Game Boy Modding Guide

The Ultimate Original Game Boy Modding GuideThe Ultimate Original Game Boy Modding Guide
Game Boys are awesome. Let’s make them even better!
Ash Ash (298)
Total time: 15 minutes 
Updated: July 22nd, 2020

Game Boys are awesome! But they’ve been around for so long, it’s no surprise to find they have a thriving mod community.

Have you always wanted a purple Gameboy? Maybe you’re tired of sitting under a lamp just to play Tetris. Whatever the case, there’s nothing holding you back from creating the ultimate Game Boy experience you’ve dreamt of since 1989.

This guide lists the most common Game Boy mods available today. I’m ready if you’re ready—now let’s get started.

Here’s everything you’ll need to complete this guide:

Original Game Boy×1
Custom Game Boy shellCustom Game Boy shell

Game Boys can be upgraded with an amazing variety of custom shells. In 2018, you don’t have to look hard to find third party vendors selling Game Boy shells. Most of them are aftermarket shells, created with the modern modding community in mind.

However, it is possible to locate original hardware. Auction websites and used gaming stores sell old devices and individual Game Boy components. This is great for restoration projects or those who just prefer original hardware. If you want to learn more about customizing your shell, visit our Game Boy shell replacement guide.

Custom Game Boy buttonsCustom Game Boy buttons

Another common mod you’ll find in the community is custom buttons. Upgrade your Game Boy with brand new controls! They work just like the old ones, but you can choose a different color if you like.

Third party vendors sell many custom color buttons to match the wide array of replacement shells. Replacing the buttons is just as easy as replacing the shell with half the work! Just open up the Game Boy, remove the front motherboard, and swap out the buttons. While you have that Game Boy open, it’s a great time to fix any button sticking issues—visit our guide to learn how to fix sticky Game Boy buttons.

Game Boy backlight modGame Boy backlight mod

Finding an old Game Boy is awesome. Wasting time to find a lamp to sit under is not. That’s why we have the Game Boy backlight mod! After almost 30 years, you can finally install a working light to play your original Game Boy in the dark.

This mod is a little bit involved and could potentially ruin the original screen. You may want to avoid using any sentimental hardware. But if you think you’re ready, so do we. Head over to our Game Boy backlight mod guide to get started!

A small side effect of installing the backlight is speaker whine — I’ve written a guide to help you fix that.

Game Boy bivert chip modGame Boy bivert chip mod

Backlighting an original Game Boy screen has a direct impact on pixel contrast. Rotating the polarizing film can cause the pixels to invert—some modders do this intentionally. For an ideal display, the pixels need to be inverted twice.

The modding community tackles this issue by means of bivert chip mods. The installation of these chips inverts the signal information for dark and light pixels. This small difference improves the contrast and visibility on the screen. As a side effect from this mod, the contrast wheel now works backwards.

I wrote a complete guide on how to perform the bivert chip mod.

Custom Game Boy bezelCustom Game Boy bezel

Customizing the bezel on a Game Boy can add an incredible touch to your modding project. The original screen bezels were made of plastic. But you can find a wide variety online, including high quality bezels made of glass.

The original Game Boy was released with a gray bezel. But you’ll find a rainbow of options online—including custom printed graphics. Your only limit is your imagination when it comes to custom bezel replacement.

Increase Game Boy screen sizeIncrease Game Boy screen size

Game Boy screens are more than necessary, they’re iconic. But there comes a time in every modders like when you realize that maybe it would be pretty cool to install that 3″ aftermarket screen. Just for funsies, right?

Or maybe you’ve bricked your original Game Boy screen in a failed attempt to install a backlight. Repurpose old components and create your very own “frankenboy”. Add a custom after market screen and throw it in a custom shell while you’re at it. There’s nothing wrong with taking advantage of modern day upgrades.

Game Boy bass boost modGame Boy bass boost mod

Original Game Boy audio is so classic, fans have created genres of music based on it. Chiptunes are built on the fundamental sounds created by the Nintendo Game Boy. But what if you wanted to bring out the best of these sounds?

If you’re into high quality audio, this mod is for you. This mod upgrades your Game Boy to let more power through the sound system. Amplify those bass tones and bring out the best audio in your Game Boy. Ready to get started? Check out our Game Boy bass boost guide here.

Series: Original Game Boy Modding
Backlight Mod
Show all in the Original Game Boy Modding series
We’re hiring!
Are you a passionate writer? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Updated: July 22nd, 2020
python
PRIMARY
67 guides
code
68 guides
Calling all writers!

We’re hiring. Write for Howchoo

python
PRIMARY
67 guides
code
68 guides
Calling all writers!

We’re hiring. Write for Howchoo

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Get the latest edition of Python in just minutes.
Ash's profile picture AshView
In these interests: codewindowspython
Run Python scripts in command prompt without typing the whole path.
Ash's profile picture AshView
In these interests: windowscodepython
You can run any Python script in a command-line interface.
Ash's profile picture AshView
In these interests: python
Got a Python question? We’ve probably answered it here.
Not sure what version of Python you’re running? Time to find out!
Python is a very popular programming language for data visualization.
In Python, comprehensions are a useful construct that allows us to create new sequences in a very concise way.
Slack has become one of the most important tools for communication in many companies, mine included.
If you’re familiar with Python’s keyword-only arguments, then you’ve probably wondered why the same constraint doesn’t exist for positional arguments. This changes with Python 3.
Specify a parallel filesystem cache for compiled bytecode
Learn how to use formatted string literals in Python
While this requirement may seem rare, learning how to nest defaultdicts properly in Python can be extremely powerful and save you from bloated and confusing initialization code.
python
PRIMARY
Python is howchoo’s favorite programming language. We believe python promotes the most organized and performant codebase possible. We also love Django so, naturally, we love Python.
Code is poetry — one line at a time.
Ash's profile pictureAsh
Joined in 2018
Ash is an experienced tech writer with an endless passion for technology. She enjoys retro gaming, 3D printing, and making awesome projects on the Raspberry Pi.
Related to this guide:
Resin Printing FAQsResin Printing FAQs
Considering a resin printer? Here’s everything you should know first.
Ash's profile picture AshView
In these interests: 3dprinting
3D Printing FAQs3D Printing FAQs
New to 3D printing? We’ve got you covered.
Ash's profile picture AshView
In these interests: 3dprinting
Make Money 3D PrintingMake Money 3D Printing
You can’t print money, but you can make money printing.
Ash's profile picture AshView
In these interests: 3dprinting
People also read:
The Spaghetti Detective
Access OctoPrint from anywhere with this OctoPrint Anywhere replacement.
3D printing on glass bed
How to choose, install, and use a glass bed with your printer.
Time for this project to take shape.
APPROVED! REJECTED! APPROVED!
Posted in these interests:
3dprinting3dprinting
3dprinting
PRIMARY
Think of it like a 2D printer, but with an extra dimension.
pipi
The Raspberry Pi is a small, inexpensive computer developed by the Raspberry Pi Foundation in the United Kingdom.
Discuss this guide:
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

How to Check AT&T Data Usage

How to Check AT&T Data UsageHow to Check AT&T Data Usage
Zach Zach (233)
Total time: 2 minutes 
Updated: July 22nd, 2020

Ever since AT&T discontinued its unlimited data plan, it’s been important to keep an eye on your data usage. Thankfully, you can check your data usage at any time via text. In this guide, you’ll learn how to check your AT&T data usage.

Posted in these interests:

iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides

How to Check AT&T Data Usage

How to Check AT&T Data UsageHow to Check AT&T Data Usage
Zach Zach (233)
Total time: 2 minutes 
Updated: July 22nd, 2020

Ever since AT&T discontinued its unlimited data plan, it’s been important to keep an eye on your data usage. Thankfully, you can check your data usage at any time via text. In this guide, you’ll learn how to check your AT&T data usage.

Posted in these interests:

iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides
Jump to step

How to Check AT&T Data Usage

How to Check AT&T Data UsageHow to Check AT&T Data Usage
Zach Zach (233)
Total time: 2 minutes 
Updated: July 22nd, 2020

Ever since AT&T discontinued its unlimited data plan, it’s been important to keep an eye on your data usage. Thankfully, you can check your data usage at any time via text. In this guide, you’ll learn how to check your AT&T data usage.

Posted in these interests:

iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides

How to Check AT&T Data Usage

How to Check AT&T Data UsageHow to Check AT&T Data Usage
Zach Zach (233)
Total time: 2 minutes 
Updated: July 22nd, 2020

Ever since AT&T discontinued its unlimited data plan, it’s been important to keep an eye on your data usage. Thankfully, you can check your data usage at any time via text. In this guide, you’ll learn how to check your AT&T data usage.

Posted in these interests:

iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides

How to Check AT&T Data Usage

iphonewirelessatt
Zach Zach (233)
Total time: 2 minutes 
Updated: July 22nd, 2020
Zach
 

Posted in these interests:

iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides
iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides
PRIMARY
Jump to step
Calling all writers!

We’re hiring. Write for Howchoo

 
In these interests
iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides
iphone
PRIMARY
29 guides
wireless
20 guides
att
5 guides
PRIMARY
Jump to step

A confirmation message will appear.

Within seconds, you will receive an automated text containing your current and remaining data usage.

A confirmation message will appear.

A confirmation message will appear.

Dial *3282# and press the Call button

Within seconds, you will receive an automated text containing your current and remaining data usage.

Within seconds, you will receive an automated text containing your current and remaining data usage.

Check your text messages

Calling all writers!

We’re hiring. Write for Howchoo

Zach's profile pictureZach
Joined in 2015
Web developer, designer, tinkerer, and beer enthusiast living in Tampa, Florida.
Zach's profile picturehowchoo
Share this guide!
RedditEmailTextPinterest
Related to this guide:
I heart howchoo iPhone messageI heart howchoo iPhone message
Because we all need to change things up from time to time in our digital conversations!
Michael's profile picture MichaelView
In these interests: iosiphonefonts
iPhone Font Size ScrolliPhone Font Size Scroll
Finding the text hard to read on your iPhone? This guide will help you out!
Michael's profile picture MichaelView
In these interests: iosfontsiphone
Arrow to HDRArrow to HDR
Ever notice that little HDR feature that appears for certain photographs on your iPhone? It’s called High Dynamic Range. Check out our guide on HDR and when to use it.
Michael's profile picture MichaelView
In these interests: iosiphone
I heart howchoo iPhone messageI heart howchoo iPhone message
Because we all need to change things up from time to time in our digital conversations!
Michael's profile picture MichaelView
In these interests: iosiphonefonts
Michael's profile pictureViewiosiphonefonts
iPhone Font Size ScrolliPhone Font Size Scroll
Finding the text hard to read on your iPhone? This guide will help you out!
Michael's profile picture MichaelView
In these interests: iosfontsiphone
Michael's profile pictureViewiosfontsiphone
Arrow to HDRArrow to HDR
Ever notice that little HDR feature that appears for certain photographs on your iPhone? It’s called High Dynamic Range. Check out our guide on HDR and when to use it.
Michael's profile picture MichaelView
In these interests: iosiphone
Michael's profile pictureViewiosiphone
People also read:
person holding iPhone taking HDR photo
Hint…it’s NOT high definition resolution.
Delete iPhone apps
Deleting has never been easier
iPhone Backup
Just put it on the cloud with everything else.
Factory Reset iPhone
Wipe your iPhone and start over new.
ios battery cycle count
This is the simplest way to see the health of your iPhone’s battery. For a reminder, after 500 cycles, your battery is operating with roughly 80% of its full capacity*.
If you’ve got an iPhone with TouchID, and you’re mourning the loss of the ability to unlock your phone without pressing the home button, there is hope.
Whether you bought the 16GB iPhone on a budget or you like to store thousands of pictures and songs on your phone, you will eventually need to learn how to free up some space.
person holding iPhone taking HDR photo
Hint…it’s NOT high definition resolution.
Delete iPhone apps
Deleting has never been easier
iPhone Backup
Just put it on the cloud with everything else.
person holding iPhone taking HDR photo
person holding iPhone taking HDR photoWhat is HDR on an iPhone Camera?
Add work email to iPhone.
Add work email to iPhone.How to Add Your Work Email to Your iPhone
iPhone block number
iPhone block numberHow to Block a Number on an iPhone
Delete iPhone apps
Delete iPhone appsHow to Delete Apps on an iPhone
iPhone Backup
iPhone BackupHow to Back Up Your iPhone
Factory Reset iPhone
Wipe your iPhone and start over new.
ios battery cycle count
This is the simplest way to see the health of your iPhone’s battery. For a reminder, after 500 cycles, your battery is operating with roughly 80% of its full capacity*.
If you’ve got an iPhone with TouchID, and you’re mourning the loss of the ability to unlock your phone without pressing the home button, there is hope.
Whether you bought the 16GB iPhone on a budget or you like to store thousands of pictures and songs on your phone, you will eventually need to learn how to free up some space.
Factory Reset iPhone
Factory Reset iPhoneHow to Factory Reset your iPhone
ios battery cycle count
ios battery cycle countSimplest Way to Find the Battery Charge Cycle Count on Your iPhone
Share WiFi Password iPhone Android
Share WiFi Password iPhone AndroidHow to Share A WiFi Password from iPhone to Android
How to unlock your iPhone the old way in iOS 10
How to Free Up iPhone Storage Space
Posted in these interests:
iphoneiphone
iphone
PRIMARY
PRIMARY
ExploreExploreExplore
Discuss this guide:
We’re hiring!
Are you a passionate writer? We want to hear from you!
We’re hiring!
Are you a passionate writer? We want to hear from you!
View openings

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Donate

My Game Boy DMG Collection

Game Boy collectionGame Boy collection
Grab your brick and Play It Loud!
Ash Ash (298)
Updated: July 22nd, 2020

At our house, handheld games are king. This is the pinnacle of our console collection. Game Boys are still popular in 2019. Today’s modding tools make it nearly impossible to stop at just one Game Boy. This collection has slowly grown over the years, and that probably won’t change any time soon.

The collection features almost every Game Boy to pass through my front door. We’ve got original unmodded Game Boys, fully modded DMGs with backlit screens, and aftermarket shells for a totally custom experience.

Posted in these interests:

gameboy
PRIMARY
16 guides
retrogaming
49 guides
collecting
1 guide
Complete Game Boy collectionComplete Game Boy collection

This is everything! Okay—not everything. There’s always one or two Game Boys hiding around the house somewhere. But this is definitely a huge chunk of the collection! If you had a Game Boy as a child, you probably see one just like it here. The full picture doesn’t do it justice. Let’s dig in and check out the highlights of the collection.

Original Game Boy DMGOriginal Game Boy DMG

The original Game Boy design is iconic in the gaming world. This was the first model created for the Game Boy line. They all have the classic offwhite/cream shell. A couple have yellowed more than others, this is likely due to poor storage conditions.

Play It Loud Game BoysPlay It Loud Game Boys

Before the Game Boy Color—there were colored Game Boys! The Play It Loud series brought a much-needed splash of color to the original Game Boy design. We’ve almost got every Play It Loud color: blue, red, yellow, green, black, and transparent. The only one missing is white.

Black Play It Loud Game BoyBlack Play It Loud Game Boy

The original Play It Loud shells typically have a gray bezel, gray buttons, and black text. On the black Play It Loud shell, the Game Boy text is a pink/red color. We managed to snag a couple in the original retail boxes. One of these boxes had the original Game Boy pamphlets!

Green Play It Loud Game BoyGreen Play It Loud Game Boy

One of the green Play It Loud Game Boys has been backlit, this makes the screen look darker in comparison. One of the unmodded Game Boys came with the original booklets, a Nintendo Power ad, and a really awesome Play It Loud poster. I love finding original documentation. It’s like unfolding pure nostalgia.

Clear Play It Loud Game BoyClear Play It Loud Game Boy

The clear Game Boys are so cool. They are just as exciting today as they were 20+ years ago. I’m really happy to have a few good clear shells in the collection. One of the boxes still had the Play It Loud box art tucked inside. There’s just something wicked about seeing the Game Boy guts while you play. These shells are some of my absolute favorites.

Yellow Play It Loud Game BoyYellow Play It Loud Game Boy

You can’t lose a Game Boy this bright. The Play It Loud yellow is just too hard to miss on a chunky device like this. These two easily bring the most sunshine to the collection. I was also excited to discover the original Game Boy booklets in the retail box!

Red Play It Loud Game BoyRed Play It Loud Game Boy

These Game Boys are super rad. Wait…no they’re super red. Red Play It Loud’s aren’t very difficult to get ahold of. They’re not as common as the original Game Boy edition, but definitely not the rarest, either. I always appreciated the contrast of the gray bezel and buttons against the vibrancy of the red shell.

Blue Play It Loud Game BoyBlue Play It Loud Game Boy

Blue Game Boys are a bit harder to get your hands. They were only released officially in Europe and Japan. As a US resident, this makes it much harder to complete the collection. But there’s nothing that can’t be resolved with a little research online. You can find blue Game Boys on eBay.

Backlit Game BoyBacklit Game Boy

I love to mod Game Boys! One of my favorite mods is the backlight mod (I do not have enough AA batteries to light up this picture). The backlight installation process isn’t super easy, but it’s definitely something you can pull off in an afternoon.

Aftermarket Game Boy ShellsAftermarket Game Boy Shells

These are the Game Boys that have aftermarket aesthetic upgrades. They’ve got brand new bezels, shells, buttons, and screens that weren’t manufactured by Nintendo. This is how people get crazy colored Game Boys that were never on the market.

Clear color Game Boy shellsClear color Game Boy shells

These shells are aftermarket creations. You can find them on Amazon in a variety of colors. While original shells definitely have their appeal, sometimes a nice aftermarket upgrade can help salvage an old device.

Cartoon Network and Nickelodeon Game BoyCartoon Network and Nickelodeon Game Boy

In a world without Cartoon Cartoon Fridays and Slime Time Live, honor must be paid.

RGB button Game BoyRGB button Game Boy

It’s one thing to backlight the screen on a Game Boy—but the buttons, too?! Not only do these buttons illuminate, they’re made with RGB LEDs. You can expect a full rainbow rotation of color while you play. It’s super cool and only a little bit distracting.

Game Boy Parts FrankenboysGame Boy Parts Frankenboys

Sometimes it’s hard to say goodbye. These are the remnants of projects past. From broken shells to fried motherboards, these are the pieces we keep on hand. While preservation is key in a collection, sometimes you have to know when to cut your losses and make sacrifices for the greater good. You never know when you might need to salvage a part for another Game Boy.

Original Game BoysOriginal Game Boys

Enough flash and flare, it’s time for the real deal. The biggest majority of the collection is dedicated to unmodded, original hardware. These Game Boys are carefully stored and maintained. While modding is fun and has its perks, nothing beats the appeal of an original Game Boy.

Game Boy resources

Thinking of starting a Game Boy collection of your own? I don’t blame you! Here are a few resources to get you started.

If you’re new to modding Game Boys, you’ll want to check out our ultimate Game Boy modding guide. It covers everything you need from shell replacements to backlight installations.

And lastly, don’t forget to bookmark our Game Boy troubleshooting guide. You never know what can go wrong, but you’re probably not the first person to encounter the issue before. We’ve got you covered.

We’re hiring!
Are you a passionate writer? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.