Friday, December 28, 2007
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
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
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
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
- 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.
Friday, November 9, 2007
Saturday, October 20, 2007
As for the main issue, LFS is really not what I thought it was. The build is straight forward, and much less complicated than I thought it would be. Of course I didn't succeed the first time, and I got into trouble related to building gettext which uses the curses libraries. Never mind, the second build would be better...
Tuesday, October 9, 2007
Today I lost a dear friend, a colleague, a past team-mate and a source of inspiration. Dima Osherov was all of that, and then some. Unfortunately, we still do not know what awful disease causes the death of a 24 year old man.
Dima was a brilliant DBA and a sys admin, and nothing I can write would cover all of his talents and skills. I guess you had to know him.
So why a blog post as a memorial? Few months ago we decided it would be best if we start a shared-blog about Oracle, technologies and other common interests. As it seems, this blog will never be created, so I think a post about Dima would put his name in the blogsphere, and fulfill a dream.
יהי זכרו ברוך.
Monday, October 8, 2007
- X stability. Enterprise releases still use X11R6 of some version. It's not nice when X goes down along with everything you had open.
- Awful user interfaces. Oracle is not the only one that lacks a decent GUI. I recently seen the latest version of Rational ClearCase for Linux. The motif interface looks like it's still 1992. Serious developers that use ClearCase demands much better interface.
- Non uniform configuration. It is used to think that all configuration is stored in the same manner under /etc and in private '.' files. Not all vendors seem to follow the convention, a thing that makes control of multiple machines, not an easy task.
- No standard package management. Some vendors supply their product in a specific package format (such as RPM). These packages are not suitable for use on different distributions, and sometimes are not usable on distributions that support the same format (eg. Mandriva and Fedora). Eventually, almost every product requires gcc/g++ to be installed, and a Makefile to be run.
- Slower adaptation of newer technologies. This is quite understandable but still annoying. Since enterprise distribution are supposed to work for a longer time without being upgraded or patched, they sometime use obsolete kernel or some other components.
Thursday, October 4, 2007
As for another surprise. I just finished teaching my mom how to use Google and using the browsers Favorites/Bookmarks. Not an easy task, but very satisfying.
Monday, October 1, 2007
But something is missing. Lately I feel I'm looking for something in my OS which I'm not sure what it is. Before installing Ubuntu, I was a proud (and a target for colleagues laughter) Slackware user. I used Slackware about 4 years, and I switched because I wanted my computer to work for me, and not the opposite. Now it struck me, and I know what's missing. I want to be in control over my system, I want to compile my applications and solve technical issues that arise when they don't compile. I want to change applications to fit my taste.
But then again, I don't want to be the slave of my computer. I want to have the flexibility when I need it, and to stay stupid the rest of the time. I want my computer to be both stable and my testing environment. I want it to be both fast but without any modifications on my behalf.
Maybe it's time for a different distro. Maybe it's time to start using Ubuntu's test releases.
Oh, one more thing. I already tried to run multiple distros using virtual machines - it's just not that.
I think I'll stick with Ubuntu at least 'till gutsy arrives, and then I'll decide.
Saturday, September 15, 2007
Lately I've been watching the talk about Quicksilver, which is, in short, a sophisticated command line interface to many common computer tasks. I really wanted to have such interface for my own computer, but I couldn't, since I use Linux, and Quicksilver is a Mac-only product. So, after a short search, I found some alternatives, and decided to give Gnome Launch Box a try. After using it for less than an hour, I decided that this is a great piece of software, and that I should help in development. So I checked-out the source code using subversion, and started browsing it. The source is C code, which I hadn't programmed since the second year of my B.Sc, which was about 7 years ago. Even though I thought I was quite good at C, my brain wouldn't want to watch the horrible look of C and Gtk+ source code, so I decided to leave it to those who wouldn't care hacking in C.
After some reading and googling, I found a fork of Gnome Launch Box, called Gnome Do, which is actually a port of the source code to C#. Now we are talking. Finally I can start coding and contribute to the community that created such a wonderful product. But then again, reading the source files made me think that most of it is about GUI, and very little is about the "brain". I hate GUI programming. I think that's because I was never good at it. So instead of giving it a try, I left it, promising to myself that maybe sometime soon I will get back to it, overcoming my "hatred" of GUI programming, and contribute back to the product that I think that really deserves it.
What do you think? Am I weird? Is it wrong that one would prefer a specific kind of programming? Does experiencing in different types of programming makes you a better one?
Tuesday, September 4, 2007
After doing so, I was quite pleased of my "newly" acquired knowledge of VB, so I guess I might mention in a job interview that I still know a language I think I never really knew. This is only because I know other languages, and what's the difference?
Saturday, September 1, 2007
As for the title of this post, I never really understood why is there a comma and an exclamation mark in the phrase "hello world". Anyhow, like in every programming language, the first thing written is "Hello, world!", so I decided it would be nice to label my first post accordingly.
Now I have to think about what should I write in this blog. I guess it'll be something related with
computer technologies and some real life issues. Well... time will tell.