January 29, 2003
Pirate-Me-Not

I promised to give some pointers for programmers on how to enhance your software so it is less vulnerable to cracker's attacks, who are trying to crack or make a serial for it.

All of these things are pretty obvious, yet a lot of software authors don't obey them. As a result, a serial number pops up on the Usenet / web boards within a few days (or even hours) after the new version release, thus hurting sales dramatically - my experience shows that if "generic pirate" people cannot find a serial number or crack for a particular software within first 3 days, they are more likely to buy it. But don't overestimate this statement, as lots of pirates will never, ever pay for your software, no matter what you do. But either way, often holding up for the initial 3 days after each release is a strategic move that might bring you more sales.

So here is a couple of tips to prevent serial numbers from being generated:


  • Strip debugging symbols. Run pbxbuild install or strip on your executable before shipping the code. Otherwise, a quick nm run will reveal a list of all of your internal symbols, such as, ugh, _CheckSerialNumber, or similar, thus giving a lot of clues to the hacker. Note that for Cocoa applications, it is not possible to completely strip off the classes and methods used in the executable - even if nm won't show it, class-dump will still do. However this adds some additional hassle as the hacker would have to set a breakpoint on a memory address rather than a symbol name in gdb.
  • Do not make bottlenecks. Never reside your serial number checking code in one routine returning true or false. This makes it an easy target for a [k] - change one byte in the code so it always returns true, and you're nailed. Use inline functions so there are many places where the serial is checked - it will introduce much more hassle for a possible cracker.
  • Base serial number on a customer name, if possible. This reduces the chances of a serial number to be distributed, as it's less likely for a person to share his/her own name with the whole 'Net as compared to a simple, faceless serial number. Base it on the email for even greater effect. There are plenty of John Smiths out there, but definitely only one john_smith@lambda.org.
  • Do not generate the full valid serial number internally. Many applications pre-generate a valid code for a given name, then compare it against the one user entered. If strings match, the serial is valid. This is probably a biggest security hole you can make -- all it takes is one run in gdb to find out the correct serial number your application nicely pre-generated for the cracker.
  • Use less obvious method names - since the hacker can easily observe all of your Objective-C classes, at least make the serial number checking routine less noticable (think orderWindowOut: instead of isSerialValid:). There's a good chance hacker will step over a routine with such an innocent name.
  • Don't check the serial number right away - there is no need to run the check right in the action invoked from the OK button on the registration sheet. Send a notification, set up a timer, do it from a sheetDidEnd: callback - just don't do it right away. This makes finding the right spot harder.
  • Banning leaked serials - never ever keep a list of banned names or serial numbers in plain text in your code. Why? Because this scenario is way too common: you ban a serial number in a new release, and hackers make a crack that will re-enable the banned serial number. How? Bloody simple. They search for a banned name in ASCII in your application binary and replace one or two letters in it, so they can still enter the "old" serial but the application will not be able to match it against a list of known leaked serials. At least ROT-13 it. Or XOR it.
  • If possible, only do partial checks - when the user enters a serial number, check only some part of it, and ignore other checks. Then check other parts of the serial for validity someplace else, and do not make a big fuzz out of the fact the second check fails. This may lead a hacker to beleive the serial they just made is valid, but it won't work.
  • Stay sane - if hackers decide to go at your software, you probably will not be able to hold out. You have other business to do, not just fight with people who are trying to outsmart you. By all means, understand that providing a sufficient protection level for your software is required to maintain acceptable sales, but the protection and the effort you spent on it should never interfere with the normal operation of your software, and shouldn't make legal users feel uncomfortable.

This about sums it up. Hopefully some of you found this useful. :)

Posted by slava at 04:16 PM
Shocking

I've been chatting to a buddy over ICQ today; he works as a principal sysadmin for a medium-sized ISP here in St.Petersburg (around 3k users). At some point of our conversation, I was completely shocked he is not aware of the recent MS SQL worm, and was wondering why is he getting a UDP packet flood on a local accounting Intranet. Can you believe this? A person directly responsible for the network and system operation in his organization is not aware about a worm that saturated half of the Internet for a few hours a week ago. Is he living in a can? Or spends too much time in q3a?.. Who knows. One thing for sure, I wouldn't want to be a customer at that ISP.

