Saturday, September 15, 2007

A source of happiness

Recent developments by Aady and Rick, who were working this weekend on reverse engineering the servers that ran Silencer resulted in a played game by Rick (who dropped), DarkProdigy, and me. This game was one of my favorite games years ago, but got shutdown when WON.net shutdown. Being able to play a game, even if it was hosted by someone on dial-up, has made my weekend. See Arsia-Mons forums for more.

Tuesday, September 11, 2007

On advertising and Internets

Slashdot had an article titled "The Morality of Web Advertisement Blocking" posted today. In essence, it was a followup to another Slashdot article talking about how some websites were blocking Firefox users from visiting their site, due to the seemingly common use of the Adblock Plus plugin. The question posed was:

Whereas TiVo users freeload on the relatively fixed broadcasting costs paid by TV networks, users of web ad-blocking technology are actively denying website owners revenue that would otherwise go to pay for the bandwidth costs of serving up those web pages. If the website designer has to pay for bits each time you view their website without viewing their banner ads, are you engaged in theft? Is this right?

The response was probably all to expected; most people shot down the idea of comparing web advertising to television advertising for one reason or another. There were a few people who seemed to seriously consider the question, but the majority of the crowd seemed to learn towards the attitude of "I download what I want." I can't say I entirely agree, but I definitely think the "why is Firefox blocked" website is retarded. At best, I think most websites that use "myth" or "cult" in a demeaning way tend to be FUD. I mean really. The Firefox cult? We worship the Firefox god, lord of all the Internet.

Many people seemed to think that advertisers have no business on websites that they visit, since it's their bandwidth, and they should do what they want with it. In some cases, I think this is a reasonable argument; for example, when viewing sites from a mobile phone, having advertisements seems typical unreasonable. Do they really have a right to complain if they're on a cable line, or something like it? I don't really think so. Ads might "take more bandwidth," but this argument is ridiculous for, say, AdSense ads, which are simply text.

Others say that advertising online is a flawed business model, since you're requesting all of the information you want, as opposed to TV, where you get what you get. This seems like kind of a lame reason, but I have no real marketing background. A lot of big sites seem to advertising (Engadget, for example...and Google) as a source of revenue. To claim that this isn't a legitimate business model is basically saying that many of these sites shouldn't exist. Can you imagine what the Internet would be without Google? They've been around long enough that I can't really remember what the Internet was like back then, except the whole frames, animated GIFs, etc.

There are other interesting posts, but I'm not really here to rip on people for disliking ads. Heck, I dislike ads. Only a weirdo would like ads. I still don't use an ad blocker, though. I actually had a conversation with a friend last night about it:

Not Me (8:25:56 PM): whoa, an ad in my firefox
Me (8:26:03 PM): ruh roh
Not Me (8:26:06 PM): that was actually fairly startling :O
Me (8:26:54 PM): I don't actually use an adblocker heh
Not Me (8:27:15 PM): que?
Me (8:27:30 PM): I see ads quite often in firefox
Not Me (8:27:52 PM): why no blocker
Me (8:28:00 PM): lazy
Me (8:28:03 PM): I don't really use plugins
Not Me (8:28:33 PM): :D
Not Me (8:28:46 PM): adblock plus updates its own blacklists and everything
Not Me (8:28:52 PM): literally like 3 clicks and you're done forever :I
Me (8:29:01 PM): I know
Not Me (8:29:04 PM): i haven't even thought about it in months
Me (8:29:04 PM): that's the sad part of it all
Not Me (8:29:04 PM): kay
Not Me (8:29:06 PM): lol
Not Me (8:29:16 PM): if i were near you i'd come to your house and do it for you
Not Me (8:29:20 PM): because that's just pathetic :-(

Yeah, the secret's out. I'm really, really lazy. Okay, that wasn't really a secret. Also, that conversation has practically nothing to do with anything, I just wanted to say that I don't use an ad blocker. As far as text ads go, I don't really mind them. I've actually seen interesting AdSense ads (okay, maybe once...maybe). I don't think anyone has a right to complain about non-intrusive, text-only ads. You can pretty much ignore them; I can usually just skip right through them, even if they're in the middle of a page. They don't really take up much bandwidth, and Google seems to be better at relevance than most people.

