Archive for May, 2008

How to eliminate spam

May 29th, 2008 | Category: Uncategorized

Yes, its yet another one of these pedantic “solutions” to spam. I bet, if someone is familiar with the slashdot meme, they may even start writing out one of those horrifically long checklists as to why my idea won’t work.

But it will.

This is not arrogance on my part, but rather a simple strategy that can be embarked on. It will, however, require participation from everyone, web browsers, little old grannies, the slashdot user in their mother’s basement… and the government, hopefully.

The reason spam works, is because it makes money. So, we remove the financial incentive quite easily; we educate consumers as to what is spam, and why they should not buy. I figure a simple, “Spammers are terrorists!” campaign would be heartily endorsed by everyone thats been inundated with spam.

I know, I know, the whole “problem exists between keyboard and chair”(PEBKAC for short) issue. Actually getting people to listen, and understand, and not buy, is a massive issue. But if everyone knows that Jamie Lynn Spears is pregnant, I’m sure we could bombard everyone with the needed message.

In addition to actually educating the internet using public about the detrimental effects of spam, spam needs to be enforced and punished. The government just does not seem to care, except for one key problem, in that spammers typically do not pay taxes.

An actual effort needs to be made, beyond computer algorithms and checks and authentication. That is simply an arms race, which an evolutionary biologist will tell you is a waste of resources. The only real solution is two-fold: education and enforcement.

So, I think, if I can find the time, I’ll begin a movement or something to pressure the government to do something.

-Zeroth

*Zeroth watches as spammers try to ironically spam this post.*

Comments are off for this post

Boycott SanDisk Cruzer drives

May 27th, 2008 | Category: design,users

I hate SanDisk Cruzer Thumb drives. Right now, I am running a temporary internet cafe for a conference of oceanographers and meteorologists, and so they need to upload their presentations. Therefore, they plug in their thumb drives, and I’ve seen the performance, reliability, and design of different models and brands. After plugging in literally 200 different thumb drives, I really really hate the SanDisk Cruzer drives.

The software is slow and buggy. When you plugin a SanDisk Cruzer drive, it loads in software it calls U3, to enable connection with the thumb drive. This software is slow, full of eye-candy, and offers nothing new. And the most grievous point: Why must a thumb drive require custom software? I can understand drivers, but custom software? Please. No one cares, and no one wants the extra software. I cannot imagine a single extra use that the software could provide, beyond encryption or security. Even that is better and faster done by external products, like TrueCrypt, or GPG.

When I say slow, I mean slow. Every other brand, even old old usb drives are done loading in Windows XP in less than 30 seconds on four year old machines. The U3 software means I have to wait well over two minutes, with the drive appearing and disappearing not once, not twice, but thrice. When cheap no-name brands of thumb drives can be done on an old machine in less than 30 seconds, your software is slow.

Just don’t buy SanDisk thumb drives. Maybe they might get the hint, and stop forcing the abysmal U3 software on their consumers.

6 comments

Pay as you play

May 25th, 2008 | Category: game design,users

I was reading this very long and informative rant/lecture on the shortcomings of current rpg design. Except its dated, because it mentions Ultima Online! The saddest part of the rant however, is the fact that everything stated there still applies to the latest and greatest of rpgs, mmorpgs, etc.

I just had one idea to put out there, for the general improvement of mmorpgs as a whole. One problem with the addictiveness of say, WoW, is the unlimited play model currently in effect. The player pays ~$15 , and they could theoretically play 720 hours(One whole month, with no sleep, downtime, eating, etc).

The downsides of this model are readily apparent, in that being offered unlimited anything, is that we like to get the best bang for our buck. If you pay five bucks for a buffet, you’ll have several helpings, just to take advantage of the deal. It is a natural human tendency to do so, however, it has deleterious effects when applied to new players of an MMORPG.

It creates a pressure, both subconscious and cultural pressure, of playing as many hours as possible to take advantage of the theoretically unlimited play. This can, and does lead to addiction with the game, which in turn can destroy lives, just as any other addiction can do so.

So to combat this, the solution in retrospect is obvious: pay as you play. The idea is to offer new and casual players the opportunity to buy “hours” of game time. Instead of buying unlimited game time, the player instead buys 60 hours of game time, which can be used over several days, weeks, or months.

The benefits are simple and varied. The player can now relax, in that they have bought 60 hours of game time, and can use at any time, with no pressure to play every hour of every day. For the hard working 30-somethings that just want to relax and raid a dungeon with their friends, this is quite literally perfect. As well, it is an immense boon to not have to worry about regular credit card charges, since you’ve been charged once, and will not be charged again until you want more game time.

This is a good thing, for the players and the game designers. It produces a non-addictive game, and allows new players to literally try risk free, with no credit card numbers needed.

The more difficult question, however, is, Do you allow for players to purchase unlimited play alongside the pay as you play, or only do pay as you play?

3 comments

