February 07, 2010

Garrett Mace: Updated Arduino Shield Scaffold

shieldscaffoldv2

Download: ArduinoShieldScaffold.zip

Last year I made a pair of simple Eagle CAD files that contained headers and board outlines for an Arduino shield. The idea was that you could create a new project, copy the scaffold .sch and .brd files into it, then rename them and begin designing your new shield project. There are several part libraries out there with Arduino layouts, but in order to change the board outline, text, or add/remove holes, you'd have to go into the library and edit the part. And you'd actually need to make a new part, because if you ever open a different project and update the libraries, your edited part would overwrite whatever you had before.

Anyway, I updated the Shield Scaffold to be a little more useful. The TallParts layer contains outlines of the USB connector, power connector, and ISP header. You want to avoid any pins or exposed copper in this area, otherwise you may have an accidental short. The ArduinoHoles layer contains the original hole locations and diameters on the Arduino, in case you want to duplicate those holes to mount the shield securely with screws.

When you're ready to generate Gerber files, just make sure the TallParts and ArduinoHoles layers aren't selected in any of the CAM layers.

posted at 07:36 AM.

Garrett Mace: Berkeley FSM Cafe ShiftBrite Power Meter

2010-02-03 10.02.16 2010-02-03 10.03.37 2010-02-03 10.02.39

This is a great new project that just went live in the FSM Café on the University of California Berkeley campus. It's a floor-to-ceiling energy meter that displays a colorful stacked bar chart of power being used by various appliances within the cafe. It contains over 100 93 ShiftBrite RGB LED modules controlled by an Arduino.

Here's a video of the power meter in operation:
 Read more»

posted at 01:45 AM.

February 06, 2010

rhit tag @ flickr: Ben at the career fair

gloryanlin posted a photo:

Ben at the career fair

posted at 07:14 AM.

rhit tag @ flickr: Nick Race at the career fair

gloryanlin posted a photo:

Nick Race at the career fair

posted at 07:14 AM.

February 05, 2010

Robin: Luxury

Luxury is making beautiful things because I want to, not because I have to.

DSC00865

DSCN3330

DSCN2702

Top to bottom:
The Irish Eyes motif from The Harmony Guides: Crochet Stitch Motifs: 250 Stitches to Crochet.
The Clover Hat from Crochet in Color: Techniques and Designs for Playing with Color.
Cold Shoulders from Stitch 'N Bitch Crochet: The Happy Hooker.

(Luxury is also new pillows, fresh windshield wiper blades, a good song stuck in my head, and a cat on my lap.)

posted at 04:45 AM.

February 04, 2010

Robin: When Your Grandma Gets Her iPad

please send her over to Ravelry.com. We could use more crocheters to balance out all the knitters who have taken over a little.

Seriously, I didn't bring my laptop on vacation last week, and I got along fine just using my iPod touch for Internet consumption. Ravelry works well on the iPod/iPhone, the only problem at the moment is that it has trouble marking forum posts as "read". That, and the screen was too small - I had to keep zooming in. So, a giant iPod (aka the iPad) would have worked even better.

Will I get one? Ask me again when the 2nd Gen comes out. One problem is I wouldn't be able to carry it constantly like the iPod. First, it doesn't fit in my purse. Second I doubt I could legally bring it into work with me like I can with the iPod. (It is a bit too much like a computer and not enough like a phone or an MP3 player.) I'd lean towards the model with the largest hard drive, but no 3G service. I do like the display specs - it would be wonderful for viewing photos.

Actually, I'd like any high quality, high resolution computer display that had LED back-lighting and good color gamut, interfaced with my laptop, and wasn't gigantic. Unfortunately everything I've seen in that idiom would take up most of the dining room table. Anyone have a suggestion?

posted at 03:13 AM.

Edward O'Connor: Citizens United v. Federal Election Commission

My gut reaction on CU v. FEC is similar to Will Wilkinson’s (emphasis his):

This was a case about whether the state can suppress the distribution of an unflattering documentary about a powerful political candidate produced by a small group of private citizens. The crazy thing to me is that anyone ever thought that such a rule was not in blatant violation of the First Amendment.

The basic argument is: individuals have the rights of association, free speech, and the freedom of the press. A corporation is simply a form that such free association can take, and so you can’t deny individuals (shareholders) their rights simply because they’re acting in corporate form.

