Totally sold out on Apple!

A few hours back I got my first iPhone 4 after having bought an Android phone, the Samsung 5510, just a month back. With all certainty I can say that the Android doesn’t come anywhere close to iOS and the applications on it just yet.

Weirdly enough I never got Google Maps running properly without crashing every 15 minutes while I was trying to navigate using Android! And as most would agree, an app crash is a rare occurrence on the iPhone (unless the app is badly written).

I would love to get back to writing applications for the iPhone and the iPad as now I own both 🙂 Anyone got any cool app ideas?

BlogBooster-The most productive way for mobile blogging. BlogBooster is a multi-service blog editor for iPhone, Android, WebOs and your desktop

Why Web Installers are great

Are you one of those who is wondering why all of a sudden every software has a Web Installer (a small executable that downloads rest of the stuff) instead of a traditional setup.exe which used to the sole file you needed to install a software? The reason is, a web installer is a smart tool that assess how many components are already installed, and based on that downloads only the stuff that you actually need. This reduces download size from say 500 MB to just 100 MB if you already have most of the dependencies installed.

(I knew this for a while but recently happened to program one such installer and was admiring the beauty of this simple idea)

Why Dropbox is so cool!

I have Dropbox configured on all the machines that I use, and must say that it comes in extremely handy. The biggest gain I think of using Dropbox is the fact that I feel safe in my head that my critical information lives on a server and is synced on all connected computers. A little while back I had sworn I wouldn’t move away from SkyDrive (by Microsoft) but the way Dropbox works is just so amazing! I wish Microsoft had something similar to that for SkyDrive. Though they have Live Mesh but its nothing as cool as SkyDrive and doesn’t run on older versions of Windows.

Anyone working on a Dropbox style utility for SkyDrive? Shouldn’t be too tough because I do know we have some open source projects which do similar stuff. There is SkyDrive.NET, a set of API libraries for SkyDrive which should make it fairly simple for one such tool to be programmed.

Fax services on Vista home premium

All the Windows Vista Home Premium users by now must have figured out that they don’t have the basic Windows Fax and Scan services. Too bad Microsoft decided to remove something that basic from an already crappy operating system. The only solution is to look for an alternate and I seem to have found a good alternate – Classic Phone Tools by Avanquest Software

You can get the full version for free if you follow the right links on the page. So far it seems to work great for me! Let me know if anyone of you knows other better Windows Fax software.

Wiki Article Reliability Algorithm/Software

Let me start by saying that I am a supporter of Wikipedia, I contribute articles and information wherever I think I have sufficient knowledge. I also contribute annually a certain amount to Wikipedia donations. Having said that, it does hurt me sometimes when people rubbish you if you quote them something from wikipedia or you give them a wikipedia link in an attempt to prove your point. People who don’t know how wikipedia works or have very little surface knowledge seem to disregard it with much ease. I read somewhere about an article that how teachers in most school discredit any wikipedia sources of research. Yes they dislike it because in many cases it contradicts their text books. In reality, Wikipedia is a mighty flattener of the world by providing free access and authoring capability of information to general public. Let me quote an example, have you heard of the famous saying, “History is written by conquerors”? Not anymore. With rising popularity of Wikipedia, every piece of historical article is being subjected to views from all directions. One such example would be the role of “Aryan Invasion Theory” in Indian history. For more than one century we have heard the Aryan Invasion theory and taken it as practical history, of course until now. Without going into the details, you will notice Wikipedia article on the subject seems to stay neutral by presenting both sides of the argument.

