RSSAmplifier

Blog

Ben Edmunds

Ben Edmunds Blog

benedmunds.comRSS feed ↗38 posts

Latest posts

AI Skills Are the New Platform Interface

An evolving idea I’m working through is that developer portals like Backstage and Port are becoming obsolete. They solved a real problem. Engineers needed one place to find services, templates, and docs. But a portal is just a website. It’s passive. It shows you things and gives you forms. The developer still has to leave their editor, open a browser, find the right page, and click through a…

The Platform Hierarchy of Needs

Every platform team I’ve talked to wants to build a portal. A developer portal with a service catalog, self-service provisioning, and change management workflows. It’s the slick stuff. It’s also the last thing you should build. Platforms evolve in layers. Each layer builds on the one below it. Skip a layer and you end up with a portal that provisions services into infrastructure nobody can…

Platform Engineering Isn't a Portal

Every company eventually builds an internal developer platform. The mistake most teams make is building the wrong one for their size. At a 50-person company you don’t need a portal. You don’t need a service catalog. You need to stop making every team solve the same damn problems over and over again. Rate limiting, auth, deployment pipelines. These things should be solved once and pushed into the…

Testing Microservices Without Cloning the World

Shared staging environments are a lie we all agree to believe. Developers need to deploy broken code to test it. Other developers need that same environment to not be broken. You can’t have both, and yet every company tries. This is one of those problems that seems simple until you actually have microservices. With a monolith, you spin up a review app and you’re done. With dozens of services…

Rearchitecting CI at SeatGeek

Our CI runners were slowly ruining everyone’s day. Shared, stateful hosts where one team’s build could poison the environment for the next team. Classic noisy neighbor problem, except at the infrastructure layer where it’s way harder to figure out what went wrong. We had about 80 hosts on weekdays, 10 on weekends. Fixed scaling. Peak hours meant developers sat in queue. Off-peak meant machines sat…

Onboarding New Developers to a Legacy Codebase

I’ve ran into an issue recently that hopefully can help you. I’ve been freelancing for a non-profit that has several products that have been in development for years. One of these codebases in particular is pretty huge and verbose, with many different developers touching it over several years. The biggest issue we’ve all faced with onboarding to this project has been converting what the business…

Evaluating Contractors

A question was recently posed to a CTO mailing list I’m a part of as to evaluating contractors. The poster was looking at frontend web development contractors and trying to determine the best way to evaluate them. In case you find yourself in a similar situation, here is my (slightly edited) response: OP, I’ve done several types of evaluations. I’ve found that the two below seem to work best for…

CodeIgniter 4 Overview - It's really not dead!

I’ve been getting excited about and have started talking about CodeIgniter 4 a lot more recently. Several people have asked “that isn’t dead yet”, “why”, or similar questions so I’m going to give a high level overview of the what and why of CodeIgniter 4. I’ll be speaking just of my personal opinions and will do my best not to misrepresent my fellow CodeIgniter Council members who have by far done…

CodeIgniter Lives On

I’m sure most of you know that at one time I was heavily involved in the CodeIgniter framework but have not been in quite some time. CodeIgniter stagnated and other frameworks moved in to take it’s place. Namely Slim and Laravel. EllisLab, the company behind CodeIgniter, had lost interest in maintaining the project a long time before they finally annouced that they were looking for a new owner for…

Fixing Homebrew PHP / Apache after Yosemite

Today I upgraded to Yosemite. Played with all the new cool shit. Then tried to get some work done, broken. Everything. Broken. To explain a bit, Apache wasn’t loading so http://localhost wasn’t loading, let’s walk through the steps I took to fix this in case you’re seeing the same issue. PHP First we’ll need to reinstall PHP. Start by running brew update and brew doctor, fix what they recommend: $…

Book Review - Integrating Frontend Components with Web Applications

I recently had the pleasure of receiving an early copy of Integrating Frontend Components with Web Applications by Maks Surguy. What’s it cover This book has excellent content explained in a thorough, yet really engaging manner. It covers a wide array of common frontend components including Integrating Twitter Bootstrap Tagging Notifications and Alerts Spinners Auto-Completing Search AJAX Login…

Advanced CSRF Usage in PHP

