Thursday, September 28, 2006

Windows tips

Just found today a great discussion thread in The Joel on Software Discussion Group: Best tips that no one seems to know about. Basically, the whole thread is a collection of various simple Windows tips and tricks - mostly some interesting hotkey combinations. The conversation also mentions several quite useful links:

Firefox keyboard shortcuts
Windows XP keyboard shortcuts
117 run commands in Windows XP

Now, the only question I have is: how should I memorize all of these cool key combinations - or, at least, the most useful ones? Probably I should create some kind of printable list of my favorites and put it on my wall.

Technorati tags: , ,

Tuesday, September 19, 2006

PS3: a hidden computer.

Yesterday CNN published an article about using PS3 for distributed calculations. The scientists at Stanford University worked with Sony to port their Folding@home project to PS3. The idea is that the users will download a program to the hard drive of their PS3, and the program will perform some complex scientific calculations while the console is not being used for games. It will upload results to some central location, helping to find a cure to a number of diseases.

The article left me with mixed feelings. On one hand, this is definitely a creative use of PS3, and the project is, no doubt, beneficial for all mankind. I applaud the scientists at Stanford and the people (tehchies and business folks) at Sony.

On the other hand, this new project demonstrates one very important thing: PS3 is a device which has very powerful processor, local storage and connectivity capabilities. It can go online, download software, run it (maybe even in a background mode), and send data back. In other terms - yes, it is a full-scale computer, as we were told already. The question is - what about security?

I do believe that Sony did its best to implement various security features. But I know also that PSP, for example, was hacked in a very short time. In a contest between Sony and hackers I wouldn't bet on Sony.

You may say: "So what? Normal computers are also being hacked into daily; there are tons of malware out there - but no one panics because of that." The problem here is not a technical one - it's, rather, a psychological issue. Majority of users know now that the computers have to be protected against viruses, trojans and other dangers. People are learning to be attentive to unusual behavior of their computers; and they also learn to protect their PCs by installing automatically updating antiviruses, firewalls and all sorts of protective software (to say nothing about regular automated updates of OS). They learn it about computers - but almost no one will ever perceive their gaming console - a toy - to be a computer that requires an equal amount of protection. I strongly doubt that anyone will buy and install a firewall or antivirus for their PS3.

Next question is - what is a danger of compromising PS3 security? Yes, it doesn't have any sensitive data stored (though it might have account numbers and passwords for some subscription-based online games). But it has exactly what was used by people at Stanford: free horsepower and connectivity. So, I can clearly see a botnet of infected PS3s used for distributed calculations (breaking keys, for example), spamming, or DDoS attacks. And, even if the source of the problem will be traced to PS3s, it might be incredibly difficult to make people install some patches or run cleaning software.

Maybe Sony already addressed this problem somehow - I don't have enough information yet. But I can see an interesting and dangerous trend here. I am talking about having powerful computers in an ordinary gadgets and not even thinking about their true capabilities. It's not a new idea, but it seems less and less fantastic to me: we are close to times when one might discover that his coffee maker is being infected by a virus, and his vacuum cleaner is being used to crack some Pentagon codes...

Technorati tags:,

Friday, September 15, 2006

Advice to interviewers

Lately on several blogs I've seen posts discussing different aspects of hiring. Most posts were giving advice to candidates - so, I thought I might also take part in this. However, instead of giving advice to candidates on how to survive an interview, I'd rather give some advice to interviewers.

Phone interview. Couple of times I've discovered that the person who is interviewing me over the phone has some speech defect or some extremely heavy accent. I'm not a native speaker myself, and, probably, I shouldn't complain about it, but still - the fact that I was unable to understand questions from the first time (and sometimes from the second and from the third times as well) made those interviews extremely - and unnecessary - stressful. So, advice number one is: make sure that the person who does phone screening speaks clearly.

Also, do not make candidates read or listen to large pieces of code. It's inconvenient, ineffective and, speaking frankly, pretty stupid.

And the last one about phone screening: be flexible about who calls whom. I've encountered once a person who insisted on calling me - in the middle of a working day in my office!

Pre-screening.

Do not ask the candidate to submit code examples from his (or her) previous job. This might be illegal, and it puts the candidate in an awkward position.

Test projects and on-line tests - well, I, personally, strongly dislike those practices. Nothing prevents candidate from cheating - and serious professional wouldn't like to spend his time on doing some bogus project.

On-site interview.

Always give your business card to the candidate. When going through an interview with 5 or six people in a row it's hard to remember everyone's name and title - and it's so embarrassing later to admit that you've forgot whom did you talk with!