Of course, when people talk about this being an issue of undue corporate influence over politics, I think they really mean some corporations as opposed to some other corporations. I don’t think such a division can usefully be maintained. As Timothy Lee says,

Second, I think it’s important to remember that “corporations” encompass much more than large, for profit businesses. They also include a wide variety of non-profit and advocacy groups, including groups like the ACLU, the NRA, and NARAL that are, by any reasonable definition, grassroots organizations advocating the views of large numbers of voters. Indeed, as the ACLU pointed out in its amicus brief, the Bipartisan Campaign Reform Act (BCRA) prohibited the ACLU from running ads criticizing members of Congress who voted for the awful FISA Amendments Act of 2008. Even if you think it’s appropriate for Congress to regulate the speech of Exxon-Mobil and Pfizer, I think it’s awfully hard to square the First Amendment with a law that limits the ability of NARAL or the NRA to advocate for its members’ views.

Now, you could try the tack that such organizations are protected via the Free Press clause, that the freedom of the press applies to some corporations (media outlets) and not other corporations (Exxon and the like). I think this is a misinterpretation of the freedom of the press. Eugene Volokh wrote a good post about this. Here’s his conclusion:

[Early US court cases] do show that “liberty of the press” was seen as a right to publish to the world at large using the technology of the “press” (including by using others’ presses, whether for pay or because they liked what you wrote), not as a right that belonged to members a particular industry. The institutional media and other people are on par for purposes of “the freedom of speech, or of the press.” The constitutional protections offered to the institutional media are no greater than those offered to others. And thus if ordinary business corporations lack First Amendment rights, so do those business corporations that we call media corporations.

Anyway, I think it’s interesting to see usually like-minded people have such different gut reactions to this case. Such differences could be explained by different base Constitutional theories as suggested by John Samples (quoted by Will), but I don’t think he gives the progressive position enough credit. Later in the same post Will tries to articulate the progressive position as best he can; do you think he does it justice?

posted at 02:43 AM.

February 03, 2010

Edward O'Connor: What I've been reading lately

Here are some blogs that I've really enjoyed reading of late. Maybe you'd enjoy them too!

I've shared items from each of these blogs in the last few months.

posted at 12:24 AM.

February 01, 2010

News from Rose-Hulman: Training A Champion: Rose-Hulman Students, Faculty & Staff Enjoy Association with Super Bowl-Bound Colts

A tint of blue and white is mixing into Rose-Hulman Institute of Technology’s traditional rose and white school colors as students, faculty and staff members enjoy the Indianapolis Colts’ ride to next week’s Super Bowl. The private engineering, science and mathematics college has hosted the NFL team’s training camp for the past 11 years and has a miniature Vince Lombardi Trophy from the Colts’ 2007 Super Bowl championship.

posted at 02:00 PM.

January 30, 2010

John Pederson: Updated the "ACR is a bummer" post

Bushmaster is saying the FCG is pretty much all AR parts, so I've updated the post to that end.

posted at 12:00 AM.

January 27, 2010

News from Rose-Hulman: Coming to Rose-Hulman: ‘Doktor Kaboom’ Makes Science Fun & Interesting

There will be no explosions, just lots of fun times learning about science, when Doktor Kaboom brings his interactive show to Rose-Hulman Institute of Technology’s Hatfield Hall Theater on Tuesday, February 2, at 7 p.m. as part of the college’s Family Discovery Series. Tickets are priced at a family friendly $5 for all guests. Persons can purchase tickets from 1-5 p.m. weekdays in the Hatfield Hall ticket office or by calling (812) 877-8544.

posted at 08:00 PM.

January 26, 2010

John Pederson: I really do think about other things

Lotta gun stuff on my brain lately, though.

The ACR pricing has done a fantastic job of derailing my gun purchases for the year. At some point this year, I need an 870, but not buying an ACR frees up over 75% of this year's budget.

I'd kind of like to have another tactical carbine, but I'm not crazy about buying another AR-15, nor am I really stoked about the XCR, Sig 556, or any of the various piston-driven AR designs.

