So the blog has moved over to andrewfarmer.name. I'm leaving this here until I get all the links converted over for old entries and get the comments imported.
Tuesday, August 05, 2008
Monday, August 04, 2008
Tropical Storm
So a tropical storm is going to hit us tomorrow. If we get lucky it might get fed a bit and turn into a category 1 hurricane, but it's extremely unlikely. I guess I'm fine with that though... don't want anything to happen to my precious computer. ;)
Spent many hours working on my learn-ramaze project. Hopefully you'll see the fruits of that in a day or two. Since I worked on that all day, I failed to exercise again, but hit all the other goals. Oh well, my body is almost not sore, so maybe the two day break was good for it.
Anyway, been on the computer for about 15 hours today, so going to go read the Economist and sleep.
Sunday, August 03, 2008
Runes
Acquired more fruit, then promptly failed on the exercising. I'm going to claim that it is Sunday, and that somehow relates to not exercising. Got a little bit of work done this morning before the sun came up, but managed to fritter away the rest of the day on inconsequentials.
Oh well, there is always tomorrow. At least I haven't had a coke since I started this. That goal will hopefully stick on a daily basis.
Saturday, August 02, 2008
Continuum
Watched the newest Stargate movie... Continuum. Thankfully the dialog wasn't total crap (like it was in Ark of Truth) so it was quite enjoyable. Ark of Truth was kind of a bad first effort in the SG-1-as-movie thing that MGM has embarked on, but Continuum restored my faith. It was basically like one long episode of the series, which is definitely a good thing.
All the goals were met today, except for the consumption of fruit. Sadly we are out of anything fruit-like, but I don't feel too terrible, as my jogging was much easier than usual and I spent 5 or 6 hours working with Ramaze. (Which definitely blows my 1 hr goal out of the water.)
On that note, Ramaze is great. I had a blast with it today and plan to rock out some more productivity when I wake up in the morning. Buenas noches.
Friday, August 01, 2008
Bob Saget
... for the win.
All the goals were accomplished today. I also discovered the glory that is Ramaze. Finally a framework that lets me write sweet ruby without getting in my way. So far it has been a blast and I look forward to doing more with it tomorrow.
Watched Running With Scissors tonight. The movie itself seems like a running list of non-sequiturs intermixed with brief moments of lucidity, but I thoroughly enjoyed it. Kind of bittersweet in the end, but really well made. This movie brings the crazy in a way that I Heart Huckabees and Little Miss Sunshine can only dream about.
Thursday, July 31, 2008
<witty title>
Yeah I got nothing.
- After three days of real exercise, my body is telling me that today is a day to rest. I did walk for several hours around the mall, but walking is only considered 'exercise' by old people, and I scoff at the notion that it counts.
- I made a blueberry/cherry smoothie, so that is going to have to count as my fruit today. We were out of everything else.
- No coke today, probably too much coffee though.
- Check
- Check
- Check
Wednesday, July 30, 2008
Burritos!
Looking forward to tasty burritos here in a bit. The obligatory:
- Switched to weights to give my legs a rest.
- Rocked an orange.
- Not craving too badly today.
- Check
- Check
- Aquí está.
Tuesday, July 29, 2008
Dia Dos
Nothing much in the way of exciting stuff to report, just checking in on the goals.
- I jogged 1.65 miles and did 10 laps in the pool.
- I had an apple with my breakfast.
- Day 2 without coke was better than Day 1.
- Did a couple problems on Project Euler.
- Check
- Check.
Monday, July 28, 2008
Primer Dia
First day was a success.
- I jogged 1.35 miles and did 10 laps in the pool.
- I had an apple with my breakfast.
- Nothing but water, coffee, and milk were imbibed.
- Added some functionality to our item tracker.
- Imported new cards and got pagination working on search results.
- Here is my blog post.
Sunday, July 27, 2008
The Face Of The Earth
... I fell off it.
This summer I have slipped into an odd sleeping schedule (complete lack thereof) and time has definitely flown. It's hard to believe that we are almost to August. It's even harder to believe because I don't feel like I've accomplished a lot.
I've done some work on a new interface to the Magic site, and will hopefully get something out there on that front soon. I'm about halfway through SICP, which has been just as mind-expanding the second time as the first. I've also been dabbling the last couple days in creating my own web framework.
The standard response when someone creates their own framework is "there is no way you can do it better than the thousands of people working on existing mainstream frameworks." Yes, there is no way I have time to make a polished framework with all the features of those frameworks, so this argument is true on the surface. But frankly nothing out there is as simple as what I want, and I'm not setting out to make the greatest thing ever, I just want something that works for me.
Besides, it's fun.
But, in order to make better use of the five months of freedom that remain, I'd like to lay out some goals. They are all baby steps for now, with hopeful modifications later on.
- Exercise every day when I get up.
- Eat at least one piece of fruit a day.
- Stop drinking coke.
- Devote at least one hour a day to coding.
- Devote at least one hour a day to a project.
- Blog once a day, and mention progress on these goals.
Also, on a less daily front, I think I want to feel out and possibly apply to grad school. So that will be my long term personal development project.
Now one caveat. My 'days' are not standard days, so for the purpose of this, 'every day' is every time I'm awake for an extended period. 'Today,' for instance, started at 10pm Saturday night and is going to end at about 4pm.
Saturday, June 28, 2008
And The Winner Is
So since the Twitter IM bot has been down for like three weeks, I finally gave up on it. I discovered this neat service provided by IMified.com that lets you post to your FriendFeed account via an IM bot. All you do is add friendfeed@bot.im to your Gtalk/jabber account and then send it the message 'help' and it'll tell you what to do. Really I like FriendFeed better anyway, but Twitter seemed like the de facto standard.
If you don't have FriendFeed, I highly recommend it. It's like a blog+facebook+twitter all in one, with a nice interface and tons of nifty development going on around it. The basic idea is that it aggregates all your online activity (that you tell it about) into a feed, then all your friends can comment on each other's feeds. Right now I have mine linked up to this blog, my Disqus comments, and Twitter, so any time I post on one of those it shows up in my feed.
All the items posted by your friends show up in a composite feed, and you can go comment on them and have discussions. You can also post links/messages to your feed, so planning things like group activities is easy. Since all your friends see your message, they can hash out the details in the comments. Hook it up to your Flickr/Picassa account, and you have the equivalent of Facebook photos.
Speaking of Facebook, you can even integrate it with that.
So FriendFeed ftw. If you want to add me, my handle is xich. Or you can just check out my feed.
Saturday, June 21, 2008
On Fuel Efficiency
An interesting study came out showing that people are confused by the MPG rating on cars. Obviously people can correctly figure out that a higher MPG number is better than a lower one, but the issue came when selecting upgrade paths.
Say a family has two vehicles. One is a truck that gets 12mpg, and the other is a car that gets 25mpg. This family decides it wants a new vehicle and it wants to save as much money as it can on gas (and help the environment). Both the car and truck are driven roughly equally. Do they get a new truck that gets 17mpg (an increase of 5mpg over the current one), or spring for a Prius to replace their car (going from 25mpg to 45mpg, an increase of 20mpg)?
If you chose the Prius, you must hate the environment, because the new truck would be the much better choice.
Why? Because think of it in terms of the actual gas saved. A 12mpg truck driven 10,000 miles a year would use about 833 gallons. A 17mpg truck would use 588 gallons, or about 245 gallons less.
A 25mpg car driven the same distance would use 400 gallons, and that Prius would use 222, or 178 gallons less. Thus, (taking 245-178) buying the new truck would save 67 gallons more per year than buying the Prius.
The study showed that this could be solved by simply giving people a better set of numbers to think about. Instead of miles per gallon, give then gallons per mile. And, since gallons per mile is a tiny number and people seem to abhor tiny numbers (audio file), make it really easy by giving it to them in gallons per 10,000 miles.
If you do it this way, our previous example becomes immediately obvious.
The same family has a truck with a rating of 833 (gallons per 10k miles) and a car with a rating of 400. They are trying to choose between a new truck with a rating of 588 and a Prius with a rating of 222. If they buy the truck their combined ratings would be 988 (400+588). If they choose the Prius, their combined ratings would be 1055 (833+222). Obviously the new truck route would be more efficient (988 is less than 1055).
An interesting example of how numbers can be counter-intuitive at first glance. When stated in MPG, the 20mpg increase given by the new Prius seems far better than the measely 5mpg increase given by the new truck, but the reality is the opposite.
You can go take an online quiz made by the people who did the study if you want to test yourself. The overall lesson: think in gallons per mile instead of miles per gallon. It's even easy to do the conversion yourself. Just take 10,000 and divide by the MPG rating of the car. That will give you gallons per 10,000 miles.
For instance, my car gets about 34mpg. If I take 10,000 divided by 34, I get 294. Buying a new Prius (with a rating of 222), would save me about 72 gallons every 10,000 miles. At current prices, that is about $280. Obviously $280 isn't worth buying a whole new car for, and thinking about it this way makes it very apparent.
This should also make another point very clear. The easiest way to save a lot of gasoline is to focus on the biggest vehicles. If the average semi-truck gets 9mpg, and somehow we improved that to 11mpg (just a 2mpg improvement), it would save more gas than replacing a car with a Prius (moving from 25mpg to 45mpg, or a 20mpg improvement). Add to that the fact that semi-trucks drive many more miles on a yearly basis than any car owner does, and you have to wonder why people aren't clamoring for hybrid semis. Having a fleet of hybrid semis getting 14mpg would do way more for the environment than converting every car in America into a Prius.
Of course, I'm still holding out for plugin hybrids. Bring on the electric cars!
Saturday, June 14, 2008
Toadies
unit of h: make up your miiind
unit of h: decide to walk with me
unit of h: around the lake tonight
unit of h: aaaround the lake tonight
unit of h: bah mah side
unit of h: bah my side
unit of h: I'm not gonna liee
unit of h: I'll not be a gentleman
unit of h: behind teh boat house
unit of h: ah'll show you mah dark secret
unit of h: bundundununudnudndu udnu nud nudn (wananwananwannwa) waaaaaa
unit of h: I'm not gonnaaa liee!
unit of h: I want yooou for mine
unit of h: my blushing bride!
unit of h: my lover, BEE my lover
unit of h: yeaha!
unit of h: don't be afraid!
unit of h: I didn't mean to scare you
unit of h: so help me jeebus
unit of h: I can promise yoou
unit of h: you will stay as bootyful
unit of h: with dark haairrr
unit of h: and soft skiiinnnn
unit of h: fo-ev-errrr
unit of h: foo-ev-errrr
unit of h: make up yer mind
unit of h: make up yeeer mind!
unit of h: well I promise you
unit of h: ah will treat you well!
unit of h: mah sweet angel!
unit of h: so help me jeeeeebus
unit of h: aeaehayya
unit of h: give it up to me
unit of h: gibs it up too mee
unit of h: do yoo wanna be
unit of h: MAH ANGEL?
unit of h: gibs it up to me
unit of h: gibs it upp to meeeee
unit of h: do you wannna be?
unit of h: MAH ANGEL?
unit of h: GIVE IT UP TO ME!
unit of h: GIVE IT UPP TO MEE!
unit of h: DOOO YOO WANNA BE
unit of h: MAH ANGEL!?
unit of h: sooo help meeeeeeeeeeeeeeeeeeEEEEEEEE
unit of h: dun dun bam dun dun bam dun dun bamambamba dun dundund (wananana nan an aNAN NA NA NA)
unit of h: Beee mah angel
unit of h: beee mah angel
unit of h: be mah angel
unit of h: do you wanna die?
unit of h: do yoo wanna dieee?
unit of h: do you wanna DIE?
unit of h: do yoo wanna DIE?!
unit of h: DO YOO WANNA DIEEEE?!
unit of h: DO YOU WANNA DIIIEEEE?!
unit of h: DOOO YOU WANNA DIE?!
unit of h: DOOOOO YOO WANNA DIE?!
unit of h: well I promise YOU
unit of h: I will treat you well!
unit of h: mah sweet angel
unit of h: so help me jeeebuss
unit of h: jeeeeeeeebus
unit of h: jeeeeeebus
unit of h: jeeebussssSssSssss
Sorry harry, I'm taken.
Friday, June 13, 2008
HN Blacklist -> HN Toolkit
So thanks to nirmal's brilliant idea of browsing Hacker News in split view, I got the bug last night to add that functionality to the HN Blacklist. What I had originally thought would take about two hours ended up being about an eight hour ordeal, but it was worth it. I learned lots of neat things about the browser security model and GM evaluation, all because I couldn't get some event listeners to work.
The problem is now solved, and seeing as how my little blacklist does more than just that now, I went ahead and renamed it to HN Toolkit.
Obviously nirmal's bookmarklet works for a wider variety of browsers than my GM script, but my way means you don't have to hit his server to do it, which I figure is a good thing.
Sunday, June 08, 2008
Harvard Commencement Speech
So JK Rowling did Harvard's 2008 Commencement Speech. All I can say is... wow. If you want something to bump your optimism needle, this is it, and I'm not even really a fan of Rowling herself, although I do plan on eventually reading those things. This speech, however, was quite excellent.
Part 1:
Part 2:
Saturday, June 07, 2008
So, uh, Texas
I think I have completed major moving activities, so it's about time for an update to the old blog.
The move itself was rather more epic than I had planned. Due to the never-ending stormy weather we are getting this year, and the fact that I was planning on moving water sensitive things in the uncovered bed of a truck, the loading process took about five hours longer than the planned one hour. This was because we ended up gift-wrapping all our furniture in 3.5 mil plastic (the kind you put in flower beds). Several rolls of plastic and several rolls of duct tape later, we had everything ready, but seeing as it was about midnight, and our original plan was to leave at 2am, we ended up leaving later and breaking the drive into two days. With a stopover at my cousin Hillary's house for the night, it didn't end up costing us much.
Beaumont is amusing.
My only major accomplishments so far have been unpacking my stuff and reading a 700 page book by the pool. The pool here is quite excellent, and it's hot enough I don't even miss having a hot tub around.
Tonight I decided to get Firefox 3 RC2 up and running, just to try it out. It took quite a while to make portage happy. The initial emerge only took about 12 minutes, but some of the packages were requesting revdep-rebuilds that were curiously downgrading Firefox back to 2.0.0.14. After about an hour of investigating, I tracked it all down, and feel like documenting all my fixes here for fun.
Added the following to package.keywords:
=www-client/mozilla-firefox-3.0_rc2 ~amd64
>=dev-libs/nss-3.12_rc4 ~amd64
>=dev-libs/nspr-4.7.1 ~amd64
>=x11-libs/cairo-1.6.0 ~amd64
>=x11-libs/pixman-0.10.0 ~amd64
>=net-libs/xulrunner-1.9_rc2 ~amd64
Added this to package.unmask:
=www-client/mozilla-firefox-3.0_rc2
>=dev-libs/nss-3.12_rc4
>=dev-libs/nspr-4.7.1
>=net-libs/xulrunner-1.9_rc2
And to fix that reversion issue... added to package.use:
app-office/openoffice -firefox
dev-java/swt -firefox
Also changed my xorg.conf ButtonMapping Option to use buttons 8 and 9 instead of 6 and 7.
The first two sets of changes were needed to unmask everything Firefox 3 needed to compile. The changes to package.use were needed to fix the reversion issue. Apparently both these packages depend on Firefox 2 when that use flag is enabled, and aren't smart enough to use Firefox 3. I'm pretty sure I can live without whatever integration that use flag offers, at least until they are updated to use FF3.
As for the mouse button mapping, I guess older versions of Firefox incorrectly used buttons 6 and 7 as forward and back buttons, even though they are supposed to be the horizontal scroll buttons. Many laptop touchpads and fancy new mice have horizontal scroll spots/wheels, and firefox was executing back/forward operations whenever those users accidently bumped them. The side buttons on a mouse are apparently really supposed to be buttons 8 and 9, and substituting those for where I had 6 and 7 before did the trick nicely.
FF3 itself is great so far. The new Firebug has lots of nifty things, and since you can disable the performance sucking parts, it doesn't seem to bite page loads as hard. The zoom functionality is much better than before. (I use this a lot so I can read long articles while reclining several feet away from my monitor.) It actually zooms the entire page, images and all, much like the iPhone browser does. The old Firefox just made the text larger, which could lead to weird layout issues. The alt text on images actually shows in it's entirety when hovering, which makes xkcd comics much more fun. Browsing is moderately snappier, and the new javascript engine shines. Gmail loads up about twice as fast as before, and heavy javascript pages don't seem to clunk and stutter like before.
On that note, the new jQuery release apparently improved mouse handling and events a ton. Using the demos on the documentation site, I can definitely vouch that dragging and dropping seems much much faster/smoother, so definitely worth updating. I love jQuery.
I have a whole book in this excellent trilogy left to read, so probably nothing too exciting until I'm done with that. I'll be sure to rant about these books later. Kathy seems to be digging the new job duties, and it's kind of weird staying home all day, but it still feels like vacation, so I can't complain.
Plus I have this to play with all day!
Wednesday, May 21, 2008
Motivation
"Nobody should start to undertake a large project. You start with a small trivial project, and you should never expect it to get large. If you do, you'll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision. So start small, and think about the details. Don't think about some big picture and fancy design. If it doesn't solve some fairly immediate need, it's almost certainly over-designed. And don't expect people to jump in and help you. That's not how these things work. You need to get something half-way useful first, and then others will say "hey, that almost works for me", and they'll get involved in the project."Really well said. I definitely suffer from over-planning-and-under-doing things. Once you build all these castles in the air regarding what it is you are going to do, it all starts to seem overwhelming and hard to achieve. If, instead, you just start doing something, then iterate, you end up achieving a lot without even noticing, and suddenly you have this big thing to show off.
- Linus Torvalds
Maybe I should just focus on something I can solve in a day, and then go from there.
Tuesday, May 20, 2008
Improvements
UPDATE (06/13/2008): Even more improvements here.
There were a couple links on Hacker News today that were to pdfs, and someone pointed out that the automatic scribd vacuuming of said links is kind of annoying. I agree, so I thought I'd add the option to my blacklist to disable that functionality. While I was at it, I added a search box for Search YC as well.
Oh and the UI got a facelift.
You can check it out and install from here.
Monday, May 19, 2008
Twinview
So after I got my monitor last week, I spent about four days fighting to get dual monitors to work correctly. I tried a litany of things before I solved it. Want to know how? Probably not, but going to tell you anyway. Get this: I unplugged the DVI cables and plugged them back in.
Crazy I tell you.
So after the creepiness of that voodoo wore off, I spent a few days just enjoying the warm glow of four feet of LCD screen. Watching movies on one screen while chatting on another is fun, and the brief bit I spent coding was great. I could have my code, the console, firefox and pidgin all visible at once... each of them big enough to be considered full screen on a lesser monitor.
Spent most of the weekend sleeping, cleaning, and reading. Got this awesome book called Revelation Space (by Alastair Reynolds). So far it's probably some of the best Sci-Fi I have ever read.
Before acquiring the book, move-related cleaning was in full swing. I've managed to organize and pack most of the office, with about two boxes to go. Most of the time was consumed by going through all my collected documents and piles of things and throwing away everything I could. Also finally rid myself of the magazines and extra clothes, which was liberating to say the least. It'd really be nice to get my personal possessions down to books, computer, and clothes. It's amusing how much more crap I have than Kathy. I think tonight I'm finally going to take an axe to the box full of papers from college.
For some reason, at the time, I thought keeping all my homeworks/notes/tests from all my classes would someday be useful for refreshing myself. Thing is, with the internet and wikipedia at my fingertips, there is probably zero chance I'll ever look at them again. I think I'll keep some stuff related to Spain and just recycle the rest.
Still coughing up a storm, but most of the sickness has passed. Hopefully that'll eventually go away too. I'd hate to end up with bronchitis.
Tuesday, May 13, 2008
Purge
Been sick since Saturday. It's pretty much no fun.
Due to the excessive sleeping involved in being ill, I am behind on just about everything. I did manage to go through my clothes before I got sick and pick out about two trashbags worth to give away. Upcoming move to Texas gives me an excuse to downsize my stuff a bit. I also have a stack of magazines about six feet tall ready for the recycling bin.
Usually when I go through my clothes, I end up keeping t-shirts with memories attached. I still have my shirt from Nerd Camp in 1999, as well as several high school related ones. I haven't actually worn them in years, so this time they got pitched. Something clicked and it just seemed silly to keep things I had no practical use for, even if they had memories attached. My next debate is whether to treat some of my other childhood knick-knacks the same way.
As for the magazines, I had been holding on to them because I had a complete series from 1995 to 2001. But honestly, nobody really wants to collect magazines. It's an interesting mental effect... having a 'complete set' of something makes it seem more valuable. Oh well, recycle bin here I come.
All the stuff going out is being replaced by more useful things. Got the new 8800GT last night, and it's working like a charm. Tonight I will hopefully come home to a new monitor and lots of new magic cards. Oh well, I already have a place for those things in the moving process.
Thursday, May 08, 2008
Bring Forth the Pixels
So my stimulus money came yesterday. I celebrated by buying another 24 inch monitor and a video card. Got the monitor on ebay (unopened box, three year warranty) for about $125 cheaper than normal price on Dell.com (although Dell had it on sale too, so only saved about $50 over that price). The video card also felt like a steal. Got an 8800GT which, despite all common sense logic, is both faster and cheaper than the 9600GT I had wanted. All told, the damage came to $778.99... but $600 of that is Uncle Sam's money, and the rest was Grandpa's (I haven't spent what he gives me for Christmas in several years now).
Added bonus is that I don't even have to actually pay for it until March of 2009. Yay 0% credit card offers!
I look forward to the doubling of screen real estate I am about to experience. I have dual (19") monitors at work, and my single 24" at home actually feels small in comparison. I have become much more adept at taking advantage of the multiple workspace feature in X, but it's just nice to have lots of stuff visible at once. Video card will mean I can finally compiz at home too.
Looking forward to pulling an all-nighter tonight. Want to get a lot done before Tyler comes out on Saturday, and don't have a lot of faith in being productive on a Friday night. Besides, all-nighters are fun.
Tuesday, May 06, 2008
Disqus and Friendfeed
So the steady march towards Web 2.0 in my life continues. Yep, I signed up for Disqus and Friendfeed today.
Frankly I dislike the comment system here on blogger. For one, it's not threaded. Also, Disqus throws in a lot of extra niceties, like the fact that your profile works any other site that uses Disqus. They even made it really easy to switch over to the new system on new posts and leave the old system on older posts.
Friendfeed seems like a really cool system that could basically replace Facebook for me. You create an account and then link it to all your various accounts elsewhere (Flickr, Twitter, Your Blog, Amazon, even Facebook itself). It just aggregates all your activity on those sites into a nice convenient feed. It also does this for all your friends, and then you can comment on each other's feeds. The whole philosophy is to follow what your real friends are doing and share stuff. So instead of pasting some funny video around on AIM, just put it in your friendfeed. All your friends will see it and can watch and comment.
You can see my feed here. Feel free to comment on what I'm doing. It sounds like it could be cool if I had a few friends on it to follow. Also let me know if you like the Disqus comment system here.
Monday, May 05, 2008
The Slip
So several really neat things happened today.
First I woke up to an email from nin.com about a ticket pre-sale for the fall tour. They must have kept my email address from when I bought Ghosts. It was just really nice to be informed about a pre-sale by the band itself, instead of having to depend on other outlets. The pre-sale itself is also sweet, because every ticket requires a real name (which will be printed on it) to match an ID the night of the show. This means no scalpers (and no Ticketmaster)!
When I went to register for the pre-sale, I was also pleasantly surprised that a new album was released this morning. It's a free full-length album, offered in mp3/aac/flac/wav, and for once the high quality downloads are torrent files. Finally, someone gets it! When he released Ghosts he partnered with Amazon because of load concerns, and even then he had scaling problems. Either the mass public hasn't caught on yet, or (more likely) the torrents mean no scaling issues, because my experience was flawless. I had the music downloaded and was listening to it in less than a minute.
It would be nice if other artists embraced this model. Music is such a pleasant experience when it is offered DRM-free in multiple formats, easy to get, at a modest price. Today's release happened to be free, but I have gladly paid $5 for both Ghosts and Niggy Tardust, and I'll probably continue to do so. Paying $15 in a store for an outdated format that wastes valuable physical space (a CD) just doesn't compare. Today's release doesn't have the same tiered model that Ghosts did, but I hope in the future they all do, because I think that was brilliant too. I mean, he made like a million dollars in one week on that... you can't tell me the labels pay that well.
Anyway, go check out The Slip.
Friday, May 02, 2008
Brain Hurts
So uh, what have I been up to lately?
I finally broke down and got a Twitter account. At first I thought I would never touch the thing, but then realize I could update via jabber, which means I'll probably just talk to Twitter all day. My name is xich if any of you want to follow me. I'm a total twitter nub, so don't expect greatness.
Also been working on a sweet bookmarklet idea. It's coming along quite nicely. Found an interesting way around the XSS security in browsers for certain AJAX requests. If you want your bookmarklet to send data back to your server while on another site, normally you'd have to do a real GET/POST (which takes the user away from the site they are on), because XSS security doesn't allow you to make XHR requests across domains. However, if what you want to send to your server is short enough (fits in query string of a GET request), you can simply create a new image and set the source to that querystring. This will make the browser fetch the image (which does a GET request to your server), even across domains. I suppose if you wanted data back you could encode it in the image response and then binary decode it in the client. I haven't tried that, but sounds like it could work, provided javascript has some binary capabilities.
I think I might work on a jQuery plugin to implement this type of request, and if I do, I'll try to describe it better then. I wish I could claim credit for the idea, but I totally stole it from Paul Buchheit's implementation of voting on Hacker News.
Storm last night involved loss of power for a couple hours and water to come through our closed windows. As a result I didn't get a ton of sleep, and complete lack of anything for breakfast means my head is hurting. Thankfully only like six more hours until I can go home and nap.
Friday, April 25, 2008
HN Blacklist Now With UI
05/20/2008 UPDATE: Check out the new version of this which is bigger, faster, stronger, and easier to configure.
So someone said something about having a user interface for my little Greasemonkey script that acts as a blacklist on Hacker News.
Done. With it installed, a 'blacklist' link will appear in the top bar next to the 'submit' link, which will allow you to edit the list of blocked domains.
// ==UserScript==
// @name HN Blacklist
// @namespace http://news.ycombinator.com
// @description Removes blacklisted links from Hacker News
// @include http://news.ycombinator.com/*
// ==/UserScript==
// Written by Xichekolas ... do whatever you want with it.
// http://news.ycombinator.com/user?id=Xichekolas
// Just assume the stuff below will work.
var blacklist = GM_getValue('hnblacklist', '')
if (blacklist.length > 0) {
blacklist = blacklist.split(' ');
var xpathnodes = document.evaluate("//a", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var n = 0; n < xpathnodes.snapshotLength; n++) {
var thisnode = xpathnodes.snapshotItem(n);
for (var i = 0; i < blacklist.length; i++) {
if ((blacklist[i].length > 0) && (thisnode.href.toLowerCase().indexOf(blacklist[i].toLowerCase()) > -1)) {
var grandpa = thisnode.parentNode.parentNode;
grandpa.style['display'] = 'none';
grandpa.nextSibling.style['display'] = 'none';
grandpa.nextSibling.nextSibling.style['display'] = 'none';
break;
}
}
}
}
// Add link to edit the blacklist.
var submitlink = document.evaluate("//a[@href='submit']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if (submitlink.snapshotLength > 0) {
var slparent = submitlink.snapshotItem(0).parentNode; // We only care about the first one.
var editlink = " | <a id=\"blacklist\" href=\"#\">blacklist</a>";
slparent.innerHTML = slparent.innerHTML + editlink;
var link = document.getElementById('blacklist');
link.addEventListener('click', function(ev) {
var newlist = prompt('Enter a space-delimited list of domains:', GM_getValue('hnblacklist', ''));
if (newlist != null) { GM_setValue('hnblacklist', newlist); window.location.reload(); }
}, true);
}
You can install it from here.
Thursday, April 24, 2008
SICP
My junior year at KU, I happened to take a little course called "Programming Language Paradigms" (EECS 662). Professor Brown has taught this course pretty much forever, and I think it's the only thing he teaches to undergrads (although he might pitch in on EECS 368, since that seems to round robin pretty quickly). Dr. Brown is an interesting character (very much the absent-minded professor), but the course was very eye-opening for me. I didn't realize it right away, but this was exactly what I had pictured my Computer Science education being. This specific class was it.
Later I found out why. The book on which Dr. Brown based the course is called Structure and Interpretation of Computer Programs, which happens to be the introductory programming text written and used by professors at MIT. You know, that school that invented Lisp, arguably the most powerful language in use to date.
I still have this book, and have seriously been considering giving it a run through for a couple of hours each morning this summer. Today I found out that there are video lectures available to go along with each chapter in the book. You can download them (torrents even) here: SICP Lectures.
If any of you feel like becoming a thoroughly adept programmer, this is the book that will do it. The book itself is quite entertaining (filled with jokes and written in a very conversational style), but now with video lectures, it is basically an entire class. (The online version of the book is free, and available at the same link as the video.) Save yourself $25k on a B.S. in Computer Science and just spend time on this instead. It's worth it.
Sunday, April 20, 2008
Startup School (from Kansas)
So I had the fortune to be invited to Startup School this year, and since I'm currently planning to quit my job and take advantage of a summer vacation, the timing couldn't have been better.
Kathy and I flew into San Jose on Friday morning and caught the Caltrain up to Palo Alto. After living in Europe, the Bay Area's public transit seems a bit disjointed, but it really was refreshing to at least have the option. It gets the job done for our three-day visit.
Walking from the train station to our hotel, we passed the Facebook headquarters. There were a bunch of people in suits in the lobby with cameras flashing, but I'm sure that happens every time Mark Zuckerberg enters and leaves the building. That was kind of the odd moment when I realized that this was Silicon Valley for real.
After a few hours and an excellent $9 turkey sandwich, I headed down to Mountain View for the YC pre-startup-school dinner/party. The invite said something to the effect of "investors, press, and some attendees" so I was kind of expecting some kind of sit-down dinner full of business card passing and glad-handing. I mean I know startup culture is supposed to be hip and cool, but he said 'investors' and 'press' ... how cool could it be?
The reality was a nice surprise. If any investors (besides YC) and press were there, they looked delightfully like normal people, and the rest of the crowd seemed to be founders or proto-founders. Free beer was there by the bucketful and tasty things appeared on big trays, so the food obligation was fulfilled without actually disrupting the social aspect.
There was, of course, lots of networking and pitching going on, but it didn't have that creepy used-car-salesman-turned-web-2.0-marketing-guy feeling that I feared. It was just a lot of people genuinely excited about what they were doing and excited to hear about what others were doing.
Of course, people asked what I was doing so I took the easy way out and just claimed Kansas, which usually got me two things: a welcome, and 'when are you moving here?'
I didn't totally cop out though, and gave as succinct a summary of our idea as it exists so far. Comments were both positive and less so, but I figure since we are targeting a niche, it's not going to seem as exciting to people outside the niche. I think what helps us is that we aren't targeting the same niche (namely: other people in the Valley) like a lot of web-2.0ish startups are doing.
It was kind of fun (for a kid from Kansas) to actually meet and talk to all these people I know only as online personas. I got to stand and chat in person with people like edw519, iamelgringo, kirubakaran, alaskamiller, cstejerean, and dcurtis from Hacker News, which was interesting, because I can now put faces with the words.
I even met and shook hands with PG, which for someone in my position is kind of like bumping into the Pope. (Not because he is in any way holy or superior, but just because you don't often meet one of your movement's lead evangelists in the flesh.) He seemed like a genuinely nice guy, and I'm pretty sure he ran a mile a minute the entire night ... the guy definitely has energy.
Part of my personal goals coming to this event was to see how 'startup people' really acted, and if Trevor Blackwell is any indication, the only way to describe it is 'Happy.' His two robots, Monty and Dexter, provided a nice distraction from all the meeting and greeting, and I'm pretty sure no one smiles as much as Trevor does. I can only hope to be that happy someday. Ask most people what they 'do' and you get the name of a position and the name of a company. Ask startup people what they do and they will more than likely try to show you, and failing the ability to do that they will rave for 10 minutes about how cool the product is. Notice the difference: product focus instead of position focus.
Other people I talked to included two guys doing sweet graduate research at MIT, Erik of fluther.com, a Canadian pitching his whydowork.com, two guys that apparently have a really awesome highlighter, and the guys behind Stream Focus. Sadly that wasn't even a tenth of the crowd.
I hit the sack early so I could actually be awake for Startup School itself. The auditorium was about a thirty-minute walk from my hotel room, which was improved by Ghosts and the Stanford campus itself. One thing that no one tells you is that Stanford is huge. It seriously takes over 45 minutes to walk from one side to the other, so everyone bikes accordingly. Not only does it cover a lot of ground, but the buildings themselves are monolithic. I think all the floors are intentionally 50% oversized, just to make the place seem more impressive. It works though, and I came away thinking that, sadly, KU's campus has nothing on Stanford.
The first speaker was David Lawee, who is in charge of acquisitions at Google. He gave an interesting talk about his startup Xfire, which basically boiled down to 'optimize for speed.' I think he was especially targeting the flipping crowd, but was pretty insightful about funding and how it affects your outcome. Big funding means you have to want to grow big, whereas if you just want to flip, smaller funding leaves you more nimble and able to liquidate.
Next up was Sam Altman, of Loopt fame. Sam mostly talked about details regarding getting VC and getting it on good terms. While the details were interesting, I won't regurgitate them here. The two things that really stood out were the following: "don't raise money if you can avoid it, or at least wait as long as possible" and "raise in parallel." He said he couldn't stress the latter enough. Like anything, the more competition there is (between VCs), the more likely you are to get funding fast (so you can get back to work), and the more likely it is to be on good terms.
After Sam came Jack Sheridan, Partner at Wilson Sonsini. While he was a good speaker and raised some valid points, it is hard to make law seem exciting at 10am on a Saturday. His basic aim was to list ways to shoot yourself in the foot legally, so that maybe less of us would do so.
Now Paul Graham takes the stage and asks us to stop using the Internet (for a few minutes anyway, so his slides could download). His talk centered on his theory that doing good things naturally increases your chances of being successful. It sounded like an essay prototype, so I imagine you will see it in full detail at a later date (edit: read it here). One slide that stood out (and garnered a mention in my notes) was that of a cockroach. A good motto for a startup right there.
After a short break, Greg McAdoo (Partner at Sequoia) came up and gave a really great presentation about what VCs were looking for in a startup. If nothing else, the whole talk was made by one slide that listed characteristics of failed investments, which included the phrase "Drunken Parade Leaders" ... which as far as I'm concerned has to be the funniest thing ever hidden on a PowerPoint given by someone in control of hundreds of millions of dollars. More seriously, he made the point that a good one line description of what you do is important, and that as a startup, you can't create a market, but you have to be able to capitalize on an upcoming one.
Right on the heels of Greg was David Heinemeier Hansson. To be honest, I had no idea what to expect from him beforehand, because he seems to be about as polarizing as Zed Shaw.
It turned out to be the best presentation of the day, if for no other reason than the timing. DHH, sticking to his principles, gave an excellent guide to making money online. The secret seems to be charging people money. Whodathunkit? Explaining the whole presentation in words would be difficult, so just watch the video. It was just a refreshing contrast to all the heady talk about VC and liquidity events up to that point, and the delivery was spectacular. It was like he grabbed our collective ankles and yanked us back down to earth.
Paul Buchheit rounded out the list before lunch. While at first he seemed kind of unprepared, I soon realized it was just that this guy has a really dry sense of humor. He is almost sly about his deadpans, and you get the idea he is just waiting for you to get it. His overarching advice (ironically) was to listen to what people really need, rather than what they think they want. Treat requests and advice as an encoded, often distracting, way to communicate an underlying need, and then fulfill that need. An enlightening anecdote was of Gmail, when people were requesting all these quick/batch reply features, which he finally realized were coming in because the site was just slow. He fixed the performance issue, and the feature requests evaporated. If anything, his presentation was a huge success because I made a note to both try out Friendfeed (his current product) and apply there if I like it as a customer.
Next up was probably the richest guy (briefly) in the room, Jeff Bezos, founder and CEO of Amazon. He mostly pitched AWS, which was probably redundant for anyone that has already drunken from the AWS Kool-Aid, but as a sipper myself, I still found a few enlightening things. One blockbuster graph he used showed how a small company doing online video editing was able to scale from 50 servers to 5000 in just four days using EC2. You simply can't fill out purchase orders that fast if you actually had to buy the hardware. A couple choice quotes included "that is way above my pay grade" (referring to US Immigration Policy) and "we try to be customer focused rather than competitor focused" which just seems like it belongs on everyone's wall in 192pt font.
After Bezos came Mike Arrington, of TechCrunch. He talked about getting press and the direction in which TechCrunch is moving. He also spent a few minutes talking about trolls, which was ironic because there was definitely a mic troll there all day. You know the kind of person I am talking about ... the guy who gets up to 'ask a question' and really just wastes a minute of everyone's time trying to show how smart he is. This same guy got up over and over, and by the end of the day it was obvious everyone was sick of him.
Speaking of the mic troll, next up was Marc Andreessen. This guy was the original startup guy, and keeps having success. On Friday he announced a huge funding deal for his new startup, Ning, so he was fresh off success. He talked about quite a few interesting things regarding the economy, but the highlight seemed to come when the mic troll tried to strike again. This time Jessica Livingston (who I swear has an elementary school teacher alter ego, she is that nice) was mic'd up herself, and politely but firmly crushed the troll's dreams in front of the whole crowd (to much applause). Thankfully that was the end of him.
See, that nice.
The last speaker of the day was Peter Norvig, head of Google research. His talk was slightly more technical than most, and really proved quite interesting. The overall idea was that more data was always better than better algorithms, and he illustrated that quite nicely talking about Google image search and tokenizing East Asian languages (which have no spaces between words). I wonder if this guy does video lectures, because if so, I need to watch some of them. I'll at least have to check out his books.
And that was the day. All of the speakers were quite entertaining, often surprisingly so. DHH was definitely the highlight for me, just because he tacked in a different direction and kind of grounded us a bit. The overall theme for the day, mentioned by almost all the speakers, including Bezos and McAdoo, was to look for a problem that bothers you, and build a product to fix it. All this other stuff is ancillary to having a great product you are passionate about.
Now it's time to go catch the plane back to Lawrence. I've got a fresh Economist in hand and some fun things to think about. Overall it was an excellent weekend, well worth the trip, and I look forward to next year.
(edit: Watch all the presentations, and added speaker photos, because Gary Tan took such good ones.)
Monday, April 14, 2008
Teacher
So I found A Mathematician's Lament today. For anyone that really hated math classes, or even mildly disliked them, I very much recommend reading it. His description of math education is uncannily accurate, and disturbing to boot. It actually kind of inspires me to be a math teacher. If you don't want to sit through the whole thing (it's 25 pages), I highly recommend the first couple pages, the section starting at page 14, and pages 21-25.
I put in my six weeks notice today. Summer is finally coming.
Have a firm timeline for the project with Tyler and Scott. Lots will be happening with that in the next couple weeks. Hopefully things will go well.
I'm uber-tired right now, so that is all you get. Go read that link!
Friday, April 11, 2008
Greasemonkey
05/20/2008 UPDATE: Check out the new version of this which is bigger, faster, stronger, and easier to configure.
So I know Greasemonkey is like a billion years old, but I finally found a use for it today and wrote my first GM script.
There was a vote today on Hacker News to ban submissions from Valleywag, mainly because they are all linkbait. For some time I have been avoiding links on HN to certain sites because my experience with them in the past has been less than great. So why not save myself the time of actually avoiding those sites and just hide them to begin with?
I put the script up on userscripts.org as HN Blacklist. Here is the source:
// ==UserScript==
// @name HN Blacklist
// @namespace http://news.ycombinator.com
// @description Removes blacklisted links from Hacker News
// @include http://news.ycombinator.com/*
// ==/UserScript==
// Written by Xichekolas ... do whatever you want with it.
// http://news.ycombinator.com/user?id=Xichekolas
// Edit this list of blacklist terms.
var blacklist = new Array('valleywag.com', 'nytimes.com');
// Just assume the stuff below will work.
var xpathnodes = document.evaluate("//a", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for(var n = 0; n < xpathnodes.snapshotLength; n++) {
var thisnode = xpathnodes.snapshotItem(n);
for (var i = 0; i < blacklist.length; i++) {
if (thisnode.href.toLowerCase().indexOf(blacklist[i].toLowerCase()) > -1) {
var grandpa = thisnode.parentNode.parentNode;
grandpa.style['display'] = 'none';
grandpa.nextSibling.style['display'] = 'none';
grandpa.nextSibling.nextSibling.style['display'] = 'none';
}
}
}
I started out using jQuery to do this, but converting it to pure javascript was a fun experience and a worthwhile effort in itself, even if nobody actually uses this thing but me.
Tuesday, April 08, 2008
Thursday, April 03, 2008
Tonganoxie
So last night several of us went with Bob and Jessie to Tonganoxie to pick up their sweet new hot tub. Overall the trip was a success, as they have a hot tub sitting on their patio now. But I feel I must detail the hilarious beginning of the evening.
You see, this is the route we were meant to take:
24.9 miles - about 41 mins
But this is the route we tried to take:
27.4 miles - about 49 mins
Unfortunately the bridge over I-70 was out. So this is the route we did take:
34.3 miles - about 1 hour 7 mins
Notice the nice spiral shape. I'm sure that is mathematically significant somehow.
The ride home was nice and relaxing, and the tacos were excellent, so all and all a good evening. Poor Schwumps on the other hand...
Wednesday, April 02, 2008
Euler
Allan pointed me to a kickass website the other day. Project Euler is an interesting confluence of number theory, geometry, and programming problems. I have done about half a dozen of them so far. I think what I like best about them is that they serve as good warm-up problems. Often it's hard for me to start on something because I'm not entirely sure what to do first. Doing a euler problem puts me into programming mode. Of course, I'll eventually run out of them, but I do have all my computer science textbooks laying around. Maybe I'll finally have a use for those.
In the interest of having something to attach myself to for Startup School, Tyler and I have been working on getting some basic functionality together. I've spent a lot of time the last couple days working with the new merb and jQuery. My javascript skills are coming along, but I'm currently fighting with creating a custom rich text editor. I have somewhat of a reference implementation in jWYSIWYG, but the editing feels buggy at best. There seem to be lots of focus issues and general UI quirks that don't make it feel quite natural yet.
My initial implementation with textareas was quite normal feeling, but that would require users to learn some form of markup, which just isn't acceptable in the age of Word and OpenOffice. On the other hand, do I really want to be reinventing word processing software in the browser?
*couple hours pass*
Op, better finish this post. Just had minor success in getting my own iframe-based editor to work. That will give me a good starting point this evening to make it do useful things.
Currently Listening: Piggy (Bassland Club Mix)
Friday, March 28, 2008
Accepted
So I stayed up late last night waiting for an email about Startup School. Turns out I got in! I'm not really sure how selective it is anyway, but it's cool nonetheless. The anticipation before receiving the email was roughly equal to that of Christmas Eve when I was eight.
Now I get to figure out plane tickets and hotels and (most likely) car rentals. I am looking into good old public transportation (since it's at Stanford and San Francisco is supposed to have good public transit), but compared to what I got used to in Europe, it's not looking great.
I'm also hoping to use this as a motivator to get some small project done before I go, so I have something to talk about when people ask 'what I do'. So many of the attendees actually have startups in the wild, and here I am just hoping to start soon.
In other news, NIN is touring again this fall, and they are conveniently headed to Houston, so I will catch them there. Last time I saw them was in St Louis in 2006, so I'm excited to see lots of new stuff.
Tuesday, March 25, 2008
Think of the Coders
Finally, somebody said it: Save The Developers.
I also noticed that the new version of merb has been out for quite some time now. I played with merb briefly (0.5.3) and really liked its design philosophy. It felt like I had control over what I was doing without requiring an absurd amount of configuration. One of my biggest complaints about Rails is that there seems to be four ways to do everything, and the documentation on the options is often out of date or conflicting.
Thankfully, you can barely find any merb docs, so there is less confusion! Seriously though, the current release is making a big push to properly document a public API, and merb seems so well done that I'm sure it'll be easy to grok.
My experience with it was definitely pleasant the first time. Merb + Datamapper for a simple app would serve pages at about 700 req/s on my home machine, when an equivalent Rails + ActiveRecord app would only hit about 120 req/s. Of course all scaling issues don't really matter until you have lots of traffic, but any advantage is useful.
Also, while reading about Rack, I ran across this presentation that included something called Coset. It was basically an extra layer on top of Rack that would serve RESTful web services. The example code was brilliantly easy to understand, but I can't find a site for it anywhere. Anyone have any ideas where to find this thing?
The ideas for this summer continue to pile up.
Friday, March 21, 2008
Accomplished
I just made my $4000 contribution to my Roth IRA for 2007 this morning. Man it feels good to have that done. On top of that, today is payday and I had a confluence of other bills to mail off too, so it generally feels like a financial cleansing just happened.
Now I just need to figure out what to do with that $4k. The general plan is some kind of ETF, since I can't touch the money for another 35 years anyway, but the market is so depressing lately I don't even want to pick.
I already have my $5k contribution for 2008 saved up (factoring in my KPERS rollover), but I'm keeping it in savings until tax time next year. So I guess the next immediate goal is to save up for this summer. Unemployment here I come!
Tuesday, March 18, 2008
More Organization
So after reading Jys's entry on clutter, I am once again resolved to pare down my possessions. I was temporarily working on this problem last fall when we moved into our apartment, and managed to sort everything I no longer used into one closet (my ebay closet). Unfortunately I have been too lazy to even ebay the stuff (leave it to ebay to make selling things seem like work), so it's all still sitting in that closet.
One of my favorite articles on this subject comes from Paul Graham. In Stuff, he writes:
I first realized the worthlessness of stuff when I lived in Italy for a year. All I took with me was one large backpack of stuff. The rest of my stuff I left in my landlady's attic back in the US. And you know what? All I missed were some of the books. By the end of the year I couldn't even remember what else I had stored in that attic.If you substitute 'Spain' for 'Italy' above, I could've written this. I even have my old touch-tone telephone in a box somewhere, just in case I decide to reverse a decision I made seven years ago that a cell phone is all I need.
And yet when I got back I didn't discard so much as a box of it. Throw away a perfectly good rotary telephone? I might need that one day.
What makes stuff even worse is that it usually costs time/money to get rid of it. I think that is why we accumulate so much of it by default. Getting rid of stuff is suspiciously like cleaning.
There is also the this-could-be-useful problem. I look at that telephone and start thinking up situations where I would need it. Need to test my line to see if it's working? Better have a phone handy so I can check for a dial tone I'll never ever use. I can't think of a use for the nine parallel ATA cables I have in unopened plastic bags, but you never know, the technology could come back into style.
Likewise, that complete set of PC Worlds from 1995 to 2001 might be worth something to someone someday. It's obviously worth breaking my back every time I have to move it.
I think my dumpster might get a visit or two tonight.
Friday, March 14, 2008
Favorite Code Today
I was most proud of this little gem today:
function addparams(query) {
return query.replace(/(&?)([^&=]+)=([^&]*)/g, function(m, amper, key, id) {
var val = document.getElementById(id).value;
return val.length > 0 ? amper + key + "=" + escape(val) : '';
});
}
It only ended up being six lines, but initially it was more and I like trimming code down more than making it bigger. The function itself is dead simple, nothing tricky or insightful here, but it's just downright pretty... even with the line noise regexp. Something about it just seems elegant and symmetrical. I don't even know how to describe how code can be pretty, but I would consider putting this on the wall in poster form.
So I applied for Startup School today. I figure I can waste some cash on a weekend in San Francisco to go meet some people and hear some hopefully inspiring speakers. Just thinking about it makes me look forward to this summer. I plan to be so nerdy.
Wednesday, March 12, 2008
Checking Things Off
I am a very to-do list driven person. Basically, if I don't write something down where I will constantly see it, I won't do it. Because this has bitten me in the past, I also obsessively check my to-do lists and mentally reorganize them constantly.
My problem lately has been the proliferation of the lists themselves. I have my checkbook spreadsheet, which is more or less my financial to-do list. It tells me when to pay bills, when to transfer money to savings, whether I am hitting goals or not, etc. I also have my Google Calendar, which has my social/work to-do list. (Birthdays, meetings, etc.) Then, for things that have no definite date associated with them, I have just a plain to-do list on my Google homepage. This is for stuff like "Get Insurance" and "Call about KPERS rollover." Finally, to top it all off, I have a legal pad full of programming to-dos. Actually, I have four of those, two at home for different things, and two at work (again for different projects).
So, with all these different modal lists running around, it's easy to ignore one or two for a while. This is what I was doing to my no-definite-date list. I finally remedied that a bit this week by checking off the two highest priorities. First, I got some health insurance. Second, I called AT&T to sort out my cell phone.
I had various issues with my cell phone all happen at once. First, the phone itself refused to charge, and eventually went dead. Second, I really wasn't using it enough to justify $50 a month. Third, the fact I had to pay for text messages sent to me by others just really bothered me.
So I called the other morning ready to pay the stupid termination fee (which I regard as rather like extortion) and cancel my plan. I had been putting this off for some time, but I got another bill (for a month during which my phone was dead in a drawer), so I decided to finally deal with it. The cancellation lady was very helpful however, and solved all my issues rather nicely.
First, I found out I could move my phone to my parent's family plan without a fee. This means my monthly cost will shrink from $50/mo to about $20/mo. Second, I added a block to my line which prevents me from getting any text messages. Third, she is sending me a new phone in the mail to replace my broken one. Since I was still under the one year warranty, it's all free of charge.
Amazing what can get done when I stop avoiding the issue.
And now that I have articulated my to-do list issues, I would like to think of a way to consolidate a bit. I'm thinking some kind of consolidated calendar meets checkbook, if I can figure out an easy way to interface with it. Hell, maybe I'll finally have an interesting project with motivation to finish. (To add to my huge list of ideas that I currently am not working on.)
Tuesday, March 04, 2008
API
So the guys at Buxfer.com opened up a REST API to their service today. I really appreciate that they did REST right, rather then some weird not-quite-by-the-rules hybrid. If you have ever had to use SOAP to do anything, you can really appreciate how fresh and lightweight REST feels, especially when it's ROA.
This got me thinking about my favorite parts of programming. I think that API design is a very interesting problem, because of the constant clashing requirements. On the one hand, you want something simple and easy to understand. On the other, you want something rich enough that it is actually really useful. You also have to really think it out beforehand, because once an API is out there, it's a major faux pas to break existing calls. It's kind of like designing a miniature language. A DSL for data if you will.
I have to wonder if the API is actually what makes a site have lasting value. All of the big important sites I can think of on the net are important to me because they can be built upon. Facebook exploded when they introduced their Platform. Amazon transcended its place as the Walmart of the Internet when it started offering AWS (and became more like the Power Utility of the Internet). Paypal became a real merchant option with their API, Google Maps exploded with it's API, and the most obvious of all is Twitter, which receives 90% of their requests through their API.
If anything, it seems like the API is the real killer feature that makes or breaks a site. It's like selling directly to the customer as opposed to selling to other salesmen. If you sell to a salesman (get them to use your API as a backend service), then you get all his customers too, without having to chase each of them down directly. On top of that, your API clients are much more likely to be willing to pay for what you offer, because they will be using it to make money. They will also be more likely to stay around long term.
Thankfully I think API design is wicked fun, so hopefully I can make something out of this.
Monday, March 03, 2008
Retirement Accounts
It seems like we have an absurd alphabet soup of options for retirement accounts nowdays. I just don't get why there have to be so many options. I know as a 24 year old, my Roth IRA currently makes the most sense for me, but what happens when I start working somewhere that offers a 401k? Or if I suddenly start earning a lot more and decide a Traditional IRA would be better for me? Or, what if I finally become successfully self-employed and have the ability to create a SIMPLE or SEP plan? It seems like we could fix this. Here is my proposal.
Each individual has one account which, to distinguish, I will call a Lifetime Investment Account (LIA). These accounts allow both pre-tax and post-tax contributions. Pre-tax contributions are limited to some set amount (lets say $5000/year - indexed for inflation), and post-tax contributions are limited to the individual's Adjusted Gross Income. The account balance grows tax free, and withdrawals after a certain age (say 60) are also tax free. Withdrawals before this age are taxed as normal (earned) income plus a 10% penalty.
So far this is sounding like a combination Roth and Traditional IRA, with higher contribution limits. Here is where it gets efficient though. Each account has three types of access: Owner, Government, and Contributor. There can only be one Owner, and only the Owner can make both deposits and withdrawals. (The Owner is obviously the individual.)
Only the US Government has Government access, which it would use to deposit a new special kind of bond called a Social Security Bond. This is a non-transferable, non-marketable government security representing promised future SS payments, and is void upon death. Read more over at The Skeptical Optimist about these bonds.
An account can have multiple Contributors (there is no limit). Contributors can only make deposits (they cannot even see the current balance of the account). Any other legal entity can be a Contributor. This means your company can contribute to your account, your parents could, your children could, whoever. If you own your own business, it could contribute to your LIA. To keep the tax figuring simple, all contributions made by Contributors are post-tax. Pre-tax contributions can only be made by the Owner.
Remember the contribution limits? These are global limits. In a simple case, if I make $50k this year, and contribute $4k of it pre-tax to my LIA, then assume my AGI is $46k. That is the limit of contributions from all Contributors combined. Anything over this limit is refunded to the Owner and taxed as normal income. Contributions by the Government do not count towards these limits.
The Owner has total control over investing the contributions. The account custodian can offer any range of investments for the Owner to choose from, just like an IRA works today. Ideally these would include (at minimum) several index tracking mutual funds, ETFs, and money market funds, as well as access to equities and regular mutual funds.
The main thing is that this will stop the proliferation of accounts. When you switch jobs, you just give your new employer your LIA information and they sign on as a Contributor. Since they can't see your balance or investments, you don't even have to worry about removing old Contributors (although they can remove themselves). This account stays with you throughout your adult life, and the SS Bonds make it easy to estimate how much you will be drawing there. You can roll the account over to another custodian directly. Direct rollovers will involve liquidating the account assets, then directly rolling over the cash amount to the new custodian. Simple stuff.
I think this also has big tax preparation implications. Since you only have one lifetime account, there are fewer things to keep track of. Since it acts like both types of IRA at the same time, you don't have to agonize over getting better tax treatment. Since anyone can be a Contributor, it does away with all those 401k, 403b, SEP, and SIMPLE accounts.
Finally, your custodian can compete on investment features and tools, just like IRA custodians do today. I'm specifically thinking about the ability to define an asset allocation plan upon account setup, and simply leave it on autopilot throughout the working life.
Obviously the law that created LIAs would remove the ability to create any more of the existing alphabet soup plans, so within a generation these would fizzle out and our tax code could be simpler. Existing plans could also be rolled over into your LIA, subject to the usual rollover tax implications. Basically your existing 401k custodian would sign on to your LIA account as a Contributor, then contribute the value of your account. You (the Owner) could then allocate the contribution as you pleased.
So what am I missing?
Friday, February 29, 2008
Cien
Hundredth post! Yay!
Had an excellent lunch at Vermont St BBQ today. It's been a long time since I felt this satisfied in general. There is just something about today that is awesome feeling. I am definitely looking forward to a nap after work though.
I ran across one of my favorite programming blog posts again today. It had been a while since I last read it, so I gave it another go. I must say, The Kingdom of Nouns pretty much describes perfectly why Java now frustrates me. Admittedly, after working with it the last few months, I have come to tolerate it much better, but I do miss my Ruby/Erlang/Scheme fun.
In just 84 days my summer vacation starts. Woohoo!
Thursday, February 28, 2008
Thursday
It seems I only post on Thursdays recently. I wonder why.
Due to a minor issue on a query at work yesterday, I got to learn a lot about how mysql indexing works. It was fun and interesting. In the end, I think the whole thing will be a non-issue, but at least I got to learn some neat stuff along the way. For instance, the order you put fields in an index matters, because any fields after the field being used to sort can't be used in where clauses. There are just a ton of little nuances like that.
In my home time I have been working with Erlang a bit. I'm still in the uber-nub stage with it, but I am trying to make some progress. After all, I have this glorious four core machine, and I should put it to use with something. Also, I think Erlang seems like an interesting niche with a lot of opportunities to build interesting things. The Ruby space has matured so nicely since I started with it in 2005, hopefully the Erlang space can too.
The two languages seem to compliment each other so well too. Ruby is just so great for doing things quickly, and now that it has so many libraries to do things, it makes a great exploratory tool. Erlang seems great for another type of exploration, which is back end performance. One of my first experiments with it was comparing a simple factorial algorithm with a parallelized one. The difference is quite mind-blowing. I mean, all I did was cheat and make it calculate fac(N-1), fac(N-2), and fac(N-3) in child nodes all at once. This is essentially akin to increasing the branching factor of the recursion tree from one to three. But it definitely put more cores to use and finished faster on bigger numbers.
Like I said, I haven't done anything too exciting with it yet, but I have an idea for a webservice framework that I'd like to build (for my own projects, and maybe for open source consumption). The basic vision is write something to map Yaws requests RESTfully to Mnesia records or some SQL db. The cool part would be seeing how well it scaled. I think I could get some people at hacker news to hammer it with a script for a while to see how it went.
Non-programming news in my life mostly includes taxes and the doing of. How fun!
Thursday, February 21, 2008
(mis)Education
A recent confluence of articles on YC News have the topic of education in my mind a lot the last couple days. All this reading and thinking has brought something that has always bothered me back to my attention. To put it bluntly, the idea that miseducation at some level of development is acceptable.
Regardless of the position you take on any remotely controversial issue, be it political or personal, you have probably asked yourself at one time or another how the other side can be so naïve. Rest assured, they are thinking the same of you, but that is beside the point. I think the reason is that the vast majority of people don't think critically on any topic (myself included). What they do instead is adopt the beliefs of someone they respect for a different reason, be it their parents, a favorite teacher, their peers, or some charismatic guy on TV.
What I keep coming back to as I try and think about the topic of thinking critically (the meta-discussion-fu!), is that it only becomes societally acceptable after a certain age. Oh, the education mantra is to “foster critical thinking and problem solving skills” or some such newspeak, but the reality is that developing these skills is limited to safe questions. The need to maintain authority and not offend minority parties means that any non-safe question is off limits for critical thinking at a young age.
This starts early. Think about learning math as a kid. At some point, every kid asks why the heck they need to learn 'this stuff.' The teacher makes some vague promise that it will be useful later in life, hoping the kid is placated. If the child persists in asking why, one of two things occurs. The teacher either does some hand-waving about how math skills are necessary for a good job, or they tell the student to stop goofing off and get back to work. Neither is really a good answer in my opinion, because neither reply does anything to make math seem important. The idea of a job is as alien to a 12 year old as the idea that factoring polynomials is useful when calculating average case algorithmic complexity would be.
Jump to another subject. Your history classes, if they were anything like mine, were a series of gradual refinements of founding myths into the gritty reality of what actually happened. At a young age 'history' consists of stories like the Thanksgiving myth and the Pilgrims coming to America. It wasn't until sixth grade that we learned that there had been Europeans in the Western Hemisphere for over 100 years by the time anyone landed at Plymouth Rock. In my five year old mind, the Pilgrims made a daring voyage off the face of the earth, and landed alone and in an alien world. Later I learned that the reason our history education of the New World began with the Pilgrims is most likely because they were the first well-known group to come without the intention of war/profit/conquest. There is an idea that kids need to be handled with kid gloves, even if it's detrimental later on. I would say that at least 50% of every later class was spent unlearning something taught to us previously and learning a more realistic version. I say a more realistic version, because the new version was most likely to be contradicted the next semester.
As for English, this has been well said by Paul Graham in his essay on essays. The basic gist is that somehow writing got thrown in with literature, and so all the practice kids get at writing is about literature. (Or, if they had a decent history teacher that wasn't lazy and actually required essay exams, history.) How many teenagers do you know that give a flying crap about literature? How many teenagers do you know that care about music, movies, or relationships? If you actually remember being a teenager, my guess is you answered about one percent to the first question, and about 99% to the second question. So why aren't kids writing about music, movies, and relationships?
The answer is twofold. One is that these topics are considered insubstantial and too 'pop culture' for serious writing. But that is missing the point. The whole point of learning to write is to be a good writer (regardless of the subject). To learn anything you have to practice, a lot. Wouldn't someone be much more likely to practice if they wrote about something that interests them? I never practiced basketball, and I consequently sucked at playing it. I did, however, spend a lot of hours in high school programming, and I'd like to think I became fairly good at it.
The other half of the answer is that the situation is habitual. Writing instruction has involved writing about literature for as long as anyone can remember, and if was good enough for our parents, it's good enough for us.
To me, the root of all these problems, and probably a few that I am missing, is that kids are taught, rather than encouraged to learn. At some point, fairly quickly (I remember having the realization in fifth grade), the whole school game becomes a meta-game. The objective ceases to be about curiosity and learning, and starts being about how to get the best scores. To get the best scores you have to learn the material, sure, but that only means learning the material you know will be on a test.
The greatest evidence for this mindset is in a college course. (Time to assault the Ivory Towers.) If you walk in to any undergrad course on the day before a major exam, you can tell within five minutes how interesting the class is to the students. If the class is really exciting and stimulating, the day before the test will be spent in a discussion on some topic related to the material, like any other day. If the class is (far more likely) boring and simply something to check off on your planning form, the students will spend the day pleading to know what every single question on the test will be. They will ask what to study, how many points each section will be worth, whether the scores will be curved, whether there will be extra credit, and so on. I feel sorry for the professor because, even if he doesn't consciously realize it, he is experiencing a conniving interrogation for insider knowledge that even the most seasoned Presidential Press Secretary would have trouble dancing around.[1]
The students probably don't realize what they are doing either, because they have done it for so long. They are subconsciously calculating many things at once. Foremost of these is: “What do I need to study to maximize my score?” but they are also considering how much effort to expend on studying, what kind of grade to expect on it given past experience, and a myriad of other meta-considerations. No where in all this thought is the subject of the course. Students are extremely good at the game of being a student, and generally much less good at whatever their major happens to be.
There are always those students and courses that defy this. I think my functional programming class was the most horribly administered course with the most boring lecture in my entire undergrad career, but it's still my favorite class, because despite all of that, the topic was interesting. I went above and beyond on every project in that class. It was one of the few classes that I didn't bother keeping a running spreadsheet of my grade. I knew I was kicking ass, because I thought about it all the time, even in other classes. My girlfriend feels the same way about organic chemistry.
This meta-education mentality all flows out the critical thinking duality. Specifically, the ability to think critically and question assumptions is turned off in students around the time they begin playing the meta-game of education.
It's moderately necessary, to maintain order in the holding pens we call schools, that the students don't realize they are being held. What you do is keep them busy. So classes are structured like lectures, where a bunch of facts or processes are given to be remembered, with the implicit assertion that these facts and processes will be on a test in the future. This system is great for teaching X facts in Y time, with minimal deviation, and getting score Z on some standardized test.[2] Some 'educators' take the theory even further, assuming that, statistically, a student will remember roughly half of what they are 'taught,' so they just add in more facts in the hope that more stick. I had a professor admit to this once.
Extracurricular activities help too. Almost every kid defines himself by what group he belongs to, and these activities provide an approved means to be part of a group, without the risks (violence and exclusivity) inherent in naturally forming groups (gangs and cliques). Far from criticizing these activities, I'd argue they are equally, if not more, important as the classes themselves. Social development is just as important as intellectual development. But these activities also provide a distraction, which is convenient. The distraction is from the fact that school itself is boring and seems pointless.
How would you fix this? I'm not an expert on the theory of education, but maybe that helps. To me, you do the obvious thing. Make school not boring and not pointless.
To be more explicit, I think the problem is that we are scared to challenge kids. A list of facts on a board are not challenging to students. You have to give them something that forces them to try and beat the problem. It has to be hard and interesting. Kids will rise to the challenge, because they will feel like they have accomplished something at the end. Something besides a good grade. Suddenly the subject is interesting again, rather than the meta-game.
Going back to the question about the utility of math, the teacher could respond with some demonstration of how it is useful to the kid today. Make an obstacle course for the class, with the one rule that they must pass through each obstacle at least once, but can do so in any order they choose, as long as the end up back where they started. The person with the fastest time wins. Bam, you have just got them thinking about the Traveling Salesman Problem[3], a famous problem in combinatorial complexity and graph theory, without even realizing it. Instead of teaching the kids the optimum solution to the problem (which would be pretty hard with the TSP anyway ;), ask them for ideas on the best way to solve it, write down the ideas on the board, and let the kids discuss it.
If you start this out of the blue, you'll have a lot of kids just ask straight out what the right answer is. They are used to being told the right way to do something, and have become quite dependent on it. Thankfully the TSP has no 'correct' answer so far as we know, so you get off easy here. But even if you knew the answer, you wouldn't tell them. The point is to get them to realize that they can find the correct answer on their own. It's a confidence issue.
For a writing assignment, try getting the kids to teach themselves something. The whole reason I write long somewhat meandering things like this is to try and organize my thoughts on something. Putting it out there for others to read just keeps me honest, and provides a risk factor, in that maybe someone will poke big holes in my thoughts. I am generally interested in nerdy things, so I write about nerdy things, not English literature.
Once kids get out in the real world, being able to think critically about a subject and modify their own assumptions are crucial skills in being an informed adult. So many people make political decisions based on gut feelings or a persuasive argument, but never sit down to examine the reality behind the issue. How many people do you know that think the national debt is the mark of doomsday, yet don't actually understand how a fiat currency system works? I was in that camp myself until I took the time recently to really study it. My amateur (slightly more informed) conclusion: macroeconomics is almost entirely unintuitive under the fiat system, and a lot of things deemed bad or good by the general public are in fact the opposite.[4] But that is a topic for another day.
It all boils down to our education system teaching facts to students, according to some standard, rather than teaching students to enjoy learning. To abuse a parable, it's like giving a man a fish every day instead of helping him become a fisherman. How is it logical to expect someone to catch fish just because they have eaten a lot of it? How is it logical to expect kids to want to learn, when the only reason we give them is that it will be 'useful someday.' How do we expect adults to think critically and question their own assumptions if those abilities are disabled during childhood?
[1] I may have just found a good way to pick out interesting electives. back
[2] But do they realize that the facts will only be remembered for time T? back
[3] http://en.wikipedia.org/wiki/Traveling_salesman_problem back
[4] Revisiting the Liberal Agenda. Note that this title uses the word 'liberal' in the classical sense, which is different than how it is used today. Liberal is this case is about both economic and social freedoms. Neither party today is very liberal in this sense. back
Thursday, February 14, 2008
Cryptorchild
Went and saw Manson on Monday night. It was a blast. Harry posted his review, which I generally agree with, so I'll save you the babbling.
This week at work has been great. Ken gave us a deadline, and that has put me into overdrive. I love deadlines. Maybe it's the effect that school had on me, but I work best with a deadline. Especially a close one. Much has been accomplished. It mostly forced me to just finish up the tables I have instead of looking for ways to refactor. I like the refactoring better, especially since I still have a half dozen things I'd like to tackle, but it's easy to put off the tables themselves without a deadline for them.
I haven't been doing much in the spare time other than play dota, read, or sleep. I need to go back and visit my grandpa and parents this weekend. It has been like three or four weeks, and with grandpa in the hospital lately, that seems like quite a while. I have just been sick and reluctant to visit in case I infect him. I hear he has been moved to a rehab facility that is quite nice, so hopefully things are improving for him now. (He just had some very major open heart surgery at 75.)
Tomorrow is February 15th! Yay!
I'm still on track to hit financial goals for this month and next. I'm still debating on whether I want to work Spring Break week or take it off. I guess I should check with my brother and see if he still wants to road trip. It would be nice to have the extra week's pay, which would buy me another 24" monitor and the video card I want, but a week off is always nice too. The thing is, I only have about 14 weeks left here anyway, so not like I really need a break.