Don't turn the interview into your ego-booster. Don't ask questions the only purpose of which is to prove you that you know something better than the candidate. As an example: in a list of "General SQL knowledge interview questions" in one company I've seen a question based on a strange, and, probably, incorrect behavior of MS SQL server under some circumstances. Do you think this is an appropriate question to measure general knowledge of SQL? I don't think so.

And, please, try to give a feedback. I remember one of my interviews. A man asked me questions, I answered, he said "OK..." and continued with the next question. At some moment, I felt uncertain about my answer. The man said "OK...." and I asked him: "Was it the answer you expected?" He calmly replied: "No. As a matter of fact, it was a completely wrong answer." I asked for a clarification, and discovered that I misunderstood his question. So, if the candidate answers your question incorrectly, tell him (or her) so - maybe they know the right answer, but just didn't get you right.

Technorati tags: ,

Monday, September 11, 2006

Microformats

I've discovered an idea of microformats quite recently, and I was immediatelty charmed by its simplicity and elegance. Simply put, microformats are about formatting semantically united blocks of data so it will be easily understandable both by machines and by humans. Examples of the data which will benefit from this approach are numerous. Microformats.org - a site dedicated to microformats - lists almost a dozen already existing formats, including hCard - format for representing people and organizations, hCalendar - format for events and calendar entries and others. Microformats are based on XHTML - which allows them, on one hand, to be easily integrated into a web page, and, on the other hand, to be easily extracted from the page and processed by any program.

There are already several tools - most of them are stil beta versions, though - that are able to detect the presense of microformatted data on a web page and extract it. One of the examples of a freal-world usage of microformats is the way Technorati processes tags from blogs - rel-tag is one of the microformats!

One thing I am afraid of, however, is an uncontrollable proliferation of incompatible microfomats once the idea becomes popular. It's so easy to come up with your own format! This might render the whole idea unusable - but I do hope that it will not happen, and I am watching with interest all the new development in this area.

Technorati tags: ,

Thursday, September 07, 2006

Back from hiatus

Being silent for a month is not a good thing for a blog. For a blogger, that's not a good thing either. It's even more difficult to write a first entry after such a long pause - somehow it seems that this particular entry should be very important, extremely informative, and should somehow justify the long silence. Since coming up with something having this level of perfection is definitely far beyond my capabilities, I decided just to write this simple "I'm back!" piece.

Last month has been a hectic time for me. I've changed my job - and while doing that I positively had no time to produce anything interesting enough of my readers. I want to take this opportunity to say "Thank you" to everyone who is reading my blog.

So, thank you - and stay tuned! I'm back.

Tuesday, August 08, 2006

I hate eVite!

Somehow it happens that many of my friends got the habit of using eVite as a tool for organizing their birthday parties and similar events. I do not want to say anything bad about my friends - but I HATE EVITE!

Actually, it's not eVite - it's the idea of using such tools in general. I can imagine that it might be extremely useful when somebody organizes a party with one hundred participants. But using it for a meeting of ten - or even twenty - friends? That's definitely an overkill.

There are several reasons why I feel in such a way. First, I think an eVite invitation just purely lacks a personal touch. Everybody sees the same text, and - even if the text is written in the most warm and personal words - it's lost among all other elements on the eVite page.

Another reason: I am not sure why do I have to be able to see other guests' responses - or why other guests should read my response? Again, in case of some semiofficial event it's, probably, perfectly OK - but not in case of a small birthday party!