Posted by slava at 12:59 PM
January 28, 2003
WindowShade X 2.1.2

A much talked about update to WindowShade X is out, fixing plenty of reported issues:


  • Rewrote the part for Cocoa applications from scratch.
  • Exclude list is enhanced so it is now possible to exclude Microsoft Office X applications, among others.
  • Updated with Application Enhancer 1.2.1.
  • Fixed the issues when minimizing the windows for X11 applications.
  • Fixed a bug causing an unattended drawer to hang on screen after minimizing to Dock a windowshaded window.
  • Fixed a bug with window expanding issues after disabling WindowShade X.
  • Fixed a bug with sounds not playing when doing all windows minimization.
  • Fixed a bug with sheets in Microsoft Word X (fix only works under Mac OS X 10.2).
  • Fixed a bug with disappearing rename field in the Finder (it still is present in different form, due to a bug in Finder itself).
  • Fixed a bug with Mail.app not being able to double-click a message after s minimizing of a main window.
  • Fixed a bug with Mail.app disabling certain menu items after minimizing of a main window.

I recommend everybody to upgrade. Download here. Thank you for your support!

Posted by slava at 12:30 PM
Software Protection and Piracy

In the comments to the recent post, Terri suggested us to introduce a network check for our software to prevent haxies with the same serial number running on multiple machines, to increase profits.

This comment made me think about the whole protection deal, and in the end, it made me to write this small rant about software protection systems in general, and our take on them in particular. I will also briefly discuss the downsides and vulnerabilities of particular approaches (on a spite of a whole "software piracy" issue).

