Riptide Blog

Riptide Software Ranked 2nd as Orlando Sentinel Top 100 Companies

Posted by Marketing on August 22, 2016

Riptide Software was recently awarded the Second Best Place to Work for in Central Florida for all companies having from 99 to 499 employees in the 2016 Orlando Sentinel Top 100 Companies. The list of “Top 100 Companies” was created by the Orlando Sentinel and Best Companies Group. This survey and award program was designed to identify, recognize, and honor the best places of employment in Orlando.

Read More

Topics: Awards, Orlando Sentinel, Orlando Sentinel Top 100, Top 100 Companies to Work For

Riptide Software Listed as Top Modeling, Simulation, and Training Company

Posted by Marketing on August 17, 2016

Riptide Software is currently  listed by the Orlando Business Journal (OBJ) among the top five largest Modeling, Simulation, & Training Companies in the Central Florida region. Riptide is recognized as  a leading provider of military and commercial training software products by numerous organizations.

Read More

Topics: Awards, CACCTUS, DTRS, Gov't & Defense, HITS, OBJ, Orlando Business Journal, Top Modeling Simulation Firm, TRACR, UOTS

​Auto-on/off with AWS Lambda

Posted by Jose O'farril on July 7, 2016

Scheduled tasks and Cron jobs have always been a staple in a Systems Administrator toolkit. While workloads move to cloud platform, so do our tools. Below I’ll show one way of tackling the promise of being able to turn schedule EC2 resources to auto start and auto shutdown with AWS Lambda service.

AWS Lambda service

As of late 2015 AWS added a Scheduled Event feature in their Lambda service. This included a Cron feature. At the same time they also included support for Python, which may be more familiar to a SysAdmin/Engineer. At least is was in my case. So this example will use the AWS Python SDK (boto3).

Here’s the code we’ll be working with. The configurable fields are in the filters, here we add the tag values of our EC2 instance. In this use case, I’ve added the following tag to each of the EC2 instances I want to automate. Auto-on = True

import boto3
import logging

# setup simple logging for INFO
logger = logging.getLogger()

# define the connection
ec2 = boto3.resource('ec2')

