Friday, July 19, 2013

Yes, it's real

Tuesday, June 25, 2013

Blichmann Tower of Power reviewed

So, first off, this thing is expensive and I personally think there are WAAAAAY too many self-congratulatory reviews on the internet for expensive products. Like everything else, this thing has pluses and minuses. If you want the short-but-sweet version: it works, it has some nice features, several drawbacks and I think it's too expensive to give it a sound recommendation.

Very small form factor
Stainless enclosure is nice
PID controller eliminates overshoot (but is of questionable utility)
Flame rectifier
Works for natural gas or propane setups

PID seems unstable
PC software is clunky, poor user interface, and only runs on Windows
Communications cable is overpriced
Programming your own mash steps is tricky
PID controller has insufficient documentation
Installation not straightforward

Some additional information that I've gathered and think is useful:

The PID they're using appears to be the venerable Love Series 16B. At least they appear similar in appearance and they're also using the same software! The "TOP-Link" software has the same appearance/look/feel of the "Love-Link" software from Love Controls. This is very disappointing to me because this software is a stinker, only runs on Windows and has a craptacular UI.

I'm reasonably confident that they're also using this Fenwal 120v ignition module (or a similar product from the same manufacturer), and here's an appropriate electrode.

I'm not saying this whole thing is a piece of cake, but I do think it's overpriced but by how much is hard to say. The PID is about $90, the ignition module is about $200, and the electrode is between $20 and $50. So that's at least $350 before you add wiring, a case, a solenoid valve, etc. It retails for about $575, so I guess it's a matter of how much you like doing this stuff and how much it's worth to you.

Perfect example of "too many lawyers"

Bank of America has an "Unsolicited Idea Submission Policy" on their "Contact Us" page:

Bank of America and its associates do not accept or consider unsolicited ideas, including ideas for new or improved products, processes or technologies, product enhancements, advertising and marketing campaigns, promotions or new product names. Please do not send any original materials, suggestions or other items. The sole purpose of this policy is to avoid potential misunderstandings or disputes when Bank of America’s products or marketing efforts might seem similar to ideas submitted to the Bank. If, despite our request not to send us your ideas, you still do, then regardless of what your communication states, the following terms shall apply to your idea submission.
TERMS OF IDEA SUBMISSIONYou agree that: (a) your ideas will automatically become the property of Bank of America, without compensation to you, (b) Bank of America can use the ideas for any purpose and in any way, and (c) any information you provide will be considered non-confidential.
Because this probably happens all the time, right? Somebody sends them an idea on how to construct a new credit default swap. This is what caused the financial crisis - user submitted ideas.

Saturday, June 22, 2013

commander flatus's mom's new orleans barbecue shwimp recipe

1 cup butter
2 cups olive oil
1 cup Worcestershire sauce
4 lemons halved then quartered
2 teaspoons cayenne pepper
1 tablespoon italian seasoning
4 sprigs fresh rosemary
1 pod garlic, peeled
1 teaspoon paprika
1 teaspoon salt
2 tablespoons chef paul prudhomme seafood magic
4-5 pounds large shrimp weighed before you remove the heads

here's the commentary:
use like 2 sticks of butter and the same amount of olive oil, you can't tell the difference except you won't have a heart attack when you're 40
use 2 lemons instead of 4 - 4 is way too many
use 2 pods of garlic. garlic. garlic. garlic. beer. scotch. bourbon. bacon. garlic. what else do you need, really?
maybe use more rosemary too - like 6 or 8 sprigs - take the little leaves off the stick and throw out the stick

OK - it's easy - take everything except the shrimps mix well, low heat and reduce uncovered at least 30 minutes. lemon should just look like brown stained peels. garlic should be soft-ish and taking on the color of the sauce.

now here's the real trick part - turn off the heat and let it sit for several hours. if you can't do this part, don't worry. it's still great. but making it around lunchtime and then letting it sit until dinner gets the lemon soft, mild and delicious and gets the garlic all tasty too.

