Flash-Free Clipboard for the Web

JavaScript copy-to-clipboard support is moving into browsers through document.execCommand, reducing the need for Flash-based fallback buttons.

AWS Public IP Address Ranges Now Available in JSON Form

AWS public IP ranges are available as authoritative JSON at https://ip-ranges.amazonaws.com/ip-ranges.json and change several times per week, so polling is needed.

whenever: Preview the crontab

Preview the cron syntax that whenever would install without changing the local crontab.

passenger problems with upgraded rails-app

Passenger may misdetect an upgraded Rails app as Rails 1/2 and fail to spawn it; a full Apache restart can load the new application settings correctly.

postgresql create extension without giving the application superuser rights

PostgreSQL extensions do not require application users to be superusers; create them once with a superuser account such as postgres.

include_tags with the asset pipeline

Rails asset paths depend on a leading slash when using javascript_include_tag or stylesheet_link_tag; files in /assets also need to be added to the precompile list.

List RubyGems binary version for all installed Ruby versions

Different Ruby installations can use different RubyGems versions, making it hard to compare toolchains. rbenv and RVM can print the active gem version for each installed Ruby.

ActiveRecord: scoped `validates_uniqueness_of` allows one null value per scope

Scoped validates_uniqueness_of can let one nil value through per scope, creating unexpected records when presence is not enforced.

How to deal with 'parent id missing' error in nested forms

Nested forms can fail with a “parent id missing” validation when parent and child records are created together; using form models or validating parent instead of parent_id avoids it.

How to silence thin boot messages

Thin prints startup messages that clutter parallel test output. Logging can be silenced with Thin::Logging.silent = true or redirected to a custom logger.

Long cards: Directly jump from a paragraph to the same paragraph in the editor

EDIT links on card paragraphs open the editor at the same paragraph and place the caret there, making small changes in long cards faster.

How to split config/routes.rb in Rails 4

Splitting Rails route definitions across multiple files can improve organization in larger apps. Rails::Engine and config.paths['config/routes.rb'] can load route files from config/routes/.

marco-polo improves your Rails console prompt

Displays the app name and Rails environment in the console prompt, reducing the risk of running commands in production by mistake.

Get the root class of an ActiveRecord STI hierarchy

base_class returns the top ActiveRecord STI class by walking up inheritance until an abstract class or ActiveRecord::Base is reached.

How to enable SSL in development with Passenger standalone

Local Rails development can serve both HTTP and HTTPS with Passenger standalone by enabling SSL and using a self-signed certificate.

Getting Sidekiq error "delay is defined by Active Record"

Active Record can conflict with Sidekiq's delay method when a model has a delay attribute. Sidekiq.remove_delay! disables it; Sidekiq.hook_rails! keeps Sidekiq methods prefixed.

Bootswatch: Paper

Free Bootstrap theme with a Material Design look for Rails apps. Sass and Less files simplify integration, while the CSS-only approach keeps the theme easy to replace.

List of Helpful RubyMine Shortcuts

RubyMine keyboard shortcuts speed navigation, multi-caret editing, refactoring, and file handling for everyday Ruby development tasks.

PostgreSQL: Be careful when creating records with specific ids

Manually assigning primary keys in PostgreSQL can leave sequences unchanged, causing duplicate-key errors on the next insert. Resetting the sequence prevents conflicts.

Non-blocking Asynchronous JSON.parse Using The Fetch API

Offloading expensive JSON.parse work from the main thread keeps fetch-based apps responsive and avoids blocking during large response processing.

Openstack: nova resize

Changing an OpenStack VM’s RAM, disk, or vCPU count requires nova resize and a matching flavor; the resize causes downtime and can take a long time.

Jasmine: Testing complex types for equality

toBe only checks reference identity; toEqual handles arrays, objects, dates, regular expressions, NaN, exceptions, and custom equality testers.

Mocking time in Jasmine specs

Control time in Jasmine tests with the built-in jasmine.clock() to fake timers and new Date() without adding SinonJS.

Pierce through Javascript closures and access private symbols

Accessing state hidden in JavaScript closures can simplify tests and let Jasmine spies mock private methods or inspect local variables.