How To Setup A YouTube Pre-Roll Ad Campaign With AdWords

YouTube Advertising is a great ad platform to gain exposure.  Video ads are lot more engaging and has been proven to have a much better recall than text ads. With over 1 billion unique visitors each month, you can bet you’ll be getting your message across. And this goes for companies that are B2B company as well.

  • Video increases the viewers understanding of the primary message 74% greater than text ads.
  • An average video consumer spends 16 minutes watching video ads each month.
  • 80% of Internet users remember the video ads they watch online.
  • Last but not least, consumers are 27 times more likely to click on a video ad than a banner ad.

This means that you might want to skip the banner display ads this month and try out YouTube with GoLocalExpert.

What Are Pre-Roll Ads

A pre-roll is a video ad or commercial-like video that precedes the main video.YouTube refers to them as In-Stream video advertisements.

In-stream ads are generally 15, 30, or 60 seconds in length and are inserted into videos by YouTube partners. You can choose from a variety of in-stream ad options based on your goals and budget. Popular choices that are mobile-friendly include the following.

  • TrueView in-stream ads – Ads that let viewers choose to view or skip after five seconds. Advertisers pay only when a viewer has watched the full ad, or a minimum of 30 seconds of it.
  • In-stream select ads – Ads that let viewers choose to view or skip after five seconds. Advertisers reserve the ad inventory and are charged whenever their ad loads, regardless of whether a viewer skips it after five seconds.
  • Standard in-stream ads – Ads that are not skippable and generally are 15 – 30 seconds long, depending on the length of the video they are preceding.

Specifications for Pre-Roll Video Ads

The basic specification for using a new or previously uploaded YouTube video as a pre-roll ad is that the video that is public and embeddable with a minimum resolution of 480×360 (4:3 aspect ratio) or 640×360 (16:9 aspect ratio), and filmed at a 30 FPS. Ads must be family safe, and the destination URLs they promote must not contain non-family or adult content.

How to Create Your Pre-Roll Ad Video

YouTube offers a guide on how to create a great pre-roll ad video, which includes a checklist of equipment you will need plus nine tips on creating a great video. The best tip out of the bunch is to make sure you grab your audience’s attention within the first five secondsso they don’t skip your ad.

How to Create a Pre-Roll Ad Campaign

To create a video pre-roll ad campaign, you will want to create your video ad, upload it to YouTube, and then set up your campaign in your Google AdWords account by creating a new Online Video campaign.


If you are familiar with a Google AdWords ad campaign setup, this is going to be a familiar process. You will choose standard or accelerated delivery of your ad, specific networks to show your ad upon (YouTube Search, YouTube Videos, and/or the Google Display Network), and the language / location of your targeted audience. The ad creative in this case will be a link to your YouTube video.


You will also want to configure the Advanced Settings to specify the duration of your ad, the goal of your ad (views or conversions), number of impressions for each unique viewer, and device targeting.



Following this, you will be able to set up your targeting groups based on age, gender, interests, videos on specific topics, remarketing (people who have visited your website), keywords, and specific video placements on YouTube and the Google Display Network.

Want to hear how brands like GoPro, RedBull, Adidas, and others have leveraged YouTube? Contact us and we will show you.

Http2 Vs. Http1.1



The HTTP we are all familiar with is now in its way out. While it has done its job quite well for the past few decades, it’s now become inefficient in today’s data heavy websites.

Here are some past techniques (rather hacks) for website design and development for the old HTTP1 that are soon to be extinct:

  • Spriting: taking multiple images, combining them into one image, and using CSS to only show part of that image in a particular place.
  • Concatenating: Taking multiple CSS or JS files and sticking them into one large file.
  • Serving assets from a cookie-less domain.
  • Sharding: creating different domains or sub-domains to host assets like images.

The first two techniques are aimed at avoiding multiple HTTP requests. In HTTP1 a request is a very costly thing and takes a lot of time, each request may be loaded down with cookies that must be sent as part of the request, and none of it is compressed. It’s faster to lump a bunch of things together and get it all done in one go than to keep asking for different resources.

The third technique is used to minimize the time required to get assets; cookies, if set, must be sent to the requested domain along with every request – that adds up to a lot of ‘wasted’ space on the line. If your assets are on a different domain that doesn’t use cookies, then requests for those files won’t need to send cookies with them, and it’s all a bit faster.

The last technique, sharding, is because browsers used to only allow two simultaneous HTTP requests per domain. If you create a new domain for some of your assets, then you double the amount of simultaneous connections the browser will allow in order to get your files. Thus, you can pull the website content down faster. In reality, sharding hasn’t been too useful in the last couple of years because browser vendors decided the ‘two connections’ restriction was daft, and they ignored it.


