Extend the Firefox into a Superfox

Ever since Firefox started making waves, one of the major questions peopled asked and continue ask are “What makes Firefox so popular?”. Many people have many answers. Personally I think one of Firefox’s strengths is the community behind it. Many people who use the browser everyday contribute various add-ons and improvements, thereby making it a prime example of open source at work. The community doesn’t contribute just by adding source code to the final release, but more importantly by contributing small tools called Extensions which extend Firefox beyond just a simple web browser.

A few months ago the Mozilla Foundation announced the winners of the Extend Firefox contest, i.e. the best Firefox extensions available on the web. If you use Firefox, and you should be, then this is one things that you should probably check out. Now Firefox extensions are one of Firefox’s major features and the main reason why non-open source browser like Internet Explorer or even Opera will have a hard time winning over Firefox users. Extensions add extra functionality to the Firefox. With the right combination of Extensions it is possible to make Firefox into something much more than just a simple browser.
In the old days before Firefox, when Internet Explorer was unquestionably the King of the Hill, one of the premier open source browsers was Mozilla. But Mozilla was much more than just a browser. It had an integrated email client, an HTML editor and an IRC chat client all wrapped together. In fact, it was not unlike the old Netscape suite. Of course now, the Mozilla suite has been officially shelved and its parts have been divided up. The browser became Firefox, the mail client became Thunderbird and the HTML editor is now Nvu (all these after numerous changes and improvements though). For most people having these applications separated makes sense. After all less people use email clients than they do browsers and even fewer use an HTML editor. But what if you do want to combine your internet activities into one program? Going back to the old Mozilla is not recommended, especially since there is a far better option: use Extensions.
The following posts will show you how to use the correct extensions, and a few online services to turn simple Firefox into a powerful internet utility: A Superfox! Stay tuned folks.

Tags: Firefox, Opera

Why India’s IT success depresses me

 India is the world’s next IT superpower. Bangalore == Silicon Valley. India’s computer engineers are the best in the world, etc. etc. And yes, it depresses me. The reason goes something like this: Our so-called success in the IT world has left most Indians with a very skewed perspective of what computer technology really is all about and what the computer industry really means. Despite the fact that ther are so many IT professionals coming from and working in this country, it has done little to benefit our society. But wait a minute, doesn’t the IT industry bring in millions of dollars of foreign revenue each year? Yes, it does. Isn’t that a good thing? Yes, it is. So why are you saying it hasn’t helped our economy? That’s not what I’m saying at all. The economy might be booming, but there’s more to a nation and national pride than the economy. Go back a few lines and read what I said: it doesn’t benefit our society.
    The IT industry has done little to benefit our society because for the last few years, it has been developing in an economically viable, but socially demoralising way. The reason is outsourcing. Yes this an outsourcing rant, not anti-, just a rant. And it’s from the perspective of those who are supposed to be benefiting from the whole thing. IT sourcing has not benefitted the society because the proliferation of the IT industry has not been geared towards the best interests of our nation or our people. Instead of building software that common people around the world, or even in our own country use everyday, the industry has been and is building software especially for American and European companies. The result is that though we know that our IT industry is a multi-billion dollar affair, most Indians, even those that use computers at home or work everyday, have little idea as to what they actually do that’s raking in the dollars. A small example, everyone aroud the world knows that Microsoft makes Windows, Apple makes Macs, Sun Microsystems makes Java, Google does search engines. But how many Indians know what Infosys makes? I don’t.
    Instead of building software for ourselves and our people, we’re making software for others and becoming dependant on what they want us to do and what tools they want us to use. The IT boom in our country has served to help only the ones who make money out of selling their services, and the Government who collects the taxes. The common Indian benefits in no way whatsoever, not even an increased sense of national pride, because India is the world’s back office. The Americans started the whole computer thing decades ago and it has helped them no end. Not only are American companies like Google and Microsoft household names, but Americans like Alan Turing and Steve Jobs are respected by computer scientists the world over. Money is one thing, respect and recognition is quite another. The US and Europe managed to get where they are because the top computer scientists either do research at national universities or do R&D at companies that are leading the industry in terms of innovation. But the best Indian students graduating from the IITs are encouraged to get a job or an MBA and spend the rest of their life taking orders from other people (or giving orders to people to do things that they don’t really want to). Instead of leading the world in terms of innovation, our computer engineers are being compared to Chinese sweat shop workers, producing cheap goods. This whole orientation towards doing what will get us money from the outside is harming our own nation. There is very little software in Indian languages and what there is, is below acceptable standards. We do not even have keyboards in most native languages, or even standardized character sets for the common languages of our country. That is something that the Chinese and Japanese do have. The whole effect is that though our people may know better English, our own languages and with them our sense of being Indian gets devalued day by day. So much for national pride.
    Now to outsourcing proper. Once again outsourcing helps our economy, but hits our society. Call-centre workers have nearly non-existent social lives and more importantly, outsourcing draws our talented workers from where they’re needed most: writing software to help our own people. If all the programming and design talent could be diverted to writing software for the common Indian user, it would not be too unreasonable to create a independent operating system, available in all major Indian languages, with Indian language equivalents of office software, email programs and browsers. We would no longer have to pay a ransom to Microsoft or resort to pirated software. We could also create specialised data standards to better exchange Indian langauge information and in the end, combine with Chinese hardware to build PCs that even the lower middle class citizen can afford. Of course this will never happen. The government would have to spend insanely high amounts to lure away the needed talent from the IT industry (IT workers may be paid a pittance compared to Western counterparts, but it’s still more than most Indians) and build the data infrastructure and would have to work with minimal investment returns for a number of years. Why would the government spend so much money when they can earn lots more by encouraging outsourcing? The Indian outsourcing boom might be dentrimental to our society, but doing away with it would be economic suicide. Once again Indians in general lose, just as they have been losing out through the centuries. One tends to get the feeling that Indians are happiest when they’re doing what others tell them to do.