when you're ready to eat, throw in the shrimp and cook for 10-15 minutes uncovered on low heat in their shells without their heads. 

shrimp should get orange and curl up.

serve with pasta or warm bread.

have fun.


Thursday, June 20, 2013

Some thoughts about tailored clothes in Asia

A Dong Silk is a highly marked tailor on Their clientele (the clientele of, that is) are notorious cheapskates. I had 14 shirts, 12 trousers, and 4 suits made by them about 6 years ago. They've worn very poorly and are not the fabrics they represented - 100% cotton shirts are cotton/poly blends.

The jackets of the suits are coming apart - they appear to be somewhat glued together.

If you have special tailoring needs (crooked back, leg length differences, etc.) you really need to speak up for yourself. Usually there's a salesperson who isn't a tailor doing all of the measuring. If you have special needs, you'll have to insist that the tailor come out and have a look.

If you get a mens suit made and don't have at least 2 or 3 fittings before the jacket is finished then they haven't really done their job. It's just not possible. It's like if you told your kid to take out the trash and they come back inside 5 seconds after they left. If this happens, you're not getting a well made product and you're usually too late to back out. You'll have to make demands about the fit and finish and you likely won't/don't know enough about clothes to do so.

Finally, recognize that you are not capable of telling the difference between egyptian cotton, cotton/poly blend, wool, wool blends, cashmere, etc. Further, if the material is presented to you in a deceptive fashion, you're really gonna be screwed.

Use somebody you trust. Use somebody that's not super duper cheap. Do not count on tripadvisor ratings. Gather ratings and reviews from elsewhere, and be prepared to spend money. It's like they say: fast, cheap, good - pick two.

Wednesday, June 19, 2013

New Orleans municipal water analysis for homebrewers

I tried googling for this, to no avail. If you're interested in the New Orleans water supply for homebrewing, here it is (links to PDF).
The commentary from the scientist that passed it along follows:

The hardness and alkalinity vary as our source water (MS River) varies. Currently, the total hardness of the tap water on the east bank is about 150 mg/L as CaCO3 and the alkalinity is about 120 mg/L as CaCO3. Typical chloramine levels uptown are 2.5 - 3.5 mg/L; typical free chlorine levels are <0.2 mg/L.

Monday, June 10, 2013

Vacation haiku

Great food, nice people, cheap beer
Shopping, tailored clothes
Hangover, credit card bill!

Sunday, June 9, 2013

Monday, April 29, 2013

Thursday, April 18, 2013

Welding thin sheet metal

Just can't get the hang of it. Temporary setback, need to redesign...

Thoughts on my Everlast MultiPro 205

I've had my Everlast MultiPro 205 combo TIG/Plasma/Stick welder for some months now. I thought I'd share some thoughts:

The manual is almost worthless.

The included hose and hose clamps are trash. Don't bother with them. Throw them in the trash.

The included argon regulator is manageable, but one must remember that the flow meter is metric!

It doesn't include any tungstens but does come with a nice collection of consumables. You'd do well to buy a gas lens setup on eBay, they're cheap - about $10 for everything. Also check eBay for deals on filler rod and tungstens - Amazon, too. If you're not close to your local welding shop, it may be a good solution for you to get supplies. But do remember to support your local welding shop when you can!

The plasma cutter function works quite well. Have cut some stainless and angle iron. Works as expected. No problems at all. In fact, this unit (at its current price of about $660) is far less expensive than any dedicated plasma cutter I could find.

The stick welding stinger is cheap and not well designed. It works, though. Note that unscrewing the handle from the head is how you loosen the clamp that holds the stick electrode.

The TIG gun included is actually a decent TIG gun. The unit includes a foot pedal. The foot pedal is a bit odd - most units you can set a dial of the pedal to control the maximum amperage. This foot pedal has a set screw that you adjust up/down to control the maximum amperage. Unfortunately, when it's fully extended, it still runs up to about 140-150 amps, which isn't suitable to smaller workpieces which require lower amperage. This is easily fixed by purchasing a longer screw at your local hardware/big box store.