In the meantime, there's a list of gear that I want/need for a carbine and pistol course in August: lots of ammunition, a light for the AR-15, at least two more magazines for the pistol, magazine pouches for both, and I know I'm going to want a Camelbak or equivalent if I'm going to spend three solid days on the firing line in the Kentucky heat and humidity. I'd also kind of like some sort of MOLLE vest or load-bearing harness and extra magazine pouches, but only because I don't think I can keep my pants up without suspenders with all that junk hanging off my belt. If I'm going to be stuck with a belt and suspenders, I may as well go all the way, I think. This seems to be something of a rabbit hole.

If I don't buy a second AR, AR upper, or an equivalent rifle, I need to pick up an extra bolt and carrier and get it headspaced to my current upper. Might actually be simpler (if more expensive), then, to just buy a second upper. Not sure which outfit to buy it from, though.

First thing, though, is a light for the AR. Next, I think, is pistol magazines and a MOLLE vest or something similar.

posted at 12:00 AM.

January 24, 2010

Colin Hill: On the subject of projects

So for the past several months I’ve been remarkably good at doing nothing in the small amount of free time I’ve had. Although I do enjoy starting at the wall from time to time I decided it was time for a new project. Strictly speaking it was time for a new software project. [...]

posted at 08:18 PM.

January 23, 2010

Nathan Froyd: banks asking for regulation

If banks are going to continue in their expectations that the government is going to bail them out, then the government is naturally--regardless of arguments from the left for increased regulation or from the right for steering clear of the self-correcting market--going to impose regulations to make it less likely that banks will place themselves in a position in which a bailout is necessary. Simple economics. You can debate back and forth about the popular merits of such a decision and the political maneuvering that comes with that. But the government is acting in its own self-interest in this case, plain and simple. The banks are getting exactly what they asked for.

posted at 02:52 AM.

January 16, 2010

Nathan Froyd: grouchy c programmer

Whenever possible, feature macros in C should be #define'd to 0 or 1, rather than letting the definedness or lack thereof be the switch for the feature. This convention means that you can talk about the feature macro in conditions, rather than having to jump through hoops to do so. (Doing so also means that you can play clever tricks in code with said feature macros if need be...) Of course, this implies that your compiler needs to be intelligent about dead code elimination in the presence of disabled features, but what compiler isn't?

Also, to all the hotspot rockstar programmers out there who are enormously impressed with their ability to record key routines from the C library using whizbang vector instructions and cache control instructions and show massive speedups: please try to actually test your code to ensure that it has the same correctness properties as the code in the C library. Nobody cares how fast your routines are if they cause buffer overflows on real-world code, rather than the trivial benchmark you threw together.

posted at 03:05 AM.

December 27, 2009

Dave Heigl: Blog’s back

My webhost had a raid array fail (long story: drive fails, they replace drive, try to rebuild array, array fails). It took out all my websites. They had the server back up after 4-5 days, but took almost two weeks to get the files restored from tape.

Now, I have to work get get things moved back to where they belong. It’s a bit of a pain, since I was using slightly more than half of my webspace prior to the backup.

I think I’m going to petition for a larger space allotment in the name of customer retention.

posted at 04:42 PM.

Dave Heigl: BioHell

While Mel was shopping at Borders last night, I sat and read a book. I was moderately interested in it based on the back cover. It was a sci-fi with nano-tech enhanced humanity (for a price) and zombies, apparently.

Anyway, the author was _terrible_. He suffered from being unable to describe anything with few than three adjectives or adjective phrases. Everything was superlative. In prologue, the hero kills a three aliens of a race previously supposed to be extinct. By their very existence, they had killed entire colony *planets*. Yet our hero kills them bare-handed.

After his successful kills, he heads to a bar. Inevitably, a female of unparralelled attractiveness walks in. The author describes the effect that this woman has on the main character as “literally poleaxing him”. Except that there are no poleaxes involved, so I’m fairly certain the author just doesn’t know what the word “literally” means. The next two sentences cement in this fact: “My jaw dropped. It actually dropped.”. Our unfortunate author could have used “literally” to good effect in that sentence.