How I learn to program: The tools of the trade

This is a continuation of the last post. I’m going into what are the actual tools you need to start on the way to becoming a programmer, where you can get them and how to put them to use.A Brief Introduction
Before I start on what tools to actually use, let me give you some background on computer languages and programming. If you already know all about that, move on. The basics are pretty simple: The only thing that computers really understand is a string of 1’s and 0’s, that is, on and offs for the processors many transistors. However writing instructions in this binary language is enough to drive anyone mad after some time. Over the fifty years or so that computers have been around, many alternatives have been developed to allow people to program by using a language closer to everyday English. This process started off with assembly language, hexadecimal codes and continues upto today’s languages of C++, Java, Python etc. But all the same computers still understand only binary. So you need something that will take your close-to-English program and turn it into computerese binary. This task is done either by a compiler or an interpreter.
Now, both a compiler and an interpreter do essentially the same task of translating your program to binary. But they do it in slightly different ways. A compiler ploughs through the whole program, checks for grammatical (syntax) errors and then spits out a binary equivalent. You can then run this binary equivalent whenever you like. Though this method generates fast and efficient binary code, the problem is that if you’ve made a non-grammatical error (like told the program to say “no” when it should have said “yes”), you have to wait for the whole thing to compile before finding out what the error was, and once you’ve fixed it, you have to compile it again. As you can well imagine, this process can be time consuming.
Interpreters sidestep this whole program altogether. An interpreter reads a line of program code at a time, translates it to binary, and executes it then and there. The good news is that this makes error checking a lot faster. But on the down side, program execution can be somewhat slower as the interpreter does a lot more work than just execution. There is also the added hassle of needing an interpreter installed anywhere that you want to run the program.
However, some languages, most notably Java, use a combination of the two. First your source is compiled into an intermediate language called a bytecode. At this stage you get to correct your grammatical errors. This bytecode is then interpreted into binary and executed by a Virtual Machine. The advantage this has over normal interpreted code is that you don’t have to move around the source code, only the bytecodes, and you just need a virtual machine instead of a full-fledged interpreter.

The Tools
    Now that you know all the theory about computer languages, time for some practical work. So what do you need to get started programming? Firstly a computer; secondly, an operating system. You probably use Windows, but Linux is much better for programming. If you’re reading this you probably have both. Then to really start programming, you need just two things: a text editor and a compiler/interpreter for your language. A text editor is where you type in your program. After you’ve finished typing, save the file with the appropriate main and extension and then hand it over to you compiler.
Compilers can generally be run from the command line. Each compiler has to be called in a slightly different way, but in general you just have to type in the name of the compiler followed by your program’s file name. That’s all. For C++, you can’t go wrong with the open source GCC compiler. It’s been around for years and has proven its worth many times over. If you feel like a cup of Java, it’s probably best to go in for Sun’s own free SDK. There is an open source Java compiler called the GCJ, but it’s still quite new and you might want to wait a while before starting on it. However if you’re new to programming, I do recommend starting off with Python. You can get all the things you need from Python.org. If you’re on Linux, the C++ compiler and Python interpreter will probably be preinstalled. If you’re on Windows, you’ll have to download and install them separately.
It’s another story for text editors though. Text editors are a dime a dozen. Some are very basic, some are very advanced. It’s up to you to find the one with the features to match your preferences. If you’re on Windows, you might want to try out the ConText editor. It’s simple, easy to use and highly customizable (and my first real editor). On Linux Kate and Gedit are extremely good. Of course, if you want to feel a bit more sophisticated, you might want to check out Vim or Emacs. Don’t let them scare you though.
Of course, the whole command line thing might get very tiring after a little while. Though it is the best way to start off and many will argue that it’s all that you’ll ever need for the job (which is true), it can be more aesthetic to use an IDE to automate some things. But be warned: Most IDE’s are incredibly complex and feature packed gadgets. Like any tool, their use has to be learned carefully and they can be quite intimidating to people who don’t know what they’re doing. You probably shouldn’t go near them until you get around to writing reasonably big programs. That being said, there are some IDE’s which even relatively new programmers can use without getting overwhelmed. For C++ on Windows, Bloodshed Dev is very clean and streamlined and is forgiving for new users. On Linux you could take Anjuta for a spin. KDevelop is also a big favourite, but you won’t be using most of it’s features unless you’re writing big, multiple source file projects. There are a number of Python IDE’s available on both Windows and Linux. The IDE that Python comes with is IDLE, and it is very clean. Just type your code and press a button to run it. Simple. Once you get bored with that, you could try out others like Eric3 or SPE. I personally use SPE because I find Eric3 too cluttered. For Java, Eclipse is a really great IDE, but it’s a memory hog and if you don’t have the resources, you’ll soon be screaming “Give me back my RAM and clock-cycles”. I personally find BlueJ very nice. It was my first IDE ever and I think that it achieves its purpose of letting you “learn the language without learning the IDE”.