But the invitees replies are not the worst element of the eVite page. The worst - for me - is advertising. (It's also yet another reason why I do hate this tool!) I really don't see why I should get all this garbage when opening a birthday party invitation. Yuck!

I know that most of my friends do not share my point of view. Maybe it's just me - but every time I have to open an eVite page I feel that I long for good old times when invitation were written individually for each guest on pieces of substance called "paper"...

Technorati tags: ,

Monday, August 07, 2006

"White hamster" projects

Since the company I worked in decided to lay me off (together with several other people), now is a good time to review some of my experience and try to learn from it something important...

So, what is a "white hamster" project? Before I answer the question, let me tell you an old joke.

A man enters a pet store, pulling behind him on a leash a huge, dangerously looking polar bear.
- Hey, what's the deal with this bear?! - asks storekeeper.
- Oh, I just want to talk to the guy who sold me a year ago a cute little white hamster...


White hamster project (I invented the term for my own usage - but everyone is welcome to use it) is a project that starts as an innocuous small tool or utility, but soon unexpectedly grows into something large. It happened to me a couple of times: I've got a request to write a small utility. Because it was small and easy, I've got a couple of days to do it - and I did it in a very simple and straightforward way. Then a couple of requests for small additional features arrived - then two or three small enhancements - then a special case popped up... Each time I spent a minimal time on the change, because, after all, it was still a simple tool. Half a year later I was dealing with a monster which had a complex web UI, maze-like control flow, and was a nightmare to work with, because of its design - or, to be more precise, a lack of one.

Of course, the best solution would be to do everything right from the very beginning - but quite often it's hard to justify the necessity of spending much more resources on a very simple program which can be coded in just a couple of hours. For example, one of my "white hamster projects" started with a request for a web form where the user enters five or six values and the tool populates HTML template with the values entered and saves the result as a new file. A task for two or three hours of programming - and who could know that it would turn into such a beast...

It's very important to know how to tell a real white hamster from a polar bear cub. Most times it's impossible to do in the very beginning - but, once the developer receives first requests for new features and enhancements, there are certain signs which can help recognize a potential danger. Here are some of those signs:

  • Surprisingly high attention to the project.Sometimes it happens that the management misrepresents (and/or misunderstands) the scope and significance of the project. So, if, what was initially described to you as a simple utility, becomes all of a sudden a topic of a heated discussion, beware!

  • Request for a new feature which seems almost unrelated to the existing ones. For example, after doing the template population tool I was asked to make the tool save some details about the template and the data in the database.

  • Discovery of "special cases".In my situation, I was told soon after I released the first version of the tool that one specific type of data requires a different template. I've implemented it blindly. At the end of the project I had eight or ten different types of templates which were selected using unbelievably entangled logic. That's the danger of special cases - you may start with just one, but inevitably you will end with a bunch. Usually the special cases are, in fact, pieces of some business logic which was not properly identified at the analysis time.

  • Urge to use some "hack"That's pretty basic, but still... If, while implementing a new feature, you feel an urge to use some trick to fit it into the existing application structure, it's a sign that something is wrong.

  • Enhancement requires a significant change in the control flow. For example, in web-based applications, this might be a necessity for a new page, or necessity to divide the flow into two separate branches. This is a sign that the complexity of the project grows beyond original expectations, and it's time to re-evaluate the project.



So, what should be done once the potential bear cub is discovered? Of course, the project design should be changed with a high potential complexity in mind. But - and this is even more important - in this situation one should investigate the business reasons for this project. In my experience, almost always "white hamster projects" are, in fact, attempts to automate some business process. Very often these attempts happen without fully understanding what is being done. In my case everyone - the business users, my manager, and me - believed that the users just need a simple tool to help them create HTML snippets. What they actually needed was a system for working with a new type of web ads. At last I understood it - but it was too late; my cute little hamster had already turned into an ugly beast.

Technorati tags:

Tuesday, July 25, 2006

Consoles vs PC: Article about PS3

(This topic just doesn't want to let me go...)
A very interesting article was published recently on Gamasutra:Analyst: PS3 To Slow Industry Growth, Nintendo & Microsoft Could Capitalize. Recently I talked about the advantages consoles have over PCs in terms of gaming. When I read the article in Gamasutra, I was really puzzled: it seems like Sony in PS3 is going to forfeit all these advantages. PS3 isn't going to be cheap - I knew that. I would even say it is going to be absurdly expensive. But now the CEO of Sony Computer Entertainment (SCE) states that
"we don't say it's a game console, the PS3 is clearly a computer unlike PlayStations so far."


He explains further:
Since PS3 is a computer there are no 'models' but configurations. We'll want to upgrade the hard drive size very soon. If new standards appear on the PC, we will want to support them. We may want the Blu-ray drive to write. In the PC business, if you fix the spec for two years you'll be caught by competitors. Computers should be changing, right? It's inevitable that 60GB hard drive will become too small, and memory may become too small as well"


Wow! So, in other terms, the buyers of PS3 should be ready for spending even more money on upgrades. And the developers should be ready for much harder QA, because now the testing of the new game should have to be done on all possible "configurations". Which, in turn, means that the users should be ready for more bugs in the games.

And why would I (or anyone) want to spend money on a contraption like this instead of buying normal PC - which might be in a long run just a little bit more expensive than PS3, but which can do so much more? I don't know the answer to this question. It seems likeanalysts the analysts from "DFC Intelligence" (whose report is a base for this article) are also puzzled. They predict:
1) the high price of the PlayStation 3 is going to slow overall industry growth, especially for software and 2) if Sony does not change its current strategy for the PS3 the system will probably end up in third place in installed base.