Here’s some good advice! Do not use those HTTP1 based best practices with a website being served over HTTP2. It also means that all of those HTTP1 performance techniques are harmful. They will make a HTTP2 load slower.

HTTP2 makes the cost of multiple requests far less because of a number of techniques it does itself.

  • It can leave the connection open for re-use for very extended periods of time, so there’s no need for that costly handshake that HTTP1 requires for every request.
  • HTTP2 also uses compression, unlike HTTP1, and so the size of the request is significantly smaller – and thus faster.
  • HTTP2 multiplexes; it can send and receive multiple things at the same time over one connection.

The long and short of it is; when you build a front-end to a website, and you know it’s going to be served over HTTP2 – you need to ensure you’re not using legacy HTTP1 performance techniques that are going to harm the site under HTTP2.

Hope this helps you in your next development endeavor

SugarCRM: Change Address State and Country to Dropdown Menu

Instructions on how to change the Address State and Country textbox to dropdown. By default in Sugar it is a textbox. The state dropdown will also have dependency on the country and options in State will change according to the selected option in Country. This will also affect the conditions of the fields in Reports module.

Module used for this is Leads module.

1. Go to the following files



and add the following codes to the file:

$dictionary['Lead']['fields']['primary_address_state']['type'] = 'enum';
$dictionary['Lead']['fields']['primary_address_state']['options'] = 'cstm_states_list';
$dictionary['Lead']['fields']['alt_address_state']['type'] = 'enum';
$dictionary['Lead']['fields']['alt_address_state']['options'] = 'cstm_states_list';
$dictionary['Lead']['fields']['primary_address_country']['type'] = 'enum';
$dictionary['Lead']['fields']['primary_address_country']['options'] = 'cstm_countries_list';
$dictionary['Lead']['fields']['alt_address_country']['type'] = 'enum';
$dictionary['Lead']['fields']['alt_address_country']['options'] = 'cstm_countries_list';

*Note: This will make the type of the Primary and Alternate fields to dropdown and will assign cstm_states_list and cstm_countries_list as the options which is declared on No. 2.

