May 16, 2016

Kent Rosenkoetter: Beware the bison!

And in today’s “You sweet, sweet dumb-ass” story, a father and son visiting Yellowstone put a bison calf in their SUV and drove it to a ranger station because they thought the calf was freezing to death.

I admire the duo for their compassion, but I call them morons for not understanding how well bison hide and fur insulates, and for thinking that separating a calf from its mother is a good idea. I'm also a tad surprised the mother did not destroy the SUV. Next time, just try to bring a ranger with you to the calf.

Here is the Fark thread.

posted at 07:31 AM.

May 15, 2016

Kent Rosenkoetter: Oracle v. Google

The copyright case being waged between Oracle and Google right now is possibly the most critical court case to affect general-purpose computation that has ever happened. It cuts to the core aspect of software. Basically, can you use copyright law in order to apply patent-level prohibitions on what computations other people can perform.

The question is so fundamental that trying to explain its importance is like trying to explain the importance of clean air to breathe. Without it, everything stops. However, right now the case is being heard and tried by people who apparently do not understand what makes mammals function.

I have come up with a much better analogy to what an API is than the lame examples used in the article and apparently in the courtroom. A programming language is a language. It defines how we articulate thought and reason. An API is a lexicon, a vocabulary. A lexicon is not the language, but a language is useless without a lexicon. Expressions in a language are composed of invocations of the lexicon.

A lexicon cannot be restricted by copyright. It creates the semantic meaning that language is there to communicate. If people are restricted from using the lexicon, the language might as well not exist, its entire purpose is rendered void.

If Oracle prevails, then essentially the courts are saying that a company can prohibit others from using words from their lexicon. Note that this is not like a dictionary. A dictionary provides definitions for a lexicon, but it is not the lexicon itself. Many people can write dictionaries. These dictionaries will be different. But they will be very similar, because they are expressing the semantics of the lexicon. A dictionary can be covered by copyright. But the vocabulary itself cannot be. Any other person can come along and write their own dictionary that offers definitions of all the words in the vocabulary, and Merriam-Webster can do nothing to stop them. Anybody can come along and invoke the words from a dictionary, and there is nothing Merriam-Webster can do to stop them.

This is how fundamental the question of copyright applying to APIs really is. How insanely convoluted would communication be if languages were never allowed to inherit or appropriate words from other languages? What if every country that shared a language had to invent its own vocabulary completely different from every other country's vocabulary? The idea is laughable on its face.

Nevertheless, right now that very question is being decided in a courtroom, and it is going to be decided by people who do not understand what the word lexicon even means. And people who do not want to know, who denigrate the very idea that they should be cognizant of the concept.

(The saddest part of this for me is that I hate what Google did with Android and the Android RunTime. I think it was a despicable, slimy thing for them to do, and if not for that then Sun might very well still exist today. Despite all that, the case Oracle brought threatens to destroy the entire industry as collateral damage, and that is not an acceptable cost. Please consider that every other industry on Earth now depends on computing in some way. Do you really want to go back to a time when banks employed thousands of people to do interest calculations instead of having a machine to do it automatically? A world where no factories are automated and every single stitch of clothing, every morsel of food, every inch of metal or fiber is fashioned by a human hand? I sure as hell do not.)

(While I personally would not shed a tear if the stock market went back to paper-only, the world financial systems would collapse without the constant churn of high-frequency trading, according to bankers and economists.)

posted at 09:34 AM.

April 30, 2016

rhit tag @ flickr: RHIT_West_Side_Story_Cast-25492

Hatfield Hall posted a photo:



posted at 04:33 PM.

rhit tag @ flickr: RHIT_West_Side_Story_Crew-25504

Hatfield Hall posted a photo:



posted at 04:33 PM.

April 26, 2016

Edward O'Connor: Updating Our Prefixing Policy

When implementing new features for the Web, it’s important for us to be able to get them into the hands of developers early, so they can give new things a try. (Of course, this also helps us identify and fix bugs!) In the past, browsers did this by using vendor-prefixed names for features. This was intended to protect the Web from the churn of spec and implementation changes. Browsers would eventually implement the standard version with no prefix and drop support for the prefixed version.

Over time this strategy has turned out not to work so well. Many websites came to depend on prefixed properties. They often used every prefixed variant of a feature, which makes CSS less maintainable and JavaScript programs trickier to write. Sites frequently used just the prefixed version of a feature, which made it hard for browsers to drop support for the prefixed variant when adding support for the unprefixed, standard version. Ultimately, browsers felt pressured by compatibility concerns to implement each other’s prefixes.

The current consensus among browser implementors is that, on the whole, prefixed properties have hurt more than they’ve helped. So, WebKit’s new policy is to implement experimental features unprefixed, behind a runtime flag. Runtime flags allow us to continue to get experimental features into developers’ hands while avoiding the various problems vendor prefixes had. Runtime flags also make it easier for us to have different default settings between stable builds and preview builds such as Safari Technology Preview.

We’ll be applying our updated policy to new feature work going forward. Whether or not a runtime flag should be on or off on WebKit trunk (and thus in nightly builds) depends on the maturity of the feature, both in terms of its spec stability and implementation maturity.

What does this mean for Web developers?

Initially, developers shouldn’t notice anything different. In the longer term we hope this change will make it easier for you to try out upcoming features. As always, we encourage you to give in-progress features a try. Feedback and bug reports on experimental features are very welcome.

What about currently prefixed features?

We’ll be evaluating existing features on a case-by-case basis. We expect to significantly reduce the number of prefixed properties supported over time but Web compatibility will require us to keep around prefixed versions of some features.