I agree with those analysts. Either people at SCE are geniuses, and can see some things in the future which neither I nor the analysts from DFC can see - or we should prepare for a huge change in consoles game market in the nearest future.

Technorati tags: ,

Friday, July 14, 2006

Some business database design rules

A short disclaimer: These rules are coming from my own experience. The list is not complete, and, actually, it's not a list - rather a reminder for myself and an advice for all others. Most of the rules might seem obvious, but I have spent several nightmarish days recently fixing the consequences of not following those rules.

1. Every item of business data which enters the database should have the information about the source of the data and the time when the data was inserted. The source should be as atomic as possible (not "one of mail servers", but "server mail05.mycompany.com"; not "a user input", but "Entered by user Joe Schmoe"). Of course, this does not have to be a text field - a source ID will do.

2. All changes to business-impacting data items should be recorded in corresponding history tables, together with the information about the time and the source of the changes (ID of the user who performed editing, name of the process that changed the data etc.). A note - this rule doesn't state that changes of all data items should be archived - just the ones that might be important for the business.

3. All changes to the database that are not done according to standard operation procedures should be documented. If there is some problem with the data, and there is no other solution but to fix it manually, the script used to perform the fix (even if it is a single SQL statement!), together with the description of the change and the time the change was performed, should be stored in some archive.

4. For each and every table in the database there should be a documentation describing how the data in this table can be changed, and what are the procedures for fixing the incorrect data. And, I will add, the designer of the database should take into consideration the fact that sometimes some data in each table might need to be fixed. For some tables, the documentation would be very simple: "Use UI to modify data". Some tables might require more complex procedures -for example, an error in financial transaction requires creation of a reverse transaction (and transaction types should include reverse transaction in this case!). Another example would be a table which somehow aggregates data from other tables - in this case incorrect data in this table might require changing data in some other table and, for example, running some update script.

Following these rules is not always easy - but in the long run it will save you from some extremely unpleasant experiences. Trust me - I've been through that!

Technorati tags: ,

Monday, July 10, 2006

PC vs Console: an example

Last Sunday I've decided to spend some time playing games on my PC. I've started "F.E.A.R.", which I didn't touch for several months.

First of all, I've spent some time trying to find which of 5 nearly identical CDs the game wants to have in the drive. The game just kept telling me "Wrong disk inserted". At last I've found out that it wanted disk number 5. Then the game started, and immediately suggested me to download and update. I agreed - and the game immediately quit, starting some downloader instead, which told me that it will take 20 minutes to get the update. (by the way, I have cable - I hate to think for how long the people with dialup would wait...) Well, It was a surprise, because I was in the mood of playing right now - but, after all, I had some other stuff to do, so I just let it run.

In 20 minutes the update was downloaded and installed. I've started the game again, and it again suggested me to download yet another update. Again I agreed, and again the downloader was started - but this time it couldn't locate the file on the server. I decided to run the game without getting the latest patches and features. Alas, I couldn't do it, because the game just crashed when trying to load any of my saved games. I've rebooted a couple of times, and, when it didn't help, I went to the Internet for the help. Very soon I discovered that there was a bug in the first patch I've installed, and that I have to download and install the latest patch. Luckily I found the required file manually pretty soon, and in less than ten more minutes I finally started playing.

And, by the way, while searching for the patch I've accidentally discovered, that another game I've played not so long ago installed some driver on my system for some incredibly advanced copy-protection lock. Now I have to remove this driver, because I do not want some unknown drivers on my PC. The funny thing is, that I've discovered this fact while reading the message on how to install the cracked version of this game!

So, just to add to my writings about what PC games should do to regain market from consoles: these are good examples of what the PC games shouldn't do! For any console gamer, starting the game is a matter of inserting one disk and pressing one button. And the console games just do not download patches - neither they modify the firmware of consoles.

Technorati tags: ,

Wednesday, July 05, 2006

Fading glory of PC games

(David - thank you for suggesting this topic).

As I mentioned earlier, I grew up on PC games. I've always considered consoles as being inferior to PCs. But now it seems like PC games are being aggressively pushed out of the market by consoles. Just 5-6 years ago in most video gaming stores the majority of space was occupied by PC games, with just a couple of shelves dedicated to consoles. Now the situation is just the opposite: I've seen already couple of stores that do not carry PC titles at all! In other stores you have to work hard to locate one or two tiny shelves with PC boxes - all the rest are games for PS2, Xbox and GameCube.

