Topics
AI
Announcements
- Interviewed by Snipcart
- The Definitive Guide to Craft Validation for Plugin Developers (the book)
- Introducing Glossary for Craft
- Introducing Craft Cookbook
- Git push your universe
- Testee 2.2
- Introducing Template OmniLogger
- Hull Digital Live 2012
- Introducing add-on RSS feeds
- SL Developer Info for ExpressionEngine 2
- Interviewed at Meta Q
- Introducing SmartDown 1.2
- So long to ExpressionEngine 1
- Introducing Usher
- Introducing OmniLog: System-wide message logging for ExpressionEngine add-on developers
- Speaking at EEUK 2011
- Introducing Crumbly: Custom ExpressionEngine breadcrumbs made easy
- Introducing DropDate for ExpressionEngine 2
- Introducing Testee: Unit testing for ExpressionEngine add-ons
- Introducing Campaigner 4
- Introducing Campaigner for ExpressionEngine 2
- Announcing MailChimp Subscribe for ExpressionEngine 2
- Speaking at EECI 2010
- Hull Digital Live 2010
- Hull Digital Question Time
- Introducing Campaigner
- Introducing SmartDown: Markdown Extra and SmartyPants for ExpressionEngine
- It speaks!
- Introducing DropDate: Better date selection in ExpressionEngine
- Introducing BucketList 1.1
- New ExpressionEngine module: SL Developer Info
- Introducing Speakeasy, the ExpressionEngine anti-spambot
- Iconic Interiors shortlisted for Top 10 Sites of 2008
- Labgruppen.com bags an “Outstanding Achievement” Interactive Media Award
- In the club
- Sitting pretty at the Interactive Media Awards
Bash
CMS
Craft CMS
- Start with the API: A better approach to developing Craft plugins
- How to handle Composer dependency conflicts in your Craft plugins
- The hidden perils of Craft plugin service classes
- How and when to use PSR-4 autoloading in your Craft plugins
- The Definitive Guide to Craft Validation for Plugin Developers (the book)
- Introducing Glossary for Craft
- Craft quick tip: Add CTRL-S support to your plugin forms
- The definitive guide to validation in Craft, part 5: Custom validators
- The definitive guide to validation in Craft, part 4: Hidden validator settings
- The definitive guide to validation in Craft, part 3: Attribute rules
- The definitive guide to validation in Craft, part 2: AttributeTypes
- The definitive guide to validation in Craft, part 1: Foundations
- A guide for Craft Cookbook recipe authors
- Clean up your Craft templates with site-specific plugins
- Introducing Craft Cookbook
- Craft your content with Markdown and Matrix
- Introducing SmartDown for Craft
CSS
Django
Elixir
ExpressionEngine
- Git push your universe
- EllisLab bemoans paltry 900% ROI
- A brief introduction to ExpressionEngine ACTions
- Updates and oddments: August 2012
- Testee 2.2
- Introducing Template OmniLogger
- EE gotchas: Nested “no results” tags (redux)
- The ExpressionEngine Friday roundup
- EE’s bugs are not my problem (or yours)
- EE gotchas: Nested “no results” tags
- Introducing add-on RSS feeds
- The missing ExpressionEngine multi-language lingua franca
- How to implement a custom ExpressionEngine extension hook
- The add-on developer’s guide to abdicating responsibility
- SL Developer Info for ExpressionEngine 2
- Introducing SmartDown 1.2
- So long to ExpressionEngine 1
- Updates and oddments
- Introducing Usher
- Integrating ExpressionEngine with third-party APIs (part 4 of 4)
- Integrating ExpressionEngine with third-party APIs (part 3 of 4)
- Introducing OmniLog: System-wide message logging for ExpressionEngine add-on developers
- Integrating ExpressionEngine with third-party APIs (part 2 of 4)
- Speaking at EEUK 2011
- Integrating ExpressionEngine with third-party APIs (part 1 of 4)
- Introducing Crumbly: Custom ExpressionEngine breadcrumbs made easy
- Introducing DropDate for ExpressionEngine 2
- ExpressionEngine add-on development: An update
- Introducing Testee: Unit testing for ExpressionEngine add-ons
- Introducing Campaigner 4
- Introducing Campaigner for ExpressionEngine 2
- ExpressionEngine add-on development: Designing the user interface
- Announcing MailChimp Subscribe for ExpressionEngine 2
- ExpressionEngine add-on development: User interface design principles
- ExpressionEngine add-on development: Introducing Tweedee
- ExpressionEngine add-on development: Survey results
- Speaking at EECI 2010
- ExpressionEngine add-on development
- ExpressionEngine 2 add-on plans
- Introducing Campaigner
- Introducing SmartDown: Markdown Extra and SmartyPants for ExpressionEngine
- Introducing DropDate: Better date selection in ExpressionEngine
- Introducing BucketList 1.1
- New ExpressionEngine module: SL Developer Info
- The ExpressionEngine 2.0 add-on dilemma
- Introducing Speakeasy, the ExpressionEngine anti-spambot
- Using Git to manage an ExpressionEngine website (part 4 of 4)
- Using Git to manage an ExpressionEngine website (part 3 of 4)
- Using Git to manage an ExpressionEngine website (part 2 of 4)
- Using Git to manage an ExpressionEngine website (part 1 of 4)
- In the club
Git
Happy Stack
JavaScript
- Simplify imports with path mapping
- Check a date with Chai
- Using TypeScript with Gatsby
- Nested optional chaining in JavaScript
- Custom Decap CMS previews in Gatsby
- Rounding errors in JSON Schema validation
- “Module not found” error with Gatsby, Netlify CMS, and PostCSS
- Chai assert error
- Selectively disable ESLint
- The right way to compare arrays with Chai
- Numeric environment variables and TypeScript
- Compute the difference between two JavaScript arrays
- JavaScript logical operators
- Avoid Array.prototype.push
- Log nested objects in Node
- Generate an array of random data
- Split a JavaScript array into chunks
- Generate a pseudo-random boolean
- Modelling API requests with Statecharts
- Keep JavaScript form validation simple
Laravel
- Using Eloquent subqueries to randomise grouped results
- Building Happy Stack: naming things
- Building Happy Stack: notifications
- Authorising Laravel Nova actions
- Conditional validation rules in Laravel
- How to change the URL slug of a Laravel Nova resource
- Understanding Laravel’s Macroable trait
- Laravel route collection binding
- A nicer way of overriding Eloquent global scopes
- Laravel’s mysteriously macroable paginators
- Eager loading Eloquent properties
- Cleaner code with Eloquent events
- Eloquent attributes and database defaults
- How to implement a custom Laravel zip code validation rule
- How to build a fluent Laravel repository API
- Laravel quick tip: Find by username or fail
MongoDB
Node.js
Opinion
- Make it right
- The thing that brought me joy
- Move slowly and make things
- The complexity halo
- Design principles
- Gender in tech, and the right not to be offended
- EllisLab bemoans paltry 900% ROI
- EE’s bugs are not my problem (or yours)
- The missing ExpressionEngine multi-language lingua franca
- Ready to serve
- The myth of company morality
- Got dissatisfaction
- The ExpressionEngine 2.0 add-on dilemma
- The Lack of Enterprise Show
- Atebits' common-sense approach to licensing
- Kicking the business book habit
- How to write a quotation request that saves you money
- A guide to choosing the best DOCTYPE for your website
- If you can't fix it, it's not a problem
- Show them what you're made of
- The right way to buy on price during a recession
- Show me the money
- In praise of the Email Standards Project
- The agile developer's guide to building a cathedral
- Working for the greater good
- Stop Planning, Start Doing
- HTML vs. plain text emails: Get your priorities straight
- Marketing the Mormons
- Not making the most of now
- Never forget the big picture
- The stupidity of the opt-out checkbox
- Delivering a reliable service through business processes
- The USP of me
- The worst productivity killer