Eric L. Barnes

Atlanta PHP Meetup

I had the pleasure of attending the Atlanta PHP’s meetup on Thursday at StrongBox West where Ben Edmunds gave a talk about the Laravel framework.

Doug Grubba and I decided to carpool down since Atlanta1 is about 4 hours from Charlotte. I will be totally honest I really didn’t have high hopes on how the meetup would go. I have been to some local meetups and I was just not that impressed. Low turnout, weird locations, etc. But Chris Spruck and the ATL guys are top notch. They had a lot of great sponsors, food provided, free prizes, and above all a nice turn out. (I estimated about 50 people).

After the meeting a few of us went over to local pizza shop and talked about all sorts of web topics and where our next stop in hotlanta should be.2

I had a wonderful time and wished I lived closer so I could attend more of their meetups. They get two thumbs up from me and hopefully I will get to visit again.


  1. Photo by tableatny 

  2. Ended up going back to the hotel and watching some gator hunting. But hey my wife is happy about that. :) 

Summer Hours

In all my work history I have always had a 5 day work week. Either Monday through Friday in the IT field or Tuesday through Saturday in retail. I am working at UserScape now and we started summer hours two weeks ago. Which basically means we get half the day off Friday.

Honestly going in to the first week I was a little worried I wouldn’t get as much accomplished as I wanted. Now that we have passed our second week I think I get more done on Friday than some of the other days. My mind shifts from thinking about what I can get done by the end of the day, to what can I get done in the next 20 mins. Friday mornings feel like a sprint and I am focused on getting as much done as possible. This means I take away as many distractions as I can. (rss, email, im, etc)

Not only do I feel very refreshed coming into Monday and ready to jump in but that extra time with the family is awesome. I don’t know about your weekends but mine are so crammed full of activities it goes by really really quickly.

If you are an employer I would recommend you give something like this a try. You may find your employee moral improves and more things get done in less time.

A comment on Reddit (by raygundan) points out an interesting technique Apple uses on their iOS platform:

when you switch apps, the device saves a screenshot of what the last screen looks like for that app so that when you switch back again, that saved screenshot is the first thing you see. This is done to buy time for the app to fully load. Instead of showing you a blank screen or a loading screen, the device shows you a screenshot of the app. This technique works because the time it takes to load the rest of the app isn’t very long anyway, so a second of showing a screenshot that the user cannot interact with doesn’t cause confusion. What it does do is make it looks as if the app has loaded instantly, which results in a very good experience for the user.

I think this is a brilliant idea. It seems we live in a world full of loading gifs and I appreciate fine details like this. The fine details that you don’t see is the difference between mediocre and extraordinary.

Laravel Blade

Blade is the simple template/theme system built into Laravel and up until this point it has been very basic. It supported most of the simple things such as variables {{ $var }}, @if @else, @section, and finally a thing called @yield.

Because of the simplicity of it on a new project I thought we would need something more advanced and went with Twig. Twig had more features and was more powerful but it also didn’t really fit into my workflow. The biggest problem was working with Eloquent results and twig doesn’t like calling results like this:

foreach (Book::with('author')->get() as $book)
{
    echo $book->author->name;
}

I asked Taylor about it and he did a few changes to get that working but then I had troubles with other calls. So it just felt like it was more of a fight than what it was worth. After discussing this, last week Taylor and Shawn McCool really made Blade awesome. First Shawn recommended a “render_each” method. Which is an excellent feature in my opinion. It works my including a looped view:

<ul>
    {{ render_each('categories.list', $categories, 'cat') }}
</ul>

// categories/list.blade.php
<li>{{ $cat->name }}</li>

As you can see that is a big time saver. But it doesn’t stop there. Now Blade can have layouts inheritance and several other really useful goodies:

@layout('layouts.common')

@section('content')

    <p>My content</p>

@endsection

Then inside layouts.common:

<html>
<head>
    <title>Test</title>
</head>
<body>
    @yield('content')
</body>
</html>

This is just some of the basics of the new features and it does a lot more. Although I don’t consider it a full replacement for Twig it has 90% or more of the features I wanted to use. The biggest missing feature (depending on your needs) is that Blade still just parses as php. So it can call things that are not assigned and doesn’t prevent you from using php code in your views. Personally I like that feature but if you are really wanting to limit what people can do in the views then this may not be ideal. So use what is best for the task at hand.

For a video overview of what is coming please watch this:

Laravel Bundle Assets

The past few weeks I have been building a few Laravel bundles and one of the features of bundles is the ability to have assets that are moved to your public folder during install. This is great when your bundle has css, js, images, etc..

The downside to this though is that while building the actual bundle it is a pain to keep having to run the following command each time you change a file:

php artisan bundle:publish

I have came up with a few different options to make this easier for developers. The first method which I believe would be supported across every os is to symlink the assets to public/bundles/folder/. However the down side to this is you have to add new symlinks when you add new files. So not ideal for the way I typically develop.

The second option is specific to mac but it works wonderfully. What I have done is purchase live reload and use it to run the bundle publish command. The reason I originally purchased the app was because I am using less for my css and I liked the fact that it would compile the css and also refresh your browser so you can see changes instantly.

The bigger benefit is live reload allows you to run terminal commands after you save and before it refreshes your browser. So all you have to do is add in your artisan command and not have to worry about it again. Here is a screenshot showing this:

Hopefully this will help you if you are building bundles with public assets. If you have any other tips please post them in the comments.