The real culprit here, in my opinion, is the evolution of advertising in the past few years. Starting with those pesky "Warning! Your computer is broadcasting an Internet IP Address!" ads, things spiraled downhill very quickly (Congratulations. You've just been selected to win two free Apple iButts). Then came the flashy, annoying, animated GIFs, which evolved into Flash advertisements, and then Slashdot had a post talking about Java advertisements. Seriously? Java? I should just uninstall it right now. I hate Java. If it's used for ads, I hate it even more. Obviously they're simply trying to get your attention, but really, this could be harmful for site traffic. My process of visiting a site with flashy advertisements is something like this:

  1. Visit site, probably to read some article.
  2. Start reading arti—why hello there, annoying advertisement with a flashing background that's enough to send a person into seizures.
  3. Well, I can concentrate on reading, right? Here we g—what the hell.
  4. Close tab/window.

If a website wants this kind of traffic, purely for generating revenue, they don't deserve to exist. Web administrators need to realize that to keep their content readable, they need ads that don't suck. Yeah, it probably means generating less revenue per view, but at least you stay relevant. Users don't feel like shooting themselves after visiting your site. Unfortunately, instead of being reasonable, I guess a handful of webmasters decided to "ban Firefox" instead. Yeah, right. Ban Firefox? What a joke. The only point you're making is that you're a jerkoff, being completely inconsiderate of people who use Firefox without an ad blocker. Apparently we're just a statistic, and since they're losing so much money, they figured it's just best to kill us all.

So now we've traced the blame from the ad blockers, to the ad-laden website owners. Of course, it doesn't stop there. What's with the ad companies producing these wacked up ads that they must know just annoy the crap out of everyone? Yeah, they're trying to get our attention, but in what feels like the worst ways possible. Unfortunately, even Google seems to be moving in the direction of video ads. Sounds totally evil, but I can only hope their implementation is better than it sounds. If not, I'll just have to quit the Internet.

But these crazy ads must work on some people—obviously not tech nerds like us, but believe it or not, "less intelligent" people do exist! Or maybe it isn't that they're dumb. Maybe they're just heavily invested into materialism.

If you've never read Feed (Slashdot review), I highly recommend it. I read this for ENGL106, and it's probably the one thing I really enjoyed doing in that class (thanks to Jennifer Eason for having us read it). Essentially, to copy Wikipedian vocabulary, it's a dystopian novel about corporations, consumerism, and computer technology. It's kind of scary how it seems like advertising is heading in that direction. The premise behind the novel is basically that ads become completely integrated with people's lives. People get flooded with ads whenever they go places. I don't want to spoil it too much, but if you have no intention of ever reading the book, the Wikipedia article seems to do a decent summary. You think ads are bad now? I bet it'll only get worse.

Pythonic programming and the "self" keyword

Bruce Eckel recently posted an article which expressed seeming disappointment in the direction Python 3000 was heading. Particularly, he seemed to think the grandeur of a four digit version name was too much for what new things Python 3.0 will bring about. I can't really say that I care about some of his points (the GIL argument is one that's popped up on Reddit several times in the past few days), and obviously I only care to comment on one topic: the self keyword in Python. In his original post, he says the following:

This is something I really hoped to see in Python 3K, but the beloved self seems to be hanging on.

self is inappropriate noise in a language that lays claim to clarity and simplicity. No other mainstream OO language requires it everywhere like Python does, and it's a hurdle for people who try to come to Python from those languages. Maybe it's a significant reason that Java programmers seem to be more comfortable with Ruby; Ruby takes care of it for you just like C++ and Java do.

And posts later in a reply:

Exactly, and it's not the writing but the reading. Python generally makes code that's easier to read, but 'self' is an intrusion.

And parroting "explicit is better than implicit" is a misuse of that maxim. All languages provide abstractions; Python (generally) produces clear abstractions that tell you what's going on -- these abstractions are explicit in "the right places." But 'self' is something we don't need to see inside classes. You're in a class, so 'self' or 'this' can be implied, just as it is in every other OO language I know of. Ruby, I think, has it right on this one.

Some of you who have really long memories or have too much spare time on your hands would remember that I actually mentioned this topic in a blog post a long time ago. Obviously, with that mentioned, I disagree on both counts with Bruce's reasoning.

To begin with, I wonder just how much of a hurdle learning Python is because of a required self for referencing instance members. While they may not be required in other languages, they most certainly exist, usually in the form of this rather than self. Is requiring self really a hurdle? In terms of using it inside method bodies, I don't think it's a very big deal. Specifying that a variable belongs to an object makes it more clear as to what's going on, especially in a dynamic language where variable declarations don't exist. Even Ruby, as mentioned in the thread, uses @ as a scope resolution operator.

Bruce also argues that the "explicit is better than implicit" maxim is wrongly cited as a reason here, claiming that implicitness improves readability. I definitely don't agree here, either. In C++, Java, and C# (and probably more?), classes are well defined with what members they have, so implicitness works fine. In Python, since you don't really have instance variable declarations, being implicit seems like a bad idea. If you're maintaining someone else's code, you'd have to make sure all of your local variables weren't actually instance variables, lest ye overwrite them and screw something up. GvR's response also indicates a technical challenge in removing the required self.

Brandon Corfman also responded, saying:

The problem is that the 'self' plague doesn't stop there ... don't forget that self is required as the first parameter of every class method. For example, the following code that forgets to use self as the first parameter of printInfo:

class MyClass(object):
    def printInfo(s):
        print s
   
def main():
    m = MyClass()
    m.printInfo('Hello')

When running main, you get the following traceback from Python:

Traceback (most recent call last):
  File "", line 1, in 
  File "hello.py", line 7, in main
    m.printString('Hello')
TypeError: printString() takes exactly 1 argument (2 given)

Except I am giving one argument! What second one is it talking about? Oh yes, the interpreter is expecting 'self'. Totally confusing and brain-dead requirement. Why does this need to be the first parameter of every class method?

I think explicitly using self as the first argument is a good idea, to some extent. It's kind of quirky (I'm pretty sure you can name it whatever you want, and it would still work), but having self be in the parameter list shows C programmers (and other, maybe more inexperienced OO programmers) how instance methods basically work. They aren't some voodoo magic higgity biggity, they really just pass the object as an invisible first argument to the method. In the above case, m.printInfo() is really just shorthand for MyClass.printInfo(m). Python's explicit requirement of self as the first argument makes it so that it's clear to people what the difference between instance and static methods are (even though they're different in Python than Java, et al). The exception message is still kind of confusing until they make the revelation of that m is basically the first argument, but this concept is probably something most programmers who deal with OO should know.