Now coming to the original intention of writing this article, I propose to write first an algorithm and then a practical implementation of the algorithm as a web service/site that other applications can use. Yes, everything will be open source and free. The purpose of the algorithm would be to present the reader with a version of the wikipedia page (or for that matter any wiki page) that the algorithm thinks is the most stable/reliable version. How the algorithm will work is a set of steps that I will be detailing next.

  • Access the History page of the article
  • Fetch a list of all the authors
  • Loop through all edits made by non-registered-users i.e. random edits
  • Check if these edits against article lifecycle, i.e. how far in the stable life of the article was the edit made
  • If the edit was made and no registered user edit was made after it, remove it
  • Mark every other random edit as “Candidate for Removal”
  • Fetch a list of newly registered users who have recently modified the page
  • Check if the author has made edits to other pages, if yes, look at the activity interval. If there are rapid edits, the author could be spammer. If the edit made was very recent, mark it as “Recent Edits” and “Candidate for Removal”.
  • Every content line that has a [citation needed] marking, mark them as “candidate for removal”
  • Find trustworth authors, by finding every author that has been editing on wikipedia for quite a long time
  • Promote their edits to “Trustworthy Info”
  • Find any “Candidates for Removal” in the “Trustworthy Info” and let “Trustworthy Info” suppress Candidate for Removals
  • Based on the stringency of user settings, curate the “Candidates for Removal” in the final rendering of the article

This could just turn out to be the quick moderator you need while browsing the excellent and superb Wikipedia! And this doesnt just apply to wikipedia, it also applies to Technical wikis we use at work. There are many people writing and modifying wiki pages. If its a big organization, I bet there are many new joinees and interns who are not necessarily the most trusted people to edit wikis. However, the best use of it is on public wiki sites where trust worthiness of an article becomes a big question for few.

Moved server

You might have noticed that my blog was down for a few weeks. Yes my last host had crashed. Not wanting to rely on them further, I have shifted my website server over to ByetHost. So far I am enjoying their very generous hosting offer. Nothing better for hosting a wordpress blog.

The Mind That Cracked

This has been one of the most interesting stories from the days of hobby programming. Like most of the hacking community, the biggest turn on for writing programs is “Challenge”. Of the many challenges and victories, I specifically remember this as being one of the most interesting.

I had won the software programming contest at a national level tech fest called Aureole held in JEC. I was riding high on confidence and had the feeling that I could do anything with computers and programming. I even started considering myself as one of the best programmers in the area. The only person I thought came close or at par or better was my senior in college, Kunal.

That summer I came across a software program being distributed by a local coaching class professor called MindsReader by MindsArray. Two things made me look at the software that was being used by the professor to distribute notes. Firstly, the software was being touted as uncrackable. Secondly the notes being distributed on it were really good. To get those notes you had to buy the software and individual notes packages. Considering I had never paid for software in my life (till then) and having released all my projects as Open Source, it was unlikely that I was going to pay for this one either. All the motivation needed to crack it was in place.

Let the hacking begin…

I obtained a copy of MindsReader from a friend who had bought it and got it installed on my PC. At first I thought it would be as simple as installing with the same key that my friend got. Didn’t work. It generated me some key and wanted me to take it to the center or go on the web and generate an activation key for it. I had seen many such software to know that cracking this one would require me to decipher the key generation algorithm… in assembly language! I certainly didn’t have time for that but still gave it a try. Got a copy of SoftIce, an executable decompiler and pointed it to the points where I would think the software triggered key generation algorithm. I was sure that the software was using some kind of hardware ID to tie the generated code to the activation code because the activation code that one person got never ran on another machine than the one code was generated for.

Having spent hours trying to figure out which piece of code was actually generating the hardware ID, my head was aching with all the staring at assembly that I had done for nearly 10 hours. My plan was simple, locate the hardware ID generation logic and hard code it with the ID from my friends computer. Yet finding that place in code was the toughest thing I had done in a while!

The Eureka moment!