I don't like this at all. I also think that having a healthy market for PC games is essential for the development of video gaming industry and video games as a cultural phenomenon. Consoles are much less flexible than PCs in terms of game genres and game mechanics they can support.

So, can anything be done to reverse this market takeover and bring the market to some kind of a healthy balance? In order to answer this question we have to understand why the consoles became so popular.

A quick disclaimer: I am absolutely sure that some research has been done already regarding those questions. However, I don't know anything about the results of those researches. So, whatever I say now is just my own opinion, based strictly on my own perception. If anyone would point me to any materials on that issue, I will be extremely grateful.

What made consoles so popular in recent years? The answer is very simple: the consoles just got better! One of the major problems with consoles was lack of horsepower - in computing, graphics, sound. The consoles of the current generation are powerful enough to run complex 3D games similar to the PC games. Of course, the most complex 3D games - "Half Life 2", "F.E.A.R.", "FarCry" are still beyond the power limits of PS2s and Xboxes, but look at the next generation - PS3, Xbox360, Wii... The have multi-core processors, capable of running several processes in parallel and tremendous graphics power. This comes very close to the current gaming PCs. So, with the lack of power being out of the way, the other advantages of consoles begin to shine. It's important to understand those advantages in order to come with a working strategy for PC games to regain their market share. The most important advantages of consoles are, as I see it, price and simplicity.
  • Price. Even though the prices for the next generation of consoles are simply outrageous (except Wii, probably), a console is still far less expensive than a decent gaming PC. And - another related issue - a console ages much better than a PC. A console becomes obsolete only when the next version of the device saturates the market. Until then, the console is as good as new. Different situation with PCs: a capable high-end gaming PC in two years becomes mediocre, and will not play any modern game.

  • Simplicity. Consoles are really "plug and play" - you plug the cables, and you are ready to play. Compare this with setting up a new PC... With console, it's easier also to start playing: you insert DVD (or cartridge), turn the device on - and there you are! With PC, you have to install the game, configure it, sometimes download a patch...


So, what happened is: for quite some time parents bought consoles to kids, because they were cheap and easy to use, and to keep them off their parents' computers. Now the kids grew up, they are used to playing on consoles, and the gap between PCs and consoles is almost closed.
Is there any hope for PC games? I think, yes. First of all, the situation might improve in some not-so-distant future when having a computer will become a requirement for school. With kids already having their own computers, the parents might be more inclined towards buying them a PC game than towards buying them a separate gaming device. Thus a new generation of kids raised on PC games will appear. But, speaking frankly, this will happen only in several decades - and this is a tremendously long time for an industry which is hardly forty years old. And what can be done now?

Well, PCs still have several advantages over consoles, which can be used to regain public's interest in PC games:
  • Controls. Mouse is still far better as an aiming and selection device than any joysticks. And a keyboard is much more versatile control device than any gamepad. Besides that, a keyboard can be used for text input - meaning, for example, chats for multiplayer games.

  • Graphics Since consoles are hooked up to TVs, the quality of image is limited by the capabilities of TV screen. Displays are still far ahead - but, alas, the lack of resolution is compensated by the size of the screen. Playing a console game in front of a large TV is definitely an intense experience. Still, this advantage can be used.

  • Storage. This is where computers are still far ahead of consoles. How this can be used in games? Well, for example, a game might feature a complex and large world, which requires constant downloading of new parts. Or the game might produce some useful artifacts (images, movie clips etc.) which will be stored on a computer's hard drive.

  • Native environment People are, generally, using computers not only for games - but for surfing the web, reading and sending emails, sending instant messages and so on. A game can be integrated with these activities - which makes Alternate Reality Games (ARGs) an important part of re-capturing the market.



There is one more advantage of PCs - now from the point of view of game developer and designer. It's much easier for an independent game studio to develop a PC game than a console one. The prices for console SDKs are still very high. Which means that PCs as a platform are much more open to innovations than console. And, as we know, innovation is one thing the computer games industry needs desperately.

To summarize: in order to regain their market share, the PC games should capitalize on the strengths of PCs as a gaming platform, should be innovative and should target all ages of the audience (including the youngest kids). Not sure whether this will help - but this is the only direction I can see.

Technorati tags: , ,

Thursday, June 22, 2006

Save: commit, bookmark or suspend?