The people from Everlast are helpful and appear to check their email frequently.

Lastly, TIG welding is HARD.

Here's a link to the Amazon page:


Sunday, March 24, 2013


So the idea is to build an automated, network-connected smoker out of a recycled stainless steel half barrel keg. So far, I've just setup this jig to the keg to plasma cut the top off. This will be the lid. Later, I'll weld a sheet metal "lip" around the circumference of the base to hold the lid in place and prevent smoke and heat leakage.

I'm trying to cut just below the seam where the keg was originally welded.

So off comes the top:

Cutting holes for the air inlets/outlets and temperature probe:

Here is why we wear safety goggles:

And here is stick welding stainless (mfugly):


Location:Richmond Pl,New Orleans,United States

Thursday, February 21, 2013


A teacher once told me that the challenge in seeing the patient with bloating was to tell her that it's fat, not bloating without offending them. Seven years ago when he told me that I thought he was horribly misogynistic and cynical. Now I realize that he's a genius.

Monday, February 18, 2013

Passengers urged to fart

This isn't news to me, but I found it to be heartwarming that other professionals are advocating what I've been doing for years:

Passengers urged to fart | News24:

'via Blog this'

Wednesday, February 6, 2013

How to get EyeTV recordings into Plex

I like EyeTV, I have it set up with a Hauppauge HD PVR to do recordings of TV shows and movies. It's got lots of great features, it can wake your Mac from sleep to do a recording. In general it's a great piece of software. Plex is fantastic too. Getting recordings from EyeTV to Plex to watch on the Roku devices in my house didn't seem easy. Then I found this thread over at the Plex forums.

A huge thank you to everyone that worked on it. I tweaked it some for my setup...

UPDATE 23-Feb-2013
See this thread from Apple Forums for great comskip info.

-- Run the python MarkCommercials script for the given recording-- this must be run with the RecordingStarted script-- it will check if there were multiple PIDs for the recording and runs MarkCommercials for each pid-- requires updated MarkCommercials which allows specifying the pid-- by Ben Blake, September 2009
-- modified commander flatus 2/2013
-- remember that we're starting from the comskip post-processing script
-- i commented, documented a bit
-- this will directly export the H.264 that a Hauppauge HD PVR generates - very quickly
-- the resulting file is smaller than the iPad transcode and literally takes a minute if you generate recordings with this hardware
-- otherwise, this may be slower ymmv
-- Applescript is a dreadful language
-- Don't try to export directly to a network share unless you know what you're doing

-- as best i can tell etvcomskip doesnt do anything to my h.264 recordings
-- there is a donation version but from a cursory search it appears it wont work 
-- either. i mostly use this for movies and kids shows so it doesnt matter much for me

-- Some definitions below

-- variable thisTitle - raw title of show ie Seinfeldfrom eyeTV
-- variable ParsTitle - above with illegal filesystem characters removed
-- mcisrunning subroutine to check if markcommercials is running
-- parseout - subroutine to remove illegal filesystem characters
-- CheckMultiplePIDs - subroutine to check if multiple PIDs in one recording
-- variable rec - recordingID from EyeTV
-- variable theRec 
-- variable thisEpisode - text episode name ie The Puerto Rican Day Parade
-- variable EyeTvArchiveLocation location of recordings use colons instead of slashes
-- variable ExportLocation location where converted recordings go
-- variable TempLocation location for temporary files
-- variable fname location of eyetvp file for season and episode info
-- variable sid season number
-- variable eid episode number
-- variable tempEp episode title

global LogMsg