We invite comments and feedback on the new policy from Web developers, educators, and our colleagues working on other browser engines. Feel free to reach out to me on Twitter (@hober), Jon Davis (@jonathandavis), @webkit, or email me directly at

posted at 01:54 PM.

February 02, 2016

Garrett Mace: Clearance Sale!

Come on down to Crazy Garrett's, the boss is away and the deals are government agents trying to control my mind! Ahem. Well, the deals are real enough...up to 60% off on some products.

The main reason for the sale is that we have some extra inventory of A6281-based products. Back when we started this business in 2008, there weren't many options for controllable RGB pixels...hard to believe today, but a $5 chainable RGB pixel with PWM was a pretty good deal back then. Times have changed, and the A6821 chip has been discontinued by Allegro. So we've decided to move this last batch of inventory out the door where it'll do some RGB blinky good rather than keeping our stock shelves from floating away.

In addition to the ShiftBrite and MegaBrite products, we're also discounting the OctoBrite DEFILIPPI even though the TLC5947 is still available. It's a good chip that can handle up to 30V strings of LEDs with 12bit PWM, but aside from special applications it seems that 5V and 8 bits are blinky enough. We're also discounting all of our 6-pin cables! These are made for ShiftBrites, but are just 6x1 0.1" female header cables...they are pretty useful for many tasks around the lab.

 Read more»

posted at 09:08 PM.

January 18, 2016

Garrett Mace: Audio Sensor Development Part 3: Theory Meets Reality

This article continues the development of an audio sensor device for the RGB Shades and LED Matrix Shades, starting with microphone calculations in Part 1.

We’re developing an add-on board to make the RGB Shades and LED Matrix Shades dance to music! Biggest news of this article is that you can try this out for yourself…we had a lot of extra prototype PCBs and hand-assembled a big batch. While the design needs some tweaking, by popular demand we put a bunch of the prototype version in the store. If you try it out, we’d love to hear your feedback!

In Part 2, the prototype device was constructed and tested. The initial tests were done without LEDs attached, and with high-level sound input at the microphone datasheet’s test frequency. This showed that the results agreed quite well with the design predictions, but that only gives an idea of how it will perform in the real application.

With the RGB Shades fully assembled and displaying some sound reactive patterns, there were some initial disappointments. The most noticeable problem was that the sound reactive patterns would sometimes react to themselves…patterns with a lot of bright LEDs would appear to feed back and generate even more input to the analog circuit. This would swamp out any incoming audio and reduce the usability of the system.

 Read more»

posted at 08:20 AM.

November 09, 2015

Dave Heigl: Kid thing

Today I brought home a used kid thing, put it together, cut it up some, then reinforced it elsewhere. Hopefully it will be a fun play spot through the cold months.


posted at 06:39 AM.

October 12, 2015

Dave Heigl: Deck, part 3

The deck is done except for sealing it. Need to figured out when that should be done.


posted at 12:52 PM.

February 01, 2015

John Pederson: Destiny and Its Discontents

Destiny's big problem is that it's design doc probably reads like "what if we bolted Halo's FPS to a vanilla WoW-like theme part MMO and made lots of money?" This would be a minor variation on the "What if we made a WoW?" thing that was circulating through the games industry a while back. I had thought the last gasp of this idea was ESO, but further reflection suggests it's actually Destiny.

I think Bungie underestimated the amount of content this really required, probably suffered some internal and external political (corporate politics, not federal politics) pressures that made a dysfunctional hash of the story content, and attempted to streamline a progression model that is practically death to a meaningful endgame experience (in this, I think they were successful, but it exaggerates the problems that already went with this design). I'm not sure to what degree the loot and progression system are aimed at extending the paltry content offering vs. being a result of Bungie misunderstanding the sort of game they'd built. It doesn't really matter.

There's some rumors spinning around their forum at the moment that the next expansion will break progression, again, in a way that will favor the raiders over regular PvE shlubs. That's probably good news for me: it'll be a good excuse to give up on this train wreck, if I haven't, already.

posted at 12:00 AM.

John Pederson: Happy Groundhog Day

The latter half of last year was long and often both bleak and unpleasant.

So, we'll say no more about it.

posted at 12:00 AM.

December 30, 2014

Nathan Froyd: ironclad's history

Like a lot of Common Lisp packages that I've written, Ironclad was inspired by somebody else. The following is my recollection of the history of Ironclad.

In one of the perennial debates on comp.lang.lisp about whether Common Lisp was a decent large for writing high-performance code, Pierre R. Mai posted an implementation of MD5 written for CMUCL that was at least competitive with implementations written in C. (This was over a decade ago and MD5 was still on the cusp of being secure.) Hash algorithms were one place where people thought Common Lisp couldn't compete with C—the requirements for efficient, unboxed arithmetic were thought to be beyond the reach of Common Lisp implementations.

Given the close history of SBCL and CMUCL, Pierre's implementation was quickly made available as an addon in SBCL's contrib/ directory. Intrepid SBCL hackers Christophe Rhodes and Alexey Dejneka also figured out how to compile portable Common Lisp implementations of modulo-2^32 arithmetic into efficient machine code. Obviously, the portable implementation wasn't going to be equally efficient on all implementations, but it was a good starting point.

Being in college, and needing something to avoid doing work for my classes, I started writing an implementation of SHA-1 that could be added as a contrib to SBCL. It was rejected, for reasons that I can't recall, but seemed reasonable at the time. However, it also set me to thinking: it would be silly to have separate MD5, SHA-1, SHA-2, SHA-512, etc. packages; it would be difficult to swap out implementations if you needed to, and each package was likely to have slightly different naming conventions, calling conventions, etc. etc. What you really wanted was a common interface for all of them.