This expands on my post, Securing against Cross Site Request Forgery (CSRF) exploits in PHP . In the previous post we discussed the basics of how to protect against CSRF exploits. I recommend reading that if you haven’t yet. Now let’s cover a more advanced use case. Multiple CSRF Tokens The previous solution only covered basic, one time use protection but what if you need to allow users to use…

Securing against Cross Site Request Forgery (CSRF) exploits in PHP

Cross Site Request Forgery (CSRF) is basically the opposite of an XSS exploit. Where XSS takes advantage of the user by means of a trusted web site, CSRF takes advantage of the web site by means of a trusted user. An example of this is an attacker sending out fake emails with a link to delete a blog post, an email, whatever. The target user then clicks this and is taken to a delete page. Since the…

Building Secure PHP Apps - Early Release

Hey, sorry for taking like six months since my last blog post. I missed you, promise. BTW, have I mentioned how awesome you are? I’m breaking my silence / severe writing laziness to annouce that I’m opening my ebook, Building Secure PHP Apps, for early access. It’s for sale on Leanpub right now. Currently at about 40% complete and writing around one chapter every one to two weeks so it will be…

My New Motto

The product is the current product, the culture is the next hundred products. Phil Libin

Life Hack - Pomodoro

I’m always up for a good life hack to improve my productivity so I wanted to share the most recent one I’ve discovered. The Pomodora technique is a method for time managment and focus. Most of you have probably heard of it. The gist of it is that you work hard and focus for 25 minutes and then reward yourself with a 5 minute break. At first this might seem like a lot of wasted time with all these…

Fix PHPUnit using Zend Server CE on OSX

Just a simple explanation for anyone else running into this issue getting PHPUnit working with Zend Server CE on OSX Mountain Lion. The error: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/zend/lib/php_extensions/mcrypt.so' - dlopen(/usr/local/zend/lib/php_extensions/mcrypt.so, 9): Library not loaded: /usr/lib/libltdl.3.dylib Referenced from:…

Appcelerator JS SDK for Node.js

Announcing the release of the Appcelerator ACS JS SDK module for Node.js. Made by yours truly as the first open source release by DblTap Labs . Check out the source on GitHub or use it in a project by installing it with npm: $ npm install appcelerator

Ion Auth now supports MongoDB

Thanks to the awesome work done by sepehr , Ion Auth now supports MongoDB. Go check it out on Github and let me know any feedback you have.

Boxcar.io API library for CodeIgniter and bundle for Laravel

Announcing the release of the Boxcar.io Provider API PHP SDK for CodeIgniter and Laravel. This is a simple port of the standard PHP SDK. Check them out here: CodeIgniter Library Laravel Bundle

Last.FM for PyroCMS Released by AppStucco

Annoucing the release of the Last.FM module and widget for PyroCMS by AppStucco . Go read about it on the AppStucco blog, watch the screencast .

Composer bundle for Laravel

Announcing the release of my Composer bundle for Laravel . This bundle will autoload composer packages in your Laravel application. Composer packages are a unified way to distribute PHP packages that work with any framework that supports PSR-0 namespacing. You shouldn’t have to rewrite all of your favorite PHP libraries for each framework you use, that’s where Composer packages come to the rescue.…

A Magical CodeIgniter Super Object

Recently Militis reminded me of a “trick” to automatically load items from the CodeIgniter super-object. Of course, you should determine for yourself if this functionality is needed and is worth the performance loss. We’re now using this in Ion Auth if you want to see it in action. Just add the following method to your library class public function __get($var) { return get_instance()->$var; } And…

AppStucco Launch

Last night and today have been extremely exciting as Dan Lopez and I have offically launched AppStucco ! We are hitting the ground running with an open source LDAP module for PyroCMS and you can expect to see a few more PyroCMS modules popping up in the next few weeks. Check us out at AppStucco.com or read more about the launch on CMS Critic .

Appcelerator PHP SDK for CodeIgniter, Laravel, and vanilla PHP

Announcing the release of the Appcelerator ACS PHP SDK for CodeIgniter, Laravel, and plain ol’ PHP. Made in collaboration with Shealan Foreshaw and sponsored by Swipe & Tap . Check it out here: CodeIgniter Library Laravel Bundle PHP SDK

