It’s not the same as it was.

I came across an article on BBC talking about advances in health care in the past 60 years. Honestly, 60 years isn’t that long, considering the changes that have occurred were previously unknown to humanity. So, a lot of assumptions about things have to change. Getting in a car accident; getting shot; damage to organs; lots of things are becoming undoable. This increases risk taking, and as every investor knows, increases rewards.
60 years ago, you didn’t have people jumping the Great Wall of China on a skateboard. It’s not that it wasn’t physically possible. They had the wood and bits of plastic back then. No laws of physics have changed. But 60 years ago, no one was able to get to this level without killing themselves.

Athletes have always pushed their bodies to the edge. But it used to be that if you crossed the line, there was no going back. You don’t really get a second chance if you break your neck. Or, at least, you didn’t. Now we routinely have people rehabilitating after a broken neck. We’ve given athletes the ability to take bigger risks, make bigger mistakes, and come back smarter and stronger.

And all these because some doctors figured out a few neat tricks. It’s amazing to see how growth in one area improves performance in another.

I can’t wait to see what’s next. It never was like this before.

Javascripting

I’ve been writing a lot of JS lately, and I wanted to take this opportunity to drop some knowledge right here.

Lots of languages have support for some type of for-each-looping. This is great for looping over associative arrays, and even regular arrays, since it’s a bit cleaner than the standard for-loop. Sadly, Javascript doesn’t totally support this. There is a for-each equivalent in JS, but it’s a bad choice to use, since in JS, everything is an object, and objects can be accessed with different notations — you can either do thing.property or thing[“property”]. This notation should throw a hint as to why looping for-each isn’t the same as other language — if you try and loop over everything in an Array, you’ll also get methods that have been assigned to the Array object. Fortunately, Javascript isn’t totally foolish, you won’t get every single method, but you can definitely get some noise. Here’s Mozilla’s explanation of Javascript for-each:

Although it may be tempting to use this as a way to iterate over an Array, this is a bad idea. The for...in statement iterates over user-defined properties in addition to the array elements, so if you modify the array’s non-integer or non-positive properties (e.g. by adding a "foo" property to it or even by adding a method or property to Array.prototype), the for...in statement will return the name of your user-defined properties in addition to the numeric indexes. Also, because order of iteration is arbitrary, iterating over an array may not visit elements in numeric order. Thus it is better to use a traditional for loop with a numeric index when iterating over arrays.

It’s a shame, because a nice for-each is some of my favorite sugar in a programming language. But, I like Javascript enough that I will forgive it for this. I have a suspicion that with some type checking, a more traditional for-each might be possible, but that’s for another time.

I also found the site of a very cool dude, Kent Brewster. Just one example of his awesomeness is found in his article on hardened Javascript. I also really like that he makes notes and lists and saves information; it’s probably one key to his success.

Effects are caused.

In my eyes, this is a good article about Bill Gates. It’s a little suck-up-y to Gates in a lot of areas, but I really enjoyed one particular quote about halfway through.

Then I met Warren, and I thought, “Oh, wow, this guy isn’t just about buying and selling stocks and businesses. He is thinking about how the world works.” And he asked me questions that I always wanted somebody to ask me, about why hadn’t IBM been able to do what we had done, and how software gets priced, and why does one company have a defensible position. He wanted to understand the dynamics of the industry. To me it was way far away from, “What is your company worth?”

Then he explained to me about how Wal-Mart had not only changed things in its business, but how it had an effect on newspapers because they thought of their advertising differently than individual local stores had. And he talked about how banking really worked in terms of credit risk. The whole time all I could think was, “Hey, I’ll be smarter about running Microsoft after I talk to this guy.” And so I stayed the whole day.

I can think of several ways that this story demonstrates why Warren Buffett is where he is.

  • He meets smart people
  • He asks good questions
  • He listens
  • He helps others understand things better; he gives great knowledge for free
  • He thinks things through at multiple levels

I don’t know how much of Buffett’s image is genuine, and how much is PR fluff. But he certainly seems to often demonstrate specific qualities that are good.

“Do you know how long that’s going to take?”

When I read about ICANN’s proposal to let anyone register a TLD (top-level domain; the .com, .net, .edu part), I can’t help but think of the number of systems that check email addresses (or domains in general) for validity, and won’t accept any email address that ends in anything but the few most common TLDs.

It would have been better if they had done everything correctly upfront, right? There’s an established standard for emails that
has been around for years describing — in painstaking detail — how to tell if an email address is valid. Surely it’s not hard to do it right, right?

There are two ways to deal with an issue:

  • do it right the first time
  • do the best you can and deal with issues as they arise

It seems that there are characteristics of situations that make one option more appropriate than the other.

  • Is it is an established thing?
  • Is the “right way” easy to learn?
  • Is it something that will last over time (the foundation of a house, as opposed to the color of the paint), or is it inherent that the thing will change soon?

Possibly everything starts as “best you can” and eventually moves to “do it right”. When we are babies learning to walk, we don’t consult textbooks on human mechanics; we don’t visit specialized doctors who focus on the angle of the spinal column to the neck; we get up and fall down a lot. It’s a new thing, and any given sequence of steps is a momentary thing, we aren’t still reliant on the series of steps we took years ago.

When considering software, however, the characteristics blend a lot. Software stays around for a while; I read a great quote relating to this:

“Obsolete hardware gets replaced. Obsolete software goes into production every night”