That should give you enough information to get out there and do some coding. The reason that I’ve focussed on C++, Java and Python is that most people that I know started programming on C++ or Java and that Python really is a very good starter’s language. It’s simple to use, easy to run, unlike C++ and Java there are few set rules which allow you to proceed at your own pace and develop your style of programming. Have fun coding and remember that most of the tools I’ve listed are Open Source and all are free. So once you do become a master coder, please give back to the community that helped you on your way.

Tags: , , C++, Java

How I learn to program

Yesterday my friend Rohit asked me (in a comment) how I learn to program, or as he put it, “experiment with languages”. So I’ve decided to pull out my bag tricks and blog about how I learn to program.
There are lots of ways you can learn to program. Attend classes, ask friends, use the Internet, get a book etc. etc. For me, I took on a sort of challenge to learn how to program, without spending any money. So that means paying for classes and books is out of the question. So what do I do?
The first resource I reach for, is quite obviusly, the Internet. The Internet is the greatest repository of human knowledge ever accumulated. So use it. Generally, there should be a .org or a .com site for your language of choice. If there isn’t just Google for it. That itself should turn up enough resources to keep you busy for a week. In case you just want a quick overview of a language, just head over to Wikipedia and look it up. That’ll give you a rough feel of the language and will help you decide if you want to continue or look for another language.
Of course it is very easy to get overwhelmed by the amount of information the net provides you with. A lot of the information you find through Google will probably just confuse you. But there’s a little set of thumb rules that you can use to find the proper resources. Firstly, look for information and tutorials that are put up by people who are actually involved in developing the language. An excellent example would be the Python Tutorial by Python creator Guido van Rossum. Second, don’t look at tutorials that aren’t structured properly. If the document is in a very clumsy and inconsistent format, it will just confuse you. And absolutely avoid tutorials that stress on using a particular IDE, rather than the language itself. You should only worry about IDEs when you know the language very well. Third, a good tutorial or guide should provide a large number of examples and should explain them properly. One of the best ways to learn to program is to read though actual programs. Finally hang around forums, mail lists and the like. Not only are these good places to ask questions, you’ll learn a lot passively, by reading other people’s problems and solutions.
It’s certainly possible to learn programming, at least in popular languages, off the net alone. But in my opinion, if you are really interested in learning a language and are ready to spend some money, go get a good book. For a good book, it’s probably best to ask someone who teaches or uses the language you’re interested in. Still, O’reilly books are generally very good and comprehensive. Once again, try to get books written by people acting involved in the development and use of the language.
Books by Wrox are also quite good. I have read some books, mainly for C++ and Perl, and no, I didn’t buy them, I get them out of a library.
And most, importantly, write programs! You can’t expect to program properly if you don’t have practice. Ask anyone who has programming experience and you’ll learn that every once in a while you write some code which doesn’t do what you think it should do. The only way you’re going to reduce the number of times that happens is to actually write code and make yourself familiar with the language.
Finally, make friends with programmers. Friends are the best resource you can get. Not only will they help you when you get stuck, looking at their code will help you improve your own. Of course you have to find the right crowd, but that shouldn’t be too hard. And when you think that you’re capable of writing a mean piece of code, trying joining an open source project or starting your own. Once again, don’t bite off more than you can chew. Start off small, but do your work well.
After reading all that, if you still feel like learning how to code, go read How to Become a Hacker.

Tags: ,

Now using RSS feeds and Tags

    I’ve addded a new feed for the blog on the top right. The big orange button gives the actual feed itself while clicking on the other buttons will add the feed to the respective newsreader. If your favourite newsreader isn’t on the list, please leave a comment and I will try to add it. If you had subscribed to the old feed please change it to this one.
    Secondly I’ve decided to us Technorati tags in my blog posts instead of cluttering up the sidebar with an umpteen number of categories. I’m using the very elegant Performancing blogging client for Firefox. If you’re a regular blogger and use Firefox, I recommend that you try it out. I intend to post a full review of the client so stay tuned.

Technorati Tags: , ,