And thus was the first release of Ironclad conceived.

I will not detail here the exact path by which bits were added to Ironclad. Hash algorithms came first, and then the big names in encryption algorithms; the AES competition was taking place around this time, so I added a few of the promising candidates from that competition. Basic, functional, insecure versions of RSA were added. There wasn't any grand plan to what algorithms were chosen: anytime I felt that my studies were too tedious is when something tended to be added to Ironclad.

Various refactorings took place along the way. The encryption algorithms and encryption modes had been implemented with macros masquerading as C++ templates and as such, took quite a long time to compile when changes were made. Changing them to better utilize generic function dispatch improved compilation and load time while maintaining performance. I distinctly remember getting frustrated when several bugs were reported in hash algorithms and having to change several different copies of code multiple times. I had cut-and-pasted code because I wasn't convinced that proper refactorings could provide the same performance, but the maintenance burden convinced me to do some benchmarking, and it turned out I had been wrong.

The best refactoring took place when I was writing non-Ironclad code and realized that I would really like to read and write integers of different endiannesses. Ironclad had this capability, of course, but it seemed silly to pull all of Ironclad in for this one bit of functionality. Thus was nibbles split out as a separate library, and slowly it gained its own set of improvements (inline assembly for SBCL, for instance), which in turn improved Ironclad as well.

I work significantly less on Ironclad than I used to. I still try to answer questions and investigate bug reports filed on Github, and an occasional week of nights spent hacking will produce something useful. But personal factors (e.g. no longer being in college) have lessened my motivation to write Ironclad particularly and Common Lisp generally.

There have also been numerous changes in the cryptographic landscape over Ironclad's lifetime. Increasing emphasis has been placed on not merely having secure algorithms, but implementing them in a secure way. Ironclad blatantly ignores much of the received wisdom about implementing algorithms securely, and a thorough audit would turn up many rookie mistakes. (See, for instance, the list of best practices at Not to mention that some of the techniques for implementing algorithms securely would be well-nigh impossible to implement in portable Common Lisp (bit-masking of raw pointer values comes to mind). I don't have any good solutions to this problem in general; I suppose you could write appropriately unportable code for those implementations that expose the necessary bits, and provide wrappers to known-good crypto implementations in C. But half the fun of Ironclad was doing all of this in Common Lisp, rather than writing FFI code.

The public-key algorithm implementations are particularly bad; improving those would be a lot of work. All the cryptographic tricks alluded to above are likely required, and then there's also things like writing your own bignum library, since implementations's bignums were likely not written with cryptographic applications in mind. I simply do not have the inclination to track down all the relevant standards (for padding messages and the like), academic papers (for telling you how not to do things), and reading other crypto implementations (for showing you how things might be done properly, if you can puzzle out the why from the lack of comments) to do the requisite work.

However, it is clear that Ironclad has been useful despite its many flaws in this area; the patches and the well-wishes I have received over the years are abundant evidence of this. If people wanted to improve Ironclad, the following suggestions may prove useful:

  • Given the increased importance of implementing algorithms in a secure way, a number of chip manufacturers are starting to provide instructions for doing various stages of cryptographic algorithms. Ironclad could usefully take advantage of all of these.
  • Ironclad still has no implementations of any of the SHA-3 candidates, let alone the winner. These would be useful to add, perhaps along with improvements that people have made to the algorithms since then.
  • Ironclad is probably too big; the compilation time and load time still depress me, even though my machine is an order of magnitude or so faster than it was when I started development. People have made suggestions in this direction before; now seems like a good time to start listening to them. Perhaps recent improvements to quicklisp and/or ASDF have made the dependency problems less of a problem.
  • Along the same lines, the insecure and/or less-used algorithms can and should be split out into their own libraries, or even removed entirely.
  • Performance improvements can always be made, both in general algorithm performance, and for specific implementations. nibbles could stand some more performance improvements for non-SBCL implementations.
  • Ironclad needs a good way of accessing the platform's cryptographically-secure pseudo-random number generator.
  • Any improvements to the public-key algorithms would be most welcome.
  • Support for authenticated encryption in some form would be good, given that the state-of-the-art (as far as I am aware) seems to be moving in this direction. I think adding this might require a completely different interface than the usual block and stream encryption algorithms currently supported.

posted at 12:32 AM.

September 06, 2014

Nathan Froyd: financial regulation

Several days later he'd worked his way back the late 1800s. The entire history of Wall Street was the story of scandals, it now seemed to him, linked together tail to trunk like circus elephants. Every systemic market injustice arose from some loophole in a regulation created to correct some prior injustice. “No matter what the regulators did, some other intermediary found a way to react, so there would be another form of front-running,” he said. When he was done in the Staten Isalnd library he returned to work, as if there was nothing unusual at all about the product manager having turned himself into a private eye. He'd learned several important things, he told his colleagues. First, there was nothing new about the behavior they were at war with: The U.S. financial markets had always been either corrupt or about to be corrupted. Second, there was zero chance that the problem would be solved by financial regulators; or, rather, the regulators might solve the narrow problem of front-running in the stock market by high-frequency traders, but whatever they did to solve the problem would create yet another opportunity for financial intermediaries to make money at the expense of investors.

—from Flash Boys: A Wall Street Revolt by Michael Lewis.

posted at 12:59 PM.

July 07, 2013

Colin Hill: Life Update

Who’s got two thumbs and got engaged yesterday? This guy.