The semantic of a "Save" operation in UI is not as simple as one might think. While thinking about the problem with the "save" operation in computer games, I came to the conclusion that there are actually three different operations which are usually represented in the UI with a single "Save" command. These operations are: commit, bookmark and suspend. For the sake of simplicity I will call whatever the user is working on "the project" - be that document, image, configuration data or even a state of a game.

  • Commit. The user finished his work, and the project is ready to be used (released to public, reviewed by peers, put into production etc.) Several examples: saving user profile after editing it, saving changes to configuration of some program, saving a shared document.

  • Bookmark. The better name for this one would be "create a snapshot". The user wants to preserve the current state of the project to be able to return to this state later. Examples: saving the game, backing up the project before doing some risky changes.

  • Suspend. The user wants to stop working now, and to be able to resume work later from the same point. There are not many examples of explicitly doing this operation, but many programs are doing this implicitly when being closed. The difference with "bookmark" is that the user intends to restore the project from the suspended state only once, when returning to work, whereas the "bookmark" is intended to be used indefinite number of times.


The operations seem very similar - but in fact the differences between them are important enough to be considered when designing UI and software in general. It may sound strange, but quite a few applications address those differences correctly. In most cases the users are emulating different operations using just the standard "Save" command.

To illustrate this, let's consider an example well known to everyone - Microsoft Word. This program, actually, does quite a poor job of recognizing the different cases of "Save" operation. You want to create a snapshot of a complex document you're working on, before performing some global changes in formatting? The only way (unless you are using some version control software) is to save a copy with a different name, which is not elegant and just add clutter to your hard drive. You are editing a shared document, and want to suspend your work? Save it with different name in a non-shared location; otherwise you will provide others with an incorrect version of the document. It may seem that the only "Save" operation supported by Word is committing - but even that is not supported as it should, because Word tends to store some leftovers from the previous edits in the file, so, to commit in a clean way you have to save the file under a different name with the "Save as..." command.

Returning to the original question about problem with saving the games - I think that, when game designers realize the difference between different save operations, they will add "Suspend" operation to the game, and make happy many players - including myself.

Technorati tags: ,, ,

Wednesday, June 21, 2006

Why "saving the game" is a problem?

There is one thing in computer games that puzzles me a lot - both as a player and as a game designer/developer. I am talking about "saving the progress". For some reason in many games this supposedly straightforward operation is not straightforward at all. Especially prone to this are console games. No, seriously, I really don't understand why the game designers cannot give the player a possibility to save his progress whenever he wants it? Why do the console games use complex systems of "saving locations", checkpoints, savepoints and who know what else instead of simple "save" command in a menu?

I grew up on PC games - and when I started playing console games this peculiarity was a complete surprise for me - and an unpleasant one. Alas, being an adult I cannot play for as long as I want. I have to stop sometimes - and what a disappointment it is when I have to forfeit all the achievements I've made in the last hour just because I cannot save game in the middle of a level.

I tried to come up with any plausible explanation of this phenomenon:

  • Technical difficulties. Well, I don't buy it. I can't imagine what kind of technical difficulty can prevent a game on a modern console (like PS2 - or PSP, for example) from saving data at any given moment. There is plenty of horsepower to do this, and storage shouldn't be a problem either. Of course, maybe I don't know something...

  • Game design decision. I know that some game designers tend to think that giving the player opportunity to cheat (save - try to hit monster - miss it - load - repeat) might break level design. This could be true - but, for some reason, similar games on PC allow players to do it, and are still fun. For example, look at "Half Life 2" or "F.E.A.R". And, at the same time, "Call of duty" on PS2, being also a First Person Shooter, doesn't allow saves in the middle of a level.

    And, even if there is a problem with level design being broken in such a way, there is a brilliant solution to this problem - separate "temporary save", which ends the game, and which is destroyed after restoring. I've seen this design in "Wario Land 4" on Game Boy Advance - it works like a charm, and I really enjoyed the possibility to suspend the game at any time.

  • Legacy of arcade games. Yes, in a video arcade players cannot save their progress - that's the whole idea! That's what makes them play - and pay - more and more. And yes, old consoles didn't have the capability to save game at all - hence the "level passwords" and other solutions of the same kind. But this was a long time ago - the mode of playing had changes since then. Portable gaming devices are used in many circumstances, and people often simply must stop playing at certain time. The preservation of arcade spirit shouldn't compromise the usability of the game.



So, I can find no decent answer. But, while thinking about this problem, I've suddenly understood that "Save" operation might have different meaning in different applications. The semantic difference is subtle, but important for a good design of application UI - and application in general. But that's a topic for another post...

Technorati tag:

Monday, June 19, 2006

