Wednesday, February 13, 2019

Code Analysis with Exakat on Docker

One of the neatest things I learned about last week at SunshinePHP, was how Exakat can be used to perform static analysis of a codebase to help formalize your code review processes.  It's a great tool for determining how consistent you and your team are being with your code, and has indicators to show you how closely your code base aligns to each of the major PHP versions -- an excellent way to check backward compatibility and/or whether you're ready for a PHP upgrade or not. 

With Docker, it's extremely easy to get things running!

Monday, February 11, 2019

Notes from SunshinePHP 2019

This conference blows me away every year! There is always so much to learn and to share.  This year every attendee was able to receive their very own ElePHPant - so my herd continues to grow (ok, so I actually have a menagerie, since it includes a few Docker whales as well!)

Some of my biggest take aways from this year's conference:

  • MySQL 8 and x shell via docker
  • Security testing technique
  • Swoole! (Async. PHP!!!)

Once again, I'm renewing my determination to pick the blogging back up - it may not have as many Yii specific examples, since I tend not to run into quite as many road blocks there as I used to (9 years with a framework will do that) but I'm constantly running into IaaS challenges that others may value insight into.  If only there were more hours in a day ...

Friday, October 19, 2018

ZendCon & Open Enterprise 2018

Wow, can't believe how long it's been since I've taken the time to sit down and post on this blog! Just goes to show how crazy and busy life can get. I just got back from ZCOE 2018 - ZendCon & Open Enterprise, where I had the pleasure to present a variety of information about how to incorporate Docker into your daily workflow and use it effectively.  It was my first time at ZendCon, and I was very impressed with the conference! There was a lot of great information presented in the general sessions and all of the keynotes were full of both historical information about some of the key tools and aspects of the open source community and information about where those tools are heading in the future. I was particularly intrigued by the information about asynchronous PHP and Swoole. I am way too old school to be excited about anything that screams of going backward (which is where my my mind jumps whenever anyone starts talking about how awesome functional programming is - or serverless, which is just functional programming on demand - I jump back to the pre-OOP days of functional chaos in my head), but async. is something that I can see myself getting behind. Super excited to look into it further, in addition to all the other tips and tidbits I picked up at the conference.

For anyone curious, the slides to my presentations can be found on SlideShare

If you happened to be at the conference, please send in your feedback via - your constructive feedback is always valuable and appreciated!

Thursday, September 28, 2017


Despite the crazy busy schedule (I miss my time to sit and write these blogs) and the inability to figure out how to squeeze 10 more hours into any given day, the team at work has decided to participate in HacktoberFest - just too cool to pass up! If you're not familiar with it yet, check it out and find a little time to give back to the open source community in a fun way.

I'll probably be focusing my efforts on the Yii front there, since it's a project that I use daily and am not sure how I lived without it before ... What are you passionate about and willing to sacrifice a little personal time to see thrive?

Saturday, March 19, 2016

Swivel Extension for Yii

In my last post, I mentioned that I was looking forward to making a Swivel extension for Yii. I'm excited to share that I've FINALLY found the time to do so.

It's a fairly straight forward extension, simply providing access from the application to a Swivel component which interacts with the core Swivel library, and which handles the general bucket assignment for users as swivel is accessed. I've also provided a class for integrating the existing Swivel logger over to the primary Yii Logger, and provided a data structure and model for storing the list of features for the application.

The extension is available on the Yii Framework Extensions list, from the GitHub repository or as a composer package.

It's really designed to be installed via composer:
composer require "dhluther/yii-swivel":"~1"

I've tried to keep it lean, but provide a good bit of information about how to implement it and how the Swivel features work on the Yii-Swivel Wiki on GitHub.

I will be creating a 2.0 version shortly as well.

Enjoy! I hope others find it as useful as I think I am going to, and huge props to the Zumba team that developed it and to Stephen Young and his presentation at SunshinePHP 2016!

Sunday, February 7, 2016

SunshinePHP 2016 Conference

I had the opportunity this weekend to attend the SunshinePHP conference in Miami. What an amazing group of people who are passionate about what they do. The theme for the weekend centered on collaboration and supporting the open source community, something that is near and dear to the heart of many Yii developers. It was a wonderful thing to meet so many people from around the world who believe in supporting community. A special shout out to Josh Holmes and Michelangelo van Dam who were extremely outgoing, encouraging, and full of tidbits of wisdom which they were willing to share.

I wanted to take a few minutes and share some of my hot takeaways from the weekend.

  • Docker - If you don’t know what it is yet, you need to go check it out. Docker is "an open platform for distributed applications for developers and sysadmins." Docker enables you to quickly compartmentalize processes on your server, while leaving them with access to the same base OS. Through port forwarding, shared folders and other means (built in and easily configurable), you can enable those processes to communicate. This is useful when you want to test a single application installation against multiple versions of PHP or multiple versions of MySQL. It’s also useful when you are trying to standardize a development platform or delivery system. In fact, there are so many potential uses for this technology in streamlining and standardization that I can’t even begin to recount them all. Long story short - if you haven’t looked at it yet, do so. If it still doesn’t make sense after reading about it, ask ;)
  • Swivel - Ok, this is pretty cool - the guys over at Zumba fitness have come up with a slick library for strategy driven, segmented feature toggles. These allow you to release new features in Canary Releases, perform A/B testing, and implement the features in a way that keeps the traditional feature flag system’s potential complexity from overloading your codebase and leading to a lot of technical debt. Swivel is currently limited to a 10 cohort (or buckets as they call it) system, which you evenly split your users into, giving you 10% user base segments for whatever feature you’re going to test or release. They currently have a CakePHP plugin for it, and I’m looking forward to working on a Yii extension for it.
  • Team City - Who knew?? JetBrains has a CI product. I guess I’ve kept the blinders on PHPStorm for so long (which I love and don’t know how I lived without), that I missed the news on this one. I haven’t looked into the details yet, but the PHPStorm developers that were at the conference said they couldn’t make PHPStorm without it, and that’s enough of a recommendation for me!
There’s so much more, I could go on for hours about Graph Databases and RUM, Performance Monitoring and PHP Pipelines, just to name a few. If it’s been awhile since you’ve been to a conference, I highly recommend that you go. Find a conference or a user group nearby, or take a leap of faith and visit one that changes not just your routine, but your whole perspective ;)

Thursday, December 10, 2015

Testing in Yii 2.0 with Codeception - Fixture Data

I'll admit it -- I'm a phpunit addict. Switching to codeception has been a bit of a struggle for me, just because it feels like it should be intuitive, but it's different enough from what I'm used to that it's taken me a few days to really wrap my head around it. My biggest struggle? Trying to get fixture data to automatically load and unload when functional and acceptance tests are run. I finally dug through the yii2-app-advanced code and discovered the FixtureHelper!! The FixtureHelper is the missing link in getting your fixture data to automagically load and unload when the functional and acceptance tests are run.