posted at 12:30 PM.

March 13, 2013

Edward O'Connor: Herodotus on standards work

It is also their general practice to deliberate upon affairs of weight when they are drunk; and then on the morrow, when they are sober, the decision to which they came the night before is put before them by the master of the house in which it was made; and if it is then approved of, they act on it; if not, they set it aside. Sometimes, however, they are sober at their first deliberation, but in this case they always reconsider the matter under the influence of wine.

Book 1 of the History of Herodotus

posted at 10:46 PM.

December 26, 2012

Robin: My Favorite Ways to Clean Up a Windows Computer

My computers all have huge hard drives and large amounts of RAM, but that doesn't mean they can hold everything and do everything and still run smoothly.  Computers, Windows computers at least, run better and are much happier the less stuff they have on them.  Here are my favorite ways to clean up my computers and improve performance and security:

1) Delete old restore points.  This isn't obviously presented as an option and isn't possible unless you've got administrator privileges. But it can reclaim a lot of hard drive space.  Restore points build up each time Windows Update installs or updates anything on your computer.  I haven't found an option that auto-cleans them up, so here is the method for manual deletion.  These instructions are for Windows 7, but there is something very similar in Windows Vista and even Windows XP Professional.

A) Open a Windows Explorer window (windows key + E) and select your computer in the left pane, so that the hard drives are visible in the right pane.  For fun, make note of the free space on your hard drive.

B) Select the main hard drive, right mouse button, and select properties.  In the window that pops up, find the button that says Disk Cleanup and click that.

C) Even if you are logged in as an Administrator, you need to do this step.  On the new window that pops up, find the button that says "Clean up system files" and click that.  If you aren't logged in as an administrator, you have to give administrator permissions to do this.

D) Windows recalculates things, and pops up that same window as before, but this time there is another tab to choose from.  Go to the More Options tab.  Find the "System Restore and Shadow Copies" section, and click the button that says "Clean up..."

E) Yes, you are sure.  Click Delete.  (That doesn't actually do the deletion, it just sets the option that you WANT to do the deletion.)  Back at the window, go back to the main Disk Cleanup tab.  Review the options in the list and make sure you agree with the other checked items.  Then click OK.  Yes you are sure.  Click Delete Files.  Now you can close out of the properties dialog box and Refresh the view in Windows Explorer to see how much space you have regained.

2) Don't put an office suite on your computer.  This makes the most sense for laptops with smaller SSD hard drives and computers that are mainly used for entertainment instead of work.  Instead, use a free web-based office suite.  The Google Docs suite has been an option for a while, but now even nicely functional versions of Microsoft Office products are available.  I wouldn't recommend this for a business computer, or if you always need the ability to open a spreadsheet even if the internet is down.  But it saves a lot of space and hassle with updates if none of this lives on your computer.

* Microsoft Office with Sky Drive.  This was a pleasant surprise to find online.  You sign up for an account and get 7 GB of free cloud storage to use with online versions of Word, Excel, PowerPoint, or OneNote.

3) Delete programs and plugins without mercy.  Update everything else.  Go into Add/Remove programs, and start going down the list.  If you don't use a program, uninstall it.  If you do use a program, open it and check for updates - usually this is in the Help/About menu or screen.  Uninstall all the versions of Java you see in the list, and reinstall just the freshest version from their website.  Uninstall all the browser toolbars, all the partially functional software that came with the DVD drive, and all of the virus scanning and security software that isn't Microsoft Security Essentials.  Do get MSE if you don't have it.  It is free, unobtrusive, and has worked well for everyone I know who uses it.

4) The outside of the computer can be cleaned, too.  A slightly damp microfiber towel works very well to scrub grime off of mice, controllers, and laptop surfaces.  Dry microfiber cloths will remove dust.  Start with clean cloths and don't press down to avoid scratching displays.  I have used the CyberClean product, and find it helps most on standard keyboards because it gets between the keys. 
Just noticing your computer is sticky or discolored and doing something about it can make a huge difference in how new it seems.

Finally, resolve to keep your software up to date and set up an online backup service.  I paid for CrashPlan+ service, which I consider a bargain - only $139 for four years of unlimited backup from one computer.  That is cheaper than one external hard drive, which in my experience will either fail or run out of space in less than four years.  Sorry if most of this post is obvious or things you already knew, I hope it helps a few people with maintaining their computers.

posted at 07:05 PM.

Robin: Sinusoidal Scarf

This is an easy pattern for a knitted scarf.  I made it up to practice knit and purl stitches, to build up speed and work on keeping an even gauge as I go.  It is supposed to be wavy when finished, resembling the shape of a sinusoid curve.  This is done simply by alternating garter stitch sections, which lay flat, with stockinette stitch sections, which tend to curl towards the knit side.  I alternate the side the stockinette faces to form the max and min points.  So, this is a very nerdy project.

(Any yarn and needle size can be used, gauge is not important, adjust stitch count for the width of scarf you want.)

Yarn: St. Denis Nordique, 100% wool, 50g per 150 yards, 2 to 3 balls, blue eggshell

Gauge: 19 stitches for 4 inches

Needle: US 8 or 5.00mm

Cast on 30 stitches.

Rows 1-4: knit all stitches.
Row 5: purl all stitches.
Row 6: knit all stitches.
Row 7: purl all stitches.
Rows 8-13: knit all stitches.
Repeat rows 5 through 13 until scarf is desired length.  Bind off.




posted at 06:05 PM.

September 19, 2011

Sarah Nelson: Delux!

posted at 04:13 AM.

Sarah Nelson: the master gardener

posted at 02:27 AM.