Writing a Nagios plugin with Javascript using Node.js

This is pretty much an exact copy of my Writing a Nagios plugin with PHP post modified for Javascript. So, here is a quick example of writing a Javascript plugin for Nagios using Node.js. Create your JS file named “check_js_test.js” with the following contents process.stdout.write('This check passed'); process.exit(0); This will output the “This check passed” string to Nagio with a status code of…

Writing a Nagios plugin with PHP

For those of you who don’t know, Nagios is a simple and powerful monitioring tool. Nagios can call external commands at set intervals to check for errors and then escalate or alert on the errors. Here is a quick example of writing a PHP plugin for Nagios. Create your PHP file named “check_php_test.php” with the following contents \<?php fwrite(STDOUT, 'This check passed'); exit(0); This will…

Simple Node.js Express MVR Template

In this post we’ll walk through how to setup a simple MVR Node.js project using Express, Mongoose (MongoDB), Jade (templating) and everyauth (authentication). First off, what the fuck is MVR, think MVC but with routes instead controllers. What we’re going to be using Express for our framework Mongoose for MongoDB Jade for templating everyauth for authentication Twitter Bootstrap for styling Setup…

Tumblr bundle for Laravel

Announcing the release of my Tumblr bundle for Laravel. Check it out on Github .

Logging Client Side Javascript Errors

This seems to be something a lot of people don’t know how to do so here’s a quick intro. You might have a great error logging setup on the backend of your site but most people have no idea what’s going on with the frontend. As an example, wouldn’t it be great to be able to see what browser version that one user who always gets JS errors was actually using, or even track the user’s id so you can…

Connecting to MongoHQ with Node.js MongoDB Native

I’m using MongoHQ for a Node.js app I’m deploying on Heroku and couldn’t find it plainly documented anywhere how to connect to MongoHQ using node-mongodb-native, so enjoy: /** * NOTE: whitespace added for readability * * EXAMPLE OPTIONS: * var options = { * host: 'flame.mongohq.com', * port: 27087, * db: 'your_db', * username: 'your_username', * password: 'your_password' * }; * **/ DataProvider =…

Leading a Dev Team - Focus

The Zone One of the hardest things for developers is to stay focused and in the “zone”. There is, of course, debate since this can’t be scientifically proven but most people agree that it only takes a second to be snapped out of the zone but can take 15-30 minutes to get back in depending on the complexity of the task. Human RAM When developing there are hundreds of tiny details that you have to…

Twilio bundle for Laravel

Announcing the release of my Twilio bundle for Laravel. Check it out on Github . See the Twilio docs for API details and usage examples.

Leading a Dev Team - Burnout

An important part of leading a development team is detecting and preventing burnout before it sets in. Software development is this strange mix of creating art and worshipping logic. Programming requires you to creatively solve problems yet in the most rational way possible. Causes After working through a rough project, demanding managers, working a ton of hours, or due to some personal issue…

Leading a Dev Team - Trust

I’m going to do a small series to document some of the things I’ve learned while being a developer all these years and while managing/leading development teams. This is the first post in the series (so get ready bitches). You have to trust your dev team completely. Only hire people who you can really trust. If you’re spending your time worrying about whether or not someone is doing their job or…

One Line HG Pull/Update for Deployment

The following is a quick one-liner for pulling and updating a mercurial repo with a specified directory, this is especially useful for deployment scripts: $ hg pull -vu --cwd /full/path/to/dir/to/update

Jekyll - Publish Posts by Date/Time

I had to read through the Jekyll source to figure this out since I didn’t see this feature documented anywhere (I’m sure it is though) so I’m going to document how to filter the display of posts in Jekyll by a published date. For example, you write a post now but don’t want it to display until a certain time tomorrow. In _config.yml add/modify the following: future: false # This will tell jekyll…

How I Work

I’m always interested in the way other people work so I figured I would share my environment and what makes me most productive. Hardware 13” Macbook Pro. When I’m sitting at my desk I use a 23” external Samsung monitor, Apple wireless keyboard, Magic Trackpad. Software OSX Snow Leopard. Firefox for web browsing. Sublime Text 2 for development. Git and HG on the command line for version control.…