Camera Ratio Reference Images for Social Media Sharing

When you’re planning a shot, specifically in the case of food photography, framing is very important. However, usage is just as important of a consideration, because images can be used for print ads (portrait layout), social media (landscape and square), menus or websites (varies). Once you are aware of how the images will be used, the next step is figuring out how to frame your shots to accommodate not only cropping, but space for additional graphic design work (ads). To that end, it’s important to know how common social media sizes relate to your camera’s natural ratio.
Continue reading

The Startup Guarantee – 3+ Years in Business

The Startup Guarantee

We guarantee that our service will be operational for 3+ years, starting from the day that you signed up for an account. We stand behind this with a money back promise, for up to 1 year of service, if we violate this guarantee.

Why Offer a Guarantee?

Online services, especially for businesses, require more commitment and trust between the customer and the service. To that end, one of the top concerns of a potential customer is simply, “If I invest my time and money with you, will you still be here in 6 months?” This guarantee is about promising that the service will continue to run, but placing stakes on that promise, in the form of a refund for services paid for if the guarantee is broken.

If you’d like to use the guarantee for your online service (SaaS — Software as a Service), here are a few tools for you.

Continue reading

Free eBay Template Built with Bootstrap

Special Thanks to Phil Cryer for the initial idea and code.

This no longer works on eBay due to conflicting CSS with Bootstrap 3

There are two types of listings on eBay you see the most: Casual sellers using the simple text editor for their description, and power sellers using outdated non-responsive templates that are distracting and dated. Here comes Bootstrap to save the day for either one of those customers.

Continue reading

How to Stop Email Spoofing in G Suite

G Suite, formerly Google Apps, offers many tools, but most importantly it offers branded Gmail for your domain; critical for any real business. However, if you’ve had an established domain for a long time, it’s likely you have started to see bounces or spam responses with FROM addresses @yourdomain.com. However, the first part of the email is gibberish and not a real email address from your account.

This behaviour is called email spoofing and can be harmful to your brand and your email deliverability. However, removing this is relatively simple. It needs to be completed in 3 steps.

Login to the admin console got G Suite and adjust the following settings:

  • Disable outbound gateways (Settings for Gmail > Advanced settings)
  • Discard the email; Catch-all address (Settings for Gmail > Advances settings)
  • Authenticate email with DKIM (Settings for Gmail > Authenticate Email)

Tip: Use the search bar to quickly access Settings for Gmail. The DKIM setup is more involved, but Google’s help can assist you with those changes which need to be done with your domain name hosting company.

Selectize.js ComboBox: Cloning and Destroying

Selectize.js is a javascript library that allows you to offer more complex HTML select boxes, such as combining a select and an input box, commonly known as an autocomplete combobox. Most importantly, they have a built-in stylesheet for Bootstrap 3. However, I discovered a problem when you are trying to add another form field dynamically, specifically using jQuery’s .clone() function.

However, selectize() does not clone well… it breaks horribly. The key you must .destroy() the selectize() prior to cloning. Of course, another problem occurs then: The select element, upon selectize.destroy(), will reset the value to the last option. Solution? Store the value, destroy(), then set the value.

// When add button is clicked
$('#add').on('click',function(){
   $('.combobox').each(function(){ // do this for every select with the 'combobox' class
      if ($(this)[0].selectize) { // requires [0] to select the proper object
         var value = $(this).val(); // store the current value of the select/input
         $(this)[0].selectize.destroy(); // destroys selectize()
         $(this).val(value);  // set back the value of the select/input
      }
   });
   $('#monsters .form-group:first')
      .clone() // copy
      .insertAfter('#monsters .form-group:last'); // where
      selectizeme(); // reinitialize selectize on all .combobox
});

Here’s a working demo of the functionality.

Pokémon Go for Business: A Guide to Capturing New Customers (Kindle)

“Pokémon Go for Business” is a new ebook dedicated to helping every consumer facing business attract new customers. Well researched and full of specific, qualified ideas, the book helps explain the mobile game obsession to those who may never have heard of Pokémon before. Most importantly, it breaks down marketing ideas based on specific criteria, such as: Lure Modules, Gyms, and five distinct business types (e.g. Active Shopper, such as a retail store).

Available now on Amazon sites worldwide.

Included with this book are free Pokéstop icon templates (external download) and an employee handout (external download); the resources you need to get started DOING, not just thinking. The first layer of the table of contents is listed below for your convenience:

  • Introduction to Pokémon Go
  • Lure Modules: Who, When, and How Often
  • Marketing Toward Pokémon Go Players Without Lure Modules
  • Category Specific Marketing
  • Promotional/Guerrilla Marketing
  • Future Pokémon Go Features
  • Pokémon Go Quick Player Guide

PHP Alternatives for Nested IF Statements

We’ve all done it. It starts as a single IF statement:

if (empty($var)){ // does it exist?
   $error = 'No username entered';
   return $error;
}
// everything is OK

Then we decide, we need to check something else, so we just add in one more IF statement:

if (empty($var)){ // does it exist?
   $error = 'No username entered';
   return $error;
   if (strlen($var) > 20){ // Is it too long?
      return 'Invalid username';
   }
}
// everything is OK

Continue reading