$dictionary['Lead']['fields']['primary_address_state']['visibility_grid'] = array(
	'trigger' => 'primary_address_country',
	'values' => array(
		'Australia' => Array ('', 'ACT', 'NSW', 'VIC', 'QLD', 'SA', 'WA', 'TAS', 'NT'),
		'New Zealand' => Array ('', 'Auckland', 'Canterbury', 'Wellington', 'Waikato', 'Bay of Plenty', 'Manawatu-Wanganui', 'Otago', 'Hawkes Bay',
			'Northland', 'Taranaki', 'Southland', 'Nelson', 'Gisborne', 'Marlborough', 'Tasman','West Coast',),

*Note: Value in the trigger is the field the state options will be dependent to. In the example, when Australia is selected, the options in the state will be the array assigned.
2. Go to <sugar>/custom/include/language/en_us.lang.php. This contains the custom dropdown list declarations. Add the codes below:
This is the default value for State dropdown

$GLOBALS['app_list_strings']['cstm_states_list'] = Array (
    '' => '',
    'ACT' => 'ACT',
    'NSW' => 'NSW',
    'VIC' => 'VIC',
    'QLD' => 'QLD',
    'SA' => 'SA',
    'WA' => 'WA',
    'TAS' => 'TAS',
    'NT' => 'NT',
    'Auckland' => 'Auckland',
    'Canterbury' => 'Canterbury',
    'Wellington' => 'Wellington',
    'Waikato' => 'Waikato',
    'Bay of Plenty' => 'Bay of Plenty',
    'Manawatu-Wanganui' => 'Manawatu-Wanganui',
    'Otago' => 'Otago',
    "Hawkes Bay" => "Hawkes Bay",
    'Northland' => 'Northland',
    'Taranaki' => 'Taranaki',
    'Southland' => 'Southland',
    'Nelson' => 'Nelson',
    'Gisborne' => 'Gisborne',
    'Marlborough' => 'Marlborough',
    'Tasman' => 'Tasman',
    'West Coast' => 'West Coast',);

This is the default value for Country dropdown

$GLOBALS['app_list_strings']['cstm_countries_list'] = Array (
    'Australia' => 'Australia',
    'New Zealand' => 'New Zealand',);

3. Go to <sugar>/include/SugarFields/Fields/Address and copy this files





and create a CustomAddress folder in <sugar>/include/SugarFields/Fields/ then paste the fields inside CustomAddress folder.

4. Go to <sugar>/include/SugarFeilds/Fields/CustomAddress/EditView.tpland change the State field code:

<input id="{{$state}}" tabindex="{{$tabindex}}" type="text" maxlength="{{$vardef.len}}" name="{{$state}}" size="{{$displayParams.size|default:30}}" value="{$fields.{{$state}}.value}" />

to this:

<select name="{{$state}}" width="{{$displayParams.size|default:30}}" id="{{$state}}" title="{{$}}" tabindex="{{$tabindex}}" {{if isset($displayParams.script)}}{{$displayParams.script}}{{/if}}>
{if isset($fields.{{$state}}.value) && $fields.{{$state}}.value != ''}
     {html_options options=$fields.{{$state}}.options selected=$fields.{{$state}}.value}
     {html_options options=$fields.{{$state}}.options selected=$fields.{{$state}}.default_value}

and also change the Country field code:

<input id="{{$country}}" tabindex="{{$tabindex}}" type="text" maxlength="{{$vardef.len}}" name="{{$country}}" size="{{$displayParams.size|default:30}}" value="{$fields.{{$country}}.value}" />

to this:

<select name="{{$country}}" width="{{$displayParams.size|default:30}}" id="{{$country}}" title="{{$}}" tabindex="{{$tabindex}}" {{if isset($displayParams.script)}}{{$displayParams.script}}{{/if}}>
{if isset($fields.{{$country}}.value) && $fields.{{$country}}.value != ''}
     {html_options options=$fields.{{$country}}.options selected=$fields.{{$country}}.value}
     {html_options options=$fields.{{$country}}.options selected=$fields.{{$country}}.default_value}

5. Go to <sugar>/custom/modules/Leads/metadata and updateeditviewdefs.php. Look for this code:

array (
            'name' => 'primary_address_street',
            'hideLabel' => true,
            'type' => 'Address',
            'displayParams' => 
            array (
              'key' => 'primary',
              'rows' => 2,
              'cols' => 30,
              'maxlength' => 150,
          1 => 
          array (
            'name' => 'alt_address_street',
            'hideLabel' => true,
            'type' => 'Address',
            'displayParams' => 
            array (
              'key' => 'alt',
              'copy' => 'primary',
              'rows' => 2,
              'cols' => 30,
              'maxlength' => 150,

and update the type from Address to CustomAddress

array (
            'name' => 'primary_address_street',
            'hideLabel' => true,
            'type' => 'CustomAddress',
            'displayParams' => 
            array (
              'key' => 'primary',
              'rows' => 2,
              'cols' => 30,
              'maxlength' => 150,
          1 => 
          array (
            'name' => 'alt_address_street',
            'hideLabel' => true,
            'type' => 'CustomAddress',
            'displayParams' => 
            array (
              'key' => 'alt',
              'copy' => 'primary',
              'rows' => 2,
              'cols' => 30,
              'maxlength' => 150,

6. Perform Quick Repair and Rebuild

A Must On Every Website You Install – Info.Php

For all you do-it-yourselfers, here’s some good advice. On every website you create, make an info.php file. This will allow you to see your php memory for your server and will allow you to know which version of php you have. This tool is very useful when dealing with databases and/or eCommerce websites (when you’re in the development stage, you often need to increase php memory to upload and download large files).

How to:

  1. Download notepad++ or sublime text so you have something to write php with.
  2. Connect notepad++ with your server and open the root folder (normally the ‘public_html’ folder)
  3. Create the following short text using your notepad++ or sublime text
    <?php phpinfo(); ?>
  4. Save your file directly into your ‘public_html’ server folder as ‘info.php’
  5. Now when you type your domain + info.php you will get the following report (example:


WordPress WooCommerce Product Subcategory Showing Products

Project Fix:

I see a lot of WooCommerce users complaining that they see their products listed under the their subcategories, so here’s how to fix this:


How to Fix (step-by-step):

  1. Under Products on the left hand panel select select Categories
  2. Create a Category but make sure there’s no Parent Category assigned to this first category (example: Men)
  3. Create another Category but this time select Parent Category to assign this to (example: Shoes)
  4. You should now have a primary Category and a Subcategory (Men > Shoes)
  5. Select each of the Categories and make sure that under the Display type they all say Subcategory (Both Men and Shoes)
  6. Now, create your product (for example: A variable product for men shoes showing all the proper color and sizes – will be on a different tutorial)
  7. After doing so, go to the WooCommerce icon on the left panel and select Settings
  8. Go to the Products Tab
  9. Make sure Product Archive / Shop Page is selecting your shop page
  10. Make sure Shop Page Display and Default Category Display both are using the Show Subcategory
  11. Click save, and you’re good to go!

You should now be able to no longer see your products in your subcategories. Enjoy, and as always feel free to ask questions:)

WordPress Version 4.1 + WooCommerce Version 2.2.10