January 09, 2011

Colin Hill: Range Report

So yesterday I took my NRA basic pistol course and at the range finally got to break out my brand new Kimber 1911. I ran 195 rounds through it with only a couple of minor feed problems. My accuracy needs work, but I feel reasonably good given the fact that it was my first time [...]

posted at 07:47 PM.

November 02, 2010

L. Burke: No subject.

Every once in a while I think, "Hey, I should start blogging again."

And then I think, "Nah."

posted at 01:07 AM.

September 13, 2010

Matt Burke: Parental enlightenment

"... if your children ask for a loaf of bread, do you give them a stone instead?" (Matthew 7:9, NLT)

Since I became a parent, I've had this verse floating in my head as something like "If your child asked for food, would you refuse him?" I took that a bit as a challenge, and tried to be accommodating. When my son asks for food, I try to get it for him.

However, this has its limits. For a while, at bedtime, he would ask for food. I could ask if he was hungry and wanted food, then ten minutes later say it was time for bed, and he'd ask for food. As this game became more obvious, more limits were defined, usually in the form of a timer.

So, having been a parent for almost four years, I would answer Jesus's rhetorical question now with, "Of course not. I might not always give him the food he's asking for, but it would be very cruel to give him a stone. Sometimes he gets bread, and sometimes he gets nothing."

posted at 06:37 PM.

August 20, 2010

Logan Bowers: I reply to the Internet

Some guy named John Cook begged the question! On the Internet!

I, of course, did my civic duty. I commented.

You are begging the question by defining “minimalism” as necessarily thoughtless. So, of course, minimalists are!

As you mentioned in the comments, “minimal” is a superlative meaning (roughly) “no less of X is possible.” You appear to define ‘X’ as “things necessary for life without conforming to required social norms.” But your more-minimalist-than-thou minimalists could just as easily have a different definition, e.g., their statement could be “Buy my book. I have only 39 things, while still maintaining appropriate social relationships with my friends!”

Indeed, it is good you did not link to the man in question because context because or facts could undermine your point; your hypothetical man, by definition, does give you things you want in exchange for the hypothetical things he needs from you. With context, he could have been a brilliant mathematician who trades knowledge, co-authorship, and bragging rights for a warm place to sleep. I'd take that over 4 eggs and a cup of flour any day.

Then again, maybe he’s just douché. I guess it depends on the minimalist instead of the minimalism.

posted at 01:19 AM.

July 30, 2010

Ryan Johnson: Convert 720p/ac3 mkv to 720p/aac iPad-compatible mp4/m4v on Mac OS X Snow Leopard

# Video is not transcoded, just demuxed/muxed
# Audio is downmixed to stereo with DRC 
# You need these tools:
# * mkvextract (to demux the Matroska file)
#   *
#   * Just install through MacPorts, it doesn't pull in anything annoying
# * a52dec (to decompress and downmix the ac3)
#   *
#   * Compile from source
# * faac (to recompress the audio to mp4a/aac)
#   *
#   * Compile from source
# * MP4Box (to remux into MPEG-4 container) 
#   *
#   * Pre-compiled standalone OS X executable

mkvextract tracks ${BASE}.mkv 1:${BASE}.ac3 2:${BASE}.264
a52dec -o wav ${BASE}.ac3 > ${BASE}.wav
faac -b 96 --mpeg-vers 4 -o ${BASE}.aac ${BASE}.wav
MP4Box -add ${BASE}.264:fps=23.976 -add ${BASE}.aac ${BASE}.m4v
rm ${BASE}.{264,ac3,wav,aac}
Update: Here's a gist of an mkv2m4v script that automates the process:

posted at 03:47 AM.

July 06, 2010

Logan Bowers: Economic quiz for the day

Suppose you own and operate a Jimmy Johns franchise. You normally have two counters producing sandwiches, but since the 2008 recession you've been getting fewer customers, so you laid off half your staff and only operate one counter. The other one sits idle and unused.

Given that you already meet the reduced demand for lunches, what will motivate you to rehire your staff and open the second counter?
(a) A sack full of cash
(b) A loan from the bank
(c) Less government spending
(d) More customers

Bonus question: The sandwich counter manufacturer wants to sell you another counter, which of the above will cause you to buy a THIRD counter?

This is the mental exercise you should do whenever you hear a politician talk about tax breaks vs. stimulus spending. Tax breaks are (a), stimulus spending is (d).

posted at 05:55 PM.

June 11, 2010

Dave Imler: Nerding Right Along

Software Nerd
So, in the past two weeks I’ve kicked out a prototype web site for a theatre I work with: The Improv Shop , which is a great place for those who are interested in long form story based improvisation. The theatre owner wanted something minimal, which was great for me, since I don’t really relish doing art much.

So, now, of course, I’m taking the static file template and redoing it in as a full fledged CMS in django, as my, “Dave teaches himself Django” project.

Improv Nerd

Last weekend was spent making a film for the STL 48 hour Film Festival.   It showed last night, and will show again at the Tuesday ‘best of’ showcase. Which is so wonderful.

I was lucky enough to work with Clinic Improv, and act, film, light in that one.  Rhiannon busted out her violin to provide depressing Eastern European riffs for our ‘foreign film’. I’ll post that one as soon as the festival’s publishing embargo is lifted.

posted at 06:38 PM.

May 14, 2010

Dave Imler: A Relaxed Moment

I’m working in the home office, snacking on coffee and stuff from the local coffee shop, listening to Cake and Mc Frontalot. Rhiannon is taking a half day. We had kolaches together for lunch. Now she’s napping on the couch with a DVD of Daria playing in the background. The screen door is open, and the house smells like gentle rain.

