Blue Apron

I finally signed up for Blue Apron meals a while back after hearing it advertised on some blogs I listen to, so here are some of my thoughts about it. I mostly really like it but have a couple of small issues with it.

Seared Salmon with Spicy Beet & Millet Salad
My Seared Salmon with Spicy Beet & Millet Salad which I think looks pretty good for something made at home
Their Seared Salmon with Spicy Beet & Millet Salad that appears to have more beet & millet salad

For the most part it is great. You get 3 sets of meals for 2 people each week (6 meals total) for about $60. So that is $10 each meal. They deliver them in a box with all the veggies and other fixin’s sitting on top of a piece of cardboard and below are the meats in between two ice packets. Everything comes cold and ready to cook or put in the fridge.

The recipes are good, but keep in mind that they are full recipes, and include chopping, dicing and preparing all the items for the meal. It isn’t too hard to follow the directions, but I have taken longer to make meals than the recipes predict. And a couple of recipes have had very small errors, or confusing instructions. It would be great if they had an easier way to report those errors.

The main problems I have had is that I am single right now and I travel a lot, so getting 6 meals a week is too much. But they don’t have a 4 meal a week plan and I have missed the deadline a few times for skipping the week. So I have been scrambling to cook up all the meals before the fresh items go bad.

And another problem I have with most of the recipes is that they don’t have a lot of vegetables.  The beet and millet dish in the pictures is an example of a meal with very little beet and even millet.  Most meals seem pretty healthy, but the amount of vegetables usually is very small. Anticipating this for my current week’s recipes I grabbed a bag of chopped collard greens and some Brussels sprouts so I can add to the vegetables in the recipes. And that was just perfect for the recipe with collard greens.  When I looked at the bag of Brussels sprouts that was delivered, I was really glad I got more of those as well.

So, in general, I do recommend Blue Apron. It is fun to cook up very interesting real meals that can be hard to shop for in the right amounts of ingredients – or even find some of the ingredients.  They only thing they over-deliver on is garlic, which is fine because it isn’t good to break up garlic cloves, and there are always other meals to put garlic in.  Almost every single meal has been very good in my opinion, with a few being just OK.  And I have been learning a lot about how to cook, so I think that it is getting easier to follow the recipes as I get new ones.

Bash Script Argument Parsing

Years ago we came up with a halfway decent way to parse arguments for a shell script. I am posting an example template of how we did that. The goals were to have a readable, self-contained script with most of the flexibility of normal command line argument parsing. This version even handles equal signs for assigning values — something we didn’t bother with before.

#!/bin/bash


prog=$(basename "$0")

# Set defaults.
opt_verbose=0
opt_help=0
opt_number=2

usage="Usage: 
 $prog [<options>] <file1> <file2>
 $prog (-h | --help)
 
Options:
 -n|--number=<num> Number of things (default: $opt_number).
 -v|--verbose Verbose mode.
 -h|--help Show usage.
 <file1> File number 1.
 <file2> File number 2.
 
This is a template for a bash script that
handles command line options."

while true ; do
 test $# -gt 0 || break
 value=$(echo "$1" | sed -e 's/.*=//')
 test "$value" = "$1" && value=""
 case $1 in
 -v|--verbose)
 shift 1
 opt_verbose=1
 ;;
 -h|--help)
 echo "$usage" >&2
 exit 1
 ;;
 -n|--number*)
 shift 1
 test "$value" = "" && value="$1" && shift 1
 opt_number="$value"
 ;;
 *)
 break
 ;;
 esac
done

if test $# -lt 2 ; then
 echo "Error: Not enough arguments"
 echo "$usage" >&2
 exit 1
fi

file1="$1"
shift 1
file2="$1"
shift 1

if test $# -gt 0 ; then
 echo "Error: Too many arguments: $*"
 echo "$usage" >&2
 exit 1
fi

echo "opt_number: $opt_number"
echo "opt_verbose: $opt_verbose"
echo "opt_help: $opt_help"
echo "file1: $file1"
echo "file2: $file2"

Git difftool configuration

meld-mary As of Git 1.6.3 the difftool command was added to Git. This basically lets you use and external merge tool to view/edit your differences by running git difftool instead of the normal diff. I like using Meld, but it works with a bunch of merge tools. It was a bit confusing how to configure it, so here goes:

To figure out which ones you have installed and which are supported:

git difftool --tool-help

For me, the following works to set things up to use Meld without prompting.

