December 13, 2017 by Brandon Medenwald
As we near the end of the year, we’re really excited about the new features we have in store for 2018. Before New Years, we’ve shipped an upgrade to Public Links we want to share.
Public Links are an amazing way to share your Simple In/Out data with everyone, including people who don’t have Simple In/Out accounts within your company. Not everyone needs an account and a place on your board themselves. Maybe you have some outside contractors, sister companies, or temporary employees. Maybe you have a digital signage product and need a link that doesn’t require signing in with your password. Maybe you have a company wiki or intranet that is already authenticated and you’d like to include your board for easy viewing. For any of these purposes, Public Links have worked great in Simple In/Out for years.
We’ve now made Public Links even more powerful. Previously, you could only have one Public Link. Now, you can have many Public Links. You can choose whether your Public Link displays your entire organization or is restricted to only a particular group. You can also now choose whether the time the updates were made is visible or hidden. This allows you to craft several Public Links that works perfectly across all your use cases.
October 23, 2017 by Brandon Medenwald
Hot on the heals of our revamped reports within Simple In/Out, today we’re taking the wraps off of another big feature: Archiving Users.
Archiving users allows administrators to both remove users from their board and prevent those users from accessing Simple In/Out, all while preserving their history. Admins can continue to run reports on these users forever. Archived users count towards the plan’s user limit.
Coupled with our new reports and exports, archiving users allows Simple In/Out to act as your one-true-source of user in/out activity for the long term regardless of user turnover. Gone are the days when admins would be forced to print off multiple reports in order to delete a user permanently while maintaining some kind of record of their activity.
If the user comes back, we allow archived users to be unarchived. The returning user chooses a new password and instantly resumes their place on the Simple In/Out board.
This was a big feature request across many of our oldest customers and we’re happy to deliver. We have a few more big features in store before the end of the year and we can’t wait to share them with all our customers.
September 13, 2017 by Brandon Medenwald
Throughout the summer we haven’t had many blog posts, but we’ve been busy working on some exciting changes to Simple In/Out. We think everyone will love the new features we have coming before the end of 2017.
Today we’re reinventing reports for Simple In/Out. Based on customer feedback, we’ve retooled most of our existing reports to be faster and easier to use for organizations with lots of users. We’ve also consolidated some reports and created two new reports to better address printing and exporting.
Running Reports for Lots of Users
If you have a large organization, running reports in Simple In/Out before today could take quite a while. For example, running a Daily Timeline report for 150 users would make 150 report requests to Simple In/Out. Maybe you were after only a few users and many of those were unnecessary. Maybe your goal was to print and you just had to wait.
To solve this problem, we’ve added a new user selector. This control allows admins to select specific users as well as groups. You can also select more than one user or group, giving precise control over exactly who the report will display when it’s run.
For more speed, many of our reports are now paginated. In the Daily Timeline example, running a report for 150 users now only runs 10 at a time with buttons below to change to the next page. You can page through quickly to see results you’re interested in, or you can use the new user selector to reduce the size of the list.
Paging results also allows us to merge the Daily Activity and Weekly Activity into simply the Activity report.
Printing and Sharing
Printing has always been a feature we’ve left to the web browser. All browsers have support for printing, but that support is limited at best. Not every web browser prints the same way.
We’ve decided to support printing as a first-class citizen via our new Print/PDF report. This report creates a PDF that you can download, print, share with those that need it, etc. Because we generate this report as a download, we don’t have to worry about holding your web browser hostage while we do this. We can then allow the report to be much larger than our web-based reports, with support for up to 6 months of data on many users all at once.
We’ve also designed calendar representations, totals per week, grand totals, and individual status updates all available via this report’s settings. Using these levers, any admin can create a single PDF that tells the story of how their users interacted with Simple In/Out throughout a period of time.
Like printing, Simple In/Out has had CSV exports in the past on each individual report. Because of this, they were each restricted by the same time period barriers as the reports they were associated with. To export data over a month, or many users, admins would have to run many exports and stitch the data together behind-the-scenes. It was a lot of clicks.
The new Export report solves this problem. Similar to the Print/PDF report, we provide a number of settings that allow for a report to be created that can be downloaded when it has finished generating. We allow up to 6 months of data to be exported at any one time, and support both summaries (total time) as well as individual status updates. It’s never been easier to take your Simple In/Out data to your favorite spreadsheet application like Microsoft Excel.
We know our new reports are a big addition to Simple In/Out, and we can’t wait to show you what we have in store next for Simple In/Out.
July 12, 2017 by Brandon Medenwald
For our Simple In/Out users, you may notice a banner on the top of our product today.
Simply Made Apps is participating in the Internet-Wide Day of Action to Save Net Neutrality to oppose the FCC’s plan to slash Title II, the legal foundation for net neutrality rules that protect online free speech and innovation. Twitter, Reddit, Netflix, Amazon, Kickstarter, Etsy, Vimeo, Mozilla, OK Cupid, Imgur, Medium, and dozens of other major sites are also participating.
Simply Made Apps and other participants are displaying a prominent message to our users and encourage them to take action by contacting Congress and the FCC.
We’ve also submitted our comments to the FCC for ourselves and organized a letter on behalf of several North Dakota technology companies. For us, this is personal. Simply Made Apps wouldn’t exist without open access to the internet, unfettered by companies charging fees as gatekeepers or extorting money from us to match the speed of our competitors.
See the announcement for the day of action and take action yourself here: https://battleforthenet.com
June 16, 2017 by Brandon Medenwald
Net neutrality is making headlines again, as the current administration and specifically FCC Chairman and former Verizon lawyer Ajit Pai intend to roll back protections. We’re announcing that Simply Made Apps will join Amazon, Netflix, Kickstarter, Reddit, Github, and others on July 12 for the internet-wide Day of Action to Save Net Neutrality.
What is Net Neutrality?
Net neutrality at its core is the principle that all internet traffic should be treated equally. This means that traffic from Netflix should be treated the same as traffic from an upstart competitor, crazy cat pictures, and social media. ”Title II” of the Communications Act provides the legal foundation for net neutrality and prevents Internet Service Providers like Comcast, Verizon, and AT&T from slowing down and blocking websites, or charging apps and sites extra fees to reach an audience.
This is critical to how the internet works. If competing companies can simply spend untold amounts of money to speed the delivery of their services over their competitors, what could ensue is a world whereby only those with money can be heard. That’s the opposite of what has made the internet the greatest tool for the exchange of ideas and free speech in the history of civilization.
This is a personal matter to Simply Made Apps. We’re a small company, currently with four employees and a Yorkshire terrier marketing intern. We couldn’t exist as a company if our competition could outspend us to deliver their product faster or slow our product down.
What Are We Doing?
On July 12, 2017, websites, Internet users, and online communities will come together to sound the alarm about the FCC’s attack on net neutrality. Our product Simple In/Out will join the others on the web to highlight this issue and raise awareness.
Learn more and join the action here: https://www.battleforthenet.com/july12
May 30, 2017 by Brandon Medenwald
Adding users to your Simple In/Out organization is often the first task you must undertake as an administrator. Some time back, we added the ability to add multiple users at once to speed this process along. That feature works great today, but it still means as an administrator that you need to gather a list of all the email addresses of your users. This is easier than adding all the information yourself, but we can do better.
Simple In/Out now has Invites, an easy way to allow your users to sign themselves up to your Simple In/Out board. Using Invites, an administrator can create a URL that others can use to join their organization. Admins can choose how long this URL is valid (an hour, day, or week) and distribute the URL however they like. Email, Slack, internal wiki… however one communicates with their team.
Once users click on the Invite link sent to them, they are taken to a page to type their name, details, and choose their own password. Afterwards they will be signed in, they appear on the company board, and they can use their account to access any and all apps in the Simple In/Out ecosystem.
We think Invites will make lives easier for a lot of our customers when they are getting started.
April 19, 2017 by Brandon Medenwald
We recently discovered an issue with Automatic Status Updates that effects anyone running Android 7.0 and higher. We have just shipped an update that should solve these problems. If you have an Android device and are using any of our automatic updating features, we strongly recommend grabbing our latest update.
In order to solve the problem, Simple In/Out will now require full background access to use Automatic Status Updates. If you have received a notification or an alert that has prompted you to give Simple In/Out full background access, you must accept the permission changes in order to continue using Automatic Status Updates. Selecting ‘No’ will turn your Automatic Status Updates off.
Automatic Status Updates were not working consistently on Android 7.0 because the app did not have full background access. This caused certain events not to fire when the app was in the background and therefore some Automatic Status Updates were missed. We no longer allow you to enable Automatic Status Updates without full background access. If you have a device running Android 6.0 or higher, you will asked to whitelist Simple In/Out so that it can run in the background. Battery life will only be slightly impacted (no more so than in the past). We will always take battery life very seriously here at Simple In/Out.
We are sorry for our bug, it was our fault for not requesting this special access sooner. Do reach out to us if you have any questions or concerns, we’re here to help.
April 11, 2017 by Brandon Medenwald
We’re aware of issues with our Simple In/Out app and phones running Android 7 (Nougat). For these devices, you may notice that automatic updates via Geofences, Beacons, and Networks sometimes don’t get sent to Simple In/Out. We’re actively working on a fix and will have it out just as soon as we can.
If you’re an Android 7 users and you’re experiencing this issue, please reach out to us via email and we’ll notify you personally when a new version of the app is available.
We apologize for this bug and any disruptions this may cause. It’s our fault and we intend to get this resolved as quickly as possible.
March 30, 2017 by Brandon Medenwald
Today we’re announcing not one, not two, but three great new features for Simple In/Out.
Since the beginning, we’ve focused on making Simple In/Out the most accurate in/out board ever. Even with automatic status updates, you may still encounter times when a user’s status is out of date. In these cases, having the user make a quick update would be best, and today we’re shipping a much-requested feature to help: Reminders.
With Reminders, Simple In/Out can send a notification to the user’s phone or computer reminding them to update their status. The organization’s admin users can create reminders, choose the status and time they wish to reminder users, and we’ll do the rest. Simple In/Out will only send reminder notifications to the users that need reminding.
This is a simple and effective way to nudge your users to keep the Simple In/Out board up to date.
For managers, sometimes you need to know at certain time periods if all your users have checked in or out. Have users going out into the field and need to make sure they’ve checked in at the end of the day? Need to be sure users have checked out at the end of a shift? Want to be aware of who is in late at your office? For these use cases and more, we’re announcing Safety Notifications.
Safety Notifications allow those with sufficient privileges to choose the status and users they’d like to know about and when they’d like to be notified. Simple In/Out will send a notification to a phone or computer if those users are still in or out. Quickly tap/click the notification to see a list of all the users that are still in or out after that time.
Safety Notifications are not a replacement for emergency services and shouldn’t be used in life and death situations, but it’s a solid step towards keeping users informed of potential problems with their staff without having to remember to look at the in/out board.
We’ve made some website changes to accompany these new features. We’ve added pages to highlight many of the best features we offer in Simple In/Out. These pages address specific use cases better than ever before. We’ve also moved many of our tutorial videos to these pages to make them more visible.
We now also support Spanish on every page within Simple In/Out. While we’ve support Spanish users once they had logged into Simple In/Out, we now cover all the pages so our Spanish users don’t have to speak some English to get logged in.
We know our users will put these great new features to work for their organizations right away.
January 30, 2017 by Brian Pattison
Simple In/Out is a Rails app running on Heroku with several background jobs that need to be scheduled to run either hourly, daily, or weekly. Being on Heroku means we can easily use Heroku Scheduler to run a job every hour or every day. We could even use a daily job and check for the day of the week to accomplish weekly jobs.
We recently needed to schedule jobs to run more often than every hour, and Heroku Scheduler can no longer do everything we need it to do.
Introducing Simple Scheduler
Simple Scheduler is a scheduling add-on that is designed to be used with Sidekiq and Heroku Scheduler. It gives you the ability to schedule tasks at any interval without adding a clock process. The goal of Simple Scheduler is for it to be delightful to use and for it to ensure your scheduled jobs always run, even if there is server downtime.
Why We Created Simple Scheduler
We evaluated every possible option we could find, and every solution seemed to have the same flaw: What happens if your server is down when your job is supposed to run? TL;DR: Your job won’t run.
The existing solutions out there don’t keep track of whether a scheduled job was actually run. This means there is no way for your app to know that a job that was scheduled to run at 1:00 AM didn’t run because the server wasn’t running at 1:00 AM. What if it was a critical job that needed to run??
Another problem with certain solutions is that the job scheduling happens in the web process. This can be a huge problem if you’re on Heroku with multiple web dynos. Each web dyno would have it’s own job queue and every job would be duplicated.
One more thing we didn’t like about most other solutions is the cron format. We’re Rubyist, so we’re used to nice things. Why use such a hard to read format for scheduling your recurring jobs? Would you rather read
cron: "0 * * * *" or
every: "1.hour"? I’m nitpicking here, but I don’t want to remind myself how the cron format works every time I create or revisit a scheduled job.
How did we solve the problems with the existing solutions we evaluated?
Solution #1: Server Downtime
Simple Scheduler is set up to evaluate your configuration file every 10 minutes via Heorku Scheduler and queue jobs that need to run in the next 6 hours. A minimum of two jobs is always added to the
Sidekiq::ScheduledSet. This ensures there is always one job in the queue that can be used to determine the next run time, even if one of the two was executed during the 10 minute scheduler wait time.
If your server is down when a job was scheduled to run, it obviously won’t run at the scheduled time, but the job will still be in the Sidekiq scheduled job queue. When your server comes back online, the job will execute immediately. This brings up another problem: What if my server is down for an hour and a job is scheduled to run every 10 minutes?
By default, every job that was scheduled will be run. This means if your server is down for an hour, your every-ten-minutes job will immediately run six times when the server comes back online. This may or may not be desirable, and there are two solutions for handling how these jobs behave.
Expected Run Time vs Actual Run Time
Simple Scheduler passes the expected run time to your job’s
perform method if it accepts an argument. Let’s say you want to send a daily digest email to all users at a time they specify. Background jobs are never guaranteed to run at an exact time, so using
Time.now to find all users who want to receive the email at 8:00 AM may not work. The job may not run until 8:01 AM, or worse, it may not run until 9:00 AM. Evaluating the expected run time passed to your background job will ensure you don’t send the email to the 9:00 AM users twice and skip the 8:00 AM users.
If you have an hourly job that performs the same task every hour, you may not want it to run twice in a row if your server is down for over an hour. The Simple Scheduler config allows for an
expires_after option on a scheduled task. If you specify that a job
expires_after: "59.minutes", only the last job will run because earlier jobs will be considered expired and won’t be run.
Solution #2: Multiple Heroku Dynos
Simple Scheduler is a rake task that is run every 10 minutes via Heroku’s Scheduler, so we’re not doing any job queuing in the web process. You can have as many web dynos as you need, and your queued jobs won’t be duplicated. Once queued as a scheduled job in Sidekiq, the rest is handled by your Sidekiq worker dyno(s).
Solution #3: Pretty Configuration File
I remember having the idea of a perfect YAML configuration file in my head before creating Simple Scheduler. I told Brandon, “Let me try some README-first development to solve this.” You can see my initial README here. I presented the README and said, “I don’t know if I can pull it off, but it’s awesome, right?” It is awesome. The Simple Scheduler configuration file is so pretty and easy to understand:
# Global configuration options and their defaults. These can also be set on each task. queue_ahead: 360 # Number of minutes to queue jobs into the future tz: nil # The application time zone will be used by default # Runs once every 2 minutes simple_task: class: "SomeActiveJob" every: "2.minutes" # Runs once every day at 4:00 AM. The job will expire after 23 hours, which means the # job will not run if 23 hours passes (server downtime) before the job is actually run overnight_task: class: "SomeSidekiqWorker" every: "1.day" at: "4:00" expires_after: "23.hours" # Runs once every half hour, starting on the 30 min mark half_hour_task: class: "HalfHourTask" every: "30.minutes" at: "*:30" # Runs once every week on Saturdays at 12:00 AM weekly_task: class: "WeeklyJob" every: "1.week" at: "Sat 0:00" tz: "America/Chicago"
Start Using Simple Scheduler
I couldn’t be more proud of the work I put into making Simple Scheduler a pleasure to use, easy to understand, and I am so happy to be able to share it with the Rails community! This is some of the best code I’ve ever written, and it solves real problems.