Agent Multitool

There’s a cognitive bias called law of the instrument, which says “when you have a hammer, everything looks like a nail”. For me, that hammer has always been software programming. My first job was an administrative assistant at the University of Chicago Booth School of Business’s Alumni Relations. I was given an excel spreadsheet of alumni contacts to filter through. Instead of doing it by hand which was expected, I wrote a VBA script to do it in a fraction of the time that it would have otherwise taken.

This trend continued and carried over to my latest job as a technical support agent for a web hosting company. In this capacity, I found myself copying and pasting a lot, and repeatedly performing certain tasks with what’s being copied. For example, one of the first things that was done with a domain name is to look up its DNS records using a tool called dig. Normally, this involves copying the domain, opening up or activating the command line prompt, and performing several dig lookups to determine the relevant records. It quickly became apparent that these and many other tasks are performed frequent enough that one could benefit from automating some of those actions.

This is how Agent Multitool came about. At the very basic level, Agent Multitool is a clipboard history app, giving you easy access to previously copied clipboard entries. But, it comes with perks. Agent Multitool will analyze the copied content, and based on that, offer you prepackaged actions that will speed up and optimize your workflows. You can read up more about it and download the app from here.

Beast Timer 1.80 Update

This release of Beast Timer brings lots of bug fixes and the addition of new features. Notably, Beast Timer now connects to Garmin devices, and allows you to pair the app with the watch. From the watch, you can then see information about the current exercise/set. You are also able to control Beast Timer from the watch, for example by pushing a button on the watch to advance to the next set. Check out the watch app here, on the Garmin Connect IQ app store.

You are almost certainly using this app at the gym. As is such, you can now choose an image as your gym membership card and display it easily from within the app. For those gyms that require you to use their application to display the gym card, you can also launch their app directly from within Beast Timer.

Below you will see the feature additions and bug fixes, taken mostly from the source control commit logs. Note the majority of the bug fixes are not listed here because they contain technical jargon.

[Features/Additions/Changes]
* Added setting to disable long press to complete all sets in Beast Mode
* Added Garmin ConnectIQ SDK
* Added setting to enable/disable Garmin Connect IQ
* Upgraded realm.io from 0.87.4 to 4.1.1
* Added menu item to redo Connect IQ initialization in Beast Mode
* Added Show Gym Membership Card fragment/code
* Added code to choose a gym membership card image
* Updated FilePicker Library
* Added toolbar icon to display gym card, which is hidden after gym card’s displayed
* Added saving/loading preferences
* Made it a preference to turn on screen on next set
* Gave notifications a background color
* Allow loading of more exercise history items while in Beast Mode
* Added option to launch another application when Show Gym Membership Card button is pushed
* Ensure that the Show Gym Card button is hidden once clicked
* Ensure the app compiles using API 28
* Show Snackbar when opening Beast Mode which allows redoing Connect IQ initialization
* Added helper app that allows one to use Samsung Galaxy’s physical button to advance to the next set

[Bug Fixes]
* Fixed an issue where if all sets of an exercise were deleted, the next set added to the exercise would result in a set defaulting to active status
* Fixed an issue where if the user’s screen times out while editing a set, then the set data would be incorrect upon resuming
* Make sure we advance to the next correct set if we uncompleted a set or group above the current active group
* Spotify was trapping the onKeyUp action in BeastModeActivity, so we check for onKeyUp too now
* Fixed a bug where if we turn off the screen and trigger onPause while in Beast Mode on a page of a different exercise of the active set, then upon turning on the screen again the set information of the different exercise would be put in place of the active set
* Fixed a bug where the textViewCenter below the center number picker wouldn’t update correctly when a cardio exercise was selected
* Fixed bug on Galaxy Note9 where AlarmManager didn’t set alarm (for playing sound when timer gets to 0) if the screen was turned off
* Improved processing of list of installed applications in Preferences when selecting an app for the gym card
* Ensure that the Show Gym Card button is hidden once clicked
* In viewing exercise history graph, save previously selected graph type and graph duration.
* Have notification icon change color based on status of the current set

Snappy Upload Update Coming

I am getting reports that Snappy Upload is displaying the following error message when logging in:

“An error was encountered while trying to log into your account. You’re using a version of Snapchat or operating system that’s no longer supported. Please upgrade your device’s operating system and update to the newest app version to use Snapchat. Thanks!”