Anyway, avoid “BioHell” unless you’re looking for a laugh at the author’s expense. (:

posted at 04:40 PM.

December 19, 2009

Dave Imler: Uptime

Tonight is maintenance night on the computer cluster.  The desktop needed a new power supply, and the UPS had to be changed for a better one.

Bubba, the wordpress server, had to go offline for the UPS swap just now. It had been up for over 245 days.  I always feel bad when I lose that much uptime.

posted at 02:52 AM.

December 15, 2009

Logan Bowers: Why Amazon's spot pricing is at least not good (and maybe bad) for you

Yesterday, Amazon released Spot Prices for their EC2 instances. Really, it is quite ingenious; like Mechanical Turk, they've taken a task they normally would have to spend costly internal resources on and outsourced it to thousands of people that now externally do it for far less. In this case, finding the profit maximizing price for EC2 resources is now done by EC2 customers. While MT pays typically a pittance for each task done, the EC2 consumers are in fact paying for the privilege of figuring out exactly how to be charged the most for their resources.

Don't get me wrong, providing a spot price and allowing users to make contingent purchases is a brilliant business tactic. It certainly boosts AWS revenues, but more importantly it provides them immensely valuable data. Data you can't buy; data that would make most economists drool uncontrollably. Amazon collects this incredibly valuable data for free, their users clamor to share it, to give it to Amazon to lock up in its databases and mine to their hearts content. They get the demand curve.

The most important element to realize is that Amazon's spot pricing system is not a functional market. There is only one supplier of goods, so none of the standard economic theory applies. Well, at least none of the theory about competitive markets.



The graph above is the classic depiction of a monopoly market (from wikipedia). The Y-axis is Unit price of an EC2 instance, the X-axis the number of instances supplied/demanded. The line labeled MC depicts Amazon's unit cost for supplying another EC2 instance (the marginal cost). The line slopes upwards because when Amazon is not running at full capacity, they will start up their least expensive servers first (e.g. the most power efficient, newer ones), and only run their more expensive servers if they have to. The line labeled demand depicts the number of instances people are willing to buy for a given price. It slopes downward because with each reduction in price, additional folks who were priced out of the market come in and will buy more instances.

In a perfectly competitive market, the price and supply of goods stabilize where the MC and demand curves intersect. At that point, it is more expensive to turn on the next instance than the next buyer is willing to pay, so no more instances are powered up. Because Amazon is the sole supplier of instances, however, they can withhold them from the market; intentionally leave machines powered down to drive up the price. Since everyone pays the same price, instead of supplying Qc instances, they only run Qm instances. That increases the price to Pm. This will increase their total profits (the yellow shaded area). In all cases, the monopoly price will be greater than the natural market price; it never works to the consumer's advantage.

Spot pricing is Amazon's way of getting their users to put this graph together. Spot price bids collectively produce the demand curve. By supplying the data, users help Amazon increase their prices to the optimum limit. And only Amazon gets to do this calculus, their users have tipped their hands regarding prices they'll pay, but Amazon has shared nothing about prices they'll accept. Goods in competitive markets are priced proportional to the cost of producing them. Goods sold by a monopoly power are priced at a higher level, proportional to the value they provide to the customer.

Furthermore, by being setting the spot price Amazon can engage in lucrative price discrimination. Right now, any user can get a small EC2 instance for $0.085/hr. This is a terribly crude way to sell instances. If I'm a (hypothetical) Tech Crunched startup desperate for more capacity on opening day, I might be willing to pay $1/hr while if I'm still eating ramen in my garage (somewhat not hypothetical), I'm only willing to pay the published $0.085/hr. EC2 pricing is uniform so Amazon can't charge the TC rockstars a different rate than they charge me. Our counterparts in other industries have figured out some workarounds.

Sometimes I think Zoolander might be something of a documentary, but actually fashion folks know how to sell, they know how to sell well, and we can learn from them. They figured out how to bucketize their customers charging them each a different price and in doing so increase their profits. They get a shipment of hot trendy clothes and put them out at a steep markup. Wealthy, price insensitive customers rush to the store to buy the latest outfits and pay exorbitant prices. Then once all of the wealthy folks have filtered through and sales start to drop off, they lower the price, advertise a holiday blowout, and a new wave of slightly more price sensitive folks come to gobble up inventory. Then, anything that's left is marked "clearance" and sold at a meager profit to those deal-seekers that patronize The Rack. Each group pays price tailored to their disposable income rather than the uniform and lower price predicted by a perfectly competitive marketplace. The tradeoff is that the lower on the price scale the consumer, the less reliable their supply of goods. Now Amazon naturally wants to do the same thing with their EC2 instances. They want to sell to all their price-insensitive customers at high markup, published prices, while still having something to offer at a lower price to all the cheapskates.

In an actual, functional market this would not be possible. The spot bids by consumers and spot asks by suppliers would be public knowledge. Everyone could see that Amazon is willing to sell an effectively unlimited supply of small instances at $0.085/hr, so as the sophisticated buyer, I realize I can also set my bid to $0.085. Then, in the worst case, I'll only pay the full retail price, and most of the time I'll pay the lower market rate. This, of course, will never work with Amazon's spot price system.

Amazon sees all the bids and is the only "ask". They know exactly how many folks are willing to pay the retail price for an instance and once that number is high enough, they will withhold all inventory from the spot market. They'll have the servers; they'll just turn them off for an hour. It will ensure that the folks for whom an instance is truly worth that $0.085 experience an avoidable, unexpected outage that incents them cough up the full price 24x7 and not get identical service at the cheaper price offered to the low end customers. Because everyone communicates all their bids to Amazon, they know exactly when to pull the trigger to maximize their own profits. Meanwhile, the bargain basement folks will already be taking frequent outages as the price fluctuates, so they'll be prepared for an hour of downtime anyways. Thus, the EC2 community is segmented into two groups and Amazon gets to charge each of them at the limit of what they're willing to pay.

The important thing to remember (and this is where most journalists get it wrong) is that spot pricing does not constitute a (functional) market. Amazon has simply launched a tool to help them extract more profits from you. Compared to only paying full on-demand prices, yes, this is better as computing resources will sometimes be available for less. Compared to an actual competitive market for compute resources, EC2 spot pricing is in fact terrible. You are at a significant information disadvantage, availability is necessarily unreliable, and you subject to higher monopoly pricing. Your participation only helps to stack the deck against you.

As a business, Amazon is being incredibly innovative. They're figuring out exactly how to squeeze every last dollar of profit out of their platform. As the consumer, that means they're squeezing every last dollar out of you. That's good for Amazon, but probably not good for you. Eventually, there will be many VM providers and there will be a real spot market that has all the positive characteristics we'd expect. This is a step in the right direction, but just for Amazon.

posted at 08:47 AM.

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.

December 06, 2009

Kent Rosenkoetter: Sad, sad story.

http://yro.slashdot.org/comments.pl?sid=1468134&cid=30336290

At least it has a happy ending. Rhetorical question, do you know about the concept of “jury nullification”?

posted at 12:50 AM.

November 21, 2009

Kent Rosenkoetter: awesome video

Much as I loathe linking to Spike, this video is simply too awesome to pass up. It has the captain from Firefly.

http://www.spike.com/video/pg-porn-pg-porn/3041858

posted at 10:18 PM.

November 20, 2009

Dave Imler: So that’s where they went.

Rhiannon is coughing.  I reach into my inner jacket pocket, grab a tube of cough drops, and hand it to her without looking.

“Take one of these,” I say, as suavely as I can manage.

“Why do I need a towel?” she asks.

I look down.  I’ve actually handed her a tube of compressed travel towels.

“Shit,” I say helpfully, as I dig around for the tube of Hall’s I bought at Gas & Go.

I’d forgotten that I had those towels.

posted at 12:47 AM.

November 03, 2009

Matt Burke: Bear Suit

This year, O dressed up as a bear for Halloween. It's the same costume he wore last year. It still fit (despite his 50% increase in age since then; though it doesn't fit very well with the hood up), and he really likes wearing it. Even though it's been hanging in the back of the closet for almost a year, he said "Bear suit!" as soon as he saw it.