Ajax with Django and jQuery

May 14th, 2008 | Category: Uncategorized

A current software project of mine is hosted on Django, and I’ve been working on a front-end interface.

Django itself is a pleasure to work with, as I keep discovering cool little benefits it offers, shortcuts, ways to do things quickly, and well. I especially like how well it encourages the DRY (Don’t Repeat Yourself) principle. I keep the main javascript code in a specific file, code.html, and simply use a {%ssi “code.html”%} on any page I need the big chunk of javascript.

I’ve been using galleria and jCarousel in conjunction, a few small problems, which when I solve them, I’ll detail here.

I did have a lot of fun working with the ajax, getting it working, and here’s what I did.

I created a view, called next_image:


def next_image(request, series_name, issue_name, panel_number):
name = urllib.unquote(series_name)
ish_name = urllib.unquote(issue_name)
series = Series.objects.get(ser_title=name)
issue=series.issue_set.get(ish_title=ish_name)
pages = issue.page_set.get(page_number=int(panel_number)+1)
i='<img title="'+str(int(panel_number)+1)+" \

src="http://oddco.ca/zerothsblog/wp-admin/'+p+'" alt="" />'
return HttpResponse(i, mimetype="text/html")

I just take the safe html versions of the variables passed to me, use urllib.unquote to get the actual symbols(ie, going from %3E to >), do a few searches, and find the specific page needed. I’m sure there are much more efficient ways to do this, with only one sql-alike statement, but I don’t know how yet.

Basically, all I return is a simple img tag, which is then handled on the other end by the following javascript:
jQuery.get('/ajax/next-image/{{series_name}}/{{issue_name}}/'+endMarker+'/', function(data){
carousel.add(carousel.last+1, data);
carousel.size(carousel.size()+1);

Which reminds me, I hate how badly wordpress handles code snippets. Its the most atrocious tag handling I’ve ever seen, so if the code looks ugly, or whatever, blame wordpress.

Onto the code. We do a basic get command, which uses django template variables to replace the sections with {{ and }} with the appropriate variable. Then, add a function for the callback, to handle the data when it comes back. In the callback, we add the data to the carousel, and then extend the size of the carousel by one.

However, this code has one major bug, which I have not solved yet: galleria support. It seems that Galleria is only partially hooking into the new images, where the hotkeys work, but not actually clicking on the images. If anyone has any solutions or advice, give me a shout! I’d gladly appreciate the help. :)

1 comment

Issues about teaching programming

May 06th, 2008 | Category: Uncategorized


I came across an interesting post today, about teaching programming, and I whole-heartedly agree. This reminds me of a few issues I’ve noticed in the computer science department of UBC-Okanagan. Now note, this is a very fine institution, with brilliant and talented professors and teachers. The points I have an issue with are not their fault.

-Java. The problem with Java is that the sheer amount of syntax and keywords one needs to know and understand before you can even make a working, useful program is ridiculous. Java is not a good language to introduce students to programming, even if all the businesses use Java in their corporate apps.

Java is obtuse, wordy, and finicky. Students see a line like Ball beachball = new Ball(). I see three points of wasted typing, most new programmers will see two- Ball beachball, and Ball(). Knowing about Java’s polymorphism, it seems pretty silly to have to tell Java twice that this variable is of the type Ball. And then theres also the fact that I need to tell Java that this we need memory(the new declaration).

Thats pretty obtuse, particularly to new students. Java is much too complex(some would say needlessly) for teaching programming, at least initially. Its confusing, and scares them away.

-Graphics programming. One of the reasons Java was chosen by the administrators was the fact you can make gui’s easily in it, which will be “attractive” to new programmers. No. Just… no. Gui programming requires all sorts of complex concepts and considerations that takes time and experience to absorb, not rote recital of facts.

Besides, as anyone will tell you, gui programming takes time and effort. This diminishes what the student takes away from the lesson, due to the simple psychology of teaching. The shorter the time between the student doing something, and the result, either wrong or right, the better they will remember the lesson. And gui programming is the exact antithesis of this, where it takes time, and effort before you even find out you screwed up.

If you stick to simple text input and output, its quicker, simpler for students to understand. They type something, try it out, and boom, it either fails or works. Its easier to learn.

-Obscure real world applications of computer science. This is a bit the fault of the teachers yes, but, lots of my classmates wonder just how is this useful, or how is that useful? Then, because they feel its a waste of their time, they don’t devote all their time and energy to figuring it out, and later classes, applications, etc, they realize how useful said process could be… if only they had paid attention.

Computer science itself, is complex and seemingly esoteric, having almost no relation to the world as people see it… yet. There needs to be more work done on how to relate the usefulness of various tactics in Computer Science and programming.

Recursion and functional programming are useful in that you learn how to think and parse complex topics, but this is not related to the students, so they feel confused, bewildered, and even scared about what else is coming in Computer Science.

1 comment

Next Page »