{ "log": { "version": "1.2", "creator": { "name": "WebInspector", "version": "537.36" }, "pages": [ { "startedDateTime": "2017-04-17T01:12:26.493Z", "id": "page_2", "title": "", "pageTimings": { "onContentLoad": 217.26299985311925, "onLoad": 329.7219998203218 } } ], "entries": [ { "startedDateTime": "2017-04-17T01:12:26.493Z", "time": 5.696999840438366, "request": { "method": "GET", "url": "", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, sdch, br" }, { "name": "Host", "value": "" }, { "name": "Accept-Language", "value": "en-US,en;q=0.8" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Referer", "value": "" }, { "name": "Cookie", "value": "_ga=GA1.1.144569011.1487542273" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "cookies": [ { "name": "_ga", "value": "GA1.1.144569011.1487542273", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 516, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Mon, 17 Apr 2017 01:12:26 GMT" }, { "name": "Last-Modified", "value": "Mon, 17 Apr 2017 01:10:57 GMT" }, { "name": "Server", "value": "WEBrick/1.3.1 (Ruby/2.3.1/2016-04-26)" }, { "name": "Etag", "value": "51d11e3-5cd70-58f41621" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Cache-Control", "value": "private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Content-Length", "value": "380272" } ], "cookies": [], "content": { "size": 380272, "mimeType": "text/html", "compression": -1, "text": "Blog posts by Aaron Saray

All entries of my technical and business blog.

Fixing Laravel 5.4's Dependency on PHPUnit 5

Normally, when I write unit tests, I don’t use Laravel’s facade and fakery methods. I do a lot of injection of services, but in one particular case, when working with the Queue system, I had to use the facade for faking the queue and asserting some jobs were pushed. (more…)

php, testing, phpunit, laravel

Laravel Command to Generate Swagger Documentation

If you’re not using Swagger (or OpenAPI) yet to document your APIs, you should start. It’s pretty simple to get started - especially in PHP. I recommend using the swagger-php package - it’s pretty easy. Just use annotations, and then generate the Swagger definition when you’re done. (more…)

php, laravel

Get Better at Logging

Have you ever submitted a debug log for a piece of desktop software? I’m always enthralled at the sheer amount of information that is included in some of these error reports. It reminds me that I don’t do enough logging. As a matter of fact, I think most PHP developers don’t do enough logging. (more…)

php, misc web development

Google Street View Animation

Today, while trying to think of a clever way to create a “hire Aaron” page (yup, resume is right here), I came up with an idea to animate a Google Street View page. My initial goal was to animate a rotation and some travel down a road, but I’ve been unable to find a more seamless way of doing the horizontal travel. It looks like there is just going to be jumps in their photography... (more…)

javascript, css, google maps

How to Use the Same Method for Add/Update in a Doctrine App

I’m a huge fan of the service architecture paradigm - and that means that I use services in my controllers to handle persistence. I wanted to abstract the add and update methods from my services and put them into an abstract class. In addition, I didn’t want to have to specify the exact method - I just wanted to call save on the entity. Finally, I wanted to log it properly and verbosely. (more…)


Using Your Namespace for Optimum Readability

I love namespaces in PHP as much as the next programmer - but there’s always been something about namespaces in my own applications that bothered me. And that’s when I have similar or identical named services, forms, entities or models. (more…)


PHP Templating Languages Indicate a Problem Elsewhere

I can’t help but think a lot of PHP applications have a problem. These beautifully crafted, object oriented, highly engineered applications are still making one vital mistake. And that’s using one of the various templating libraries or languages that PHP has. (more…)


Short-hand PHP Dotenv instantiation

I’m a big fan of PHP DotEnv for creating my environment variables for my scripts. (It’s always a good thing to keep your passwords and credentials separate from your source code, according to OWASP). (more…)


The Chicken or the Egg of Hacking Your Software

Today I was faced with an interesting quandary about whether I should write the code to exploit an application vulnerability in our software at work. This vulnerability is not necessarily a “security” one, but more-so a known-risk: it was theorized that someone with enough knowledge could bypass a mechanism in our software. (more…)

business, security

Drupal Plugin with Github Updates

I’m all for coding standards and rigorous approval processes for software in app stores, I really am. However, I’m currently responsible for creating a number of different CMS plugins that all share some code. Unfortunately, that shared library will never follow the coding standards and requirements for all app stores - each has some differences. That’s why I created… (more…)


PHProblemLogger Filter Strategies

If you haven’t been following my twitter feed or my open source on github, you might not have seen that I recently released PHProblemLogger, an environment and run-time logger designed to help log everything during an error condition. (more…)


Export Git Project

I manage any WordPress plugins I create using git. In order to create a distribution of those, I need to zip up the source code and use that to upload to the marketplace (or directly upload). This was easy with SVN - I just used an svn export command and there we go. (more…)

git, PHPStorm

Password Complexity v2

Every year, they come out with a list of the top 20 most used passwords and it makes me wonder… how many users on any one of my websites are using those passwords? (more…)

php, user experience

Sync BitBucket and GitHub

At my current job, we keep both a private copy of the code in BitBucket (where all of our code resides), and make a few repos public on GitHub. (Wish I didn’t have to do that, but really, GitHub is the premier place to get your code it seems these days.) So, I decided to come up with a solution to keep both repos up to date as I do my development. (more…)


Jekyll Mark Old Posts

With technology changing so rapidly and people in such a big hurry, sometimes older suggestions or out of date recommendations are the first things that programmers run into. You know you’ve fallen for it - a quick google search and you get your first result and you give it a shot; never mind that it’s a blog entry from 7 years ago. (more…)


Using Developer Tools in Chrome for Testing

In a perfect world, when testing your website you’d have a giant device library, a number of different internet connection speeds, and a bunch of users using the system simultaneously. A perfect world? Pfffft. But, I can help you at least get close to this set of requirements for your test. Let’s see how we can use Google Chrome to simulate different devices and change our internet connection speeds. (more…)

misc web design, tests

Using JSON Patch in Swagger

I’ve been working with Swagger, also known as the OpenAPI Initiative lately, and I’ve come to the issue of issuing an update to an object. I’m planning on using the HTTP verb PATCH (yes it is a standard in case you forgot… like I did). (more…)

swagger, api

Make the Reasons Overwhelming

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)

php, business

What \"type\" are you?

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Sanity Check Values

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Trust, But Verify

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Filtering PHP

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


8 PHP Command Line Tips and Tricks Presentation

I just finished giving a talk at MKEPUG about 8 PHP Command Line Tips and Tricks. Normally I try to export my talks / slides into PDF. This time, my presentation was a little different - I used embedded video in KeyNote. So, I’ll provide the KeyNote file for download - sorry to those who don’t have KeyNote or a mac. :-/ (more…)


Are All American CEO's Psychopaths?

Are all American CEO’s psychopaths? It is a very interesting question - one that I tackled in 2012 when I was finishing my capstone at Cardinal Stritch University. Considering I write a lot about business in this blog - and a few years has passed now since I used this paper for credit - I thought I’d “open source” it for those who might have an extra few minutes in their day! Hah! (more…)


Take Care of Your Resources

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Government Website Idea

I find it very difficult to find out information about my local elected officials. Even the federal website for congress mentions that there is no central database of email addresses and contact information for their members - which is just crazy to me. (more…)

Ideas for Websites

Coders be Confident, Not Cocky

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


I am a Failure

Fair warning - I normally don’t write too personally in this blog - but this one is something different. Something I think people need to read. (more…)


Attention to Detail

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Commenting is More than Opinion

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Array Key Accuracy

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Descriptive Naming Schemes

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


First Confident Coder Column

This entry is republished from the original columns included years ago in the PHP Architect magazine. I really recommend purchasing the magazine to get timely articles, columns and PHP news. (more…)


Two Quick Tips for Securing PHP Sessions

Let’s talk a little bit about session fixation in PHP. Such a fun topic, right? Tons to get into here. But, let’s just touch the surface on two VERY SIMPLE things you can be doing now to make sure that your website is safe. (more…)

php, security

My MadMimi API PHP Library

At Small Shops United, we use MadMimi for our email list software. I took a look at the PHP libraries that were available and found them extremely out of date, lacking, and just plain not working in certain areas. (more…)

php, api

New Blog

So I’ve decided to move my website off of wordpress and on to jeckyll - so you might notice it is a bit faster ;) (more…)

3 Steps to the Best Programmer's Cover Letter

The other day I found myself giving advice and revisions to a fellow PHP programmer about his cover letter for his next job application. That really inspired me to help out and write this entry. (more…)

business, programming

One-time Scrolling Banner with jQuery

I’m not gonna lie - I was really trying to figure out how to put more keywords onto the home page of my company, 201 Creative, besides just the trademark: “Let’s make software simple.” So, I messed around with making a rotating banner on the home page that alternated through words that described the concept. However, I found it annoying and eventually gave up on the idea. I didn’t want to just delete it, though,... (more…)


Keep user's scroll position in scrollable div

The other day I was faced with an issue that I need to be able to keep the scroll position of a user in a overflow-y scrollable div. Turns out - with a combination of javascript and local storage, this is pretty easy. (more…)

javascript, jquery

Documentation Tools for PHPStorm

I like when projects have documentation, yet I hate writing it. That’s why I rely on phpDocumentor to do most of my documentation for my project. Recently, I’ve also discovered a new tool for documenting my API: ApiDoc. I’ve also been relying heavily on vagrant for my projects. (more…)

web tools

Doctrine Error: Expected Plain Value

I’m so used to PHP’s liberal allowance for single and double quotes, that I forget that other languages and tool-sets don’t play that way. Case in point, my most recent error: [Syntax Error] Expected PlainValue, got ''' at position 378 in class My\\Bundle\\App\\Entity\\ItemDefinition. (more…)


Ansible Installation of Postfix with No Prompts

Using an Ansible configuration, I wanted to use postfix on ubuntu to send out mail. However, I couldn’t seem to figure out exactly how to get it to stop asking for input during the apt-get install postfix process. Turns out, you can use debconf to set the values that are necessary for the install. (more…)

ansible, scripting, server

Getting variable values from nested twig / symfony custom template

Today, I was working with a custom form themed symfony / twig project. The previous developer had developed a bootstrap based theme (yes, this is an older Symfony project at this moment - I think this is a bundled theme now). I was struggling with the block field_row item. Inside of this, there was a call to form_label passing in just the form view again. I was setting a custom label on the form_row() call... (more…)

PHP, symfony

Morning Motivational Email to Text

So I’m going to try this new thing - watch a motivational quick movie in the morning via youtube. I made a playlist of videos and have put the following code in cron for 5:30 every morning. It will send an email (which is actually email to txt on my phone) with a link to open the youtube player on my phone with a random item from my playlist. Hope you find it useful! (more…)


Android Emulation - in VirtualBox - 400% faster!

I’ve been working with my QA department to determine a faster, better way to test our pages in android browsers. The android emulator just seems to take a long time to load, to render pages, and is clunky to use. (True, I may not have learned about all of the options in the emulator, and I may be able to squeak a little bit of performance out of it.) (more…)


HTML5 Placeholder: Not Always the Best Choice

One of the applications my team develops is used by a group that we’ve determined to be very much beginners at computer usage and internet comprehension. We attempt to make the product as intuitive as possible - while staying away from the newest trends. I don’t believe our place is to challenge their current notion of what websites do at this time. We stay a bit behind the curve because they need to use this... (more…)

html, Misc Web Design

jQuery code to manage check all / uncheck all checkboxes

At work the other day, our designer created an interface that had multiple checkboxes, and then of course a check-all checkbox. The thought was that if you check the check-all box, all items become checked. When our QA person started testing the interface, I noticed that a child item unchecked let the check all box remain checked. I explained to the programmer and QA person that this was not the desired outcome. As soon as... (more…)

html, jquery

Preparing a Conference? Tell Your Presenters This

I’ve given a number of talks in the last few years. Each time I go to a new place, I have to bring this giant bag of equipment and three or four versions of my presentation. All too often, conferences don’t detail enough of the specifics for their presenters. Let me tell you, presenting and traveling can be stressful. So, to help reduce stress and anxiety, there are a few things you can share with... (more…)

professional tips

Keep Mentoring, Even If It Looks Like No One Cares

I’ve had a lot of people come to me for various mentoring opportunities. They’ll ask for help, follow up once or twice, and then just disappear. I’m left wondering: Did I make a measurable impact on their lives? (more…)

business, professional tips

Don't Underestimate the Importance of Work Space

I’ve read the articles and studies about workers creating their own work spaces and I think it’s a great idea. (In fact, the company should too - it increases efficiency by 32%!) But, I never really realized how important it was until recently. (more…)


Treat Arrays Right: Iterating Properly

Oh, PHP - your love affair with arrays is like no other language. You can always tell if someone learned PHP first before all other programming languages. They think, design, and talk in arrays. Have a list? Make it an array. Have a heap? You mean array, right? Collection object? Naw, I’ve got an array right here. (more…)


Slowing Down My Blog Frequency

So a couple years ago, I made a commitment to blog once a week for the foreseeable future. I posted a new entry every Tuesday. I kept to this pretty good. I may have missed two or three Tuesdays over the course of many years. I am proud of my goal, I did what I started out to do. (more…)


Group Coding Results: Tech on Tap Version

I actually very much enjoy spreading “the word” on PHP. I go to a lot of conferences, and present a lot. One of the most interesting concepts I’ve developed lately, however, is not a presentation but more of a group coding session. This is how it goes… (more…)


Why more creators are not entrepreneurs

The other day, I was presenting some of my hard work to a group of stakeholders in a meeting at work. I went through the screens, showing all of the fruits of my months of labor. (more…)


How to discover talent, not just skill

One of the newer programmers on my team asked me the other day why I hired him. I said “I saw you had a natural talent, and have potential.” We both kind of laughed because we knew his skill level at the time was very low. He was not that experienced. But, he had more questions about how I can detect talent and potential versus just someone who has really polished looking code. (more…)


Equal distance menu items

I’ve been having this challenge - I really want to have menu items in the CMS to be equally distributed - but I don’t want them to go over the edge of the page. It’s like, I want them to wrap. I’ve been doing some work with display: table-cell. (more…)


Idea: CMS agnostic cloud storage plugin

So I’ve been looking into cloud storage a bit again - and I decided to do a bit of quick research on the top three CMS in my life: Drupal, Joomla, and Wordpress. I wanted to see if my idea made sense… (more…)

Ideas for Websites

Slides from thatConference

My talk at thatConference went great today. You can download them here. (Also, not sure why, but the second slide would just not download the image of my kayak…) (more…)

Misc Web Design

Idea: CodeReviewWith.Me

I had this idea about doing interactive screen share and code review. I wrote it about it earlier and even asked for feedback. (more…)

Ideas for Websites

My StackOverflow Rant

Ugh. I really want to contribute to the community. I do! If others before me wouldn’t have done it, I wouldn’t be where I am. (more…)


MySQL Explain rows column really IS an estimate

Here is an interesting proof of concept that the ‘rows’ column of the explain output is actually an estimate, and not the real amount. I KNEW it to be true, but somehow I didn’t feel like it was right. I always thought “the closer the rows # gets to the exact amount of retrieved data, the better. Exact is what you strive for.” Turns out, that’s not true. The closer the number, the better, but... (more…)


PHPStorm Project Launchers for Ubuntu

PHPStorm has an option to install an icon for your Unity Dash on ubuntu - you can do this through the menu system. But, if you use this, it always opens to your last project. I have a number of projects running simultaneously, so this is no good. I could, of course, stop it from opening the last project, and just display the splash page menu. But I didn’t like that either. I wanted to... (more…)

IDE and Web Dev Tools, linux

Zend Framework 1 Form Captcha Idea

One of the worst things with CAPTCHAs are actually having to solve them. One of the things my team and I use for our projects is the hidden field CAPTCHA. This is a technique that adds a field to a form, but uses CSS to hide it. If that form value is filled in, we can guess that the submitter was a bot reading the HTML - and not an actual user. (more…)

zend framework

USB Chrome Debugging and Local subnet surfing on Android Emulator

Most of the development I do that needs to be tested on android is on a local subnet. Generally, this is because I am running the servers in virtual machines that mimic the production environment. When I want to test these websites via the android emulator, it would be nice to be able to surf to them locally (without putting them in a public QA environment) - as well as have the ability to use... (more…)

android, linux, mobile, scripting

Review: Learning JavaScriptMVC by Packt

Someone from Packt reached out to me the other day to ask if I’d do a review of a newly published book called Learning JavascriptMVC. I said sure. So, they gave me a free e-book to read. Let me give my honest review: (more…)


Google Map Markers Distorted with Bootstrap

On a recent project, the dev team installed Twitter Bootstrap as the base for our CSS. For some reason, I was the only one seeing a problem with Google Maps. Their Windows and Mac browsers of both Chrome and Firefox were displaying the marker fine. (Part of me doesn’t believe that entirely but….). At any rate, my Chrome browser on ubuntu was not showing the marker properly. This is what it looked like: (more…)


VMWare Script to Toggle VMWare Workstation start/suspend

Normally I have multiple vm’s running for various different projects - all of these are in VMWare Workstation instances I toggle between suspend and started. I decided to create a script and an Ubuntu launcher icon for toggling the vms back and forth. (more…)

linux, scripting

Speaking at Milwaukee Wordcamp 2013

As you may or may not be able to tell, I use Wordpress on this website. So, I guess that makes me a fan… (trust me, as a programmer, I’ve always toyed around with writing my own custom blog software just for my domain - but alas, other aspirations always trumped that. Plus, wordpress is perfect for what I need.) (more…)


Developers: How to get your estimates right

Estimates can be one of the hardest things to create as a developer. The word estimate is a misnomer in our industry. It’s almost as if they should be called “agreements” or “promises” according to some bosses. Yet we all know that they are just that: an estimate of the amount of time, not a guarantee. (more…)

professional tips, programming

The very bad things that Javascript can do: Part 2

In part 1, I discussed the various arguments I run into about wanting to be overly security conscious with our sites in regard to third party javascript. In this entry, we’ll run through a few scenarios. (more…)

html, javascript, security

The very bad things that Javascript can do: Part 1

I have the argument a lot with product managers about allowing custom HTML and Javascript into our projects. I don’t want to do it. I want to only put in predefined, sanitized information. But more about my reasons after this… let’s look at the arguments I get first… (more…)

javascript, security

FirePHP4Chrome Chrome Extension

I use Chrome almost exclusively now. One thing that drove me nuts was the lack of support for FirePHP in the console of Chrome. Google even released some extensions for it - but they either didn’t work or were out of date. So I created my own. (more…)

Google Chrome

Feedly Background Tab

After transitioning away from the doomed Google Reader to Feedly, I found it to be awesome! I only had one gripe with the shortcut key scenario… when you went to view the entire article in a new tab, it was always focused. This meant I’d still have to middle click with my mouse to put my tabs in the background. (more…)

Google Chrome

Make sure not to \"too\" future-proof your code

When doing a bit of code review, I saw an incredibly ornately architected future-proof module written by one of my programmers on my team. It had taken him roughly 3x as long as I had estimated, but the code was very complete. It was created in such a way that every single portion of it was modular and could be interchanged quite easily. (more…)


Quick performance test with apache's ab

In a break from my normal type of tutorial, I just want to give a real quick overview and highlight of a fictitious “case study” to demonstrate the importance of load testing your application with apache’s ab tool. (more…)

apache, performance

Release the quality you'd expect

Recently, I had a programmer create a new feature for one of our products. He inadvertently caused another feature of our product to look less polished and function a bit weird. (I called it ‘wonkified’). The consensus of the group was to push out the feature, and then go back and fix the broken part of the old feature in the next week or so. (more…)

programming, user experience

Car analogy to explain old browser support

I constantly look for ways to explain to non-technical people the daily challenges I must face and decisions I make. I like using analogies. One of the biggest ones I face where I work currently is the support of out-dated browsers. (more…)

Misc Web Design

Ubuntu: lightdm login manager does not display properly on boot

When I installed Ubuntu 11.10 and 12.04, I had the problem where the terminal would boot up until it said something about checking battery state, and then freeze. If I flipped to a different terminal, I could sudo launch lightdm - and then login on the first terminal. Obviously, this wasn’t my first choice in fixing this, though. (more…)


Theoretical Thoughts on Data Object Validation

One of the things I struggle with is the validation of data objects. I submit that there is such a thing as a dumb data object and a validation domain object. The validation object could also be some sort of helper or a service I guess. But, the point is, that the main data object doesn’t have validation on it. It has coupled objects that provide that validation. (more…)

PHP, programming

Conway's Game of Life - In Javascript

Recently, someone mentioned to me Conway’s Game of Life was a programming challenge at a code retreat they attended. I had never heard of it so I went to take a look at the concept. It seemed like a cool idea. So, I decided to use Canvas and Javascript to create my own instance of it. This is just my first draft of it - so take a look. And, if I’ve done anything incorrectly,... (more…)

javascript, programming

Idea: Bible Verse A Day

I did a bit of looking for websites that will service a Bible verse of the day via email, and I did not like what I found. First, I felt that a lot of them were very confusing to use. It wasn’t immediately clear what you were there to do. I didn’t know where to put my email address, etc. Finally, after reviewing a lot of the copy right information with bibles, I wonder if... (more…)

Ideas for Websites

Should you use software you are making new again?

Lately, I’ve been working on the “2.0” of a very old piece of software in our organization. I rarely use this software - partially out of the pain caused to try to figure out how to navigate it and the associated slow user interface - and partially out of a different theory about new software development. Let me explain. (more…)


Using custom view scripts for Zend_Form in ZF1

To start out, I realize that a lot has changed in Zend Framework 2 regarding Zend_Form. I think there have been a number of interesting changes, but perhaps those changes weren’t explained that clearly either. But I digress. This piece is about Zend Framework 1.12.x Zend Form - and using view scripts for elements/the form. (more…)

zend framework

Twitter Book

This idea is about the concept of grouping tweets in a meaningful way. (more…)

Ideas for Websites

Lessons for Managers

I’ve been a manager before. I’ve lead teams before. However, it’s important to understand the difference between the title of ‘manager’ and someone who actually manages. This time around, I’ve been putting much more effort into managing, not just being the figure head. And, I’m learning things. I think these things not only apply to technology related teams, but teams in general. (more…)


Idea for Web Design Website

So I’ve been looking at some parallax plugins with Javascript and CSS3 animations… and it got me to thinking: I have a great idea for a web site design firm. (more…)

Ideas for Websites

A couple cool features of PHPStorm 5

As I’ve mentioned before, I’ve recently moved to PHPStorm. I’ve done a little bit of configuration and I plan to start using it more now. Here are a few things I really like: (more…)

IDE and Web Dev Tools

PHPStorm: My new editor

We’ve just migrated to the PHPStorm IDE in my team. Commercial licenses are $200, personal are $100. I believe that the investment was well worth it. If you’ve been following my entries, you know I have a love affair with Eclipse PDT. It has been hard for an open source programmer like myself to want to buy software. But, we did it. (more…)

IDE and Web Dev Tools, PHPStorm

What I look for in a code review

A few days (ok, a bunch of days) ago, someone asked me on twitter what I look for when I do a code review. Pretty certain I was tweeting that I was either… a) doing a code review or b) annoyed at doing a code review. heh. I thought for a bit, and I think I’ve distilled the list of things I look for. Now, mind you, I don’t set out with my checkbox list... (more…)

learning, professional tips, programming

Intelligently combining Javascript

One debate that the guys on my team have been having revolves around the combination of Javascript and CSS files. There are two schools of thought. The keep them separate and the BFF - Big Fun File system. There are pro’s and cons to both… but as with everything, one particular way may not always be the best - we don’t always have to stay in extremes-land. Here are some thoughts. Feel free to weigh... (more…)

javascript, performance

The point of custom exceptions

I tend to want to use PHP Exceptions when I can. But, I don’t just leave them as is. I tend to have a large custom exception library. These exceptions extend the base Exception class in PHP - that’s about it. (more…)

PHP, programming

Zend Framework ACL: Inherits Including

So one of the things that really bothered me about the Zend ACL implementation in 1.x was the inherits() method. It simply would test to see if the current role inherited the roles you were testing against. Well, what if the role WAS the tested role? Then it would fail. So, to fix that, in my own Application_Model_Acl implementation, I wrote inheritsIncluding(). (more…)

zend framework

Follow Through if You're Trying to Seduce a Developer

I remember a scene from A night at the roxbury where the less-than-slick brothers take some girls back to their room and have a problem closing the deal. One of them keeps saying pickup lines while he has the girl sitting on his bed. She basically says OK - we’re past this. He just can’t seem to close the deal - no matter how much she wants him to. (more…)



Idea: TrackThings.com. This website is made to track sales people and distribution of promotional materials. It was initially thought of as a way to track on-the-ground sales distribution. For example, if you had someone go to three businesses on one street, they could easily track where they went, and mark the interest for followup. (more…)

Ideas for Websites

Ideas Online

This idea is to create an idea repository. I started out wanting to make this website - and instead just decided to list my ideas on this blog. But, here goes. (more…)

Ideas for Websites

Zend Framework: Add HTML to form element label

By default, the labels of form elements in Zend Form are escaped. Sometimes, like in check mark boxes for Terms of Use, it makes sense to add some HTML to this. You can turn off escaping - but just be careful! (more…)

zend framework

jQuery Validator: Twitter username validator

If you use the jQuery Validation plugin, and of course, you follow an amazing PHP Programmer and now have twitter boxes on all your forms, you might need to validate it some day. I wrote this method for it. (more…)

javascript, jquery

Web Developers: Invest the time to create your page!

I’ve heard the argument so many times: “I’m just too busy to do my own website” This usually is followed by pleading statements leading to the fact that no one is paying them to do their own website - like their current workload is paying them. (more…)

business, Misc Web Design

DateTime: My new best friend

I have a new love affair… PHP’s DateTime object. I’m not sure when it started, but it’s going on strong now. If you haven’t taken a look at it, I invite you to run over there now and just look at the methods. If that isn’t enough, let me give you a bit of example code… see if this makes you really want to do it: (more…)


Create your application with \"overtake user\"

A couple years ago, I developed this concept I call “Overtake User.” Basically, in every application I build, I build in the ability for the currently logged-in support specialist or admin to become someone else. Now, this is different than just viewing the user’s information and records. This actually let’s the current user become the other user. This is helpful also for scenarios where the user is “seeing something strange” but you can’t see it.... (more…)

Misc Web Design, programming

Testing Error 500 Pages in Zend Framework

For the most part, ZF can capture any of your hard errors. It will generate an error 500. You’ve seen them, don’t lie… I’ve seen them way too many times. However, in my production application, I capture these with a specific controller. And because I love Unit Testing, I want to make sure that I test my implementation of my omg-this-is-broken setup. (more…)

phpunit, testing, zend framework

Store Zend Framework Options in the Registry

So, since I want to save some keystrokes, I rarely will go back to the Front Controller and Bootstrap to get resources. I also like to store them in the registry in a fashion that I see fit. (more…)

zend framework

Site profile: whatscloseto.me

Goal: Clever named site that shows local establishments close to your location. Was based on Google Ip location services. The thought was just for people to think ‘whats close to me’ and type that up. (more…)

business, Misc Web Design, site profile

The Importance of Adding Auditing to Your Applications

One of the things I learned while working at “The Triangle” was the “joy” of auditing. From their point of view, auditing was extreme. Think journaling and you have a pretty good idea. Now, when we talk about auditing, make sure to understand this is referring to change tracking and not vulnerability or fault detection. (more…)


Finished up WordCamp Milwaukee 2012

Really enjoyed my time at WordCamp Milwaukee 2012. Got to meet a lot of great people. I did a presentation on Secure Wordpress Coding. Feel free to download the slides. (more…)

Misc Web Design, wordpress

Employed Resumes vs Unemployed Resumes

There are two types of resumes out there: employed resumes vs unemployed resumes. Or that is to say bragging resumes vs qualifications resumes. There is a time and place for both… and mixing them up may not be in your best interest. (more…)


Keep your Admin Interface CSS Separate

There are a number of performance arguments about combining assets to reduce HTTP requests and speed up your site. I agree! However, I do have to say that there is such a thing as overkill - to the detriment of speed and security… (more…)

CSS, performance, security

PHPUnit Mock Objects: Only Mock What You Need

I was looking at mock objects in PHPUnit the other day and started to get confused. When I asked for a Mock object, the entire object was a mock. In all actuality, it wasn’t so much a Mock of the object but a complete shell of it. Each method needed to be defined. So, if I was testing an object that required three methods to execute, I would have to mock each method. (Yeah, some... (more…)

PHP, phpunit, Test Driven Development, testing

Translate Your Error Messages in Your Zend Framework Controllers

I’ve been making a push to have more of my projects multi-lingual. However, one thing I kept forgetting about was those super-rare error messages that have to come from the Controller. For the most part, all of your errors should be handled by your validators in your forms. However, from time to time, there needs to be an error handled in your controller. (more…)

Misc Web Design, zend framework

Site profile: thebetterbachelor.com

Goal: to create a bachelor cookbook and sell it to other bachelors online. The price of the cookbook was to be very cheap so that it wasn’t too much of a risk. The book itself was supposed to be picture rich and very verbose. It showed how to accomplish tasks that other books assumed a person knew. (more…)

business, Misc Web Design, site profile

Filtering and Validating Discussion

I came up with a great topic to write this blog entry about: filters and validators. Then, I got to thinking - maybe I can get more feedback from other programmers I know. I decided to send a note out to a few of my buddies and see what they thought as well. (more…)

business, programming, security

Service profile: mketweeps

Goal: I came up with an idea that I wanted to find local people in our area and mention them using a twitter bot. Pretty simple. Two requirements were they either had to use the word milwaukee in their profile or be from the milwaukee location, and they had to not have a blank profile. The tweet contained a shout out to their name and as much of their profile as could be fit in... (more…)

business, Misc Web Design, site profile

Extend Zend_Mail to use Views

I love working in the Zend Framework view system. One thing that bothers me, however, is that I must create a complex set of models when trying to send email. I decided that I’d like to move all of this output for the mail class into my own view system as well. (more…)

testing, zend framework

Site Profile: honorarybrother.com

Goal: to create a site serving females that felt a specific male in their life deserved positive recognition. Then, to monetize the recipient from one of two targeted ads. (more…)

business, Misc Web Design, site profile

Site Profile: name-tag.me

Note: I have shut down name-tag.me. These notes were taken before I pulled the plug. (more…)

business, Misc Web Design, site profile

Site Profile: amazondiscount.me

The goal was to use links that Amazon provided themselves to showcase categories and percentage discounts with my affiliate tag. The thought was a clean interface would easily encourage people to click a discount of say 90% but send affiliate contributions my way. (more…)

business, Misc Web Design, site profile

Removing the extra elements on Zend_Form for Submit Button

Have you ever used Zend Form, created a submit button, and had a few extra tags that were just throwing you off? I know you have… You probably did it like me: $this->addElement('submit', 'submitbutton', array( 'ignore'=>true, 'label'=>'Submit This', )); (more…)

zend framework

Read Something Else

Many years ago, a business mentor of mine told me that I should “read something else.” I didn’t know what he meant so I asked for more. He said I should go find some biographies, some history books, etc, and read those before I go to bed. He said it would not only expand my mind and show me that my problems weren’t that bad. He also told me it would increase my vocabulary. Well... (more…)

business, professional tips

Don't Always Lead: Sometimes Just Be Great

What is the measurement of a good career? Promotion? Raises? Running a project / leading a team? Usually all of this. However, the most traditional measurement of success in a career is moving upward. Time to run a department, time to lead a team, etc. However, I submit a very radical idea: Sometimes just be great, don’t lead. (more…)

business, professional tips

Zend Framework Use Filter with Paginator

By default, when using the Zend Paginator, the result set will come back as an array. If you are using a paginator associated with a database result set, and that db has a class defined for its row, it will come back as that class. However, if this is not the case, or you are not using information from a database, you may still want a different result than just a plain array. (more…)

zend framework

When writing unit tests, test against absolutes

So, while chatting with one of the developers on my team, we started talking about testing an XML document creation process he had been working on. He wrote a unit test and said “see, here is my class which generates the XML, and then here I use DomDocument to add the nodes I know it will have and test against that.” (more…)


Creating a custom Zend Framework Body Script helper

It drives me nuts that the best practices with javascript that is not required for the initial rendering of your application is to be placed at the bottom of the document, yet frameworks (like Zend Framework) do not support that out of the box. (I recently found out that Joomla also shares this problem.) (more…)

javascript, zend framework

Split Read/Write Connections in Zend Framework Database on the Application Level

I’m no sys admin, so I can’t be sure, but I’ve seen lots of issues with using things like MySQL Proxy to fully separate the write and read queries in an application. Maybe it works, I don’t know… but I do know that if I can separate the connections in my code, that saves my Admin time… it doesn’t appear to give that much of a hit to performance either! Do keep in mind that... (more…)

mysql, zend framework

Zend Framework Static Router URLs Not Found in Zend Navigation

For a CMS I’ve been working on, there are a number of custom routes that are added statically in a loop. These point to specific ID’s of articles on on the default module’s page viewing controller/action. Sometimes these routes need to appear in the Zend_Navigation output. As you can probably guess, the logic used for this is similar to what you might experience when using the URL view helper. But, for some reason, I could... (more…)

zend framework

How to Quickly Mask a Credit Card Number

So, often I have to show a masked credit card on the screen. However, I really want to go the extra mile and show the user a secure, fully masked credit card number that still reflects their original card. For example, if their credit card number is only 15 numbers long, I shouldn’t show a 16 character long string. So, I’ve developed this code snippet: $cc='1234123412341234'; $masked = str_pad(substr($cc, -4), strlen($cc), '*', STR_PAD_LEFT); (more…)

PHP, programming

Running PHPUnit on Remote System from Command Line

If I need to run PHPUnit on a remote system against a code suite, I will write a simple shell script like the following to do it for me. (Bonus points, you can even include this as an External Tool in eclipse to do it right from your project). ```bash #!/bin/bash (more…)

Eclipse PDT, phpunit

Mod Rewrite to index.php file, the easy way

How many of you have written this before (or something very much like it): RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] (more…)


Add PHPUnit Listeners to Watch for Long Running Tests

One of the under-utilized features of PHPUnit probably is the listeners interface. You can see the configuration options here: php.net/appendixes.configuration.html. So, I decided that I want to use this to know if a Unit Test takes longer than 2 seconds to run. That’s super over-kill in my opinion, but that’s my hard limit. If it takes longer than 2 seconds to run, something is wrong! So, I added the following to my configuration: (more…)

phpunit, testing

Setting PHP Command Line Colors

I’m not entirely certain why this escaped me for so long, but it’s remarkably easy to set terminal colors with PHP. Simply echo the escape/color character \\033, followed by the bash color definition and your output. For reference, here is a listing of bash colors. So, for example, if we want to make something blue text, do the following: (more…)


When you Create Your Account, Please log in.

I’ve always found it annoying when programmers create systems where you create your account and then you’re not logged in. Maybe I’m lazy? I decided to do a poll on a popular social networking site. The poll went like this: (more…)

Misc Web Design

Zend Framework Authentication: Let the user know if it is their fault

One of the things that is irritating is logging into a website with credentials that you know are right, only to have it fail. Then, later, you find that the site was malfunctioning. By then, maybe you requested a new password, or had to at least waste time looking up your old password. With Zend_Auth, however, we can prevent user’s from having that issue. (more…)

zend framework

Presenting at Joomla Day Midwest

Hello all. It’s been quite the long time since I updated my blog. I know, I know, this is a huge problem, considering this is a cardinal sin according to my talk at MKEPUG about getting job offers. That was wrong, I know. However, things have been pretty busy. Let’s see… (more…)


Service Class Methodology

There has been a lot of discussion on forums and throughout the object oriented PHP programming community about service classes. This is just intensified by the Zend Framework model of development coupled with the changes in their design/architecture and vocal spokespeople. I thought I’d throw my hat in the ring for this. (more…)

programming, zend framework

Zend Framework Front Controllers vs Bootstrap: Round 2

There was some discussion on Twitter regarding the original version of my article about putting most of your site’s setup in the front controller plugins in Zend Framework. However, I haven’t seen a lot of real reasons except for “that’s what the example says” or “this is how I feel.” These suggestions I have are based on performance and logical reasons. However, I could be wrong or maybe I was unclear. So I did a... (more…)

zend framework

Testing Outgoing Email with Zend Framework

I was creating a new application with Zend Framework at work the other day and I started using my technique that I described here by adding the original email in my email address using the + sign. However, the current organization I’m at has a mailserver (Exchange?) that is either configured not to allow this or just doesn’t have this functionality built in. So, this won’t work. I solved this with a new implementation of... (more…)

testing, zend framework

Adding Subdomain Routes for all URLs in Zend Framework

All the examples I’ve seen for pulling information from subdomains are from the hostname router directly correlating one subdomain as a value to a single controller/action combo. This means they map username.website.com to something that basically looks internally like website.com/user/profile/var1/username. This is cool for simple one off tasks - however, what if you’re creating a multiple controller/action solution? For my example, I’m creating a CMS that will have a shared code base. However, on every... (more…)

zend framework

Zend Framework: to include or not to include

There are two ways of working with Zend Framework as a library in your project. These are including it in your project repository and using a shared copy on the server (like PEAR). Let us discuss both: (more…)

zend framework

Forcing UTF-8 in Zend Framework with PDO

For some reason, I just had the most horrible time making sure that my connection from my Zend Framework code was speaking UTF8 at my database. Here are the key things to remember that I learned: (more…)

zend framework

Useful Firebug Tricks with Zend Framework

Zend Framework has a few hooks with the Firebug browser plugin (with the FirePHP add-on). The two that I use are writing logs to the console and profiling of database connections. (more…)

zend framework

Easy Flash Messenger Messages in Zend Framework

Through reading a few blog posts over the last year and my own trial and error, I’ve developed a way of using the flashMessenger Helper in ZF that works out really well for me. (Note: if anyone knows the original blog post that I got some of the view helper from, please comment!). (more…)

zend framework

Zend Framework View Helper for QR Codes

Google Charts has a QR code generation service (here are the details). I decided that I wanted to create my own ZF View Helper to display these on my pages. This version that I am going to show just returns the properly formatted URL for the charts API. The view must create the img tag around it. (more…)

zend framework

PHPUnit error with Zend_Session

Running a test, I ran into this error: Zend_Session_Exception: Session must be started before any output has been sent to the browser; output started in /usr/share/php/PHPUnit/Util/Printer.php/173 (more…)

phpunit, zend framework

Zend Framework: Bootstrap vs Front Controller Plugin

Today I was reviewing some old code I wrote in Zend Framework. One of the things I was doing in the Bootstrap.php file was creating an function called _initViewSettings(). In here I set a bunch of values for the xhtml version, the css files to include, etc. Now I realize my mistake: (more…)

zend framework

Theme/Template System in Zend Framework

Theme systems are very common in projects written on Drupal, Joomla, and Wordpress. I didn’t see much out of the box support for themes in Zend Framework at first. However, I was wrong. It’s pretty easy. The only real decision I had to make is if I want to make themes that extend a default theme - or themes that are simple and on their own / totally encapsulated. I will do the encapsulated version... (more…)

zend framework

setTimeout proper syntax

The javascript function setTimeout can be used to execute a function after a specified amount of delay. It uses the javascript callback pattern. Its important to use the callback pattern correctly, however, or you may get different results than you expect. One example of this is the immediate execution of a function versus the callback execution. Note this example: (more…)


Remove .svn folders from Eclipse Project Explorer

It had been irritating to me seeing the .svn folders littered throughout my project workspace. In addition, they all show up in the search results… this can be irritating with the svn-base files that show the old version of the file before a commit. (more…)

Eclipse PDT, IDE and Web Dev Tools, svn

Why IP Authorization No Longer Works on Web Apps

The last time someone brought up authorizing certain actions by IP address - or I should say, limiting the amount of actions that can happen by one IP address. I brushed that off without a second thought. It didn’t occur to me until later that the original owner of that idea may not have known all the reasons why I know this isn’t a good idea. So here’s a quick rundown: (more…)

Misc Web Design, programming, security

Count lines of code in Eclipse

When searching for how to count the lines of code I had in my project, I ran into this blog entry. While its a good start, it still gave me some inaccurate counts. I was getting inflated counts because of new lines. So, here is my alternate solution: (more…)

Eclipse PDT, IDE and Web Dev Tools

Scoping your Bookmarklet Correctly

I’ve been lucky so far. I’ve used variable names and functions in my bookmarklets that weren’t that common. Then, one day, I chose a variable named something very common (x, counter, etc). I noticed that my bookmarklet accidentally overwrote some properties in the current page. Now, that could be benefit - you could want your bookmarklet to update/manage variables in the current page. However, most times I believe we don’t want that scope overlap. (more…)


I was thinking about how difficult it is to create custom links for our campaigns at “the big L” - so I decided to create my own function to build these. To top it off, I’ll make it a bookmarklet. The best thing about it is that it will bring in the current page and put that inside of the bookmarklet in the case you want to build the link right from the page you’re... (more…)


PHP Doc for non declared properties in your class

You may find while working with projects like Zend Framework that you have a number of publicly available properties of your classes that are not defined and documented. They might be part of a getter/setter magic method or just purely dynamic. Well, using PHPDoc, there is a cool tag called property that helps. For example… (more…)

Misc Web Design, PHP

Facebook connect: An unknown error occurred. - but why??

I had been working with the facebook connect javascript API on one site and transferred over the code to another site. I changed the app ID and clicked connect. Every time I got a popup saying an unknown error occurred and they were taking a look into it. (more…)

Misc Web Design

To WWW or not to WWW

I run into this question a lot. Should my website have www in the domain name. Should I be going to aaronsaray.com or www.aaronsaray.com?? That is to say, which should be the default home page domain? Let’s discuss… (more…)

apache, Misc Web Design, performance, programming

Solving the Problem, Not the Solution

Raise your hand if you’ve ever been told how to do your job… Yep. It’s happened more than once - and I’m sure you already had a flash of red and maybe some warmth come to your face even hearing that phrase. In my current position, I run into scenarios where people seem to think they have the best solution for the problem. And, you know, they may be right, but it’s not their job.... (more…)


Zend_db fill in multiple placeholders

I’ve been using Zend_db to create a query which does a simple search on three columns of a table. Fortunately, I found out that the where() statement handles single parameters intelligently when there are multiple placeholders. In the case that there are many placeholders but only one parameter, that parameter will be added to each of the placeholders the same. (more…)

zend framework

jQuery Validation - greedy on your forms?

I was creating a page with two forms on it. I ran into an issue where I would fill out one form, and it would fail validation. Then, I tried to do the other form with passing fields, and it would keep invalidating the previous form on the same page. (more…)

javascript, jquery

My Meetmeme card

I received a set of cards from meetmeme.com. In addition to my cards, they also provide the following URL: http://mtme.me/c89ab (more…)

Misc Web Design

Fix: FirePHP not showing output in console in Firebug

When using FirePHP, I ran into this issue where I could not see the output of the debug information. All the documents I found kept suggesting that I had not enabled the Console tab for this particular site. (more…)

IDE and Web Dev Tools, Misc Web Design

Object Cache Class in PHP

While I’m infinitely happy that all uses of a class in PHP now are references, that’s just not good enough. Sometimes I want to use my newly created object in many different methods. I have two options. First, I could create it as a Singleton, and always call the instance getter. Or, I could use an object cache. (more…)

PHP, programming

It's not shameful to cut your losses

One thing I’ve learned about the entrepreneurial spirit is that it leads to failure. With figures as high as 90% of businesses fail, this is something you have to get used to. Even leaders like Robert Kiyosaki mention that knowledge is what makes money - and that knowledge is gained by failure. You’ve heard the sayings before, learn from your failures… (more…)


3D walkthrough in Basic

Just had a blast from the past… found this a while ago. This was a program I wrote way back in the days of Basic. It was a basic 3D walk through. ' Added speed routines and antiflicker and take away waits. ' 3rd generation program ' ' 'Here's my take on the doom.bas program that was posted here a while ago. 'It's much clearer and more organized and a bit faster as well, I... (more…)

open source

IEStandards.xml requests

The other day, I saw some 404 errors for the file IEStandards.xml in my error logs. After a little research, I found some links here and here that lead me to believe that I had done something wrong. Let me explain… (more…)

internet explorer

Change the @author tag default in Eclipse PDT

When creating a docblock in Eclipse PDT, if commenting is enabled, a template is inserted. This template references the $user variable which is usually set to whichever user you are logged into your machine with. You can change this variable on the command line every time you launch Eclipse if you really wanted to: eclipse -vmargs -Duser.name=\"Aaron Saray\" (more…)

Eclipse PDT

jQuery show password toggle

More and more people are requesting that their passwords not be masked - or that they have the option to toggle them. If the visitor is using Firefox, this has been a relatively easy feat. Simply add a checkbox and change the input type on click. However, in “secure” browsers like IE, yes the security of Internet Explorer, won’t allow you to do this. (more…)

javascript, jquery

Easiest Form Token class to prevent CSRF

So, if you’re not familiar with CSRF, check out this blog post about AJAX Security. Some of the steps talking about Cross Site Request Forgeries will help you understand the problem. (more…)

PHP, security

Combining Print and Screen CSS

When running YSlow the other day, I was reminded that I was loading 2 stylesheets when only one would suffice. So, let this be a reminder to you - and a quick excerpt at my own solution: (more…)

CSS, Misc Web Design

Removing WWW - just not for SEO

I used to think that I had to remove the WWW from my URL’s to stop having duplicate content. For example, if my website The Better Bachelor were to respond at both www.thebetterbachelor.com and thebetterbachelor.com, it used to be thought that this duplicate content would lower your search result quality. This would result in duplicate content. (more…)


Modifying Clickheat to use your authentication

A nice free open source alternative to Crazy Egg is ClickHeat. One of my clients wanted this implemented but didn’t want to have to log in again using different criteria. I looked at the code and saw it was surprisingly easy to edit to allow a different authentication method. Let’s check it out: (more…)

PHP, web tools

How I test email recipients when I develop

When developing an application, there are usually various different environments that you run the code in. First is the development environment. Next, you have the QA or test environment, staging, and then live or production. It stands to reason that if you are using outgoing e-mail in your application, and your application is in production, it should send to the proper recipients. However, what do you do in testing and development? (more…)

Misc Web Design, PHP

Easy MCrypt encryption class

For whatever reason, I can never remember the exact coding of MCrypt. And maybe that is a good thing - so I stop doing so much code duplication and start using a class I wrote. For this reason, I’ll save you the same frustrations and share how I do my encryption. (more…)

PHP, security

SimplePHPMailer: now with required fields

SimplePHPMailer - my open source plug-n-play emailing script for PHP newbs - has been updated. It now has required fields - no more blank submissions! Check it out here with the updated download link. (more…)

open source

Hide Email Addresses while still using mailto: Header Redirect

Everyone I’ve spoken to recently no longer puts mailto:// links in their code for fear that the owner of that address will get more spam. However, there are still legitimate uses for a link like this. In order to foil very simple email parsing bots, I’ve come up with the following script. (more…)


Facebook Message System - in PHP

Update: I’ve gotten a lot of comments on this code. This was a simple proof of concept at the time when Facebook was creating messages like this. They no longer do it in this manner. I also am not supporting any updates to this code. Thanks for your interest! (more…)


A Better Milwaukee

Artsy? I know - this is a bit non standard of a blog post for me… but bear with me. :) (more…)


Using Google Charts to make QR Codes

Google Charts is my hero yet again. This time, I happened to notice that they have a chart in their API for QR Codes. Considering I was just searching google for a PHP class to do this, I was pretty ecstatic. (more…)

javascript, jquery, Misc Web Design

My NonDisclosure Promise

As you may remember, I wrote a piece about why I do not sign any NDAs here. I’ve had some time to reflect on that entry, and I want to move forward. I want to give any client I work with my new “promise” - the Non Disclosure Promise. Let me tell you a bit more why I choose not to sign NDAs, and what I can offer you instead. (more…)


Time off for B-day is done

Normally, I’ve been trying to release a new blog entry every Tuesday. I took this last week off to celebrate my birthday. Tomorrow should restart the grind. :) (more…)

Misc Web Design

Restrict your .git directory on live site

Do you use Git to manage your repository? If so, do you use it to check out code onto the server as well? If you do, you really should restrict access to your .git directory if it’s in your public root. (If you’re using things like Zend Framework, chances are your root directory is not your public directory, so you have less to worry about.) (more…)

git, security

When uniqid is too slow in PHP

I just profiled some of my code and found out that the biggest chunk of my processing time was used by uniqid(). I use this to generate form tokens to prevent cross site request forgeries. On one page, I have 6 forms each with its own unique uniqid(). (more…)


Using ApacheTop with Cronolog

I love ApacheTop. I love Cronolog. After I installed cronolog and used it in my apache configuration, however, I found it more and more difficult to use apachetop. I stopped using it. Well, I finally came up with a bash script that eases my frustration with calling the proper path names for apachetop. Check it out: (more…)


How to Log PHP Errors like a Pro

The error log can be fun to parse through and figure out what happened. Ok, so if you just read that and agreed, you need to move on. This is not for you. That’s not fun. However, you CAN make error gathering easier on yourself by including the right information in the error log. To top it off, you can present your users with something that is a bit more ‘friendly’ than the standard error... (more…)


Disable Jquery From Loading In Custom Wordpress Template

On the rest of my site, I load jQuery from the google cdn. However, wordpress likes to load it from the local cache using wp_enqueue_script(). I didn’t want to delete the jQuery file it was loading because a) that would be wrong, b) it would still have to make a 404 call to the server, and c) the admin section uses it I’m sure. (more…)

jquery, wordpress

Twitter @anywhere proof of concepts

First off, let me just remind you to not be an idiot like I was. I simply found the documentation here and here and went to town. After hours of trying to figure out exactly what was going on, I stumbled across some very interesting comments in the news group: The @anywhere api is not in chirp_preview anymore - but its not done either. So some of the stuff won’t work - and that wasn’t... (more…)

javascript, twitter

Use your own short domain while waiting for BitLy Pro

If you’ve checked out BitLy Pro, you’re probably pretty excited like I am. I saw it and immediately registered saray.me for a short URL. When I went to sign up, I found it was still in a queue system where you had to wait to get an invite. In the mean time, I still want to start using my domain. (more…)

javascript, Misc Web Design

Branding your Tweets using @anywhere tweetbox

With Twitter’s new @anywhere features, it’s now possible to brand your tweets from your own web page. While I still like using Tweetdeck or Seesmic for my actual interaction on twitter, I have started tweeting a bit from my own web page as well. (more…)

javascript, twitter

Load Facebook Fanbox Faster by Caching it

I wasn’t in favor of the Facebook fanbox on the site I was working on… but that’s what the client wanted - and that is what they get. I added it and moved on. Well, later, I started noticing a bit of errors in my Javascript Error log. I looked back at the newest edition: the fanbox. Depending on where I was connecting from, that box would take another 3 to 20 seconds to load.... (more…)

facebook, PHP

IE6 warning on site

So I got permission at the beginning of March to add an Internet Explorer 6 deprecation message to one of the sites I’m working on. (more…)

jquery, Misc Web Design

Fixing c:\\fakepath in filestyle jquery plugin

The other day I ran across an issue with the FileStyle jquery plugin. Whenever a new file was chosen, windows and Internet Explorer would put c:\\fakepath\\ before the filename. Turns out its not FileStyle’s issue - but a security feature of Internet Explorer. (more…)

javascript, jquery

Aaron on NDAs

From time to time, I get approached with a new project from an excited business person. They are just bursting to tell me all about it, to see if I can help them out (or even make it for them), and looking for some clarification on their next steps. This inevitably is hindered by my reluctance to answer their first email. You know that email. The one that includes the attached Non Disclosure Agreement. (more…)


Javascript and CSS Compression and Cache

I’ve been researching caching and compression techniques for my external resources for some time. My first design of JEMDiary was very greedy with HTTP connections. Couple that with having a less-than-perfect host (Dreamhost bleh…), users could feel the burn. I didn’t like it because it would even take ME forever to use my own website. I went on to discover many different key points I use when creating sites now - the Steps to Optimize... (more…)

CSS, javascript, Misc Web Design

How about profiling your mysql queries... later?

So the other night I was thinking about using xdebug on my PHP code. I then totally had a brain explosion: I’m always forgetting to profile my MySQL queries. explain is a great command for this. However, as the lazy programmer I am, I don’t know if I’m always going to do this on all of my queries. In an attempt to save myself time, I started brainstorming an idea. (more…)


Exploring MySQL in Eclipse PDT

As you probably know by now, I’m a huge fan of Eclipse PDT. Well, I wanted to stop using MySQL GUI tools for a bit and explore Eclipse tools. (more…)

Eclipse PDT, IDE and Web Dev Tools, mysql

Milwaukee PHP Users Group

I started the Milwaukee PHP Users group a few weeks ago. Unfortunately, today we had to cancel a meeting because of the outpouring of snow… but it’s on for the 4th tuesday of the month. (more…)

Milwaukee PHP Users Group

XFN - XHTML Friends Network

While I continue to look at the semantic web, I can’t help but scratch my head and say “why” about some of these technologies. I feel like its still sadly lacking… with that, let me introduce… (more…)

semantic web

hCard - should I care?

So lately, I’ve been looking into the semantic tools available on the web. I want to make sure that my online identity is easily searchable and undeniably accurate. Using semantic tools such as XFN, FOAF and hCard may help me. (more…)

Misc Web Design

document.URL vs document.location.href

When reviewing some javascript security ideas, I came across the document.URL property. Turns out that my normal way of retrieving the location (document.location.href) is both a getter and a setter. The document.URL is just a getter. (more…)


Protect Your Image from Download

I came across a great idea dealing with protecting image downloads from the site. Now, this is not fool-proof. There are lots of other ways to download the image, but this may stop the casual downloader. Nope, its not disabling the right click or using java. It requires one single transparent gif. Let’s see how. (more…)

CSS, html, Misc Web Design

Javascript Snow Fall with buildup

Mr. Skowron (his business) was working on a flash animation for a client that had a snow fall. What really irked me about the end result, was two things. (more…)


Auto Failover for CDN based Javascript

Using my javascript error reporter code helps me get a better understanding of what my clients are experiencing when visiting my website. One thing I did notice was the failures from time to time of Google’s CDN based jQuery. (more…)

javascript, jquery, Misc Web Design

Block and Allow IP with iptables - simple script

As most developers are lazy, I’m a huge fan of scripts. I’ve found myself lately having to add entries to iptables to block a single IP or a small subnet, so I made a quick script to make the job easier on myself. (more…)

linux, scripting

Printing a small segment of the page using JQuery

Using Yahoo’s Grid Tools, I created a pretty decent page layout. After all this was complete, I needed to generate a printable version of only a portion of the site. This was a particular set of instructions. I decided to tackle this with JQuery. (more…)

CSS, javascript

JfbConsole - chainable Firebug Console jQuery plugin

I find myself wanting to document various different attributes mid development on my jquery code. I have created the following function to help use FireBug’s console access code effectively in the jQuery fashion. (more…)

javascript, jquery

Twitter live search updates page

I decided it would be kind of cool to make a page that combined a bunch of twitter hash tags or just tweets in general. Here are the details… (more…)

javascript, twitter

chaining methods in PHP

I rarely find myself needing to chain methods in PHP - but its not an altogether bad idea. The only caveat that is necessary is that your code must be written in such a way that a method can fail, but other methods can still continue. For example, you couldn’t have one method return false… that would break the chain. You also couldn’t have a method depending on the actions of the previous method to... (more…)

PHP, programming

Firebug for Internet Explorer

During the creation of my websites, I develop solely in Firefox. When it comes to testing, I run it through IE tester. One thing that I really miss is my Firebug. (more…)

IDE and Web Dev Tools

Email to SMS/TXT address list

The website http://www.emailtextmessages.com/ keeps a database of most of the email addresses that correlate directly to a txt for mobile phones. However, their version is in HTML - and I see no feed. I’ve compiled the list into a CSV file so that its easier to use in programming. Do visit their website and click on an ad to support their hard work. (more…)


Moving files from one webserver to another using PHP script

A while back, a colleague mentioned to me that he was moving his site from one webserver to another. He hated having to FTP everything down, then reupload it. Invariably, we’ve all done this - and forgot to apply proper file permissions, etc. (more…)

PHP, web tools

Photoshop Touchup

So I tried my very first photoshop touch up of a girl I found online. Turns out she was used for a photoshop tutorial about the same concept. I used my own process however. (more…)


Send email from server to gmail using postfix

The other day I ran into this problem where postfix insisted on delivering mail… as it was supposed to do! As it was configured! But this isn’t what I wanted. Let me explain what was happening: (more…)

email, linux, postfix

Unknown function _popupControl()

In my Javascript Error Handler post, I discussed how I track user and client side errors. Recently, my error logs became inundated with tons of javascript errors. The function _popupControl() is undefined. After a little googling, I found out that the CA Personal Firewall is responsible for inserting the following code into every page: (more…)


Javascript error handler

A while ago, I saw a website that provided a javascript error reporting service. You implemented some code and then they would send you reports on javascript errors on your site. I thought, this can’t be that hard. So I went to work to create my own. (It’s now used on this website as well as some political website I’ve worked on recently.) (more…)

javascript, PHP

Trim down your content - it is a MUST

A while ago, I was reading a usability book - and the author suggested that every time you create your content, remove half of the words. Then remove half of them again. So, by the time you’re done, you really have 1/4th of your content - and it should still make sense. (more…)

Misc Web Design

Scanning for Unfiltered Content Automatically with PHP

A friend of mine posed a question: Do you know of any good PHP based vulnerability scanners? I told him I did not (add any in the comments, if you know! :) ) - but it wouldn’t be that hard to build one. He asked me to give him a code example, so here goes: (more…)

PHP, security

Display unix timestamp in a date format in MySQL

Every once in a while, I forget about the built in awesomeness of MySQL. Today, I was looking at a unix timestamp from PHP in one of the fields and was wondering what that date was. Derr, use from_unixtime function! SELECT from_unixtime(dateField) FROM tableName; (more…)


Figuring out Price Before Tax

A lot of the time I give quotes including taxes. Every once in a while, someone is curious about what the tax is on a service. (more…)


Launch Screen Automatically

Because the internet in the Crown building is as good as… well my parents 19.2K dialup - which drops pretty much every 5 minutes, I’ve had to use GNU screen extensively. (more…)


Elgg Plugin: Friend AutoComplete Box Replaces Select Box

One of the most irritating things to me about the Elgg messaging plugin is the requirement to choose my friends from the select box. This SHOULD be generated using the input/pulldown view in Elgg. Unfortunately, they are doing it by hand. However, I’ve patched my plugin to do it using the proper view. Then, I wanted to have an Auto Complete type box to choose a friend. With JQuery I was able to do this.... (more…)

elgg, PHP

Enabling Javascript Specific CSS

While reading the blog post about Enabling Javascript specific CSS and the comments, I started thinking about my own ways to implement this. And how to do it validly. (more…)

CSS, javascript

Elgg Development Tools - Elgg Plugin

After working some with the open source Community building application Elgg, I found some settings to be irritating. I had to keep hacking my plugins to get these settings activated the way I wanted. Also, I really wanted to put useful settings in the same location. (more…)

elgg, open source, PHP

Remove Internet Explorer Button Border

Internet Explorer provides an additional border to any button element in the page if you don’t explicitly assign a 0px border to it. I have a bunch of buttons on a design that I’d like to have a 1px #fff border on. Unfortunately, with the additional border that IE adds, it looks horrible. (more…)


Eclipse PDT2 won't jump to functions/classes on ctrl-click: solved

I am using the new PDT2 based off of Eclipse 3.4. The one thing I noticed as an issue for me was the building. I created a project based off of a checkout using SVN. After I had built the PHP project, I could not ctrl-click any of the functions that were part of my project. It just wouldn’t find them. (more…)

Eclipse PDT

Why the Boss makes YOU make a List or Proposal

From time to time, I’ve been asked to make a list of my design ideas, or to develop a better proposal for an idea I have. This really irritated me: didn’t he believe me? Didn’t he trust my ideas? But in the constant battle to become a better businessman, I’ve taken a bit of time to think about why this happens. He’s not out to get me, right? Yours isn’t either. Lets take a look... (more…)

professional tips

My Progression through Forgot Passwords

I thought I’d take some time to look at the 3 main ways that I’ve handled forgotten passwords on my websites, why I did them that way, and if there was anything wrong. (more…)

PHP, programming, security

Disable md5 now - or you will die

I remember a while ago hearing about a few theoretical collisions of the MD5 algorithm, but I thought nothing of them. Now, as more information emerges, Microsoft is issuing advisories, and people are proving more and more collisions with example code, and even md5 is out of vista, I figure its time to remind everyone not to use MD5. (more…)

PHP, security

Password Complexity Class

After many times of coding relatively the same thing, it becomes prudent to have a standard library for certain sets of processes. Of course - that is why there are things like frameworks! At any rate, one of the biggest things I run into is password complexity. Each website has its own requirement for the security they want to implement. So, let’s talk about the requirements and then look at the code: (more…)

PHP, security

Trac Bookmarklet: load ticket number easily

While communicating with other coworkers, they generally just give me a trac ticket # and not the full URL. And, as a lazy programmer, I hate typing in the full URL or loading up trac and searching the #. So, I generated this bookmarklet. Replace the url with the root path to your trac instance. Finally, create a bookmark and put the following content in it: (more…)

IDE and Web Dev Tools

Bookmarklet: Wage Calculator

While searching for employment, I realize I can’t be super picky - but my household does have needs! Because of this, I’ve developed a quick calculator / bookmarklet for the browser that I thought I’d share. It allows you to enter a yearly or hourly amount, and it shows the corresponding amounts. This tells you if that salary posting fits within your needs. (more…)


Eclipse PDT: Integrating Apache Bench for load testing

When I use an IDE, I expect for it to do everything I need for my project, from start to finish. As you may have read in earlier entries, I enjoy using Eclipse PDT. I think its time to include load testing into my arsenal of tools inside of eclipse. I’m going to focus on apache’s AB for this article. (more…)

apache, Eclipse PDT, IDE and Web Dev Tools

HTML 5 and Me - Draft 10 thoughts

I thought I’d ramble on a bit about my thoughts on the HTML5 differences from HTML4 draft from working draft 10 in June 2008. You can find it - or the newest one - here: html5 diff. (more…)


Dialing Phone Numbers from a Webpage

I’ve recently been investigating making some better mobile accessible pages for some of my projects. I’ve seen pages that allow you to dial a phone number directly from the webpage - so I thought I’d investigate… (more…)


PHP.ini creator

While listening to someone complain through twitter about their MySQL conf file, I came up with a cool idea: what if I created a PHP.ini creator that would suggest changes to your php.ini file as well as generate an updated version? (more…)

open source, PHP

PHP and the UUID

I’ve been thinking more and more about having unique ID’s - especially with working with larger datasets - and I thought it was high time that I investigated the UUID. (more…)


Eclipse PDT - Include Paths

When troubleshooting a different problem the other day, I re-entered the world of eclipse include paths. For those of you who are not familiar, the eclipse include path is located as the last option of a eclipse PDT PHP project. (more…)

Eclipse PDT

How custom passphrases/pictures still don't protect against phishing

As you probably remember, I have lots of interest in phishing techniques (I talked about one here, and preventing them here). I’ve noticed a new trend: a dual stage login form with a custom picture or passphrase. Users are to gain trust in the login page because their custom configured option is displayed. The more I started thinking about this, however, I kept seeing an issue - this still can be easily phished! I’m going... (more…)


Understanding the Observer Pattern in PHP

For a while, I’ve been looking at plugin systems, but not really fully understanding the pattern behind them. Don’t get me wrong, I see how they work, but I didn’t know the reason why - the theory or pattern behind it. Well turns out, generally, they’re based upon the observer pattern. I decided to write my own observer pattern demonstration here. (more…)

PHP, programming

How to throw an AMAZING meeting

I’ve been to far more meetings than any one on earth should ever have had to by the time they’re 25. With that experience, however, I can start to pick out key points of running a great meeting or demonstration. I know this is a different type of post for this blog, but I think its important. There may be times that you’re called on to conduct a meeting or demonstration, as a technical resource.... (more…)

professional tips

Name CSS Classes More Descriptive

One thing I remember being pounded into my head is to not create CSS classes after their physical attributes. So, for example, if your error text is red, do not call the class red. Instead, be more descriptive of the content. (more…)

CSS, Misc Web Design

Firebug for IE?

Now you can start accessing some of FireBug’s great features in other browsers, like Internet Explorer. (more…)


How desktop.ini saved me from myself

When working at “the triangle” we used junction points on windows to link to repositories that we needed to run the code base - but weren’t necessary for the project. (see creating junction points on windows with linkd.exe.) (more…)


array_merge is useful - but with a caveat

So, the other day, I saw a horrible thing. I saw two PHP associative arrays that needed to be combined into one, and the worst example of NOT using PHP’s built in functions to combine them. They weren’t using array_merge - instead they were looping through each value. (more…)


PHP SPL autoload: 3 simple rules you must follow

While working on a larger site that I may need to use many external libraries, I realized I need to come up with a better __autoload() function (for example, I think it was DOMPDF that had its own autoload function as well. Last time I used that, I had to hack my own autoload to use their code as well to locate files). I researched into SPL autoload functionality, and I’ve found what I need.... (more…)


CSS incompatibility finder

This is more of a proof of concept than anything else - as most of my scripts are ;) But, lets say you have some files that have css in them, either external stylesheets, internal one with style tags or even style attributes - and you need to update the browser support. Wouldn’t it be great to have a tool that could look through these files and point out that there are incompatibilities? (more…)


SVN Pre-commit duty: Lint your PHP

We’ve all been there before, committing code - and then realizing that it was broken (hrm - our unit test didn’t catch it? or… “what unit test?” if you’re in another environment). Well, there is a solution. (more…)

PHP, svn

Don't focus me, bro!

I hate filling out login forms to discover that half of my password is in the username box. Lets talk about why - and then a solution. (more…)

javascript, Misc Web Design

dtemplate: dynamic template system for static designed files

One of the biggest time wasters I deal with is parsing out static web designs given to me by designers. They don’t know programming, so they design it with static HTML in mind. Even if you’re using a tool like dreamweaver, updating static pages can be a hassle. Then, a lot of times, they have to remove their ‘lorem ipsum’ text and send it to me - and then I continue to chop it up.... (more…)

Misc Web Design, opensource, PHP

Automatic Backup with SVN on Windows

A while ago, I decided that I needed to have a better backup solution for my file server. After doing some research on various systems, I let my inner programmer take over - in addition to my desire to NEVER LOSE ANYTHING - and I defaulted to use SVN. (more…)

scripting, svn, windows

Does your design leave an unknown size gap? navigationFiller.js!

If you’ve ever worked with a customer’s CMS pages and heard the term “Oh but I want some images underneath the links” - you need this script. Whether your using old style tables or the coolest CSS tricks, filling in space to the bottom of the page can be useful. (more…)

javascript, Misc Web Design

Convert from VMWare Player to VMWare Server

At superdev, we have a distribution of a gentoo image made with vmware workstation. This works fine in vmware player - but not the free vmware server - and I wanted to have vmware server running so I could have more than one server running on my windows laptop. Well, there are two small simple edits I had to do - and it was all good. (more…)

IDE and Web Dev Tools, windows

Useful Eclipse Plugin: Find a file name in project immediately

Unfortunately, at #superdev, there are times when the include_path in PHP is calculated. It is not always clear where to find a file. Other times there are just too many places to find the file. Because of this - and Eclipse PDT’s inability to find a file from an include or include_once statement when you ctrl click it, I needed to find a tool to find files fast. (more…)

Eclipse PDT, IDE and Web Dev Tools

What I believe MVC is - or MVCFDH

There are many interpretations of MVC - there are less definitions but more implementations. I want to cover what I personally do when using PHP for MVC. I call it MVCFDH. (more…)

PHP, programming

Don't forget about Class Constants!

Constants can be great. They can stand for things like web services keys, integers, flags, etc. Basically, anything that you aren’t going to be changing in your script - and most likely things that don’t change much outside of the script either. However, I’ve seen people use them in the global name space far too many times. A great alternative is the class constant. Lets check out some examples: (more…)


Adobe Air Log File Watcher

One of the biggest pet peeves I have is when errors are generated on PHP files between redirects using the header() function. Especially if they’re not a fatal error, you never get to see them! Also, missing files that hit the apache logs usually are not found later until you review the logs as well. I thought: wouldn’t it be great if there was a tool that would watch these log files for me? (yes,... (more…)

adobe air, log file watcher

Programming without E_Notice

Well, my boss at #superdev - who can only be compared to a more energetic version of the squirrel from hoodwinked asked me to start putting together some thoughts here and there on some proper PHP coding. I thought I’d start out the series with this article, Programming without E_NOTICE. (more…)


No More \"The Triangle\"

Well, I’ve officially resigned from “The Triangle.” Don’t worry, I’ve got a new place to keep bring experience to this blog. I look forward to my new opportunities. (more…)

Misc Web Design

JEMGames Launched

JEMGames has finally joined the 102 Degrees network. JEMGames is an experiment comparing the “successfulness” of a custom programed websites versus off the shelf open source PHP scripts. (more…)


PHP Script Configuration Class with Logic built in

Sometimes we have static configuration options, such as the name of the company or the location of a particular partner’s website. Other times, there are more dynamic configuration options - such as the current location’s URL or database connection credentials. (more…)


Dig for Windows

For those of us who develop on windows, we can sometimes feel linux tool envy. One particular tool is the dig command. Well, luckily, you can get this to run on windows easily: (more…)


PHP application plugins - force the interface

The other day I was experimenting with some PHP plugin scripts and trying to develop my own robust plugin system. I started thinking: how can I guarantee that a 3rd party developer sticks to my plugin standards? (more…)


Timetracker Timeclock

The 102 Degrees Timeclock software package is a very simple interface for keeping track of time. Instead of purchasing a timeclock, you could resurrect an old laptop and run this software on it. With a very simple clean interface, even beginning computer users will feel comfortable. The timeclock has .csv generation for reporting - which can easily be opened in Microsoft Excel. The entire interface is web based. (more…)

open source, PHP

Why are there different web browsers?

In the same way that not everyone drives a Honda, we find that we have different web browsers. For the beginner to the Internet, this might come as a surprise. Normally, they are only used to the default browser on their computer. For example, Windows users are familiar with Internet Explorer. Mac users might be familiar with Safari. (more…)


What do all of those acronyms mean?

Whether you’re looking at web hosting advertisements or speaking with an internet firm, you’re going to run into various acronyms. If you’re not familiar with the industry, this can get confusing. Let’s check out the main ones to see what they really mean to you. (more…)


Newest Version of 102 Degrees Launched

To better reflect our business model and offer more services online to our visitors and customers, we’ve redesigned our website. Integration with the downloadable products, open source, technical blog and training materials enriches the website experience. Check out the new website options; all feedback is welcome. (more…)


Which Fires First? Error Handler or Shutdown Function

I was working on writing a shutdown function for a PHP 4 script and noticed some odd behavior when I was getting errors (no way! I program and get errors? Who knew!?) At any rate, when I would handle my error with my custom function, I noticed the shutdown function was still executing after the error function. (Or when it was a Fatal error, the error was shown to the screen but the shutdown function... (more…)



There are a very small amount of really easy to implement PHP mailer scripts in the wild. They usually try to pump so many features into them that it becomes difficult to implement or too large of a file. For those looking for just a quick drop-in solution - that you DON’T need to know PHP to use - SimplePHPMailer was developed. All that is needed is to drop the php file into the same... (more…)

open source, PHP

Meta Tag Generator

Meta Tag Generator uses javascript to generate the proper format for some common meta tags. This was originally just a proof of concept script that I decided to release. (more…)

html, open source

XSS with Img OnError attribute

So much of my time is spent worrying over the src or href tags on images and links - that I sometimes forget about the other attributes. (more…)

javascript, PHP, security

Securing Wordpress - what my 'oops' reminded me

I don’t want to admit it - but I messed up. I didn’t patch wordpress - and I was a victim of one of the released wp exploits. How could you let this happen? you ask. Well, I was lazy. But let this be a lesson to ya - don’t forget - otherwise its a LOT harder to clean it up (it took me roughly 4 hours to fix which included 2 hours of ignoring... (more…)

security, wordpress

3D CSS Example

This example is a proof-of-concept I worked on years ago when people first started talking about making 3D games with no images - CSS only. (more…)

CSS, Misc Web Design

Eclipse Testing with TPTP - help me?

I recently came across this tutorial here about Testing with TPTP- and I’m confused. Whats the benefit of this type of testing (um… creating JAVA code for a JUnit test… right?) compared to running some PHPUnit, Selenium and AB (from apache, or something…)? What am I missing - does anyone have any other good hands-on tutorials? (more…)

Eclipse PDT, IDE and Web Dev Tools, programming, Test Driven Development

APD post processing wrapper

A while ago, I discovered the ‘joys’ of APD… and then more so, the ‘joys’ of not being able to make heads or tails out of the output script. After digging deeper, I saw that the original directory already had some PHP scripts to parse the output. I ran those and wasn’t very impressed. Even more important, my boss wouldn’t be impressed. I needed to be able to make something that could be useful to... (more…)

performance, PHP, Test Driven Development

Writing a Spelling Corrector

Normally I like to post content that I’ve actually written, but I can’t pass up linking to this article: How to write a spelling corrector. Its a great piece that explains the math behind the spelling correcting that Google, Yahoo, etc… do when you’re doing a search and gives code examples on how this is accomplished. Very great read! (more…)


MySpace bulletins to RSS

So I’m sick of myspace… or so I say to myself. So now I log in about half the time as I did before… and this is because I’ve made the following script. It logs in and grabs each bulletin from your top bulletins. Then, it creates an RSS feed from them. (more…)

myspace, PHP

Create Google Advanced Search String

I found an interesting article about the parameters of the advanced search URL for google. Just for fun, I tested out their concepts and they were all true. I figured maybe there was a reason to do this as a PHP class (I think I was just bored…). (more…)

google, PHP

Cross Domain AJAX - A quick anatomy of a mashup

So after searching the Internet for some cross domain AJAX stuff, I noticed two interesting articles. The first was the specifics of writing these queries (located here). Then, the next gave a breakdown of how this might be useful in a mash-up collaborative sense (here). (more…)

AJAX, apache, javascript, security

Create an RSS feed of comments from myspace

Lately, I’ve been trying to find ways to reduce the amount of time I spend on stupid sites like myspace (nevermind the fact that the time it took to reduce this amount took me enough time to visit myspace 1x a day for another month – heh). At any rate, I’ve been using Google Reader a lot more (I’m up to 180 or so feeds) and I thought: Why don’t I make an RSS feed... (more…)

Misc Web Design, PHP, scripting, myspace

Pass PHP session to a new script using fsockopen

I was working on a script that opened up a new connection to the same server with fsockopen to process a php script. It passed the variables needed through GET and then gathered the output. Finally, it displayed the output on the screen under the current context. (more…)

apache, PHP

Tools of the trade

I just thought I’d drop some useful links and tools your way for those beginning and non-tool-cist peoples: (more…)

IDE and Web Dev Tools, Misc Web Design

Write Security Triggers Against SQL Injection

An interesting idea that a colleague told me about was a ‘security trigger’ in any application that has a SQL type storage engine. The trick is to make sure that your admin account is not ID #1 and that your administrative username isn’t one of the most common ones: (more…)

security, SQL

Friendly reminders about testing your PHP code

I was reading on a forum the other day about some benchmarks for PHP. The guy had posted some results in ms measurements, and was getting upset about his erratic results. There were some things that he was forgetting, however. (more…)

Misc Web Design, PHP, Test Driven Development

ODBC for UDB and PHP - How I increased performance by 400%

In our current setup at (“the triangle”), we have to use odbc connections to access our db2-udb database - and I don’t like it. But we have to stick with it - and that’s the way life is. The main reason I don’t like it is the immense overhead and time it takes to execute queries. Well, I did some research and found out some interesting things. The most important of which was a cursor... (more…)


Demonstrating Password Manager Almost Vulnerability in FireFox

The “security guys” have been talking about the problems with FireFox’s password manager and I got curious. It turns out that javascript can access saved passwords in your password manager simply by creating a login form and capturing the input field’s contents. While this isn’t necessarily a vulnerability in FireFox, it does suck! The biggest attack vector is websites that allow user submitted content that have script injection holes. Basically, if a third party can... (more…)

javascript, security

The Perils of the AT in PHP

A lot of weird things have been happening ever since we introduced a new error handler at (“the triangle”). First of all, it took down our whole site for a good portion of time (oops!), then it created a large project for us to review our code. Turns out a lot of the errors were just weird little things that we ignored. However, there were a few times where the @ operator php.net/language.operators.errorcontrol.php was a... (more…)

performance, PHP

Is it better to write your 'for' loops backwards in PHP?

After listening to a javascript internals optimization talk, I wanted to see how these concepts could relate to PHP. The biggest thing that stuck out to me was the order of the for loops in javascript. According to the talk, loops written backwards (or using the deincrement operator instead of the increment one…) was a lot faster. They said comparing a value to zero was faster than comparing a value to another value. With the... (more…)

performance, PHP

Force Log Messages using Tortoise SVN

Everyone knows that standard SVN has its list of 6 or 8 standard hooks - but what if you’re 1) lazy, 2) busy, 3) don’t have access to the SVN server? Using one of the popular win32 shell integrated svn clients, TortoiseSVN, we can still force commit log messages easily: (more…)

svn, windows

Symbolic Linking in Windows?

Be careful! Those of you who are trying to emulate a symbolic link in windows have probably come across the Windows Resource Kit tool linkd.exe. This creates junction points on the file system. However, before you have to find out the hard way, here’s my reminder… junction points are more akin to hardlinks than symbolic links: if you delete a junction point, it deletes the target as well! (more…)


How to use PHP to generate downloadable content

I was looking at some code I had written about 3 years ago - how sad! I was creating a PDF of my resume using PHP to grab my qualifications out of a database. Unfortunately, I never researched into the header php command, so I made my job harder. Instead of writing it with a php file, I made a php file, and renamed it as a .pdf file. I modified my .htaccess file to... (more…)


When is a PHP array not an array?

Arrays, return variables, expressions, OH MY! I recently learned a lesson about array functions in PHP not returning what I thought they would. I had a function that returned the value of array_shift()… and then used it in another function. Unfortunately, this generated a strict error and was causing some issues… As usual, I put together a proof of concept. Lets check out the code example, the error, and then why: (more…)


PHP developer's shortcut for optimizing mysql

PHP developers, raise your hand if you run an explain on each MySQL statement you write and use in your apps! Anyone? Ok… 1… 2… that’s it? Yah, I tend to forget that too, but luckily PHP allows us to cheat. Thanks PHP! (more…)


Execute Windows Commands from PHP without blocking

When researching for my live error reporting posting, I tried running some exec and passthru command tests by starting up calc.exe. While they executed the command correctly, I got some weird results in my script … which I suppose now make sense. Lets see how we can start programs in Windows, and not run into the same issues that I did. (more…)

PHP, windows

A reminder about triggering errors not in the USER level

I had a function in some of my code that I wanted to trigger a notice error on certain occasions. Unfortunately, it kept halting my script with a Warning instead. Unfortunately, the error handler at that particular block of code was not properly capturing the error string. It runs out that I was triggering an E_NOTICE instead of an E_USER_NOTICE error… (if I would have reviewed the trigger_error manual page, I wouldn’t have made this... (more…)


Live Combined Error Reporting for Apache and PHP during Development

So many times during development, I’ve missed little PHP errors because they were 1) on a processing page that was redirected or 2) output inside of a html tag - and rendered invisible. From time to time, I have to go back to my file system and check the php error log to see what happened. The first step to solving this was implementing a custom error handler - which we did at (“the triangle”).... (more…)

apache, Eclipse PDT, IDE and Web Dev Tools, scripting

Two New useful external tools for Eclipse

In my posting about Integrating PHPDocumentor into Eclipse, I touched on External Tools a bit. The combination of external batch files, the external tools extra options and the console has made my life easier. I’m using two new additional batch files that I’ve written myself and integrated as external tools. These include automated SVN release update and resource refresh and Apache application control (for those who can’t run apache as a service on w32): (more…)

Eclipse PDT, IDE and Web Dev Tools, svn

A Better Understanding of Error Reporting in PHP

While working on a website for (“the triangle”), I came to a page running locally that just stopped - blank. This particular website was not using output buffering - so there is no excuse for a blank page. For whatever reason (laziness, stupidity, thursdayness), I haven’t checked my php.ini file for error reporting in the last few months… and for whatever reason a long time ago, I decided to go back to standard error reporting.... (more…)


The top 17 ways to help eliminate the Phishing threat

The following is the result of a research project I had done about phishing. Its some best practices and suggestions based upon information from leading security professionals such as white hat security, McAfee, etc. A combination of e-mail security, authentication methods and corporate identity standards are among the suggestions… Here are the top solutions and methods of securing against Phishing: (more…)


The anatomy of a phishing attack - advanced technique

So many phishing attempts lately are just purely pathetic - easy to guess and figure out, mis spelling and grammar issues and just poorly fashioned websites. Although these will work on the novice web surfer, can a clever criminal actually create a phishing site/scenario that can trap the experienced members in your IT department? In this article we’re going to take apart a phishing proof of concept attempt I created at (“the triangle”) (for privacy... (more…)


Show the right files in PHP Explorer

After I installed Eclipse PDT, I had two project navigators. I closed the native one and kept open the PHP Explorer. PHP Explorer showed my php, css, js, etc, files. It also puts a plus sign to the left of the filenames. Using this view, we can expand the file to see the classes and functions inside of the file without opening it. (more…)

Eclipse PDT, IDE and Web Dev Tools

Helpful strtotime reminders

Today, Todd (one of the consultants that (“the triangle”) uses) called me up to share a bit of a reminder and also tell me about an issue in the code that was in one of our older modules. There was an issue with the strtotime function converting a year to a timestamp. (more…)


Spell Checking in Eclipse PDT

Although I’d like to pretend that my side jobs always are pure programming, but alas, not the case. There are times when the users send word docs to me and I have to convert them to html. Now, even these word docs might have spelling mistakes - but that’s just not ‘acceptable’ to them - I should correct those issues too! Whats up with that? But anyway, I now have a good plugin to do... (more…)

Eclipse PDT, IDE and Web Dev Tools, SQL, Website Monitoring Project

Fixing update error in eclipse PDT

The last time I downloaded Eclipse PDT for PHP, (located at zend.com/pdt), everything was great. That is, until I wanted to run the updates. It stopped with an error and would never update my PDT. Luckily, one of the consultants from (“the triangle”) had the same issues - and he was able to tell me what was up: (more…)

Eclipse PDT, IDE and Web Dev Tools

Namespacing is important - even in PHP

Perl, Java and xml people are very aware of what a namespace is… even wikipedia tells us they are. But, certain languages, such as PHP, don’t support namespaces yet. (However, thank you Dmitry for your proposal.) But are namespaces really important? PHP has made it this far without them, so why should you be concerned? Well, lets see: (more…)


Highlighting Source Files

I have been writing code snippets in this wordpress blog alot - and I wanted to possibly have the code highlighted. One of the things that happened with code highlighting plugins I’ve noticed is that the code has to be valid (I’ve posted invalid PHP because stupid wordpress kept eating it) or one type of code (I post javascript/html combinations, with ellipses and such…), and so I finally decided to not highlight my code -... (more…)

Misc Web Design

AJAX Security Research and Findings - Round 2

Round 2, and the final round, is complete! The previous article here talked about my initial findings. Well, I was able to try some proofs of concepts on my javascript finding, and I put together our top level recommendations for (”the triangle”). Lets see: (more…)

AJAX, PHP, security

When your linkd causes you problems, you must convertd it!

For the setup I use at (“the triangle”), I have a lot of filesystem links - and these are made on win32 with the linkd.exe command (the version I got is from the windows 2000 resource cd). When I start a new project, I pass into my script which directories I’d like to make and checkout code into, and which I’d rather just linkd to. Well, every once in a while a link’d folder needs... (more…)


Send e-mail from outlook using PHP

While working on some code at (“the triangle”), I run into some issues with the mail() function. On our linux qa and production servers, we can use the mail() function no problem - but on my development platform, windowsxp, I cannot with our current configuration. Normally, you can put in the smtp server in the php.ini file, but our setup doesn’t allow this. We have an exchange server who’s relaying settings restrict it to a... (more…)

PHP, windows

Real world stories of a prepared statement

A couple months ago, I was out in Rochester MN at IBM for a multi-day meeting about communication between the iSeries(system-i, i5, as400, whatever its called now a days) and PHP/Apache. One of the things we talked about was our use of ODBC at (“the triangle”) currently to which they asked a good question - Are we using prepared statements over odbc? Well, right now, we’re not, but I think we should. As always, its... (more…)


PHP Script Installer

A couple weeks ago I was reading a blog posting about PHP Script installing. I don’t remember the exact context of the article (or where it was for that matter - otherwise I’d link to it!), but I had suggested someone make a php script packager - an all in one file to install a php project. (more…)

PHP, Projects

Unobtrusive JS to stop form submission

On one of the sites at (“the triangle”), one of the programmers on my team had this strange attachment to the Yahoo User Interface libraries - but I guess that was a good thing as it taught him a good lesson - use unobtrusive javascript. Recently, I had to go through and clean up some of the code (and do a security audit), and I discovered his usage of the YUI library functions. I was... (more…)

javascript, YUI

Security Issue with Subversion Deployment?

I use Subversion (SVN) for source control and deployment both for JEMDiary and at (“the triangle”). While working on my local copy of one of the websites, I got to thinking about the .svn folder and all of its files. The .svn folder is a local cache/db of the file changes in order to support diffs, reverts, and to give cues about file changes and the need to commit. I started poking around inside of... (more…)

apache, svn

Tamper Data Firefox Extension - is it worth it?

As you can probably tell from my last test of a firefox extension here, I am constantly looking for new tools to make my job more accurate (see: lazier). Another similar extension I came across is Tamper Data. Tamper Data doesn’t have a lot of documentation, so it was harder to actually determine the uses of this extension. Some tutorials on the net claimed that Tamper Data was better than Live Headers or Load Time... (more…)

IDE and Web Dev Tools

PHP Command Line Shell Experiments

Having been a shell, perl and batch scripter before I started PHP, I’ve always enjoyed the CLI life. I actually created an interactive or script-able interface for creating all of my projects at (“the triangle”) - hopefully I’ll link to it here when I write it up. (more…)


PEAR Installation Woes

I’ve found the need to do some installs from some PEAR channels, so I jumped into my command line on PHP 5.2.0 and windows xp sp2. I ran c:\\php5.2\\go-pear - which would launch the go-pear.bat file. I executed with standard permissions, and the unthinkable happened - a PEAR FAILURE. OH NO! But I was able to get around it. Lets look at the details of the error, and my lazy man’s way of solving it:... (more…)


Type-Safe PHP? Hrm...

As you can probably remember, lately I’ve been writing about PHP’s object handling, patterns, etc. - but I lightly glossed over the whole forced typing of variables - and how that relates to PHP. While looking for solutions to this, I came across a great blog entry that solves this issue - but I’ve gotta bring up some counter points… Finally, I’m also wondering: what are the real important needs for a strongly typed object?... (more…)


Random user generation - optimized

I came across this blog posting about optimizing order by rand() and decided to make my queries better. Here is my real life example on how to optimize this query: (more…)


AJAX Security Research and Findings - Round 1

(“the triangle”) wants to keep implementing more and more AJAX based systems - but no one ever took time to research into the security issues with this. I did a proof of concept one time with a zip-code function when Big Boy was working there, and from there, they just thought it was amazing. Most recently, some AJAX functionality was proposed for our LIVE public web servers… but I was very hesitant. I don’t know... (more…)

AJAX, security, PHP

Emulation of Collections - true stories of data object handling

Today, Big Boy sent me an e-mail at work talking about emulation of collections in his .net programming. He included a code sample (after the break). This got me thinking about how I am planning on handling data going forward. Do I want to handle data as keyed arrays, objects, complex objects, or… ? Additionally, I started thinking about the Null Object programming pattern, and how this can fit into my data handling pattern. I’ve... (more…)


When to be OOP - and how much... Lesson Learned!

I just finished reading a snippet of a book about design patterns - of which Strategy, Adapter, Decorator and others were discussed. It got me to thinking about my design patterns that I used in JEMDiary - and what I’ll be using in this project. (more…)

PHP, Website Monitoring Project

Load Time Analyzer for Firefox

So, I started looking at a few load time analyzers for my sites - and I found an interesting plugin for firefox. I wasn’t too entirely sure what I was going to find - but I figured I’d try it out and figure out if it was useful. (more…)

IDE and Web Dev Tools, performance

PHP5 Object Oriented Properties - Tested!

I was recently reading an article (while researching for my website monitoring project), and there was a comment about PHP5’s lack of flexibility in its Object Oriented usage. Some people were arguing for it - and some against, the typical ranting that goes on in blog comments, etc. Instead of joining the argument, I wanted to do my proof of concepts myself. I’m going to explore (well I already know some of the answers -... (more…)


Planning for application development

In my “younger years” in the coding world, I’d have an idea like I have right now with the website monitoring project - and immediately start coding. I’d get the framework done, implement a feature or two, and then finally start thinking about my requirements. Predictably, the code would turn into an unmaintainable mountain of crap - and I’d be wasting more time rewriting and refactoring than I wanted. For this project, I decided to... (more…)

Website Monitoring Project

Test Driven Development Book Review

(“the triangle”) just recently purchased a book for the library at my request, Test-Driven Development by example by Kent Beck. The current Amazon price for this book is $35. The book took me about 2 weeks of sporadic reading to finish. The first section took the first week, the remaining 2 sections and appendix flew by. (more…)

Test Driven Development

Website Monitoring Project

Recently, while working at (“the triangle”), I came across a project that I had to research. This project’s definition included finding an up-time monitoring system for our websites as well as a dead link finding feature. So, after doing about 8 hours worth of searching, I didn’t find anything that met our needs. There were tons of dead link finders that could be ran on demand off your desktop platform, but very few that could... (more…)

Website Monitoring Project

Setting Config Variables - Constants vs. Abstract Class Access

As I was looking through some old code from Big Boy, I noticed a block of his code at the top of his initial control file and noticed a way he was using his configuration. He was defining his from an INI file and setting constants in the code with a prefix identifier. I then took a minute to look at my most recent framework to see how I was using my config - a... (more…)


How to make a Great MySpace Layout

In this posting, I’m going to share the steps to making a slimmed down, cleaner, nicer layout for MySpace to help showcase your personal interests, your band, or your business. (more…)

CSS, html, myspace, PHP, misc web design

Network Site JEMDiary.com updated

On February 28, 2007, JEMDiary 3.0 was released. Since 2001, JEMDiary has been growing, adding new features and hosting more diaries. To take advantage of the newest technologies as well as give JEMDiary a needed face-lift, 3.0 was launched. Don’t worry - if you had a JEMDiary account before the upgrade, your account is still active and all your entries still remain. Check it out and look at the new features. (more…)


Get the RSS

\n" }, "redirectURL": "", "headersSize": 357, "bodySize": 380273, "_transferSize": 380630 }, "cache": {}, "timings": { "blocked": 1.07200001366436, "dns": 0.00499980524183008, "connect": 0.19200006499886002, "send": 0.06099999882281004, "wait": 1.66100007481873, "receive": 2.705999882891776, "ssl": -1 }, "serverIPAddress": "", "connection": "309906", "pageref": "page_2" }, { "startedDateTime": "2017-04-17T01:12:26.514Z", "time": 3.871999913826585, "request": { "method": "GET", "url": "", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, sdch, br" }, { "name": "Host", "value": "" }, { "name": "Accept-Language", "value": "en-US,en;q=0.8" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Referer", "value": "" }, { "name": "Cookie", "value": "_ga=GA1.1.144569011.1487542273" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "_ga", "value": "GA1.1.144569011.1487542273", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 442, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Mon, 17 Apr 2017 01:12:26 GMT" }, { "name": "Last-Modified", "value": "Mon, 17 Apr 2017 01:10:57 GMT" }, { "name": "Server", "value": "WEBrick/1.3.1 (Ruby/2.3.1/2016-04-26)" }, { "name": "Etag", "value": "51cf7b9-108a-58f41621" }, { "name": "Content-Type", "value": "text/css; charset=utf-8" }, { "name": "Cache-Control", "value": "private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Content-Length", "value": "4234" } ], "cookies": [], "content": { "size": 4234, "mimeType": "text/css", "compression": -1, "text": "body{margin:0;color:#333;background:#272727;font-family:Palatino, \"Palatino Linotype\", \"Palatino LT STD\", \"Book Antiqua\", Georgia, serif;font-size:1.37rem;line-height:2rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body>header{background:#ffffff}body>header nav{width:80%;max-width:60rem;margin:auto;display:flex;justify-content:space-between;padding:3rem 0 0.5rem 0;border-bottom:0.15rem solid #eeeeee}body>header a{color:#333}body>footer{width:80%;max-width:60rem;margin:auto;padding:3rem 0 1rem 0;color:#454545;text-align:center}body>footer ul{display:flex;flex-wrap:wrap;list-style:none;justify-content:space-around;margin:0 0 2rem 0;padding:0}body>footer a,body>footer a:visited{color:#777777;text-decoration:none}body>footer p{font-size:0.8rem}main{padding:3rem 0;background:#ffffff}main>*{width:80%;max-width:60rem;margin:auto}a{color:#369;text-decoration:none}h3{font-size:1.9rem;line-height:2.6rem}abbr{border-bottom:0.01rem dotted #e0e0e0}blockquote{margin-left:0;padding-left:2rem;border-left:0.3rem solid #E2E2E2;background:#f9f9f9}.pull-right{float:right}.leader{padding:1rem 0 2rem 0;font-style:italic}.last-cta{text-align:center;font-weight:bold}#hero{line-height:2.4rem}#hero h1,#hero h3{display:inline}#hero h1{padding-right:0.6rem}#hero h1,#hero h3,#hero p{font-size:2rem}#hero p{margin-top:0}article{display:flex;flex-direction:column;margin-bottom:1.4rem}article header{order:1}article footer{order:2;font-size:0.8rem;padding:0 0.1rem;color:#666}article footer time{padding-right:1rem}article section{order:3}article h2{font-size:2rem;line-height:2.9rem;margin:0}article h2 a,article h2 a:visited{color:#369}article h2 a:hover{color:#59f}.read-more{font-size:1rem;color:#666;text-decoration:none}.entries article:after{content:'—';text-align:center;color:#e4e4e4;order:4}.old-post{background:#fff4a5;border:0.15rem solid #ffb710;padding:1rem 1.6rem;margin:3rem 0}.thumbnail{display:block;margin:1rem 0;text-align:center}.thumbnail img{-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.25);-moz-box-shadow:0 3px 6px rgba(0,0,0,0.25);box-shadow:0 3px 6px rgba(0,0,0,0.25);padding:5px}.thumbnail.pull-right{margin-left:2rem}.inline img{max-width:40rem;max-height:20rem;margin:auto}table{width:100%;margin:1.5rem;border-collapse:collapse}th{background:#f4f4f4}td,th{border:1px solid #cecece;padding:0.5rem}.highlight{white-space:pre;overflow:auto;word-wrap:normal;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:20px;background:#343642;color:#C1C2C3}.highlight .hll{background-color:#ffc}.highlight .gd{color:#2e3436;background-color:#0e1416}.highlight .gr{color:#eeeeec;background-color:#c00}.highlight .gi{color:#babdb6;background-color:#1f2b2d}.highlight .go{color:#2c3032;background-color:#2c3032}.highlight .kt{color:#e3e7df}.highlight .ni{color:#888a85}.highlight .c,.highlight .cm,.highlight .c1,.highlight .cs{color:#8D9684}.highlight .err,.highlight .g,.highlight .l,.highlight .n,.highlight .x,.highlight .p,.highlight .ge,.highlight .gp,.highlight .gs,.highlight .gt,.highlight .ld,.highlight .s,.highlight .nc,.highlight .nd,.highlight .ne,.highlight .nl,.highlight .nn,.highlight .nx,.highlight .py,.highlight .ow,.highlight .w,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx,.highlight .sr,.highlight .s1,.highlight .ss,.highlight .bp{color:#C1C2C3}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .nt{color:#729fcf}.highlight .cp,.highlight .gh,.highlight .gu,.highlight .na,.highlight .nf{color:#E9A94B}.highlight .m,.highlight .nb,.highlight .no,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo,.highlight .il{color:#8ae234}.highlight .o{color:#989DAA}.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:#fff}.highlight,.highlight>pre{margin:0;line-height:1.5rem}code.highlighter-rouge{background:#eaeaea;color:#343642;padding:0.3rem}#notfound_video{position:fixed;right:0;bottom:0;min-width:100%;min-height:100%;width:auto;height:auto;z-index:-100;background-size:cover}#not-found-link{display:block;text-align:center}#not-found-link a{color:#000000;background:rgba(255,255,255,0.4);display:inline-block}\n" }, "redirectURL": "", "headersSize": 353, "bodySize": 4235, "_transferSize": 4588 }, "cache": {}, "timings": { "blocked": 1.68799981474876, "dns": -1, "connect": -1, "send": 0.04900014027953992, "wait": 1.78399984724819, "receive": 0.3510001115500949, "ssl": -1 }, "serverIPAddress": "", "connection": "309906", "pageref": "page_2" }, { "startedDateTime": "2017-04-17T01:12:26.711Z", "time": 46.68400017544627, "request": { "method": "GET", "url": "https://www.google-analytics.com/analytics.js", "httpVersion": "unknown", "headers": [ { "name": "Referer", "value": "" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "unknown", "headers": [ { "name": "strict-transport-security", "value": "max-age=10886400; includeSubDomains; preload" }, { "name": "content-encoding", "value": "gzip" }, { "name": "x-content-type-options", "value": "nosniff" }, { "name": "last-modified", "value": "Mon, 03 Apr 2017 21:04:51 GMT" }, { "name": "server", "value": "Golfe2" }, { "name": "age", "value": "5021" }, { "name": "date", "value": "Sun, 16 Apr 2017 23:48:45 GMT" }, { "name": "vary", "value": "Accept-Encoding" }, { "name": "content-type", "value": "text/javascript" }, { "name": "status", "value": "200" }, { "name": "cache-control", "value": "public, max-age=7200" }, { "name": "timing-allow-origin", "value": "*" }, { "name": "alt-svc", "value": "quic=\":443\"; ma=2592000; v=\"37,36,35\"" }, { "name": "content-length", "value": "12163" }, { "name": "expires", "value": "Mon, 17 Apr 2017 01:48:45 GMT" } ], "cookies": [], "content": { "size": 29478, "mimeType": "text/javascript", "text": "(function(){var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b\\x3c/script>')):(c=M.createElement(\"script\"),\nc.type=\"text/javascript\",c.async=!0,c.src=a,d&&(c.onload=d),b&&(c.id=b),a=M.getElementsByTagName(\"script\")[0],a.parentNode.insertBefore(c,a)))},Ud=function(){return\"https:\"==M.location.protocol},E=function(a,b){return(a=a.match(\"(?:&|#|\\\\?)\"+K(b).replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g,\"\\\\$1\")+\"=([^&#]*)\"))&&2==a.length?a[1]:\"\"},xa=function(){var a=\"\"+M.location.hostname;return 0==a.indexOf(\"www.\")?a.substring(4):a},ya=function(a){var b=M.referrer;if(/^https?:\\/\\//i.test(b)){if(a)return b;a=\"//\"+M.location.hostname;\nvar c=b.indexOf(a);if(5==c||6==c)if(a=b.charAt(c+a.length),\"/\"==a||\"?\"==a||\"\"==a||\":\"==a)return;return b}},za=function(a,b){if(1==b.length&&null!=b[0]&&\"object\"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge(\"len\",b.length),new Da(b.length);},wc=function(a,b,c){var d=ta(a+\"?\"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c){var d=O.XMLHttpRequest;if(!d)return!1;var e=new d;if(!(\"withCredentials\"in e))return!1;\ne.open(\"POST\",a,!0);e.withCredentials=!0;e.setRequestHeader(\"Content-Type\",\"text/plain\");e.onreadystatechange=function(){4==e.readyState&&(c(),e=null)};e.send(b);return!0},x=function(a,b,c){return O.navigator.sendBeacon?O.navigator.sendBeacon(a,b)?(c(),!0):!1:!1},ge=function(a,b,c){1<=100*Math.random()||G(\"?\")||(a=[\"t=error\",\"_e=\"+a,\"_v=j50\",\"sr=1\"],b&&a.push(\"_f=\"+b),c&&a.push(\"_m=\"+K(c.substring(0,100))),a.push(\"aip=1\"),a.push(\"z=\"+hd()),wc(oc()+\"/collect\",a.join(\"&\"),ua))};var h=function(a){var b=O.gaData=O.gaData||{};return b[a]=b[a]||{}};var Ha=function(){this.M=[]};Ha.prototype.add=function(a){this.M.push(a)};Ha.prototype.D=function(a){try{for(var b=0;b=100*R(a,Ka))throw\"abort\";}function Ma(a){if(G(P(a,Na)))throw\"abort\";}function Oa(){var a=M.location.protocol;if(\"http:\"!=a&&\"https:\"!=a)throw\"abort\";}\nfunction Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&\"withCredentials\"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];Qa.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&(\"boolean\"==typeof c&&(c*=1),b.push(d.F+\"=\"+K(\"\"+c))))});b.push(\"z=\"+Bd());a.set(Ra,b.join(\"&\"),!0)}\nfunction Sa(a){var b=P(a,gd)||oc()+\"/collect\",c=P(a,fa);!c&&a.get(Vd)&&(c=\"beacon\");if(c){var d=P(a,Ra),e=a.get(Ia),e=e||ua;\"image\"==c?wc(b,d,e):\"xhr\"==c&&wd(b,d,e)||\"beacon\"==c&&x(b,d,e)||ba(b,d,e)}else ba(b,P(a,Ra),a.get(Ia));b=a.get(Na);b=h(b);c=b.hitcount;b.hitcount=c?c+1:1;b=a.get(Na);delete h(b).pending_experiments;a.set(Ia,ua,!0)}\nfunction Hc(a){(O.gaData=O.gaData||{}).expId&&a.set(Nc,(O.gaData=O.gaData||{}).expId);(O.gaData=O.gaData||{}).expVar&&a.set(Oc,(O.gaData=O.gaData||{}).expVar);var b;var c=a.get(Na);if(c=h(c).pending_experiments){var d=[];for(b in c)c.hasOwnProperty(b)&&c[b]&&d.push(encodeURIComponent(b)+\".\"+encodeURIComponent(c[b]));b=d.join(\"!\")}else b=void 0;b&&a.set(m,b,!0)}function cd(){if(O.navigator&&\"preview\"==O.navigator.loadPurpose)throw\"abort\";}\nfunction yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set(\"&did\",b.join(\",\"),!0)}function vb(a){if(!a.get(Na))throw\"abort\";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if(\"transaction\"!=c&&\"item\"!=c){var c=R(a,Wa),d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw\"abort\";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee},Qa=new ee,Za=[];Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?\"\":\"\"+a},R=function(a,b){a=a.get(b);return void 0==a||\"\"===a?0:1*a};Ya.prototype.set=function(a,b,c){if(a)if(\"object\"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};\nvar ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)},bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=Qa.get(a);if(!b)for(var c=0;c=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0c)a[b]=void 0},Fd=function(a){return function(b){if(\"pageview\"==b.get(Va)&&!a.I){a.I=!0;var c=\naa(b);b=0b.length)){for(var c=[],\nd=0;d=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){var c;null==a?c=a=1:(c=La(a),a=La(D(a,\".\")?a.substring(1):\".\"+a));for(var d=0;d=ca[0]||0>=ca[1]?\"\":ca.join(\"x\");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&\"function\"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||\"\").toLowerCase());if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;carguments.length)){var b,c;\"string\"===typeof arguments[0]?(b=arguments[0],c=[].slice.call(arguments,1)):(b=arguments[0]&&arguments[0][Va],c=arguments);b&&(c=za(qc[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={},Ed(this.ra,this.b)&&da(this.b.get(Na)))}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};var rc=function(a){if(\"prerender\"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener(\"visibilitychange\",d,!1):e.detachEvent&&e.detachEvent(\"onvisibilitychange\",d)}};L(M,\"visibilitychange\",c)}};var td=/^(?:(\\w+)\\.)?(?:(\\w+):)?(\\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=td.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||\"t0\",this.K=b[2]||\"\",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A=\"create\"==this.C,this.i=\"require\"==this.C,this.g=\"provide\"==this.C,this.ba=\"remove\"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw\"abort\";if(this.i&&(!qa(b)||\"\"==b))throw\"abort\";\nif(this.g&&(!qa(b)||\"\"==b||!ea(a)))throw\"abort\";if(ud(this.c)||ud(this.K))throw\"abort\";if(this.g&&\"t0\"!=this.c)throw\"abort\";}};function ud(a){return 0<=a.indexOf(\".\")||0<=a.indexOf(\":\")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47};\nvar u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);if(p.test(b)){J(52);a=N.j(a);if(!a)return!0;c=d||{};d={id:b,B:c.dataLayer||\"dataLayer\",ia:!!a.get(\"anonymizeIp\"),na:e,G:!1};a.get(\">m\")==b&&(d.G=!0);var g=String(a.get(\"name\"));\"t0\"!=g&&(d.target=g);G(String(a.get(\"trackingId\")))||(d.ja=String(a.get(Q)),\nd.ka=Number(a.get(n)),c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,\";\").match(c))?c.sort().join(\"\").substring(1):void 0,d.la=c,d.qa=E(a.b.get(kb)||\"\",\"gclid\"));a=d.B;c=(new Date).getTime();O[a]=O[a]||[];c={\"gtm.start\":c};e||(c.event=\"gtm.js\");O[a].push(c);c=t(d)}!c&&Zd.hasOwnProperty(b)?(J(39),c=b+\".js\"):J(43);c&&(c&&0<=c.indexOf(\"/\")||(c=(Ba||Ud()?\"https:\":\"http:\")+\"//www.google-analytics.com/plugins/ua/\"+c),d=ae(c),a=d.protocol,c=M.location.protocol,(\"https:\"==a||a==c||(\"http:\"!=a?0:\"http:\"==\nc))&&B(d)&&(wa(d.url,void 0,e),$d.set(b,!0)))}},v=function(a,b){var c=A.get(a)||[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split(\"/\")[0].indexOf(\":\")&&(a=ca+e[2].substring(0,\ne[2].lastIndexOf(\"/\"))+\"/\"+a);c.href=a;d=b(c);return{protocol:(c.protocol||\"\").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||\"\",url:a||\"\"}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments),b=Z.f.concat(b);for(Z.f=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf(\"https://www.google-analytics.com/analytics\")){J(33);\nb=!0;break a}}b=!1}b&&(Ba=!0)}Ud()||Ba||!Ed(new Od(1E4))||(J(36),Ba=!0);(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C(\"linker\",Dc);X(\"decorate\",b,b.ca,20);X(\"autoLink\",b,b.S,25);C(\"displayfeatures\",fd);C(\"adfeatures\",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b>21:b;return b};})(window);\n" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 12427 }, "cache": {}, "timings": { "blocked": 1.64700020104647, "dns": 0.11299992911516998, "connect": 1.82899995706976, "send": 0.10899989865720006, "wait": 39.5680000074208, "receive": 3.418000182136872, "ssl": 40.911999996751554 }, "serverIPAddress": "", "pageref": "page_2" }, { "startedDateTime": "2017-04-17T01:12:26.693Z", "time": 18.269000109285116, "request": { "method": "GET", "url": "http://www.google-analytics.com/analytics.js", "httpVersion": "unknown", "headers": [ { "name": "Referer", "value": "" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 307, "statusText": "Internal Redirect", "httpVersion": "unknown", "headers": [ { "name": "Location", "value": "https://www.google-analytics.com/analytics.js" }, { "name": "Non-Authoritative-Reason", "value": "HSTS" } ], "cookies": [], "content": { "size": 0, "mimeType": "x-unknown" }, "redirectURL": "https://www.google-analytics.com/analytics.js", "headersSize": -1, "bodySize": -1, "_transferSize": 0 }, "cache": {}, "timings": { "blocked": 0.751000130549073, "dns": -1, "connect": -1, "send": 0, "wait": 0, "receive": 17.517999978736043, "ssl": -1 }, "serverIPAddress": "", "pageref": "page_2" }, { "startedDateTime": "2017-04-17T01:12:26.776Z", "time": 45.88799993507564, "request": { "method": "GET", "url": "https://www.google-analytics.com/r/collect?v=1&_v=j50&a=2047490349&t=pageview&_s=1&dl=http%3A%2F%2F127.0.0.1%2Fblog&ul=en-us&de=UTF-8&dt=Blog%20posts%20by%20Aaron%20Saray&sd=24-bit&sr=1440x900&vp=1410x712&je=0&fl=25.0%20r0&_u=AACAAEABI~&jid=722089546&gjid=1731316878&cid=144569011.1487542273&tid=UA-2186364-4&_r=1&z=1439628422", "httpVersion": "unknown", "headers": [ { "name": "Referer", "value": "" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" } ], "queryString": [ { "name": "v", "value": "1" }, { "name": "_v", "value": "j50" }, { "name": "a", "value": "2047490349" }, { "name": "t", "value": "pageview" }, { "name": "_s", "value": "1" }, { "name": "dl", "value": "http%3A%2F%2F127.0.0.1%2Fblog" }, { "name": "ul", "value": "en-us" }, { "name": "de", "value": "UTF-8" }, { "name": "dt", "value": "Blog%20posts%20by%20Aaron%20Saray" }, { "name": "sd", "value": "24-bit" }, { "name": "sr", "value": "1440x900" }, { "name": "vp", "value": "1410x712" }, { "name": "je", "value": "0" }, { "name": "fl", "value": "25.0%20r0" }, { "name": "_u", "value": "AACAAEABI~" }, { "name": "jid", "value": "722089546" }, { "name": "gjid", "value": "1731316878" }, { "name": "cid", "value": "144569011.1487542273" }, { "name": "tid", "value": "UA-2186364-4" }, { "name": "_r", "value": "1" }, { "name": "z", "value": "1439628422" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "unknown", "headers": [ { "name": "pragma", "value": "no-cache" }, { "name": "date", "value": "Mon, 17 Apr 2017 01:12:26 GMT" }, { "name": "x-content-type-options", "value": "nosniff" }, { "name": "last-modified", "value": "Sun, 17 May 1998 03:00:00 GMT" }, { "name": "server", "value": "Golfe2" }, { "name": "status", "value": "200" }, { "name": "content-type", "value": "image/gif" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "cache-control", "value": "no-cache, no-store, must-revalidate" }, { "name": "alt-svc", "value": "quic=\":443\"; ma=2592000; v=\"37,36,35\"" }, { "name": "content-length", "value": "35" }, { "name": "expires", "value": "Fri, 01 Jan 1990 00:00:00 GMT" } ], "cookies": [], "content": { "size": 35, "mimeType": "image/gif", "text": "R0lGODlhAQABAID/AP///wAAACwAAAAAAQABAAACAkQBADs=", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 177 }, "cache": {}, "timings": { "blocked": 2.85899988375604, "dns": -1, "connect": -1, "send": 0.09500002488493964, "wait": 42.66200005076822, "receive": 0.2719999756664393, "ssl": -1 }, "serverIPAddress": "", "pageref": "page_2" }, { "startedDateTime": "2017-04-17T01:12:26.774Z", "time": 1.955999992787838, "request": { "method": "GET", "url": "http://www.google-analytics.com/r/collect?v=1&_v=j50&a=2047490349&t=pageview&_s=1&dl=http%3A%2F%2F127.0.0.1%2Fblog&ul=en-us&de=UTF-8&dt=Blog%20posts%20by%20Aaron%20Saray&sd=24-bit&sr=1440x900&vp=1410x712&je=0&fl=25.0%20r0&_u=AACAAEABI~&jid=722089546&gjid=1731316878&cid=144569011.1487542273&tid=UA-2186364-4&_r=1&z=1439628422", "httpVersion": "unknown", "headers": [ { "name": "Referer", "value": "" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" } ], "queryString": [ { "name": "v", "value": "1" }, { "name": "_v", "value": "j50" }, { "name": "a", "value": "2047490349" }, { "name": "t", "value": "pageview" }, { "name": "_s", "value": "1" }, { "name": "dl", "value": "http%3A%2F%2F127.0.0.1%2Fblog" }, { "name": "ul", "value": "en-us" }, { "name": "de", "value": "UTF-8" }, { "name": "dt", "value": "Blog%20posts%20by%20Aaron%20Saray" }, { "name": "sd", "value": "24-bit" }, { "name": "sr", "value": "1440x900" }, { "name": "vp", "value": "1410x712" }, { "name": "je", "value": "0" }, { "name": "fl", "value": "25.0%20r0" }, { "name": "_u", "value": "AACAAEABI~" }, { "name": "jid", "value": "722089546" }, { "name": "gjid", "value": "1731316878" }, { "name": "cid", "value": "144569011.1487542273" }, { "name": "tid", "value": "UA-2186364-4" }, { "name": "_r", "value": "1" }, { "name": "z", "value": "1439628422" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 307, "statusText": "Internal Redirect", "httpVersion": "unknown", "headers": [ { "name": "Location", "value": "https://www.google-analytics.com/r/collect?v=1&_v=j50&a=2047490349&t=pageview&_s=1&dl=http%3A%2F%2F127.0.0.1%2Fblog&ul=en-us&de=UTF-8&dt=Blog%20posts%20by%20Aaron%20Saray&sd=24-bit&sr=1440x900&vp=1410x712&je=0&fl=25.0%20r0&_u=AACAAEABI~&jid=722089546&gjid=1731316878&cid=144569011.1487542273&tid=UA-2186364-4&_r=1&z=1439628422" }, { "name": "Non-Authoritative-Reason", "value": "HSTS" } ], "cookies": [], "content": { "size": 0, "mimeType": "x-unknown" }, "redirectURL": "https://www.google-analytics.com/r/collect?v=1&_v=j50&a=2047490349&t=pageview&_s=1&dl=http%3A%2F%2F127.0.0.1%2Fblog&ul=en-us&de=UTF-8&dt=Blog%20posts%20by%20Aaron%20Saray&sd=24-bit&sr=1440x900&vp=1410x712&je=0&fl=25.0%20r0&_u=AACAAEABI~&jid=722089546&gjid=1731316878&cid=144569011.1487542273&tid=UA-2186364-4&_r=1&z=1439628422", "headersSize": -1, "bodySize": -1, "_transferSize": 0 }, "cache": {}, "timings": { "blocked": 1.61799998022616, "dns": -1, "connect": -1, "send": 0, "wait": 0, "receive": 0.338000012561678, "ssl": -1 }, "serverIPAddress": "", "pageref": "page_2" } ] } }