Tutorial Topics
.htaccess (40)
How to Block a Range of IP Addresses
As much as content creators want traffic to their website, there is such thing as the wrong type of traffic. Sometimes it's content scrapers, sometimes it's malicious bots; either way, it's important to know how to block problematic IPs from your site.To block a range...
How Hacker News Crushed David Walsh Blog
Earlier this month, David’s heartfelt posting about leaving Mozilla made the front page of Hacker News. Traffic increased by 800% to his already-busy website, which slowed and eventually failed under the pressure. Request Metrics monitors performance and uptime for David’s blog, and our metrics...
Prevent JavaScript Hotlinking with .htaccess
Almost a decade (!) ago I wrote a post about preventing image hotlinking. We all have the right to protect imagery hosted on our domain because it can slow our site down tremendously. I love that post because it shows you how to replace the...
500
Over the past four or so months, I've been having a hell of a time with seeing 500 errors on my site. And while I'm on my site a few hours a day, the amount of 500s my visitors must have seem is probably huge. And that's...
Serve SVG as an Image on Apache with .htaccess
I've been a massive fan of SVG since my days creating charts and animations with the Dojo Toolkit. SVG has been around forever, it even has IE support now, and it's ultra-flexible. When creating this site's redesign, I used SVG within an IMG tag and...
3D Animations (8)
Crafting a 3D React Carousel
There is something in me that is amazed but beautiful 3D interfaces. And it doesn't matter whether they're functional like Gyroscope features menu, technology demonstrators like the amazing periodic table demo from famous or they're artistic representation pushing the limits of...
Create a CSS Flipping Animation
CSS animations are a lot of fun; the beauty of them is that through many simple properties, you can create anything from an elegant fade in to a WTF-Pixar-would-be-proud effect. One CSS effect somewhere in between is the CSS flip effect, whereby there's...
How Nesting 3D Transformed Elements Works
CSS animations are incredibly popular right now, and I don't just mean animating a simple color or dimension property, I mean 3D transformations as well; CSS flips and rotating cubes being prime examples. We can find simple CSS snippets and examples for transforms, but...
Create a CSS Cube
CSS cubes really showcase what CSS has become over the years, evolving from simple color and dimension directives to a language capable of creating deep, creative visuals. Add animation and you've got something really neat. Unfortunately each CSS cube tutorial I've read is a bit...
Create a 3D Animating Sidebar
Mozilla's Christian Heilmann is an evangelist that knows how to walk the walk as well as talk the talk. You'll often see him creating sweet demos on his blog or the awesome Mozilla Hacks blog. One of my favorite pieces...
AJAX (71)
fetch with Timeout
A few years back I wrote a blog post about how write a
fetch
Promise that times out. The function was effective but the code wasn't great, mostly becauseAbortController
, which allows you to cancel a fetch Promise, did not yet exist. With...How to Cancel a Fetch Request
JavaScript promises have always been a major win for the language -- they've led to a revolution of asynchronous coding that has vastly improved performance on the web. One shortcoming of native promises is that there's no true way to cancel a
fetch
...until now. A...How to Detect an Ad Blocker
One of the unspoken rules of the internet is that most content is "free"... at the cost of webpage being littered with advertisements and trackers. This was't a big problem in the early internet days but trackers and advertisements have become so intrusive and unapologetically aggressive...
async & await
JavaScript promises were a revelation in JavaScript, providing an alternative to the JavaScript callback hell we'd quickly found ourselves in. Promises also allowed us to introduce and better handle asynchronous tasks. While promises were an improvement over callback hell, they still require lots of
then
s...Create a Basic Loader with JavaScript Promises
I've used JavaScript loaders for years; whether it was the Dojo loader, curl.js, or even using jQuery as a JavaScript loader, it's incredibly useful to request a set of resources and react once they've completed loading. Each JavaScript loader is feature-packed, efficient, and does a wonderful job...
Apache / Server (23)
How to Create and Manage CRON Jobs
Interval or scheduled task execution is used all over computer science, the most obvious use case being transaction batching. For web developers like myself, the most obvious use case is executing CRON jobs for this blog, including polling for scheduled blog post publishing and a variety...
Limit Download Speed with Apache
My adventures into retro gaming have brought me back into the semi-seedy world of piracy websites and the technology considerations that dictate their business model. Annoying popups and pornographic advertisements aside, the most obvious technological observation I made was that each of these sites used bandwidth...
How to Make Email a Powerful Part of Your Web Application
Giving your customers a way to access your application from their email account is a major way to boost their activity and engagement on your website. One of my favorite popular productivity tools, iDoneThis, gives me a simple way to record and share the...
Check GZip Encoding with curl
Last week I detailed how I enabled gzip encoding on nginx servers, the same server software I use on this site. Enabling gzip on your server exponentially improves the site load time, thus improving user experience and (hopefully) Google page ranks. I implemented said strategy and used...
Serve SVG as an Image on Apache with .htaccess
I've been a massive fan of SVG since my days creating charts and animations with the Dojo Toolkit. SVG has been around forever, it even has IE support now, and it's ultra-flexible. When creating this site's redesign, I used SVG within an IMG tag and...
APIs (56)
Five Top Quality APIs
It's easy to think about creating beautiful UIs for presenting data when you don't consider the effort that goes into gathering and serving the data itself. Here's the thing -- thanks to apilayer, you can focus on your UIs and not the pain of API...
Automatically Rebase GitHub Pull Requests
Working on an open source project with a thriving contribution community is one of the great joys I have at Mozilla. In leading this charge, I get to meet amazing people of all different skill sets and interests, as well as different points of...
Amazing User Agent API with userstack
We do our best to design and code websites so that they look and perform the way they should regardless of device or browser, but the truth is we sometimes we need to code for specific device, browser, or crawler. Whether it's a quick hack or...
5 Awesome New Mozilla Technologies You’ve Never Heard Of
My trip to Mozilla Summit 2013 was incredible. I've spent so much time focusing on my project that I had lost sight of all of the great work Mozillians were putting out. MozSummit provided the perfect reminder of how brilliant my colleagues are and how much...
Change Mac App Icons
If you follow me on Twitter, you know that I recently got a new MacBook Pro. Setting up a new machine is a pornographic euphoric experience: no app collisions, optimal performance, and a fresh canvas to work with. The first step is setting up your...
Blog (111)
I Love You, Ringo
Some things happen in your life at exactly the right time. It could be meeting the right person, discovering an open source project you go on to join, or even starting a blog when you're bored with a job you don't enjoy. All of those things...
Confessions of a Web Developer XVIII
It's been quite a while since I've gotten a few things off of my chest and since I'm always full of peeves and annoyances I thought it was time to unleash:Sometimes you need to get out of the cult and stop drinking the Kool-Aid to see...
Goals For 2021
Every year I write a blog post about my goals for the year but I won't pretend this year's post is the same. I mean how the hell do I create realistic goals knowing what 2020 was and what 2021 inherits?! Pandemic, drastic political...
2020 Year in Review
Looking back on an entire year of one's professional life is difficult, but when you consider everything that 2020 threw at us, where the hell do you even start? Forget just surviving the professional aspect of 2020, we all deserve a medal, both literally and figuratively...
Goals For 2020
Every new year brings about a sense of optimism that the next 365 can bring about big, positive changes in different phases of life. That's no exception for me and this blog. I did pretty well with last year's goals, so I thought I'd push...
Bookmarking / Social (18)
How to Use Your Domain on Bluesky
Bluesky is a hot new social networking platform that functions like Twitter from Twitter's original founder. New users are flooding into the platform as a respite from Elon Musk's vision of Twitter and the fumbles that have happened since his takeover. Upon signing up...
How to Create a Twitter Bot with Node.js
Twitter bots have been in the news over the past few years due to election meddling, not only in the United States but stretching across the globe. There are, however, good and logical reasons for creating Twitter bots. In order to see how easy it was...
Social Sharing Links without Widgets
Social sharing sites like Facebook, Twitter, and Google Plus are essential for people who blog like myself. Why write about something you're passionate about if no one can find the article (purposely or by chance?) People share enough of your posts and you get noticed and get...
Tweet from Command Line with t
I've been obsessed with command line magic lately, as you may have noticed. I don't plan on using every utility I've written about but I'm having fun learning about what's out there and how it's done. My latest quandary was how one could tweet and perform other Twitter-centric tasks...
Retrieve Twitter and Facebook Counts with JSONP
I've been annoyed that many popular APIs have moved to require authentication in order to retrieve information. If I can browse a page and get said information, why can't I simply pull it with some simple code and skip the authentication bit? I had thought that...
Books (10)
Performance Cops and Janitors
Performance improvements often begin as one person's voice within a company culture. You start to notice how other sites are making optimizations and improving their user experience through tweaks to perceived performance or total page load time. Then you start measuring how your competitors' sites...
Smashing Deal: 6 Smashing Books for Web Designers
The longer we do our Web Development jobs, the more we realize we need to know more, we need to be more proficient at more. I feel great about my CSS/HTML/JavaScript skills, but I'd give my left arm to be better at designing graphics with...
JavaScript Enlightenment by Cody Lindley
JavaScript Guru Douglas Crockford famously said "JavaScript is the only language people feel like they don't need to learn to use." A quote that will surely provide a laugh, but it's funny because it's true. What furthers this sentiment is that JavaScript frameworks like jQuery have...
Pro JavaScript with MooTools by Mark Obcena
With Christmas almost upon us, I wanted to throw a gift idea out there to everyone. MooTools Contributor Mark Obcena (keeto) has just finished writing his MooTools book: Pro JavaScript with MooTools. As you would expect, this book covers not just the basics of MooTools...
Browsers (102)
Use XHR/fetch Breakpoints!
Web debugging tools are so incredibly excellent these days. I remember the days where they didn't exist and debugging was a total nightmare, even for the simplest of problems. A while back I introduced many of you to Logpoints, a way to output...
How to Open a Tor Brave Window from Command Line
I love the Brave web browser for many reasons: ad blocking, Brave rewards, crypto integration, and even a Tor tab feature. I'll often use the Tor feature but wanted to know how I could automated opening Tor windows from command line.To open a Brave Tor...
Detect Browser Bars Visibility with JavaScript
It's one thing to know about what's in the browser document, it's another to have insight as to the user's browser itself. We've gotten past detecting which browser the user is using, and we're now into knowing what pieces of the browser UI users are...
Easy Asset Access with the Cloudinary Media Library Browser Extension
Readers of my blog will know that I've been banging the Cloudinary drum for years. Their awesome media capabilities allow users to optimally deliver images, video, and audio in any format and to any device. Performance, customization, flexibility, optimized delivery... Cloudinary makes media better for...
Use Logpoints!
There's sometimes a tribal attitude about how web developers should be debugging their code and solving problems. There's the
console.log
loyalists, then there's the debugger/breakpoint maximalists. I worked on the Firefox DevTools debugger for years and I can tell you my philosophy -- use...
Canvas & SVG (38)
How to Control CSS Animations with JavaScript
When it comes to animations on the web, developers need to measure the animation's requirements with the right technology -- CSS or JavaScript. Many animations are manageable with CSS but JavaScript will always provide more control. With
document.getAnimations
, however, you can use JavaScript to manage...5 Crucial Concepts for Learning d3.js and How to Understand Them
You may have already heard about d3.js, the dazzling JavaScript library that lets you create beautiful charts and graphics with just a few lines of code. You might have seen some of the fantastic examples of D3 in action, or you may have heard that...
Building Animated SVG Banners
I've been reading David Walsh's blog for years. The tips and tutorials he shares have helped me fix a lot of problems. I love that I get to support him now by advertising TrackJS on his site. Plus, I get a chance to build...
Canvas Filters
Adding filters to images can make them more eye-catching and shareable -- just ask Instagram, Snapchat, Prism, and every other app out there. A few years back we got the awesome CSS filters feature, allowing us to use a fixed set of filter methods to make our photos...
Create a 3D Panorama Image with A-Frame
In the five years I've been at Mozilla I've seen some awesome projects. Some of them very popular, some of them very niche, but none of them has inspired me the way the MozVR team's work with WebVR and A-Frame project have. A-Frame is a community project...
Comics (9)
The Truth About Production Testing
Testing on production environments is something you must do but really, really would prefer not to do, right? You can do some incredible damage in a short amount of time if you aren't careful, and when things do run smoothly, you think to yourself "Why even take the...
The Truth About CSS
Whether you call yourself a "full stack engineer" or not, most of us fashion ourselves able to dabble on each side of a website infrastructure. Of course the same people who fancy themselves as capable would probably also tell you they're much stronger on client or server sides.
The Truth About Growing Up
There's a harsh reality: we're "grown ups" these days. Every once in a while, however, I see an image that takes me back to my childhood. My childhood was full of sports and video games and I can't help but smile on those...
The Truth About Programming Perception
When I tell people that I'm a web programmer, they think I'm a genius. When I tell them I work for the company that makes Firefox, they think I'm some sort of God. I'd be willing to bet other developers out there get the same treatment. And I don't...
The Truth About Code Review II
Code review is an essential but sometimes funny part of creating an awesome product or open source project. Of course your project has standards and the developers are all relatively professional, but sometimes developers still don't quite believe in the same coding styles and methodologies.
Cryptocurrency (7)
How to Mine Ethereum
Note: I expect a large number of people to object to cryptocurrency mining's energy use and I totally understand. Hell, I agree. A few notes to consider: first, this will soon be remedied by Ethereum switching to proof os stake. Second, much...
Detect Cryptocurrency by Wallet Address
I’ve always been a massive advocate of cryptocurrency. I love the technology, the ease of use, and the freedom that cryptocurrencies bring to the world. Despite my love of crypto, I know that adoption will take a long time and that the state of crypto...
Realtime Cryptocurrency Rates API with coinlayer
Last year when cryptocurrencies were gaining massively in value each month, I badly wanted to create a personal web project which would let me quickly buy and sell crypto outside of brokers like Coinbase; the problem I ran into was not having a reliable API...
How to Recover Bitcoin Gold
Every fork of Bitcoin brings uncertainty. Uncertainty of value change, long term commitment of the fork, and how value may fluctuate over time. For us Bitcoin owners, one of the big challenges if figuring out how to claim and recover the forked coin. Remember that when...
Manage Bitcoin with the Coinbase API
One of my biggest recent regrets was not pouring money into bitcoin when Kim Dotcom said we should; this was approximately 18 months ago when the bitcoin value was $170. Today bitcoin value has topped $1000 which is why I'm kicking myself so hard. I buy my bitcoin...
CSS (460)
Case Insensitive CSS Attribute Selector
CSS selectors never cease to amaze me in how powerful they can be in matching complex patterns. Most of that flexibility is in parent/child/sibling relationships, very seldomly in value matching. Consider my surprise when I learned that CSS allows matching attribute values regardless off...
HTML popover Attribute
Modals have been an important part of websites for two decades. Stacking contents and using
fetch
to accomplish tasks are a great way to improve UX on both desktop and mobile. Unfortunately most developers don't know that the HTML and JavaScript specs have implemented...How to Override width and height HTML attributes with CSS
One of the HTML elements that frequently comes into collision with CSS is the
img
element. As we learned in Request Metrics' Fixing Cumulative Layout Shift Problems on DavidWalshBlog article, providing image dimensions within theimage
tag will help to improve your website's score. But...AutoGrow Textareas with CSS
As the demands of the web change and developers experiment with different user experiences, the need for more native language improvements expands. Our presentation layer, CSS, has done incredibly well in improving capabilities, even if sometimes too slow. The need for native support for automatically expanding...
CSS content-visibility
The CSS language is full of small gaps which are frustrating to navigate. Between CSS properties to hide a container and its contents, there is still room for improvement.
visibility: hidden
keeps height and width integrity whiledisplay: none
on a container hides everything. You can...
CSS Animations (47)
CSS prefers-reduced-motion Media Query
When I started in the web development industry, media queries were limited --
screen
andprint
were the two media queries I was most often using. More than a decade later, media queries have advanced to various screen units, feature checking, and even color...Create the Google Button Effect with CSS
I always found Google's branding simple but grew to realize that was the beauty in their design; there's something about "just enough" that is the perfect balance between bland and over the top. GMail's design grew old over the years and Google just got around to...
Simple Image Lazy Load and Fade
One of the quickest and easiest website performance optimizations is decreasing image loading. That means a variety of things, including minifying images with tools like ImageOptim and TinyPNG, using data URIs and sprites, and lazy loading images. It's a bit jarring when you're lazy loading images and they just...
GSAP + SVG for Power Users 2: Complex Responsive Animation
This is the second article in a series about the GreenSock Animation API and SVG. This series isn't intended for beginners, but rather a deep dive into some of the more exciting and lesser-known features that one can work with after they've gotten past the initial...
Crafting a 3D React Carousel
There is something in me that is amazed but beautiful 3D interfaces. And it doesn't matter whether they're functional like Gyroscope features menu, technology demonstrators like the amazing periodic table demo from famous or they're artistic representation pushing the limits of...
Demos (374)
Chris Coyier’s Favorite CodePen Demos IV
Did you know you can triple-heart things on CodePen? We’ve had that little not-so-hidden feature forever. You can click that little heart button on any Pen (or Project, Collection, or Post) on CodePen to show the creator a little love, but you can click it again...
prefers-color-scheme: CSS Media Query
One device and app feature I've come to appreciate is the ability to change between light and dark modes. If you've ever done late night coding or reading, you know how amazing a dark theme can be for preventing eye strain and the headaches that result.
CSS Ellipsis Beginning of String
I was incredibly happy when CSS
text-overflow: ellipsis
(married with fixedwidth
andoverflow: hidden
was introduced to the CSS spec and browsers; the feature allowed us to stop trying to marry JavaScript width calculation with string width calculation and truncation. CSS ellipsis was also very friendly to...Vertically Centering with Flexbox
Vertically centering sibling child contents is a task we've long needed on the web but has always seemed way more difficult than it should be. We initially used tables to accomplish the task, then moved on to CSS and JavaScript tricks because table layout was horribly...
Creating Spacers with Flexbox
I was one of the biggest fans of flexbox before it hit but, due to being shuffled around at Mozilla, I never had the chance to use it in any practice project; thus, flexbox still seems like a bit of a mystery to me. This greatly...
Docker (4)
Protect Sensitive Data in Docker
Developing authentication code for open source repositories can be a scary task; you're scared that hackers can find loopholes in your code but you're also petrified of accidentally committing sensitive credentials to a public repository. I've seen unintentional credential commits happen and the panic that ensues throughout an organization will...
Fix Bash Error in Docker
I really enjoy working with Docker because it gives me more insight into creating and maintaining your own environments, mostly from scratch. I instantly gained a greater appreciation for Ops engineers, package creators, and other engineers who work on low level software. I think what I'm trying to say is that...
Respond to Prompt in Bash Script
I work on a project that requires I frequently build and destroy a virtual machine. I don't enjoy having to do so but virtual machines can be notoriously difficult to prop up, especially when you have a complex app living within it. Manually typing the same commands over...
Docker: Remove All Images and Containers
I've moved to a new project at Mozilla which uses a much different stack than I'm used to; suddenly I'm thrust into a world of Mercurial, Docker, and a few other technologies I'm not accustomed to. You know what that leads to: foul language, frustration, booze, and...lots of starting over.
Dojo (61)
Observing Intersection Observers
As developing for the web has matured and JavaScript engines have become faster, one area remains a significant bottleneck - rendering. It's because of this that so many of the recent development efforts have been focused around rendering, with virtual DOM being one of the more...
Get Browser Information with Intern
You know how you can't remember something your spouse feels is really important but you can remember every funny line from that movie you saw when you were 17? That's how I feel after months of writing selenium tests using the Intern framework -- I've forgotten...
Loading Static Templates for Intern Testing
I use Intern by SitePen for all of my JavaScript functional testing. Intern has loads of features other functional test frameworks don't and it's completely Promise-based -- something I got very used to when I used the Dojo Toolkit every day. Async test creation can...
Resize an Image Using Canvas, Drag and Drop and the File API
Recently I was asked to create a user interface that allows someone to upload an image to a server (among other things) so that it could be used in the various web sites my company provides to its clients. Normally this would be an easy task—create a...
Dojo DeferredList
Deferreds are all the rage in the JavaScript community these days and who can argue? Deferreds, an object representing an asynchronous action, make working with AJAX requests incredibly easy -- no callback hell, no problem passing request information around. What if you want to work with...
Events (30)
O’Reilly Fluent Conference – San Jose – Discount and Giveaway!
O'Reilly's amazing Fluent Conference is coming back to San Jose, CA this June 11th-14th. Fluent is a special conference for web developers looking to harden their skills, learn about what's coming in the web world, and to hear from industry leading developers from Mozilla...
Upcoming O’Reilly Velocity Conferences
Velocity Conference is one of those conferences that every type of software industry specialist should go to, and I say that as a front-end developer. Velocity covers a host of important topics: security, performance and scaling, devops, leadership, and more. While I love nothing more...
O’Reilly Jupyter Conference for Machine Learning is Coming!
Machine learning is an exciting topic in the computer science world these days, which means that O'Reilly has you covered with a first class conference. Jupyter Conference is coming this August so I wanted to speak to O'Reilly's Director of Learning Group, Paco Nathan...
Interview with Kyle Simpson, Chair for O’Reilly Fluent Conference
O'Reilly Fluent Conference, taking place in San Jose on June 19-22, is one of the best conferences if you're a front-end developer like myself. Most of the big names I've known over the past decade have graced Fluent's stage, one of them being...
Interview with James Turnbull, Chair for O’Reilly Velocity Conference
O'Reilly's awesome Velocity conference, come to San Jose from June 19-22, focuses on the "magic in the background": DevOps, Security, and Systems Engineers. You'll have a chance to learn from engineers at Dropbox, Slack, Microsoft, Intel, Twitter, and more! As our systems grow...
Features (53)
39 Shirts – Leaving Mozilla
In 2001 I had just graduated from a small town high school and headed off to a small town college. I found myself in the quaint computer lab where the substandard computers featured two browsers: Internet Explorer and Mozilla. It was this lab where I fell...
Interview with a Pornhub Web Developer
Regardless of your stance on pornography, it would be impossible to deny the massive impact the adult website industry has had on pushing the web forward. From pushing the browser's video limits to pushing ads through WebSocket so ad blockers don't detect them, you have...
Welcome to My New Office
My first professional web development was at a small print shop where I sat in a windowless cubical all day. I suffered that boxed in environment for almost five years before I was able to find a remote job where I worked from home. The first...
How to Create a RetroPie on Raspberry Pi – Graphical Guide
Today we get to play amazing games on our super powered game consoles, PCs, VR headsets, and even mobile devices. While I enjoy playing new games these days, I do long for the retro gaming systems I had when I was a kid: the original Nintendo...
Conquering Impostor Syndrome
Two years ago I documented my struggles with Imposter Syndrome and the response was immense. I received messages of support and commiseration from new web developers, veteran engineers, and even persons of all experience levels in other professions. I've even caught myself reading the post...
Firefox OS (21)
Web Audio API
The Web Audio API allows developers to load and decode audio on demand using JavaScript. The more I evaluate awesome games for Firefox OS TVs, the more I get to learn about these APIs that I normally wouldn't touch. The following is a very basic introduction to the WebAudio API...
Spatial Navigation
Spatial navigation is the ability to navigate to focusable elements based on their position in a given space. Spatial navigation is a must when your site or app must respond to arrow keys, a perfect example being a television with directional pad remote. Firefox OS TV apps are simply...
Get Element Dimensions After CSS Transform
I've been playing a lot with meta viewports recently due to seeing many HTML5 TV apps coded explicitly for 1280x720 which you'll see on many HD televisions. We all know that it's a much better practice to use responsive design than hardcode dimensions but, that aside, meta...
How to Test Firefox OS Apps on TV
One of my responsibilities in my new role in Partner Engineering at Mozilla is testing HTML5-powered apps and games on Panasonic televisions. The television in my office, a beautiful 60" 4K Ultra HD beast, is the perfect device for the job. But how do I get the app...
Geeksphone Peak Firefox OS Unboxing
Any time you get a new device it's like instant Christmas. Whether it's top of the line or bottom of the barrel, we're always excited to check out unique devices to see what we can learn, check out what apps are popular, and test the websites we...
Games (21)
How to Play Grand Poo World 3
The underground world of creating and streaming Super Mario World-based ROM hacks continues to gain popularity. This popularity is a tribute to the creativity of gamers and the quality of the original 30 year old video game's mechanics. Over the past decade, incredible ROM hacks like...
How to Get a Computer’s Hardware ID
Cheating in online games is a huge issue these days -- just ask anyone playing PUBG. Cheaters aren't difficult for players to spot but vendors oftentimes don't do enough to punish these villains. Krafton recently announced they would start banning cheaters by hardware ID...
How to Play Retro Game ROMs on Windows
Video games are always a fun time, something we desperately need during our COVID lockdown. A few years back I shared how to play retro games on Mac, as well as how to patch games to play popular ROM hacks like Grand Poo World...
How to Patch Retry System into Super Mario ROMs
I find myself watching less TV lately and much more time enjoying gamers stream on Twitch. While I too much PUBG, and enjoy watching people like Shroud and ChocoTaco hit bangers, I get more enjoyment out of Grand Poo Bear, Barbarian, and others play ultra difficult...
How to Get Green Blood in PUBG
My current video game obsession is Player Unknown's Battleground, also referred to as PUBG. It's an online multiplayer game which drops yourself and 99 others into a single, large map and you battle it out until the last man is standing. It's frustrating, heart-attack inducing, exciting...it's...
git (55)
How to Get the Current Branch Name with git
Most developers spoil themselves with fun command line utilities to make their work easier and more efficient. One such command line helper allows developers to always show the git branch in the command line. How can you get the current branch? With...
git Force Push
Rebasing is a frequent task for anyone using git. We sometimes use rebasing to branch our code from the last changes or even just to drop commits from a branch.Oftentimes when trying to push after a rebase, you'll see something like the following:Commonly developers...
More Awesome Git Aliases
In the last article in this series, Awesome Git Aliases, we took a look at some awesome aliases for Git. However, the true power of Git aliases comes from writing custom scripts. These allow you to build Git commands that can do anything you can...
How to Flatten git Commits
One of my least favorite tasks as a software engineer is resolving merge conflicts. A simple rebase is a frequent occurrence but the rare massive conflict is inevitable when many engineers work in a single codebase. One thing that helps me deal with large...
Awesome Git Aliases
Git is an amazingly powerful tool. It can keep track of all the code you write, let you organize your work into different branches, help you seamlessly work with other developers, and even let you time travel and make changes.But wouldn't it be awesome if Git...
Giveaways (10)
Giveaway: Software Architecture Conference – Boston
I know too many developers who consider coding their only responsibility. Sure, it's the bulk of what we do and how we cut our teeth, but if you aren't aware of the business side of the industry, you're missing out on a lot of why's and...
Giveaway: 2 Free Tickets to Velocity Conference in NY
O'Reilly's Velocity Conference is quickly approaching -- it's September 15-17 in beautiful New York. As a follow up to last month's post, I wanted to make sure people knew I had 2 more tickets left to give away to this epic front-end...
Velocity New York: Ticket Giveaway
A few months back, O'Reilly gave me two free tickets to give away for Velocity Conference in Santa Clara. The chosen two reported back to me that the conference was incredible, as did a Mozilla colleague that quickly came back and implemented a bunch of...
Giveaway: O’Reilly Velocity Conference Ticket
A few months back, O'Reilly was awesome enough to throw me two tickets to giveaway for the upcoming O'Reilly Velocity Conference, the popular front-end performance event in Santa Clara, CA, US from June 24th-26th. People seemed pretty excited about the giveaway and...
Win One Awesome X 2.0 Theme License
Theme X is a groundbreaking versatile and highly responsive theme coming from Themeco (theme.co). It could be the last theme that you will have to work with, given its stunning features and its top notch customer support. The yardstick of this theme...
Google (58)
How to Inject a Global with Web Extensions in Manifest V3
For those of you not familiar with the world of web extension development, a storm is brewing with Chrome. Google will stop support for manifest version 2, which is what the vast majority of web extensions use. Manifest version 3 sees many changes but the largest...
Easy Google Search Result API with Zenserp
No matter how much experience I gain in this industry, one task I continue to fail at is building an accurate, flexible, and maintainable scraper for site search. As soon as sites change their HTML structure, my scrape is borked. When looking to build my own...
Create the Google Button Effect with CSS
I always found Google's branding simple but grew to realize that was the beauty in their design; there's something about "just enough" that is the perfect balance between bland and over the top. GMail's design grew old over the years and Google just got around to...
Easy Document Signing with the Eversign Chrome Extension
A while back I wrote about Eversign, an awesome service that allows you and your clients or partners to digitally sign documents online. If you've recently bought a house or did any other large purchases or agreements, you know how important the ability to reliably...
Custom, Embeddable Site Search with Swiftype
As hard as we try to make our website navigation and content structure as logical as possible, a large percentage of users would prefer a simple search box to find what they need. That being the case, we need to ensure that site search is as accurate and...
GraphQL (2)
GraphQL Editor – The Journey from Initial Release to Version 5.0
From the very beginning of our adventure with GraphQL, we were impressed by how great its community is. The amount of content, libraries and great tools generated by GraphQL users amazed us from the very start. The more time we spent working with GraphQL the more...
Getting Started with GraphQL
GraphQL was developed by Facebook in 2012 to power up its mobile apps. Since open-sourcing GraphQL specification in 2015, it gained a lot of popularity and is now used by many development teams, including giants like GitHub, Twitter or Airbnb. Why so? And what exactly...
Guest Blogger (156)
More Awesome Git Aliases
In the last article in this series, Awesome Git Aliases, we took a look at some awesome aliases for Git. However, the true power of Git aliases comes from writing custom scripts. These allow you to build Git commands that can do anything you can...
GraphQL Editor – The Journey from Initial Release to Version 5.0
From the very beginning of our adventure with GraphQL, we were impressed by how great its community is. The amount of content, libraries and great tools generated by GraphQL users amazed us from the very start. The more time we spent working with GraphQL the more...
Awesome Git Aliases
Git is an amazingly powerful tool. It can keep track of all the code you write, let you organize your work into different branches, help you seamlessly work with other developers, and even let you time travel and make changes.But wouldn't it be awesome if Git...
How Hacker News Crushed David Walsh Blog
Earlier this month, David’s heartfelt posting about leaving Mozilla made the front page of Hacker News. Traffic increased by 800% to his already-busy website, which slowed and eventually failed under the pressure. Request Metrics monitors performance and uptime for David’s blog, and our metrics...
Shoelace 2.0: A Forward-thinking Library of Web Components
A few years ago, I released a lightweight alternative to Bootstrap affectionately named Shoelace. Shoelace was small and fast because of its minimal design and pure CSS approach to styling. It used CSS custom properties extensively to enable customizations, even when loaded via...
Hosting / Domain (16)
500
Over the past four or so months, I've been having a hell of a time with seeing 500 errors on my site. And while I'm on my site a few hours a day, the amount of 500s my visitors must have seem is probably huge. And that's...
Enable GZIP Compression on nginx Servers
Speed kills, and there's nothing like a speedy website. When you come to this blog, I want you to have a great experience, which is why I've worked tirelessly to compress every asset and avoid unnecessary synchronous interactions. In reviewing my site with Google Pagespeed...
Hosting a Website on Amazon S3
Everyone knows that Amazon S3 is great for storing files. It's fast, inexpensive, and easy to setup. What you may not realize is that you can also host static websites on this robust platform. What is a static website? In short, it's a website comprised of...
Who I Use: Hosting & Domain
I get quite a few emails each day, but without a doubt, the most popular topic isn't support, recruiter, or request email; believe it or not, I'm most frequently asked who I use for my domain and hosting. Can you blame people though? Finding a good...
Fix WordPress CRONs on Media Temple (dv) Servers
When I switched from Dreamhost shared hosting to Media Temple (dv) server hosting, I had a hell of a time trying to figure out why CRONs weren't working correctly on the website. I had database backups being sent via CRON jobs so making sure CRONs...
HTML5 (64)
HTML popover Attribute
Modals have been an important part of websites for two decades. Stacking contents and using
fetch
to accomplish tasks are a great way to improve UX on both desktop and mobile. Unfortunately most developers don't know that the HTML and JavaScript specs have implemented...How to Override width and height HTML attributes with CSS
One of the HTML elements that frequently comes into collision with CSS is the
img
element. As we learned in Request Metrics' Fixing Cumulative Layout Shift Problems on DavidWalshBlog article, providing image dimensions within theimage
tag will help to improve your website's score. But...AutoGrow Textareas with CSS
As the demands of the web change and developers experiment with different user experiences, the need for more native language improvements expands. Our presentation layer, CSS, has done incredibly well in improving capabilities, even if sometimes too slow. The need for native support for automatically expanding...
Customizing HTML Form Validation
Form validation has always been my least favorite part of web development. You need to duplicate validation on both client and server sides, handle loads of events, and worry about form element styling. To aid form validation, the HTML spec added some new form attributes...
Legacy String Methods for Generating HTML
I'm always really excited to see new methods on JavaScript primitives. These additions are acknowledgement that the language needs to evolve and that we're doing exciting new things. That being said, I somehow just discovered some legacy String methods that you probably shouldn't use...
Interviews (6)
An Interview with Eric Meyer
Your early CSS books were instrumental in pushing my love for front end technologies. What was it about CSS that you fell in love with and drove you to write about it? At first blush, it was the simplicity of it as compared to the table-and-spacer...
Interview with Roku’s Nowhere Man
Chris Hagedorn works for Roku; opinions are all his own and don't reflect his employer. Introduce yourself; where you're from and your development background. I'm a desert rat. I grew up in Yuma, AZ, the sunniest place on earth and lettuce capital of the world. My father...
A CodePen Interview with Chris Coyier
One of my favorite sites has recently become CodePen. CodePen is an incredible showcase of what developers can do with CSS, JavaScript, and HTML; thousands of developers have shown pride in their work with each pen. I wanted to interview...
Interview with John Hann, Creator of curl.js
Hello John! For those who don't know you, give us a quick introduction and let us know what you're working on. Hi, I'm John. John Hann. "@unscriptable" on most of the interwebs. I've been writing Javascript since 1995. Like many, I wasn't...
An Interview with jsFiddle Creator Piotr Zalewa
One of the great code sharing tools was pastebin. It was simple and straight-forward but quickly grew out of its usefulness. That's where jsFiddle comes in. jsFiddle is a fresh tool that not only displays the code and highlights it but also executes...
JavaScript (626)
Detect Caps Lock with JavaScript
Anyone is capable of having their caps lock key on at any given time without realizing so. Users can easily spot unwanted caps lock when typing in most inputs, but when using a
password
input
, the problem isn't so obvious. That leads to the...Date.now()
Ask any software engineer and they'll tell you that coding date logic can be a nightmare. Developers need to consider timezones, weird date defaults, and platform-specific date formats. The easiest way to work with dates is to reduce the date to the most simple...
Extract a Number from a String with JavaScript
User input from HTML form fields is generally provided to JavaScript as a string. We've lived with that fact for decades but sometimes developers need to extract numbers from that string. There are multiple ways to get those numbers but let's rely on regular...
AutoSave with VSCode
Visual Studio Code has taken the crown of most used text editor, at least in JavaScript spheres. VSCode is fast, feature-filled, and supports thousands of plugins to boost productivity. Developers can also tweak hundreds of settings to enrich functionality. One such feature is...
How to Detect Failed Requests via Web Extensions
One of the best things that ever happened to t he user experience of the web has been web extensions. Browsers are powerful but extensions bring a new level of functionality. Whether it's crypto wallets, media players, or other popular plugins, web extensions have...
jQuery (77)
Update jQuery UI Widget Options
We're all used to passing options when instantiating an object, whether it be JavaScript or any other language. Whether or not you can update those options later is usually up to the framework, and somehow many wont let you update them once they've been passed in. Depending...
Inspect jQuery Element Events
Building on top of other tools can be incredibly difficult, especially when you didn't create the other tool and you can't replace that tool. And when those other tools create loads of event listeners, you sometimes see odd behavior within the page and have no idea what the...
Elegant Selects with Quick[select]
Form elements have always allowed limited styling...which is why I hate working on form display. And I started when form elements were virtually unstylable back in the Internet Explorer 4 days. Of course we've come a long way but there's one element which is still somewhat difficult to style and...
iOS Mobile Safari Hover Menu Fix
One component I'm quite proud of creating is the Mozilla Developer Network's dropdown menu component. It's elegant, flexible, accessible via keyboard, and relatively compact (though it does require jQuery). One problem I did notice, however, was that tapping once opened the menu (good) but you'd have...
Unwrapping JSON-P
This is a quickie simple post on JavaScript techniques. We're going to look at how to unwrap the "P" function-call padding from a JSON-P string to get the JSON from it. Note: Obviously, the recent push toward ubiquity of CORS is making JSON-P less important...
link() (49)
7 Excellent Treehouse Blog Posts
My sponsor Treehouse has not only an excellent video tutorial service, but also an insightful blog. I wanted to feature a few of the posts I found most useful -- hopefully you get something out of them! Extending Placeholder Selectors with...
MooTools Zebra Table Plugin
I released my first MooTools class over a year ago. It was a really minimalistic approach to zebra tables and a great first class to write. I took some time to update and improve the class. The XHTML You may have as many tables as...
Weekend Links – mooSlide, Spam-Proof Email Links, JSMiner, MooScroll, Twitter
mooSlide Revamp for MooTools 1.2 mooSlide is a customizable MooTools-based slider that pops into the page whenever and wherever you'd like. Potentially very useful -- just make sure you aren't covering a bunch of content up (like the demo). http://www.artviper.net/test/mooSlide2/index.html Spam-Proof Email Links MooTools core developer...
Weekend Links – JavaScript Time Picker, Cuil Search, AJAX Site Thumbnails, IE6, Twitter
Javascript Time Picker This new MooTools-based script allows you to pick a specific time by dragging and dropping hour and minute hands. Pretty cool, although I'm not sure it makes picking times on forms much easier. http://www.nogray.com/time_picker.php Former Employees of Google Prepare Rival Search Engine A...
Weekend Links – Firebug Extensions, Updating Firefox Extensions, jQuery Puzzles, Digg/Google Sale
The Fire Best Firebug Extensions Firebug is a powerhouse in itself, but why not install some Firebug plugins to make it even more useful? http://www.webmonkey.com/blog/The_Five_Best_Firebug_Extensions Updating Extensions for Firefox 3 Have a Firefox plugin that you want to use in the newest version, but it isn't officially...
Markup (319)
Use a Submit Button Outside of a Form!
Have you ever felt like you've been a professional developer or designer forever, and somehow not known something basic, and borderline hate yourself? That's me with a trick that was introduced to me by Miguel Piedrafita:🔥 You can submit forms from a button outside of...
How to Prevent Pasting into an Input
Every once in a while I get to a website that doesn't allow me to paste into a form input. In most cases it's something to do with login credentials (username and or password) and auth codes. So how are they preventing me from...
How to Detect When a Sticky Element Gets Pinned
The need for
position: sticky
was around for years before it was implemented natively, and I can boast that I implemented it with JavaScript andscroll
events for ages. Eventually we gotposition: sticky
, and it works well from a visual perspective, but I wondered how...Remove the Search Input Clear(x) Icon
I really appreciate the amount of different
<input>
elements we've received over the past decade. These elements don't just bring a new semantic advantage, but also provide UI helpers, which in many cases are useful. In a recent case, I found a UI element...Lazy Load IFRAMEs
We've known for a decade that lazy loading resources like JavaScript, CSS, and especially images is a massive performance win for web pages. At first we used tricks and JavaScript to do the lazy loading, but more recently native image lazy loading has debuted...
Media (74)
How to Create a Screen Recording with Quicktime
Creating screen recordings is an essential skill for web developers. Screen recordings can illustrate new features, bugs, or a variety of other ideas. I'm often asked what app I use to create screen recordings and people are shocked when I tell them Quicktime!
How to Blur Faces in a Video from Command Line
Privacy is always incredibly important, especially with visual media where you may not have the permission of individuals in the video. If you're filming something in public, it's likely you'll catch someone's face who simply doesn't want or need to be identified. This recently...
How to Create a Diff of Two Images
When I was a child, I loved looking for Waldo in the "Where's Waldo?" book series. These days I'm a sucker for TMZ's "What's the Big Frigin Difference" images, where TMZ slightly changes an image and you have to spot the differences between the two.
Create a Thumbnail From a Video with ffmpeg
Creating a thumbnail to represent a video is a frequent task when presenting media on a website. I previously created a shell script to create a preview video from a larger video, much like many adult sites provide. Let's view how we can...
How to Reverse an Animated GIF
Modifying visual media via code has always been a fascination of mine. Probably because I'm not a designer and I tend to stick to what I'm good at. One visual effect I love is seeing video reversed -- it provides a sometimes hilarious perspective...
Microsoft (18)
How to Retrieve WiFi Password on Windows
Remembering the WiFi password when on a guest network is never easy. Even worse is when it's no longer posted and someone else is asking you for it. Luckily there's a built in Windows command to recover the password of a given WiFi network.The...
Video Game Console Emulator
Like most American children of the 1980s and 1990s, I spent a good amount of time playing video games with my friends. My first console was the original Nintendo (NES), then the first Sega console, then onto t he Nintendo 64 (the best gaming system ever created)...
Thoughts on Xbox One
I've never been a massive Microsoft fan but one thing I believe they got massively right was Xbox. I didn't own the first Xbox but I did jump at the Xbox 360 and love it. When I saw that Xbox One was coming out, I bought...
3 Solutions for Supporting Internet Explorer
In the beginning, Internet Explorer was the progressive browser. After a period of inactivity, Internet Explorer became the bane of our existence. Microsoft has since recommitted to their browser but the fact remains that sometimes modern Internet Explorer is lagging just a bit behind WebKit-based browsers and...
Free IE Virtual Machines
Microsoft has been working their butts off to repair the image of their flagship browser, Internet Explorer. They've done so by adhering to standards they previously scoffed at, creating a website with awesome IE-compliant demos, adding useful developer tools, hiring...
Mobile (57)
Kotlin Coroutines and Delay
Whenever I suspect that there's a timing conflict causing a problem with rendering and directives, I usually opt for a JavaScript
setTimeout
with a delay. ThesetTimeout
code never makes it to production, but it does help me to understand if my code is the...Mirror Android Device to Computer
As I continue my adventure into Android development, pair programming has been a huge help in learning this new platform. When it's time to build and run the app, relying on the emulator is a fools' game -- the emulator is slow and it's hard to...
Hello Fenix!
Over seven years ago I made the massive career leap to Mozilla. Two years ago I realized a dream of joining the Firefox DevTools team -- it's been a rewarding adventure helping to improve the Firefox DevTools Debugger and other super helpful tools. I'm...
Game of Thrones Snapchat Filter
If you follow me on Twitter, you know I'm a massive Game of Thrones fan. I may not know every name but my mind has a mental map of every angle and epic battle. Not since Sopranos has there been a television show...
Prevent Mobile Browser From Sleeping
Web developers still have a difficult job when it comes to mobile; the web will never provide as many APIs or as much control as native mobile platforms but our users expect the same excellent experience. Creating HTML5 games and media-heavy apps for the web can...
MooTools (316)
5 Best Practice Mentalities to Get Over
Every developers strives to write clean, maintainable, and functional code, whether they hack on the server side or dabble on the client side. Over the last few decades of the web, we've learned from some of our early mistakes and formed a site of always...
Function Debouncing with Underscore.js
The ability to listen and react to user interactions with JavaScript is fundamental and incredibly useful. Some interactions happen frequently and some rarely. Some listener functions are light of action, others can be quite taxing on the browser. Take window's resize event for...
Google Extension Effect with CSS or jQuery or MooTools JavaScript
Both of the two great browser vendors, Google and Mozilla, have Extensions pages that utilize simple but classy animation effects to enhance the page. One of the extensions used by Google is a basic margin-top animation to switch between two panes: a graphic pane...
Custom Getters and Setters with MooTools
Working with Dojo all day and scoping out MooTools at night gives me a unique perspective; I get to constantly evaluate the two frameworks and mentally move functionalities from framework to framework. One small but handy feature within the Dojo Toolkit's Dijit UI Framework...
MooTools Mobile: It’s Touching!
When the community asked the MooTools team to add basic mobile event listening to MooTools' Event class, we listened; today MooTools supports all touch and gesture events. What if we want more detailed mobile event listeners though, like swipe with direction, pinch...
Mozilla (23)
39 Shirts – Leaving Mozilla
In 2001 I had just graduated from a small town high school and headed off to a small town college. I found myself in the quaint computer lab where the substandard computers featured two browsers: Internet Explorer and Mozilla. It was this lab where I fell...
Hello Fenix!
Over seven years ago I made the massive career leap to Mozilla. Two years ago I realized a dream of joining the Firefox DevTools team -- it's been a rewarding adventure helping to improve the Firefox DevTools Debugger and other super helpful tools. I'm...
Firefox Kiosk Mode
As someone who loves the HTML and web APIs, I want to see them used in all different types of devices and mediums. Being that I work for the amazing Mozilla Corporation, seeing Firefox and the gecko web engine thrive in those spaces is important...
How to Build Firefox
Open source is a dream and a gateway to an amazing career -- I'm a testament to that. One of the most amazing open source projects to ever exist, Mozilla Firefox, is a project I'm proud to work on as an employee of Mozilla. It's rewarding...
How to Add a User Stylesheet in Firefox
While many like to complain about CSS these days, it's important to remember how amazing CSS is; the CSS language is:easy to learneasy to readeasy to writesimple to understandWeb developers and designers alike love that CSS allows us to take text/media and present it in...
MySQL (15)
MooTools Star Ratings with MooStarRating
I've said it over and over but I'll say it again: JavaScript's main role in web applications is to enhance otherwise boring, static functionality provided by the browser. One perfect example of this is the Javascript/AJAX-powered star rating systems that have become popular over the...
MySQL date_add
Here's a quick MySQL tip I wanted to throw your way. I created an event system a while back and one of the requirements of the system was to show events that happened yesterday forward, meaning events older than 2 days were to be hidden.
Create Custom Element Property Getters and Setters with MooTools
One of the goals of the MooTools projects is to create very flexible methods by which developers may modify or extend the behavior of given classes. One example of that flexibility is the ability to customize the Element class' get and set methods for specified...
Create a Basic Web Service Using PHP, MySQL, XML, and JSON
Web services are taking over the world. I credit Twitter's epic rise to the availability of a simple but rich API. Why not use the same model for your own sites? Here's how to create a basic web service that provides an XML...
Backup Your Database into an XML File Using PHP
Backing up data is extremely important. Most of the time the database is the most important piece of the puzzle. Imagine losing all of the data in your database -- it would be tragic. Here's a PHP snippet that outputs your database as...
Node.js (82)
How to Use window.crypto in Node.js
I've been writing a bunch of jest tests recently for libraries that use the underlying
window.crypto
methods likegetRandomValues()
andwindow.crypto.subtle
key management methods. One problem I run into is that thewindow.crypto
object isn't available, so I need to shim it.To use thewindow.crypto
...Command Line trash
One of the first commands you learn when experimenting with command line is
rm
, the utility for deleting files and directories. Deletion is a core computer UI operation but operating systems use a "Trash" paradigm, where files are stored before truly deleted. With the...Set a Default Node Version with nvm
As I've shown you in the past,
nvm
an excellent utility for switching between Node.js versions. Whether your host machine or CI, building and testing your apps on different Node versions is a necessity. I've recently found a fewnvm
commands that I found really...Simple Node.js Proxy
When I wanted to refresh my React.js skills, I quickly moved to create a dashboard of cryptocurrencies, their prices, and and other aspects of digital value. Getting rolling with React.js is a breeze --
create-react-app {name}
and you're off and running. Getting the API...How to Create a QR Code
QR codes aren't everyone's cup of tea but I quite like them. If I see something I want to remember or check out later, especially when on the road, it's super easy to take a quick picture -- it's much easier than trying to remember a...
O'Reilly (26)
O’Reilly Fluent Conference – San Jose – Discount and Giveaway!
O'Reilly's amazing Fluent Conference is coming back to San Jose, CA this June 11th-14th. Fluent is a special conference for web developers looking to harden their skills, learn about what's coming in the web world, and to hear from industry leading developers from Mozilla...
Upcoming O’Reilly Velocity Conferences
Velocity Conference is one of those conferences that every type of software industry specialist should go to, and I say that as a front-end developer. Velocity covers a host of important topics: security, performance and scaling, devops, leadership, and more. While I love nothing more...
O’Reilly Jupyter Conference for Machine Learning is Coming!
Machine learning is an exciting topic in the computer science world these days, which means that O'Reilly has you covered with a first class conference. Jupyter Conference is coming this August so I wanted to speak to O'Reilly's Director of Learning Group, Paco Nathan...
Interview with Kyle Simpson, Chair for O’Reilly Fluent Conference
O'Reilly Fluent Conference, taking place in San Jose on June 19-22, is one of the best conferences if you're a front-end developer like myself. Most of the big names I've known over the past decade have graced Fluent's stage, one of them being...
Interview with James Turnbull, Chair for O’Reilly Velocity Conference
O'Reilly's awesome Velocity conference, come to San Jose from June 19-22, focuses on the "magic in the background": DevOps, Security, and Systems Engineers. You'll have a chance to learn from engineers at Dropbox, Slack, Microsoft, Intel, Twitter, and more! As our systems grow...
Optimization (48)
Fixing Cumulative Layout Shift Problems on DavidWalshBlog
Over 50 thousand developers visit DavidWalshBlog every month from around the world to learn JavaScript tricks and fix problems in their code. Unfortunately, some of them have a slow experience on the site.David tracks the performance of his Core Web Vitals and overall performance with
How Hacker News Crushed David Walsh Blog
Earlier this month, David’s heartfelt posting about leaving Mozilla made the front page of Hacker News. Traffic increased by 800% to his already-busy website, which slowed and eventually failed under the pressure. Request Metrics monitors performance and uptime for David’s blog, and our metrics...
Observing Intersection Observers
As developing for the web has matured and JavaScript engines have become faster, one area remains a significant bottleneck - rendering. It's because of this that so many of the recent development efforts have been focused around rendering, with virtual DOM being one of the more...
Detect WEBP Support with JavaScript
Image optimization is a huge part of improving front-end performance. We've traditionally used JPG/JPEG, GIF, and PNG images but Google and the Chrome team developed the WEBP format which crunches file size and optimizes rendering. If you go to a site like GIPHY in Chrome you'll...
Website Speed Test by Cloudinary
Making your website as fast-loading as possible is not only an art but a necessity these days. Slow-loading websites cause users to bail, leading to lost revenue and loss of credibility. Add that Google now factors site speed into search results and you realize how important...
Performance (31)
Fixing Cumulative Layout Shift Problems on DavidWalshBlog
Over 50 thousand developers visit DavidWalshBlog every month from around the world to learn JavaScript tricks and fix problems in their code. Unfortunately, some of them have a slow experience on the site.David tracks the performance of his Core Web Vitals and overall performance with
Limit Promise Concurrency with pool
Methods like
Promise.all
,Promise.allSettled
,Promise.race
, and the rest are really excellent for managing multiple Promises, allowing for our apps to embrace async and performance. There are times, however, that limiting the number of concurrent operations may be useful, like rate limiting or simply not wanting...How Hacker News Crushed David Walsh Blog
Earlier this month, David’s heartfelt posting about leaving Mozilla made the front page of Hacker News. Traffic increased by 800% to his already-busy website, which slowed and eventually failed under the pressure. Request Metrics monitors performance and uptime for David’s blog, and our metrics...
Vital Web Performance
I hate slow websites. They are annoying to use and frustrating to work on. But what does it mean to be “slow”? It used to be waiting for document load. Then waiting for page ready. But with so many asynchronous patterns in use today, how do...
Observing Intersection Observers
As developing for the web has matured and JavaScript engines have become faster, one area remains a significant bottleneck - rendering. It's because of this that so many of the recent development efforts have been focused around rendering, with virtual DOM being one of the more...
PHP (220)
How to Simulate Long HTTP Requests
It happens less frequently these days but there are times when we need to accommodate for a HTTP request timing out. The service could be down, under heavy traffic, or just poorly coded, or any host of other issues.Whenever I need to simulate a...
How to Change the WordPress Media Upload Directory
One thing I've always missed about the "old" way of web development was the simplicity of FTP. No deploy scripts, no fuss: simple drag and drop of files and the files are there. I've used FTP for assets on this blog for over a decade but...
Custom Configuration for Phabricator
Phabricator is an excellent code review tool used by Facebook and other respected software engineering organizations. The user interface is beautiful, the workflow and tools are concise and comprehensive, and it's a utility that covers most use cases, both web and command line. I've written a...
Match Special Letters with PHP Regular Expressions
Regular expressions come with all sorts of peculiarities, one of which I recently ran into when creating a regex within PHP and
preg_match
. I was trying to parse strings with the format "Real Name (:username)" when I ran into a problem I would see a lot...Retrieve Custom Field Values for Phabricator Objects
Phabricator is an incredibly well-coded PHP application but lacks a bit on the documentation side. Then again, what open source project isn't? Over the past months I've been slowly integrating Phabricator, a newish review tool, with Bugzilla, a much older tool. The most recent step saw...
Podcast (27)
Script & Style Show on iTunes!
Last year Todd Gardner of TrackJS and I debuted our YouTube web show (podcast): The Script & Style Show. It was an amazing first year of guests, including Chris Coyier, Kyle Simpson, Jason Laster, Max Lynch, Dylan Schiemann, and more! And the show...
Script & Style Show: Episode 28: “Get Off My Lawn”, and Other Software Stories with Eric Brandes
In this episode: Todd and David kick things off bantering about cell phones, Android rot, and the good old days of Windows XP and piracy. Todd's colleague Eric Brandes gets us back on track with a discussion about trusting proven technologies, not chasing the latest fads...
Script & Style Show: Episode 26: Web Games with ExcaliburJS with Erik Onarheim and Kamran Ayub
In this episode: Todd returns from a vacation to Disney and gives David some tips about surviving a family visit to Orlando's most famous theme parks. Erik Onarheim and Kamran Ayub join the guys to discuss HTML5 games, the Excalibur JavaScript HTML5 game library, the amazing...
Script & Style Show: Episode 25: AR, VR, and Mozilla Reality with Chris Van Wiemeersch
On this episode: Todd notices what David's been watching on YouTube while logged in as the Script & Style user and David has no defense but loads of embarrassment. David hurriedly transitions to welcoming guest Chris Van Wiemeersh from Mozilla's Reality team. Chris enlightens the guys...
Script & Style Show: Episode 24: Meme Sites, Developing for Fun, and Podcasts with Lemon!
On this episode: Todd asks David what he wants to be for Halloween and quickly regrets it, while Todd reveals his somewhat controversial costume. David and Todd then welcome Lemon, an amazing web developer that creates silly but hilarious web games, hosts The FPl.us...
Poll (9)
Poll: Should Browsers Implement Lazy Loading?
Lazy loading is the process of delaying the load of a resource until it's needed. Image a webpage that's 2,000 pixels high (lots of scrolling). Why should the images toward the bottom of the page load if the user clicks the first link way up at...
Poll: Browser-Specific CSS Styles
The first time I remember seeing browser-specific CSS styles was when I went to a website and saw that the scrollbars were a different color than Windows' usual grey colors. I thought it was pretty cool -- not necessarily useful by definitely creative. Fast forward to...
Poll Follow Up: How Many Domains Do You Own?
It was interesting to see how many domains you all had. I'm a serial domain buyer. Ever since I bought my first domain, DWIZZLE.COM (which I stupidly let go), I loved the power that it gave. Apparently many of you agreed: The Count Number...
Poll: How Many Domains Do You Own?
If you're anything like me, you get hit with "great" ideas every 10 minutes. With the ecstatic feeling this new idea brings, you navigate to your domain registrar of choice to snatch up the clever domain that will surely make your "great" idea even more...
Poll Follow Up: What is Your Preferred Browser?
When I created the "preferred browser" poll I was interested in seeing if my assumption that Firefox would reign supreme was spot on or completely off. It turns out that I was right but I have a few other thoughts on the outcome. The...
Promises (53)
How to Detect Failed Requests via Web Extensions
One of the best things that ever happened to t he user experience of the web has been web extensions. Browsers are powerful but extensions bring a new level of functionality. Whether it's crypto wallets, media players, or other popular plugins, web extensions have...
JavaScript waitFor Polling
As more of the JavaScript developers write becomes asynchronous, it's only natural to need to wait for conditions to be met. This is especially true in a world with asynchronous testing of conditions which don't provide an explicit
await
. I've written aboutwaitForever
,waitForTime
...queryLocalFonts
One of the larger downloads when requesting a webpage are custom fonts. There are many great techniques for lazy loading fonts to improve performance for those on poor connections. By getting insight into what fonts the user has available, we can avoid loading custom fonts.
Detect the Content Type in the Clipboard
A user's clipboard is a "catch all" between the operating system and the apps employed on it. When you use a web browser, you can highlight text or right-click an image and select "Copy Image". That made me think about how developers can detect what is...
fetch with Timeout
A few years back I wrote a blog post about how write a
fetch
Promise that times out. The function was effective but the code wasn't great, mostly becauseAbortController
, which allows you to cancel a fetch Promise, did not yet exist. With...
Python (13)
Checkout the Last Public Revision with Mercurial
I've always preferred git over Mercurial (
hg
) because the feature branch workflow makes organizing code and working off of master very easy. You don't get that with vanilla mercurial -- instead, commits can just sort of apply on top of each other, without much organization.Change Python Version
Python plays a major role at Mozilla; much of our website backends and tooling are written in the powerful language. Want to build Firefox? You'll need to make sure you have the proper Python version, which I recently found out had been upgraded. Despite installing and verifying...
Get Python Requirements Package Hashes
Python's (pip's)
requirements.txt
file is the equivalent topackage.json
in the JavaScript / Node.js world. Thisrequirements.txt
file isn't as pretty aspackage.json
but it not only defines a version but goes a step further, providing a sha hash to compare against to ensure package integrity: Coming from the JavaScript /package.json
world, you only need...httpstat: Simple cURL Stats
There are a lot of tools out there that do great, advanced things but present them as well as they could be presented. I wont knock cURL for anything -- it's an amazing tool many of us can't live without; what I will say, however, is that...
Serve a Directory via Python
Sometimes I'm working with a test HTML file and some JavaScript but need to work off of a served space. In that case, I sometimes need to swap out folders within MAMP Stack which leads to a maintenance nightmare. Bleh. I recently found out that you can...
Quick Tips (366)
How to Download a YouTube Video or Channel
The ability to download media on the internet almost feels like a lost art. When I was in my teens, piracy of mp3s, movies, and just about everything else via torrents and apps like Kazaa, LimeWire, Napster, etc. was in full swing. These days...
How to Add a Header to a curl Request
curl
is one of those great utilities that's been around seemingly forever and has endless use cases. These days I find myself usingcurl
to batch download files and test APIs. Sometimes my testing leads me to using different HTTP headers...Case Insensitive CSS Attribute Selector
CSS selectors never cease to amaze me in how powerful they can be in matching complex patterns. Most of that flexibility is in parent/child/sibling relationships, very seldomly in value matching. Consider my surprise when I learned that CSS allows matching attribute values regardless off...
How to Set Date Time from Mac Command Line
Working on a web extension that ships to an app store and isn't immediately modifiable, like a website, can be difficult. Since you cannot immediately deploy updates, you sometimes need to bake in hardcoded date-based logic. Testing future dates can be difficult if you...
How to Fix: Windows WASD Keys Reversed with Arrow Keys
This past weekend I had the opportunity to be what every father wants, if only for a moment: the "cool dad". My wife was out of town and my youngest son wanted to play PUBG. I caved in, taught him the basic FPS...
rand() (41)
Thoughts on Code Commenting
One of the "behind the scenes" ways of organizing your code and making it maintainable is code commenting. Whether you're coding in Java, CSS, JavaScript, PHP, or any language for that matter, code commenting plays an important role in making your development life easy. I thought...
Integrity: Link Checker for Mac
I usually don't post about desktop applications because, quite frankly, I make my living creating awesome web apps. I did, however, recently stumble upon a free utility which searches for broken links within a website. That utility is the awesome Integrity application for Snow Leopard. Integrity is...
Google Wave Invites Giveaway
Over the past months I've given away dozens of Google Wave invites via my Twitter feed. Selfless? Yes. Kind? Of course. Generous? Always. So far I've simply given them away but now we're going to play a new game! The...
What I’m Thankful For: 2009 Web Edition
I'd like to take a moment this Thanksgiving to thank some people that deserved to be. I'd like to thank the MooTools team for all of the support and hard work. I feel truly honored to be around such intelligent, driven group of individuals.
Confessions Friday
Over the past two years I've run my Confessions of a Web Developer series. Each one has been really popular and well-received. It's Friday and I've had a bad week so today I want you to confess your web development sins in the comment section below. ...
React (19)
React usePrevious Hook
Hooks are essential for the functional component pattern in React. One frequent logic comparison with
class
components was comparing a previousprop
value with a currentprop
value via lifecycle methods. So what's an easy pattern for duplicating previous value comparisons in functional components?TheuseRef
and...Fix Seeing “0” in Your JSX Code
The early days of the web felt like the wild west when it came to coding practices -- just make it work. Then we became enlightened to better practices, separating HTML from CSS and JavaScript. Then came React and JSX, where we combine JavaScript, HTML...
React authentication, simplified
Authentication is one of those things that just always seems to take a lot more effort than we want it to. To set up auth, you have to re-research topics you haven’t thought about since the last time you did authentication, and the fast-paced nature...
React.isValidElement
Knowing what input type you've received is hugely important in JavaScript, which is a big reason for Flow and TypeScript's rise. One such case where it's useful to know what an object represents is if the input is a string or a React element.To detect...
React indeterminate
I've fallen in love with React.js and JSX over the years; state-based rendering and a logical workflow have made me see the light of this modern framework. That doesn't mean I don't sometimes get a bit frustrated that the "simple" things seem harder than they should...
Security (34)
Log a User Out from Command Line
Automation is a system administrator, support agent, and tech savvy person's dream. Automating tasks via scripts remotely helps to get clients out of trouble or even the organization itself. Oftentimes big updates can require users log out. Logging a user out from command...
Devising the Cloak of Invisibility in JavaScript
Steganography. The art of hiding something right under your nose. For as long as humans have been alive, we’ve been trying to hide things — whether it’s our last slice of pizza or the location of a buried treasure. Do you remember the cool invisible lemon...
Unlock Your Mac with Apple Watch
I convinced myself six months ago that I needed to give the Apple Watch a try. While I wear it every day and enjoy a few features, I've felt a bit let down by the experience. I do, however, believe that the Apple Watch...
Validate CSP from Command Line
The content security policy spec has been an amazing front-end security tool to help prevent XSS and other types of attacks. I'd go as far to say that every site should implement as specific CSP as possible. If you aren't familiar with CSPs...
Protect Sensitive Data in Docker
Developing authentication code for open source repositories can be a scary task; you're scared that hackers can find loopholes in your code but you're also petrified of accidentally committing sensitive credentials to a public repository. I've seen unintentional credential commits happen and the panic that ensues throughout an organization will...
SEO (5)
The Parallax SEO Conundrum
This post touches on the parallax SEO issue and offers solutions to fix it. If you're following the trends in web design at least from time to time, you probably know that parallax scrolling is one of the cool things that are all the rage as...
Python Decorator for Preventing Robot Indexing
Much of my time at Mozilla has been spent catching up to the rest of the MDN team with respect to python. The new MDN backend, codenamed Kuma, is entirely Django-based and has been a joy to learn. My latest python adventures have been focused on...
Prevent Robot Indexing with Response Headers
Every so often you have parts of your website that would be better off not indexed by search engines. API calls, search result pages, PDF documents -- all examples of responses which may not have value outside of the current user. No we all know we...
Change Category Slug within WordPress
When I first started this blog, I set the category "slug" to "sugar." Why sugar? Because a lot of a good thing is candy; thus, a bunch of MooTools tutorials is as sweet as sugar. While I get a giggle out of calling my categories sugar...
Fixing mod_rewrite and .htaccess on GoDaddy Hosting
I recently launched a new website on GoDaddy shared hosting. The website required mod_rewrite for SEO-friendly URLs. GoDaddy provides mod_rewrite but every time I tried to hit a two-deep URL, I would get a 404 error. Here's what I had: The fix to this...
Series (0)
Crafting a 3D React Carousel
There is something in me that is amazed but beautiful 3D interfaces. And it doesn't matter whether they're functional like Gyroscope features menu, technology demonstrators like the amazing periodic table demo from famous or they're artistic representation pushing the limits of...
Create a CSS Flipping Animation
CSS animations are a lot of fun; the beauty of them is that through many simple properties, you can create anything from an elegant fade in to a WTF-Pixar-would-be-proud effect. One CSS effect somewhere in between is the CSS flip effect, whereby there's...
How Nesting 3D Transformed Elements Works
CSS animations are incredibly popular right now, and I don't just mean animating a simple color or dimension property, I mean 3D transformations as well; CSS flips and rotating cubes being prime examples. We can find simple CSS snippets and examples for transforms, but...
Create a CSS Cube
CSS cubes really showcase what CSS has become over the years, evolving from simple color and dimension directives to a language capable of creating deep, creative visuals. Add animation and you've got something really neat. Unfortunately each CSS cube tutorial I've read is a bit...
Create a 3D Animating Sidebar
Mozilla's Christian Heilmann is an evangelist that knows how to walk the walk as well as talk the talk. You'll often see him creating sweet demos on his blog or the awesome Mozilla Hacks blog. One of my favorite pieces...
Shell (218)
How to Download a YouTube Video or Channel
The ability to download media on the internet almost feels like a lost art. When I was in my teens, piracy of mp3s, movies, and just about everything else via torrents and apps like Kazaa, LimeWire, Napster, etc. was in full swing. These days...
How to Add a Header to a curl Request
curl
is one of those great utilities that's been around seemingly forever and has endless use cases. These days I find myself usingcurl
to batch download files and test APIs. Sometimes my testing leads me to using different HTTP headers...How to Set Date Time from Mac Command Line
Working on a web extension that ships to an app store and isn't immediately modifiable, like a website, can be difficult. Since you cannot immediately deploy updates, you sometimes need to bake in hardcoded date-based logic. Testing future dates can be difficult if you...
How to Retrieve WiFi Password on Windows
Remembering the WiFi password when on a guest network is never easy. Even worse is when it's no longer posted and someone else is asking you for it. Luckily there's a built in Windows command to recover the password of a given WiFi network.The...
Restart Mac From Command Line
Restarting and shutting down a computer remotely is a frequent task for remote system administrators. As someone that writes many shell scripts, I also find myself automating system restarts. Let's look at a few ways to restart Mac systems from command line!Restart a Local MacTo...
Sponsored (196)
Get Started in AI and NFTs with the Limewire API
AI media creation has expanded to incredible video art and a host of other important improvements, and LimeWire is leading the way in creating an awesome interface for the average user to become an AI artist. Limewire has just released its...
Welcome to the New LimeWire: AI Media Generation
LimeWire was a staple of my youth. LimeWire was software that allowed users to share any type of file during the revolutionary days of file sharing. Fast forward to today and LimeWire is back, again as revolutionary software, but this time in the...
Unveiling 15+ Essential Tools & Resources for Web Designers and Agencies in 2023
You’ve visited countless websites, and now you’re designing your own. Stop and think for a minute about what you’ve liked and didn’t like about some of those you visited. Was it the front page, the layout in general, or the functionalities that either met with your...
ChatGPT via WYSIWYG
Artificial intelligence applications have hit like a massive wave over this past year, with ChatGPT being the most prominent. ChatGPT can take any written command and suggest content to match. What better than having the power of AI content creation than doing so within your own...
10 Great Multipurpose WordPress Themes
Multipurpose themes are flexible WordPress templates that can be used to create virtually any kind of website. They are often best-sellers, and because they are so popular there are a lot of them to choose from. Too many in fact unless you have time to spare...
Streaming (1)
How to Use OBS as a Webcam
As I learn more about streaming video games on Twitch and continue broadcasting the Script & Style Show, I've become skilled in the art of Open Broadcasting Software (OBS). OBS is a bit like PhotoShop for video, wherein you can layer effects like...
Theory / Ideas (86)
I’m So Old: Web Edition
Time can be a funny thing. I still remember discovering HTML, CSS, and JavaScript coding. I still remember my first college programming course. I still remember my first day at my first coding job, then my first day at my second coding job, and then my...
Thoughts on Streaming Services: 2024 Edition
Streaming services have revolutionized content delivery, sending linear media companies into a panic as they watch traditional cable services decay. "Cutting the cord" is a common practice these days, but the streaming landscape isn't perfect. We're a decade into streaming so I wanted to share my...
Confessions of a Web Developer XX
It's been quite a while since I've gotten a few things off of my chest and since I'm always full of peeves and annoyances I thought it was time to unleash:One day you're getting recruited by another crypto wallet vendor, the next their users are getting...
Interview with an Intiface Haptics Engineer
I was recently re-reading my Interview with a PornHub Web Developer and one bit I started thinking about was the VR question and the idea of making users not just see but feel` something. The haptic feedback of VR games is what really sets...
Confessions of a Web Developer XIX
It's been a while since I've gotten a few things off of my chest and since I'm always full of peeves and annoyances I thought it was time to unleash:Due to the immensely negative response to any tweet about crypto from my blog account, I created...
Uncategorized (1)
With Elementor, You can Design Every Part of a WordPress Website Without Writing a Line of Code
Have you ever tried to envision what the definitive WordPress website builder would look like? It might bear some resemblance to products currently on the market except it would have much more to offer. That was exactly the Elementor team's thinking when they set...
Usability / Accessibility (40)
JavaScript Copy to Clipboard
"Copy to clipboard" functionality is something we all use dozens of times daily but the client side API around it has always been lacking; some older APIs and browser implementations required a scary "are you sure?"-style dialog before the content would be copied to clipboard -- not great for...
Accessibility Tip: Empty alt Attributes
As mostly a self-taught developer, my impressions of best practices were self-formed, and over the years I've realized many of those impressions were incorrect or the standards associated with them had quickly changed. One small but important practice is the usage of
alt
attributes onimg
tags, and I had thought...JavaScript Redirects and window.open
One of the sweet parts in the simplified HTML5 spec was allowing
A
elements to wrapDIV
s and other block level elements. For too long we added JavaScript listeners andwindow.location
redirects when a wrappingA
would have probably sufficed. But there are also times when the wrappingA
wouldn't work...Accessibility and alt Attributes
The
alt
attribute is important for a number of reasons: it describes an image for screen readers used by those without sight or poor sight, it describes the image to bots, and it provides an indicator of what should have loaded if the image fails to...Create Keyboard Shortcuts with Mousetrap
Some of the finest parts of web apps are hidden in the little things. These "small details" can often add up to big, big gains. One of those small gains can be found in keyboard shortcuts. Awesome web apps like Gmail and GitHub use loads of...
Viral (1)
The Truth About Code Review
Code review is an essential practice for organizations that cater to large amounts of traffic and want to ensure maintainability throughout a team of developers. Of course that doesn't mean that every developer on the team thinks and codes the same way, so code review (in...
Virtual Reality (7)
Detect XR Support with JavaScript
A few years ago I wrote an article about how to detect VR support with JavaScript. Since that time, a whole lot has changed. "Augmented reality" became a thing and terminology has moved to "XR", instead of VR or AR. As such...
Detect WebVR Support with JavaScript
It's been two years since I was heavily involved with WebVR at Mozilla but, despite not contributing every day, I can see VR making leaps and bounds, from Firefox making an increased effort to Chrome pushing VR and Oculus and HTC (Vive) improving their offerings. Native...
One Week of Vive
If you've been following me on Twitter, you'll notice that I've very recently taken to virtual reality. Headsets like Oculus Rift, Samsung GearVR, Playstation's VR effort, and HTC Vive have just hit the consumer market and so now is a good time for developers to start experiencing...
Get Query String Parameters with JavaScript
Query string parameters have been incredibly useful on the server side since the internet took liftoff, but it wasn't until AJAX-driven web apps became popular that we relied too much on them on the client side. Not only do we grab parameter values but we also modify...
Create a 3D Panorama Image with A-Frame
In the five years I've been at Mozilla I've seen some awesome projects. Some of them very popular, some of them very niche, but none of them has inspired me the way the MozVR team's work with WebVR and A-Frame project have. A-Frame is a community project...
VR (3)
Detect XR Support with JavaScript
A few years ago I wrote an article about how to detect VR support with JavaScript. Since that time, a whole lot has changed. "Augmented reality" became a thing and terminology has moved to "XR", instead of VR or AR. As such...
Interview with an Intiface Haptics Engineer
I was recently re-reading my Interview with a PornHub Web Developer and one bit I started thinking about was the VR question and the idea of making users not just see but feel` something. The haptic feedback of VR games is what really sets...
Get Query String Parameters with JavaScript
Query string parameters have been incredibly useful on the server side since the internet took liftoff, but it wasn't until AJAX-driven web apps became popular that we relied too much on them on the client side. Not only do we grab parameter values but we also modify...
Vue.js (1)
Creating a Cloudinary Vue Component
While React.js has taken much of the attention during the latest wave of JavaScript frameworks, Vue.js has quietly become a favorite of many developers that find React overly complex and don't want to deal with the webpack tooling. With Vue you can simply include the Vue...
WordPress (40)
How to Change the WordPress Admin Login Logo
There are numerous content management systems that thrive these days but none are as prolific as WordPress. Every client wants the ability to change their website at a moment's notice and they want to do it themselves, and again, WordPress is the best fit for that.
How to Change the WordPress Media Upload Directory
One thing I've always missed about the "old" way of web development was the simplicity of FTP. No deploy scripts, no fuss: simple drag and drop of files and the files are there. I've used FTP for assets on this blog for over a decade but...
Add META Tags to WordPress Head
The reason that WordPress is so developer-friendly is their awesome hook system. Depending on a post category (or seemingly anything else), you can modify the contents of the page, the theme templates, and everything else. WordPress is amazing. One recent use case I had was wanting to modify...
WordPress Publish Post Hook
One of the best parts of WordPress is its hook/action system; this special hook system is WordPress' way of assigning callbacks when certain events occur. One event that there seems to be a lot of confusion over is which hook to use to detect when...
Using DOMDocument to Modify HTML with PHP
One of the first things you learn when wanting to implement a service worker on a website is that the site requires SSL (an
https
address). Ever since I saw the blinding speed service workers can provide a website, I've been obsessed with readying my site for...
_Functional (3)
How Plugins Enhance The WYSIWYG Editing Experience
Image by JK_Studio from PixabayWYSIWYG editors are one of the core components of any content management system (CMS). A well-coded, feature-filled WYSIWYG HTML editor can distinguish between a CMS users love and one they can't stand. While all WYSIWYG editors have a set of...
Easy Asset Access with the Cloudinary Media Library Browser Extension
Readers of my blog will know that I've been banging the Cloudinary drum for years. Their awesome media capabilities allow users to optimally deliver images, video, and audio in any format and to any device. Performance, customization, flexibility, optimized delivery... Cloudinary makes media better for...
Amazing Text Editing Experiences with UltraEdit
There's a common saying that adults spend more time with coworkers than family; for us software engineers, we spend more time with our text editor than our families. And why shouldn't we? They're our main tool to do a variety of things, and as these...
Gather Feedback Using the Amazing UserWell
Most websites and mobile apps collect all sorts of data to try to gain insights into what users are doing, not doing, and to gain insight into what users may want. Those metrics are useful but there's a more valuable way to get information: direct...
Land Your Dream Job with Vettery
Whether you're an experienced pro or someone new to the industry, finding a great job can be a scary, stressful process. Engineers and designers get inundated with Hacker Rank tests, portfolio requests, and a variety of other queries. Vettery improves the experience for free...
_HideInContentAds (33)
How Plugins Enhance The WYSIWYG Editing Experience
Image by JK_Studio from PixabayWYSIWYG editors are one of the core components of any content management system (CMS). A well-coded, feature-filled WYSIWYG HTML editor can distinguish between a CMS users love and one they can't stand. While all WYSIWYG editors have a set of...
Easy Asset Access with the Cloudinary Media Library Browser Extension
Readers of my blog will know that I've been banging the Cloudinary drum for years. Their awesome media capabilities allow users to optimally deliver images, video, and audio in any format and to any device. Performance, customization, flexibility, optimized delivery... Cloudinary makes media better for...
Amazing Text Editing Experiences with UltraEdit
There's a common saying that adults spend more time with coworkers than family; for us software engineers, we spend more time with our text editor than our families. And why shouldn't we? They're our main tool to do a variety of things, and as these...
Gather Feedback Using the Amazing UserWell
Most websites and mobile apps collect all sorts of data to try to gain insights into what users are doing, not doing, and to gain insight into what users may want. Those metrics are useful but there's a more valuable way to get information: direct...
Land Your Dream Job with Vettery
Whether you're an experienced pro or someone new to the industry, finding a great job can be a scary, stressful process. Engineers and designers get inundated with Hacker Rank tests, portfolio requests, and a variety of other queries. Vettery improves the experience for free...