How do I learn how to ask for help?

I’m currently listening to Amanda Palmer’s The Art of Asking audiobook.

I was born in the 1970s, grew up in the 1980s and 1990s, and a latch-key kid. On top of that, I’m an only child.

Amanda’s only a few months older than I am. We both grew up in the northeastern United States. She has an older sister, so she’s not an only child, like me.

If I ever wanted anything, I had to figure out how to get it myself. I had no one to ask for help.

I never learned how to ask for help.

She describes asking for help as this wonderful thing, where you just put your faith in the universe that if you just ask, that you can trust people who will answer.

The audiobook is filled with great stories of times where she’s needed things and just by asking, got what she needed, usually.

She tells the story of someone who doesn’t usually ask for help, and the one time he does, when he really needed it–to have his aunt reconcile with his dying mom–and she refused, it crushed him.

I may be misremembering details of the parable, as I was listening to it while driving, but I seem to recall her advice is to not only ask for help when you absolutely need it, but to just ask for help all the time, so that you can learn to handle rejection which is inevitable. Definitely sounds like some sage advice.

I don’t know how to ask for help.

The times when I need help, it’s because I don’t even know what I need. Exactly how do you ask the universe for help when you don’t even know what you need?

This is my conundrum. As someone who has learned to be wholly independent, if I knew what I needed, I would just go out and get it or go and do it myself.

I’m only half-way through Amanda’s audiobook, so maybe she’ll explain what to do in this situation. I wanted to get these thoughts down in writing while they were bouncing around in my head, though.

Do you know how to ask for help?

How did you learn how to ask for help?

Goodbye, DreamHost

I can’t believe that I’m canceling my DreamHost account, just one month shy of my 10 year anniversary with them.

Closing my DreamHost account

I first signed up for my DreamHost account back in January of 2006. For the most part, it’s been a great experience. I originally signed up for the two-year plan for $214.80 ($8.95/month), and added VPS to my account in March 2009, for an additional $18/month.

I was okay spending the extra money in order to have a VPS that I had full control over. DreamHost even tweeted about offering root access with their VPS back in February 2011. It was definitely part of the attraction for many customers.

dreamhost-root-vps-tweet

Then, on November 17, 2015, DreamHost sends out an email informing customers that in two weeks, they would be removing everyone’s sudo (root) access, on November 30.

Wow. Just … wow.

What recourse did we have? Try and sign up for their DreamCompute offering, which is still in public beta, and there’s now a wait-list to even get access to it?

Sell me a product, then take away a key feature but still charge the same price, while suggesting an upsell into a different product offering if I want to get that feature back? That’s called bait-and-switch, and that borders on fraud.

This was the last straw. Several times in the past I’ve wanted to switch away but was too busy to really do it, but this forced my hand: I had to move away, and from the looks of it, I wasn’t the only one.

I ended up moving my stuff over to Amazon AWS. It looks like it’ll cost me around $10-12/month, netting me a savings of close to $15/month compared to the $26.95/month I was spending at DreamHost.

I’m relieved now that I’ve actually gotten around to moving everything off DreamHost. No more wondering if they’re going to change their product offerings again. No more wondering if my sites are going to come back up when they’re down.

Well, DreamHost, it’s been nice knowin’ ya, but I’m officially done. I suppose it was good while it lasted, but like many good things, this too had to come to an end.

Edited to add: And, the account is now fully closed.

dreamhost-account-closed

How to migrate a CVS module to Git and GitHub

Since it took me a while to figure out, I figured this might be useful to document: migrating code from CVS to Git. Specifically, I was moving modules in a CVS repository on SourceForge over to GitHub.

Here are the versions of the tools that I used:

$ rsync --version | head -1
rsync version 3.1.0 protocol version 31
$ cvs --version | head -2 | tail -1
Concurrent Versions System (CVS) 1.12.13 (client/server)
$ git --version
git version 2.6.3
$ cvsps -V
cvsps: version 3.13

First, I grabbed a copy of the CVSROOT, and checked out the module so I had a reference copy to compare to when I’m done.

$ rsync -av aolserver.cvs.sourceforge.net::cvsroot/aolserver/ aolserver-cvs
$ cvs -d $(pwd)/aolserver-cvs co -d nsmysql-cvs nsmysql

Then, I create the working directory for the local git repo.

$ mkdir nsmysql
$ git init nsmysql

Next, do the actual CVS-to-Git conversion.

$ cvsps --root $(pwd)/aolserver-cvs nsmysql --fast-export | git --git-dir=nsmysql/.git fast-import

Finally, do a diff to compare the two working directories to make sure the import worked correctly.