Progress or activity?

I missed the point in time when this change happened. Probably it started ten years ago - or, maybe more... I am talking about using "activity indicators" in place of good old progress bars.

Of course, activity indicator is much easier to implement than progress bar. With progress bar, you have to update it meaningfully - and to have some general idea of the ratio of performed work to the total amount of it. Activity indicator is just a breeze - you slap an animation widget on your UI - and wham! You have it!

But from the usability point of view, it's a disaster (at least, I prefer to view it as such). Not only you have no clue about the speed of the operation, the approximate time left and all such nuances. You also have no idea whether the application is running as it should. The cool progress animation can play by itself, making you think that the application is working hard - when, in fact, it doesn't.

I understand that under some circumstances making full-fledged progress bar may be tough. One situation is when you don't know beforehand how many operations the program will have to perform. For example, the last time I've encountered activity indicator where a progress bar should be was in the utility called CCleaner (a really good freeware program, which removes temporary files and other garbage from the disk). The program didn't know how many files it will have to remove. The author decided to use a fake progress bar - the one which starts from the beginning once it reaches 100%. A better solution would be to add display of the name of the file currently being deleted, or a counter of deleted files. This simple change would make the UI better - by looking at the growing number of deleted files I would always know that the application is running, and not just waiting for some locked file to become released.

The same principle is applicable to web applications as well. Don't just use "AJAX activity indicators" - in case of potentially long operations show some real progress information to the user.

And I have to admit that replacement of progress indicators with activity indicators is a problem not only in the world of computers, but also in the society as well. But this goes far beyond the scope of this post.

Technorati tags: ,

Friday, June 09, 2006

Again on piracy and copyrights

Yesterday I've had a curious conversation with one young gentleman. In two days he made two postings in one forum. In the first post, he was talking about some anti-piracy lawsuit, totally supporting it. The very next day he posted a review of some movie and offered to share a copy of the movie he downloaded from one of these services where you pay thirty bucks a year and have access to tons of "not-so-legal" music and video files. I was curious and asked him to clarify his position on copyrights and piracy. His answer totally shocked me:

" Well - said he - since I am giving the movie for free - that's not a piracy. It's like giving a book to a friend; you wouldn't call it a piracy, would you? If it's a piracy, then the whole eDonkey network is a great piracy act with millions of pirates. And, speaking of the place from where I've downloaded the movie, they charge for access, not for content, so that's not a piracy either. "

As I said, I was flabbergasted. I never thought that in our time so naive people would still exist. Of course, I did my best to explain the real situation to this gentleman, and then I had several thoughts.

First - it seems like the idea of copyright education ("Captain Copyright" etc.) is not as useless as I thought. This guy badly needed some kind of copyright education.

And second - the position of this gentleman has its own logic. And, alas, it seems to me much more reasonable and natural than the current copyright laws. And the copyright laws themselves become more and more absurd: it seems that merely having a shared folder on your computer might become a reason for a lawsuit against you (here is a very interesting Lifehacker article about it). The copyright laws are long overdue to be replaced with something realistic and reasonable.

Technorati tags: ,

Wednesday, May 31, 2006

Blogwise

I've just stumbled upon a blog search/directory site called "Blogwise", and, of course, decided to add my humble blog into their system. The process was easy - and after hitting "Submit", I've got the following message:

Your site has been added to the submission queue. Thank you for adding your site to Blogwise.

It is important to us that all entries are checked for consistency before approval, however Blogwise is run by volunteers contributing their spare time. There may be a small delay before your blog is added to the directory.

There are currently 46415 blog(s) in the queue. Your blog is expected to be added within 156 day(s).


Well, this isn't what I would call a "small" delay. Though I am in no hurry, I think that the guys at Blogwise should do something with the waiting time.

Technorati tags: ,

Friday, May 26, 2006

Java vs .NET on TSS

Couple of days ago an interesting thread was started on TheServerSide.com. The thread is titled "Java Succumbing to .NET in my Organization". The author of the original post discovered that not only his management, who are non-techies, decided to move to .NET, but many of the programmers were quite happy to do it. The author offered some explanations of why developers might want to discard Java in favor of .NET, and all those explanations boiled down to one complain: Java offers too many choices in frameworks, servers, components and architectures.

The thread, quite predictable, became extremely popular, and soon the discussion turned into a small-scale religious war (Java vs. .NET). The whole thread is quite interesting to read, the most interesting and informative post, in my opinion, being "can Java do a lot of things that .NET cannot?".

