Wednesday, January 23, 2008

Hebrew 2.0

Many programmers, administrators, and even users, are wasting a considerable amount of time dealing with issues regarding localization of software. When it comes to Hebrew, this amount of time, doubles itself. For start, Hebrew’s direction (Right-To-Left) is something many software vendors forget in their first versions of a product (take blogger for example), so Hebrew is aligned in the wrong direction. And even when this issue is solved, still there are many quirks. Such quirks can be when mixing Hebrew with English (or other Left-To-Right languages) or mixing with numbers and parenthesis. Other issues involve saving files in the correct code-page, or displaying data in the correct code-page (how many times have you changed the browser’s encoding on misbehaving sites). Sometimes, file formats (such as text) might not include magic headers about the encoding, thus making the client software guess how data should be displayed. Moreover, since there are multiple ways to represent Hebrew (8859-8, 8859-8i, 1255, using UTF-8 etc.), it leads to some conflicts and bad implementations.
My suggestion is a new way to represent Hebrew, at least in the computer software world. It involves a new language, written Left-To-Right, using western characters, or some other characters that are already included in UTF-8 (could possibly be Hebrew characters, though that would be very confusing). I also have a name for this language: Simplified Hebrew. This is the place to mention: I’m not looking to replace the holy-language, I like Hebrew. The words would be the same words, with the same meaning, and the same sound. Only the written language would look differently. Think about it, how many issues could be solved. Adapting software for Hebrew speakers would be like adapting American (US) software, to British (UK). As simple as it gets. Plus, Hebrew speakers won’t have to compromise on their language when they are using computers, since software would be in Hebrew – Simplified Hebrew!

Friday, January 18, 2008

Big Oops

Sometimes, us system administrators, are blamed for loss of information. Such loss could render a system unusable, or just lack of information that is required to be restored from a backup. Recently, my team an I were blamed for at least two coincidences like that. In one of which, the user was the one to delete the information, and in the second, we still don't know what went wrong, but we're sure we had nothing to do with that. On both cases, we restored everything back to normal, at the price of few work days.
Such mistakes merely justifies the fact that users put their blame on us, since these sysadmins really are stupid. It's a shame they bring a bad name for all of us.

Friday, December 28, 2007

Interviews

I have great faith in people. I believe that everyone deserves a chance to prove themselves. But if one fails... that's a different story.
In the past week I've been interviewing computer scientists for various jobs. Usually, I'm looking for those top 20%. It doesn't matter it they excel in programming, algorithmic thinking or other technical topics, only that they excel at something. I don't mind spending time at teaching the material required to successfully fulfill a certain job, only that the person would be one that I'd know I'm not completely wasting my time on. Some of the best computer scientists I know, haven't touched a computer until they started their degree (or even later), the others are programming since they were 10-years-old, and speak Java better than Hebrew. So there is no formula to find the best people for the job. This is why interviews aren't simple, for both sides. It is very important to ask technical questions from different fields of computer science, and also to test the way one is thinking. So the interview might be long, stressing, dynamic and tiresome. But those who made good impression would usually know that, since they'll have this good feeling inside them after leaving the interview. I'm not a bad person, but there are some people who made me (yes, they made me) ask them "So, why did you learn computer science?", in the end of the interview (such question at the beginning is legitimate and makes sense). Think about that.

Saturday, December 22, 2007

Reverse engineering

Every now and then I find myself reading source code of some of the commercial products we use at my office. I won't specify the products' names, but I will mention some of the biggest vendors are in the list. When it comes to open source software, there is nothing wrong with what I'm doing: I'm having a problem, Google doesn't help much, after some time I decide it'll be best to see how the problematic piece of software is written and after some more time, the issue is solved (and a patch suggestion is submitted). But, when it comes to commercial products, the process involves and extra stage: reverse engineering. Also, almost never a code-fix suggestion is sent to the vendor.
So, what do we reverse engineer at our office? Things that don't require much to "reverse", such as Perl and JSP (yes, vendors do supply these) and things that require decompiling, such as Java classes (usually packed inside archives of some sort). Most major software companies use these technologies, so after reverse engineering one's code, it's not difficult to do this for another. The problem begins when trying to understand how the code works, and where is the culprit. No matter if it's Java of Perl, such code is usually unreadable. Usually, few hours or so are required to make progress.
Here are some examples for reasons for what we do:
* Product installation fails with no obvious reason. This is where the vendor blames our environment, and we have to prove it the problems lies at their code.
* Some product's features are failing. See above.
* The product is badly documented, if documented at all. The only way to understand the way it expects inputs or using resources, is by finding the right place in the code.
* Some programming framework (which are usually open source, such as Struts), is misbehaving, or deeper understanding is required.
One final word about this topic: Every professional developer and a system administrator should be able to do such tricks. Otherwise, one will have to rely on answers found in Google, or worse, patches from the vendors, both of which might come too little and too late.