I didn’t have to comb my hair today.

posted at 08:50 PM.

March 05, 2010

Matt Burke: "Biotechnology" == evil

Now that he's not at Microsoft, I generally find myself more tolerant of Bill Gates. I think it's awesome that he's throwing himself (and his fortune) into solving some big problems. I might not totally agree with it all, but it's certainly more noble than his previous occupation.

That said, I really really wish I could convince him that biotechnology (specifically, genetically engineered food) is not the answer to modern or future food supply issues. It's not his main deal, but I was reminded of his views by his article about a new farming book.

My thoughts on this subject have gone from almost complete ignorance a couple years ago, to vague malaise a couple months ago, to downright disgust with biotechnology in farming (read: GE crops). Granted, much of my education has been from biased sources, but I think I still have some fairly reasonable reasoning. And I'm not ragging on other kinds of biotech -- there is clearly a lot of good that it can do. But I am very opposed to GE food, for two basic reasons. The first is the way it is treated from an intellectual property perspective. The second is its lack of benefit when compared to its known and unknown risks.

The problem with GE intellectual property is this: when you put an unnatural gene into an organism, you can patent it. Not just the process, but the actual seed, the organism. This means that every plant with that gene belongs to the patent-holder. Farmers are criminals if they save seed. Compare this to conventional breeding: when I make a better variety of some plant, you can keep the seed. This change in options for the farmer results in a change in the formula for pricing the seed. If the farmer has the option of saving seed, the breeder has to keep the price low enough that it makes more sense to buy seed than to save it. If the farmer doesn't have the option to save seed, the breeder just has to keep the price low enough that the farmer still farms. This exact thing has happened: seed corn is somewhere around 400% of its price 20 years ago. Compare that to the CPI, currently about 200% of its value 25 years ago. So, if I make a GE seed, I can gouge you. And if I make the best conventionally-bred variety and then stick in a gene that you don't really care about, then I can gouge you some more.

The other problem with GE crops is the lack of benefits when compared to problems. The promise is this: higher yields, drought-resistance, pest-resistance, herbicide-tolerance. Compared to conventional breeding, GE fails to produce higher yields. GE has not produced a drought-resistant crop. GE achieved pest-resistance by making plants produce a toxin. Granted it's a "safe for humans" toxin. At least, it is when used in moderation and given a certain amount of time to wash off. However, the toxin is produced by plants at a rate 2-40 times higher than the toxin would have been applied by farmers, according to one estimate I heard. And every cell of the plant is producing the toxin: there is no "wash it off". Herbicide tolerance encourages the use of more herbicides. And that's the mostly-known effects of planting GE crops. GE seed is notoriously closed to scientific scrutiny.

So, that's my rant. I could go on and on, but that's enough for now.

posted at 03:40 PM.

December 11, 2009

Scott Tomlinson: Time,

I've started writing 2010 on things. In my mind it's still June. I think I just lost 6 months. How odd.

posted at 07:08 PM.

October 18, 2009

Herb Mann: The Puffin Perch

Renaming A Dead Horse

I decided that the previous name of this blog was becoming unseemly, so it is now “The Puffin Perch”.  Maybe I’ll finish some of those drafted posts now that I won’t be embarrassed to have people find them.  But no promises!

posted at 05:21 AM.

October 13, 2009

Dan Moore: Weighing myself in THE FUTURE

Why am I posting about a bathroom scale? Because this thing is probably the slickest, most polished gadget I've ever used.

Yes, I bought the Withings Wi-Fi Scale. If you're connected to me via any social networks or meet me in person, you've probably heard me drone on and on about my recent weight loss. But keeping track of that with pen and paper, or even an iPhone app as I had been for a while is so early-to-mid-2009. Now, I have a bathroom scale that connects to my wireless network at home and updates a private Web site and iPhone application. It measures not only weight, but also fat percentage by measuring impedance in one's feet (though I wonder how accurate that is).

What makes it so slick? Withings seems to have gotten everything right from the start. I've been using their iPhone app to manually track weight for a while, and after setting up the scale, bam - the scale displayed my name (taken from the website/iPhone app) on its screen, uploaded the data, and seconds later I had a push notification (badge) to my iPhone indicating there were new measurements to view. The new measurements uploaded from the scale appear just like the ones I was putting in manually, only now with additional information.

Of course, it should be easy to be easy when you're talking about a bathroom scale, but the setup is what could have been really complicated. While the scale does have a screen, it doesn't make sense to integrate a whole input device into the scale so you can configure the wireless networking, which they could have done but would have been really bad. Even worse would have been to do something where pressing on the scale would scroll through letters or something obtuse like that.

What Withings did, which is brilliant, is to let you configure it with an iPhone. To do that, all you do is load up the iPhone app in configuration mode and turn the scale over. There's a little iPhone shaped indentation on the bottom, with a single button below it. When you press the button on the bottom of the scale, it emits a tone and the iPhone and scale communicate audibly like a modem. Then you just configure the scale using a full interface on the iPhone. There's also a USB cable included that connects to an equally slick Mac or Windows application to configure it. Both processes work as easily as I could possibly imagine. I think that in addition to my name that it also pulls some other info from the website, but I need to play with it a bit more to make sure.

When I said "polished" up above, I meant cosmetically as well as functionally. It is an awfully good looking scale. The display is bright and easy to read. By looking at the photos on their website you can tell they spent some time on design, and it looks even better in person.