While wearing said bear suit, he was very obliging and growled every time I asked him to. In some settings, he growled very quietly.

When he growled, invariably an adult would say, "What a scary bear!" O would reply, "I'm not a scary bear." The adult would then say, "I'm sure you must be a friendly bear." O disagreed, "I'm not a friendly bear. I'm not a bear. I'm just wearing a bear suit."

posted at 04:20 PM.

October 28, 2009

Matt Burke: Instead of going to sleep

toddler slowly and deliberately One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Eleven, Twelve, Fourteen, Fifteen, Nineteen, Sixteen, Nineteen, Nineteen, Twentyteen, TwentyOne, TwentyTwo, TwentyThree, TwentyFour, TwentyFive, TwentySix, TwentySeven, TwentyEight, TwentyNine, TwentyNine, TwentySeven, TwentyThree, TwentyNine --

mommy Thirty

dramatic pause

toddler TwentyThirty. One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Eleven, Twelve, Fourteen, Fifteen, Nineteen,

mommy OneTwoThreeFourFive Ohsssssssssss!

toddler OneTwoThreeFourFive Ohsssssssssss!

daddy OneTwoThreeFourFive Ohsssssssssssss!

toddler OneTwoThreeFourFive Ohsssssssssss!

mommy OneTwoThreeFourFiveSixSevenEightNineTen Ohssssssssss!

