Yii ConsoleApplication and Gearman Workers PSD to JPEG conversation

Hi. I am going to show small example of how I use gearman with my Yii applications.
If someone doesn’t know what is gearman here is quick explanation from the official website http://gearman.org

A Gearman powered application consists of three parts: a client, a worker, and a job server. The client is responsible for creating a job to be run and sending it to a job server. The job server will find a suitable worker that can run the job and forwards the job on. The worker performs the work requested by the client and sends a response to the client through the job server. Gearman provides client and worker APIs that your applications call to talk with the Gearman job server (also known as gearmand) so you don’t need to deal with networking or mapping of jobs. Internally, the gearman client and worker APIs communicate with the job server using TCP sockets.

Our example application converts psd to jpeg. We have to install gearman job server, gearman pecl extension and ImageMagick on the server.

We will use standart Yii application skeleton as playground.

First of all we gonna create new folder within our protected folder called “workers”.
As our console application use separate config file. Usually called console.php place into config folder. We have import our newly create folder.

protected/config/console.php

//....
'import' => array(
        'application.models.*',
        'application.components.*',
        'application.workers.*',
),
'params'=>array(
    'exportDir' => realpath(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'www' . DIRECTORY_SEPARATOR . 'export'),
    'exportUrl' => '/export',
),
'components'=>array(
//.......

From now all classes from workers directory will be autoloadable.
Also we defined two variables exportDir and exportUrl which will be accessable globally within our app by calling this Yii::app()->params[‘exportUrl’] and Yii::app()->params[‘exportDir’] . Please correct this path to satisfy your needs. All generated PSD previews will be stored there.

Lets create our worker class.
Here is example code of my worker which create jpg preview from the PSD file. It uses ImageMagick.

/protected/workers/Psd2JpegWorker.php

class Psd2JpegWorker extends GearmanWorker {

    public $job;
    private $dir;
    private $args;

    public function psd2jpg($job) {
        $this->job = $job;
        $workload = $this->job->workload();
        echo "Received job psd2jpg: " . $this->job->handle() . "\n";
        $this->args = CJSON::decode($workload, false);

        $rnd = isset($this->args->rnd) ? $this->args->rnd : '';
        $psd = isset($this->args->psd) ? $this->args->psd : '';

        $this->dir = Yii::app()->params['exportDir'] . DIRECTORY_SEPARATOR . $rnd;
        echo "trying to create directory " . $this->dir . "\n";

        if (!is_dir($this->dir) && mkdir($this->dir, 0777) && chmod($this->dir, 0777)) {

            echo "Directory created\n";
            $this->convert($psd, $this->dir . DIRECTORY_SEPARATOR . 'preview.jpg');
        }
    }

    private function convert($src, $target) {

        $width = isset($this->args->width) ? $this->args->width : 400;
        $height = isset($this->args->height) ? $this->args->height : 300;

        echo "Converting\n";
        $cmd = "convert " . $src . "[0] -thumbnail ".$width."x".$height." " . $target . "\n";
        echo $cmd;
        exec($cmd);
    }

}

Method psd2jpg receive GearmanJob object, Then we get required parameters as the psd location on the server and random folder name.
We create new directory. All output will be placed there.
After all preparings are done we call “convert” command (ImageMagick) with list of arguments.
Everything is quite simple.

Let’s create Console command which will register this worker on the job server and run worker.

/protected/commands/ConvertCommand.php

addServer();
        $worker->addFunction("psd2jpg", array($worker, "psd2jpg"));

        while (1) {
            print "Waiting for job...\n";
            $ret = $worker->work();
            if ($worker->returnCode() != GEARMAN_SUCCESS)
                break;
        }
    }

}

Here we registered new worker and it supports one function called “psd2jpg”.

For running console command we also have to create entire script which will instatiate new ConsoleApplication

/protected/dispatch.php

run();

This code very similiar to standart Yii’s index.php but it runs ConsoleApplication instead of WebApplication

Now lets run our new worker.
open console, change directory to the protected folder and run this.

php dispatch.php

Yii lookups commands directory and you may see something like this

php dispatch.php
Yii command runner (based on Yii v1.1.10)
Usage: dispatch.php  [parameters...]

The following commands are available:
 - convert

You have one command available – everything is ok. Run it!

php dispatch convert
php dispatch.php convert
Waiting for job...