However, it seems that the discussion had entirely missed the point. After all, it makes little sense to discuss which technology is better in case of two almost equally powerful technologies. Much more interesting is the question of perception: why do the developers perceive Java as being inferior to .NET?

And here I totally agree with the answer suggested in the original post. Too many choices, without any clear way to chose. The number of J2EE frameworks, technologies, components and ideologies is overwhelming and intimidating, and it seems like new items are being added to this mile-long list almost daily. Not that I am saying that it's bad to have a choice; but if the problem of choice starts to divert developers from Java, it's definitely an unhealthy sign.

Unfortunately, I don't have any solution to this problem, or even a slightest idea of where this solution might be. But it at least anyone will read my post and will recognize this situation as a problem, I will be happy. And if no solution will be found, Java soon can be pushed out of market by .NET - and that would be a very sad thing.

Technorati tags: , ,

Monday, May 22, 2006

Don Spamleone

Fact: the company called "Blue Security" gave in to spammers and hackers and shut down their anti-spam service. I think this is the first time spammers achieved victory of this kind.

Story (as far as I got it from various sources): Blue Security came up with a controversial method of fighting spam. Basically, its software called "Blue frog" was installed on the users' computers and was flooding websites of spammers with opt-out messages, thus performing a typical DDoS attack. Then, some (allegedly, Russian) spammer/hacker PharmaMaster declared a war on Blue Securityand staged a real DDoS attack on their servers, disabling their site completely. Blue Security attempted to evade the attack by redirecting the users to its TypePad-hosted blog, but then PharmaMaster stroke Six Apart (the company which hosts TypePad), causing a lot of additional damage along the way. As a result, the company's co-founder Eran Reshef stated (according to "Washington Times") that "It's clear to us that [quitting] would be the only thing to prevent a full-scale cyber-war that we just don't have the authority to start..."- and the service was shut down.

This story is a sorry and disturbing one. Speaking frankly, I don't feel any real sympathy towards Blue Security: fighting crime with criminal methods is not such a great idea. Besides that, their floding caused unnecessary load on the servers and communication channels, and thus was not much better than the spam itself. There is a russian proverb which seems to perfectly describe this conflict: "A thug stole a club from another thug" (my translation is not perfect, but it shows the idea). By the way, there are some attempts to recreate Blue Frog in a P2P way - and I think these attempts are extremely foolish and dangerous, because it definitely will lead to a full-scale cyberwar.

I am also worried by the fact that, as I discovered from some articles, Blue Security got several million dollars from its investors - which menas that, besides some hard-core anti-spam extremists, there are some people with money who support the idea of fighting criminals with their own methods. Basically, this is equivalent to investing money in weapons for guerrillas and rebels. We all know too well where this policy leads to.

And I am disturbed - and enraged - by the fact that one outlaw hacker was able to declare a war on a legitimate company, which resides in a civilized country, and had won the war without anybody being able to protect the victim. This is really scary, because it means that a person with some knowledge of cyber underground, and some money is able to bring down any legitimate company. Some mesures definitely should be taken to protect people and companies from such fate - but, I am afraid, those measures most probably will turn out to be more harmful to Internet that spammers and hackers together.

Technorati tags: , , ,

Friday, May 05, 2006

Ma.Gnolia API

Yesterday Ma.Gnolia announced that the first version of their API is in production. The details of the API can be found here: http://ma.gnolia.com/support/api

I think this is a very important milestone for Ma.Gnolia. The API opens a multitude of new possibilities: plug-ins and extensions for browsers, mashups, stand-alone application that will either provide more ways to work with Ma.Gnolia database, or even use the database for some other purposes.

As soon as I have time I will go and play with the API – I like new toys!

Technorati tags: , ,

Wednesday, May 03, 2006

On Error Resume Next

Maybe I am wrong – but I think that I’ve never seen any programming statement more stupid and more evil than the notorious Basic line:

ON ERROR RESUME NEXT

I never could understand what made someone to introduce such an abomination into the language. Was it a momentary lapse of reason, a stupid joke or just an act of pure and random malice? Anyway, it’s horrible – but even more horrible are the two facts:

a) This thing is still in the language, and
b) Some people are still using it!

I’ve just spent several long hours looking at an ASP page and trying to understand why it behaves so strangely? I usually don’t use ASP – and totally forgot about this little gem. Finally when I discovered that whoever created the page put “ON ERROR RESUME NEXT” in the very beginning. I removed it – and immediately the true source of errors became obvious. It’s good that this page was just a part of an online store – and not of something more important…

Technorati tags: