My 2012 – A look back

This past year has flown by and it is really hard for me to grasp that it is already 2013. As I sit here and look back it has been a wild ride for me and I wanted to write a post covering some of the big things that happened in my life both personally and professionally.

New Job

Back in January I took a new job working at UserScape. In hind sight this was an awesome decision. I not only work with two of the smartest guys I know but UserScape is an awesome employer.

New House

A week after starting this new job I bought a new house just a few miles down the street from where I had been living for the past 7 years. It was a foreclosure and they had a front porch auction. That was my first experience in an actual real life auction with big numbers. Luckily we were able to get the house for a good deal even though we went over our initial budget. If you have never been in an auction and it’s easy to get wrapped up in the moment.

After a very short few weeks we had finishing the closing process and decided to fully go through the house and paint, fix any issues, and get it perfect for when we actually moved. My wife knew that if it wasn’t done before moving then it would never get done. 🙂 Looking back that was a great decision and I couldn’t have gotten finished without the help of my family. There is a reason I work on the web. Painting is horrible, fixing things is horrible, moving is horrible.

One of the perks with this new home is the neighborhood has a pool. So we spent most of the summer swimming and meeting neighbors. Having an employer that offers summer hours is awesome. All this time at the pool did have a positive side effect though. I wasn’t happy with my weight and going to the pool every day made me realize I needed to start exercising.

Losing Weight

In July I decided to get serious about my weight. After researching various diets I settled on just eating less calories. I love sweets and I wasn’t willing to give those up. So I tracked my calories everyday, stopped drinking sodas, and started eating less during meals.

Men or women who are 5 feet 4 inches tall would have “normal” BMI if they weighed between 108 and 145 pounds, for example, and overweight if they weighed 146 to 174 pounds, and obese if weighed more than that.

Next I got my mountain bike out and started riding again. It had been a few years since the last time I rode and I had forgotten how fun it is. I was able to ride close to 100 miles before it got to cold and the time changed. With both riding and calorie watching I was able to go from 172 down to 150.

Just because of the changing seasons I didn’t want to stop losing and in December I started the Insanity workout program. Currently I am down to 144. My original goal was 155 but now I am thinking 130’s.

Work

Work wasn’t slow either. One of the first projects I did was build the simple Laravel Bundle site and convert a design Fixel created into the Laravel site. This was all easy stuff but got my feet wet in Laravel after using CodeIgniter for the past 6 years.

From here we started a new project which later was put on hold and instead it turned into Snappy. Originally we never planned for it to look or work as it does today. It was going to be more a traditional app with some ajax interaction thrown in.

From all of our ajax discussion I started researching JS frameworks and settled on giving knockout a spin. At first glance it seemed to fit with our goals but after a short time I wasn’t really happy with how it was all working. At this point I found BackBone and jumped in to learn it.

I will be the first to say that I have been complacent over the years when it comes to JS and it was never a strong suit for me. Sure I could integrate a jQuery plugin, write some simple stuff, but never dreamed of building anything substantial. So going from pretty much nothing to a giant single page application was a huge learning experience for me. I can’t count the number of days I stayed up to ridiculous hours reading, practicing, and learning.

After a month we had a working wireframe working and then FocusLab was brought in to handle branding and design. As you can imagine the app at that point took another 180 degree turn. As a developer you always hate when that happens but you have to look at the end goal. You have to WOW your customers.

Now it is the end of the year and Snappy is in private beta with lots of goodies in the pipeline before our official launch. It is the classic software design issue where the last 10% takes 90% of the time.

Blogging

Benjamin Franklin once wrote, “Either write something worth reading or do something worth writing.” Seeing as I haven’t done the latter I am going to try and write something worth reading. I have put together a new design and plan to write longer article style posts and tutorials this year.

Statamic Email Form Plugin

This is a plugin for Statamic that is designed to allow you to quickly and easily create email forms. Currently it is pretty basic but flexible so it should be a great starting point. I hope to get feedback on this release and then make improvements over time.

Installation

Copy the “email” folder to your _add-ons directory.

Example Form Template

Here is a full example to get you going. Please see the parameters section
for more field options:

{{ noparse }}{{ email:form subject="Contact Form" to="eric@ericlbarnes.com" required="name" }}
    {{ if error}}
        <h1>Error</h1>
        <ul>
        {{ errors }}
            <li>{{error}}</li>
        {{ /errors }}
        </ul>
    {{ endif }}

    {{ if success }}
        <h1>IT WORKED!</h1>
    {{ else }}
        <p>
            <label for="name">Name:</label>
            <input type="text" name="name" id="name" value="Bill">
        </p>
        <p>
            <label for="from">Email:</label>
            <input type="text" name="from" id="from" value="test@test.com">
        </p>
        <p><input type="submit"></p>
    {{ endif }}
{{ /email:form }}{{ /noparse }}

Parameters

The {{ noparse }}{{ email:form }}{{ /noparse }} tag accepts the following paramaters:

  • subject: The subject of the email.
  • to: The form recipient’s email address.
  • cc: A cc email address.
  • bcc: A bcc email address.
  • required: A pipe seperated list of required fields. Example: “name|address|city”. Currently this only does simple validation to check if it is an empty value.

Issues / Gotchas

The name field is hard coded as the reply name in the plugin so it is recommended you use this field in your form.

Contribute

Keep in mind this is the first release so if you see any issues or have ideas for improvements pull requests are gladly
accepted. 😉

Download

You can clone the repo by running the code below:

$ git clone git@github.com:ericbarnes/Statamic-email-form.git

Or visit the GitHub Repo.

Statamic Sitemap

This is just a few simple template files to generate a sitemap of your site for submitting to Google webmaster tools. It follows the sitemap protocol.

Installation

Copy the contents of all the directories and move them into your Statamic site.

Download

You can clone the repo by running the code below:

$ git clone git://github.com/ericbarnes/statamic-sitemap.git

Or visit the GitHub Repo.

Statamic

If you have followed this blog over the years you know I am always changing something. So this may not surprise you that I have switched blog platforms, again. I had been using Tumblr which is perfect for my normal posting routine. Sharing quick links, photos, quotes, and occasional articles. As much as I liked Tumblr some things just irked me.

  • They control your data
  • No easy way of setting up redirects in bulk
  • No importing

Mainly the control of my data is what I didn’t like. I want all my content stored where I can do what I want with it. Of course, they do offer an API but what if one day they stop providing it?

I did have a short stint of using kudos which is a flat file Laravel app created by Ian Landsman and it worked great for me. Except for one major drawback. You still have to open your editor and write the post and then push. Just too much work for me and my number of posts went down considerably. I guess I am just lazy 🙂

A few weeks ago I came across a new cms named statamic and quickly applied for the beta. I ended up getting just before it was officially released but had enough time to play with it and enjoy how they set up the system. Everything is stored as flat files just like the jekyl flavor. But with one huge difference and that is the ability to post from an admin section. Which still just creates flat files.

So now I can post quickly from the admin and later on when I feel like it sync with git so I have a full off site backup of all my posts. Even though the cms is pretty basic the possibilities are pretty much limitless with what you can do with it. For instance, I have duplicated my whole Tumblr setup with it. Now I have all four post types and it really wasn’t much work. Just a few hours over two evenings.

Statamic is commercial but the pricing is very fair and I don’t mind paying for something top quality with support. All my little questions have been answered quickly and with a good answer. So yes I fully endorse what they are doing and excited to see them grow.

I will miss the Tumblr followers, but I always have an rss feed you can use to keep up to date 😉

Hosting

Another negative is hosting. With Tumblr it is free and well you can’t beat free. I tried aws but it was to expensive for me. I am outside of my year free micro and it seemed like a micro was running around $30 a month. I started researching other hosting options and was going to go with a shared system but meh. I would rather have full access to do whatever I want. After browsing what felt like weeks I settled on Linode and was lucky enough to get in when they offered a $100 credit. Woot. 🙂

So now this site is running on Linode with Ubuntu, Nginx, PHP5-fpm, and apc. All data is stored in a private git repo at BitBucket.

CodeIgniter Security Basics

By default CodeIgniter is a very secure framework and it also does a lot behind the scenes to help you out. I was recently contracted to look over a CodeIgniter application that was constantly getting hacked. So in light of what I seen I want to share some common pitfalls you need to avoid.

  1. Use Active Record! You should “almost” never write your queries manually.
  2. If you must write a query without active record be sure everything is escaped properly. $this->db->escape()
  3. Validate user input! CI has $this->input->post(), $this->input->get_post() and you should use those.
  4. Validate file uploads and use the upload library.
  5. Use the framework tools. It comes with tons of libraries and helpers that are designed to help you with common tasks. There is no reason to write
    your own if already accomplishes what you need.

Yes I know every php developer should know about these but some people still just haven’t gotten the memo. So spread the word, write secure apps, and make the world a better place.

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.