Recently in work Category

My Appreciation for Good Tools

By Dusty on October 19, 2009 4:57 AM · No Comments
There are two specific tools that are making my life very easy right now.

1) MySQL Workbench

This is made of awesome.  It's not without its bugs (and boy does it have those), but it does a fantastic job of helping structure the database tables without needing to deal with more details than I need.  And its free (and open-source).  Plus they supply a 64-bit DEB file if you need such a thing.  I recommend getting the stable version.  The beta/dev version doesn't seem to have database sync for some reason.  It allows you to automatically update a live local or remote database server without a worry.  You will not want to be without that!

2) Rose::DB::Object

This handles many-to-many relationships so much better than Class::DBI did.  I've recently moved to R::DB::O and am not looking back.  It subclasses beautifully and helps me keep my database details and my logic separate.  Plus it deals with so much other stuff that I'm not sure how I lived without it.  There is a great tutorial, too.
I am not a fan of i18n. We should all speak one language (and have one culture, and use symbology the same way). Okay, I'm lying. I like i18n and wish to embrace it in my applications.  But there is so much to do!

Not only do I have to worry about using other languages and character sets, but also whether it's an RTL language (which means I'll probably have to make a really different interface for them since they're *usually* right-side anchored instead of our left).  And I have to worry about people with names that don't follow our standard First Last format (John (given/first) Smith (family/last) vs Mao (family) Ze (generational) Dong (given) vs Björk (given) Guðmundsdóttir (paternym) (and worse, not even sorted by the "family/last name", but by the given name)).

Colors mean different things everywhere.   For example, red is considered "stop" or "warning" in the US, but in China, if a name is in red, it means that the person is deceased.  I don't want to accidentally claim that some guy is dead just because I used red to signify something about him.  Specifically for my situation, I could understandably use red to signify that John Smith's computer is unavailable or that there is a pending error status for his computer (assuming that his computer happened to be named after him).  I don't mean that he's dead, just that there is a problem.  What does this mean to me?  In the US it is acceptable.  In China, it probably isn't.  This means that I just can't use red that way.  I'll need to use something else to indicate this state.

