Sunday, April 06, 2008

Simplify localization contribution for open source projects

Recently I've been played a bit with VLC player (mostly fixing bugs in ftp and avi modules). Their idea of localization is that someone has to request corresponding .po-file in mailing list and load it in poEdit. I think this is a wrong idea for open source projects. Here you suppose to welcome and simplify contribution of the people, maintaining reasonable level of quality at the same time. A lot of people is willing to donate some of their time for localization on their native language, if setup is not complicated. Aiming to use those, who is willing to spent 15+ minutes can make a real difference in timeline for getting localized versions.
So, first of all, the solution should be web-based (like Rosetta). Second, it should be as simple in setting up/login as possible (username/password/captcha). Third - show one resource-string to be translated at the time. poEdit and other professional translating tools are showing the whole table of "language pairs" - correspondence between phrases on the source and target language. And this make sense if you are targeting on professional translator, not occasional one. Here the whole concept of UI should be build around this "one phrase" translation. In addition to source phrase you can show google translation (using their unofficial api), and translation of phrases, that has some specific terms for the application (to ensure consitent vocabulary across all translation). User should be able to skip this translation and proceed to the next one, or save one's translation, if it passes certain verification rules (such as presents of %d, %s in translated text, which is corresponding to source one, etc)
Ability to perform translation on the level of individual phrases makes it easy to perform simultaneous translation of one file by several people (does not have to merge changes afterwards)

Sunday, March 16, 2008

Syncronization of your contact pictures

Almost any review of the mobile phone features photo of incoming call, where you can see nice and clean picture of the caller. This looks really good, but I've never seen anyone, who is succesfully using this feature. And the reason is very simple - even with the cameraphone it is extremely difficult to maintain a database of quality pictures for your contacts. Especially if you are changing your phone once a year :)
I think this situation opens a niche for the nice piece of software. Someone forwarded me a linke to Spokeo - agregator over multiple on-line services, which is able to present you what are your friends doing in your favourites social networks and services like Picasa. I was amazed how easily this service retrives various information (including pictures) about my buddies from my google address book and social network friend lists. What if someone will create a service, that will be able to update your mobile phone address book with pictures, retrived from LinkedIn, Facebook or VKontakte?

It should be able to operate via OpenSocial API or custom html parsing, shows you a screen where one can manually match your friends and contacts in your address book (of cause system should attempt to do as much automatic matches as possible) and update your phone contact list.

Basically there are 2 possible ways how this can reach user. It can be mobile application, which user can buy for the fixed price and use it on one's phone as many time as possible. This probably will not going to work on j2me, but sounds like ideal case for iPhone (with its centralized software store). Technologically it can be implemented as Windows Mobile application as well, but it will be less appealing for the user

The other option would be to create on-line service with Silverlight front-end. This front-end should be able to communicate with ActiveSync, iTunes, Nokia suite or whatever sync software is installed. There will be no problems with delivering updates for the users. The only reliable way to monetize this service will be paid SMS, because the target audience is 15-25 years old, and they will unlikely visit site frequently (so ads will not work).

Update: Did not do my homework properly: Outsync performs photo-sync between Facebook and Outlook (so it can get to your WindowsMobile afterwards). Fortunately it is .NET based, so someone might adopt it to your favorite social network as well :)

Friday, November 09, 2007

Setup PHP on Xitami

Recently I had a nessecity to quickly setup PHP development environment. I've read a couple of HOW-TO articles, and since it was not so easy to install IIS on my laptop, I decided to download and install Xitami 2.5 web-server. PHP 5.20 installer claims that it will configure this server automatically, but apparently it does not (I suspect that it was because I've installed everything to %Program Files%). Ok, there was a manual step-by-step instruction, but it also doesn't work very well. At the end of the day, I found the following:

  • If you specify php-cgi.exe as a filter for .php-extension, it will not work with aliases, only with real directories under your web-root
  • If you use php.exe, it will work with your aliases, but it $_GET and $_POST will always be empty
So the solution is to use php-cgi together with symlinks.

Thursday, September 06, 2007

Fun with web-services and unqualified elementFormDefault

Recently I was participating in writing client for document-style binding web-service. This is the first time I saw such wsdl in the field, so I immediately wrote a small test application in VS.NET 2005. Although invoke appears to be working normally, I got null response instead of some actual data. I spent a whole week blaming authors of the web service, but they convince me that the problem was on the client side. It was quite difficult to intercept soap messages, because they were using https, but I found an interesting post how you can get them from SoapHttpClientProtocol. Using this small hack, I was able to observe the resulting envelope, that did contains response, which looks legitimate. But at the end in the corresponding C# object I still got nulls. The wsdl begins with the following declaration:

<wsdl:definitions name="testservice"
targetNamespace="http://www.testservice.com">
<wsdl:types>
<xsd:schema elementFormDefault="unqualified"
targetNamespace="http://www.testservice.com/test">
<xsd:element name="response">
<xsd:complextype>
<xsd:sequence>
<xsd:element name="ident" type="xsd:string">
<xsd:element name="number" type="xsd:string">
</xsd:sequence>
</xsd:complextype>
....

Visual Studio generate me a corresponding class called response with 2 properties, that has Unqualified System.Xml.Serialization.XmlTypeAttribute. Apparently, Axis on the server side was sending me a message, where both ident and number was in http://www.testservice.com/test namespace, which contradicts with the schema definition above. This was the reason why deserialization from XML does produce nulls. At least this time Microsoft proofs to support standards better than Apache Foundation :)