Our worker has been started and wait for job.
Let’s give him some job.
For doing this we have to use GearmanClient.

/protected/controllers/SiteController.php

   public function actionIndex(){

      $psd = "/var/www/website/www/psds/some.psd";
      $rnd = md5($psd);

      $client = new GearmanClient();
      $client->addServer();

      $params = CJSON::encode(array('psd' => $psd, 'width' => 400, 'height' => 300, 'rnd' => $rnd));
      $handle = $client->do("psd2jpg", $params);

      $targetUrl = Yii::app()->params['exportUrl'] . DIRECTORY_SEPARATOR . $rnd . DIRECTORY_SEPARATOR . 'preview.jpg';
      $this->redirect($targetUrl);

   }

After psd will be converted prowser will be redirected to resulted file.
Run this action by typing %websitename&/index.php?r=site/index
Ensure that each requrest to this action initiate worker.
Play with number of instances of workers runned (“php dispatch convert &”, “php dispatch convert &”, “php dispatch convert &”)
Try to change

$client->do("psd2jpg", $params);

to

$client->doBackground("psd2jpg", $params);

Hope this article will help someone. Have fun!
PS. I found this extension which make work with gearman even easier.

19 thoughts on “Yii ConsoleApplication and Gearman Workers PSD to JPEG conversation”

  1. earringmarket.com,nike new nfl jerseys, new football jerseys, nike nfl jerseys, new nfl jerseys, 2012 nfl jerseys, 2012 new jerseys
    http://www.earringmarket.com/ – 2012 new jerseys!..
    http://www.earringmarket.com/toronto-blue-jays-c-2010_2121/mlb-jerseys-toronto-blue-jays-19-jose-bautista-black-kids-p-29968.html > MLB Jerseys Toronto Blue Jays 19 Jose Bautista black Kids
    http://www.earringmarket.com/chicago-blackhawks-c-2356_2370/mitchell-and-ness-196061-blackhawks-42-joakim-nordstrom-red-stitched-nhl-jersey-p-65044.html > Mitchell And Ness 1960-61 Blackhawks #42 Joakim Nordstrom Red Stitched NHL Jersey
    http://www.earringmarket.com/lyon-jersey-c-2399_2415_2451/lyon-15-morel-home-soccer-club-jersey-p-69957.html > Lyon #15 Morel Home Soccer Club Jersey
    http://www.earringmarket.com/san-diego-chargers-c-1_4178_4226_4256/nfl-san-diego-chargers-team-logo-jacket-blue1-p-60129.html > NFL San Diego Chargers Team Logo Jacket Blue_1
    http://www.earringmarket.com/liverpool-jersey-c-2399_2415_2449/liverpool-20-lallana-red-home-soccer-club-jersey-p-56214.html > Liverpool #20 Lallana Red Home Soccer Club Jersey
    http://www.earringmarket.com/cowboys-mens-grey-shadow-elite-c-1619_1652_1728/ > Cowboys Mens Grey Shadow Elite
    http://www.earringmarket.com/philadelphia-phillies-c-2010_2119/philadelphia-phillies-26-chase-utley-white-red-strip-mlb-jerseys-p-35712.html > Philadelphia Phillies 26 Chase Utley White Red Strip MLB Jerseys
    http://www.earringmarket.com/redskins-youth-grey-vapor-elite-c-1619_1635_3261/nike-redskins-46-alfred-morris-grey-youth-stitched-nfl-elite-vapor-jersey-p-48291.html > Nike Redskins #46 Alfred Morris Grey Youth Stitched NFL Elite Vapor Jersey
    http://www.earringmarket.com/new-york-giants-c-1548_1570/nike-giants-91-justin-tuck-blue-team-color-mens-nfl-elite-jersey-p-21032.html > Nike Giants #91 Justin Tuck Blue Team Color Mens NFL Elite Jersey
    http://www.earringmarket.com/new-york-rangers-c-2523_2530_2633/ > New York Rangers
    http://www.earringmarket.com/chicago-blackhawks-c-2356_2370/blackhawks-80-antoine-vermette-redblack-split-white-skull-stitched-nhl-jersey-p-67717.html > Blackhawks #80 Antoine Vermette Red/Black Split White Skull Stitched NHL Jersey
    http://www.earringmarket.com/miami-heat-c-2004_2019/nba-miami-heat-10-hardaway-redmn-p-36354.html > nba miami heat #10 hardaway red[m&n –
    http://www.earringmarket.com/ravens-mens-tshirts-c-1_49_55_56/nike-nfl-mens-baltimore-ravens-grey-sideline-legend-authentic-logo-tshirt-016-p-23540.html > Nike NFL Mens Baltimore Ravens Grey Sideline Legend Authentic Logo T-Shirt 016
    http://www.earringmarket.com/atlanta-falcons-c-1_2837_2860/atlanta-falcons-heart-soul-pullover-hoodie-grey-black-p-56889.html > Atlanta Falcons Heart & Soul Pullover Hoodie Grey & Black
    http://www.earringmarket.com/lions-youth-grey-vapor-elite-c-1619_1655_3256/ > Lions Youth Grey Vapor Elite

    http://www.earringmarket.com/chicago-blackhawks-c-2356_2370/blackhawks-33-scott-darling-redblack-split-red-skull-stitched-nhl-jersey-p-65425.html > Blackhawks #33 Scott Darling Red/Black Split Red Skull Stitched NHL Jersey
    http://www.earringmarket.com/paris-saintgermain-jersey-c-2399_2415_2456/paris-saintgermain-10-ibrahimovic-home-soccer-club-jersey-p-47282.html > Paris Saint-Germain #10 Ibrahimovic Home Soccer Club Jersey
    http://www.earringmarket.com/sweden-jersey-c-2399_2467_2488/ > Sweden Jersey
    http://www.earringmarket.com/texans-youth-lights-out-elite-c-1619_1659_1890/ > Texans Youth Lights Out Elite
    http://www.earringmarket.com/edmonton-oilers-c-2356_2375/nhl-edmonton-oilers-93-ryan-nugenthopkins-black-ice-hockey-jersey2012-new-p-29277.html > NHL Edmonton Oilers 93 Ryan Nugent-Hopkins Black Ice Hockey Jersey-2012 New

    http://www.leapatuf.com/atlanta-braves-c-2010_2131/mlb-jerseys-atlanta-braves-5-freeman-grey-p-30977.html > MLB Jerseys Atlanta Braves 5 Freeman grey
    http://www.leapatuf.com/toronto-blue-jays-c-2010_2121/mlb-jerseys-toronto-blue-jays-19-bautista-blue-mn-p-31024.html > MLB Jerseys Toronto Blue Jays 19 Bautista blue M&N
    http://www.leapatuf.com/cincinnati-reds-c-2523_2532_2539/top-mlb-cincinnati-reds-snakeskin-red-snapback-hat-p-43278.html > Top MLB Cincinnati Reds Snakeskin Red Snapback Hat
    http://www.leapatuf.com/patriots-womens-tshirts-c-1_49_87_135/nike-nfl-new-england-patriots-womens-purple-neon-logo-charcoal-tshirt-065-p-33915.html > Nike NFL New England Patriots Womens Purple Neon Logo Charcoal T-Shirt 065
    http://www.leapatuf.com/miami-heat-c-2004_2019/miami-heat-white-revolution-30-nba-jerseys-silver-logo-p-38614.html > Miami Heat White Revolution 30 NBA Jerseys Silver Logo
    http://www.leapatuf.com/chicago-white-sox-c-2010_2150/mitchell-and-ness-1983-white-sox-4-luke-appling-white-throwback-embroidered-baseball-jersey-p-42835.html > Mitchell And Ness 1983 White Sox #4 Luke Appling White Throwback Embroidered Baseball Jersey
    http://www.leapatuf.com/atlanta-braves-c-1_2151_2161/majestic-athletic-mlb-atlanta-braves-mens-black-blended-tshirt-028-p-32347.html > Majestic Athletic MLB Atlanta Braves Mens Black Blended T-Shirt 028
    http://www.leapatuf.com/women-soccer-club-c-2399_2403/womens-barcelona-12-tunombre-home-soccer-club-jersey-p-55532.html > Women’s Barcelona #12 Tunombre Home Soccer Club Jersey
    http://www.leapatuf.com/seattle-seahawks-c-1548_1577/nike-seahawks-80-steve-largent-grey-alternate-youth-stitched-nfl-elite-jersey-p-65886.html > Nike Seahawks #80 Steve Largent Grey Alternate Youth Stitched NFL Elite Jersey
    http://www.leapatuf.com/orlando-magic-c-2004_2035/nba-jerseys-orlando-magic-32-o-neal-black-white-p-27949.html > NBA Jerseys Orlando Magic 32 O neal black white
    http://www.leapatuf.com/chicago-blackhawks-c-2356_2370/nhl-jerseys-chicago-blackhawks-10-patrick-sharp-green-st-patricks-day-p-29816.html > NHL Jerseys Chicago Blackhawks 10 Patrick Sharp Green St Patrick’s Day
    http://www.leapatuf.com/redskins-mens-noble-fashion-elite-c-1619_1635_4513/nike-redskins-75-brandon-scherff-burgundy-red-mens-stitched-nfl-elite-noble-fashion-jersey-p-65676.html > Nike Redskins #75 Brandon Scherff Burgundy Red Men’s Stitched NFL Elite Noble Fashion Jersey
    http://www.leapatuf.com/chicago-blackhawks-c-1_2902_2916/chicago-blackhawks-pullover-hoodie-burgundy-red-black-p-56936.html > Chicago Blackhawks Pullover Hoodie Burgundy Red & Black
    http://www.leapatuf.com/houston-rockets-c-2004_2024/nba-jerseys-houston-rockets-4-olajuwon-swingman-white-p-28157.html > NBA Jerseys Houston Rockets 4 Olajuwon Swingman white
    http://www.leapatuf.com/dolphins-womens-tshirts-c-1_49_83_133/nike-nfl-womens-miami-dolphins-white-heart-and-soul-tshirt-054-p-25692.html > Nike NFL Womens Miami Dolphins White Heart and Soul T-Shirt 054

    cheap Titans Womens Strobe Elite
    Texas Rangers
    Manchester United T-shirts
    cheap Real Madrid Jersey
    Tennessee Titans

    Majestic Athletic MLB Atlanta Braves Mens Yellow Short Sleeve Practice T-Shirt 001
    Baseball Detroit Tigers Zip Jacket Black_3
    Nike Panthers #89 Steve Smith Black Team Color Womens NFL Game Jersey
    Nike Seahawks #88 Jimmy Graham Black Men’s Stitched NFL Elite USA Flag Fashion Jersey
    Naples #9 Higuain Blue Home Long Sleeves Soccer Club Jersey

    cheap 49ers Mens Strobe Limited
    cheap Chargers Womens Diamond Game
    Texans Youth Split Elite
    cheap Custom Buccaneers
    cheap Cowboys Womens Black Fashion Game

    http://www.leapatuf.com/kid-soccer-club-c-2399_2400/juventus-23-vidal-home-kid-soccer-club-jersey-p-66882.html – Juventus #23 Vidal Home Kid Soccer Club Jersey
    http://www.leapatuf.com/chicago-blackhawks-c-2356_2370/blackhawks-2-duncan-keith-black-2015-winter-classic-stitched-nhl-jersey-p-41703.html – Blackhawks #2 Duncan Keith Black 2015 Winter Classic Stitched NHL Jersey
    http://www.leapatuf.com/detroit-red-wings-c-2523_2530_2628/top-nhl-detroit-red-wings-mn-snapback-hat-nu04-cheap-sale-p-40265.html – Top NHL Detroit Red Wings M&N Snapback Hat NU04 Cheap Sale
    http://www.leapatuf.com/philadelphia-eagles-c-1548_1573/nike-eagles-20-brian-dawkins-midnight-green-team-color-mens-stitched-nfl-new-elite-jersey-p-58499.html – Nike Eagles #20 Brian Dawkins Midnight Green Team Color Men’s Stitched NFL New Elite Jersey
    http://www.leapatuf.com/saints-youth-drift-fashion-elite-c-1619_1629_4007/nike-saints-80-jimmy-graham-black-team-color-youth-stitched-nfl-elite-drift-fashion-jersey-p-57280.html – Nike Saints #80 Jimmy Graham Black Team Color Youth Stitched NFL Elite Drift Fashion Jersey

    http://www.leapatuf.com/minnesota-vikings-c-1548_1567/nike-vikings-26-trae-waynes-white-womens-stitched-nfl-elite-jersey-p-69710.html
    http://www.leapatuf.com/miami-heat-c-2004_2019/heat-3-dwyane-wade-black-new-latin-nights-stitched-nba-jersey-p-40952.html
    http://www.leapatuf.com/kid-soccer-club-c-2399_2400/real-madrid-1-casillas-grey-kid-soccer-club-jersey-p-68184.html
    http://www.leapatuf.com/san-francisco-49ers-c-2523_2527_2618/top-nfl-san-francisco-49ers-snapback-hat-h140814116-p-56696.html
    http://www.leapatuf.com/seahawks-mens-strobe-limited-c-1619_1684_4934/nike-seahawks-25-richard-sherman-steel-blue-team-color-mens-stitched-nfl-limited-strobe-jersey-p-51379.html

    Nike San Diego Chargers Authentic Logo Long Sleeve T-Shirt Blue
    Nike Broncos #7 John Elway Navy Blue Women’s Embroidered NFL Elite Light Diamond Jersey
    Barcelona Authentic Soccer Jackets Blue
    Nike Ravens #9 Justin Tucker Purple Team Color Women’s Stitched NFL New Elite Jersey
    Revolution 30 Autographed Cavaliers #2 Kyrie Irving Red The Champions Patch Stitched NBA Jersey

    cheap Cowboys Womens Drift Fashion Elite
    cheap Broncos Youth Fadeaway Fashion Elite
    Miami Marlins
    cheap St. Louis Cardinals
    Indiana Pacers

    http://www.earringmarket.com/croatia-jersey-c-2399_2467_2495/croatia-10-luka-modric-home-soccer-country-jersey-p-37332.html – Croatia #10 Luka Modric Home Soccer Country Jersey
    http://www.earringmarket.com/bears-womens-split-elite-c-1619_1623_1957/nike-bears-22-matt-forte-navy-bluewhite-womens-embroidered-nfl-elite-split-jersey-p-44801.html – Nike Bears #22 Matt Forte Navy Blue/White Women’s Embroidered NFL Elite Split Jersey
    http://www.earringmarket.com/houston-astros-c-2010_2149/astros-blank-white-usmc-cool-base-embroidered-baseball-jersey-p-41335.html – Astros Blank White USMC Cool Base Embroidered Baseball Jersey
    http://www.earringmarket.com/carolina-panthers-c-1548_1554/nike-panthers-1-cam-newton-blue-alternate-womens-nfl-game-jersey-p-22404.html – Nike Panthers #1 Cam Newton Blue Alternate Womens NFL Game Jersey
    http://www.earringmarket.com/chargers-mens-tshirts-c-1_49_101_102/nike-nfl-mens-san-diego-chargers-brown-heart-and-soul-tshirt-013-p-24693.html – Nike NFL Mens San Diego Chargers Brown Heart and Soul T-Shirt 013

    http://www.earringmarket.com/seahawks-youth-fadeaway-fashion-elite-c-1619_1684_3048/nike-seahawks-24-marshawn-lynch-steel-bluegreen-youth-stitched-nfl-elite-fadeaway-fashion-jersey-p-47188.html
    http://www.earringmarket.com/kansas-city-royals-c-2010_2134/royals-8-mike-moustakas-light-blue-alternate-1-new-cool-base-stitched-baseball-jersey-p-70117.html
    http://www.earringmarket.com/womens-nhl-tshirts-c-1_2154_2156/
    http://www.earringmarket.com/titans-womens-tshirts-c-1_49_111_147/nike-nfl-womens-tennessee-titans-light-green-critical-victory-tshirt-035-p-26232.html
    http://www.earringmarket.com/miami-dolphins-c-1548_1566/nike-dolphins-14-jarvis-landry-black-mens-stitched-nfl-limited-salute-to-service-jersey-p-69069.html

  2. Top Quality New Era Caps Outlet Online Store
    http://www.cheaphats16.com/http://www.cheaphats16.com!
    NBA Toronto Raptors Snapback http://www.cheaphats16.com/hats-p-1477.html
    NBA Golden State Warriors Snapback http://www.cheaphats16.com/hats-p-799.html
    MLB Philadelphia Phillies Snapbacks http://www.cheaphats16.com/hats-p-2042.html
    NBA Oklahoma City Thunder Snapback http://www.cheaphats16.com/hats-p-1387.html
    NBA Miami Heat Snapbacks http://www.cheaphats16.com/hats-p-1070.html
    NBA Miami Heat Snapbacks http://www.cheaphats16.com/hats-p-1106.html
    NBA Miami Heat Snapbacks http://www.cheaphats16.com/hats-p-1102.html
    NBA Boston Celtics Snapback http://www.cheaphats16.com/hats-p-35.html
    NBA Chicago Bulls Snapback http://www.cheaphats16.com/hats-p-264.html
    NBA Atlanta Hawks Snapback http://www.cheaphats16.com/hats-p-31.html
    NBA Los Angeles Lakers Snapbacks http://www.cheaphats16.com/hats-p-936.html
    MLB Detroit Tigers Snapbacks http://www.cheaphats16.com/hats-p-1742.html
    NBA San Antonio Spurs Snapback http://www.cheaphats16.com/hats-p-1434.html
    NBA Milwaukee Bucks Snapbacks http://www.cheaphats16.com/hats-p-1496.html
    NFL Oakland Raiders Snapbacks http://www.cheaphats16.com/hats-p-2352.html

    NBA Chicago Bulls Snapback
    NFL St Louis Rams Snapbacks
    NFL Denver Broncos Snapbacks
    NBA Cleveland Cavaliers Snapback
    NFL Kansas City Chiefs Snapbacks

    http://www.basketballhat.com/Hats-p-12082.html NBA Chicago Bulls Snapback
    http://www.basketballhat.com/Hats-p-9964.html Provide Cincinnati Reds 47 Brand MLB Sparhawk Cap Red
    http://www.basketballhat.com/Hats-p-4369.html CR266902 Green Minnesota Wild Reebok "NHL 2014 Season Spin
    http://www.basketballhat.com/Hats-p-9890.html Cincinnati Reds 47 Brand MLB Privateer ’47 CLOSER Cap Black/Whit
    http://www.basketballhat.com/Hats-p-9181.html Nice Looking San Diego Padres MLB Diamond Heather 59FIFTY Cap St
    http://www.basketballhat.com/Hats-p-3045.html Buy Houston Astros MLB Youth Gray Black and White 59FIFTY Storm
    http://www.basketballhat.com/Hats-p-13242.html NBA Oklahoma City Thunder Snapback
    http://www.basketballhat.com/Hats-p-3504.html CF336038 Green/Gray Calgary Flames Reebok "NHL Practice St.
    http://www.basketballhat.com/Hats-p-8746.html Navy/White Dallas Cowboys New Era "NFL Official On Field 59
    http://www.basketballhat.com/Hats-p-12557.html NBA Cleveland Cavaliers Snapback
    http://www.basketballhat.com/Hats-p-8296.html Low-Priced Kansas City Royals MLB Heather Basic 59FIFTY Cap Gray
    http://www.basketballhat.com/Hats-p-7555.html High Quality Cleveland Indians MLB Split Time 59FIFTY Cap Red
    http://www.basketballhat.com/Hats-p-3988.html Cheapest Arizona Diamondbacks MLB Pop Tonal 59FIFTY Cap Green/Gr
    http://www.basketballhat.com/Hats-p-429.html AF243760 Black/Gray San Jose Sharks Reebok "NHL 13-14 Playo
    http://www.basketballhat.com/Hats-p-3600.html Charming Chicago White Sox MLB Camo Pop Leopard Vize 59FIFTY Cap

    http://www.cheaphats16.com/p-1614.html
    http://www.cheaphats16.com/p-2588.html
    http://www.cheaphats16.com/p-2057.html
    http://www.cheaphats16.com/p-2342.html
    http://www.cheaphats16.com/p-930.html

    MLB New York Yankees Snapbacks http://www.hatstips.com/p-1957.html
    NBA San Antonio Spurs Snapback http://www.hatstips.com/p-1459.html
    NBA Charlotte Hornets Snapbacks http://www.hatstips.com/p-1491.html
    NBA Los Angeles Lakers Snapbacks http://www.hatstips.com/p-899.html
    NBA Miami Heat Snapbacks http://www.hatstips.com/p-1151.html

    Top Quality New Era Caps Outlet Online Store
    http://www.hatstips.com/ – More info>>>

  3. Top Quality New Era Caps Outlet Online Store
    http://www.cheaphats16.com/ – cheaphats16…
    MLB Boston Red Sox Snapbacks http://www.cheaphats16.com/hats-p-1640.html
    NBA Chicago Bulls Snapback http://www.cheaphats16.com/hats-p-186.html
    NBA Miami Heat Snapbacks http://www.cheaphats16.com/hats-p-1123.html
    NBA Miami Heat Snapbacks http://www.cheaphats16.com/hats-p-1130.html
    MLB Boston Red Sox Snapbacks http://www.cheaphats16.com/hats-p-1644.html
    MLB Toronto Blue Jays Snapbacks http://www.cheaphats16.com/hats-p-2195.html
    NBA Chicago Bulls Snapback http://www.cheaphats16.com/hats-p-425.html
    NBA Chicago Bulls Snapback http://www.cheaphats16.com/hats-p-249.html
    NFL Kansas City Chiefs Snapbacks http://www.cheaphats16.com/hats-p-2332.html
    MLB Pittsburgh Pirates Snapbacks http://www.cheaphats16.com/hats-p-2085.html
    NFL Indianapolis Colts Snapbacks http://www.cheaphats16.com/hats-p-2289.html
    NBA Chicago Bulls Snapback http://www.cheaphats16.com/hats-p-529.html
    MLB New York Mets Snapbacks http://www.cheaphats16.com/hats-p-1884.html
    MLB Atlanta Braves Snapbacks http://www.cheaphats16.com/hats-p-1579.html
    NBA Miami Heat Snapbacks http://www.cheaphats16.com/hats-p-1021.html

    NBA Oklahoma City Thunder Snapback
    NFL Miami Dolphins Snapbacks
    NBA Denver Nuggets Snapback
    MLB Boston Red Sox Snapbacks
    NFL Oakland Raiders Snapbacks

    http://www.basketballhat.com/Hats-p-8536.html Navy Houston Texans New Era "NFL Glowflake Knit" – Nkh
    http://www.basketballhat.com/Hats-p-62.html 100% Quality Guarantee Boston Red Sox MLB AG Tone 59FIFTY Cap Gr
    http://www.basketballhat.com/Hats-p-2795.html Buy Baltimore Orioles MLB BW 2 Tone 59FIFTY Cap Purple/Black
    http://www.basketballhat.com/Hats-p-7717.html Hot Sale Pittsburgh Pirates MLB St. Pat 59FIFTY Cap Kelly Green
    http://www.basketballhat.com/Hats-p-8585.html Navy Seattle Seahawks 47 Brand "NFL ’47 FRANCHISE Cap"
    http://www.basketballhat.com/Hats-p-8718.html Navy/Purple Baltimore Ravens New Era "NFL Densuede 59FIFTY
    http://www.basketballhat.com/Hats-p-11539.html White/Red Kansas City Chiefs New Era "NFL 2014 Training 39T
    http://www.basketballhat.com/Hats-p-8711.html Navy/Orange Chicago Bears New Era "NFL Team Satin A-Frame 9
    http://www.basketballhat.com/Hats-p-2594.html BR545044 Camo/Red Florida Panthers Reebok "NHL 2014 Camo Tr
    http://www.basketballhat.com/Hats-p-9936.html Promotions Chicago White Sox MLB Single A 39THIRTY Black
    http://www.basketballhat.com/Hats-p-12489.html NBA Cleveland Cavaliers Snapback
    http://www.basketballhat.com/Hats-p-2898.html Buy Seattle Mariners MLB Diamond Era White Front 39THIRTY Cap Wh
    http://www.basketballhat.com/Hats-p-10283.html Red Cincinnati Bengals New Era "NFL Fit Basic 9FIFTY Snapba
    http://www.basketballhat.com/Hats-p-7590.html High Quality San Diego Padres MLB C-Dub 2.0 59FIFTY Cap RoyalBlu
    http://www.basketballhat.com/Hats-p-4779.html Discount Pittsburgh Pirates MLB Diamond Era 2 Tone 39THIRTY Cap

    http://www.cheaphats16.com/p-1300.html
    http://www.cheaphats16.com/p-1792.html
    http://www.cheaphats16.com/p-691.html
    http://www.cheaphats16.com/p-889.html
    http://www.cheaphats16.com/p-2461.html

    NBA Chicago Bulls Snapback http://www.hatstips.com/p-422.html
    NBA Boston Celtics Snapback http://www.hatstips.com/p-83.html
    NBA Golden State Warriors Snapback http://www.hatstips.com/p-851.html
    NBA Orlando Magic Snapback http://www.hatstips.com/p-1415.html
    100% Quality New Bucket Hats http://www.hatstips.com/p-2650.html

    Top Quality New Era Caps Outlet Online Store
    http://www.hatstips.com/ – More info!

Leave a Reply

Your email address will not be published. Required fields are marked *