Efectos EspecialesRamblings, rants, musings, ideas and observations. Topics include (but are not limited to): programming (especially Python), books, games (especially CCGs and board games), astrology, design, writing, painting, etc.
New Scientist: Out-of-this-world sex could jeopardize missions.
"Sex and romantic entanglements among astronauts could derail missions to Mars and should therefore be studied by NASA, warns a top-level panel of US researchers."
Excellent, this looks like it could be the next great reality TV show. Rather than sticking people together in a house, put them in a spacecraft! How cool is that? Maybe this way they can fund the project as well.
Looking at last month's referrer logs, I got the following results for search engines:
(referrer URL, number of requests)
- www.google.com/search: 5721
- www.google.ca/search: 977
- www.google.com.au/search: 544
- www.google.co.uk/search: 442
- www.google.com.my/search: 312
- www.google.de/search: 242
- search.yahoo.com/search: 186
- search.msn.com/results.aspx: 164
There's no contest -- people use Google to get to my site, much, much more than other search engines.
Now, my referrer logs are not representative for the situation on the internet as a whole. But a difference this huge is still a strong indicator of what is going on, unless I am to assume that Yahoo users disproportionally don't like my site. Either way, it reminds me of something that I have been wondering for a while now: Who actually uses Yahoo (or MSN) for search? Is there any reason to use them in a universe where Google exists?
I also wonder why I get so many referrers from Google Malaysia. Maybe that has something to do with my manga links page. After all, according to my web server statistics, the top search requests are "manga downloads", "anime comics", "fruits basket manga download", and "prince of tennis manga download". Anything Python-related isn't even in the top 20. Maybe I should get rid of that page to get results that are less skewed...
(Gah, I am the #2 result on Google for "manga downloads", and there isn't even any manga on this site...)
Time for a little break after all the puzzling and language
wars comparisons. Watch this scary video of Mr.T. Rapping. In shorts.
What was wrong with my puzzle? Is it boring? Is it too easy? Too difficult? The Daily Python-URL linked to it, which is usually good for a coupla thousand hits, but there are zero comments.
Why am I saying these blasphemous things?
It is true that Rails has been a great way to attract people to Ruby. However, Rails has only been around since last year. Ruby enjoyed a steady growth before that. It must have had *something* going for it. Its different design philosophy is part of that "something". There were, and are still, plenty of people out there who like the concept of a dynamic language, but not necessarily Python's implementation of it. They might have superficial reasons to dislike it; I still hear people bitching about Python's whitespace and explicit
self. They might also have different ideas about what a programming language should do for them. While I personally consider Python's philosophy ("there should only be one obvious way to do it") a great boon, others don't, and they might feel more at home in Ruby.
As I mentioned in one of the comments: I am *much* less proficient in Ruby than in Python. All I've done in Ruby is a small proof-of-concept Rails app, and the app I'm working on now (non-Rails), which isn't very large at all. Yet I found it very easy to write the code the way I want it, and change it later. Easier, even, than in Python. That is what leads me to believe Ruby is actually more flexible than Python. (Maybe not extremely so, but there is a significant difference, IMHO.) This is also what made me mention the "smudge and smear" thing, because that's what it felt like.
That flexibility comes at a price. I have been referring to it, informally, as "messiness", because while Ruby has many nice and extremely useful shortcuts and concise constructs, they often have side effects. As a result, Python code is a bit less concise, and a bit cleaner. (And more readable, but as I said before, Ruby gets nowhere near Perl-like levels of obfuscation.)
One example. (It's just a random example, don't pick on it too much, please.) Ruby's list indexing looks much like Python:
mylist[N] returns the Nth item of the list (or Array, in Ruby-speak), counting from 0. However, if there is no index N, Ruby returns
nil (where Python raises an
IndexError). This may lead to a slight ambiguity: if
nil, it might be because there was no index
N, or because the item at N was actually
nil.  A not uncommon idiom that uses this construct is:
x = mylist[N] || "blah"
N exists, assign it to
x, otherwise assign
"blah" to x by default. This works great... as long as the item found at
false, because then you will get
How often does this problem occur? Probably not very often at all. If you work with a list of e.g. strings or numbers, there will be no problems. You just code the damn thing; it's concise, it works, and you move on. It's also simple and common enough that you immediately know what it means when you see it. But someday, somewhen, you might get a weird bug because of this behavior, and it will be extra puzzling because this trusty construct has always served you well. Again, the chances of this happening are probably not very great. Probably nothing to be paranoid about. But since Ruby is full of stuff like this, it has -- in my very personal opinion! -- a less cleaner feel to it than similar Python code.
The bottom line is: Do I think Ruby is better than Python? Is it going to replace it for my hacking projects? No, in both cases. I love Python. But Ruby is a worthy addition to my toolbox. And we probably shouldn't be too surprised if it's going to beat the snot out of Python in the years to come, with or without Rails.
 Yes, of course there are ways to find out for sure which one it was (index N doesn't exist, or item at N was
false). The point is, that if you want to use the short idiom (and you want to :-), then this is the behavior.
After some more hacking on Ruby, it becomes all the more obvious that it's messy in many ways. And that's one of the reasons why it's going to outpace Python. It may not have done so within four years, but it's going to happen. I think this is because it allows you to "smudge and smear" more, and to follow a more personal style, which is apparently very appealing to large groups of programmers. (See the popularity of Perl. Although Ruby never reaches that level of messiness.)
Of course, having something like Rails helps too. The Python community has many bright people, but it still hasn't understood this lesson. "I am going to make a Rails-like platform in Python!" "No, *I* am going to do that!" "No, me!"
I know rather little about web programming (which causes me to miss out on a lot of job opportunities, by the way ). Should I choose to learn more about it, what would be more appealing? A platform that is backed by almost the entire Ruby community? Or the fragmented mess of Python web programming frameworks? Many of the Python ones can be, and probably are, excellent in their own right, but having lots of little frameworks is simply less attractive. I figure many people feel the same way, when considering Python vs Ruby for web programming. If they choose Ruby, it's not because it's better than Python... it's because it's good enough, and because it has Rails.
Well, that "puzzle" wasn't a great success. Nobody seems to like it.
I am rethinking what this blog is about, anyway. Maybe it's time for me to take another break, and come back when I have a new design and something to write about. Of course, by then it might have become a Ruby blog. <0.5 wink>
In other news, Firedrop will be maintained by Fuzzyman. Updated links will be available soon. For now, I think this is the new homepage. (Yes, the official name is "Firedrop2", for arcane reasons. :-)
The following quotes are all taken from weblogs listed on Planet Python (the "unofficial" one). Can you figure out who wrote them?
(Of course it's easy to look these things up in Google. The idea is to figure out the authors *without* doing that. Although these quotes are not necessarily representative of all the work done by their authors, they should give you some pretty good clues. Except maybe #10, which is a bit more difficult.)
Solutions will be posted in a few days, if necessary.
- "I can't for the life of me remember why I would prefer ABCs over interfaces! And even if I did remember, I believe I have changed my mind since then."
- "If you've spent any amount of time trying to "improve yourself" in any way, you've undoubtedly experienced some frustration, in that you discover your "self" isn't as much of a part of you as it would appear. It seems bizarre - "you" want "yourself" to do something (or refrain from it), but "yourself" goes ahead and does whatever it wants. Often, "you" may rationalize your behavior in context, only to be later exasperated by your lack of "willpower"."
- ""Pythonic" is a vague concept, but not necessarily that much more vague than concepts like "intelligence" or "life", which, when you try to actually define them, tend to be slippery. That they're hard to define doesn't mean that they're useless though; humans work well with messy definitions. "Pythonic" means something like "idiomatic Python", but now we'll need to describe what that actually means."
- "We're also finding that this new-think will not be accepted by the mainstream analyst firms, tech publications, and vendor powerhouses on simple merit. Pimping the latest acronym from the latest vendor with the latest money is a much easier way of bringing in stupid amounts of cash than is trying to move an industry forward in providing real value to actual people. So screw you guys - your goals are in direct competition with those of my customers."
- "OK, enough wedding stuff. Back to Python. I'd like to suggest that we should retarget Python's development, away from interpreter hacking and toward enhancing and expanding the standard library. The idea is simple, but has far-reaching consequences for the development process; I think that on balance the consequences would be positive. The proposal: We should deflect effort away from language changes and redirect them toward the standard library."
- "A few other people were interested in the PyPI development - though there's still a huge number (most likely a comfortable majority) of people at the conference who don't even know it exists. I've lined up another Lightning Talk entitled "PyPI: Python's CPAN" in which I'll give a demo."
- "my nottodo.txt list is a lot more important than my todo.txt. (I've also started using a list of keywords, phrases, and individuals that make me reach for the back button. let's call them "stupid tags", like in "if I keep reading this, I'll end up with stupid all over me". no, I won't post that list. not yet.)"
- "How well do you know python, part 8: Here is a mostly-functioning class that facilitates writing producer / consumer algorithms. It is designed to support a single producing and multiple consuming threads, i.e., scenarios where consuming involves some blocking operations such as communicating over a socket."
- "An email I sent Tim was scored as 100% spam by his Spambayes filter. The email contained lots of charts and text graphics summarizing the contents of a Zope database. Most of the numbers were spam clues."
"In the wake of the K-T extinction, mammals exploded into dazzling array of giant forms. Within 10 million years, almost all of the modern groups of mammals (and then some) had already appeared. The mammals conquered the land, The water, and even the air (although the last remaining dinosaurs, the birds, are unquestionably dominant in at least the last of these niches and actually possess more species than all other amniotes combined). Today, furry creatures occupy every continent and, only 65 million years after the asteroid struck, have produced organisms of astonishing variety, from blue whales to shrews, from hyenas to humans. The (non-avian) dinosaurs, once the largest land animals on the planet, have been reduced to mere stone and imagination.
But what if none of this history was true?
What if the rock had missed?
One can speculate."
Quite an interesting site, with nice art. It's a pity that it has so many broken and missing URLs. :-(
I got Pokemon XD the other day. Quite addictive. Here are some of my impressions.
The story is similar to Pokemon Colosseum. Bad guys have turned certain Pokemon into Shadow Pokemon, which must be captured and converted back into normal, family-friendly critters, a process called "purifying". Before you can do so, you have to "open the door to their heart", which is done by lots of battling. (*shrug* After all, that is what Pokemon do, I guess.)
The game is much like the original Gameboy games... you run around a lot, solving quests, catching Pokemon and training them in battle. However, there are a few differences, besides the graphics (which have been "upgraded" to today's standards (read: 3D)).
In the original GB games, it was possible to catch pretty much any Pokemon found in the wild. In XD, this is not the case. You only get to snag Shadow Pokemon from your opponents, so you're dependent on what they have. I'm *assuming* these Pokemon are the same every game, which would severely restrict the replay value. (It would be cool if in a new game, you'd get different ones. I haven't been able to test this, though, because the game only allows one save file and would overwrite my existing one.) My major beef with this is that in the old system, you could use Pokemon you like, but in the new system, it's a grab-bag. Some of the newer Pokemon are pretty stupid, and it's slightly annoying that you have no choice but to catch them *and* use them intensively in fights so they can be purified.
Also, the GB games required you to run around a lot, causing random battles in order to level up your beasties. Pokemon XD requires a lot of battling as well, of course, but the system is different. There's "Mount Battle", which is sort of like a knock-out tournament... you fight a long string of opponents that get stronger and stronger as you move on. A great way to level up your Pokemon *and* learn what other ones are capable of. When you return, you may continue in the same area where you left off, so you are not forced to battle every single one of them again. I consider this an improvement over the old way.
A few nitpicks: Translations aren't always great, sound isn't what it could be (e.g. you don't really hear the sounds the Pokemon make, but rather a "stylized" version of it), and NPCs are very soulless; most of them can't say more than a few lines. These problems aren't new though, and they're not such a big deal, really.
You start out with an Eevee, which can be evolved into Flareon, Jolteon, Vaporeon, Espeon, or Umbreon. This is kind of nice. I always liked Vaporeon. Maybe the other guys can be caught later on as Shadow Pokemon, but that's anybody's guess. So far, all the Shadow ones I've seen are "new" Pokemon (that appeared after the first wave of ~150 ones or so).
Anyway, I have to get back to the game now... *eyes glaze over*
[Update #1] Most Shadow Pokemon are "new", but not all of them. I saw a Vulpix, for example.
[Update #2] It turns out that there *are* wild Pokemon in this game, although it works a bit differently than in the old games. There are a few spots where you can put special snacks to lure them. I don't know yet how great the variety is of the beasties that visit these spots... so far I've caught a Hoppip (boo!) and a Sandshrew (yay!).
Design and content © 2004 Electric Shock / Hans Nowak