There are several Go libraries for writing CLIs to accept parameters and optional arguments, but they generally build interfaces that immediately drop you back to the command line after execution. While this works well for most applications, sometimes it’s beneficial to create more interactive experiences.
We started a small project called go-menu to fit this case and it provides a simple framework to create a one-dimensional menu system in just a few lines of code. Check out the GoDoc here.
Screenshot added at the request of several Redditors:
— the behavior-driven marketing platform for developers.
Managing images and containers in Docker can get messy. After a dozen or so `run` commands without specifying `–rm`, temporary containers can quickly build up and cause maintenance headaches. Broken builds can also accrue lots of images that are no longer used and just taking up space. While Docker’s management commands work very well, there are a few nagging use-cases that aren’t supported.
If you’re an early adopter like us and have been on the CoreOS bandwagon for more than a few days, you’ve likely run into some Btrfs issues. These issues usually manifest as “no space left on device” errors that cause Docker to completely fail, usually at the most inconvenient time.
While there are some workarounds that range from adding USB sticks to wiping /var/lib/docker, a filesystem that requires manual rebalancing (apparently a kernel update fixes this) is an operational nightmare, especially when CoreOS goes to such great lengths to make things better on the operations side.
After running into the “no space left on device” issue for the second time in two weeks, it was time to move to Ext4. Unfortunately, the current set of AWS machine images are still using Btrfs for their root volumes, which means we’ll have to build our own AMI.
No. You can’t fairly compare Amazon OpsWorks to a CoreOS environment so we’re not going to do that. All I will say is that OpsWorks and Chef combined for an extremely slow and buggy deployment process which lead us to look for an alternate solution.
We started experimenting with Docker a few months back to accelerate our testing environment. The thought of building the components of Turret.IO into self-reliant containers was most welcomed and it provided an easy way to ship images around. Deploying to our development environment took a few minutes rather than 15. Making a simple change to one of our Go binaries? No problem. Commit and push our changes to our Git repository, trigger a Jenkins build, and our new image is sitting in our private Docker repository ready to go. A fleetctl destroy and fleetctl start and we’re in business.
After several weeks of testing under this model, we decided to migrate from OpsWorks. OpsWorks and Chef are incredibly powerful and together, provide a deployment strategy that’s suitable for many applications. OpsWorks has the ability to support entire platforms and can scale instances as needed while Chef can handle virtually any job you throw at it (deploying software, installing libraries, configuration, etc.). Even with all this support, it just didn’t feel right. CoreOS, Docker, and Fleet are relatively new players in the game, but the concepts they brought with them meshed well with our goals and expectations.
Disclaimer: This will most likely void your Mighty Mule warranty! Read this write-up below in its entirety before proceeding. We are not liable for any harm you cause to yourself or property damaged as a result of attempting this. Electricity is extremely dangerous and can cause serious injury and death. Use the information below at your own risk and consult a certified electrician before attempting any electrical work.
At our home we have a Mighty Mule FM350 Gate Opener that operates an 8′ gate to keep our driveway secure and our Boxer mix contained. Mighty Mule packaged the FM350 with a couple RF transmitters that tend to stay permanently affixed to our vehicle’s sun visors. Getting to just the point on the other side of the gate means walking almost a complete circle around the house (through a smaller, non-automatic gate on the opposite side).