First of all, let's overview most popular takes on the software protection:

  • No protection, no serial numbers - most commonly seen in shareware that has an "I Paid" checkbox or don't have any need to enter anything anywhere - it always ships as a full version and relies on a customer's honesty. Since the software is fully functional from the start, there's no need to do anything about it for the pirates.
  • Serial numbers - probably most used method in both shareware and commercial software. It has the following variations:
    • Simple local serial number check - when a customer enters the serial number, the application itself validates it and activates itself if the serial number is valid. Pirates usually attempt to generate a fully working number using debuggers and disassemblers - relying on a simple fact that the application has to generate a valid serial number internally to check it against the one the user has entered. Serial numbers can be dependent on other data (such as customer name), or can be self-contained. The first method is most commonly used in shareware, when the author knows who purchased the software; second method is used in boxed software, as the vendor has no ways of knowing who bought the box, so the serial number are just validated based on format and checksums. Dependent serial numbers provide better protection for serial numbers being distributed over Internet on various Web boards bearing pirated serial numbers - since not everybody is comfortable in sharing the registration data that contains his/her real name. Self-contained serial numbers, on the other hand, are easier to spread, because they are anonymous enough, and the software vendor normally cannot trace such a number to a real owner (especially true for the boxed software, where you don't leave a record of purchase in the databases of an online processing system). What is sad, however, is that with the advent of Cocoa, it became impossible to hide the method names in the compiled application binary, making it easier on hackers to find the correct serial number checking function. What is even more sad, many Cocoa developers take the wrong approach on serial number checking - many just implement -[MyApp serialNumberForName:] and then simply do if ([userEnteredSerial isEqualToString:[MyApp serialNumberForName:userEnteredName]]) to verify the validity of the serial number. With that approach, for a hacker it usually takes 2 to 3 minutes to generate a valid serial number for some bogus name and distribute it over usenet and WWW boards.
    • Remote serial number check - this is a more advanced method requiring an active internet connection - the check is not performed locally, but rather delegated to a software vendor's machine over Internet (usually invoked as a CGI on a remote web server). This approach is much more hard in terms of serial number generation, as the hacker has no idea how the number is generated, plus the vendor has much more freedom in banning leaked serial numbers on his own server, the second they find a leaked serial. The downsides are pretty obvious, user has to have an internet connection to validate - and this is not convenient for many. Usually the only approach for pirates for such titles is to make a "crack" to disable the network checking altogether.
    • Intranet serial number check - this is actually an extra method that can be implemented in conjuction with the other two. It is simply an above mentioned network check that scans the nearby machines in some way or another to make sure no other copy with the same serial number is running on a neighbourhood Mac. This is done to prevent usage of the same copy of the software on multiple machines at once.

  • Hardware keys - also called "dongles". This is a hardware device attached to your Mac (usually via USB or serial port) that is used by the product to validate itself. The software usually "talks" to a hardware device to find out if it is present, and therefore if the software can run on the machine. Hackers usually either make "cracks" for such software or write "dongle" emulators - a small sneaky programs that simulate the device and feed the correct answers to the application. Many professional software uses "dongles" - which are effective, but rather inconvenient, in my opinion - in addition to a hassle of having an additional device plugged into your Mac, and problems you will face if it will be broken or lost somehow, the manufacturer has to include the price of the hardware key in the software package price (ok, that's not a big deal, since such software packages usually cost a lot in the first place, so what difference a dollar or two would make?).
  • Original CD requirement - the software wants to see its original distribution CD in drive when starting up (or once at the installation time). Many of the games have this kind of protection, as well as some other software. Pirates usually just distribute the CD images that can be burned back to a CD-R media so the software in question accepts it as-is. Alternatively, a "crack" is made that bypasses the check for the original CD - and I know quite a number of people who bought the game legally, then applied a "no CD crack" to it so they don't have to stick a game CD into their computer every time they want to play.
  • Challenge-response - this is actually more or less a variation of a serial number method, when a customer is given a randomly generated "challenge key" and they are required to contact the vendor for a valid "response" in order to authenticate the software. Pirates usually either "crack" or make response generator applications for such software.

Maybe there are more methods available around that I forgot here, but I think the overview above pretty much covers it. There are more variations and cross-methods of software protection, of course, and I am not a software "cracker" to know them all.

Sitting on my own tree, I can say that many shareware developers suffer from piracy. I don't know much about big corporations such as Adobe or Macromedia, but I think they lose some of the sales because of the piracy issue as well.

So what do software developers do when they encounter that the serial number to their software was "leaked" to the "general public"? The most obvious answer is - they disabled the leaked serial numbers in the next version of the software so they no longer work. What is most common answer to that action from the pirate land? A new serial is leaked, or generated, within a few days after the software release (pirates, and crackers, just like us, watch MacUpdate and similar sites for new titles/new versions of the software ;). This ends up as an endless cycle - developer bans the serials and improves the protection, pirates crack and leak numbers.

This is where every developer should stop for a few minutes and think - is it worth to battle with the pirates? Will the pirates buy your product if they cannot crack it or find a serial number? Or this ends up as a battle with the windmill - you spend lots of time improving your protection, time that could be spent on adding useful features, and give the pirates more fun - because most of them do what they do for fun, as an entertainment, or as a challenge?

I think there is a thin balance between bringing sufficient anti-pirate protection and wasting time you could have spent improving your product. Your software should be fairly well protected, but do not forget about legal users who bought it and are expecting you to improve the software functionality.

This is exactly the reason we are not wasting too much time trying to squeeze money out of unhonest users - we try to improve our software so they will see how good it is and will want to buy it. After all, people who will not buy it ever, will not buy it either way - so why bother?.. Better focus on making your product better - and everybody will benefit from it.

Sometime later I will highlight a few things for software developers to make their products more hacker-resistant. And for now, thanks for reading all this rant. =)

Posted by slava at 05:54 AM
January 25, 2003
Viruses

Ugh, that new Internet virus (or worm, whatever that is) caused my ISP to die. ;) So right now I am connected through GPRS -- the ISP promised to have issues resolved by tomorrow. Ack. One more reason to not use Windows. ;)

Posted by slava at 04:46 PM
January 24, 2003
Product Pricing

So after a long hiatus from Slava's...err, the company blog, I get the task of letting you all in on a recent decision Unsanity has made.

To get right to it, we have decided to raise the price of our current lineup of products from 7 bucks a pop to $10. Believe it or not, this was a tough decision to come to for us. We actually liked providing our products at dirt cheap prices. Seven bucks became somewhat of a signature price for us.

Remember, this is not an upgrade charge. This will be effective for new purchases only. Those of you that already own our current products will still have free upgrades for the life of the product.