toddler OneTwoThreeFourFiveTen Ohsssssssssssssssss!

posted at 01:26 PM.

Colin Hill: I’m on twitter (sort of)

To start with: I’ve still got nothing to say. However, in accordance with my policy of doing things because I can, I’ve created a twitter account. I’ve done this because today’s release of the Sonos software supports twittering (or is it tweeting? I’ve got no idea) what’s currently playing on my system. [...]

posted at 12:49 AM.

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.

Enjoy:

#!/usr/bin/env ruby -w

require 'optparse'
require 'osx/cocoa' # http://rubycocoa.sourceforge.net
require 'pp'

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

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
  end
end

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}}
      )
    end
  end

  puts "#{main_display_width} =>"
  pp window_properties

else

  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(',') + '}'
      do_apple_script(
        %Q{tell application "System Events" to set the #{prop} of #{WindowsOfInterest[window]} to #{value}}
      )
    end
  end

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

end

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.

July 04, 2009

Logan Bowers: Gardening, Week 10

All things considered, the garden has been pretty successful. (Almost) everything is still alive and growing pretty well. The casualties so far have only been two broccoli plants, one of which I'm pretty sure was uprooted by Amélie (the other died for reasons unkown). It looked like the squash wasn't going to make it, but an increase in its waterings nursed it back to health.

Speaking of which, when you read about people over-watering online, do not believe them. It is a trap. As near as I can tell, the Internet and I have very different opinions on what constitutes "wet" soil, so watering only when the soil is dry does not work. My plants all get a healthy amount of direct sunlight and through trial and error (mostly error), I've found they need a generous amount of water every day.

Squash

IMG_0036Squash, it turns out, cannot be over watered. This one's soil always felt quite damp, so I only watered it every few days. It grew fine for the first few weeks but once it started to bear fruit the leaves started yellowing and dying. The Internet gave conflicting advice on the watering of squash, with many sites suggesting it should only be watered every two or three days. False. This guy needs plenty of water every day. After I started giving it ~.2 gal/day, its leaves greened up and it is now growing significantly faster than ever before. About 50% of the leaves in the photo have developed in the last two weeks. Squash are supposed to sprawl out to ~10ft, but given the late start and that this one is potted I'm sure it will be much smaller.

Tomatoes

IMG_0034

Early on the tomatoes exhibited "leaf curl," which apparently is a common symptom of over-watering. Maybe. Apparently many varieties of garden tomatoes just have a tendency to curl, and it doesn't materially affect the plants. But, at first I backed off the watering since the leaves were curling, which was again a bad idea. The plants themselves haven't grown very fast (relative to the Sungold plant on the next block), and many of the fruits are growing very, very slowly. I've upped their watering and they seem to be doing well, though I won't know for sure if that has helped until later in the season.

Despite having far fewer fruits, the Green Zebra (pictured) is on track to produce first. The Sungold, however, has 3-4x the flowers (50+), so it will probably produce the larger yield. I also didn't get tomato cages until just a few weeks ago. Those are much easier to put in the pot when the plant is small; whoops!

Sunflowers

The sunflowers are getting huge. The biggest are around 4ft tall at this point and they grow ~1"/day. They've been the hardest to mess up. They seem nearly impossible to kill (as long as I give them some water), only growing faster or slower based on the amount of care they get.

I planted them in 3 groups of ~6. A few in each group failed to take root after sprouting so I had to sow new seeds in their place. These new plants were growing a few weeks behind its siblings and thus generally crowded for light. Interestingly, they've raced taller, faster, at the expense of a thiner and weaker stem. A few of them needed steaks to stay upright, but as they've got more sun they've grown stronger.

Broccoli, Spinach, and Lettuce

IMG_0035

The side garden has worked out okay. The spinach bolted really early (~week 6) and was eaten; it really should be in a place that doesn't get too much direct sun (or perhaps pulled and re-sown frequently?). The lettuce is ready to be eaten, just as soon as my housemates or I actually make a salad at home. It turns out they grow really big and need to be quite far apart, I'd say 24" or more. The broccoli seemed to flower early and produce small heads, but Mike said they were good. They're very delicate plants, I'm not sure I'd grow them again without an, e.g. flower bed where they would be more protected.

Corn

IMG_0031

The corn is definitely the most anticipated crop of the yard. I read online that they need plenty of water, at least 1"/week. False. They need more. I carefully gave them 8gal/day (which works out to 1"/week) and they remained healthy but many were growing very slowly. The ones in sunken portions of the garden (where water tended to pool) grew noticeably faster than the others. I've at least doubled their water (now using the hose, so not sure of the exact amount), and they are all growing much faster. The bigger ones are now growing between 0.5-1"/day. I think the corn will come in later than the early Aug I was anticipating.