I am aware of this issue and am working on fixing it, you should see an updated version Snappy Upload that has this error fixed in the coming days (at most a few weeks by my best estimates). Thank you for your patience and understanding.

* Edit 2017-12-1
This is turning out to be harder than anticipated, but it’s not yet time to wave the white flag. However, it will definitely take longer.

Bluetooth Volume Over-boost Protection

A little under a month ago, a Sound Booster user named Abby contacted me and reported sound distortions when using the app. She mentioned that she was using bluetooth speakers, and that the sound anomalies only occurred when she was using those speakers. I have a bluetooth headset, and it’s used as a part of the routine tests performed with each version of Sound Booster before they are released. However, I have never noticed this happening and could not reproduce it on my end.

As luck would have it, several days ago I purchased a new pair of bluetooth headset. I was using it with Sound Booster casually when I noticed Abby’s issue. Now able to reproduce the problem, I went to work to try to fix it. It turns out the problem only occurs if you are using bluetooth headsets and speakers, and only if the app that is playing audio (eg. iTunes) has its volume turned up to the max. My theory is that newer bluetooth headsets and speakers do their own audio boosting and calibration and therefore it would “double boosting” the audio that Sound Booster provides.

The fix is an added option in Preferences named “Bluetooth Volume Over-boost Protection”. It’s a mouthful but does describe what it’s supposed to do fairly clearly. It is on by default for all bluetooth headsets and speakers, and will protect you from over-boosting by encouraging you to use the volume up/down buttons on the bluetooth device and not from the app. Note that you will still be able to use system-wide equalizer, individual app volume adjustment, and other Sound Booster features with this new option turned on. Version 0.31 has been submitted to the Mac App Store and should be live any minute now. Thanks Abby!

Say Hello to Snappy Upload

Ever wanted to send the PERFECT picture that you took earlier to your friends on Snapchat? Now you can. Say hello to Snappy Upload.

Snappy Upload is a utility for sending pictures saved on your phone to your friends on Snapchat.

Using a choose, add/edit, and send process, it makes sending saved pictures on your phone to your friends on Snapchat quick and easy.

1. Choose a picture from your phone.
2. Add a caption and/or choose from a selection of resize-able emoji.
3. Send it to as many friends as you’d like all in one go!

That’s it, give it a try yourself!

Beast Timer 1.50 Update

One of the best things about eating your own dog food is that you get to personally find out the various ways that your app would behave in unintended ways, sometimes through sheer luck and accidental discoveries. Being a daily user of Beast Timer, this has proven to be true time and time again. I’d run across bugs that would manifest themselves only if I do a certain sequence of events in a particular order (Konami Code anyone?). Bugs that are hard to reproduce are hard to track down and fix, but I’m glad that I get this opportunity to do so simply by being an user of the product.

Along similar lines, using the app on a daily basis that you have full control over gives lots of useful ideas and insights, so I ended up adding quite a bit of little features here and there. Sometimes for convenience, sometimes for fun, but almost always results in an improvement to Beast Timer.

So with that, I have submitted an update to the Google Play Store for Beast Timer 1.50, with 10 new features/additions/changes and 11 bug fixes, with a few changes left out because the commit message in my logs were written with code method names and variables instead of something useful to the reader. See the change log below.

[Features/Additions/Changes]
* Added an option to ignore double taps when screen is dimmed in Beast Mode
* Added toast notification for notes that will display as that set is starting
* Split Preferences up into manageable categories
* Added the following sections to Preferences
– General
– Login/Registration
– Headset/Screen
– Sound
– Vibration/Animation
– Warnings
– Miscellaneous
– Advanced
– About
* Added preferences for sound delays during music ducking, both before and after
* Added setting to allow for custom number of months of data to include when adding new exercises
* Updated SDK versions to 24
* Move focus away from the first number picker when starting to edit child, so first tap on number picker’s edit text would select all and bring up keyboard
* Completely revamped the way that sound effects are played to ensure more consistent performance

