RulersGuides.js demo

Adds Photoshop-like rulers and guides to a web page with a JavaScript library; also available as a bookmarklet for quick browser use.

TypeScript: Get in Shape with Structural Typing

TypeScript uses structural typing and strict checks for fresh object literals, union types, type assertions, satisfies, and narrowing to prevent runtime errors.

Understanding the Selenium error "Modal Dialog Present" (aka Selenium::WebDriver::Error::UnhandledAlertError)

Intermittent Cucumber failures can come from a leftover browser alert blocking Selenium commands after an unfinished AJAX request.

thoughtbot/capybara-webkit

Capybara driver for browser testing with QtWebKit when JavaScript support is needed.

HTTP 302 redirects for PATCH or DELETE will not redirect with GET

Browsers may keep PATCH and DELETE on 302 redirects instead of switching to GET, breaking AJAX flows. Use 303 See Other or POST method override to force a GET follow-up.

How to avoid multiple versions of a package in yarn

Duplicate package versions in Yarn can break shared globals like window.jQuery, leaving plugins such as datepicker unavailable. resolutions can force one version across dependencies.

Apprise - The attractive alert alternative for jQuery

A lightweight jQuery alert and dialog replacement with full control over styling, content, position, and behavior, without a full UI framework.

Hoptoad and Javascript, Sitting in a Tree, S-E-N-D-I-N-G - GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS

We didn’t want to leave front-end developers in the dark when their Javascript throws errors, so we’ve added a Hoptoad notifier for Javascript!

Delay your Jasmine tests until the document is ready

Jasmine specs can run too early when the DOM is not ready, causing setup to fail. $(done) inside beforeAll waits for document readiness before the suite starts.

Rails: Fixing ETags that never match

Rails default ETags often never repeat because rotating CSRF tokens and CSP nonces change response bytes, blocking cache hits and 304 responses.

Jasmine: Mocking ESM imports

Imported ESM functions are hard to spy on in Jasmine; several workarounds keep call counts testable, including wrapper objects, dependency injection, and test runners with module mocking.

zClip :: jQuery ZeroClipboard

Lightweight jQuery clipboard-copy plugin built on Zero Clipboard, using an invisible Flash movie compatible with Flash Player 10 and below.

wmd - The Wysiwym Markdown Editor

Lightweight browser text editor for comments, forum posts, and basic CMS text with live preview and minimal setup.

A restrictive (but still practicable) CSP for Rails projects

A strict Content Security Policy for Rails limits scripts to nonce-approved sources while keeping styles, images, forms, and fonts workable.

SASS: Adding, removing and converting units

Sass unit arithmetic makes it easy to attach, strip, and convert measurement units when working with CSS values and timing data.

How to make changes to a Ruby gem (as a Rails developer)

Ruby gems need manual file loading, multi-version support, and their own release workflow, unlike Rails apps. Safe changes depend on understanding structure, tests, versioning, and packaging.

Capybara: Testing file downloads

File downloads are awkward to verify with Selenium because browsers may prompt, auto-save, or render binaries instead of HTML. Alternative approaches use request specs, Rack::Test, or the browser download folder.

Google Analytics: Changing the tracked URL path

Google Analytics can record a custom path instead of the current URL, useful for hidden tokens, grouped pages, or interactions without a request.

Upgrading a Rails app to Cucumber 3

Rails apps upgrading to Cucumber 3 often need gem updates, new tag syntax, and step-definition fixes to avoid parser and argument-mismatch errors.

Toggling a maintenance page with Capistrano

Capistrano can switch an app into maintenance mode by publishing a static page on each web server, with customizable message, timing, and template.

Lightning Talk: Coverage based Test Case Prioritization in Ruby on Rails

CLI test case prioritization for Ruby on Rails using coverage data can surface failing specs earlier and reduce regression testing time.

Implementing upload progress and remove button with ActiveStorage DirectUpload

In-place file uploads with ActiveStorage DirectUpload can show progress and support removing a chosen file before form submission.

Upgrading Rails 2 from 2.3.8 through 2.3.18 to Rails LTS

Rails 2.3.x upgrades fix security vulnerabilities and API changes across patch levels, with extra CSRF, XSS, and JSON gem updates needed on some releases.