Symbols in the US mean different things to us than they might mean to someone in India, China, Japan, or even England.  For example, using a mailbox with a raised red flag in the real world (away from our computers) means that there is outgoing mail to be picked up by the mailman.  But online, it usually means that you have *incoming* mail in your mailbox (yeah, in the US we can't even use this symbol correctly!).  And in other countries, they might not even know that it has anything to with mail or messages at all and will not likely understand that the red flag means something.

I mentioned names earlier.  I also have to worry about transliterated names.  For example, if I were to come across a contact with the name 宮崎駿, how the heck am I supposed to know who that is?  If my program is being used in an environment where everyone understands how to read that name, it's okay.  But what about mixed or international environments?  I want to be able to have that person be addressed using their name in kanji by those that can converse in Japanese (by email/letter/etc), but I would want to be able to *say* their name when I end up talking to them on the phone and I would want to be able to identify the person by their contact record without being completely lost.  That means that I need to be able to collect his name transliterated into rōmaji (romanji).  Only then would *I* be able to tell that the contact record is actually for MIYAZAKI Hayao, my favorite director.

Did you know that Vaqif Səmədoğlu and Вагиф Сәмәдоғлу are the same person?  I didn't either.  Storing a transliterated name (Vagif Samadoghlu) would be oh-so-helpful here.  But now we have another problem:  should we store both the Latin version as well as the Cyrillic version of his name in addition to the transliterated version?  It could very well not be worthwhile to worry about it.  But how should I know?

And how the heck would you deal with محسن مخملباف if you saw it in a database somewhere?  I wouldn't have a clue if that's really a person's name.  But since you see it in a contact record, you would probably assume it was a person (or is it a company name?).  Since I already know that it's a person's name (I copied it from a webpage that claims that it is the name of an Iranian director), we can move on to another problem:  what do I call this person?  There is no way I'd get "Mohsen Makhmalbaf" out of that mess.  And even then knowing that, should I call the person "Mohsen"?  Or "Mr. Mohsen"?  Or "Mr. Makhmalbaf"?  Or is it really a female?  Is "Mr" even appropriate here?  Oh, so many possibilities.

I care about these things.  Maybe I won't even need to talk to Miyazaki or Makhmalbaf.  But my customers probably will.  Someday, probably soon, one of the users of my code will need to deal with names like these and they won't want to be left wondering what to do.  Sure, we could force the rest of the world into the first-name/last-name business, but why?  If we can figure out how to do this right, maybe they'll feel that we really understand their situation or their culture.  Maybe they'll feel more comfortable using our software.  Maybe they won't feel that all Americans are self-centered, naïve, or stupid (just some of us, eh?).

I believe that opening our software and our eyes to the other cultures of the world will bring us closer together.  It might be a lot of work, but it may be worth it in the end.

Amazon S3: I ran out of buckets

By Dusty on October 3, 2009 7:24 AM · No Comments
We use Amazon S3 for data backup for all of our servers.  Each individual server gets its own bucket in S3.  Actually, it gets two (-backups and -chunks).  Apparently there is a limit to the number of buckets you're allowed to have in S3.

So now the last server I added can't be backed up.  Greaaat.

I'm in the process of merging a few junk server backups into a single pair of buckets to see how it works.  If it works well, I'm just going to merge *all* of the servers into a single pair of buckets.  I don't like it, but I'm not sure I have much of a choice.  I don't want to stop using S3 for backup (super cheap, easy, and reliable).

I hate PayPal

By Dusty on March 9, 2009 9:28 AM · No Comments
I got a voicemail message from PayPal today telling me to update my payment method for my monthly billing for my Website Payments Pro service.  The site won't let me.  The very difficult to understand Indian-sounding lady at PayPal was confused when I told her that it won't let me.  She treated me like an idiot and walked me through the process.  As expected, it wasn't fruitful.

I want the payment to come from my bank account.  Not too hard, no?  Well, she tells me that the system disabled my bank account as my payment method.  What?  I use my bank account with my PayPal debit card all the time.  She didn't seem to care to check that, even when I asked her to.  She puts me on hold and disappears for a very long time.  When she comes back, she says there's nothing they can do to reenable my bank account.  She wants me to use a different bank account or credit card.  No, I refuse.  If they can't fix this so very simple thing, why should I use their not-so-flawless system?  She looks through my entire account history and sees no problem with my bank account.  She never finds any declined bank transactions.  She has no idea why my bank account is supposedly disabled (even though I use it all the time...).  She goes to ask her manager and puts me on hold for a very long time again.  She comes back and says they'll try to figure it out and call me back.

I was on the phone about 45 minutes, mostly on hold.  About 10 minutes calmly talking to her, and about 5 minutes being very frustrated toward her.  The rest of the time was on hold.

I'm seriously losing confidence in PayPal.  If they can't fix this simple thing, I'm going to find someone else to process my credit card transactions.
Does anyone have the need for a system that allows you to share your passwords with other people?  My company needs to be able to share passwords between staff (website logins, etc).  The best I've found so far is SplashID, but it doesn't really work in Linux and it doesn't properly share passwords in the nice atomic way I need.  So I've started building a webservice that does this.

No, it doesn't store the passwords in plaintext.  Each user has a key (PKI-style).  The passwords are stored in a table.  That row doesn't have the password itself, just a reference to its existance.  Another table has the public-key-encrypted password, one entry per user with such access.  Not even the database admin (me) can see these passwords as they're encrypted with the keys.  The key is decrypted with the user's private key, which is only accessible by them.  When a user shares a password with someone else, the password is decrypted with the private key and then a new entry is created with the password encrypted with the target user's public key.  That entry is attached to the controlling row in the other table.  This allows for modifications to the password as well as all other meta data.  Those modifications will pass through to the other users' entries.

The nice thing about using public/private keys is that you can encrypt items destined for others without being able to decrypt it, properly protecting the data.  Even if someone were to get a full database dump of the system, they wouldn't be able to use it.

I'm planning to make a desktop client as well as a Palm client for this.

My ever-growing list of projects...

By Dusty on February 8, 2009 2:27 PM · No Comments
Working on LeafBridge pretty much full force these days.  Starting with the Windows version so I can start making money from it.  Will add the Linux and Mac OS X versions shortly after I learn what I did wrong with the first released Windows version.  It'll be greatness.

I had to write my own XMPP library for Perl.  None of the already-existing XMPP libraries would work for LeafBridge.  It has to work on Windows, Linux, and Mac OS X reliably and must be thread-safe.  So I created Net::SloppyXMPP.  It's not finished yet, but it's mostly there.

I've started doing research on writing apps for the Palm OS.  I guess I have to learn C sometime... ugh.  I plan to write a few junk apps for it to learn how to do it.  Eventually, I'll be writing apps specifically for LeafBridge.

Aside from all that, I'm working on the Megagram website.  I've got a few ex-coworkers that are aiding me in it and hope to have something marketable soon.