[Bug Fixes]
* Fixed back button being included as “Any Button” for Beast Mode headset commands
* Fixed bug where pause/resume was losing data in number pickers
* Fixed a rare bug where if the date is the 31st then relative time is displayed incorrectly
* Fixed a crash that would occur if you pause Beast Timer while end of workout animation is happening
* Fixed a similar crash that would occur if you resume Beast Timer and exit Beast Mode while animation is happening
* Fixed crash that happens if you double click the button right after starting Beast Mode
* Fixed a bug in Android 6 where the first time a sound effect is played no sound is heard
* Fixed a bug where the EditTexts of NumberPickers would resize to really wide lengths if a huge number is entered and then enter is pressed on the soft keyboard
* Fixed way that up next group name is calculated to account for skipping groups
* Fixed bug with displaying up next group
* Fixed a rarely-occurring bug where screen dimming would cause a crash if it happens right when user is exiting Beast Mode

Sound Booster 0.30 Update

The 0.30 version update to Sound Booster has just been uploaded to the Mac App Store. What started out as a compatibility update for Apple’s latest OS X 10.12 “macOS Sierra” turned out to be a fairly significant update.

Under the hood, the most helpful change is probably how the audio is handled by the Sound Booster Driver and Sound Booster App, which now aggressively checks audio timestamps and eliminates all video/audio out of sync issues.

Another notable change is the “Sleep When Idle” feature, which will put Sound Booster to sleep if sound has not been played for a user-specified period of time to conserve CPU. However, this feature is experimental, and short notification sounds that wake it up may not be heard due to the delay of waking up.

The final major change is the ability to use bluetooth headsets or other audio output devices that you have on your Mac. This setting, like Sleep When Idle, can be found in Preferences under the Advanced tab.

There are other smaller changes and modifications as well, see the abbreviated change log summary below. Head over to the Mac App Store and check it out now, or see the screenshots from the 0.30 update.

[Major Changes]
* Aggressive syncing to prevent video/audio out of sync issue
* Added setting to allow bluetooth or other external devices to be used with Sound Booster
* Added setting to allow Sound Booster to sleep if idle after a set period of time (Experimental)

[Minor Changes]
* Speed improvements when turning on and off volume boost/equalizer
* Added setting to display equalizer details
* Added Turn On/Off Equalizer button to the status bar pop up
* Tested to be fully compatible with macOS Sierra (10.12)

[File Volume Booster]
* Produce MP4 Audio (m4a) files instead of MP3 files in File Volume Booster
* Better clipping control for File Volume Booster to reduce distortion

1.20 Update for Beast Timer

Following the initial release for Beast Timer and a post to Reddit’s r/Android, it seems like Progression is a favorite among Redditors.

In the name of market research, I downloaded it and found that it does have some very good features. The biggest three that are useful but were not present in Beast Timer are: workout summary with lots of stats, exercise images and instructions, and popular workouts.

That is no longer the case. Version 1.20 of Beast Timer now has those three features and many more improvements. One of them is the ability to advance to the next set without reaching for your phone. You can configure Beast Timer to advance to the next set through a headset command, such as “Previous Track”, or “Pause”. This way you can simply hit a button on your wired/bluetooth headset to start the timer, receive an optional audio and/or vibration cue when it’s time for your next set, and go about your workout with one less thing to worry about.

Beast Timer

It has been far too long since the last blog post, but I am happy to bring to you – Beast Timer.

Beast Timer is an Android app that aims to be the perfect companion to your workouts. From tracking workout logs, to providing customizable timers for your inter-set and inter-exercises rests. It tries to be as easy to use, concise, and flexible as possible, giving you a rich array of options but allowing you to use as small of a subset of them as you’d like.

Being the first release of an app on the Android platform, as well as my first real experience with Java, I have to say that it turned out quite well. Of course, this being the first release, there are bound to be bugs and all feedback are welcome.

Cheers, and happy beasting!

Sound Booster Lite

So I received an email from the good folks at MacUpdate, saying that they have listed Sound Booster. They also asked if there is a demo version available that is independent of the Mac App Store.

This got me thinking, because when the idea of Sound Booster was conceived, I wanted to make a free version with basic features, then add In App Purchases for the more advanced features that people might want. However, Apple did not allow this on their App Store due to a conflict with their policies, so I scrapped that plan and made the entire app a one-time-purchase of $5.99.

So, after this kind reminder from MacUpdate, I got to work and produced a Lite version of Sound Booster that is independent of the Mac App Store. It has system-wide volume boosting for all running apps, boosting volume for mp3 files on all devices, etc, all for FREE. For more features like a system-wide equalizer, individual volume adjustments, and other advanced features, one could easily upgrade to the full App Store version.

So there you have it. Download Sound Booster Lite now and enjoy system-wide volume boosting for free!