We think $10 per copy is still a great value for our products, it's still dirt cheap, it's just a higher grade dirt now. ;) But we always like to play fair, so we're not going to switch the price until February 1, 2003. That gives anyone who has been waiting to purchase a chance to snag our products while they're low-grade dirt cheap. (Note: the "dirt cheap" is reference to price only, not the quality of the product....the products are of course "pure gold") This change will help us to be able to continue to improve existing products even further and innovate and bring more cool products to Mac OS X in the future.

So thanks for listening and for your continued support. We do hope our users understand and have faith that we'll deliver sufficient value to erase any doubt on our price. So hold the mobs/riots/demonstrations please! ;)

Posted by brian at 01:46 PM
Happy birthday, Macintosh!

The topic pretty much says it all. Today is Macintosh 19th birthday, and this means my favorite computer is only 4 years younger than I am!

We may be called a cult, a following, die-hard maniacs of a dying computer evolution branch, but no matter what, we know what is the best computer out there. It may have quirks both in lagging hardware and OS, but eventually they are getting worked out. Thanks, Apple!

Posted by slava at 02:57 AM
January 23, 2003
Safari & Sense of Humor

Read this entry by David Hyatt if you haven't already. Then read the comments to it. This is what happens when:

a) General, non-geek crowd tries to read a techie/geek blog;
b) The crowd above don't bother reading the archives.

A joke turned out to be taken pretty seriously by most of the people who commented. WTF? Or does humor always has to have a "Humor" category tag David added some time later to be interpreted as such? =)

Posted by slava at 10:50 AM
Dev Update

Just a quick note that WindowShade X 2.1.2 will go Final Candidate tonight, with a release pending sometime next week. Thanks to everybody who submitted the bug reports!

Unfortunately, it will not completely fix the bug described in MacFixIt with renaming files. If you disable WindowShade X and minimize the Finder window while editing the filename, then restore the window back, the filename will be blank, until you click somewhere else. This is exactly how WindowShade X2.1.2 works now -- and unfortunately I cannot do much about that as it is an Apple's bug (and I have submitted it to RadarWeb, so let's hope it'll be fixed soon). =)

Posted by slava at 06:19 AM
Half-assed RSS feeds

Nifty, a blog dialogue. It happens every day, and it happened to be happening here as well. Anyway, John tried to point that the recently updated MacMinute RSS feed is actually not the full one. I agree, getting used to the whole RSS feed thing you usually tend to want all of the article's text to be included. However, I can clarify that although I am in charge of the technical aspect of the above mentioned site, I have no control whatsoever on the content. So unless "the management" decides to include full text of the articles in the feed, I cannot do much. ;) You are more than welcome to actually suggest some marketing ideas about monetizing of a complete RSS feed -- maybe that will push this and other sites on the Mac side to implement these feeds. In the end, we all benefit, right? =)

Posted by slava at 06:05 AM
January 22, 2003
Search field

Alrighty, I seem to be on my quest to make John happy today. A search field is added to the main index template, woo hoo!

Posted by slava at 01:02 PM
MacMinute RSS Feed

I've updated the MacMinute's RSS Feed so it includes the first sentence of every newsbit. That gives enough information and should please you, John. ;)

Posted by slava at 04:18 AM
January 21, 2003
APE 1.2.1

Well, here we go - as promised, Application Enhancer 1.2.1 and Application Enhancer SDK 1.2.1 are out. Next things we;ll be focusing on is WindowShade X 2.1.2, which is nearly ready for the release. I will spend half a day investigating a bug reported on MacFixIt - and possibly fix it if its under my jurisdiction.

Posted by slava at 03:16 PM
January 20, 2003
Updates

Rewrite of WindowShade X Cocoa part is going well - I am expecting it to be done by tonight. Meanwhile, I cleaned up a lot of code and built up a foundation that will serve well for the addition of minimize-in-place functionality later on in the next major WSX update. If all goes well, WindowShade X 2.1.2 will be out this week.

On the other hand, we'll be releasing an update to Application Enhancer tonight tomorrow. It fixes no major bugs (simply because we are not aware of any ;), but gives a few nice little fixes to the APE Manager tool, and fixes two small memory leaks (6 bytes per running application, whoop!). Also, a thing that is long overdue is APE SDK 1.2.1 - now with better documentation, example code, ProjectBuilder templates and more.

Posted by slava at 10:16 AM
January 19, 2003
WindowShade X Again