The iPhone app and Web interface to view the data is still a little clunky to me, but I'm pretty picky about software and besides, that can always be upgraded later. They got the hardware and integration parts down flawlessly and that's what counts. I'm hoping they come up with a real API to access the data, but for now, you can get a CSV export of all the data recorded through the website.

So, bravo Withings. My only complaint about the hardware is that it doesn't work well on the stupid carpet in my bathroom, even when using the special carpet feet included.

Disclaimer: I've only used the thing for a day, so if you want to buy one you might want to wait and make sure I don't rant about it breaking in a week or something.

posted at 05:42 PM.

October 04, 2009

Ryan Johnson: repos.rb

The RubyCocoa project makes Ruby an incredibly powerful scripting language in Mac OS X.

As an example, here's a script that I used to rearrange windows when switching between various monitors. Based on the width of the main screen (something which I couldn't find a robust way to query outside of the NSScreen Cocoa API), it applies my preferred size and positioning to specific windows I care about. If you run it with '-q', it instead dumps a structure with those windows' current sizes and positions, for feeding back into the script as configuration.


#!/usr/bin/env ruby -w

require 'optparse'
require 'osx/cocoa' #
require 'pp'

options = { :query => false } do |opts|
  opts.banner = 'Usage: repos.rb [options]'
  opts.on( '-q', '--query', 'Query rather than set positioning' ) do |q|
    options[:query] = q