$ cd nsmysql
$ git checkout master
$ diff -x .git -x CVS -urN . ../nsmysql-cvs

If everything looks good, go ahead and push it up to GitHub.

$ git remote add origin git@github.com:aolserver/nsmysql.git
$ git config remote.origin.push HEAD
$ git push -u origin master

I don’t do this often, but when I do, I always have to figure it out each time, so hopefully next time I’ll find this blog post at the top of my search results and save myself some time.

Who does a boycott really hurt?

The latest social media shitstorm is about Guido Barilla saying, “I would not do a commercial with a homosexual family, not for lack of respect toward homosexuals – who have the right to do whatever they want without disturbing others – but because I don

Sometimes, the “Best By” date is right

Sam and I just had a conversation that went something like this:

Sam: I think these peanuts don’t taste right.

Me: Oh?

Sam: The “best by” date said August… It’s been less than a month!

Me: I guess that’s why they don’t taste their best, now…

Sometimes, that “best by” date is no joke. Who knew? :-)

A lesson in buying eggs

The other day, my daughter was instructed to go get the eggs while out shopping, and she did. However, upon later inspection at home, it turns out several of the eggs were cracked in the carton she selected.

One dozen eggs in a styrofoam carton

It’s not until something like this happens that you realize how much we take for granted. At some point in our lives, we instinctually know to open the carton and quickly inspect the eggs to see if any are broken before buying them, but even after years of watching us select eggs, this lesson hadn’t sunken in.

Being the totally silly Dad that I am, as part of the “please, check the eggs before you take them” lecture, I threw this out:

Me: “You know what they say about buying eggs, right?”

Her: “Um, no?”

Me: “YALO.”

Her: *puzzled look*

Me: “You Always Look Once.”

She began to laugh uncontrollably at this meme-gone-bad that I’d thrown out there. I don’t know if she’s learned the lesson, but hopefully she’ll remember it now …

Suzie and her monkey friend

20130620-115006.jpg

Just testing out the WordPress iOS app’s handling of “Quick Photo” posting—I’m curious as to what markup it’ll generate.

And, what better to use as a test than a great picture of Suzie with her little monkey friend? :-)

Why PRISM, and programs like it, really don’t matter

The government obviously has had this data for quite some time, and no one I know of has been grabbed by the secret police, nor could they use the data to stop the Boston marathon bombing before it took place.

Government organizations are simply incapable of making use of the data they have access to. I have no doubt of that. I am much more fearful of this breadth of data in the hands of an enterprising individual with a specific, focused agenda. Bureaucracy by sheer existence will ensure this data will remain impotent in the government’s hands.

We should focus on real threats, not imagined ones, like what our government did to a person like Aaron Swartz. After this PRISM leak, is the Everyman going to care more about “this risk to my personal freedom and privacy” (which never existed in the first place–what a farce), or what our government actually DOES do to destroy a citizen’s life, like Aaron’s?

Smart money on the fact that people care less about what happened to Aaron than what they THINK might happen to them (but it never will), simply because they are not Aaron. And, that is the tragedy here…

I’m still not blogging more

I honestly thought I would be blogging a little bit more, since switching from Android to iPhone, since the iOS WordPress app is so nice, but I just don’t seem to get into it. It’s just too easy to post short stuff to Twitter, and photos to Instagram or Facebook …

I think a part of this is the belief that more people follow me on Twitter, or are friends of mine on Facebook, than read my blog.

There are times when I need to write something down because I know my poor rat brain won’t remember it, so I post it to my blog for my future self.

Then, there are times I want to share something with others… and those are the kinds of things I post to social media sites because that’s where I figure I’ll reach the most people. I suppose if I had the kind of audience that celebrities have, I could post everything here… but I don’t.

I guess I’m just doing some thinking out loud here (uh, typing out loud? writing out loud? writing in plain view?) … just confirming that my lack of posting is definitely not because of some barrier of difficulty: this iOS WordPress app makes this so damn easy.

Debugging a strange MacOS X printing problem

At some point in time, something changed on my system that resulted in my printer no longer printing. (Cue a relevant scene from Office Space here…) A quick Googling of relevant keywords didn’t turn up anyone else complaining about what I was observing, so I did what any lazy person would do: I found another way to print what I needed to print, and forgot all about it.

Now, several months later, the problem still persists, and while I found a suitable workaround (use the “Generic PostScript printer” driver instead of the Lexmark one), the hardcore geek in me felt it necessary to struggle against the injustice of this whole “it doesn’t work” thing. It should work, damn it.

First, here’s what the most obvious symptom looks like:

/Library/Printers/Lexmark/filter/pstopsprinter1 failed

Along with this will be an entry in the system log which you can see in Console.app:

1/25/13 12:19:02.275 PM ReportCrash: Saved crash report for pstopsprinter1[78490] version ??? (???) to /Library/Logs/DiagnosticReports/pstopsprinter1_2013-01-25-121902_localhost.crash

If you look inside the crash report, you’ll see:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray length]: unrecognized selector sent to instance 0x1006036b0'

Great. Just great. So, we fire up our handy-dandy debugger, and what is the object it’s choking on?

(gdb) po 0x1006036b0
<__NSCFArray 0x1006036b0>
[redacted],
panoptic.com
)

Aww, damn. I recognize what that is. Those are the domains defined in my /etc/resolv.conf‘s “search” parameter.

Here’s the whole backtrace:

(gdb) bt
#0  0x00007fff93b09ce2 in __pthread_kill ()
#1  0x00007fff9392a7d2 in pthread_kill ()
#2  0x00007fff9391ba7a in abort ()
#3  0x00007fff8ce037bc in abort_message ()
#4  0x00007fff8ce00fcf in default_terminate ()
#5  0x00007fff8d9931b9 in _objc_terminate ()
#6  0x00007fff8ce01001 in safe_handler_caller ()
#7  0x00007fff8ce0105c in std::terminate ()
#8  0x00007fff8ce02152 in __cxa_throw ()
#9  0x00007fff8d992e7a in objc_exception_throw ()
#10 0x00007fff954c81be in -[NSObject doesNotRecognizeSelector:] ()
#11 0x00007fff95428e23 in ___forwarding___ ()
#12 0x00007fff95428c38 in __forwarding_prep_0___ ()
#13 0x00007fff9539f426 in CFStringGetLength ()
#14 0x00007fff953affac in CFStringFindWithOptionsAndLocale ()
#15 0x00007fff953b67da in CFStringHasSuffix ()
#16 0x00007fff953ed7f6 in -[__NSCFString hasSuffix:] ()
#17 0x00007fff8e1ab6da in __-[NSHost resolveCurrentHostWithHandler:]_block_invoke_7 ()
#18 0x00007fff90497c75 in _dispatch_barrier_sync_f_invoke ()
#19 0x00007fff8e1a9b5d in -[NSHost resolveCurrentHostWithHandler:] ()
#20 0x00007fff8e1aa5a7 in __-[NSHost resolve:]_block_invoke_1 ()
#21 0x00007fff90495a82 in _dispatch_call_block_and_release ()
#22 0x00007fff904972d2 in _dispatch_queue_drain ()
#23 0x00007fff9049712e in _dispatch_queue_invoke ()
#24 0x00007fff90496928 in _dispatch_worker_thread2 ()
#25 0x00007fff9392a3da in _pthread_wqthread ()
#26 0x00007fff9392bb85 in start_wqthread ()

Well, let’s see what it was trying to resolve, maybe that’ll give us a clue:

(gdb) frame 20
#20 0x00007fff8e1aa5a7 in __-[NSHost resolve:]_block_invoke_1 ()
(gdb) po $rdi
[redacted].panoptic.com

Yup, that would be the DNS name of my machine, based on the reverse DNS of my IP address on my local private network. However, it appears that forward DNS for that FQDN isn’t resolvable, due to a recent change in my DNS setup. Let’s fix this, and correct the DNS so that the FQDN resolves, and test again.

Still fails. Damn, not going to be that easy, huh?

(gdb) frame 13
#13 0x00007fff9539f426 in CFStringGetLength ()
(gdb) info frame
Stack level 13, frame at 0x1003d72c0:
 rip = 0x7fff9539f426 in CFStringGetLength; saved rip 0x7fff953affac
 called by frame at 0x1003d7770, caller of frame at 0x1003d72a0
 Arglist at 0x1003d72b8, args: 
 Locals at 0x1003d72b8, Previous frame's sp is 0x1003d72c0
 Saved registers:
  rbx at 0x1003d72a8, rbp at 0x1003d72b0, rip at 0x1003d72b8
(gdb) po $rbx
<__NSCFArray 0x1006036b0>(
[redacted],
panoptic.com
)

And, here it is. CFStringGetLength is expecting a CFStringRef and instead getting handed a NSCFArray, and is blowing up because CFStringGetLength trying to [str length] it.

I wish I knew someone who was doing OSX development at Apple to pass this bug along to …

Updated: I filed this as a bug in Apple’s Radar bug reporting system. It was assigned bug ID #13089829.