I started looking at the problem from the perspective of a developer. If I had to generate a unique computer ID how would I do that? Google. Of the many results I got, the one that jumped out at me was a simple DOS executable program that you could embed with your own program by reading off the hardware ID from it’s output. The sun finally decided to shine on me and I found the exact same DOS exe being used by MindsReader in its “bin” folder! The solution was right there in front of me all the while and I had been bothering myself with the uneasy painful path. The uncrackable software was now to be cracked. The solution was simpler than one would think. When I ran the DOS exec, I captured it’s output on my friends machine. I fired up LECIDE (my self developed C++ IDE) and wrote simple cout>> statements to dump the exact same output as the DOS exec. I compiled and linked the code and named the exe same as the original exe for generating hardware IDs and replaced that in the bin folder, prayed to the Holy Spirit of computer programming and fired MindsReader. Re-entered the registration screen and tried again with the activation key I had borrowed from my friend and the program ran! The feeling of looking at the program run was pure bliss… I had accomplished something that very few dared to try. Yes, it wasn’t as tough as cracking some crazy algorithms would be, but so what? I was the first one to have done that in my small sleepy town and that made me proud enough…

Being a supporter of free software I was now going to enable other peers of mine to be able to run the same software. I would allow them to emulate hardware IDs and also give them a UI to adequately set up hardware id/activation key/notes package combinations. The reason this was helpful is because not everyone bought every notes package. So you could ask different people for which notes package they had purchased and easily manage the emulation process for each package. I christened my tool very appropriately, CrackMind 🙂

Just before I was about to release this cracker out in the wild I called Kunal and showed him what I had accomplished. After all, showing off your accomplishments to another able programmer is what drives the Open Source industry. I expected him to get surprised (or at least act) but he shocked me by confessing that he was the developer MindsArray had hired to develop MindsReader. My sense of victory was dampened a bit because now I couldn’t release it out to everyone or that would get Kunal in trouble. So instead I just distributed the tool to my entire group who reaped benefits of being my friends. Ohh yeah I reaped benefits out of them as well and I still do!

Zinio – Magazines right on your iPad

Of all my experiences with the iPad, the best have been surfing web, reading books, and magazines. The Zinio app has totally redefined the way I get my favorite magazines! Imagine not having to wait weeks to get your PCWorld magazine delivered to your home. Having all your favorite magazines available with you and readable with almost the same or more convenience as the print media has been a dream so far – at least for me. My laptop can’t go everywhere with me but the iPad surely can. My laptop needs a wall socket after 2 hours of use so its not the best for use on airplanes, trains and airports. Its too bulky to handle as well. All of these are not a problem for the iPad.

With Zinio, I got virtually a news stand on my iPad! I can browse and purchase from a HUGE selection of magazines, not just the ones you would otherwise find on stalls. Even the prices appeared relatively cheaper than print media prices. Tell me what kind of Magazine applications are you using? Would love to know!

Hobby Open Source Projects

As I have written on several occasions about me, I love programming. You can find the software I have written on this blog. Just made a link to a program called CopyFat with its installer and source code. I will mention here the projects I have done in the past and will eventually post them with Source Code and Installers.

  • LECIDE – Learners/Experts Configurable Integrated Development Environment
    • With LECIDE I intended to make something like Eclipse IDE much before it showed up. Obviously my effort was much juvenile and to be honest, I started by creating a Notepad clone in VB6 and ended up creating a very complex IDE with syntax coloring, instant help tooltips, multiple compiler support, and BLADE – a drag and drop GUI designer for creating C++ dialog resources. Unfortunately, the way the code was written was horrible. If I wanted to do something new with it today, I would rather jump off a building than taking a dive back into its code. However the project was pretty extensive for the time it was built in and can be used to learn a lot. Download the executables and installer here. Download the source code here. Kindly run it in Windows 7 compatibility mode, because certain components don’t work on Vista/Win7.
  • CopyFat 2.0 – File copy program
    • You can read more about it here. It was one of the most useful utilities I ever wrote. It helped me and my friends on several occassions!
  • CyberBrowser – Tabbed IE based browser
    • A pretty simple browser with Tabbed browsing capability back in the days when IE was still a single window browser. A good reference for those wanting to learn how to use the WebBrowser control in VB6. Download the source code here.
  • Winsock Based FTP client
    • While learning socket programming, I implemented my own FTP client. The important thing to note is, I didn’t use any third party components to derive FTP functionalities. The code actually talks to the FTP server by opening ports and opening parallel channels for file downloads etc. Great stuff if you are learning socket programming in VB6! Get the source code right here.