Sunday, September 26, 2010

Hone your algorithmic and programming skills

Efficient and clever programming is one quality which every to-be IT professional should possess. Most people misunderstand programming as 'knowing full syntax and semantics set of your favourite programming language(s)'. Programming languages are mere tools to implement your algorithms. The real power lies in devising the algorithm to solve real world problems and this ability needs a solid foundation of mathematics and aptitude. Converting your algorithm into a program in any programming language is the last step.
Most students who learn how to find factorial, fibonacci sequence, palindrome etc. start thinking themselves as great programmers. If you are such a student, you are on a wrong track. I was also one among the same, when I was in 2nd Semester of B.Tech, way back in 2007. Until and unless you train yourself to program for real world problem situations, your programming capabilities are for nothing.
If you want to bear that special quality, then you should hone your programming skills. Just like everything we have on internet, there is a service dedicated to this thing too, on the internet. It is called SPOJ that stands for SPhere Online Judge. The address is http://spoj.pl . Register there. Once you login, you can click "Problems" in the left pane to see a list of programming problems. Click anyone in the list. Read the problem and try to solve. If you are a first timer, pay attention to their input and output constraints and example. Since your program will be evaluated by a computer, not a human being, you need to accept inputs and present output in the way defined in the problem. You can see the example input and output set t understand the issue. Once you solve and test on your computer, you should upload and check whether it gets accepted. Most beginners have problems following the input and output constraints. Once you get used to, SPOJ is very addictive if you are a guy serious about sharpening your skills.
The problems are generally tough mathematical issues. You need to think with open and calm mind to arrive at a solution. If you are a B.E./B.Tech CS/IT guy I would really like to encourage you to continue this as a hobby through out the course. At the end you will be an outstanding guy in your group.
And, if you wish to earn some cash then go to http://codechef.com and participate in their competitions. There are cash prizes for the winners.

Friday, September 17, 2010

Solution to Android's Ad-Hoc WiFi issue

I own a Sony Ericsson XPERIA X10 Mini(Also known as E10i). It runs Android OS 1.6 Donut. Android doesn't let you connect your phone to an ad-hoc(i.e. computer to computer) WiFi network for browsing internet. Only infrastructure networks are supported. So, if you have a wired internet connection in your laptop or desktop PC, you can't share that to your Android phone through WiFi. You need to purchase a WiFi router/access point to do so. But now, you can do that at absolutely no cost!!! Without purchasing any hardware!!!! Read on...

Today I came across a freeware application for Windows 7, that turns your Windows 7 computer into a WiFi Access Point!!!! It emulates a WiFi router through Software!!!! And my problem is solved!!!! Now I can share my laptop's wired internet connection to my Android phone. Here is a 2-step guide to setting up everything.

Step 1
Download the application Connectify from here and install it. It will prompt you to install a driver, twice. Press Ok, for each prompt.

Step 2
After the installation, you'll see an icon in the system tray which looks like . Click the icon. You'll see a pop up dialog as shown below.
Turn on your laptop's WiFi card if your laptop has a dedicated button to turn it on. Then fill the WiFi Name as anything you like. I filled it MAX. Check the box that says Share Internet. Then in the Mode drop down list, select Access Point, WPA2-PSK. Oh wait!!! Do you see only Ad-hoc open and Ad-hoc WEP? If you see Access Point, WPA2-PSK or you don't see a drop down list at all, means you're lucky. Just click Start Hotspot button, and you're done! For those who aren't lucky, just like me, read on...
What happened to me was that I didn't see the Access Point mode. I thought, my WiFi card doesn't support Access Point mode. I went to the supported card's list at http://connectify.me/docs/supportedcards.html and I could see my card Intel 5100/5300, WiFi Link 1000 BGN listed there. "Then what's the catch?", thought the frustrated me! I noted that the driver version supported was 13.0.0.107. I checked my card's driver version in Device Manager and saw that it was 11.x.x.x. I went to my laptop's manufacturer support site and saw that the latest WiFi driver for my machine was available and it was 13.0.0.107. I also noticed that all other components(like Chipset, Audio, Graphics, Ethernet card etc...) had updated drivers for them. I Downed 'em all and installed.(What's the morale??? Always keep your drivers updated.)
After the re-boot, I could see a Virtual WiFi MiniPort adaptor installed in Network Connections with the name Wireless Network Connection 2.