on RecordingDone(recordingID)
        set LogMsg to ""
        -- set up logfile
        -- disable this if you do not want a logfile written
        if (count of LogMsg) > 0 then
                write_to_file((short date string of (current date) & " " & time string of (current date)) & LogMsg & (ASCII character 13), (path to "logs" as string) & "EyeTV scripts.log", true)
        end if
        -- Grab some basics from EyeTV. RecoringID, Show name, Episode name. It'll be used later.
        tell application "EyeTV"
                set rec to recordingID as integer
                set theRec to recording id rec
                set thisTitle to title of theRec
                set ParsTitle to my parseout(thisTitle)
                set thisEpisode to episode of theRec
        end tell
        -- Customize this script for yourself. The next three variables are locations on your system where we will read and export to
        -- Use complete paths, dont put network shares in here
        -- Set this value to the location where EyeTV records to
        set EyeTvArchiveLocation to "Macintosh HD:Users:ted:Documents:EyeTV Archive:" as string
        -- Set this location to where you want your exports to write to
        set ExportLocation to "Macintosh HD:Users:ted:Desktop:Plex:" as string
        -- Set this to a temporary location. A file "temp.plist" is written and then deleted from here
        set TempLocation to "Macintosh HD:Users:ted:" as string
        -- Now we're gonna go to the finder, find the show and grab the file out of the package that has the meta data. It'll be written to a temp file and we'll grab the season and episode # from it.
        tell application "Finder"
                -- Set the alias for the show we just got done recording
                -- This gives the script the filename of the eyetv recording in the filesystem
                if thisEpisode is "" then
                        set fpath to EyeTvArchiveLocation & ParsTitle & ".eyetv" as alias
                        set fpath to EyeTvArchiveLocation & ParsTitle & " - " & thisEpisode & ".eyetv" as alias
                end if
                -- The .eyetv file is a package. We're going to read it's contents and find the .eyetvp file. It'll be stored in the fname variable
                set eyetvp to do shell script "ls -1 " & quoted form of POSIX path of fpath & "/*.eyetvp" as string
                set eyetvp to every paragraph of eyetvp --   paragraph == line
                set fname to item 1 of eyetvp
        end tell
        -- Great! now grab Season number and Episode number out of this temp - eyetvp file and create the sedat variable. This will be used in the file export later.
        -- You can grab more meta data in this routine and also tweak the way the file name meta data is created.
        tell application "System Events"
                set fileRecord to (value of property list file fname)
                set sid to value of property list item "SEASONID" of property list item "epg info" of property list file fname
                set eid to value of property list item "EPISODENUM" of property list item "epg info" of property list file fname
        end tell
        tell application "Finder"
                -- set up directory for a show - ie Seinfeld directory to contain season directories and episode files
                -- if it doesn't exist, create it
                set fileLocation to ExportLocation & ParsTitle
                if not (exists folder fileLocation) then
                        make new folder at alias ExportLocation with properties {name:ParsTitle}
                end if
                -- set up directory for seasons and if it doesn't exist, create one
                set fileLocation to ExportLocation & ParsTitle & ":" & "Season " & sid
                set tempDir to ExportLocation & ParsTitle
                set tempFolder to "Season " & sid
                set tempSid to sid as string
                -- if season id is blank or zero just put shows in the main directory
                if (exists folder fileLocation) is false and tempSid is not "" and tempSid is not "0" then
                        make new folder at alias tempDir with properties {name:tempFolder}
                end if
        end tell
        -- Now, tell EyeTV to set the file name and location and export the file.
        -- TODO: I'd like to have an option to just rename the file in place here and/or export using Turbo.264 and/or export in HD720p format.
        tell application "EyeTV"
                set theDateStamp to (do shell script "date +%Y%m%d.%H%M%S")
                -- tempEp is the episode name
                set tempEp to thisEpisode as string
                if eid is not "" then
                        set tempEid to eid as integer
                        set tempEid to 0 as integer
                end if
                set tempSeason to sid as string
                -- if title, season, and episode numbers are not blank or zero
                -- file will look like Seinfeld:Season 10:Episode 3:Seinfeld S10E3.mp4
                -- mp4 is hardcoded because i'm just sucking out the H.264
                if tempEp is not "" and tempSeason is not "" and tempSeason is not "0" and tempEid is not "0" and tempEid is not "" then
                        set fileName to ExportLocation & ParsTitle & ":Season " & sid & ":" & ParsTitle & " " & "S" & sid & "E" & eid & ".mp4"
                else if tempSeason is not "" and tempSeason is not "0" then
                        --have season number, use Date AND NAME ie no episode number
                        set tempEpDate to (do shell script "date +%m%d%Y") as string
                        set fileName to ExportLocation & ParsTitle & ":Season " & sid & ":" & tempEp & "-" & tempEpDate & ".mp4"
                else if tempEp is not "" then
                        --at this point, should have no season number, no episode number, so just use name
                        set fileName to ExportLocation & ParsTitle & ":" & tempEp & ".mp4"
                        --No name, no season, no episode name just use  date for filename in directory of shows ie Seinfeld:03061999.mp4
                        set tempEpDate to (do shell script "date +%m%d%Y") as string
                        set fileName to ExportLocation & ParsTitle & ":" & tempEpDate & ".mp4"
                end if
                -- change this if you want, I just want the H.264 video
                -- if you're not capturing off of a Hauppauge HD PVR or similar this may make things slower, not faster!!!
                export from theRec to file fileName as "H.264"
        end tell
