Flask Services

Python's Flask, along with Flask's Restplus package, can create an API program really quickly. This is all it takes to define a new endpoint, and it will also translate the python dictionary into a proper JSON return value in this GET command:

@ns.response(404, "Case not found")
class Health(Resource):
    def get(self):
        """Return healthy ping"""
        outstruct = {'id': 0, 'field1': "X3544", 'field2': "X4555", 'disease': 'Z4999', 
                     'subfields': {'subfield1': "Y2333", 'subfield2': "Y8373"}
        return outstruct
more ...

NIH Data

Now that I'm involved with Oracle's Cancer Cloud initiative, I'm learning a whole new data domain -- Cancer Research. There's a bunch of publicly available cancer research data that I didn't know existed, and it's really interesting to poke through it, even though I'm still learning what it means.

The government has some very large data repositories, and the most interesting is the NIH's Cancer Portal site. There's a bunch of data there, including the often use TCGA data. This is also viewable in the Exploration tab.

more ...

First Robotics FTC Referee

Lance FTC Ref

I got to referee the local First Robotics FTC competition last night. Kids from several schools built robots to pickup balls and push buttons, both autonomously and via remote control with a time limit. The kids and their robots were great, and I was honored to be a part of it.

more ...

No-bake Energy Balls

I make these a lot, and so here is the recipe:

  • 1/2c (125g) Peanut Butter
  • 1/3c (115g) Honey
  • 1c (104g) Oats
  • 1c (75g) Coconut Flakes
  • 1/2c (80g) Ground Flax Seed
  • 1/2c (handful) Mini-Chocolate Chips
  • 1tsp vanilla

Mix all, let sit for 1/2 hour in refrigerator, shape into balls.

Since this has several sticky ingredients, this is much easier make by using a kitchen scale, pouring the amounts in your bowl until the amount is pretty close, then pressing "tare" between ingredients.

This is not an exact recipe -- amounts can be varied to taste. Instead of …

more ...

Pelican Static Site Generator

I was making some little modifications to this website this evening, and I've got to say, that the Pelican Static Site Generator, is pretty awsome. I've gotten a couple people, technically inclined, onto static site generators.

By updating the scripts I have on my local computer, I can run Pelican, start a development webserver, and view the statically generated pages. These pages are created in Markdown format, with some CSS for formatting. Creating new content involves creating a text file with new Markdown. The whole thing can be saved in Git, and Pelican has commands to push the website to …

more ...

Makefiles - The Simple Version

My projects tend to have a Makefile in the root folder. Although most people seem to shy away from Makefiles due to their complexity, you should look at one of my files. To me, they're a simple way of scripting and running aliases to commands you want to do and don't feel like remembering.

There is the old joke that nobody actually creates a new Makefile, but that you just copy an old one and edit it to you needs. Yes, I've seen complicated Makefiles, and it seems like because of this complexity, people have moved on to newer build …

more ...

Backing Up to S3

Everybody needs backups of their data. Computers catch fire, crash, taken out by power surges, or get fat-fingered as you reinstall your OS and you select the wrong parition. RAID is not a backup.

Backup to local drives are good. As are backups to externally mounted drives that you then detach and store elsewhere. But this is 2016, and the Cloud is where it's at.

Amazon Web Services (AWS) S3 storage continues to get cheaper and cheaper, and it's tough to compete even with local storage. As of now, standard S3 storage is $0.30/GB/month, and the "Infrequent …

more ...

Python Running External Automation Commands

Python is a wonderful language for automation, and it works well on Linux, or even on Windows.

Running an external command on Linux can use something like this:

def run_cmd(run_string):
  logger.debug('run_cmd: ' + run_string)
  return subprocess.check_output(run_string, shell=True,

This will print some debugging output, run the command passed in, and return the output from the command as a string. It will throw an exception if anything went wrong.

Now, you can run this from your main function as:

shell_output = run_cmd("service ssh stop")

What is more interesting about using an internal function to run a …

more ...

Using Vim and Vundle

I’ve been using some version of the same Vimrc file for about 20 years now, when a colleague gave me a copy of his Vimrc with a bunch of useful functions which I’ve tweaked over the years. I have no idea how old the Vimrc file was before I got it. I take pride in maintaining my version of the eternal Vimrc flame, and I still use Vim almost daily.

However, the file has been getting shorter as I remove old versions of functions which don’t make sense any more. The bundling support in Vim is the …

more ...


In addition to recent C#, database, and Amazon Web Services management for a client lately, I'm also reworking their mobile app. The existing app uses C# and Xamerin, which makes for a fine, but heavy cross-platform app, but it also uses an older version of MvvmCross. This old version doesn't work with iOS 9's recent enforcement of 64-bit libraries, and so something needs to be reworked. Since they weren't really happy with the current direction, we though we'd start over and use something a little different.

Apache Cordova is an impressive library that allows you to develop a Typescript or …

more ...