Category Archives: Recos

Reco: Outlining

Published / by Andrew

I have a reco today that’s a little different. It’s not for a particular program, but for a methodology that I’ve been using for quite some time.

Beginning a new project can be daunting. Everyone already knows that. Trying to organize my thoughts is difficult, especially for larger projects. “How do I get XYZ accomplished?”

What I’ve been doing for years, and not just for coding, is simply making outlines of what needs to be done. My personal methodology has been evolving over all of the time that I’ve been doing this and has become pretty specific. The end result (as seen in the screenshot above) is a todo list that’s organized as an outline. I’ve actually developed a Vim syntax file that color-codes it, and that color-coding has become extremely useful. (This is the same format as my notes files on GitHub.)

The key is as follows:

  • > = Todo
  • + = Done
  • * = Information
  • – = Canceled
  • : = Title
  • ! = Important to remember
  • ? = Unanswered question

This doesn’t follow the specific rules of outlines that are taught in English classes. For example, it’s not uncommon for me to have only one subpoint. There’s good reason not to do this in a slideshow presentation, but it doesn’t really apply to these outlines.

Despite how specific the structure is, the content is very fluid. Throughout the course of a project, what it starts out as in the beginning could be radically different from how it ends up as by the end of the project. It’s not a “This project must follow this exact course” outline, but, instead, is essentially my thoughts written down. Todo points may be added, information points will definitely be added, entire sections could be added or canceled (I try not to actually delete so I don’t accidentally lose important information), etc. This helps me to organize everything as well as just remember everything. Additionally, the indented format lets me use Vim’s indent code-folding method (or, in my case, an expr called “ModifiedIndent”, which you can see on my GitHub), and keeping these files helps me more easily pick up an old project months or years after I haven’t touched it if/when I need to.

Of course, I would never say “This is something you have to do.” That’s actually the case for all of my recos, but, in this case, it’s especially true. I’ve very much come to recognize Matt Hartley’s favorite catchphrase, “Different strokes for different folks.” This is something that came about for me while I was an undergrad in math– Start solving a problem by writing down everything I know. (Come to think of it, I may have picked it up from the way they do differential diagnoses in “House”.) It evolved from there and has become an essential part of how I think.

This last part is slightly off-topic, but the screenshot above is from a project that I’ve just started (hence all > and no +). It’s a program that I’m writing for my sister to help keep track of time, based on a VBScript program that I wrote for myself a while ago (at the time, I didn’t know PowerShell). I was describing how I had a script run once an hour and prompt me with “What are you working on right now?” Then it would store the result in a CSV file, which I could later open in Excel and count how many hours I spent working on any individual project. She said that would be very useful in her line of work, and, huzzah, a C# project was born. If it were just for me, I would probably just use either PowerShell with Windows Task Scheduler or BASH with cron, but, if I want to share it with others, I’d rather have one package do everything (and, in this case, a GUI program). I’m hoping to be able to use Gtk# to run it cross-platform.

That’s all for right now. Thanks for reading!

Reco: Vagrant

Published / by Andrew

You may remember the post that I had before on using VirtualBox as a testing environment. Well, I recently learned about a program that just blows that out of the water.

Vagrant makes creating, destroying, using, customizing, ssh-ing into, etc., of virtual machines so ridiculously easy that I’m now using a VM for every project (which is actually the intended purpose of the program). These aren’t just for testing code periodically, but for every step in the development process. I never run the code on the host computer– It’s always in a VM.

That means that I understand all dependencies that are being used. I don’t need to worry that code that works on my machine won’t work on a DO droplet because of an unknown dependency that I installed on my box two years ago. I also don’t need to worry about filling my box with weird and even conflicting software, because the environments are encapsulated in virtual machines. (Case in point– I’m currently teaching myself C#/ASP.Net, etc., and I haven’t bothered to install Mono on my laptop because I’ve installed it in a Vagrant VM instead.)

Vagrant is essentially a program that extends VirtualBox functionality (though it also works with VMware Workstation and Parallels). Everything that I do with Vagrant is possible using VirtualBox on its own, but Vagrant makes it much faster and easier. In Threadstr, I create and destroy VMs on a whim to make sure that every little change that I’ve made to ubuntusetup.sh will work correctly. I rarely even run the node command on the host machine anymore.

Like calculus, Vagrant is hard to learn but easy to use once you’ve learned it. I think it’s well worth the effort, and I’d highly suggest it to any dev that’s working in a compatible project. This means projects that don’t depend on Visual Studio, XCode, or anything else that’s incompatible with Linux, FreeBSD, and other FOSS operating systems. (Piracy laws won’t allow non-free operating systems like Windows, MacOS, etc. to be distributed the way that Vagrant VMs are.)

(If you’re interested in my Vagrant notes, you can find them here, or the original plaintext file here.)

Reco: Termux

Published / by Andrew

I’ve been working on Threadstr a lot lately, but I think I’ll take a break to make a reco.

(“Reco” is short for “recommendation,” not “reconaissance,” by the way.)

There’s a really neat program on Android called “Termux.” It is, more or less, a CLI Linux distro for mobile (which seems to be based on Debian), complete with its own software repos containing the most common CLI tools you’ll need. I’ve found it to be incredibly useful because it gives me the tools to be able to SSH into my DO droplets, being able to use a full version of Vim, being able to use Git, and so much more. It has a complete BASH implementation with .bashrc just like you’d expect from any Linux distro. Thus far, there have only been two things that I haven’t been able to do: Compile LaTeX documents (texlive is not in the repo– yet) and use the Perl engine for grep (there’s probably a way to enable that, though).

I was beginning to seriously consider renting a DO droplet for the sole purpose of being able to SSH into it through Juice because of how useful it would be. That’s now no longer necessary for me.

With a Bluetooth keyboard, I have greatly reduced my need for a laptop by using Termux. (When I am sans physical keyboard, I am able to get by with Hacker’s Keyboard.)

If you have need for a Linux distro on-the-go, I’d definitely suggest you give Termux a try.