There are easily millions of lines of code that are 30-40 years old that are still used today. That’s definitely a vote to do it right. However, software development is not established — at least, not in the sense of cooking, where professional chefs have existed for thousands of years and the art is well-defined. Software development is still changing. Even the standards I talk about will change as we have new needs. The people who are writing the standards are just doing the best they can!

I suppose most things aren’t clear cut either. The humor of this whole thing is that the decision between “do it right” or “best you can” itself requires you do just make the best decision you can. 🙂

So in the end, is the answer to do things as right as you can, to the best of your ability, and not worry about the rest?

Chubby’s Family Restaurant – Orlando

They clearly love James Dean and Betty Boop — the walls are plastered with pictures — so the place has a real classic American-1950s feel to it. And, it seems, in the 1950s, breakfast was delicious.

I had Donna’s Skillet (served to me by Donna herself), which is

  • home fries
  • onions
  • corned beef hash
  • scrambled eggs
  • cheese

Add hot sauce and it’s great. The price is right for the food; $6 for the skillet. They got the food out fast, and kept my iced tea filled, so that does it for me. The service is totally unceremonious, the servers all work together to get it done.

It really seems like a one-of-a-kind, family-owned restaurant. I don’t think they could make another one — there’s not enough pictures of James Dean in the world to open a second place.

If you’re in the area, it’s worth a stop in for a quick simple breakfast. It sure beats the pants off Denny’s.

Chubby's Family on Urbanspoon

Little digits

There’s this idea I’ve had rolling around my head for a while now. I call it the Law of Small Numbers, but it’s not really a law, and it’s apparently not called that either, at least according to Wikipedia.

Basically, it’s that small numbers increase easier than big numbers. It’s an idea that’s become popular with investors — small businesses can double your money easier than big ones. A tiny store can easily double it’s business, WalMart can’t.

Simply put, if you’ve got 2 units, and you increase that by 1, you’ve increased by 50%. If you’ve got 20 units, and you increase by 1, it’s only 5%. That’s the Law of Small Numbers. Maybe I should call it the Law of Increases of Small Numbers.

It’s something that’s popped into my head lately, thinking about gas prices. I’ve been trying to collect some gas mileages in my car, so that I can have hard data to look at. The way I see it, your gas mileage is a function of your gear, and your RPMs. Assuming constant gear (let’s say 4th — you’re cruising). If you are going from 2000 RPM to 4000 RPM when accelerating, you are literally cutting your gas mileage in half. If you can travel 55 MPH at 2000, but 60 MPH at 2500, is it worth decreasing your mileage by 25%? What if the corresponding speed increase only gets you there 90 seconds faster?

On a side note, one of the pages linked from that Wikipedia page discusses the Strong Law of Small Numbers

“There aren’t enough small numbers to meet the many demands made of them.”

I see this as the reason that things always seem to happen in twos and threes, but that doesn’t mean that they’re related.

A icon to save your ass

I just forwarded an email asking for an RFP around to the team at Cloudspace, and since I use address book autocomplete, I checked the email addresses very carefully before sending the email. I’ve heard of (and seen) too many instances where someone quickly sent an email, and addressed it to the wrong person. Funny how it seems to happen most when the person who actually receives the message is the one person who it should definitely have not gone to.

Ideally, my email client would have pictures of everyone, automatically grabbed from their Facebook/Myspace/Interblag Networking accounts. Humans are so visual that it would be immediately noticed if an email wasn’t going to who I wanted it to.

I think the next best thing — at least from a corporate email perspective — would be an highly noticeable icon in the mail window that would only display if all recipient email addresses matched a set of criteria. Some obvious ideas are:

  • All domains match each other
  • All domains are on a whitelist
  • All domains match the sender’s domain

It should be easy enough to hack together an extension for Thunderbird to implement the “highly noticable icon,” but I know that the photos of everyone is the killer of the two. I think it’ll be another few years before we have good enough pictures of everyone (in terms of being auto-grabbable, and not having to take their picture deliberately), but I think the concept will show up soon.

Bayes, and the Mythical Viagra Spam

OK. I’ve been running a test where I’ve been attempting to gather Viagra spam into a Gmail mailbox, viagraspamtest@gmail.com

I started the test in mid-May, posting the email address to questionable and shady mailing lists, as well as linking the address in plain text on my blog.

And 6 weeks in, how is it going? Well…it’s not. There’s not even a hint of Viagra spam. Nothing in the spam folder, nothing in the Inbox. Just all legitimate mailings from newsletters.

Possibly, it takes time to get onto shady mailing lists. I imagine lists of emails get hacked and resold to spammers, but that it takes a while for a given email list to work its way down to the spammers.

Also possible — there’s no more Viagra spam. As in, spam mentioning Viagra by name. They are either advertising whole pharmacies, a class of drugs (blood pressure, E.D.), or the ad is in an image that gets embedded into the email.

Maybe I should retry this project with the word “pharmacy”. Viagra spam is *sooo* 2002, anyways.

Are you with me?

If you’re talking to someone, you have to pay attention to make sure they’re understanding you. This goes one-on-one, as well as speaking to a group. Communication is two-way.

Saw a nifty feature of meetup.com, a site that gets helps manage group meetings, from programmers to political rallies. I go to a PHP meetup in Orlando that organizes through them. Kevin is presenting the Zend Framework tomorrow, and I wondered what happened, since I usually get reminder emails about the meetings.

I logged into meetup.com, and was immediately greeted with a message saying that they’d had problems delivering mail to me recently. It asked if I’d changed my email address, or marked something as spam; as well as options to change my email address, or confirm that I was still using the same one.

Given the number of apps that just spamjaculate messages from a “no reply” address, it’s nice to see that at least one is listening back.