end RecordingDone

-- one more edit for plex export, only section below.
-- this subroutine isn't called from anywhere that i can tell-- if i remove it, something will certainly break because Applescript is a pain in the butt
on readFile(unixPath)
        set foo to (open for access (unixPath))
        set txt to (read foo for (get eof foo))
        close access foo
        return txtend readFile
-- this will not be called when triggered from EyeTV, but only when the script is run as a stand-alone script-- sets up a loop to run the export with all currently selected shows
on run
        tell application "EyeTV"
                set selectedRecordings to selection of programs window
                repeat with theRecording in selectedRecordings
                        --display dialog "theRecording ID " & (get unique ID of theRecording as integer)
                        set recordingID to unique ID of theRecording as integer
                        my RecordingDone(recordingID)
                end repeat
        end tellend run

on CheckMultiplePIDs(recordingID)
        --check if there are multiple Video PIDs in the file
        tell application "EyeTV"
                set input_text to my read_from_file((path to "logs" as string) & "ETVComskip" & ":" & recordingID & "_comskip.log")
                if (count of (input_text as string)) > 0 then
                        set logdata to every paragraph of input_text
                        set logdata_lastrow to (item ((count of logdata) - 1) of logdata) as string
                        if (items 1 thru 19 of logdata_lastrow) as string = "Video PID not found" then
                                --multiple Video PIDs, rerun MarkCommercials until successful
                                set recrdingIDInteger to recordingID as integer
                                set rec to recording id recrdingIDInteger
                                set LogMsg to "RecordingDone found multiple PIDs for recording ID: " & recordingID & ", Channel " & (channel number of rec) & " - " & (title of rec)
                                set PIDs to (items 44 thru ((count of logdata_lastrow) - 2) of logdata_lastrow) as string
                                set delims to AppleScript's text item delimiters
                                set AppleScript's text item delimiters to ", "
                                set PID_List to {}
                                set PID_List to every word of PIDs
                                set AppleScript's text item delimiters to delims
                                repeat with pid in PID_List
                                        my launchComSkip(recordingID, pid)
                                        repeat while (my mcIsRunning())
                                                delay 5
                                        end repeat
                                end repeat
                        end if
                end if
        end tell
end CheckMultiplePIDs

-- read, write - self explanatory
on read_from_file(target_file)
        --return the contents of the given file
        set fileRef to (open for access (target_file))
        set txt to (read fileRef for (get eof fileRef) as «class utf8»)
        close access fileRef
        return txt
end read_from_file

on write_to_file(this_data, target_file, append_data)
                set the target_file to the target_file as string
                set the open_target_file to open for access file target_file with write permission
                if append_data is false then set eof of the open_target_file to 0
                write this_data to the open_target_file starting at eof
                close access the open_target_file
                return true
        on error
                        close access file target_file
                end try
                return false
        end try
end write_to_file