def first_window_of( s ) %Q{the first window of process "#{s}"} end
WindowsOfInterest = {
  :adium_chat     => first_window_of('Adium')   + ' whose name is not "Contacts"',
  :adium_contacts => first_window_of('Adium')   + ' whose name is "Contacts"',
  :firefox        => first_window_of('Firefox') + ' whose name is not "Downloads"',
  :ical           => first_window_of('iCal'),
  :iterm          => first_window_of('iTerm'),
  :itunes         => first_window_of('iTunes'),
  :mail           => first_window_of('Mail'),
  :terminal       => first_window_of('Terminal'),
  :tweetie        => first_window_of('Tweetie') + ' whose name is "Tweetie"',
PropertiesOfInterest = [ :position, :size ]
ConfigurationForWidth = {
  2560 => {
    :adium_chat     => { :position => [2058, 1241], :size => [501, 357]   },
    :adium_contacts => { :position => [2419, 22],   :size => [141, 357]   },
    :firefox        => { :position => [632, 223],   :size => [1459, 1096] },
    :ical           => { :position => [3199, 800],  :size => [640, 715]   },
    :iterm          => { :position => [0, 740],     :size => [786, 860]   },
    :itunes         => { :position => [1080, 22],   :size => [1336, 946]  },
    :mail           => { :position => [0, 22],      :size => [1079, 717]  },
    :terminal       => { :position => [2560, 800],  :size => [641, 795]   },
    :tweetie        => { :position => [2058, 549],  :size => [500, 690]   },
  1920 => {
    :adium_chat     => { :position => [1419, 844],  :size => [501, 357]   },
    :adium_contacts => { :position => [1785, 22],   :size => [135, 319]   },
    :firefox        => { :position => [397, 72],    :size => [1208, 1034] },
    :ical           => { :position => [949, 1203],  :size => [640, 715]   },
    :iterm          => { :position => [0, 355],     :size => [810, 844]   },
    :itunes         => { :position => [494, 22],    :size => [1280, 715]  },
    :mail           => { :position => [0, 22],      :size => [1079, 717]  },
    :terminal       => { :position => [312, 1202],  :size => [641, 723]   },
    :tweetie        => { :position => [1418, 293],  :size => [501, 550]   },

def do_apple_script(s)
  result = OSX::NSAppleScript.alloc.initWithSource(s).executeAndReturnError(nil)

  # Return an array of the values (AppleScript uses 1-based indexing)
  (1..result.numberOfItems).map do |i|
    result.descriptorAtIndex( i ).int32Value

main_display_width = Integer( OSX::NSScreen.mainScreen.frame.width )
window_properties = {}

if options[:query]

  WindowsOfInterest.each do |key,spec|
    window_properties[key] = {}
    PropertiesOfInterest.each do |prop|
      window_properties[key][prop] = do_apple_script(
        %Q{tell application "System Events" to get the #{prop} of #{spec}}

  puts "#{main_display_width} =>"
  pp window_properties


  config = ConfigurationForWidth[main_display_width] or
    raise "No configuration for main display width #{main_display_width}"

  config.each do |window,props|
    props.each do |prop,rubyval|
      value = '{' + rubyval.join(',') + '}'
        %Q{tell application "System Events" to set the #{prop} of #{WindowsOfInterest[window]} to #{value}}

  system %Q{/Users/ryan/bin/emacsclient -e '(rdj-smartsize-frame-for #{main_display_width}))' > /dev/null}


posted at 08:55 PM.

September 29, 2009

Dan Moore: Quoting Myself

Dave Imler's IM status earlier: "Are you there, God? It's me, Dave. I've found several usability bugs in creation. Enclosed are the instructions for reproduction. Do you have any ideas about a bugfix timetable?"

Me: Can't you just fork the project?
Me: Or hasn't He gotten around to putting it on github yet?
Him: Man, I don't like reading that code. I can't even get through his 'documentation'. Leviticus reads like a freaking switch statement.
Me: BEGAT considered harmful
Him: winner is you!

posted at 07:24 PM.

August 21, 2009

Scott Tomlinson: 6 month update

Smiley here! Forget the dreaded post-less month, I've been out of it for 6. And I really don't know where to start, but I haven't updated Live Journal in the last six months, or the equivalent of an Appalachian Trail Thru-Hike. And when I put it in those terms, it's hard to think about.

The biggest news that most people know, is that I'm engaged to Audrey (Homeward Bound)! Yay!

After that, I'm hanging in there. Still employed, and in the Arlington Heights IL area for awhile longer. (Lease is up in mid-November so will be switching apartments then for sure.)

I don't know how much I'll be updating, but my continual goal is to make time for social interactions. How well I meet that goal is another thing entirely.

Good luck to everyone, and even if I have been hiding away just trying to survive for the last year, that doesn't mean I haven't been thinking of you. And yes that includes my family, friends from Robinson and college, friends from the trail, and all of my running buddies from Chicago! I'm Wishing I was better at striking a balance, and I'm working every day to be better. But lately that's all that it feels like I can do, work at getting through one day at a time, doing the best I can. And that's what I'll keep doing, the best I can.

All in all, life is good, and worth every effort. Still Smiling!

Scott (Smiley Happy Feet :-)

posted at 12:20 PM.

June 16, 2009

Herb Mann: WordPressalypse

Something went terribly wrong in my WordPress install today, and I’m not sure what, or why.  The database is fine, along with all the posts and comments, as far as I can tell.  Those who read by feed probably won’t even notice a difference.

Once I have time to descend back into the Jeffries Tubes around here, I’ll get it sorted.

posted at 05:58 AM.

June 07, 2009

L. Burke: My thoughts on a piece of bad news

A really terrible story.

I am on another web site from whence I am familiar with this woman and her children. Sometimes I have a feeling about people but not this time. When she took her blog off line I figured it was because the child was dying and she didn't want any more public scrutiny.

But no, it was not that. At all. Much worse.

I do wonder what makes someone crack up like this. Certainly she was under a lot of pressure and was something of an overachiever (raising three young children, one with a lot of special needs, while going to school as well.) But what kind of person are you to start with, that this is what happens inside your head? Why do some depressed/ mentally ill individuals hurt others, while most just destroy themselves? If science could solve that problem the world would bow down and worship it..

I'm glad that technology was used for so much good in this instance. Modern medicine saved her child over and over. A camera caught her in the act. So often I tend toward seeing the darker side of technology and medicine. It was good to see them as the heroes (along with the medical professionals who suspected something like this) of a detective story. For my fellow bloggers who ask, "What is redemptive about this?" I'm going to answer, "The surveillance camera, and the people who figured out what was going on."

posted at 09:45 PM.

April 14, 2009

Angel Johnson: I can't win!

I had my annual physical exam today. Nothing exciting to report, although it amuses me that I'm apparently having the opposite problem as before.

I've seen the same doctor the past couple of years now. For a while, my weight was hanging out somewhere between 105-110, usually on the lower end. Since starting my job, however, I've actually gained a bit of weight and that range has moved up about 5 pounds. Add onto that the recent visit from family, which included a couple of meals at restaurants, and I weighed in at 116 this morning. After going over the other measurements the nurse had taken — blood pressure, heart rate, temperature — she gets to the weight, then looks at me and asks if that's normal for me now. She then strongly encouraged that I start exercising, because this sort of thing "can sneak up on you gradually, and before you know it you're 50 pounds heavier and wondering how the heck that happened"!

Normally, stress makes it even more difficult for me to keep on weight, and my job gives me a fair helping of that. I'm also on my feet all day and do a fair amount of walking around during that time. I'm still not eating breakfast regularly. I suspect it's a combination of eating a Hot Pocket for lunch about 75% of the time and then getting home ravenously hungry every day and snacking while making dinner. (Shame on me, I know. =) ) The weekly Friday donuts probably didn't help much either, but those are gone now thanks to budget cuts.

In any case, between that and the knee pain I've been starting to develop, that's two more strikes against my current job. ^^b

Or maybe my metabolism is finally winding its way down, which would be a shame. I'd hate to actually have to make an effort to stay thin. ;-)

posted at 12:27 AM.

March 03, 2009

Angel Johnson: Baaaaaaaaby Electronics

When we had some slow time at work, I went upstairs as a part of my large inventorying project to clean out the storage rooms. I found quite a few things that I would not have expected to find at a bank, including cowboy hats and doctor costumes. I guess at one point they had dress-up themes to go along with promotions. *shrug*

Apparently when they first came out with their Online Banking, they were giving out mini USB mice along with a free Online/Bill Pay consultation. I found one left and asked my manager if I could have it, and she said yes! :D

So now I have a ridiculously tiny (but functional!) mouse on my desk at home. It's shiny!

posted at 01:28 AM.

November 15, 2007

Chris Prince: Uhh...

Pardon my French, but what the fuck? And this is an ally?

For what it's worth:
Royal Embassy of Saudi Arabia
601 New Hampshire Avenue, NW
Washington, DC 20037

posted at 10:02 PM.

December 21, 2006

Chris Prince: Hilbert, party of n+1?

I'm in Indianapoils now, and have been for about 26 hours. I spent most of those last 26 hours either sleeping or working, though. I won't write about work just yet, since I'm now furious with my boss over a few issues, and I'd rather write about it when I've calmed down.

That said, I am glad to be home and relaxing (after work today, anyway). Is there going to be a Hilbert party heading out sometime over the holiday? I'd like to see the old Rose crowd again.

Lastly, I was a bad Chris this year and didn't send out any holiday cards, so, as appropriate, Happy Christmas/Hanukkah/Solstice/Kwaanza/Festivus/New Year, or if none of those apply (what, no New Year celebration?) hope you enjoy whatever time off you have coming to you.

posted at 06:26 AM.