I was chasing against some weird Mail.app bugs caused by WindowShade X (collapse window, expand window, double-click a message - new window with the message will not appear until you switch out of Mail.app and switch back) and did some serious investigations on the Cocoa side of things. It turned out the Cocoa WindowShade X side can be made much more cleaner and efficient (and get rid of the above mentioned bug(s)). So here I am, started a little rewrite/cleanup of the code for Cocoa part of WSX.

1.5 years ago, when I was just starting on WindowShade X, we had much less advanced tools to do stuff, so some parts of WSX (especially on the Cocoa side) were pretty... hackish. They work fine, but there is a better way of implementing it -- I see it now. The code carried on since then and now I finally can dedicate 2 days to completely rewrite the thing.

On that matter, a quick poll for WindowShade X users:
- Try Windowshading a window;
- Click on the Minimize to Dock widget or Make Transparent;
- The window will unshade and either fly to Dock or become transparent.
Is that the right behavior? Shouldn't it just unshade? What to you think?

Posted by slava at 04:11 PM
January 14, 2003
Ah

The joys of the weather -- the temperature here jumps up and down every day (been about 0 C yesterday, and -27 C the day before, and -16 C today). Sort of frustrating, especially since it's pretty uncomfortable to ski at below -25 C.

And I got a typical winter stuff -- common cold, coughing, and a runny nose. Yet today when I saw the temp at -16 C, I decided to ski anyway. It was pretty fun, to be able to go downhill after 1.5 weeks of sitting at home (more or less).

And now I am sitting here, coughing frequently, and looking for a bug in WindowShade X that causes Mail.app misbehave a little bit. Wee!

Posted by slava at 12:16 PM
January 13, 2003
Happy Old New Year!

Probably Russia is the only country celebrating an odd holiday named Old New Year. Does it makes sense to you? =)

It is celebrated in the night between 13th and 14th January -- that's today! Gives us Russians another reason to get drunk. The holiday has its roots in the dates shift occured somewhere in the beginning of 20th century to catch up with the missing 2 weeks that were made during 1900 years. Or something like that.