-- runs comskip on shows
on launchComSkip(recID, pid)
        if pid = "" then
                set cmd to "'/Library/Application Support/ETVComskip/' --force --log " & recID & " &> /dev/null &"
                set cmd to "'/Library/Application Support/ETVComskip/' --force --log " & recID & " --pid=" & pid & " &> /dev/null &"
        end if
        do shell script cmd
end launchComSkip

--is markcommercials running?
on mcIsRunning()
        set processPaths to do shell script "ps -xww | awk -F/ 'NF >2' | awk -F/ '{print $NF}' | awk -F '-' '{print $1}' "
        return (processPaths contains "MarkCommercials")
end mcIsRunning

--Subroutine to remove troublesome characters
to parseout(stringtoparse)
        set illegals to (ASCII character of 60) & (ASCII character of 62) & (ASCII character of 58) & (ASCII character of 34) & (ASCII character of 47) & (ASCII character of 92) & (ASCII character of 124)
        repeat with i from 1 to count (illegals)
                set testletter to (text i thru i of illegals)
                set the_offset to 1
                        set the_offset to offset of testletter in stringtoparse
                        if the_offset > 0 then
                                set stringtoparse to (text 1 thru (the_offset - 1) of stringtoparse) & "_" & (text (the_offset + 1) thru -1 of stringtoparse)
                                exit repeat
                        end if
                end repeat
        end repeat
        return stringtoparse
end parseout

Sunday, February 3, 2013

Saturday, February 2, 2013

The problem with the internet = the great thing about the internet

All good FF mile deals are doomed to die:

US News reports on buying reload cards then
Lifehacker gets in on the action then
the deal dies (or is dying) according to this thread over on FlyerTalk.

The problem with the internet = the great thing about the internet. Rules are exploited widely, loopholes are revealed, and information is shared. You just have to get in on the action before everyone else figures it out.

I already officially hate Lifehacker, if they run a story about "Spook and Owl" I might have to release my aggression on them - which in internet terms means calling them sh1h3ads and other angry epithets.

For the record, I think I only exploited this deal for about 40k Chase UR points.

And in unrelated news, the hackintosh is still running great.

Sunday, January 20, 2013

Hackintosh update

Running well 24/7. A few episodes of Finder freezing up and not properly responding to a restart (of the Finder).

Running a VirtualBox VM with XP (TinyXP with a license I own) all the time too.

Reasonable loads - Plex, Emit, iTunes, Sickbear and Couch Potato.

Running 10.8.2.

So far, so good.

Wednesday, January 9, 2013

Finally some Hackintosh success...

A year or so ago, I had a blog post entitled "Hackintosh Isn't Worth It" or some-such  Mostly expressing my frustration with the whole bag of poo that was OSX86.

Recently I had turned my attention back as my NAS lacks CPU power to run Plex and Sickbeard and Couchpotato (which brings up another rant about why in the hell are they putting those CPUs into NAS's with pre-installed software that requires much more power...)

My current Synology DS411J (which I love, BTW) wasn't cutting it for more sophisticated stuff.

So, following advice of Lifehacker, despite the fact that I hate them I got the following:
  • Gigabyte GA-B75M-D3P
  • Sandisk 120GB SSD
  • Corsair Vengence RAM - 16GB
  • some piece of crap plastic Corsair case somebody recommended
  • Intel i7-3770 (hat tip to my brother-in-law for employee discount)
Put it all together. Unibeast was pretty smooth, followed guides here, but had to boot safe mode a couple times - this was all with 10.8.2.

Also, HAD TO MAKE SURE VT-d was disabled in BIOS!!!

That's not in the guides.

Screen porn one, I'm downloading Ubuntu to run as a VM in Virtualbox. Unfortunately it isn't going to work as well as it could, because I have to turn off VT-d (see above).

And screen porn two.

Really went off without a hitch (to my surprise). Let's see how it goes running 24/7.

Sunday, January 6, 2013

Delta's new website

Wants to make me pull my hair out.
It appears to systematically make it impossible to apply ecredits/vouchers to ticket purchases.
It incorrectly charges Medallions for economy comfort ($0 instead of 50% off) - not going to complain much about that, though.
It's slow as hell.