A ridiculous number of poppies grew naturally with the corn (the orange flowers). I've left them in because they look nice, but periodically thinning them to keep them from overcrowding the corn. Over three thinning sessions, I've probably pulled 100lbs of poppies. They grow like weeds, but at least they look nice. The bees really love them. I water before I leave for work and will routinely see ~50 bees hopping from flower to flower.

posted at 07:59 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.

http://www.dreamindemon.com/2009/06/04/emily-mcdonald-made-her-daughter-sick/

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.

May 21, 2009

L. Burke: Corporal and other kinds of punishment

So, I have a two year old, and hang around lots of other parents. So this idea of "spanking" comes up sometimes. I don't believe in it. Here are some reasons why:

Things I, personally, learned from being spanked:

- My parents are people who hurt me
- The parent who hits harder is more to be feared
- Authority figures are scary and dangerous
- Disrespect is the only tool that I, a small and helpless person, have, and you can't beat it out of me. So I will cultivate this to a fine art.
- Physical violence is an acceptable method of problem-solving
- If you are bigger, you always get your way
- My parents spank me when they are mad/frustrated/angry and it doesn't always relate to my behaviour

I don't learn best when I'm irrationally angry, so I don't try to teach my child things when he is.

Ways I learned how to act like a more decent person:

- Modeling
- Quiet, gradual encouragement to do the right thing
- Natural consequences (don't put oil in the car = dead engine)
- Peer pressure
- Staying away from bad situations
- Kindness of others

A lot of this line of thinking was encouraged by reading Unconditional Parenting by Alfie Kohn. It's a very secular book, but it's very much in line with the way God relates to us humans. I've never, so far as I can tell, been spanked by God. :-) Allowed to experience the consequences of my own choices, yes.

Being a parent causes a lot of personal growth. I have to put aside my own reactions in order to deal with a situation lovingly. My child may have not taken a nap and be throwing toys around the living room after being asked to stop and having the toys taken away and I may be tired and hungry and he is getting on my last nerve. Believe me, there are times when I have to remind myself of all the reasons why I am *NOT* going to hit my child. But there are lots of other ways to handle it. What I usually do is some variation of getting us out of the area where the bad behaviour is taking place, then address some of the aggravating factors that might be contributing to it. (Hungry, sleepy, lack of attention from mom, etc) This requires.. self control! Hey, a fruit of the spirit! Alternatively, we can redirect the action into an acceptable outlet.. i.e. go outside and throw balls around the yard.

I know that as Mr. Toddler gets older and finds new, more creative ways to misbehave, I will have to keep coming up with new, more creative ways to deal with them. That's ok. It's good for both of us. He gets to learn how to channel his urges to do whatever, how to problem solve, how to deal with conflict, etc.. and so do I. He gets a little more slack, because he is two!

posted at 05:20 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.

January 16, 2009

Ryan Johnson: Dollhouse

Somebody remind me in early Feb to set MCE to record Dollhouse. It's not showing up in the guide yet and I'm afraid I'll forget.

posted at 03:10 AM.

December 14, 2008

Sarah Nelson: More photos

12-2-08 - 12 weeks
12-9-08 - 13 weeks

posted at 12:46 AM.

November 27, 2008

Sarah Nelson: Another baby update

11-21-08 - 10.5 weeks
11-26-08 - 11 weeks

posted at 08:17 AM.