sudo apt-get install meld
git config --global diff.tool meld
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.cmd 'meld "$BASE" "$LOCAL" "$REMOTE" --output="$MERGED"'
# Or this one if you like the center pane to be the git conflict file
#git config --global mergetool.meld.cmd 'meld "$BASE" "$MERGED" "$REMOTE" --output="$MERGED"'

In Windows it is a bit more complicated, so it is probably easier to just edit the .gitconfig file.  This also adds the mergetool settings to use Meld.  I added the following to my configuration:

[diff]
	tool = meld
[difftool]
    prompt = false
[difftool "meld"]
	path = C:\\Program Files (x86)\\Meld\\Meld.exe
[merge]
    tool = meld
[mergetool "meld"]
    # Choose one of these 2 lines.  
    # It chooses which is the one being
    # edited (center pane).
    #cmd = \"C:\\Program Files (x86)\\Meld\\Meld.exe\" "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
    cmd = \"C:\\Program Files (x86)\\Meld\\Meld.exe\" "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

Ubuntu Firewall Using UFW

It turns out that I have either been doing things the hard way, or not doing them at all in the past when it comes to firewalls on Ubuntu.  Using Uncomplicated Firewall (UFW) makes it pretty easy.

To set up a system to only allow TCP communication over some port, in this case 14300, is as easy as this:

sudo apt-get install ufw
sudo ufw allow 14300/tcp
sudo ufw logging on
sudo ufw enable
sudo ufw status

That should report something like the following when running the ‘sudo ufw status’ command:

Status: active
To Action From
-- ------ ----
14300/tcp ALLOW Anywhere
14300/tcp (v6) ALLOW Anywhere (v6)

This should maintain settings between reboots — at least it does in Ubuntu 14.04.  Reboot and run ‘sudo ufw status’ to check and make sure.

There is more information about this at https://wiki.ubuntu.com/UncomplicatedFirewall

Ubuntu 12.04 Window Border Size Increase

I am constantly installing Ubuntu and need this information, so I decided to post it here.

To change border widths, open up the theme’s Metacity XML file.  For example, Ambiance’s theme is located in “/usr/share/themes/Ambiance/metacity-1/metacity-theme-1.xml”.  To figure out what theme you are running, use the following:

gconftool-2 -g /desktop/gnome/interface/gtk_theme

Pulling it together:

theme=`gconftool-2 -g /desktop/gnome/interface/gtk_theme`
sudo nano "/usr/share/themes/$theme/metacity-1/metacity-theme-1.xml"

Then stanza in question should be apparent:

<distance name="left_width" value="5"/>
<distance name="right_width" value="5"/>
<distance name="bottom_height" value="5"/>

 

Ubuntu-window-screenshoot

From:  https://bugs.launchpad.net/metacity/+bug/160311/comments/11

Tasker control of BeyondPod

It is possible to control BeyondPod from Tasker on Android by using the general Intent sending mechanism of Tasker.  But it isn’t obvious how to do that, so I will describe here how to create a recipe to have BeyondPod do a feed update when you plug your phone into power.

Tasker  Intent Task

I first create a State Profile, with Power source “Any”.  Then I created a task “BeyondPod Update” and add a “Send Intent” with the following settings:

Action:
mobi.beyondpod.command.UPDATE_CATEGORY

Extra:
category: All Feeds

Screenshot_2014-05-16-11-17-25

Then test out the new task.  The key things left off of the BeyondPod FAQ on this that you set the extra to the word “category:” followed by the category name, and that “All Feeds” updates all categories.

Info about other intents available is at:  http://www.beyondpod.com/Android/help/FAQAPIs.htm

Printrbot 3D Printer

A little while back I got a Printerbot Jr V2 3D printer and have spent a little while trying to get it working.  It turned out that it didn’t work too well out of the box.  But now that I have figured out some of the ins and outs of 3D printing and messed with lots of parameters, I am able to consistently print items pretty well.

I ran into a number of problems with the extruder.  I have been able to fix those by replacing the extruder assembly with an aluminum one, and by adding a cooling fan for the extruder stepper motor.  The motor would overheat on long print and cause the filament to soften.  That would cause it to jam up the extruder feeder gear.

I also figured out that my printer works better when I slow down the print speed.  Since I normally don’t care much how fast it goes, that is fine with me.

I will post pictures of my extruder setup and solution to the overheating when I get a chance.