Anyway, 13th Jan is the same as Dec 31st in the "old" dates (without the day shift) - so this is why this is called Old New Year. (That's the same reason as why we celebrate Xmas on Jan 7th and not Dec 25th. Odd).

Happy Old New Year 2003!

Posted by slava at 05:25 PM
Digital Lifestyle

Well, well, well. I bought a new Epson inkjet printer today for the sole purpose of printing my digital photos. I guess the full circle of digital lifestyle is complete now (almost, the only thing pending is iPod). I've got:

  • A SonyEricsson T68i with Bluetooth
  • A bluetooth USB adapter + Address Book, iSync and friends
  • Digital camcorder
  • Digital camera
  • Two printers, monochrome laser and new inkjet one

Is anything missing from the list? I dunno. Still fighting with the printer though, I am trying to make it well behaved with the roll photo paper -- when printing directly from the CompactFlash card (on its own), the paper feeder works as expected, but when printing from the Mac (having set the paper size to 10x15 preset), it rolls out about a meter of paper after every photo. Anybody knows how to defeat this or what am I doing wrong?..

Edit: Oh yeah, a Palm. I used to own one, but then I noticed I suck too much to forget about using it all the time (it was fun for the first 2 weeks, then I was either forgetting it at home or forgetting to use it). At the end, I gave it to my father, who proudly lost it after 3 weeks of use. Ohwell.

Posted by slava at 03:53 PM
January 12, 2003
Silk Alpha 3

This may be extremely buggy. This is the first time someone other than me has used it. Never tested on 10.1.5.

Get it here

Version 1.5a3
- Now refreshes the font boxes if you delete a substitution rule.
- Moved some logging to only appear if log stuff is checked.
- Redid GUI some more.
- Can now drag the font substitution fonts into text editors (like email in case I ask for your rules)
- About box works again
- Fixed a problem that could cause some odd problems in cocoa applications when loading nibs if Minimum font size was enabled, but theme font was disabled and there was no theme font ever set (the Theme Font box would say "No Font"). This would cause crashes in some applications like Chimera. The conditional operator saves the day. This bug was reported in the MacNN forums instead of directly to me. Err!
- Remove is now enabled if you set a replacement font.
- Can no longer select an invalid font in the Font Panel.
- Added regular expression per app settings.
- New individual settings are now based off the global settings instead of what I think should be default.
- Adding a new application now causes the individual settings list to scroll to the selection.
- No longer tries to find matching individual settings for the current application once it is found.
- Added an option to prefer outline fonts. This will make fonts like Geneva, Monaco, and the like anti-aliased at point sizes where a screen font exists.
- When silk crashes, it should now point blame at itself instead of hiding behind the shadows.

Version 1.5a
- Ability to prefer outline versions of fonts.
- Font substitution
- Theme Font Replacement
- Minimum Font Size
- Moved to .APE
- Some other bugs fixed I can't remember. Like this one caused by a bug in OS X that makes it so Silk can't get the path of a CFM unbundled application using CFBundle.

Known Problems

- Changes may not take effect immediately for the new fonts tab.
- May replace some fonts it shouldn't and might not replace others it should.
- TextEdit (the API, not the Application) selection shows fuzzy pixels. Want to fix this for next version. Not sure how yet.
- Doesn't make sure APE is installed.
- Minimum font size is wacky at times.
- The desktop seems to randomly decide when to draw shadows when Fast Theme font replacement is selected.
- If you have substitution rule for Lucida Grande to some other font and a theme font selected that is different from the rule, you will get some odd results.
- If you replace the font that is the theme font as a font substitution rule, you will get some weird results as well.
- Because of Objective-C's inherent slowness, doing font substitution on a Cocoa app that uses Cocoa text handling (Like OmniWeb and ProjectBuilder but not Chimera) can be extremely painful.
- There may be some memory leaks here and there.

Settings Fonts

- You can drag and drop just about any text selection with font information or object from the right side of the Silk Preference pane to the left side of the Silk Preference Pane's Font Tab or two the "Font Boxes" below the tables. Like if you don't like a font in Internet Explorer but don't know the name of the font, just drag a text selection containing the font onto the Original Font box or the font substitution rule table of the Font tab of the Silk preference pane. I'll make a movie later to explain this.

Posted by rosyna at 02:50 AM
January 11, 2003
The Wasp Factory

Just finished reading a book by Iain Banks, "The Wasp Factory". It is a second book I've read of that author (first was "Walking on Glass"), and just like the first one I tried, it is just great. Quite a simple story yet told with plenty of humor and horror at the same time -- the whole book made me want to read more of the same authors, so I'll be starting on The Bridge tomorrow). Being read mostly sci-fi for past few years, I started moving towards different writing styles at the end of 2002, and I don't regret it. Variety of reading is essential to keep yourself sane. Or unsane.

Posted by slava at 06:17 AM
iChat Enhancer 1.5

I've been talking about this one some time ago, uet after some delays and more fixing Jason released a new, all-better version of iChat Enhancer. This handy little APE module will resize the size of the iChat input line area, and (an invaluable feature to me) will optionally prevent iChat from stripping out line breaks from your messages -- often it's so much needed to send a piece of some code to somebody, and you paste it in, and notice iChat proudly ate all returns. Yikes. This thing fixes it, so I can be happy now!

iCE-15.jpg
Posted by slava at 05:19 AM
January 09, 2003
X11

It's about time Apple released its own implementation of X11 system for Mac OS X. I've installed it, and it looks pretty good - at least way better than any other alternatives I tried before.

There's one minor drawback, though - WindowShade X is not working with X11 app windows. I spent some time yesterday investigating the problem and found the source of troubles, as well as mostly implemented a fix for it. So this means that sooner or later a minor update to WindowShade X will be released (sooner than I thought, as I have sort of expected to get to WSX when implementing our own minimize-in-place system).

At the same time, an update to Application Enhancer is in the works as well (no real big bugs to fix, mostly cosmetic touches in the APE Manager). I also have to finish updating the docs and release APE SDK 1.2.

Lots of work ahead, and even more fun ideas are waiting to be played with. This is great.

Posted by slava at 12:38 PM
January 07, 2003
Safari

Well, Apple did it again, in my opinion. Safari looks like a true winner to me -- been using it for about 19 minutes now, and already in love. The only thing I miss is tabbed browsing. Ohwell, I guess it'll be coming up. ;)

Posted by slava at 02:30 PM
Living in Russia