Monday, December 17, 2007

Legacy Horror

Were you ever ordered to debug an application written ages ago? Did the original programmer was still around? Did the users contributed any valuable info besides "it's not our fault" or "the other guy knew how to solve this"? Did you think that the people who wrote software in technologies which are now obsolete, are idiots or incompetent programmers (no offense)?
Well, since I'm writing these questions, you can guess what would be my answers. This week I got to work on an issue, in an application written before the turn of the century, for people who still thinks (!) they should solve every problem with VB and Oracle Forms. Of course the issue was critical, and the blame was on us - the IT and IS departments. After three days of hard working, and the complete waste of time of about 5 software developers, the issue was solved. And still, after solving the problem, we still don't know what caused it. Code just disappeared from the application. We consider it "voodoo", and blame ourselves that we gave the users complete control over the application, so they could destroy it by accident (they'll never admit that, and we cannot prove that).
Some would say I'm too harsh, or mistaken. These things happen, and they might be our complete fault. But I believe our only mistake was to let users continue to work on such legacy application.
What is the life span of software developed in-house? 7 years? 10 years? And what are the costs of prolonging legacy applications' life? which is better: to rewrite using modern methodologies, or to patch the software until computer architecture changes so dramatically, so the software simply wouldn't work?
I wish I had school answers. Now I remember why I hate in-house software development so much. Nothing good comes out of it. And when problems arise, it happens so many years after the software was written, that nobody knows how to solve them. So, the software costs money (and resources) when written, when fixed, when rewritten, and all over again.

Friday, December 14, 2007

More than a cell phone

Recently I purchased a Nokia E65. This is my first smartphone. For sometime I knew I wanted a device that combines my cell phone (used to have a cell phone of every Israeli cellular telcom. at the same time), my MP3 player (had a Sandisk Sansa E140 which broke last week), a simple camera (to catch everyday events), a GPS (lost without it) and some gaming and office on-the-go (like a pocket PC). It's impressive to see how far mobile technology has advanced, since I can get all of the above (after buying a GPS antenna) in a single lightweight device.
After a day or two of using my new super-smart-phone, I decided to look for some extra software. This is where the story really gets better. There are thousands of applications written for S60 (the platform on which SymbianOS runs). Many of them are freeware/open source software. Simple googling finds everything, from games, such as Frozen Bubble, to applications, such as MySQL and a Python interperter. So i rushed and downloaded it all. Now my device is bloated with software I don't need, and applications I'll never use. But I'm happy.
A week after, I downloaded the SDK from Forum Nokia. It amused me to see they have a platform called MOSH (MObile and SHaring. which is also my nickname). Anyway, using the SDK, I can develop and sign application on my own, using one of my favorite programming languages - Java. Of course I plan to release these applications to the wild, with their source code. I just hope there are enough programmers out there, who are interested in helping developing software for S60.

Tuesday, November 27, 2007

Personal favorites

Recently I found out about Coding Horror. Since I enjoy reading it very much, I gathered some of my personal favorites, with some comments:

  • The Two Types of Programmers - What did you do to make the programmers (and other computer-related folks) you know, closer to the 20%? I know I'm always trying to show everyone why it would be good for them to become experts, and to put the extra effort. Is it working? sometimes yes and sometimes no.
  • Pair Programming vs. Code Reviews - We have very little in-house development compared to the amounts talked about in this post, but still, we use (unknowingly) a mixed method - some peer review (pair programming) and some code review. The peer review is much more enjoyable and educational, though sometimes more time-consuming.
  • Don't Forget To Lock Your Computer - At our office we do this all the time. Sometimes humiliating the person forgetting to lock the computer. However, I was surprised to see that the tricks remain the same.
  • Hardware Assisted Brute Force Attacks: Still For Dummies - I knew this would come one day. And still, I like the idea very much.

I recommend taking a spare hour and read those posts. All very interesting. Better, I recommend subscribing to the Coding Horror, as there is much more to read.