Love, hate, size, race, grime, grace, lip injection, lethal injection, lip injectionAmazing.
Lethal injection, your assumption, economical destruction, breast reduction, police corruption
Love, hate, size, race, grime, grace, crime rate, lip injection, lethal injection
Lip injection, lethal injection, breast reduction, police corruption, your assumption
Economical destruction, breast reduction, police corruption, your assumption, economical destruction
Tuesday, September 22, 2009
And in More Mixtape Non-News
I never listened to Lil' Wayne's "rock" stuff when it was coming out. How did nobody tell me about his take on an "End of the World as We Know It"/"We Didn't Start the Fire"–style laundry list of modern evils, "Politics"?
Friday, September 18, 2009
Dips of the Woooooorld
The French Dip, which is actually a roast beef sandwich that you DIP.
Invented by France, hence the name.
Invented by France, hence the name.
Thursday, September 17, 2009
Google Fails Me!
My street cleaning program appears to be working just fine, except for the fact that for some reason Google never sent me either of my SMS reminders this morning. I looked at the calendar and they're set up and everything; I just never got the message. And it worked perfectly on Monday!
It cost me a $115 ticket for double parking, though thankfully my neighbor alerted me before they could tow my car.
Clearly, I'll need a text-messaging system more robust than reminders in Google calendars. AppEngine will let me set up cron jobs (nullus), which I should then be able to use to trigger a message via Zeep.
It cost me a $115 ticket for double parking, though thankfully my neighbor alerted me before they could tow my car.
Clearly, I'll need a text-messaging system more robust than reminders in Google calendars. AppEngine will let me set up cron jobs (nullus), which I should then be able to use to trigger a message via Zeep.
Tuesday, September 8, 2009
Another SMS Thing
I keep track of my checking account balance and track all my bills in a sparsely populated spreadsheet, with a row for each calendar day and a column for each category of credit or debit (paycheck, transfer to savings, gas bill, ATM, &c.). The resulting balance is tracked in the rightmost column.
My practice has been, when withdrawing money from an ATM machine, to pocket a paper receipt until such time as I find myself before my computer and may record the transaction.
So I made another App Engine service that lets me enter ATM withdrawals into a database,
and publishes monthly accounts as XML,
which are then consumed by Google spreadsheets' ImportXML() function:
I called it "A.T.Them," and once I had it working, I added an endpoint to handle Zeep operations. Now when I withdraw money, I can decline the offer of a paper receipt, saving some trees, and text "atthem 61.50" or whatever and it will pop up right in my spreadsheet.
I can't figure out how to post the source without Blogger mangling the HTML, but it's all trivial in any case. One note is that ImportXML() doesn't do any kind of authentication, so the monthly lists of all my ATM withdrawals are not protected by anything beyond my keeping the URI's at which they may be found a secret.
Likewise (and this vulnerability, such as it is, applies equally to any Zeep service), someone who knew the URI that handles Zeep requests and my Zeep subscriber ID could impersonate "atthem" messages and populate my spreadsheet with junk. It's easy enough to add some sort of challenge and response to Zeep operations, but I didn't bother.
My practice has been, when withdrawing money from an ATM machine, to pocket a paper receipt until such time as I find myself before my computer and may record the transaction.
So I made another App Engine service that lets me enter ATM withdrawals into a database,
and publishes monthly accounts as XML,
which are then consumed by Google spreadsheets' ImportXML() function:
I called it "A.T.Them," and once I had it working, I added an endpoint to handle Zeep operations. Now when I withdraw money, I can decline the offer of a paper receipt, saving some trees, and text "atthem 61.50" or whatever and it will pop up right in my spreadsheet.
I can't figure out how to post the source without Blogger mangling the HTML, but it's all trivial in any case. One note is that ImportXML() doesn't do any kind of authentication, so the monthly lists of all my ATM withdrawals are not protected by anything beyond my keeping the URI's at which they may be found a secret.
Likewise (and this vulnerability, such as it is, applies equally to any Zeep service), someone who knew the URI that handles Zeep requests and my Zeep subscriber ID could impersonate "atthem" messages and populate my spreadsheet with junk. It's easy enough to add some sort of challenge and response to Zeep operations, but I didn't bother.
Monday, September 7, 2009
Cyclones vs. Spinners
Sarah and I biked down to Coney Island yesterday for the Cyclones' final regular-season game. Playoff slots had already been determined, so there wasn't anything at stake, which might have been why both teams kept putting in new pitchers. It was weird.
Carlos Beltran was playing for Brooklyn on rehab. He had a solid hit for his second at-bat, and some good if unspectactular fielding, but I think he struck out swinging a couple times. Not really a big hitting day for anyone, actually, with a really strong wind coming in off the water.
Ultimately an exciting game, with Brooklyn attempting a rally in the ninth but unable to overcome the 4-2 deficit. We were glad we brought sweaters, and didn't stick around for the fireworks show scheduled for ninety minutes later.
The ride down was fun, it was our first time going down into Brooklyn from the new neighborhood, which really just means we take Bedford down and then go West on Caton Ave where before we would have been going East on it. I think next time I'm going to stay on Bedford and take Church instead; maybe it was just West Indian Day Parade traffic last night, but I think Caton is usually pretty crazy.
Carlos Beltran was playing for Brooklyn on rehab. He had a solid hit for his second at-bat, and some good if unspectactular fielding, but I think he struck out swinging a couple times. Not really a big hitting day for anyone, actually, with a really strong wind coming in off the water.
Ultimately an exciting game, with Brooklyn attempting a rally in the ninth but unable to overcome the 4-2 deficit. We were glad we brought sweaters, and didn't stick around for the fireworks show scheduled for ninety minutes later.
The ride down was fun, it was our first time going down into Brooklyn from the new neighborhood, which really just means we take Bedford down and then go West on Caton Ave where before we would have been going East on it. I think next time I'm going to stay on Bedford and take Church instead; maybe it was just West Indian Day Parade traffic last night, but I think Caton is usually pretty crazy.
Friday, September 4, 2009
Okay, Now I'm Really Done
Finished porting my street cleaning reminder program to Python for AppEngine, where it seems to be working fine. One unfortunate thing about moving the original desktop C# 3.5 code to ASP.NET 2.0 was that I had to replace all my nice Linq queries with regular loops, so being able to make use of Python features like tuples and list comprehensions was enjoyable.
Here is the code, with my personal identification information removed, and which I hereby release into the public domain:
import cgi
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import gdata.service
import gdata.calendar
import gdata.calendar.service
import atom.service
import gdata.alt.appengine
import string
import time
class Cleanendar(webapp.RequestHandler):
def __init__(self):
manager = CalendarManager()
self.commands = { 'n': manager.north, 's': manager.south, '': manager.clear }
def post(self):
if self.request.get('event') == 'MO':
if self.request.get('uid') == MY_ZEEP_UID:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write(self.process_command(self.request.get('body').lower()))
return
self.response.clear()
self.response.set_status(400)
def process_command(self, body):
if body in self.commands:
self.commands[body]()
return ''
else:
return 'Bad command [' + body + ']'
class CalendarManager:
def __init__(self):
self.service = self.get_service()
(self.calendar, hcalendar) = self.get_calendars(self.service)
self.id = self.calendar.id.text.split('/')[-1]
self.holidays = self.get_events(hcalendar.id.text.split('/')[-1])
self.prefix = 'Cleanendar: '
self.begin = time.strptime(time.strftime('%Y%m%d', time.localtime()) + '1230', '%Y%m%d%H%M')
self.end = time.strptime(time.strftime('%Y%m%d', time.localtime()) + '1400', '%Y%m%d%H%M')
self.daynames = ['Mo','Tu','We','Th','Fr','Sa','Su']
def get_service(self):
service = gdata.calendar.service.CalendarService(MY_GOOGLE_ID, MY_GOOGLE_PW, MY_APP_ID)
service.ProgrammaticLogin()
return service
def get_calendars(self, service):
feed = service.GetAllCalendarsFeed()
calendar = None
holidays = None
for i, c in enumerate(feed.entry):
if c.title.text == "Cleanendar":
calendar = c
elif c.title.text == "2009 NYC Alternate Side Parking":
holidays = c
return (calendar, holidays)
def north(self):
self.set_days([0,3])
def south(self):
self.set_days([1,4])
def clear(self):
events = self.get_events(self.id)
for i, e in enumerate(events.entry):
if e.title.text.startswith(self.prefix):
self.service.DeleteEvent(e.GetEditLink().href)
def set_days(self, days):
self.clear()
self.add_event(self.make_event(self.begin, "Move car", days))
self.add_event(self.make_event(self.end, "Move back", days))
def get_events(self, id):
return self.service.GetCalendarEventFeed('/calendar/feeds/' + id + '/private/full')
def make_event(self, t, desc, days):
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text=self.prefix + 'Street cleaning')
event.content = atom.Content(text=desc)
event.recurrence = self.make_recurrence(t, days)
event.reminder = self.make_reminder()
return event
def add_event(self, event):
return self.service.InsertEvent(event, '/calendar/feeds/' + self.id + '/private/full')
def make_recurrence(self, t, days):
data = ('DTSTART;TZID=UTC;VALUE=DATE-TIME:' + time.strftime('%Y%m%dT%H%M%S', t) + '\r\n' +
'DURATION:PT5M\r\n' +
'RRULE:FREQ=WEEKLY;BYDAY=' + string.join([self.daynames[d] for d in days], ',') + ';' +
'UNTIL=' + time.strftime('%Y', t) + '1231\r\n' +
'EXDATE:' + string.join([time.strftime('%Y%m%d', d) + time.strftime('T%H%M%S', t) for d in self.make_exclusions(days)], ',') + '\r\n')
return gdata.calendar.Recurrence(text=data)
def make_exclusions(self, days):
e = []
for i, h in enumerate(self.holidays.entry):
for t in [time.strptime(w.start_time, '%Y-%m-%d') for w in h.when]:
if t.tm_wday in [0,3]:
e.append(t)
return e
def make_reminder(self):
return gdata.calendar.Reminder(minutes=10, method='sms')
application = webapp.WSGIApplication([('/', Cleanendar)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
Here is the code, with my personal identification information removed, and which I hereby release into the public domain:
import cgi
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import gdata.service
import gdata.calendar
import gdata.calendar.service
import atom.service
import gdata.alt.appengine
import string
import time
class Cleanendar(webapp.RequestHandler):
def __init__(self):
manager = CalendarManager()
self.commands = { 'n': manager.north, 's': manager.south, '': manager.clear }
def post(self):
if self.request.get('event') == 'MO':
if self.request.get('uid') == MY_ZEEP_UID:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write(self.process_command(self.request.get('body').lower()))
return
self.response.clear()
self.response.set_status(400)
def process_command(self, body):
if body in self.commands:
self.commands[body]()
return ''
else:
return 'Bad command [' + body + ']'
class CalendarManager:
def __init__(self):
self.service = self.get_service()
(self.calendar, hcalendar) = self.get_calendars(self.service)
self.id = self.calendar.id.text.split('/')[-1]
self.holidays = self.get_events(hcalendar.id.text.split('/')[-1])
self.prefix = 'Cleanendar: '
self.begin = time.strptime(time.strftime('%Y%m%d', time.localtime()) + '1230', '%Y%m%d%H%M')
self.end = time.strptime(time.strftime('%Y%m%d', time.localtime()) + '1400', '%Y%m%d%H%M')
self.daynames = ['Mo','Tu','We','Th','Fr','Sa','Su']
def get_service(self):
service = gdata.calendar.service.CalendarService(MY_GOOGLE_ID, MY_GOOGLE_PW, MY_APP_ID)
service.ProgrammaticLogin()
return service
def get_calendars(self, service):
feed = service.GetAllCalendarsFeed()
calendar = None
holidays = None
for i, c in enumerate(feed.entry):
if c.title.text == "Cleanendar":
calendar = c
elif c.title.text == "2009 NYC Alternate Side Parking":
holidays = c
return (calendar, holidays)
def north(self):
self.set_days([0,3])
def south(self):
self.set_days([1,4])
def clear(self):
events = self.get_events(self.id)
for i, e in enumerate(events.entry):
if e.title.text.startswith(self.prefix):
self.service.DeleteEvent(e.GetEditLink().href)
def set_days(self, days):
self.clear()
self.add_event(self.make_event(self.begin, "Move car", days))
self.add_event(self.make_event(self.end, "Move back", days))
def get_events(self, id):
return self.service.GetCalendarEventFeed('/calendar/feeds/' + id + '/private/full')
def make_event(self, t, desc, days):
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text=self.prefix + 'Street cleaning')
event.content = atom.Content(text=desc)
event.recurrence = self.make_recurrence(t, days)
event.reminder = self.make_reminder()
return event
def add_event(self, event):
return self.service.InsertEvent(event, '/calendar/feeds/' + self.id + '/private/full')
def make_recurrence(self, t, days):
data = ('DTSTART;TZID=UTC;VALUE=DATE-TIME:' + time.strftime('%Y%m%dT%H%M%S', t) + '\r\n' +
'DURATION:PT5M\r\n' +
'RRULE:FREQ=WEEKLY;BYDAY=' + string.join([self.daynames[d] for d in days], ',') + ';' +
'UNTIL=' + time.strftime('%Y', t) + '1231\r\n' +
'EXDATE:' + string.join([time.strftime('%Y%m%d', d) + time.strftime('T%H%M%S', t) for d in self.make_exclusions(days)], ',') + '\r\n')
return gdata.calendar.Recurrence(text=data)
def make_exclusions(self, days):
e = []
for i, h in enumerate(self.holidays.entry):
for t in [time.strptime(w.start_time, '%Y-%m-%d') for w in h.when]:
if t.tm_wday in [0,3]:
e.append(t)
return e
def make_reminder(self):
return gdata.calendar.Reminder(minutes=10, method='sms')
application = webapp.WSGIApplication([('/', Cleanendar)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
Thursday, September 3, 2009
Victory!
Zeep did indeed do what I wanted, and I found a site that hosts ASP.NET for free for 90 days, so I can now set my street cleaning days from my phone!
So if I have it set for the South side of the street (reminding me to move the car on Tuesdays and Fridays), my calendar looks like this:
And then I go somewhere and when I come back I park on the North side. So I text "cleander n" to 88147, and the reminders jump to Mondays and Thursday, (excluding any day in the green holiday calendar):
Zeep recognizes my phone number and uses the "cleander" string to route everything following it to my ASP.NET page in an HTTP POST request.
When the message gets to my site, the "n" or "s" populate the calendar with reminders on the appropriate days, an empty text clears the calendar completely (useful for going on vacation), and anything else will result in an error response.
I've saved "cleander n" and "cleander s" as message templates on my phone, so now any time I park it's just a few quick clicks.
Of course it will all fall apart in 90 days when my AspSpider account is deleted, but in the meantime maybe I'll be able to find some other free hosting option: all I need is to be able to run some sort of code in response to a POST request; the code is in C# right now, but it's short, and Google has APIs for Python and PHP and Java and whatnot as well, so I should be able to find something that works.
Update: Okay, Google's AppEngine will totally do what I need. I'll try it out tonight. It's fun and amusing to cobble together a baroque solution like this all to accomplish something that would take no effort at all if stupid T-Mobile would let me run a program on my phone in the first place. but also sort of depressing that I have to.
Update Deuce: This makes me feel a little better...apparently I'd have to do something similar on the Apple phone, as they don't provide a calendar API. Android does, but it's undocumented, though I would assume they make syncing with Google Calendars pretty easy so maybe it's less work. Palm gets it right.
So if I have it set for the South side of the street (reminding me to move the car on Tuesdays and Fridays), my calendar looks like this:
And then I go somewhere and when I come back I park on the North side. So I text "cleander n" to 88147, and the reminders jump to Mondays and Thursday, (excluding any day in the green holiday calendar):
Zeep recognizes my phone number and uses the "cleander" string to route everything following it to my ASP.NET page in an HTTP POST request.
When the message gets to my site, the "n" or "s" populate the calendar with reminders on the appropriate days, an empty text clears the calendar completely (useful for going on vacation), and anything else will result in an error response.
I've saved "cleander n" and "cleander s" as message templates on my phone, so now any time I park it's just a few quick clicks.
Of course it will all fall apart in 90 days when my AspSpider account is deleted, but in the meantime maybe I'll be able to find some other free hosting option: all I need is to be able to run some sort of code in response to a POST request; the code is in C# right now, but it's short, and Google has APIs for Python and PHP and Java and whatnot as well, so I should be able to find something that works.
Update: Okay, Google's AppEngine will totally do what I need. I'll try it out tonight. It's fun and amusing to cobble together a baroque solution like this all to accomplish something that would take no effort at all if stupid T-Mobile would let me run a program on my phone in the first place. but also sort of depressing that I have to.
Update Deuce: This makes me feel a little better...apparently I'd have to do something similar on the Apple phone, as they don't provide a calendar API. Android does, but it's undocumented, though I would assume they make syncing with Google Calendars pretty easy so maybe it's less work. Palm gets it right.
Wednesday, September 2, 2009
Nerdery
So after being stymied (is that anti-Semitic?) in my attempt to run an alternate-side parking reminder program on my phone, I finally decided to just write a desktop version:
It sets up recurring events for the beginning and end of street cleaning hours, with an SMS reminder 10 minutes before, and excluding any days listed on a user-specified "holidays" calendar.
So, almost fine. I'll still need to remember to run the program after I get home and park my car, whereas with the mobile application I could have done it right from the phone. But text reminders and not having to set alarms twice a day on street cleaning days gets me 80% of what I wanted.
Something I definitely want to look into is the possibility of using an SMS web gateway to control a similar program running on a web server. I don't know if there are any free web hosts that allow you to run .NET or Python programs...you'd think that kind of thing would be de riguer in this day'n'age, but you could fill a wikipedia with what I don't know about internets hostering.
Update: I forgot to specify that when I wrote "sets up recurring events" that I meant it adds them to a Google calendar. That's where I got the idea to exclude holidays, because there's already a public calendar I subscribe to with all the street cleaning holidays. I also neglected to include the name of the project, which is "Cleanendar" and makes perfect sense.
It sets up recurring events for the beginning and end of street cleaning hours, with an SMS reminder 10 minutes before, and excluding any days listed on a user-specified "holidays" calendar.
So, almost fine. I'll still need to remember to run the program after I get home and park my car, whereas with the mobile application I could have done it right from the phone. But text reminders and not having to set alarms twice a day on street cleaning days gets me 80% of what I wanted.
Something I definitely want to look into is the possibility of using an SMS web gateway to control a similar program running on a web server. I don't know if there are any free web hosts that allow you to run .NET or Python programs...you'd think that kind of thing would be de riguer in this day'n'age, but you could fill a wikipedia with what I don't know about internets hostering.
Update: I forgot to specify that when I wrote "sets up recurring events" that I meant it adds them to a Google calendar. That's where I got the idea to exclude holidays, because there's already a public calendar I subscribe to with all the street cleaning holidays. I also neglected to include the name of the project, which is "Cleanendar" and makes perfect sense.
Monday, August 31, 2009
Dog-Proofing the Litter Box
I was googling around for info on keeping dogs out of the kitty litter a little while ago and ended up at a site that sells covered cat boxes that dogs can't get into. They're sort of expensive, and a little more complicated that what we'd need since Prancis is big enough that he could be foiled by something pretty simple. Here's what I came up with:
It's not to scale, but there's the general idea...a little doorway for the cats and an interior wall to keep Prancis away from the goodies. (The litter box on the inside is a model I found on the web.)
I got the wood cut to size at the wood store and put it together with drywall screws because they are the best.
They wouldn't do curved cuts, so I had to get a jigsaw (racist).
And here it is set up:
The Colonel (and hence Lucy) can get in:
But Prancis cannot:
I still need to sand and paint it. The inside should be glossy white for ease of cleaning. Not sure what we'll do with the outside.
It's not to scale, but there's the general idea...a little doorway for the cats and an interior wall to keep Prancis away from the goodies. (The litter box on the inside is a model I found on the web.)
I got the wood cut to size at the wood store and put it together with drywall screws because they are the best.
They wouldn't do curved cuts, so I had to get a jigsaw (racist).
And here it is set up:
The Colonel (and hence Lucy) can get in:
But Prancis cannot:
I still need to sand and paint it. The inside should be glossy white for ease of cleaning. Not sure what we'll do with the outside.
Tuesday, August 18, 2009
Red Bulls!
Via Atrios, one can now take NJ Transit to Giants stadium. I should go watch some soccer!
Friday, August 14, 2009
Tuesday, August 11, 2009
What Digby Said
What Digby said:
If these Democrats had spent less time gossiping about what Clinton really did with Monica or handwringing about Gore's "lies" and more time analyzing how those spectacles unfolded, they wouldn't be caught flat footed today. But they didn't because they blamed Clinton for being "weak" and Gore for being "inauthentic" as if those were the real problems. I'm sure it made them feel very confident that it couldn't happen to them.Though actually I had been surprised with how well the Obama administration was doing in this regard, right up until the health insurance reform lunacy. My guess is that the economic crisis had media types genuinely unsure of the future, to the point where they were less willing to undermine a president who seemed to be trying to make things better, even if he was a Democrat. Now that we're on more familiar ground, it's back to business as usual.
Sunday, August 2, 2009
Baseball Sex
Man, it's been forever since I downloaded mix tapes...now Gucci Mane is everywhere? With OJ Da Juiceman?
But Lil Wayne's "Baseball Sex" was basically designed in a laboratory to appeal specifically to me.
But Lil Wayne's "Baseball Sex" was basically designed in a laboratory to appeal specifically to me.
Monday, July 27, 2009
The Victim-Blaming Impulse
Excellent post from Amanda on abusive police. Especially this passage:
Victim blamers are often also telling a story about how they personally will never be...arrested unfairly for doing something totally legal. To blame Gates for being stupid is to say, "I would never get arrested for breaking into my house, because I have the sort of self-preservation instincts that this man is clearly missing." People enjoy the illusion of having more mastery of the world than they do, because it makes them feel safe, but it also contributes to an atmosphere where victim-blaming can flourish, particularly in situations that are loaded with racial or gender politics.I think this is hugely significant. And also tragic, because it's a reaction basically rooted in the recognition of just how horrible it would be to find oneself in a victim's situation, i.e., empathy. Ideally we'd be able to channel that initial identification with the victim toward something more constructive.
Cyclones @ Yankees
Well we finally made it to the Ballpark at St George on Staten Island, which was as awesome as advertised. The seats along the third base side have the best views of the harbor. Crazy thunderstorms prompted two separate rain delays, neither of which were called when it was actually raining...very bush league, guys.
Great game, though. The Yankees came back against an early Cyclones lead, but couldn't quite overcome the Brooklyn powerhouse. Wish it hadn't run so long that the ferries were on their hourly schedule by the end, but what can you do.
Great game, though. The Yankees came back against an early Cyclones lead, but couldn't quite overcome the Brooklyn powerhouse. Wish it hadn't run so long that the ferries were on their hourly schedule by the end, but what can you do.
Friday, July 24, 2009
Barcode Question
You know when you buy tickets to something, or check in for a flight, online, and they send you an Url you can click on to print your tickets out at home? And then you bring in the ticket and they scan the barcode? The tickets are full page deals, which seems like such a waste: can I print 2- or 4-to-a-page and still have them scan?
May try a few mini tickets in Staten Island just to check.
May try a few mini tickets in Staten Island just to check.
Setup Error
I have been working on this stupid bug like all week: one of my programs would occaisionally pop up a window entitled "Setup Error," with the contents "Failed to load resources from resource file. Please check your Setup" and then disappear when the window was dismissed: no exceptions to catch, no other clue as to what might be wrong.
It's evidently a symptom that can arise under several different circumstances: I found several people who saw it when causing an infinite recursion, or when running an application on a machine with certain third-party anti-virus software installed. I didn't find anything that sounded like my circumstances, so I record them here in hopes that frustrated searchers might be helped along.
My setup and architecture were as follows:
I'm still not sure exactly what I was doing wrong, or whether I was encountering a bug in the framework. I refactored the code to get rid of my inner message loop and it seems to have fixed things, so I assume that the implementation of the forms timer somehow relies on its only being maintained by the built-in message loop...but in such a way that causes only certain other methods to fail? It's a mystery.
It's evidently a symptom that can arise under several different circumstances: I found several people who saw it when causing an infinite recursion, or when running an application on a machine with certain third-party anti-virus software installed. I didn't find anything that sounded like my circumstances, so I record them here in hopes that frustrated searchers might be helped along.
My setup and architecture were as follows:
- .NET Framework 1.1;
- One UI event handler hides the main form and creates another form, displayed in its own Get/Translate/Dispatch message loop until it's closed;
- The new form creates a System.Windows.Forms timer;
- At which point, certain calls (the two I found were System.Threading.Thread.Start() and the overloaded System.Xml.XmlDocument.Load() that takes a URI string; the one taking a TextReader worked fine) cause the "Setup Error" when made from the timer elapsed event handler.
I'm still not sure exactly what I was doing wrong, or whether I was encountering a bug in the framework. I refactored the code to get rid of my inner message loop and it seems to have fixed things, so I assume that the implementation of the forms timer somehow relies on its only being maintained by the built-in message loop...but in such a way that causes only certain other methods to fail? It's a mystery.
Please Save Us from the Liberals
Some of the commentary around the Skip Gates arrest regarding how much benefit of the doubt to give the police officer has been pretty absurd. But Bob Somerby's hints towards police apologia are positively risible:
Teasing his upcoming Friday post, Somerby opts for verbal irony:
And then this:
A reminder: Democrats, and liberals, do great with the working class. It's those of the suburban middle class who like to defend their Republican voting habits by claiming that progressives are out-of-touch elitist snobs; the voters who seek out "safe neighborhoods" with "good schools" and worry about "personal responsibility," and vote Republican because John Kerry looks French. Those people are out of Democrats' reach, for what should be obvious reasons.
One set of people that liberals could do better with are those on the left who see things like Democrats turning a blind eye towards police thuggery as a reason to vote third-party or stay home. Somerby is an all likelihood correct that "progressive interests" don't have anything to do with resisting abuse of authority; to which I say, to hell with progressive interests, and to hell with liberals who side with the bullying cop over the rich professor because it will play in Peoria.
Gates is wealthy, affluent—famous, influential. Officer Crowley quite plainly is not—which forms part of a famous old American story.As if Gates had demanded "do you know who I am?" of a surly counter clerk at Au Bon Pain, rather than the armed officer of the law standing in his foyer.
Teasing his upcoming Friday post, Somerby opts for verbal irony:
Guess what, kids? Upper-class people, of whatever race, often have trouble respecting working-class people.And cops "often have trouble" acknowledging the rights of (let alone respecting) anybody without a badge. And I will grant in a heartbeat that we wouldn't have heard word one about this injustice had the victim not been a Harvard professor, but that's an argument for more scrutiny of law enforcement, not less.
And then this:
(Persistently, this has harmed progressive interests.)Again, this is part of the teaser for Somerby's Friday post, so I can't really say exactly how his argument for this point will go. But from the content of this post, it sure looks like it might be along the lines of clueless limousine liberals who don't have time for the concerns of the working class. Which is normally the kind of nonsense that Somerby is so good at taking apart, so it's especially annoying to see inklings of it here.
A reminder: Democrats, and liberals, do great with the working class. It's those of the suburban middle class who like to defend their Republican voting habits by claiming that progressives are out-of-touch elitist snobs; the voters who seek out "safe neighborhoods" with "good schools" and worry about "personal responsibility," and vote Republican because John Kerry looks French. Those people are out of Democrats' reach, for what should be obvious reasons.
One set of people that liberals could do better with are those on the left who see things like Democrats turning a blind eye towards police thuggery as a reason to vote third-party or stay home. Somerby is an all likelihood correct that "progressive interests" don't have anything to do with resisting abuse of authority; to which I say, to hell with progressive interests, and to hell with liberals who side with the bullying cop over the rich professor because it will play in Peoria.
Thursday, July 23, 2009
Having not been to a Cyclones game (yet!) this summer...
...I have no idea whether, or in what capacity, the team may have made use of Jay-Z's "Brooklyn (Go Hard)", but now that I'm thinking about it, it seems like an ideal stadium chant.
Of course immediately you run into the problem of, with the "Brooklyn, we go hard" chant and then "Brooklyn" spelled out over it, is doing that as a group in an audience setting really something that is rhythmically within the grasp of your average baseball fan?
And then of course I realized that minor league baseball was probably not the sport for which Jay-Z intended the song to function as a cheer, and I looked up the lyrics and he even mentions how he's going to "bring the Nets" in a verse of the song.
So I'm an idiot basically, but also I hope they've been playing the song at KeySpan.
Of course immediately you run into the problem of, with the "Brooklyn, we go hard" chant and then "Brooklyn" spelled out over it, is doing that as a group in an audience setting really something that is rhythmically within the grasp of your average baseball fan?
And then of course I realized that minor league baseball was probably not the sport for which Jay-Z intended the song to function as a cheer, and I looked up the lyrics and he even mentions how he's going to "bring the Nets" in a verse of the song.
So I'm an idiot basically, but also I hope they've been playing the song at KeySpan.
Tuesday, July 21, 2009
The Capitalist Solution to Health Care: More Money for Capitalsts
The apologists for capitalism really are beyond parody.
I will quibble with digby's implication that this has anything to do with a misplaced faith in markets per se; there's nothing inherently absurd about insurance insurance (and it sort of exists in, e.g., auto policies that include coverage for collisions with uninsured drivers), and if there were sufficient demand for those kinds of policies then insurance companies would offer them.
That's not good enough for the likes of Cato, however, who aren't happy unless the very maximum amount of wealth is being extracted from the populace and funneled into corporate coffers. The crisis of the medically at-risk being insufficiently covered by rapacious insurance companies becomes the opportunity for those selfsame insurers to squeeze out one more drop of blood. Such is the nature of capitalism: markets are a means to an end, but it is the end—the continued ascendancy of the capitalist class—that is paramount, and when markets aren't getting the job done they are dropped to the side without a second thought.
I will quibble with digby's implication that this has anything to do with a misplaced faith in markets per se; there's nothing inherently absurd about insurance insurance (and it sort of exists in, e.g., auto policies that include coverage for collisions with uninsured drivers), and if there were sufficient demand for those kinds of policies then insurance companies would offer them.
That's not good enough for the likes of Cato, however, who aren't happy unless the very maximum amount of wealth is being extracted from the populace and funneled into corporate coffers. The crisis of the medically at-risk being insufficiently covered by rapacious insurance companies becomes the opportunity for those selfsame insurers to squeeze out one more drop of blood. Such is the nature of capitalism: markets are a means to an end, but it is the end—the continued ascendancy of the capitalist class—that is paramount, and when markets aren't getting the job done they are dropped to the side without a second thought.
Wednesday, July 15, 2009
My Afternoon on the Internet
I have a recurring idea that it would be sweet to make some sort of 2D platform type game but with really awesome character animation, like if not actually rotoscoped then approaching rotoscope-caliber.
Sometimes I even start trying to animate a walk cycle before I remember that making awesome character animation is actually really difficult, and if you can pull it off then it is pretty much enough to carry a hit game. I have literally wanted to do something along these lines since I was making crappy games on the Mac using Ingemar's Sprite Animation Toolkit. And it haunts me yet!
The latest incarnation of this lunacy was an idea I had, while walking the dog, that there should be a game where the player is a dog, but only it's animated totally awesome and you can sit down and gallop and stuff and it looks like the movements of an actual dog, albeit 2D and lo-res. Amazing right!
And actually there is a game where you're a dog, but it's 3D and for the Playstation Deuce and the character animation is not even that good. (No disrespect, the animators did a great job, but it looks like they didn't use motion capture, so it's both not quite realistic and damned impressive that it looks as realistic as it does.)
And thus did I find myself searching for visual references regarding the canine walk cycle, which led me to this link, and damn. That page is huge! And loaded with diagrams! And very heavily footnoted!
And then I scrolt up to the top of the page and it was chapter ninety-one! Of what?!? A textbook with the best cover graphic ever.
Sometimes I even start trying to animate a walk cycle before I remember that making awesome character animation is actually really difficult, and if you can pull it off then it is pretty much enough to carry a hit game. I have literally wanted to do something along these lines since I was making crappy games on the Mac using Ingemar's Sprite Animation Toolkit. And it haunts me yet!
The latest incarnation of this lunacy was an idea I had, while walking the dog, that there should be a game where the player is a dog, but only it's animated totally awesome and you can sit down and gallop and stuff and it looks like the movements of an actual dog, albeit 2D and lo-res. Amazing right!
And actually there is a game where you're a dog, but it's 3D and for the Playstation Deuce and the character animation is not even that good. (No disrespect, the animators did a great job, but it looks like they didn't use motion capture, so it's both not quite realistic and damned impressive that it looks as realistic as it does.)
And thus did I find myself searching for visual references regarding the canine walk cycle, which led me to this link, and damn. That page is huge! And loaded with diagrams! And very heavily footnoted!
And then I scrolt up to the top of the page and it was chapter ninety-one! Of what?!? A textbook with the best cover graphic ever.
If only Netflix had been around during college
Just remembering all those all-night bull sessions spent debating which Meatballs sequel was most Lynchian.
Tuesday, July 14, 2009
Personal Virtue as a Poor Substitute for Political Change
Via the Just Seeds blog, a great article summing up the flaws inherent in the personal virtue model of social change.
Not a new idea by any means, but one that I've always found interesting and thought-provoking. I've always liked Noam Chomsky's succinct rejoinder along these lines:
And it really is a distraction, as teeth-gnashing over one's contribution to gentrification, for example, ends up being "white guilt" of the most pointless sort: you either waste your time twisting yourself into knots, trying to explain how you're actually not part of the problem; or you shrug your shoulders and resign yourself to being an irredeemable oppressor, and thus liberated from any responsibility to change the system.
Not a new idea by any means, but one that I've always found interesting and thought-provoking. I've always liked Noam Chomsky's succinct rejoinder along these lines:
Q: [H]ow can you justify living a bourgeois life and driving a nice car?Just so. It's an obvious point, but so easy to lose track of in our culture, even once you're aware of the dynamic at work.
A: ... When I go to visit peasants in southern Colombia, they don't want me to give up my car. They want me to help them.
And it really is a distraction, as teeth-gnashing over one's contribution to gentrification, for example, ends up being "white guilt" of the most pointless sort: you either waste your time twisting yourself into knots, trying to explain how you're actually not part of the problem; or you shrug your shoulders and resign yourself to being an irredeemable oppressor, and thus liberated from any responsibility to change the system.
Monday, July 13, 2009
Dog Walk Conversation
"How much did you pay for that dog?"
"He's from a shelter, so nothing."
"What's his name, German shepherd?"
"Uh, it's Prancy."
"Okay, Fancy. Don't bite me."
"Oh, he doesn't bite."
"Yes he does."
"He's from a shelter, so nothing."
"What's his name, German shepherd?"
"Uh, it's Prancy."
"Okay, Fancy. Don't bite me."
"Oh, he doesn't bite."
"Yes he does."
Calorie Labeling
Ezra has an anecdote about how a restaurant labeling its menu items with calorie counts would have changed his lunch order. At the Mets game Saturdy we noticed that the roving food vendors now wear buttons advertising the calorie counts of their wares. It was a welcome bit of information, and did lead one of our number away from the fallacious "not sure if I could eat a whole hot dog, maybe just a soft pretzel" line of thinking.
The game, by the way, was great, and we all had a blast on our first visits to Citi Field. Santana was amazing, and though for the most of the game he didn't leave the rest of the Mets defense with much to do (probably a good thing), we did get to see a double play in the latter innings. And though rain threatened from about the seventh inning stretch on, it held off until we were on the way home.
The game, by the way, was great, and we all had a blast on our first visits to Citi Field. Santana was amazing, and though for the most of the game he didn't leave the rest of the Mets defense with much to do (probably a good thing), we did get to see a double play in the latter innings. And though rain threatened from about the seventh inning stretch on, it held off until we were on the way home.
Friday, June 26, 2009
Boo
The program I wanted to write for my phone was simple: I wanted to be able to select which side of the street my car was parked on, and have it add alarms to the calendar reminding me to move my car for street cleaning on the appropriate days of the coming week.
It was easy! And it runs perfectly in the Nokia emulator, but when I tried running it on my actual phone...SecurityException!
And basically I'm screwed, as it seems T-Mobile locks everything down...no "third party" access to user data (such as the calendar) at all.
Of course, I'm not even a "third party," I'm the second party, the owner of the phone. How annoying.
Needless to say, my next telephone will run Lunix.
And my code I hereby release into the public domain:
package street;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.pim.*;
/**
* @author Travis
*/
public class StreetCleaning extends MIDlet implements ItemStateListener {
public void startApp() {
Form form = new Form("Street Cleaning");
options = new ChoiceGroup(null, Choice.EXCLUSIVE);
options.append("North (Mon/Thu)", null);
options.append("South (Tue/Fri)", null);
options.append("None", null);
form.append(options);
form.setItemStateListener(this);
Display.getDisplay(this).setCurrent(form);
}
ChoiceGroup options;
static final String summary = "Move car";
public void itemStateChanged(Item item) {
PIM pim = PIM.getInstance();
String reminders = pim.listPIMLists(PIM.EVENT_LIST)[4];
Calendar today = Calendar.getInstance();
try {
EventList events = (EventList)pim.openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE, reminders);
// get rid of existing notices
for (Enumeration items = events.items(); items.hasMoreElements(); ) {
Event event = (Event)items.nextElement();
if (event.getString(Event.SUMMARY, PIMItem.ATTR_NONE).equals(summary))
events.removeEvent(event);
}
// select days of week based on side of street
int[] days;
int side = options.getSelectedIndex();
if (side == 0) {
days = new int[2];
days[0] = Calendar.MONDAY;
days[1] = Calendar.THURSDAY;
}
else if (side == 1) {
days = new int[2];
days[0] = Calendar.TUESDAY;
days[1] = Calendar.FRIDAY;
}
else
days = new int[0];
for (int i = 0; i < days.length; i++) {
// set alarms for next coming weekday
int apart = days[i] - today.get(Calendar.DAY_OF_WEEK);
if (apart < 0 ||
apart == 0 && today.get(Calendar.HOUR_OF_DAY) > 10)
apart += 7;
// first event
Calendar day = Calendar.getInstance();
day.setTime(new Date(day.getTime().getTime() + apart * 24 * 3600 * 1000));
day.set(Calendar.HOUR_OF_DAY, 8);
day.set(Calendar.MINUTE, 20);
day.set(Calendar.SECOND, 0);
day.set(Calendar.MILLISECOND, 0);
Event event = events.createEvent();
event.addDate(Event.START, PIMItem.ATTR_NONE, day.getTime().getTime());
event.addInt(Event.ALARM, PIMItem.ATTR_NONE, 1);
event.addString(Event.SUMMARY, PIMItem.ATTR_NONE, summary);
events.importEvent(event).commit();
// second event
day.set(Calendar.HOUR_OF_DAY, 9);
day.set(Calendar.MINUTE, 50);
event = events.createEvent();
event.addDate(Event.START, PIMItem.ATTR_NONE, day.getTime().getTime());
event.addInt(Event.ALARM, PIMItem.ATTR_NONE, 1);
event.addString(Event.SUMMARY, PIMItem.ATTR_NONE, summary);
events.importEvent(event).commit();
}
}
catch (PIMException ex) {
Display.getDisplay(this).setCurrent(new Alert(ex.getMessage()));
}
destroyApp(false);
notifyDestroyed();
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
It was easy! And it runs perfectly in the Nokia emulator, but when I tried running it on my actual phone...SecurityException!
And basically I'm screwed, as it seems T-Mobile locks everything down...no "third party" access to user data (such as the calendar) at all.
Of course, I'm not even a "third party," I'm the second party, the owner of the phone. How annoying.
Needless to say, my next telephone will run Lunix.
And my code I hereby release into the public domain:
package street;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.pim.*;
/**
* @author Travis
*/
public class StreetCleaning extends MIDlet implements ItemStateListener {
public void startApp() {
Form form = new Form("Street Cleaning");
options = new ChoiceGroup(null, Choice.EXCLUSIVE);
options.append("North (Mon/Thu)", null);
options.append("South (Tue/Fri)", null);
options.append("None", null);
form.append(options);
form.setItemStateListener(this);
Display.getDisplay(this).setCurrent(form);
}
ChoiceGroup options;
static final String summary = "Move car";
public void itemStateChanged(Item item) {
PIM pim = PIM.getInstance();
String reminders = pim.listPIMLists(PIM.EVENT_LIST)[4];
Calendar today = Calendar.getInstance();
try {
EventList events = (EventList)pim.openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE, reminders);
// get rid of existing notices
for (Enumeration items = events.items(); items.hasMoreElements(); ) {
Event event = (Event)items.nextElement();
if (event.getString(Event.SUMMARY, PIMItem.ATTR_NONE).equals(summary))
events.removeEvent(event);
}
// select days of week based on side of street
int[] days;
int side = options.getSelectedIndex();
if (side == 0) {
days = new int[2];
days[0] = Calendar.MONDAY;
days[1] = Calendar.THURSDAY;
}
else if (side == 1) {
days = new int[2];
days[0] = Calendar.TUESDAY;
days[1] = Calendar.FRIDAY;
}
else
days = new int[0];
for (int i = 0; i < days.length; i++) {
// set alarms for next coming weekday
int apart = days[i] - today.get(Calendar.DAY_OF_WEEK);
if (apart < 0 ||
apart == 0 && today.get(Calendar.HOUR_OF_DAY) > 10)
apart += 7;
// first event
Calendar day = Calendar.getInstance();
day.setTime(new Date(day.getTime().getTime() + apart * 24 * 3600 * 1000));
day.set(Calendar.HOUR_OF_DAY, 8);
day.set(Calendar.MINUTE, 20);
day.set(Calendar.SECOND, 0);
day.set(Calendar.MILLISECOND, 0);
Event event = events.createEvent();
event.addDate(Event.START, PIMItem.ATTR_NONE, day.getTime().getTime());
event.addInt(Event.ALARM, PIMItem.ATTR_NONE, 1);
event.addString(Event.SUMMARY, PIMItem.ATTR_NONE, summary);
events.importEvent(event).commit();
// second event
day.set(Calendar.HOUR_OF_DAY, 9);
day.set(Calendar.MINUTE, 50);
event = events.createEvent();
event.addDate(Event.START, PIMItem.ATTR_NONE, day.getTime().getTime());
event.addInt(Event.ALARM, PIMItem.ATTR_NONE, 1);
event.addString(Event.SUMMARY, PIMItem.ATTR_NONE, summary);
events.importEvent(event).commit();
}
}
catch (PIMException ex) {
Display.getDisplay(this).setCurrent(new Alert(ex.getMessage()));
}
destroyApp(false);
notifyDestroyed();
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
New Level of Nerddom
Somehow both Andrew and Dmitry were under the impression that, back when Andrew and Jay and I all had Palms III, I had actually written software for it to track my expenses. I did have a program like that, but I sure didn't write it.
I can't remember if I ever actually tried setting up a Palm development environment; at the time my only computers were a beige Mac and a couple PC's running Slackware, so it's quite possible there wasn't anything available, or available for free. I am pretty sure I had a Palm simulator for the Mac, but I think I only used it to play Parking Lot.
In any case, I just downloaded NetBeans and the Nokia S40 platform SDK. :( I want to write a program that sets my alarm clock for street cleaning. :((((((((((((((
I can't remember if I ever actually tried setting up a Palm development environment; at the time my only computers were a beige Mac and a couple PC's running Slackware, so it's quite possible there wasn't anything available, or available for free. I am pretty sure I had a Palm simulator for the Mac, but I think I only used it to play Parking Lot.
In any case, I just downloaded NetBeans and the Nokia S40 platform SDK. :( I want to write a program that sets my alarm clock for street cleaning. :((((((((((((((
Tuesday, June 23, 2009
Friday, June 19, 2009
Herack Oboover
I have not yet gotten to the Obama-as-Hoover article in the current Harper's (I am weirdly fastidious about reading each issue completely, and in strict order, though on occasion I do read "Findings" without having finished the crossword), but this sounds very accurate to me:
Obama’s failure would be unthinkable. And yet the best indications now are that he will fail, because he will be unable—indeed he will refuse—to seize the radical moment at hand.
Wednesday, June 17, 2009
Monday, June 15, 2009
Homemade Cargo Bike
Saw this just now walking the dog:
It's a slightly modified shopping cart strapped to the front fork with hose clamps. The two front wheels are each attached to forks as well, also connected to the basket with hose clamps. I didn't think to inspect the headset, but I guess there must be a stem in there to hold it together, but with no bars other than the handle of the shopping cart.
So not only useful, but also welding-free and completely reversible.
It's a slightly modified shopping cart strapped to the front fork with hose clamps. The two front wheels are each attached to forks as well, also connected to the basket with hose clamps. I didn't think to inspect the headset, but I guess there must be a stem in there to hold it together, but with no bars other than the handle of the shopping cart.
So not only useful, but also welding-free and completely reversible.
Friday, May 29, 2009
All Side Effect
Pretty sure this fails to conform to the intended use of properties:
int _alarmEventCount = 0;
public int alarm { set { _alarmEventCount += 1; } }
Not my code, but by a coworker who is good, so I'm sure there's a logical reason how it came about.
int _alarmEventCount = 0;
public int alarm { set { _alarmEventCount += 1; } }
Not my code, but by a coworker who is good, so I'm sure there's a logical reason how it came about.
Thursday, May 28, 2009
Hair Clipping Issues
This is stupid. There is an ultimate fighting video game coming out that cut a character because they couldn't figure out how to render his hair. Which, fine, maybe if you didn't take something like hair physics into account early in the project, then you get to the character models and can't figure out a way to make it look non-stupid.
But then they tried to get the actual guy to cut his hair, so they could give the character model short hair. Why not just give the character model a haircut? People would understand.
And up until that point I'm giving the game studio the benefit of the doubt, because I can understand how that could be a kind of unforeseen wrench in the works for which there's not an obviously ideal solution. But it turns out their game also can't show people fighting in a left-handed stance...so they show everyone as right-handed! Seriously that is like making a baseball game and realizing your engine can't handle bats so they just render everyone with golf clubs.
But then they tried to get the actual guy to cut his hair, so they could give the character model short hair. Why not just give the character model a haircut? People would understand.
And up until that point I'm giving the game studio the benefit of the doubt, because I can understand how that could be a kind of unforeseen wrench in the works for which there's not an obviously ideal solution. But it turns out their game also can't show people fighting in a left-handed stance...so they show everyone as right-handed! Seriously that is like making a baseball game and realizing your engine can't handle bats so they just render everyone with golf clubs.
Tuesday, May 26, 2009
It's Wiffin' Season!
Played some solid w-ball on Sundy, in honor of our fallen soldiers.
We played this version under which, instead of keeping track of imaginary baserunners, you have to actually run on a hit and then get an increasing number of points for each base you get to safely; fielders throw the runner out by getting the ball back to the mound with the runner off-base.
It makes playing with more than two people easier because each person has their own score, and you don't have to worry about teams or anything. And the get-the-ball-to-the-mound dynamic introduces some of the interesting parts of baseball that are left out from the wiffle rules I've played under before: for example, if the pitcher runs to field a grounder, one of the other players on defense needs to cover the mound to get the out; and it actually becomes advantageous to throw pitches that will be hit for grounders that will be fielded for an out, whereas under the official rules it's often better to go for a fly out.
We also played using the softball ("king") size wiffle ball, which was not as weird as I had anticipated. It actually seemed to curve better than the baseball size, though maybe it was just that the larger size made the motion more visible. It's definitely easier to jam a finger in one of the holes (nullus) to throw a changeup, though. In any case, I had some success with the changeup/changeup combo, and with throwing a curve for a groundout, though my slider was as hittable as ever.
We played this version under which, instead of keeping track of imaginary baserunners, you have to actually run on a hit and then get an increasing number of points for each base you get to safely; fielders throw the runner out by getting the ball back to the mound with the runner off-base.
It makes playing with more than two people easier because each person has their own score, and you don't have to worry about teams or anything. And the get-the-ball-to-the-mound dynamic introduces some of the interesting parts of baseball that are left out from the wiffle rules I've played under before: for example, if the pitcher runs to field a grounder, one of the other players on defense needs to cover the mound to get the out; and it actually becomes advantageous to throw pitches that will be hit for grounders that will be fielded for an out, whereas under the official rules it's often better to go for a fly out.
We also played using the softball ("king") size wiffle ball, which was not as weird as I had anticipated. It actually seemed to curve better than the baseball size, though maybe it was just that the larger size made the motion more visible. It's definitely easier to jam a finger in one of the holes (nullus) to throw a changeup, though. In any case, I had some success with the changeup/changeup combo, and with throwing a curve for a groundout, though my slider was as hittable as ever.
Thursday, May 21, 2009
Kind of Disappointing
So no Democrat Socialist Party for us. Too bad, this stuff tickles me to no end.
Tuesday, May 19, 2009
The Book of Neuteronomy
So we are supposed to get Prancis's balls chopped off soon, and our neighbors told us about the ASPCA's mobile spay/neuter truck. It so happens that it's going to be near us on Saturday, and we can save a couple hundred dollars by getting him neutered there instead of at the vet's.
I am a little hesitant because the program is intended to provide services to low income communities and they perform only a limited number of operations (25 animals a day) on a first come/first served basis. There is a nominal fee for people without proof of public assistance, but even with that we could be preventing someone from getting their pet fixed for whom going to the vet would not be an option. If we want to minimize our impact as gentrifiers in our neighborhood, isn't this exactly the kind of thing we should be avoiding? On the other hand, it would save us $300, which is a significant amount of money...but maybe that makes it that much more unethical?
I don't know, I'm not sure what we'll decide. We've also discussed the possibility that 25 people might not even show up by seven on what is going to be a drizzly Saturday morning on a holiday weekend, but that feels like a rationalization.
I am a little hesitant because the program is intended to provide services to low income communities and they perform only a limited number of operations (25 animals a day) on a first come/first served basis. There is a nominal fee for people without proof of public assistance, but even with that we could be preventing someone from getting their pet fixed for whom going to the vet would not be an option. If we want to minimize our impact as gentrifiers in our neighborhood, isn't this exactly the kind of thing we should be avoiding? On the other hand, it would save us $300, which is a significant amount of money...but maybe that makes it that much more unethical?
I don't know, I'm not sure what we'll decide. We've also discussed the possibility that 25 people might not even show up by seven on what is going to be a drizzly Saturday morning on a holiday weekend, but that feels like a rationalization.
Monday, May 18, 2009
Balk Like an Egyptian
So Mike Pelfrey balked thrice against the Giants last night? Weird. I am fuzzy on what even constitutes a balk...the first one is obvious, I can see the second one, but the third one is just a mystery to me.
Friday, May 15, 2009
Andy Griffith Show Values
I love this classic non-apology apology: Kim Hendren is sorry he referred to Chuck Schumer as "that Jew"...because it "took away from what [Hendren] was trying to say"...which is how Chuck Jew-mer was trying to Jew up our Andy Griffith Show values with his Jewy wiles.
Perfect example about how when the right wing rhapsodizes about the good old days and 1950's values, it's not a case of forgetting about segregation, exclusive neighborhoods, and the reign of the closet. Rather, those things are exactly what they want to bring back.
Perfect example about how when the right wing rhapsodizes about the good old days and 1950's values, it's not a case of forgetting about segregation, exclusive neighborhoods, and the reign of the closet. Rather, those things are exactly what they want to bring back.
Thursday, May 14, 2009
Priorities
Atrios links to this LA news story about California "ghost" towns of foreclosed houses. There are all these people still living in half-empty neighborhoods with legitimate complaints about trashed abandoned houses that get used for gang hangouts, drug sales, and so forth.
But then all of a sudden attention turns to a house that's being squatted by...a family! Who can't be evicted because...they pay their utility bills? Uh, so what's the problem again?
Oh, I see, they don't maintain their lawn and neighbors would prefer a "nice family." Maybe leaving the place empty would be a better option? Hilariously, one person even complains about the squatters' impact on property value, as if that's still a thing.
Nice to see a dying community unite around the poor bankers, who just want their justly deserved "fees," and against the evilhomesteaders squatters who might actually have a shot at saving the neighborhood.
But then all of a sudden attention turns to a house that's being squatted by...a family! Who can't be evicted because...they pay their utility bills? Uh, so what's the problem again?
Oh, I see, they don't maintain their lawn and neighbors would prefer a "nice family." Maybe leaving the place empty would be a better option? Hilariously, one person even complains about the squatters' impact on property value, as if that's still a thing.
Nice to see a dying community unite around the poor bankers, who just want their justly deserved "fees," and against the evil
Wednesday, May 13, 2009
Dollhouse / In the Middle of the Street
I watched the season (and, in all likelihood, series) finale of Dollhouse earlier this week. My initial reading stands, I think, though it now appears to me as though the primary allegorical (and the premise and characters are more complex than mere allegory warrants, so this isn't intended as a comprehensive reading in any sense) import of "the Dollhouse" is as a representation of patriarchy, and the enforcement of rigid gender roles in particular.
That is, the feminist critique of capitalism is present (for example, in the commentary on the entertainment industry, and TV in particular), but it's more focused on the specific problems posed by patriarchal gender roles. The following musings contain many spoilers for the entire season.
The first indication of this is the name of the Dollhouse itself: the term "dollhouse" is certainly evocative, and does reflect the status of the Actives as mindless playthings, but it doesn't exactly make sense as a description of what the Dollhouse organization does in the fictional world. The organization bills itself as fulfilling clients' fantasies, whatever they may be. In contrast, an actual toy dollhouse is generally not seen as this kind of blank slate for a child's imagination to fill in freely; rather, it's a highly gendered toy, used almost exclusively by girls to act out (and rehearse) traditional gender roles.
Put another way, a dollhouse's immediate purpose is to allow a child to act out fantasies, but only of a very limited sort, while its larger purpose (not necessarily what it was intended for, but what it actually functions to do in the real world) is to enforce societal gender norms. Likewise, each Dollhouse branch is in the immediate business of allowing clients to act out certain of their fantasies, while there have been many allusions throughout the series to some greater project that the whole sprawling entity is working on.
The Actives under this framework are those whose true personalities have been supplanted by whatever pre-programmed identities are forced upon them. This is directly analogous to people who quash their own true desires in order to take on externally mandated (and often conflicting) gender roles defined by the patriarchy. Some remnants of their true selves (Alpha's sadism, Echo's suspiciousness, Victor's crush on Sierra) might leak through, but by and large they are completely displaced by the personalities they adopt to satisfy the needs of those around them.
This dynamic is nominally voluntary: as DeWitt constantly reminds everyone, the Actives work for the Dollhouse under legal contract. But the narrative reveals that for many of them, their choice to join the Dollhouse was not much of a choice at all. Thus is one of the standard apologies for problematic gender normative behavior—people are free to do what they want, and if that means wearing miniskirts then so be it—explicated within the framework of Dollhouse.
It is appropriate then that while the Dollhouse employs both male and female Actives, the majority of them are women. This reflects the disproportionate negative impact of enforced gender norms on women while acknowledging that men suffer under patriarchy as well. (Perhaps also of interest here is how Alpha and Echo react differently when they come to be inhabited by all of their programmed personalities simultaneously: Alpha experiences this as a liberating rebirth into godhood and destroys his original self, while Echo has no interest in these false personae, desiring only to pay her dues in the Dollhouse to win back her real identity.)
Characters aside from the Actives demonstrate other ways of interacting with the system of patriarchal gender norms. The two major "good guys," Boyd Langton and Paul Ballard, disagree with the Dollhouse's purpose and methods, but neither offers much promise of being able to do anything to stop it. Langton tries his best to keep an eye out for Echo, but his complicity in the Dollhouse project limits his impact. While Ballard initially appears devoted to taking down the Dollhouse, he comes to adopt the mentality of a "white knight," occupied more with rescuing Caroline in particular than in undermining the larger operation (tellingly, it takes Mellie, herself trapped within the clutches of the Dollhouse, to recognize this self-delusion for what it is). It is no accident that these two sympathetic male characters also comport themselves according to the norms of typical masculinity, guided by self-righteousness and doing their talking largely with their fists.
Topher, in contrast, does not conform to traditional masculine norms, but his misanthropic egotism and contempt for the Actives mean that he helps uphold patriarchy nonetheless. He's an example of someone who would actually benefit from a world without patriarchy, but goes along with it because feeling superior to its victims is easier than challenging the status quo. An example of someone escaping the stringent rules of patriarchy is given in the character of Whiskey, whose mutilation liberates her from gender expectations (note she becomes a doctor) because she cannot be easily sexually objectified under patriarchal standards of beauty (this option for freedom is, again, no option at all; disfigurement should not be a prerequisite for membership in humanity).
The remaining two characters, Dominic and DeWitt, don't really seem to function at the same allegorical level as the Actives and the rest of the supporting cast. Dominic is abstracted to the point of being an out and out symbol: he's the government that recognizes the power of patriarchy as a potential means to some future end, and keeps an eye on its activities as a result. DeWitt doesn't seem to be much more than a somewhat hackneyed archetype, the ball-breaking ice queen. That's clearly a role fraught with all kinds of more or less interesting gender dynamics, but it doesn't seem to be much informed by the Dollhouse-as-patriarchy framework.
So that's my reading of the show's motivating conceit. If the series does continue then I would expect its themes to evolve with it, the way Buffy's "battling the demons of adolescence" premise gave way to more complex themes. But it would also be nice to see how the story that's been told so far would work out, as I would also expect it to be consistent with this allegorical framework.
That is, the feminist critique of capitalism is present (for example, in the commentary on the entertainment industry, and TV in particular), but it's more focused on the specific problems posed by patriarchal gender roles. The following musings contain many spoilers for the entire season.
The first indication of this is the name of the Dollhouse itself: the term "dollhouse" is certainly evocative, and does reflect the status of the Actives as mindless playthings, but it doesn't exactly make sense as a description of what the Dollhouse organization does in the fictional world. The organization bills itself as fulfilling clients' fantasies, whatever they may be. In contrast, an actual toy dollhouse is generally not seen as this kind of blank slate for a child's imagination to fill in freely; rather, it's a highly gendered toy, used almost exclusively by girls to act out (and rehearse) traditional gender roles.
Put another way, a dollhouse's immediate purpose is to allow a child to act out fantasies, but only of a very limited sort, while its larger purpose (not necessarily what it was intended for, but what it actually functions to do in the real world) is to enforce societal gender norms. Likewise, each Dollhouse branch is in the immediate business of allowing clients to act out certain of their fantasies, while there have been many allusions throughout the series to some greater project that the whole sprawling entity is working on.
The Actives under this framework are those whose true personalities have been supplanted by whatever pre-programmed identities are forced upon them. This is directly analogous to people who quash their own true desires in order to take on externally mandated (and often conflicting) gender roles defined by the patriarchy. Some remnants of their true selves (Alpha's sadism, Echo's suspiciousness, Victor's crush on Sierra) might leak through, but by and large they are completely displaced by the personalities they adopt to satisfy the needs of those around them.
This dynamic is nominally voluntary: as DeWitt constantly reminds everyone, the Actives work for the Dollhouse under legal contract. But the narrative reveals that for many of them, their choice to join the Dollhouse was not much of a choice at all. Thus is one of the standard apologies for problematic gender normative behavior—people are free to do what they want, and if that means wearing miniskirts then so be it—explicated within the framework of Dollhouse.
It is appropriate then that while the Dollhouse employs both male and female Actives, the majority of them are women. This reflects the disproportionate negative impact of enforced gender norms on women while acknowledging that men suffer under patriarchy as well. (Perhaps also of interest here is how Alpha and Echo react differently when they come to be inhabited by all of their programmed personalities simultaneously: Alpha experiences this as a liberating rebirth into godhood and destroys his original self, while Echo has no interest in these false personae, desiring only to pay her dues in the Dollhouse to win back her real identity.)
Characters aside from the Actives demonstrate other ways of interacting with the system of patriarchal gender norms. The two major "good guys," Boyd Langton and Paul Ballard, disagree with the Dollhouse's purpose and methods, but neither offers much promise of being able to do anything to stop it. Langton tries his best to keep an eye out for Echo, but his complicity in the Dollhouse project limits his impact. While Ballard initially appears devoted to taking down the Dollhouse, he comes to adopt the mentality of a "white knight," occupied more with rescuing Caroline in particular than in undermining the larger operation (tellingly, it takes Mellie, herself trapped within the clutches of the Dollhouse, to recognize this self-delusion for what it is). It is no accident that these two sympathetic male characters also comport themselves according to the norms of typical masculinity, guided by self-righteousness and doing their talking largely with their fists.
Topher, in contrast, does not conform to traditional masculine norms, but his misanthropic egotism and contempt for the Actives mean that he helps uphold patriarchy nonetheless. He's an example of someone who would actually benefit from a world without patriarchy, but goes along with it because feeling superior to its victims is easier than challenging the status quo. An example of someone escaping the stringent rules of patriarchy is given in the character of Whiskey, whose mutilation liberates her from gender expectations (note she becomes a doctor) because she cannot be easily sexually objectified under patriarchal standards of beauty (this option for freedom is, again, no option at all; disfigurement should not be a prerequisite for membership in humanity).
The remaining two characters, Dominic and DeWitt, don't really seem to function at the same allegorical level as the Actives and the rest of the supporting cast. Dominic is abstracted to the point of being an out and out symbol: he's the government that recognizes the power of patriarchy as a potential means to some future end, and keeps an eye on its activities as a result. DeWitt doesn't seem to be much more than a somewhat hackneyed archetype, the ball-breaking ice queen. That's clearly a role fraught with all kinds of more or less interesting gender dynamics, but it doesn't seem to be much informed by the Dollhouse-as-patriarchy framework.
So that's my reading of the show's motivating conceit. If the series does continue then I would expect its themes to evolve with it, the way Buffy's "battling the demons of adolescence" premise gave way to more complex themes. But it would also be nice to see how the story that's been told so far would work out, as I would also expect it to be consistent with this allegorical framework.
Monday, May 11, 2009
"Empathize right on your behind!"
Bam, Michael Steele nails it. You be da man! My new voter registration as a Republican will be in the mail this afternoon.
Saturday, May 9, 2009
Current Object of Bike Lust
Saw one of these things this morning (at the farmers' market, natch). It looked like the couple it belonged to had two kids they'd brought in the cargo box.
Not sure where I'd park one, but 150 pounds is plenty for carrying a dog around...we'd looked at specs for some of the Danish-built ones that some companies used to import, and they maxed out at 100 pounds of cargo IIRC, which Prancis is not likely to exceed, but who knows.
So anyway that's tempting enough, but the Joe Bike prototype is seriously badass.
Not sure where I'd park one, but 150 pounds is plenty for carrying a dog around...we'd looked at specs for some of the Danish-built ones that some companies used to import, and they maxed out at 100 pounds of cargo IIRC, which Prancis is not likely to exceed, but who knows.
So anyway that's tempting enough, but the Joe Bike prototype is seriously badass.
Friday, May 8, 2009
Mets!
It's hard not to feel optimistic coming off the two wins in the mini series against Philly.
My ignorance of the sport of baseball means I'm not really aware of the psychological impact something like, say, pulling a pitcher out of the rotation, can have on the whole team, but it sure seems to have had a good effect so far. It's not so much the string of recent wins, but that they seem to be more like whole team affairs, rather than Johann carrying them or just getting lucky when an opposing pitcher blows it.
Looking forward to seeing how Jon Niese does tonight. I don't think I remember him from last season.
My ignorance of the sport of baseball means I'm not really aware of the psychological impact something like, say, pulling a pitcher out of the rotation, can have on the whole team, but it sure seems to have had a good effect so far. It's not so much the string of recent wins, but that they seem to be more like whole team affairs, rather than Johann carrying them or just getting lucky when an opposing pitcher blows it.
Looking forward to seeing how Jon Niese does tonight. I don't think I remember him from last season.
Thursday, May 7, 2009
The Caine Dootiny
Via Sadly, No!, wow, Michael Caine is a jackass. It's not like he pulled himself up by his own bootstraps in the midst of the Thatcherite capitalist paradise...he made his career in the 1960's, under the confiscatory tax structure decried by other working class lads made good.
Clearly, while some people are none too happy about their tax brackets once they've met with great success, the threat of high taxes was not enough to put them off their ambitions in the first place, so it's hard to take Iain Martin's scaremongering in the Telegraph column seriously. He seems to half recognize this, as he is very right to worry about "[a]ccess to the best schools...increasingly limited to the affluent." It's just his proposed remedy—slash taxes for the ultra wealthy—that's nonsense.
Clearly, while some people are none too happy about their tax brackets once they've met with great success, the threat of high taxes was not enough to put them off their ambitions in the first place, so it's hard to take Iain Martin's scaremongering in the Telegraph column seriously. He seems to half recognize this, as he is very right to worry about "[a]ccess to the best schools...increasingly limited to the affluent." It's just his proposed remedy—slash taxes for the ultra wealthy—that's nonsense.
Wednesday, May 6, 2009
Good Take on Supreme Court Vacancy
I like Ezra Klein's framing of the issue: the centrality of women's (and gay and racial minority) issues to what the SCOTUS does is exactly why non-(straight white male) candidates are so important.
And it is actually seriously incredible to me that an opinion columnist in a national paper can do a piece that boils down to "race and gender don't matter anymore so Obama should appoint a white man" and not get called out by an editor for the basic error in reasoning.
And it is actually seriously incredible to me that an opinion columnist in a national paper can do a piece that boils down to "race and gender don't matter anymore so Obama should appoint a white man" and not get called out by an editor for the basic error in reasoning.
Monday, May 4, 2009
She's a Superfund (She's Superfundy)
I'm glad it sounds like the Gowanus Superfund status is going to go through. The arguments against it all basically amounted to "it's going to be really hard to get people to live in housing built on a Superfund site," which, yeah. Is that supposed to persuade anyone?
Friday, May 1, 2009
Thursday, April 30, 2009
Asher Roth Officially Sucks
Of the three predictions written for Gawker of how well Asher Roth's album would do, Byron Crawford's was almost exactly right. It was especially nice to see Touré's prediction fail, his overestimate hinging as it did on myths about how "the majority of hip hop fans" are "suburban," "[think] hip hop is theirs," and "enjoy listening to and looking at someone who reminds them of themselves." This is pretty much wrong in every particular as well as mistaken overall.
I don't care one way or the other about Tom Breihan's being wrong, but it's interesting that he got caught up in the idea that Roth would succeed entirely due to successful marketing. If anyone should recognize the speciousness of that kind of thinking, you'd think it would be Lil Wayne's biggest mainstream stan...dard bearer. If it were as simple as marketing, every label would have a Soulja Boy or a T-Pain. One thing every label does have plenty of, however, is Asher Roths...not gimmicky white rappers with "suburban" schticks, but artists they've pumped zillions of promotional dollars into creating buzz around who subsequently put up lackluster album sales.
I don't care one way or the other about Tom Breihan's being wrong, but it's interesting that he got caught up in the idea that Roth would succeed entirely due to successful marketing. If anyone should recognize the speciousness of that kind of thinking, you'd think it would be Lil Wayne's biggest mainstream stan...dard bearer. If it were as simple as marketing, every label would have a Soulja Boy or a T-Pain. One thing every label does have plenty of, however, is Asher Roths...not gimmicky white rappers with "suburban" schticks, but artists they've pumped zillions of promotional dollars into creating buzz around who subsequently put up lackluster album sales.
Mistranslation?
People are probably aware of the Israeli minister who thinks "swine flu" is offensive to Jews and Muslims because it refers to a food they can't eat. I don't get it...I could see the objection if they named a deadly disease after something that Israelis do eat (falafel pox?), but it's hard for me to understand this one. I'm assuming he was mistranslated.
Tuesday, April 28, 2009
Exercising myself upon a dumb Bell
For some reason I find the quotes from this week's World Wide Words weird word, dumbbell, very hilarious. Apparently the original "dumb Bell" was just a fake bell that "affords the exercise called RINGING, by means of a rope, which comes thro’ the floor or floors down to a study or chamber, and was practised by an eminent physician who was very fat." Of course.
Subscribe to:
Posts (Atom)