Hi! I’m Brad!

I’m an award-winning software developer from Laramie, Wyoming.

  • Thai Peanut Pasta

    Al dente noodles covered with thai peanut sauce, parmesan, basil, oregano and fresh lime.
    Al dente noodles covered with thai peanut sauce, parmesan, basil, oregano and fresh lime.

    This quick recipe is tangy, spicy, and good as a hot meal or served cold as a salad.  As a meal, serves two.  As a side-dish, serves four.

    Ingredients

    • 8 ounces of bite-size pasta (Rotini, Penne, Bowtie, etc)
    • 1/2 lime (keep other half for peanut sauce)
    • Grated parmesan
    • Basil
    • Cilantro
    • Fresh-ground black pepper
    • Thai Peanut Sauce (adapted from Blendtec’s recipe)
      • 1/4 cup milk (non-dairy is best, but not necessary)
      • Juice from 1/2 lime
      • 1 tablespoon honey
      • 1 tablespoon ground ginger
      • 1 tablespoon minced garlic (or one whole clove)
      • 1/3 cup peanut butter (creamy or chunky)
      • 1 tablespoon hot sauce (I use Sriracha)

    Procedure

    Begin by boiling 1 quart of water.

    Combine all ingredients for the Thai Peanut Sauce in a blender, and blend until smooth.  If you used non-dairy milk, you can put the sauce in a squeeze bottle for easy application (highly recommended).  Label and store in your fridge.

    Cook the pasta to al dente (roughly 10 minutes).  Drain the pasta and return to pot or to a serving bowl.

    Add enough Thai peanut sauce to coat the pasta.  Add Parmesan, pepper, cilantro and basil.  Toss to coat evenly.  Squeeze fresh lime on top.  Serve with more Parmesan, cilantro and basil to garnish.  Optionally, garnish with lime wedges.

    Serve immediately, or to serve as a salad, refrigerate over night.

  • I’d better not see that on Facebook.

    I’d better not see that on Facebook.

    Here’s a quote you hear after every camera flash at every party you ever go to.  Or people milling about reminding people to not tag them in photos.

    And why is that, exactly?  So their Mom won’t see?  So that potential employers won’t see what an animal they are?  (employers should never screen prospective employees using Facebook, but that’s a topic for another day)

    The answer is: yes, to all of these questions.  But the reason is simple: people want to be in control of their digital identities.  And that leads me to the thesis: stop putting embarrassing photos of your children online.

    We are pioneers of a new frontier.  We were thrust into a world with social media, but we weren’t given the foresight to see how it will affect our identities months, years, decades, or millennia in the future.  It was a slow fade–we all enjoyed tagging on Facebook, but then what happened?  People lost jobs, or were flatly refused employment as a result of their emerging online identities.  Our consciousness shifted.  We realized that there were consequences to sharing on Facebook.

    It’s time for our consciousness to shift again.

    The next generation is being forced into social media.  Their online identities are becoming known to Google and Facebook, and they don’t even have a say in the matter.  We live in a world where Facebook has facial recognition engines as good as (or better) than the human brain, but infinite capacity to store that data.

    Facebook’s facial recognition is a terrifying collection of data.  This means that a photo you took in a Las Vegas club could actually connect you to the people in the background and margins of your frame.

    We are subjecting our children to this scrutiny.  Our children are not even ready to fathom the expanse of the Internet and how it shapes their identity, yet we are dumping their lives, moments, and history into a machine that knows more about the state of humanity than the world has ever known.

    Our lives are being cataloged.

    Every photo you take is algorithmically scrutinized.  Every post you make is geotagged so you won’t forget where you were.  Every hashtag you use is intimately connected to the breath of global consciousness.

    This is perfectly okay–for you.  Your children do not need their lives pasted into a digital scrapbook they have no control over.

    In the past year, I’ve seen…

    • pictures of naked children in bathtubs (way too many, actually)
    • videos of children crying as they are forced into using a training toilet
    • videos of naked, panicked children running around the house during a rain storm

    And I could go on.  If you’re not comfortable sharing this level of detail about you and your personal life on Facebook (Twitter, Instagram, etc), then you shouldn’t post these things about your children, either.

  • Best Alfredo.

    I’m posting this because this is my favorite recipe.  And also I can never remember where to find it.

    Creamy Alfredo

    I made a tweak the first time I made it replacing the red pepper flakes with cayenne pepper.  I actually prefer it with cayenne.

    Vegetarian.  Quick.  Delicious.

  • Free WordPress Theme! Introducing Civique.

    I’ve been working on a WordPress theme lately.  It’s a theme designed for non-profit organizations, but it could work well for almost any organization.

    It is MIT Licensed (compliant with GPLv2).

    It has full support for…

    • Theme Customization
      • Header color
      • Logo (keep it under 75 px tall)
    • Header Images
    • Post Thumbnails
    • Attachment alignment
    • Menus
    • Sidebars

    It includes other goodies, too…

    • Non-profit Summary Shortcode
      A shortcode that uses the ProPublica Nonprofit API to generate a page of information about your 501(c)(3) organization, including summaries of non-profit financial activity.  Insert the shortcode `[civique_summary]` to display the non-profit rundown.
    • Fundraiser Progress Widget
      Add the Civique Fundraiser Widget to your sidebar to easily show progress on one or many fundraisers.  Add as many fundraisers as you need.  They will show a progress bar, and a link to an online donation page, if you include it.

    It is an open-source project hosted by the United Way of Albany County.

  • WordPress Goodie: Theme Customization API code generator

    This isn’t quite as robust as what I usually find over at GenerateWP, but it’s certainly handy, and it makes it easy to correctly link your settings to groups to controls.

    There are some limitations

    • No support for non-`text` WP_Customize_Control elements.  This is an easy fix, and you should reference the official WordPress API Documentation for more help.
    • It is an Excel spreadsheet.  It SHOULD open in OpenOffice/LibreOffice/Google Spreadsheets, but I make no guarantees, nor have I attempted to test these claims.

    Download WordPress Theme Customization API Generator (Excel Spreadsheet)

    MIT Licensed

    Copyright (c) 2014 Brad Kovach

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the “Software”), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

  • The death of TrueCrypt: a symptom of a greater problem

    UPDATE: 29 May 2014 at 9:30 MDT

    The TrueCrypt development team has broke their silence to the audit team.  My suspicions articulated in this post were correct.  You can learn more at GRC.  TrueCrypt will be adopted by the Linux Foundation, ensuring its continued vitality and success as an open source project in the free world.  Join the Linux Foundation if you can.

    Open Source Software (OSS) is in danger.  We rely on OSS every day to encrypt online banking and shopping, serve our web pages, move and deliver our email, render our web pages, manage our websites, power the world’s encyclopedia, and so much more.

    These projects are essential to the backbone of the internet.  Typically, they rely on volunteers for development, testing, reporting bugs, and evangelism.  They also, typically, rely on donated financing as well…

    So, these projects, free as in speech and as in beer, are powering significant portions of the web.  In the case of Apache Web Server, “Apache is used by 60.5% of all the websites whose web server we know” (W3Techs, May 2014). OpenSSL is used to encrypt 16% of websites among Alexa’s top million websites (Datanyze, May 2014).

    But these projects are struggling.  Recently the TrueCrypt Foundation announced the end of the TrueCrypt project.  Some suspect foul play from three-letter government agencies.  Others suspect hackers.  But the undeniable reality remains: TrueCrypt is an open source project written and maintained by anonymous volunteers.

    TrueCrypt has fallen under intense scrutiny lately.

    • a third-party audit (an important but still gut-wrenching process for the developers)
    • increasing reliance on TrueCrypt as Snowden’s NSA revelations come to light
    • angry reactions to open source failures, namely the OpenSSL Heartbleed Vulnerability.

    While the tinfoil hat conspiracies are fun to entertain, it is likely not the reality here.  TrueCrypt’s developers have shown us the reality of the world without free, open-source security.  We are left to trust our OS vendors and their closed-source unverifiable encryption.  The “ominous” message posted to the TrueCrypt SourceForge page, in my opinion, is designed to be hyperbolic and terrifying!  Without the support of the open source community, TrueCrypt cannot survive.  Without a compassionate community that understands that TrueCrypt is a hobby for the developers, it is unsafe for TrueCrypt to continue the project.  Potential for legal liability is high (even though the developers are completely anonymous).

    In other words, if your hobby ever becomes the golden standard for file encryption, and it is being used to rifle state secrets about the globe, or to foil a child pornography investigation, you might want to take a step back.  And it’s possible that that’s exactly what TrueCrypt’s developers have done.

    After the world’s kneejerk reaction to the OpenSSL Heartbleed vulnerability, people got mad at the small development team for pushing such shoddy, insecure software.  But the reality is this: the OpenSSL library, for its one failure, has had billions of successes.  But nobody cared.  Heartbleed scared people, and that, in the court of public opinion, overshadowed those billions of successes.

    Suspicious Shutdown…

    People are citing an out-of-character shutdown for the TrueCrypt project.  Some consider it to be a warrant canary (since their behavior is so different from TrueCrypt’s MO).  Many of the recommendations made by the TrueCrypt team are ironically terrible advice considering how cautious we’ve become with TrueCrypt at the helm.

    If you have files encrypted by TrueCrypt on Linux:

    Use any integrated support for encryption. Search available installation packages for words encryption and crypt, install any of the packages found and follow its documentation

    In other words they’re saying “just search for something and use it.”

    On the Windows end of things, they’re simply stating that we should embrace a closed-source solution that they’ve been subverting for the past 10 years.

    This is satire.  In satire, irony is militant.  And the point of this satire is: “good luck without us.”

    If you were a TrueCrypt developer…

    So taking the totality of the current state of TrueCrypt into account, it’s a massive burden for the development team to bear.  On one hand, it has been a monumental success for privacy advocates and data security, but on the other hand one small vulnerability could destroy its credibility and its meteoric rise to fame might collapse in days.

    So the developers did what anybody in this position might do.  They called the game.  They left us with an ominous picture of the world without TrueCrypt: trusting our data to closed-source solutions, with little to no recourse against three-letter agency interests in backdoors.  Developing TrueCrypt was a thankless job, and they don’t want to be responsible for its collapse.

    If the world doesn’t want to invest in open source software, it’s the world’s loss.

    I hope the developers of TrueCrypt are safe, and that the conspiracies are not true.  This might be the wake-up call open source needs.

    Let’s discuss this on Twitter. Follow @bradkovach to chat with me.

    Further Reading

  • Speed up your routine: SMOOTHIE CUBES

    I’ve done a lot of work engineering my morning nutrition to be easy and fast.  One of my particular innovations is borrowed from the people that freeze their fresh herbs in ice or oil.

    I got sick of guessing how much spinach I was putting into my smoothies (it doesn’t measure well, and I don’t want to weigh it when I’m in a hurry).

    Solution?  Pre-make some smoothie cubes.  Pack this into your blender (I use a Blendtec TotalBlender w/ WildSide Jar–and I recommend it highly).

    • 16 ounces of spinach
    • 16 ounces of carrots
    • 1 1/2 cups of orange juice
    • 1 1/2 cups of pasteurized egg whites
    • 1 cup of oatmeal (not minute oats)

    Blend until very smooth (three WHOLE JUICE cycles on a Blendtec blender). You shouldn’t be able to see oats or carrots in the final product.

    Pour the blended mixture into ice cube trays and freeze over night.  I stack the trays with a sheet of parchment between each tray to prevent sticking.

    Crack the cubes into a large, labeled zipper freezer bag.  Use two-to-four smoothie cubes per smoothie.  Yields ~48 smoothie cubes.

    1 smoothie cube has roughly

    • 1/3 ounce of spinach
    • 1/3 ounce of carrots
    • 1.5 teaspoons of orange juice
    • 1.5 teaspoons of pasteurized egg white
    • 2 teaspoons of oatmeal

    Two smoothie cubes contain recommended (based on 2,000 calorie diet) Vitamin A intake for the day.  Vitamin A is fat-soluble, so you should not exceed your recommended daily intake.  Talk to your doctor.

    Smoothie Cube nutrition facts
    via Wolfram Alpha
  • Exciting WordPress Developments

    I have been working on some exciting new WordPress things that I plan on releasing in compliance with the GPL.

    First, since there wasn’t a decently simple (free) front-end profile management system, I decided to write one if my own. It is completely customizable with short codes and allows you to validate input with regular expressions before you save the data. All of this is controlled in the post editor. It is nonced using WordPress’ nonce API. It’s pretty elegant in its implementation.

    Next, I plan to release some sort of iteration of my SCSS/CSS and WordPress template framework tools. I have tons of code generation spreadsheets that make grid design and implementation a piece of cake. Provide a couple parameters and the spreadsheet will calculate responsive grids. The grid is based on 6 columns and intelligently resizes all the way down to small screens. I have spreadsheets to make a lot of development work easier. It would be a shame if I didn’t share.

  • For Your Privacy: Changes to sharing

    I have made an adjustment to the social share buttons on my site.  For your security, the buttons are not loaded by default.  This prevents sites like Facebook and Google from tracking you.

    If you would like to share things you can activate the slide toggle next to the share widget, and the widget will load appropriately.

  • Why Is Bitcoin Valuable?

    Bitcoin.  It’s everywhere in the news.  It was 2013’s best investment, and it’s taking the world by storm.

    So why is it a big deal?  And why does it have value?  Well, this is my attempt of explaining one of the fundamental facets of currency: a proof of work.

    Disclaimer: I am no economist.  There are other variables at play when valuing a currency.  Please bring these discrepancies and concerns to my attention in the comments.

    Proof of Work

    Proof of Work is arguably one of the biggest things that make a currency valuable.  The idea is that when we have something, and when we want to use that as currency, we need to know that it wasn’t produced trivially.

    Traditionally, up until recently, we have used gold (or other precious metals) as proof of work.  We understand that gold (etc) is rare, and if someone is able to produce a quantity of gold, we know that they worked a specific, non-trivial amount to obtain that gold.  As a result, our currencies have been defined by precious assets.

    Cool.  But what about Bitcoin?

    Glad you asked!  Bitcoin derives its value from computation.  I.E., Bitcoin is valuable because we use computers to create it.  But how do we create a proof of work out of our computing power?  Easy.  We create problems that take computers a very long time to solve.  In the design of Bitcoin, this is achieved with hashing.

    Okay… What’s hashing?

    According to Wikipedia, hashes are defined as

    [functions] primarily used to generate fixed-length output data that acts as a shortened reference to the original data. This is useful when the original data is too cumbersome to use in its entirety.

    Consider a hash as a boiled-down version of its input.  The hash of a pot of soup would be some sort of reduction scraped off the bottom of a pan.

    What is fascinating about hashes (and this is where the soup analogy stops working) is that hashes are one way.  In most cases, it is impossible to effectively reverse a hash without using trial and error.

    In other words, there is no way to tell what a hash’s input was.

    This is where Bitcoin’s value comes from.

    Hashes and the Blockchain

    Bitcoin transactions are recorded in a special, public data structure called a block chain.  Special programs called miners are used to add new blocks to the end of the block chain.

    A miner’s task is to gather recent transaction metadata and a few other pieces of metadata, and find a random number that, when combined with the rest of the metadata, produces a hash that meets the difficulty requirement of the network.

    For example, a recently mined block has the following hash

    00000000000000013c91aad4c2645706294bcaeae0b7117ea1c8ffc97feb5167

    What’s worth note is that this block’s hash has 15 zeroes at the beginning.  This is evidence of the proof of work.  Finding a hash of the block is incredibly difficult right now, and as the Bitcoin network’s computing power increases, the required hashing difficulty increases accordingly.

    How does a computer find a hash?

    1. Gather necessary metadata and structure it according to standard.
    2. Generate a random number and place it in the block.
    3. Hash the block.
      1. If the hash meets the network’s difficulty requirements the block is appended to the block chain, and the next block begins.
      2. If the hash doesn’t meet the network’s requirements, the computer is welcome to try again until it finds a valid hash.

    At the moment, it would take one computer at least 98 years to hash a block by itselfThis is a proof of work.

    Why are hashes good for this?

    Again, good question!  Good hashes are full of entropy.  This is to say that minor changes in the input has a massive effect on the actual output of a hash.

    The following inputs were hashed using MD5.  The passage on the right is missing the period at the end.  Otherwise, the passages are identical.

    Input

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus varius nulla mauris, ac ornare eros venenatis quis. Curabitur elementum risus vitae arcu mollis, vel accumsan nulla tincidunt. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas et condimentum lacus. Maecenas eu nisl ac arcu congue interdum. Sed risus elit, consectetur et venenatis eu, egestas eget nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec a ligula purus. Vestibulum magna ligula, consequat sed varius sit amet, mollis sollicitudin lorem. Nulla et elit neque.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus varius nulla mauris, ac ornare eros venenatis quis. Curabitur elementum risus vitae arcu mollis, vel accumsan nulla tincidunt. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas et condimentum lacus. Maecenas eu nisl ac arcu congue interdum. Sed risus elit, consectetur et venenatis eu, egestas eget nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec a ligula purus. Vestibulum magna ligula, consequat sed varius sit amet, mollis sollicitudin lorem. Nulla et elit neque
    Output (md5) 35f45fa061f48a3d9cfc9ef3dee03aa1 313fb0e8e65bf7ac0a3f16f30f958e17

    What’s interesting is that the hashes are dramatically different.  Consequently, it is nearly impossible to effectively game the inputs of a hash with an understanding of how it will affect the output.

    Interestingly, these two hashes are such rare combinations of letters and numbers that performing a Google search for either hash will probably only lead to this article.

    Most computers with a good graphics card are capable of computing around 30-50 million hashes per second.  That’s 30 to 50 million GUESSES per second.

    The size of the entire network is at 17625 Thash/s.  In other words, the network is guessing 17,625 billion hashes per second attempting.

    Hashes are relatively easy to calculate.  So once a random number is appended to the block and calculated to a valid hash, it can be recalculated instantly and reliability.  This verifies the proof of work.

    The miner that successfully hashes the block is awarded an amount of Bitcoins for their work.  This is how Bitcoins are minted.The first miner to hash the block successfully gets the reward.  As a result, the network races to verify transactions.  Most Bitcoin transactions are committed to the blockchain within 10 minutes!

    Safety.

    This intensive hashing process also makes it virtually impossible to adjust the blockchain retroactively.  If an attacker wanted to undo or alter a transaction that happened in the past, the attacker would have to re-hash the block and every block after it since each block contains the hash of the block before it.  This is too much work for one adversary to achieve in a million lifetimes.

    As a result, once a transaction has been committed to the blockchain, it is safe for eternity.  Bitcoin does not have refunds, or chargebacks for this reason.

    Power.

    Remember when I stated that one computer would take nearly 98 years to solve a block?  This leads to the exploitation of a very precious resource: our computing power.  At the moment, the Bitcoin network is capable of mining a block in about 10 minutes.

    Mining is most commonly completed in pools that allow participants to solve hashes and share on the minted coins.  You are rewarded in proportion to the amount of work your computer completed.

    Conclusion

    Bitcoin is valuable, and we aren’t just pretending like it is for the sake of fantasy.  As with every other valuable currency, there is a proof of work involved in discovering new Bitcoins.

    Rather than physically mining gold or precious metals, the Bitcoin network is seeking an answer (the hash) to a math problem that can only be found by trial and error.  The hash uses transaction metadata and a random number so that any changes in transactions would require rehashing each block of transactions.  As a result, it is impossible to retroactively adjust a transaction.

    Try it!

    Bitcoin is cool.  It makes it easy to send money avoiding restrictions regarding exchange rates and repatriation of money.

    If you are looking to try Bitcoin, head to trybtc.com.  They’ll transfer a tiny amount of Bitcoin to a wallet of your choice.

    Thanks for reading!  If you want to send me Bitcoin for any reason, my public address is 16sVVZiJuCUBpWhKRDse1AzSkNvxHNgceT