def lambda_handler(event, context):
# We'll use boto's filtering method to find
# all stopped EC2 instances with our autotag value
filters = [{
'Name': 'tag:Auto-on',
'Values': ['True']
'Name': 'instance-state-name',
'Values': ['stopped']

# Start the filtering
instances = ec2.instances.filter(Filters=filters)

# Get all the instances that are off
StoppedInstances = [instance.id for instance in instances]

# print these for the log
print StoppedInstances

# Check to see if there are any stopped instances.
if len(StoppedInstances) > 0:
#Start'em Up
startingUp = ec2.instances.filter(InstanceIds=StoppedInstances).start()
print startingUp
print "Nothing to see here"

Setting up our Lambda function

When you create your lambda function you’ll see an option to select a template. In our use case we’re going to skip these, but they are a great resource to see basic usage for lambda.

In the Configure Function screen we’re going to give our function the following options

  • Name (something easily recognizable
  • Description (Anything that helps tell you what’s here
  • Runtime (Python 2.7)

And we’ll copy/paste our code into the inline editor.

We’ll leave the Handler name as is since we’re using the default lambda_hander name.
Under Role we’ll create a new Basic Execution Role (A new screen will open).

In the new screen create the new IAM role and name it something you’ll understand. While this is the default Lambda function to be able to write into CloudWatch Logs, we need to add in permission to interact with EC2. We’ll add the following policy to the new role.

"Sid": "Stmt1467215252000",
"Effect": "Allow",
"Action": [
"Resource": [

Back in the lambda configuration we’ll select our new policy. We’ll increase the timeout to 1 min or so since we’re interacting with the AWS API’s. We can leave the No VCP option since the API isn’t an internal resource to AWS.

Event Source

Now that we have the lambda function all loaded, lets set up the event source. In our case I want to start the EC2 instances at 11am UTC. Fill in the following options.

  • Event Source Type (Scheduled)
  • Rule Name (Custom Name)
  • Description of the Rule
  • Schedule Expression (Lambda uses more of the Java Expression of cron found here)

Testing it all out

If you have a test instance or 2 in a stopped state in your environment we can initiate a test. Make sure your instances have a custom tag of Auto-on = True or whatever your chose to call your tag.
In the input test even we’ll select Scheduled Event from the the drop down. In this case the parameters in the can remain as the default since we’re not pulling any of the event message data into our function. Save the Test and run.

If all goes well you should have an output similar to this.

Where the log output shows that instances have been started.

START RequestId: 45897b28-3e12-11e6-a4cd-bd2a1889586e Version: $LATEST
[INFO] 2016-06-29T15:58:11.259Z 45897b28-3e12-11e6-a4cd-bd2a1889586e Calling paginated ec2:describe_instances with {'Filters': [{'Values': ['True'], 'Name': 'tag:Auto-on'}, {'Values': ['stopped'], 'Name': 'instance-state-name'}]}
[INFO] 2016-06-29T15:58:11.325Z 45897b28-3e12-11e6-a4cd-bd2a1889586e Starting new HTTPS connection (1): ec2.us-east-1.amazonaws.com
['i-4a14b3da', 'i-4b14b3db']
[INFO] 2016-06-29T15:58:12.0Z 45897b28-3e12-11e6-a4cd-bd2a1889586e Calling paginated ec2:describe_instances with {'InstanceIds': ['i-4a14b3da', 'i-4b14b3db']}
[INFO] 2016-06-29T15:58:12.199Z 45897b28-3e12-11e6-a4cd-bd2a1889586e Calling ec2:start_instances with {u'InstanceIds': ['i-4a14b3da', 'i-4b14b3db']}
[{u'StartingInstances': [{u'InstanceId': 'i-4b14b3db', u'CurrentState': {u'Code': 0, u'Name': 'pending'}, u'PreviousState': {u'Code': 80, u'Name': 'stopped'}}, {u'InstanceId': 'i-4a14b3da', u'CurrentState': {u'Code': 0, u'Name': 'pending'}, u'PreviousState': {u'Code': 80, u'Name': 'stopped'}}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '84e54c5f-d5c1-44d1-a935-ab24d37dddf0'}}]
END RequestId: 45897b28-3e12-11e6-a4cd-bd2a1889586e
REPORT RequestId: 45897b28-3e12-11e6-a4cd-bd2a1889586e Duration: 1450.06 ms Billed Duration: 1500 ms Memory Size: 128 MB Max Memory Used: 61 MB

Adding a Lambda function to stop instances follows the same steps expect change the tag and the code has a couple changes to stop instead of start the instances.

import boto3
import logging

# setup simple logging for INFO
logger = logging.getLogger()

# Connection
ec2 = boto3.resource('ec2')

def lambda_handler(event, context):

# all running EC2 instances.
filters = [{
'Name': 'tag:AutoOff',
'Values': ['True']
'Name': 'instance-state-name',
'Values': ['running']

# filter the instances
instances = ec2.instances.filter(Filters=filters)

# locate all running instances
RunningInstances = [instance.id for instance in instances]

# print the instances for logging purposes
print RunningInstances

# make sure there are actually instances to shut down.
if len(RunningInstances) > 0:
#perform the shutdown
shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
print shuttingDown
print "Nothing to see here"

If you are looking for AWS solutions or need advice from our AWS Cloud Architect give us a shout!
Read More

Topics: AWS, AWS Lambda service, AWS Solution Architect, Cloud/IoT

Elements® WayPoints In-Line Training Tool Gaining Ground

Posted by Marketing on June 28, 2016

Earlier this year Riptide’s Learning Division added to their html5 courseware arsenal. In addition to the Elements courseware, that delivers highly interactive elearning to any device and in any language, Elements released an innovative new courseware product, Waypoints. Elements® WayPoints provides an in-line training experience that can work for any web-based software. The major portion of WayPoints courseware involves a unique learning experience in-line with the product and it provides simulations through guided workflows that have the learner directly interfacing with the software. Using xAPI, Waypoints also provides competency based assessments and training activity data.

Read More

Topics: Learning Division, Elearning, eLearning Tracking, In-line Training, Waypoints, xAPI

Successful Digital Transformation = Positive Impact on Revenue

Posted by Marketing on June 20, 2016

A recent survey conducted by Mulesoft concluded that most businesses are trying to understand how to work with new channels, engagement, and ubiquity. Nearly ¾ of IT decision makers said that if digital transformation initiatives weren’t completed, it would have a negative impact on revenue in three months.

Read More

Topics: API, Cloud/IoT, Digital Transformation, IoT, Mobile, Mule ESB

xAPI in Higher Education - it is Happening in the UK

Posted by Nick Washburn on June 17, 2016

It is happening again. The UK is showing America we stumbled on something good and they are helping improve it. American guitarist and songwriter, Joe Walsh, confesses that it was the Rolling Stones and others in the UK who showed him the music that was going on in his own backyard. Blues, R&B, and Rock-n-Roll were all art forms that started from Blues/Jazz in America. The Rolling Stones came to America in the early 60's to find their musical blues heroes broke and obscure here. The Stones revealed their American music heroes to the world and in so doing helped give them actual music careers. Maybe it is a leap to correlate xAPI and data interoperability to Rock and Roll and maybe not. I can hope for an xAPI invasion for Higher Ed in the US.

Read More

Topics: Learning Division, JicDev, Jisc, TryxAPI, TryxAPI.com, xAPI

Riptide Software Donates Push-ups for the Camaraderie Foundation

Posted by Marketing on May 5, 2016

Last Friday, Riptide Software teamed up with AIT Engineering to do a 1000 push-up challenge benefiting the Camaraderie Foundation following in the spirit of the #22PUSHUPS challenge, to honor those who serve. Teams were comprised of two to three people with a goal of 1000 push-ups total in a four-hour period. For each team that completed 1000 push-ups, $100 would be donated by Riptide to The Camaraderie Foundation.

Read More

Topics: #22pushup, Gov't & Defense, push up challenge

AWS IoT Service is a Simple Yet Powerful IoT Backend

Posted by Cesar Gonzalez on April 8, 2016

The Internet of Things (IoT) is a topic that I’m passionate about, I envision massive opportunities for the development of new technologies on what this new wave of innovation is bringing. The possibility of an interconnected world will lead us to a big jump into what a lot of us have just only dreamed to become a reality.

Read More

Topics: AWS, AWS IoT, Cloud/IoT, HTTP, IoT, MQTT, WebSockets

A Review: xAPI Camp -- San Francisco, CA

Posted by Alex Horan on March 2, 2016

I was asked to present at the first xAPI camp of 2016 on behalf of Elements team on the advantages of using a centralized Learning Record Store (LRS) within an enterprise learning ecosystem using xAPI. Whether you are new to the specification or have an xAPI enabled application, these camps are a great way to gain knowledge about the Experience API.

Read More

Topics: ADL, AutoCAD, Cognitive Advisors, Learning Division, Events, Learning Record Store, LRS, MakingBetter, Queensland University of Technology, Quinnovation, TryxAPI.com, xAPI Camp, xAPI Camp San Francisco, Yet Analytics

Riptide Software Overhauls The Camaraderie Foundation’s Website

Posted by Marketing on February 25, 2016


Read More

Topics: Camaraderie Foundation, Gov't & Defense, MySQL Database, Riptide Software

Subscribe to Email Updates

Posts by Topic

see all