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.

Friday, December 4, 2015

Flash Messages and Redirects in Yii2

Using Flash messages in Yii 1.1.* is something that I have done for so long, and so commonly, that I take it completely for granted. Whenever a user performs some action and the processing generates some information I want to convey back, I plug that information into a success, warning, info or error flash message, pop in a redirect for that situation and VOILA! After my processes are finished, the flash message is displayed to the user.

For example, in Yii 1.1.*, I have a handy action that is called if a user needs to retrieve their password from the database. It was written well back, around 1.0.6-ish, but still gets the job done nicely. Look up the user by the posted email, if the user is found, send the user an email and set a success message, otherwise, set an error message. Once that's done, redirect the user to the previous page. Otherwise, notify them that there was an error and keep going on.

When I converted this particular action to Yii2 it kept losing my flash messages. If I took out the redirect after successfully processing and sending the email, it was fine -- but I need the redirect to prevent inadvertent multiple form submissions etc. What to do?!? After scouring the internet and Yii forums, and finding multiple instances of people complaining about it not working but no good solutions or notes other than 'working as intended', I finally - FINALLY - realized that it is the redirect method itself that is, while stopping any output to the screen, not actually stopping the currently processed action. If I was more observant, I would have noticed it in the example of a controller redirect here:

Tuesday, November 11, 2014

Active Relations from Yii 1.1 to Yii 2.0

In Yii 1.1.x relations were defined by an array within the model class. In Yii 2.0 that is no longer the case. Relations are now defined by getter methods within the model. For the complete specification see Working with Relational Data in the Yii 2.0 Guide.