<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAI Labs</title>
	<atom:link href="http://labs.saidigital.co/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.saidigital.co</link>
	<description>Plugins, themes and more from SAI Digital</description>
	<lastBuildDate>Wed, 22 May 2013 20:27:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Easy Restaurant Menu Manager Extended Improvement</title>
		<link>http://labs.saidigital.co/easy-restaurant-menu-manager-extended-improvement-607/</link>
		<comments>http://labs.saidigital.co/easy-restaurant-menu-manager-extended-improvement-607/#comments</comments>
		<pubDate>Wed, 22 May 2013 20:27:39 +0000</pubDate>
		<dc:creator>Support</dc:creator>
				<category><![CDATA[Product news]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=607</guid>
		<description><![CDATA[We have sent out a small update to Easy Restaurant Menu Manager Extended! A user on the plugin support forum recently noted that it is TOO easy to delete a menu. He accidentally deleted an entire menu late one night while trying to get some changes to his website out. He pointed out that normally [...]]]></description>
				<content:encoded><![CDATA[<p>We have sent out a small update to <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" title="Easy WordPress Restaurant Menu Manager">Easy Restaurant Menu Manager Extended</a>! A user on the plugin support forum recently noted that it is TOO easy to delete a menu. He accidentally deleted an entire menu late one night while trying to get some changes to his website out. He pointed out that normally there is a JavaScript pop-up confirmation on delete actions.</p>
<p>To address this, and hopefully preventing others from doing the same, the plugin now requires that delete actions on the menu and icon indexes be confirmed through a JavaScript pop-up. </p>
<p>Keep up the good suggestions!!</p>
<p>To try out the free version go the <a href="http://wordpress.org/plugins/easy-restaurant-menu-manager/" title="here" target="_blank">Free Version WordPress Plugin page</a>.</p>
<p>and for plugin support go to our <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/support/" target="_blank">support forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/easy-restaurant-menu-manager-extended-improvement-607/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Restaurant Menu Manager PHP Warnings Bug Fix</title>
		<link>http://labs.saidigital.co/easy-restaurant-menu-manager-php-warnings-bug-fix-596/</link>
		<comments>http://labs.saidigital.co/easy-restaurant-menu-manager-php-warnings-bug-fix-596/#comments</comments>
		<pubDate>Fri, 10 May 2013 16:45:58 +0000</pubDate>
		<dc:creator>Support</dc:creator>
				<category><![CDATA[Product news]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=596</guid>
		<description><![CDATA[Depending on your server installation and configuration, sometimes PHP warnings get displayed throughout WordPress plugins, like the Easy Restaurant Menu Manager admin and frontend. In general, PHP warnings can be completely ignored, but they can certainly be confusing when trying to setup and manage a menu. At SAI Digital we use modern development platforms and [...]]]></description>
				<content:encoded><![CDATA[<p>Depending on your server installation and configuration, sometimes <a href="http://php.net/" title="PHP " target="_blank">PHP</a> warnings get displayed throughout WordPress plugins, like the <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" title="Easy Restaurant Menu Manager for WordPress" target="_blank">Easy Restaurant Menu Manager</a> admin and frontend. In general, PHP warnings can be completely ignored, but they can certainly be confusing when trying to setup and manage a menu.</p>
<p>At <a href="http://saidigital.co" title="SAI Digital Web Development Digital Marketing" target="_blank">SAI Digital</a> we use modern development platforms and environments which means we don&#8217;t always see and address the same warnings plugin purchasers may see on the wide array of server platforms and configurations they use.</p>
<p>In the latest <a href="http://wordpress.org/extend/plugins/easy-restaurant-menu-manager/" title="Free Easy Restaurant Menu Manager" target="_blank">Free</a> (1.2.2) and Extended Versions (10.1.2.2) of Easy Restaurant Menu Manager, we&#8217;ve combed through our code and tried to address these warnings. </p>
<p>If, like most, you haven&#8217;t been seeing these warnings, upgrading is not required.</p>
<p>Example, current SAI Digital development environment:</p>
<pre>
$ lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 12.04.2 LTS
Release:	12.04
Codename:	precise

$ php -v
PHP 5.3.10-1ubuntu3.6 with Suhosin-Patch (cli) 
(built: Mar 11 2013 14:31:48) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

$ mysql --version
mysql  Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (x86_64) 
using readline 6.2
</pre>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/easy-restaurant-menu-manager-php-warnings-bug-fix-596/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Three improvements to Easy Restaurant Menu Manager for WordPress</title>
		<link>http://labs.saidigital.co/three-improvements-to-easy-restaurant-menu-manager-for-wordpress-583/</link>
		<comments>http://labs.saidigital.co/three-improvements-to-easy-restaurant-menu-manager-for-wordpress-583/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 17:35:14 +0000</pubDate>
		<dc:creator>Support</dc:creator>
				<category><![CDATA[Product news]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=583</guid>
		<description><![CDATA[We&#8217;ve added three awesome improvements to the Easy Restaurant Menu Manager for WordPress plugin! As requested, there is now a separate print stylesheet that is only displayed on the print view of each menu. This allows you to hide images or add backgrounds and fully customize how the menu prints. The CSS is entered on [...]]]></description>
				<content:encoded><![CDATA[<p>We&#8217;ve added three awesome improvements to the <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" title="WordPress Restaurant Menu Manager">Easy Restaurant Menu Manager for WordPress plugin</a>!</p>
<p>As requested, there is now a separate print stylesheet that is only displayed on the print view of each menu. This allows you to hide images or add backgrounds and fully customize how the menu prints. The CSS is entered on the Global Settings page on the plugin admin right below the existing dynamic CSS box.</p>
<p>We also clarified what is meant by the &#8220;Default&#8221; Category. This default was left over from previous development and no longer needed. Now the default category says, &#8220;None (hidden)&#8221; which more accurately reflects what putting a menu item in the default category actually does.</p>
<p>And to alleviate some stress on the support forum, we modified style.css to more forcibly remove bullet points on ul and li HTML elements. The previous CSS added the directive to not show bullet points; however, many themes conflicted with this and re-added them so we added the !important flag to make the plugin function properly on a wider variety of themes right out-of-the-box.</p>
<p>All three additions are a part of the <a href="http://wordpress.org/extend/plugins/easy-restaurant-menu-manager/" title="Free Restaurant Menu Plugin for WordPress">Free</a> and <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" title="Extended WordPress Restaurant Plugin">Extended</a> versions of the restaurant plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/three-improvements-to-easy-restaurant-menu-manager-for-wordpress-583/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restart Rackspace Cloud Servers with Fog and Cloud Server API</title>
		<link>http://labs.saidigital.co/get-rackspace-cloud-servers-with-fog-and-cloud-server-api-562/</link>
		<comments>http://labs.saidigital.co/get-rackspace-cloud-servers-with-fog-and-cloud-server-api-562/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 19:31:57 +0000</pubDate>
		<dc:creator>Richard Royal</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=562</guid>
		<description><![CDATA[Recently, we needed to be able to restart our Rackspace Cloud Servers programmatically and found that the easiest method is to use gem fog. Initially we tried to use the cloudservers gem but found that it cannot return Rackspace Generation 2 servers. Unfortunately we did not discover this until after a support ticket was opened [...]]]></description>
				<content:encoded><![CDATA[<p>Recently, we needed to be able to restart our <a href="http://www.rackspace.com/cloud/servers/overview_b/" title="Rackspace - Baller Cloud Server Privider" target="_blank">Rackspace Cloud Servers</a> programmatically and found that the easiest method is to use gem <a href="https://github.com/fog/fog" title="Ruby Cloud Services API Wrapper" target="_blank">fog</a>.</p>
<p>Initially we tried to use the <a href="https://github.com/rackerlabs/ruby-cloudservers" title="Older Cloudservers gem" target="_blank">cloudservers</a> gem but found that it cannot return Rackspace Generation 2 servers. Unfortunately we did not discover this until after a support ticket was opened with Rackspace.</p>
<p>Here&#8217;s a simplified version of what we came up with:</p>
<pre>
class Server < ActiveRecord::Base

  # List of servers in Rackspace account.
  # Returns errors for API key misconfiguration.
  def self.rackspace_servers
    username = ENV['RACKSPACE_API_USERNAME']
    api_key = ENV['RACKSPACE_API_KEY']

    begin
      servers = []

      # Get Gen 2 Servers from Rackspace region dfw
      s = self.get_server_group(username, api_key, "v2", "dfw")
      servers << s if !s.blank?

      # Get Gen 2 Servers from Rackspace region ord
      s = self.get_server_group(username, api_key, "v2", "ord")
      servers << s if !s.blank?

      # Get Gen 1 Servers from Rackspace region ord
      s = self.get_server_group(username, api_key, "v1", "ord")
      servers << s if !s.blank?

      return servers.flatten.sort{ |a, b| a.name <=> b.name }
    rescue
      return "invalid api key"
    end
  end


  #  Get Rackspace server objects from a specified group
  def self.get_server_group( username, api_key, version, region )
    service = Fog::Compute.new({  
                     :provider => 'Rackspace', 
                     :rackspace_username  => username, 
                     :rackspace_api_key => api_key, 
                     :version => version.to_sym, 
                     :rackspace_region => region.to_sym })
    
    service.servers         
  end

end
</pre>
<p>Then we iterate through our server objects and send a reboot request based on some internal logic we needed.</p>
<pre>
# Get Rackspace servers and send hard reboot request if desired.
servers = Server.rackspace_servers
servers.each do |server|
  if server.crazy_logic?
    server.reboot("HARD")
  end
end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/get-rackspace-cloud-servers-with-fog-and-cloud-server-api-562/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Restaurant Menu Manager plugin now comes with RSS2 feed</title>
		<link>http://labs.saidigital.co/rss2-feed-feature-added-to-wordpress-easy-restaurant-menu-manager-532/</link>
		<comments>http://labs.saidigital.co/rss2-feed-feature-added-to-wordpress-easy-restaurant-menu-manager-532/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 15:20:02 +0000</pubDate>
		<dc:creator>Support</dc:creator>
				<category><![CDATA[Product news]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=532</guid>
		<description><![CDATA[You asked for it (repeatedly), and we added it! Now each restaurant menu you setup with WordPress Easy Restaurant Menu Manager has its own RSS feed. Customers can subscribe to special menus to see changing menu content from their feed readers and other integrations. Here is a screenshot of a menu using Google Reader. You [...]]]></description>
				<content:encoded><![CDATA[<p>You asked for it (repeatedly), and we added it!</p>
<p>Now each restaurant menu you setup with <a title="Easy Restaurant Menu Manager for WordPress" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/">WordPress Easy Restaurant Menu Manager</a> has its own RSS feed. Customers can subscribe to special menus to see changing menu content from their feed readers and other integrations.</p>
<p><a href="http://labs.saidigital.co/wp-content/uploads/2013/04/screenshot-9.jpg" target="_blank"><img class="alignright" alt="Lunch Menu viewed in RSS Feed Reader" src="http://labs.saidigital.co/wp-content/uploads/2013/04/screenshot-9-320x200.jpg" /></a> Here is a screenshot of a menu using Google Reader. You have the option to turn the feed on or off for each menu. Here is an example of the raw output of the <a title="Example Raw RSS2 Feed" href="http://product-demos.saidigital.co/wp-restuarant-menu-manager/?wprmm-routing=rss2&amp;menu_id=1" target="_blank">RSS2 Feed</a>.</p>
<p>Keep up the requests and we&#8217;ll keep adding features!</p>
<p>This feature has been added to both the <a title="Easy Restaurant Menu Manager Free" href="http://wordpress.org/extend/plugins/easy-restaurant-menu-manager/" target="_blank">free</a> and extended versions of the plugin. To upgrade to the new version, just follow the instructions you used to <a title="Upgrade to Extended Version of Easy Restaurant Menu Manager" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/support/upgrading-to-easy-restaurant-menu-manager-extended/">upgrade from the free version</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/rss2-feed-feature-added-to-wordpress-easy-restaurant-menu-manager-532/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Restaurant Menu Manager Update</title>
		<link>http://labs.saidigital.co/easy-restaurant-menu-manager-update-511/</link>
		<comments>http://labs.saidigital.co/easy-restaurant-menu-manager-update-511/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 18:01:17 +0000</pubDate>
		<dc:creator>Richard Royal</dc:creator>
				<category><![CDATA[Product news]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=511</guid>
		<description><![CDATA[Great News! We&#8217;ve updated the Easy Restaurant Menu Manager for WordPress again! Here are the new features for the free and extended versions: For the free version (v1.0.8), we&#8217;ve converted all newline characters to HTML break tags for some fields on output. This means you will be more easily able to control the spacing and formatting of the [...]]]></description>
				<content:encoded><![CDATA[<p>Great News! We&#8217;ve updated the <a title="Easy Restaurant Menu Manager for WordPress" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/">Easy Restaurant Menu Manager</a> for WordPress again!</p>
<p>Here are the new features for the free and extended versions:</p>
<p>For the free version (v1.0.8), we&#8217;ve converted all newline characters to HTML break tags for some fields on output. This means you will be more easily able to control the spacing and formatting of the Menu Description, Category Description, and Item Description fields.</p>
<p>Need more control over the look of these fields?</p>
<p>For the <a title="Upgrading to Easy Restaurant Menu Manager Extended" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/support/upgrading-to-easy-restaurant-menu-manager-extended/">Extended Version of East Restaurant Menu Manager</a>, we have added the WordPress WYSIWYG editor to the description fields for the Menu and Categories, while still converting the Item Description newlines to HTML breaks.</p>
<p>Keep requesting new features and participated on the <a title="Support" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/support/">plugin forum</a> and we&#8217;ll keep adding awesome functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/easy-restaurant-menu-manager-update-511/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the HubSpot API and CasperJS for Contact Data Scraping</title>
		<link>http://labs.saidigital.co/using-the-hubspot-api-and-casperjs-for-contact-data-scraping-474/</link>
		<comments>http://labs.saidigital.co/using-the-hubspot-api-and-casperjs-for-contact-data-scraping-474/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 17:46:49 +0000</pubDate>
		<dc:creator>Richard Royal</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=474</guid>
		<description><![CDATA[We recently had a client that needed customer data from their web store to be accessible from their HubSpot account. They needed each person who ordered a product to be put in HubSpot as a Contact, along with the customer&#8217;s order number, purchase date, price, and a list of products that were ordered. Typically, a [...]]]></description>
				<content:encoded><![CDATA[<p>We recently had a client that needed customer data from their web store to be accessible from their HubSpot account. They needed each person who ordered a product to be put in HubSpot as a Contact, along with the customer&#8217;s order number, purchase date, price, and a list of products that were ordered.</p>
<p>Typically, a developer would incorporate the HubSpot API into the web store code natively.  In this case, the client&#8217;s web store provider is located in a country many time zones away, making it difficult to solve problems outside of basic web store functions. Additionally, the web store platform does not have an available API that would allow us to easily export data in a computer parsable manner.</p>
<p>As a HubSpot and inbound marketing partner for the client, we decided to bypass the third party development firm entirely by writing scripts to scrape data from the web store and send that data to HubSpot. Today, these scripts are hosted on the server and run daily, automatically scraping and importing data from the previous day&#8217;s orders.</p>
<p>This method requires two components: a web scraper, and a script that can push data to HubSpot using their new Contact API.</p>
<h2>Web Scraper</h2>
<p><img class="alignright" alt="CasperJS" src="/wp-content/uploads/2013/02/casperjs-logo.png" width="129" height="204" />The web scraper uses <a title="CasperJS is an open source navigation scripting &amp; testing utility" href="http://casperjs.org/" target="_blank">CasperJS</a> to authenticate with the web store through a headless browser, navigate to the recent orders screen, and enter date filters. Our only difficulty was working around the antiquated and non-semantic web store markup to programmatically select the correct buttons and tables. In fact, we assumed writing the scraper would be the hardest part of the project, but we were pleasantly surprised by the simplicity and reliability of CasperJS. We chose to output the data in CSV format to standard out, so the data could be piped to a CSV file on the server, allowing a separate script to feed the data into HubSpot.</p>
<h2>HubSpot Contacts API</h2>
<p>This part ended up being much harder than it needed to be. HubSpot has made a few changes to their API recently, and we were not sure which parts needed to be used and which parts are set to be deprecated. Initially, we chose to use the HubSpot PHP API Wrapper &#8211; <a href="https://github.com/HubSpot/haPiHP" target="_blank">haPiHP</a> with the Leads API component. This requires that a custom API endpoint be created on HubSpot, which they call forms. Using this API, data can be posted to the endpoint in key-value pairs, which the form will accept and convert into Leads.</p>
<p>Ideally, the scripts run once a day and post data from the previous day&#8217;s orders, but we ran into a problem with the initial post. Since the web store does not have an export function, we had to use the script to access all the data from previous sales. After running the script on a few hundred orders, HubSpot informed us that a Leads were being created by sending us email notifications &#8212; over 150,000 of them.</p>
<p>Unfortunately, each email contained a Lead with blank data, so the necessary data was not pushed into HubSpot.  On top of that, the API went awry and left our email provider with no option but to queue all emails from HubSpot. We were not able to communicate via email with them for a few days. At first, we assumed that a job had been corrupted on their end and that there would be no end to the emails. After a phone call with the HubSpot development team, we were convinced that the emails would stop and that we actually needed to switch to the Contacts API and away from the Leads API. We also learned that the Leads API is asynchronous and that the Contact API was not, which would allow us to immediately see if the data was posted correctly. Best of all, there is no email notification when a Contact is created through the Contacts API.</p>
<p>In trying to switch to the other API calls, we found two issues. First, we had been using the custom form API endpoint on a number of projects, and it was unclear whether that part of the API was slated to be deprecated.</p>
<p>After some back and forth with the HubSpot dev team, we learned this:</p>
<blockquote>
<div>I would encourage you not to use those endpoints to push data in, unless that data is form submission which you are capturing. If you simply want to sync data in from one DB to the other, I strongly encourage you to use the &#8220;add contact&#8221; and &#8220;update contact&#8221; API methods.</div>
<div></div>
<div>The custom endpoints won&#8217;t be going away per se, and there are newer versions of that process in the Forms API, but it&#8217;s not really the intended use.</div>
</blockquote>
<p>&nbsp;</p>
<p>So we will continue using the custom form endpoint to push data in until it stops working &#8230; per se.</p>
<p>The second issue we encountered was that, of the two API key generators in HubSpot, one of them does not work with the Contacts API, and the other is hidden. In the client&#8217;s main HubSpot portal, you can generate a token by clicking:</p>
<p><em>Your Name → Settings → API Access</em></p>
<p>The token provided will not allow the use of the Contact API, and the PHP wrapper returns a message that the key is not valid.</p>
<p>After more back and forth with the HubSpot dev team, we learned that the key required can be found by going to <a href="https://app.hubspot.com/keys/get" target="_blank">https://app.hubspot.com/keys/<wbr />get</a>. There is no link to this in the client&#8217;s main HubSpot portal which was causing a lot of confusion.</p>
<h2>Wrapping Up</h2>
<p>From here, the process was pretty simple. A Contact will be rejected if it already exists, unlike with the Lead API. We had to implement a simple Create or Update method which looks something like this: <a title="HubSpot Contacts API - Create or Update" href="https://gist.github.com/richardroyal/4724181" target="_blank">HubSpot Contacts API &#8211; Create or Update</a>. Once the two scripts were in place on the server, we set a cron job to run the scraper and pipe the output to a CSV. Once that completes, the PHP script runs and pushes the data to HubSpot.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/using-the-hubspot-api-and-casperjs-for-contact-data-scraping-474/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using MailChimp API to send email campaigns to a dynamic set of email addresses</title>
		<link>http://labs.saidigital.co/using-mailchimp-api-to-send-email-campaigns-to-a-dynamic-set-of-email-addresses-425/</link>
		<comments>http://labs.saidigital.co/using-mailchimp-api-to-send-email-campaigns-to-a-dynamic-set-of-email-addresses-425/#comments</comments>
		<pubDate>Tue, 13 Nov 2012 18:51:41 +0000</pubDate>
		<dc:creator>Support</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=425</guid>
		<description><![CDATA[We built an app that needed to send email campaigns to groups of users that signed up at trade shows and recruiting events. We chose to use MailChimp to do the actual emailing and email click/statistics tracking. In order to send emails to a dynamic set of users, we found that we needed to add [...]]]></description>
				<content:encoded><![CDATA[<p>We built an app that needed to send email campaigns to groups of users that signed up at trade shows and recruiting events. We chose to use <a href="http://mailchimp.com/"  target="_blank" title="MailChimp Email">MailChimp</a> to do the actual emailing and email click/statistics tracking. </p>
<p>In order to send emails to a dynamic set of users, we found that we needed to add each user to the same, predefined MailChimp list, and then segment that list at send time to send the campaign to a filtered set of email addresses. </p>
<p>Here is some sample Ruby code on how we were able to accomplish this:<br />
<a target="_blank" href="https://gist.github.com/4067628">Using MailChimp API to send email campaigns to a dynamic set of email addresses</a></p>
<p>A rake task grabs all EmailCampaigns needing to be sent and calls this member function on each.</p>
<h3>Rundown:</h3>
<ul>
<li>Segment the full predefined MailChimp list to get a segment_id.</li>
<li>Grab the recipient email addresses from the database. Note, you cannot send to email addresses that are not already on the predefined MailChimp list. We chose to run a separate rake task to continually add new email addresses to that list via the API.</li>
<li>Add the recipient email addresses from the app database to the segmented list on MailChimp.</li>
<li>Create a new campaign on MailChimp with the segmented email campaign_id. For our project we used a predefined email template branded by the client so we also needed the content_section id so that we could inject the email body into the correct location in the template (must be prefaced with &#8216;html_&#8217;, see <a  target="_blank" href="http://apidocs.mailchimp.com/api/1.3/campaigncreate.func.php">campaign_create</a>).</li>
<li>Tell MailChimp to send the campaign and save the campaign id for retrieving statistical information later.</li>
</ul>
<p>Note, this is probably something MailChimp wants you to use their new service <a href="http://mandrill.com/"  target="_blank" title="Mandrill, MailChimp for Apps">Mandrill</a> for. </p>
<h3>Links:</h3>
<ul>
<li><a href="http://apidocs.mailchimp.com/api/1.3/#method-&#038;-error-code-docs" target="_blank">MailChimp API Documentation</a></li>
<li><a href="https://github.com/amro/gibbon" target="_blank">Gibbon API Wrapper</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/using-mailchimp-api-to-send-email-campaigns-to-a-dynamic-set-of-email-addresses-425/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two new features for WordPress Easy Restaurant Menu Manager</title>
		<link>http://labs.saidigital.co/two-new-features-for-wordpress-easy-restaurant-menu-manager-406/</link>
		<comments>http://labs.saidigital.co/two-new-features-for-wordpress-easy-restaurant-menu-manager-406/#comments</comments>
		<pubDate>Tue, 23 Oct 2012 20:29:33 +0000</pubDate>
		<dc:creator>Support</dc:creator>
				<category><![CDATA[Product news]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=406</guid>
		<description><![CDATA[We&#8217;re pushing two new features to the Easy Restaurant Menu Manager plugin for WordPress. First we&#8217;re giving the user control over whether the restaurant menu title gets displayed on the frontend. This was causing some confusion because the menus are usually outputted on a WordPress page that already has a title, which more often than [...]]]></description>
				<content:encoded><![CDATA[<p>We&#8217;re pushing two new features to the <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" title="Easy Restaurant Menu Manager for WordPress">Easy Restaurant Menu Manager</a> plugin for WordPress.</p>
<p>First we&#8217;re giving the user control over whether the restaurant menu title gets displayed on the frontend. This was causing some confusion because the menus are usually outputted on a WordPress page that already has a title, which more often than not matches the restaurant menu title. This resulted in the restaurant menu title seemingly being displayed twice, which led some users to leave the menu title blank on the WordPress admin which caused further confusion when they tried to go back and edit the menu and there was no title to click on. Our initial solution was to have users hide the menu title with CSS, but now we have a much easier method.</p>
<p>Secondly, we are allowing WordPress users with the Editor capability to edit the menus. Originally only admins could edit restaurant menus on the WordPress backend but after a solid demand, we have loosened that restriction so that WordPress admins and WordPress editors can manage the restaurant menus.</p>
<p>Both these features are being pushed to the <a href="http://wordpress.org/extend/plugins/easy-restaurant-menu-manager/" title="Easy Restaurant Menu Manager" target="_blank">free plugin</a> and <a href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" title="Easy Restaurant Menu Manager for WordPress Extended Version">extended plugin</a> versions.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/two-new-features-for-wordpress-easy-restaurant-menu-manager-406/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>New product: WordPress plugin for easy restaurant menu management</title>
		<link>http://labs.saidigital.co/new-product-wordpress-plugin-for-easy-restaurant-menu-management-356/</link>
		<comments>http://labs.saidigital.co/new-product-wordpress-plugin-for-easy-restaurant-menu-management-356/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 19:14:48 +0000</pubDate>
		<dc:creator>Sarah Tebo</dc:creator>
				<category><![CDATA[Product news]]></category>

		<guid isPermaLink="false">http://labs.saidigital.co/?p=356</guid>
		<description><![CDATA[SAI Labs is thrilled to announce our newest digital product: the Easy Restaurant Menu Manager WordPress plugin. The plugin is designed to make it simple for a restaurant owner to maintain their menu, which displays in a format that website visitors can easily read and use. The Easy Restaurant Menu Manager plugin is available in [...]]]></description>
				<content:encoded><![CDATA[<p>SAI Labs is thrilled to announce our newest digital product: the <a title="Easy Restaurant Menu Manager for WordPress" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/">Easy Restaurant Menu Manager</a> WordPress plugin.</p>
<p>The plugin is designed to make it simple for a restaurant owner to maintain their menu, which displays in a format that website visitors can easily read and use.</p>
<p>The Easy Restaurant Menu Manager plugin is available in free and extended versions. In just a few days of being available, the free version has been downloaded more than 100 times from the <a href="http://wordpress.org/extend/plugins/easy-restaurant-menu-manager/" target="_blank">WordPress plugin directory</a>, and we’re sure the $25 extended version will be a big hit for users who want some extra features.</p>
<p>So what does the plugin do? Here’s a rundown of features in the extended version (a few of these aren’t available in the free plugin):</p>
<ul>
<li>Put items into categories like appetizers, entrees or desserts — name them whatever you want — and set the order those categories should display in</li>
<li>Include a description for each item, and decide whether or not you want to display the price</li>
<li>Add CSS right from the plugin, without fiddling with theme files</li>
<li>Attach pictures to each menu item</li>
<li>Choose single-column or two-column layouts</li>
<li>Add icons to dishes to show that an item is spicy, vegetarian, a speciality, etc. — even upload your own icons</li>
<li>Create multiple menus</li>
<li>Include a “print this menu” link that creates a print-friendly version of your menu</li>
</ul>
<p>Our staff worked hard to make sure the plugin looks great and functions well in all WordPress themes. It was important that the menu match the rest of the site, using the site’s own colors, fonts and styles.</p>
<p><a title="Easy Restaurant Menu Manager for WordPress" href="http://labs.saidigital.co/products/easy-restaurant-menu-manager-wordpress/" target="_blank">Click here</a> for screenshots, a live demo and more information about the Easy Restaurant Menu Manager plugin for WordPress, which costs $25 from SAI Labs.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.saidigital.co/new-product-wordpress-plugin-for-easy-restaurant-menu-management-356/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