As many of you have already known or guessed, I live in Russia. The rest of the team (Brian and Rosyna) are in the States. This makes us a true Internet company, I guess, even though we know each other in real life, as well.

Somebody in the comments for the previous blog entry asked why do I live in Russia. Frankly, there are a few reasons, but most of them are pretty... silly, or maybe a bit naive.

First of all, I was born here; most of my family lives here. Lots of my real life friends and people we know also live in Russia. I don't really know any foreign languages, too. ;)

Second reason, I am pretty well established here. I have a great wife and an awesome kid. I own an appartment, a car, and tons of other junk called "property". No, property won't be a real obstacle if I *really* wanted to move, but still...

Third reason, I earn a bit more than most other average Russian people - considering an average programmer working fulltime in an officc here gets around $400 to $800 per month. Makes me feel good. In the other countries, my salary would feel much more average than it is here. ;)

I like to travel though, and sometime on my agenda is getting an appartment in some other, warmer country, where I can stay during the frosts I hate so much.

On the issue of travelling, I wish I could be at MWSF, but oh well, being a Russian citizen also gives some troubles with getting a US entry visa -- US Consulate refused to give me one, because:
- I work in an american company;
- I work in hi-tech/IT;
- I am young.

Sounds pretty absurd, yet the guy explained that in his opinion I am not tied enough to Russia to have a motivation to come back (wife, kid, and property probably just doesn't count), besides since I work in a US company, there's a high possibility I will immigrate. Hah. Makes it sort of unfair - I am not allowed in the country that makes profit off my work. They also gave me a "to-do list" of things i have to achieve for a possibility of gaining a visa:
- Get one more kid;
- Get employed in a Russian company;
- Make the Russian economics be better.

I laughed at the last one, and politely asked, how the guy thinks I can affect that. Of course I got no answer. ;) So all in all, I'll try again to get a visa for WWDC or MacHack. That'll be fun, for sure.

BTW if any of you are planning to visit St.Pete (we will celebrate 300 city anniversary this summer), drop me a note, I'll happily have a glass of your favorite drink with you.

Posted by slava at 04:06 AM
January 05, 2003
Politics

I am sick of power outages in this city. We have our electricity cut off every single day, lasting up to 4-5 hours; kind of kills my productivity -- my UPS systems (one for each computer in the appartment) run out in about an hour, so the rest of the time we have to sit here with candles (it's only fun for first 3-5 times ;). I've heard this is because we have a major elections coming, and one of the opponents to the current major (people are not too satisfied with him) heads the local branhc of a nation-wide electricity company -- so the current government are organizing the power blackouts to make people angry and not vote for him. Sounds pretty absurd, however knowing Russia I won't be surprised if it's the truth. ;)

On the other hand, yesterday (when half of my work day went off with the power), I looked in the window and saw northern lights -- first time I ever saw these in St.Petersburg! Quite a stunning view, the whole sky was stripey. I took some pictures, but none of them came out well (crappy cheap digital camera ;).

Any way, sometimes power outages are fun. I saw northern lights, and went to bed early. ;)

Posted by slava at 04:45 AM
January 03, 2003
ProjectBuilder...

The new ProjectBuilder is a whole lot better. It can utilize multiple CPUs (at last), and it has a few other improvements.

However, check out this nifty screenshot:

ProjectBuilder Dec 2002

Can you tell the build was failed if you just glance over the window without really paying attention to the text? That tiny green icon sorta misleaded me, and I was thinking "why my newest changes are not reflected on the build?". ;)

Posted by slava at 11:27 AM
Typography

Weird, more and more people around me are getting into typography stuff. One codes a few popular Mac OS font tools (FontLab, TransType). Another one, Aaron Sittig, used to work with infamous Napster, and now, when the company dissolved, got back to the university and began learning typography and tries to design his own fonts.

The whole area is pretty much a mystery to me -- I can judge a font by the way it looks, but I got no other criteria or special knowledge to do so. This is something I'd love to learn sometime later -- I guess I'll have to pick some good books on the issue. Any suggestions?

Posted by slava at 06:04 AM
January 01, 2003
Happy New Year!

Well, this is 1837th time you read a 'happy new year' post on blogosphere. So we'll make it short -

HAPPY NEW YEAR!

Posted by slava at 04:31 PM