m0nastic
- I live in D.C.
- I hope to soon live in NYC
- I break web applications for a living
- I take pictures (though not as much as I'd like)
- I write (though not as much as I'd like)
Updates
-
Outside a little bit ago checking twitter, saw a tweet from @georgiaweidman then looked over and saw her standing there. Yay social media.
-
I get terrible cell phone reception at the con, so my twittering is limited here at Shmoocon.
-
We got the Shmoocon network working earlier this year than normal. Now that I've said that, I expect it to all fall apart.39 hours ago from web | Reply, Retweet, Favorite
-
Only in DC could there be a place called "Counter Intelligence" that installs countertops.
-
@joshuatopolsky Yeah, yeah, just like New York used to.
-
For some reason, Chrome always crashes when I try to go to Charlie Rose's site. Like 100% of the time.
-
@TVsAndyDaly It's so hard for me to not retweet almost all of your tweets.
-
@DougBenson Did you upload the audio file for the latest DLM on the ship, because I know internet is super expensive on a cruise?
-
I don't know if anything makes me feel more stupid than doing formulas in excel. Been screwing around with vlookup for 45 minutes.
-
@spacerog @georgiaweidman Your taste in eyewear has definitely improved though. ;)
-
@jeremiahg @hdmoore Symantec's handling of this incident makes no sense. Playing up the fact that the source is old a terrible approach.2 days ago from web | Reply, Retweet, Favorite
-
This is a real headline from a real story: RT @nprnews Antitrust Official Gets Stampeded By Big Beef http://t.co/qnzvyYYG
-
@tqbf Even the 5 year's is iffy. I'll gladly tell you over a drink some night of a team of sales people all getting it with no experience.
-
@effffn If we had more time, we could've built some sort of Luiz telepresence robot to drive around so you could still give Ken grief. ;)
-
@effffn boo. Your presence will be greatly missed.
-
@mattjshelton Awesome. This year my girlfriend got a ticket specifically to hang out in the lockpick village for three days. ;)
-
@Matthew_JordanS That's tough...Seeing Demarchelier's first book as a kid was what made me want to become a photographer.
-
@gattaca We are in the middle of a burger-palooza here in DC at the moment. Lots of good burger places.
-
@JenKirkman @RonnaAndBeverly Oh yay, I just found it. Thank you, it's like I just got a giant present!
-
@RonnaAndBeverly, you should have @JenKirkman on your podcast. She's a very nice girl, and quite a character.
Posts
Tried out a new dim sum place that just opened in Dupont. Overall, it was very good.
I've never met my dad; which from everything I've heard, is probably for the best. I once worked with a guy who prosecuted him; which we discovered one night over drinks at a company off-site. It made for an awkward evening.
My mom remarried when I was six, but I don't really have many memories before my stepfather was around. He was never "Dad", but always "Tom". That wasn't because of any "you're not my real father" Emo posturing, it just never occurred to me.
He died a couple of years ago on Father's Day, a few days after getting out of the hospital. To this day, I'm not exactly clear about the cause. When I got the call from my mom I didn't think to ask exactly what happened; it didn't really seem important to know the specifics. As time went on, there just never seemed like a good time to bring it up.
I spoke with him the night he got home, calling out of some obligatory duty which was ingrained in the recesses of my subconscious. Truth be told, it didn't seem incredibly urgent. He had gotten sick, went to the hospital for them to run some tests, and then been sent home. I assumed this was just another of the dozens of awkward future phone conversations between us.
If my life were a movie, or I'd had the foresight to realize that this was the last time I'd get to talk with him, I'd have said something like "I love you dad." and he'd have said something like "I love you too son, and some psychic healing would occur between the twenty-some-odd years of distance that always separated us.
I think the actual conversation went more along the lines of "I'm glad your home." with his standard reply "Hold on, I'll put your mother on the phone."
In reality, I realize that if I had told him I loved him, or called him "dad", his actual response would have been "Oh, go fuck yourself." And he'd have been right.
It's easy to paint a romantic portrayal of the dead, especially of family. It's easy to put aside all the bad experiences and memories and only recollect the good ones. It's probably for the best actually, but I think it's important for me to always remember that my stepfather was a giant pain in the ass. He was a retired cop who drank too much and thought everyone was a potential suspect in some imaginary crime. But I have to think hard to remember all those things; even though I spent a great portion of my childhood hiding out in the basement waiting for him to leave for work, or pretending to be asleep when he and my mom got home after being out all night.
When I think of my stepfather now, I immediately think of two incidents. The first was when I was about twelve. My parents used to entertain a lot, especially during the summer when it was warm. They'd have these grand parties for all their bar friends; and I was always expected to interact with everyone. As the nights wore on, they'd usually find themselves playing a board game of some sort, and I'd get to play along with them more often than not.
It was interesting being a kid and sitting around with a bunch of tanked forty-year olds playing Sexual Trivial Pursuit. The thing about that though, was that the questions in the game were more clinical than prurient, so I always cleaned up. Thankfully, that never came up during all the years of being interviewed by Social Services. They probably wouldn't have found it as quaint.
Before my brother ran away, we used to play Pictionary a lot. After a while we were forbidden from being teammates, because as soon as either one of us would start to draw anything, the other would immediately know exactly what it was. They thought we were cheating, but we just had really similar brains.
This night in particular, we were playing a game called Scategories. It's a game where you all have a list of categories, and you roll a large 24-sided die with letters on it. You then answer each category with a word starting with the letter that was rolled. If two people say the same thing, than neither gets a point, so you want to try and pick something obscure.
I don't remember most of the game, but I remember that my stepfather and I were fairly close in score going into the last round. He was pretty drunk by this point, and we made a bet. For the life of me, I don't remember what he bet me if he won, but if I won he had to buy me all of the G.I. Joe's that I had on a list in my room. As a kid, we didn't have much money (even less after booze and lottery tickets), so I used to make these lists of all the things I wished I could have. Mostly I'd collect the circulars from the Sunday Herald, and go through them and pick out the things I wished I had and put them in a manilla folder.
The letter for that round was 'O', and I only remember one category, which was "Capitals". I wrote "Oslo", as it was the only one I could think of. When it came time to tally up the points, my stepfather had written "Oz". I challenged him on it, because really, what was Oz the capital of? He said "Fairyland".
I disputed this, because I thought he was being ridiculous. We argued that Oz was not the capital of Fairyland, because Fairyland was not a place, either real or fictional. I went downstairs to my room and dug out my copy of The Wizard of Oz, which had a map on the inside cover which clearly showed that Oz was in fact a "land". Oz itself had a capital, which was "The Emerald City", but Oz was not the capital of anything. Against the protestations of the other people who were playing, he wouldn't agree that I'd won. I went off to my room, I'm sure pouting and sulking like a petulant child.
Weeks went by, and while I eventually got over it, I must have been acting like a brat, because one day he yells from upstairs "Rufus, get your ass up here". Rufus, by the way, was what he called me when he was angry at me. If he was happy, he called me "Monster Man". Growing up, I head a lot more "Rufus's" than "Monster Man's".
When I came upstairs he told me to go get "my goddamned list of G.I. Joe's" and he drove me to the mall. We then proceeded to go through the list and find each and every one that was on it ("No Tom, it's supposed to be Cobra Commander with Battle Armor, that's Serpentor"). I think I was genuinely happy for weeks.
The second thing I remember about him happened a little while later. I was a Boy Scout as a kid, and the thing everyone looked forward to all year was summer camp. My troop had a point system, so that at the end of the year, they'd pay for some number of kids to go to summer camp without having to pay for it. You earned points for things like meeting attendance, gaining rank, participating in service projects, etc. I always earned enough points to go for free, which I'm sure made my parents happy.
One year, we had a new kid in the troop. I don't think he was around long enough to have earned enough points for the troop to pay for camp. Apparently, his family also didn't have the money to pay for him, but I didn't know that at the time. One day, a few weeks before we were to leave for camp, my stepfather makes some calls, and I piece together that he was trying to pay for this kid. I can imagine what it's like for a parent, when some stranger is offering to pay for something for your kid. I assume it hurts your pride, it's a shitty position to be in.
After a fairly long conversation, they relented and agreed to let Tom pay for their kid to go to camp. Worse though, was that he didn't have any of the gear he needed. So my stepfather leaves the house, goes and picks the kid up, and takes him to a camping store. He gets him a sleeping bag, a backpack, a flashlight, an extra uniform, basically everything else he'd need.
When he got back, I asked him why he did all that, as it was several hundred dollars worth of stuff. A lot of it was stuff I didn't even have. He just said that it was what you were supposed to do. If you could, you help other people out.
I can think of a lot more examples of him doing that sort of thing. We always took in people to stay with us, whether they were relatives going through a nasty divorce, or drug addicts that they had just met at the bar. The only advice about sex I ever got was from a heroin addict who was living with us when I was thirteen. "If it smells like cologne, leave it alone". Actually, that's been pretty good advice.
So although I never forget that my stepfather was a giant pain in the ass, I try and focus on the things he'd want me to remember. Even if he was never explicitly into teaching "lessons", I know that deep down he wanted me to try and be a decent human being. He wanted me to help people out when I could, because that is what you are supposed to do. That's a pretty stark contrast to my actual dad.
Father's Day is now a fairly solemn holiday for me. For most of my life, it was just a day I had to remember to buy a card for (preferably one with something dirty written in it), or one of the four or five times a year I call home. Not once has it reminded me of my biological father. But now Father's Day makes me stop and reflect on my stepfather, who is no longer here to bust my balls. It's possible that I am myself falling victim to lionizing the dead, but on this one day I can abide it. My dad can go fuck himself, I think that's something that both Tom and I can agree on.
Last night a thought ocurred to me that it might be interesting to be able to compile software when I'm away from my computer. Like many people, I'll have ideas which if I let marinate inside my head I'd quickly dismiss as terrible, or move on to something else. For whatever reason, I figured this would be a neat one to try out.
I will say immediately that there are significant security implications to what I'm doing here; but the gist of it is:
- I have all my source code files stored in Dropbox.
- I have a text editor on my mobile devices which uses Dropbox for storage.
- Using this text editor, I can write programs; but I have to wait to see if they compile until I am in front of my computer.
- I do not have a means to access my computer remotely (I don't have dynamic DNS running, or a VPN, or pay for any of the "Citrix-in-a-box" apps).
- I have now written a Python script (available here) which will automatically compile any source code that I specify so that it may be fresh from the oven when I return to my computer.
The way it works is simple, you create a manifest file (there's a sample one in the repository) that specifies the location of the source code, the location of the output, the command to be run, the arguments to pass to the command (in case you need to link something) and the location to save an error log (so you can see if it doesn't compile, and hopefully fix it and try again).
I'll say again that there are some security klaxons which should be sounding. Whatever command you put in the manifest file will be run by your computer (meaning you could quite possibly rm -rf your machine). There's a good argument to be made that I should change the pOpen call in the script to only accept arguments to GCC as user input; but I'm not sure I want to do that. I may want to use something besides GCC to compile, or I may want to use another command to copy non-Dropbox files into my Dropbox. Fundamentally, for this script to be useful, you have to trust Dropbox. That might be difficult for you, in which case you probably shouldn't be using this (and lets be honest, this is really only of marginal utility).
I can hear some of you gufawwing at the thought of writing code on a mobile phone or tablet. I've seen numerous articles and comments where people think it's impossible. I happen to disagree, but I appreciate your skepticism. Truth be told, I don't envision using this to write giant programs on my tablet. A use case I do see, however:
- You're a busy mom (or dad) on the go.
- You're working on a big C program at night after the kids are asleep.
- You've just added some new function to the code that isn't working properly, and you keep telling yourself that tonight you'll make the time to go through and try to resolve it (you've been saying this for weeks).
- You're sitting at your kid's play (when did it become appropriate for an elementary school to put on a production of South Pacific) when it suddenly strikes you that you need to change an equal to not equal in a conditional.
- During the intermission (there's like three of them in this play) you discreetly take out your phone, pop open your text editor of choice, make the change, and save it back to Dropbox.
- You then save a manifest file in the folder you've set up earlier.
- It's done building by the time you get home.
- If it doesn't compile, the incredibly helpful GCC error message is saved to a file so you can have another go at it (really, this play is so long you could probably re-write and debug GLIBC).
This might not make you parent of the year, but that new social network/twitter sentiment analyzer/q&a site won't write itself.
I've spent the past decade working in web application security. This was not a conscious choice; I just sort of happened into it. That shouldn't be made to sound like I dislike it, as I actually like it a great deal. It just wasn't what I planned.
In fact, I never planned on doing anything involving computers. As a kid I drew comic books, and played roleplaying games. I wanted to be a paleontologist for a while (like many kids, I'm sure). Then I wanted to be a writer. I wrote my first computer program on a TRS-80; a BASIC derivative of something in the back of a computer magazine (remember those?). I saved it on a cassette tape (remember those?)
If my life had turned out the way I had planned it back then, I suppose I'd be writing the core rulebook for a dinosaur-themed roleplaying game. I, for one, am thankful that life has ignored my plans. At least in this regard, I think life has better judgement about what's best for me than I do.
I programmed C in High School, and for the first two years of college (in addition to C++, and Scheme), but I was never particularly good. I'd like to think that if I'd stayed with it, I'd have gotten good; but this is purely hypothetical. As soon as I left school and was thrust into the corporate world of network engineering (and later security), I never again had a need to do real programming. This isn't to say I didn't need to write some python or ruby script to automate some task, or format some data; but that was about the extent of things. I still deal with source code, usually as a result of a code review I'm performing. There is a difference, however, in pointing out problems with someone else’s house, and building your own. As time went on, the fundamentals I'd learned in school disappeared off into the horizon.
To give an example of this intellectual entropy, a few weeks ago I wasted twenty minutes figuring out why an IF statement never evaluated as true in a server I was writing. It should be noted that this IF statement compared two strings (one passed as input, and one stored as a variable). "But you can't compare two strings in an IF statement", you might say. "You have to use a STRNCMP". You might then laugh maniacally. I had forgotten that bit of information, one bit amongst a veritable gigabyte of things that I used to know. To be fair, once I figured it out, my server behaved the way it was supposed to. I was writing a fuzzer, and this was a demo server I was going to use to test it. The server was very simple (it binds to a TCP port, receives messages, and responds with an authorization if the message it received is the one it was expecting).
The fuzzer is also simple. In fact, it is so simple (and would embarrass anyone who actually writes fuzzers for a living) that if I were to sell it, I probably wouldn't get sued by Cenzic (that's an information security inside joke). I came to the realization about a month ago that the limiting factor for almost any area of interest I have now is my deficiency as a programmer. I tried to work around this for a while, but every new avenue I pursued eventually reduced to programming. It's the atomic level of my web of interests.
Realizing this, I figured now was as good a time as any to dust off my old programming texts and try to get back in the swing of things. It was at this point that it dawned on me that I'm not really getting back in the swing of things; as things have never really swung. They might have drifted lazily in the breeze, but this is not an issue of undoing ten years of decay. This is an issue of programmatically learning all the things I had just started learning before life disregarded my plan.
I had dug out my copy of K&R while writing my server, and at first I figured it might be good for me to go through the whole book. I know that it's cited by many as the book that they first learned to program with. I feel for those people, because while I appreciate it's brevity and omission of anything besides "the facts", from what I can tell, I'd hate to actually learn to program from it. To be fair, it appears that the intended use of K&R is to teach the fundamentals of C to someone who is already proficient in another language.
In an effort to make this entry more than just a lamentation of my failures as a techno-nerd, I now present the order in which I plan to start going through this material:
How to Design Programs (There are many who say they dislike this book in comparison to SICP; but we used SICP in College for my class on Scheme, and I figured I should try something else)
The C Programming Language (I'm hoping after refreshing my fundamentals in Scheme, it'll be easier to go through C)
The Algorithm Design Manual (Using this one as opposed to CLRS based on some comments on Hackernews)
The Elements of Computing Systems: Building a Modern Computer from First Principles
Compilers: Principles, Techniques, and Tools
C Interfaces and Implementations: Techniques for Creating Reusable Software
Most of my other books (both on my bookshelf and on my Amazon wish-list) are language specific. After I get through these six, I figure I'll have a good sense of what path I want to go down next.
My goal with this blog is to start to catalog this process. Maybe it will be beneficial for someone else in my situation, or maybe it will just serve to keep me motivated when I hit that inevitable wall in a few months where I would rather play Zuma Blitz then do the exercises at the end of some chapter.
I need to start at the beginning, and this time, I need to keep going past the point I stopped at earlier. My mammalian brain tells me that it's too late for this, that I'm too old, and have gotten too stupid. My lizard brain tells me to smash my computer monitor with an axe handle. Thankfully, I don't listen to either.
If for some reason anyone else would like a ringtone of Paul F Tompkins saying "Ga'Hoole", here it is:
Repositories
-
A Python script for use in compiling code remotely on a system using Dropbox1 fork/1 watcher/Pushed 10 months ago
Watched Repositories
-
Standalone executable that compiles *.coffee to *.js. Options are compatible with the original coffee command.13 forks/162 watchers/Pushed 4 months ago
-
A Python script for use in compiling code remotely on a system using Dropbox1 fork/1 watcher/Pushed 10 months ago