Then I launched connectify, I didn't see any drop down list in the mode box(screenshot. below). I entered a 8-character WPA2 key and clicked the Start Hotspot button.


It took a while(about 15-20 seconds) to configure and my WiFi hotspot was up and running! My Connectify popup was now with the Status: Running MAX, Mode: Access Point WPA2-PSK. I was a happy man! I turned on my phone's WiFi and connected my phone to MAX easily. I saw my phone's MAC and IP addresses in the Connected Clients list. Even a Sony Ericsson logo was shown there!!!
Using DHCP my phone was assigned the IP address 192.168.2.10. The computer's Software based WiFi router was assigned the IP address as 192.168.2.1. In the system tray, the red mark from Connectify icon was now removed and it was like this


Troubleshooting
Everything was up and runing, still I couldn't browse the web. In he phone, I checked the gateway address and it was fine i.e. 192.168.2.1, that I had already cnfigured in WiFi static.
I went to Network Connections, in my laptop. That can be reached through Network and Sharing Center > Change Adaptor Settings. I right clicked my wired ethernet icon and clicked properties. In the sharing tab Wireless Network Connection was listed as the Home Netowrking Connection. I understood that it must be set to Wireless Network Connection 2 which was the name of the connection that WiFi Miniport Adaptor had. I unchecked the box that said Allow other network users to connect through..... then clicked Ok, and closed the properties window. Then again right clicked my wired internet connection icon, clicked properties and in the Sharing tab checked the box Allow other.... In the Home Networking dropdown I selected Wireless Networking Cnnection 2 and clicked Ok and closed the properties window.

I restarted the hotspot and my phone got connected and I could successfully browse the web on my phone!!!
One of the major issues with the phone that I had pointed in one of my previous posts i.e. http://p97.blogspot.com/2010/08/sony-ericsson-xperia-x10-mini.html , has been solved!!! Go Android go!!!

Thursday, September 2, 2010

Friday, August 27, 2010

Download Managers on LINUX

My college provides me an awesome fast internet. Actually it is a 1Gbps link which is shared among all the users in the institute. Using download managers(like FDM) I easily achive speeds within 2MB/s to 3.5MB/s on Windows. But on Linux I was never be able to cross 1200KB/s. That was because most DMs don't support fragmented downloading. Then I went on to review all the download managers on Linux and find one best among them all.

1. MultiGet
MultiGet has issues with the proxy implementation in my college. I tried hard but it didn't let me download anything so it was out.


2. KGet
It gets across my institute's proxy server but doesn't do fragmented downloading.

3. GWget
It is essentially a graphical front end to wget, which too doesn't support fragmented downloads.
4. FatRat
It is a featureful download manager for Linux. It supports BitTorrents and rapidshare downloads but I couldn't find no. of fragments in configuration. So, I've to look elsewhere.
5. Downloader 4 X
It supports fragmented downloads! And I easily crossed the 2MB/s mark!!!! That was where I stopped. To achieve this, I went to Options>General and there in the left pane chose Limits. There I could adjust the number of parts to split the file. I set the value to 10 and started enjoying the speed.
6. Aria2c
Happy with D4X, I thought I should stop my hunt. But then I thought I should try the well known Aria downloader. It is a command line based download manager and very popular. I tried that and it supports fragmented downloads.
The following command made me download Fedora 13 into 12 segments. Note that the command line parameter -s is used to specify the number of segments for the download and the parameter --http-proxy allows me to cross my college's proxy cum firewall. xxxxx is the proxy password and ise2010012 is the username.

aria2c -s 12 --http-proxy=http://ise2010012:xxxxx@172.31.1.3:8080/ http://mirror.facebook.net/fedora/linux/releases/13/Live/i686/Fedora-13-i686-Live.iso

If you love command line, this is for you. I do love it!
Please note that any of these download managers can be easily downloaded using your Linux distribution's built-in package manager by searching the name.