I analyzed 1,400 Tamil songs to track how film music has evolved. I found that songs grow about 14 seconds longer each decade and used MediaMonkey scripting to rank my favorite directors like G Ramanathan and Ilayaraja.

Since I like Tamil songs and statistics so much, I did some analysis on the 1,400 Tamil songs I'd listened to in 2006 . The trends are around the length of a typical film song are interesting. For example: Songs have gotten longer over time . On average, a song in the 60s was 4 minutes. A song in the 2000s is 5 minutes. Each decade adds about 14 seconds to the length of a song. But some of the old movies have pretty long songs. Thiruvilaiyadal and Vanjikkottai Vaaliban have among the longest songs on average, for example. As a corollary, newer music directors make longer songs . While KV Mahadevan 's songs lasted 4 minutes, Ilayaraja 's songs lasted 4.5 minutes, and AR Rahman 's songs last 5 minutes. Today, Ramesh Vinayagam 's compositions are 5.5 minutes. However, Deva seems to make longer songs than usual for a 1990s director (5.5 minutes), while Devi Sri Prasad makes shorter songs for a 200os director (4.3 minutes). Since I rated the songs, I could also analyse my preferences. I like older songs a bit more . My top movies list for instance, has only one movie from the 2000s, 2 from the 90s, 5 from the 80s, 1 from the 60s and 1 from the 50s. My all-time favourite movie (for songs) is Vaidhegi Kaathirundhaal . I didn't need the analysis to tell me that, though. My all-time favourite music director is G Ramanathan , thanks to Uthama Puthiran , Ambikapathy , Madurai Veeran , etc. AM Raja follows, and then the great Ilayaraja . It's interesting that AR Rahman falls below Harris Jayaraj and Deva . He also falls below MS Viswanathan , but that's not surprising. For quite a while, I was convinced I liked shorter songs. But surprisingly, it turns out that my preference is quite independent of the length of the song! Anyway, all time favourites short songs include: Indhiraiyo Kaadhalan 1:02 Muthu Mazhaiye Mazhai 1:21 Yamunai Aatrile Dhalapathi 1:22 Anbana Thaayai Mahanadhi 1:34 En Azhagenna (mp3) Minsara Kanavu 1:47 Manamagale Devar Magan 2:13 Poojaikkaaga Payanangal Mudivadhillai 2:18 Suttum Vizhi Kandukonden Kandukonden 2:18 Brindavanamum Missiamma 2:48 Theerthakaraiyinile Varumaiyin Niram Sigappu 2:49 P.S.: It's interesting that three of them have Bharathiyar songs in them. All of this analysis was possible because I recently dumped WinAmp and moved to MediaMonkey , which lets you write your own scripts . Try this: search for a song and listen online . Comments hermes 5 Jan 2007 3:50 pm: do u know any sites tht allows u to download carnatic numbers hermes 5 Jan 2007 4:09 pm: let me know if the below link is of some mileage to you in your music research hermes 5 Jan 2007 4:12 pm: http://www.tamilnation.org/culture/music/index.htm . am sorry here is the link S Anand 5 Jan 2007 4:33 pm: Thanks for the link, Hermes. I'm afraid I'm not into carnatic songs... my interest stops at listening to film songs. Sathya 6 Jan 2007 4:34 pm: I was a little surprised that you rated G.Ramanathan and AM Raja ahead of IllayaRaja. But of course taste vary. My fav illayaraja number is "Poomalaye engum iru thol serka vaa" from Pagal Nilavu and one of the underrated song "Sangathil padaatha kavithai" from Auto Raja. S Anand 6 Jan 2007 6:16 pm: Actually, I rated the songs and not the directors. I guess it just so happens that the AM Raja and G Ramanathan songs I have are better, on average, than the huge Ilayaraja collection I have. The entire analysis is completely biased by what songs I have, of course. Anand Srini 8 Jan 2007 6:57 pm: Is there a correlation between the length of a song and its popularity ? Its popularity is measured on the scale of repeated broadcast on FM channels and private use in night clubs. SNambiar 9 Jan 2007 2:17 am: The statistics would have been more accurate if you consider the length of the composition viz-a-viz the length og the actual song. ar rahmans songs generally tend to have loads of music interludes bewteen actual singing. The ratings have been provided by you is it? Wish there had been a statistic indicating number of times a song has been played over the years. That way when a particular number has been played most can be tracked. Perhaps the period could have something to do with what you have been upto, check if there is any correlation between particular categories in your blog post which you seem to favour during the same time ... Ok now am going over board :) S Anand 15 Jan 2007 8:11 pm: Anand, I didn't have any data on popularity I'm afraid. The only thing I have is the number of times I've heard the song, and on that, there's a definite correlation. S Anand 15 Jan 2007 8:15 pm: Sachin, yes, the ratings are mine. I considered using the ratings from raaga.com or musicindiaonline, but I find these are not too good. (They don't consider fewer votes as a disadvantage). I do track the number of times the song has been played over time, but it's just on my computer :-( and since I have only 1 year worth of data, for just 1 person, it's nowhere near enough. Hmm... as for the correlation with blog posts... gosh that would be some analysis! Neelan 24 Jan 2007 3:46 am: wow..AR Rahman's songs' ratings are quite low than I'd expected :( Adiya 2 Mar 2007 2:41 pm: Same Pinch.. even i have a playlist which has short songs.. superb.. Ashish 7 Mar 2007 6:31 am: Hi Anand, I dropped by at your website from Desi Pundit search engine link. It is really interesting what you do with your scripting knowledge applying it in daily situations. I am newly converted MediaMonkey fan but I don't know how to write JavaScripts. Would you mind sharing your favorite MediaMonkey scripts which you have picked up or written your self? Thanks a lot. And I am loving your statistical analysis of Calvin/Hobbes, Movies, Songs, everything :) wazim 27 Oct 2008 7:45 am: thats crap man..Rahman is the BEST EVER... swaraj 6 Feb 2009 11:35 am: What jobless idiot. The time spent on doing this could be spent on something useful. Just listen to music and Rahman has give lot of good music also. Illayaraja is all time best and MSV is an icon. Balu 11 May 2009 6:50 pm: My friend gave me your website link to download songs..I was just going through your other posts and you are crazy, man(In a positive sense of course!!) ..I too am really statistics kind of guy have did little of what you have did like organizing and reorganizing the songs according to different category..finally came up with year the movie released as the criteria to group it ..But anyways love your posts and statistics though it may not match my taste exactly ..I personally Yuvan ahead of Ilayaraja and Rehman even though i live 8Os music a lot.. P Kannan 4 May 2009 3:20 pm: SA, Good work. It is your personal favourites. I have not listened to all the songs. This is a good start. You probably need to come up with a unbiased criteria. Forget about naysayers. There will always be plenty. There has to be intellectual discussions; and this is a start. Work to earn a living is ok but this is passion. I am glad that you have it. P. Kannan 25 Jun 2009 6:31 pm: Be honest on Assesing Musica Directors! A.R is the best of all! Dont under estimate him just because he is a muslim! He is the legend! ACCEPT IT! Rangan 8 Oct 2009 2:39 pm: What about MGR Classic songs from movies like Anbe Vaa, Padakotti, Adimai Pen etc etc. All songs from the above movies are Mega Blockbuster songs. Cine industry people are having thought that when taking account of songs, first will come MGR songs and then only from other actors songs. Guhaprasath 14 May 2010 3:14 am: I should say sir, that it is an Impressive analysis.... and done meticulously well... Such passion in music... Please Keep up the good job... Thank you. Magesh 5 Jul 2010 8:07 am: Dear Anand, Your ratings were acceptable. Good analysis. I do listen all songs from MGR songs to Yuvan Shankar Raja what i understand is Raja is all time great. however Rehman and Yuvan are good composers. All other composers can be listened at once or few times but only one legend songs can be listened always is nothing but Raja. nithin 3 Oct 2010 2:23 pm: Ar rahman Superb............. siva 10 Dec 2010 3:19 am: This analysis is limited to anand. I think u interlectually reflected on your taste of music. Rahman fans has no rights to comment on your passion. its a bit suprise that you actually sat down and spent time doing this. but again please recheck you variables and you might come up with diffrent results. also wish u good luck with music and no disrespect for your tast. diffrent approach. I kinda like it. Satish Babu 3 Jan 2011 6:35 pm: Just watch any music and does it ever strike you, do you realise only on music director's song gets repeated always, now tell me what else evidence do you need to tell Illayaraja is the best. srk 4 Dec 2011 4:49 pm: mattew, just listen rahmans enna solla pogirai from kandukonden kandukonden, its better than rajas musiq,if you carefully listen the song you can hear the magics,only if you carefully hear...................!!! D. Chandramouli 15 Dec 2011 10:27 am: One of my favorites is "Andha Sivakami Maganidam Seidhi Solladi" from movie Pattinathil Bootham, set to music by Govardhan(?) and soulfully sung by P. Suseela. I urge the readers to listen to that song closing the eyes - it's an out of the world experience. Of course, I also rate G. Ramanathan as the best - all his songs were carnatic raga based, sweet to the ears. Uthamaputhiran, Ambigapathy etc were classics. The second in rank is of course MSV-Ramamurthy combination (not just MSV), followed by KVM (Kungumam, Padagotti and umpteen others). Certain songs by AM Raja are wonderful - particularly, listen to the background start up music for the song "Oho Andha Baby" from Thenilavu. What a happy and romantic feeling the song creates! Only in Ilaya Raja songs, we can get that "mann vasanai". Currently, ARR rocks with mesmerizing tunes. Matthew 12 Nov 2011 8:10 am: Illayaraja s tons of times better than rahman..no one has ever used flute n tabla lik maestro used..so stop comparing rahman wit raja Raj 12 Nov 2011 8:20 am: Rahman s d best one Vishnu 9 Mar 2012 2:59 pm: does every one has to have a website?.. Let us move on. The cini music is an evolution like everything is in the world. SO the current directors have learned a lot from earliar ones and mix them with music from all over the world. So A.R is no better than sudhrson or any one else in that era. And mr Kannan where does muslim comes in to picture here. People like you creates bin laddens. mlet us stick to music here. guru 3 Jun 2018 5:50 am: https://www.youtube.com/watch?v=ZaZAUDIeVKg தமிழ் புதிய பாடல் தொகுப்பு - பார்த்ததில் பிடித்தது -படைத்தவர்களுக்கு நன்றி அருமையாக இயக்கி பாடியுள்ளார் - இதை விமர்சியுங்கள்

Top Tamil songs


I built a set of Excel user-defined functions to bring Unix-style list processing to spreadsheets. These macros allow you to chain functions like UNIQUE, GREP, and UNION into single-cell array formulas for powerful data manipulation.

Many languages have functions to process lists (array). These functions usually return a list, so you can pass that to another list function. This chaining of functions is really powerful. UNIX provides this sort of chaining capability. If I had a cities (with some repetitions) and I wanted to find out how many started with the letter 'A', I'd just type: To do this on Excel, the only way is to 1. get the unique values. Data - Filter - Advanced Filter, and select "Unique records only", "Copy the list to another location", and select a location 2. get the first letter. =LEFT(cell,1) returns the first letter of the cell. 3. count the number of "A"s. =COUNT(range, "A") counts the number of "A"s. But ideally, I'd like a 1-line formula like Excel doesn't provide these functions by default, but you can add them as user defined functions. Doing this lets you condense several cells into one. Instead of having to copy all your data into a set of unique values, and then adding a column for the first cell, the entire operation can be condensed into one formula. I consider the following functions the a basic set for list processing. LENGTH(list) counts the number of elements in a list INDEX(list, n) returns the nth element of the list GREP(string, list) returns elements of the list that have the string UNIQUE(list) filters unique values UNION(list, list) returns elements in at least one of the lists INTERSECTION(list, list) returns elements in both lists DIFFERENCE(list, list) returns the elements in the first list but not the second REVERSE(list) reverses the order of the list STRJOIN(separator, list) joins the elements of the list into a string, separated by a separator STRSPLIT(separator, string) splits the string into a list, using a separator MVLOOKUP(value, lookup, result) looks up value in "lookup", and returns the corresponding MULTIPLE values from "result" I created these UDFs. You can download the functions and play with them. Below are some tasks that you can do with them, that are difficult otherwise. Get the file name from a path. =INDEX(REVERSE(STRSPLIT("\", filename)), 1) excel =LENGTH(UNIQUE(range)) excel How many words are there in a string? Get the smallest unique numbers in a range =SMALL(UNIQUE(range), 5) excel =COUNT(Range1)+COUNT(Range2) - COUNT(INTERSECTION(Range1,Range2)) excel Count duplicate entries in a range. VLOOKUP multiple values =MVLOOKUP(A1,LookupRange,ReturnRange) excel =COUNT(UNIQUE(MVLOOKUP(A1,LookupRange,ReturnRange) This is a small sample. The power of list processing is phenomenal, especially when combined with array formulas. Download these macros and play with them! Comments Krishna 24 Feb 2007 4:10 am: Anand, thanks for an extremely useful stuff.In connection to our discussion on enhancing my excel skills, i think it would help me largely. Krishna Sundar 26 Feb 2007 4:06 am: Very neat job Anand. Congrats for a super job. Waht is your e-mail address? Thanx in advance............S. Anand Srini 26 Feb 2007 9:40 pm: Hi I reproduce this extract from your article "Instead of having to copy all your data into a set of unique values, and then adding a column for the first cell, the entire operation can be condensed into one formula" can you explain why a column has to be added for the first cell ? ashwin 27 Feb 2007 4:41 pm: Dear Anand, As usual; another useful post from you. Thanks, Ashwin Kabir 5 Mar 2007 9:01 pm: you truly are a genius Shiva 6 Mar 2007 2:03 pm: Your site is turning to a Dexters Laboratory Ramly 19 Mar 2007 4:35 pm: Thank you very much this will help a lot Mansi 11 Apr 2007 4:22 am: Hi, was just randomly searching for how to generate unique values on excel.. and came across your website. Must say, truly impressive work and this has helped me a lot! Thank you and keep up the good work! :) James 23 Feb 2007 12:00 pm: Cheers, a lot of great stuff here, makes my Excel work much easier. My hat off to you! Pete Watkins 23 Feb 2007 12:00 pm: Thanks ever so much for your work in developing these functions, as these have allowed me to avoid a huge amount of drudgery in processing data!

User defined array functions in Excel


I built a VBA user-defined function to fetch live Amazon prices directly into Excel. By querying Amazon's XML web services via MSXML and parsing with XPath, I automated gadget price comparisons to avoid manual data entry.

Take a look at the Excel screenshot below. Amazon Web Prices Yes, that's right. I have a user-defined function called AMAZONPRICE. And it returns these cameras' prices directly from Amazon.com. (Given the category and some keywords, it returns the price of the bestselling item on Amazon.com.) Here's the code behind the function. This is how it all started... Flickr has a camera finder that shows the most popular cameras in the Flickr community. flickr Camera Finder I love comparing gadgets, I'd been doing some research around these cameras, and the Fuji series (because I own a Fuji Finepix S5600). I'd normally make a spreadsheet that compares these cameras on various parameters, including price. Since I believe in never typing in data, wondered if there was a way to get the prices in automatically... Two things made this possible. 1. Amazon offers web services which let you get price (and almost any other) data for their products 2. Visual Basic lets you use pretty much any ActiveX object as a control. Microsoft offers MSXML which you can use to load (or download) any XML file, and parse it. The first task is to get the XML feed for a product you want. Amazon lets you do that through by typing in a URL. The best way to construct the URL is through AWSZone. I picked the US ItemSearch method, which searches for a title or keyword within a category, and returns the matches. The feed for the Canon EOS Digital Rebel XT, based on this, would be at: (You really need to replace the Subscription ID with your own.) If you retrieved this URL, you have an XML file containing the details of all Canon EOS Digital Rebel XTs, sorted by sales rank. To load this in Excel, you need to create a UDF in Visual Basic. First, go to Tools - References and enable Microsoft XML, v3.0 or v4.0. Now, to load an XML document, do this: If the load succeeds, then you can extract the information fairly easily, using XPath. The first line says we'll be searching using XPath. The second line is a workaround to support default namespaces. (Don't worry about it. I don't quite get it either.) Finally, you get the price from the XML tree. In this case, it's under ItemSearchResponse/Items/Item/OfferSummary/LowestNewPrice/Amount, and it's in cents. That's it! Now that this function is defined, just pass it the category and keywords, and you have the price of the first matching product. You can retrieve any other information about products as well -- like sales rank, weight, ratings, reviews, etc. Here's the spreadsheet for you to play around with. Excel 2003 Power Programming with VBA (Excel Power Programming With Vba Writing Excel Macros with VBA, 2nd Edition Comments Saurabh 3 May 2007 7:38 am: There is a simpler way as well. Use Data->Import External Data->New Web Query. While this is not as powerful as the user defined function that you have created, but definitely a good starting point for lesser geeks :) I use this, for example, to have a dashboard kind of view for the status of the multiple projects that I handle at my work. We rely heavily on Microsoft Sharepoint at work, and using the Web Query option, I can easily get a snapshot of the status of various projects. Same can also fetch shareprices from various websites. S Anand 3 May 2007 8:16 am: Good point, Saurabh! Web Query does make getting stuff out of HTML very easy. My function operates in a different domain, though. It can access XML, which Web Query won't, but can't access HTML, which Web Query does. I'm planning a few more posts on how to extend this concept... that will explain what I mean. rick sherrin 3 May 2007 12:00 pm: Hi, I work at a public library, in the acquisitions department. The majority of the work is manually keying in order information (that is available electronically elsewhere). I read your article about using Excel to retrieve amazon information. This is something that would be very useful to our library and would make my job easier. I have a little excel knowledge, but I have no experience with visual basic or xml, etc. So although it looks straightforward, it is still out of my reach. I would like to be able to enter a column of ISBN numbers in one column, and retrieve title, author, publisher, price, reviews, synopsis, cover image, in adjacent columns. I would appreciate your help if you would give me an example of how I could easily do this. Thanks Rick dat 12 Aug 2008 8:10 am: useful article! Btw, how do I retrieve other info from amazon (published date, sales rank, customer review, etc)??? thanks S Anand 13 Aug 2008 2:15 am: @dat: Have a look at http://www.awszone.com/ for examples on other parameters. Lydia 3 May 2010 12:05 am: this worked until august last year when amazon changed the way the query signs into their system...it now requires a signature with a timestamp in addition to the subscription ID Bobby Baker 10 Feb 2015 7:09 am: Have you updated the search functions for this or do you have a new code for this? Vlad 26 Aug 2015 10:00 pm: Hey Annand is it possible o get the racking status fro fedex for a column of tracking numbers?

Web lookup using Excel


I show how I use Google Spreadsheets' importXML and importFeed functions to automate web lookups. I built a tool that scrapes IMDb’s top movies, finds related torrents, and publishes the combined results as a custom RSS feed.

I'd written earlier about Web lookup in Excel. I showed an example how you could create a movie wishlist that showed the links to the torrents from Mininova. You can do that even easier on Google Spreadsheets. It has 4 functions that let you import external data: =importData("URL of CSV or TSV file").\ Imports a comma-separated or tab-separated file. =importFeed(URL).vLets you import any Atom or RSS feed. =importHtml(URL, "list" | "table", index).\ Imports a table or list from any web page. =importXML("URL","query").\ Imports anything from any web page using XPath. Firstly, you can see straight off why it's easy to view RSS feeds in Google Spreadsheets. Just use the importFeed function straight away. So, for example, if I wanted to track all 8GB iPods on Google Base, I can import its feed in Google Spreadsheets. Google Spreadsheets ImportFeed This automatically creates a list of the latest 8GB iPods. Incidentally, the "Price" column doesn't appear automatically. It's a part of the description. But it's quite easy to get the price using the standard Excel functions. Let's say the description is in cell C1. =MID(C1, FIND("Price", C1), 20) gets you the 20 characters starting from "Price". Then you can sort and play around as usual. The other powerful thing about Google Spreadsheets is the CONTINUE function. The importFeed function creates a multi-dimensional array. You can extract any cell from the array (for example, row 3, column 2 from cell C1) using CONTINUE(C1, 3, 2). So you can just pick up the title and description, or only alternate rows, or put all rows and columns in a single column -- whatever. Google Spreadsheets CONTINUE The most versatile of the import functions is the importXML function. It lets you import any URL (including an RSS feed), filtering only the XPath you need. As I mentioned earlier, you can scrape any site using XPath. For example, =importXML("http://www.imdb.com/chart/top", "//table//table//table//a") imports the top 250 movies from the IMDb Top 250. the second parameter says, get all links (a) inside a table inside a table inside a table. This populates a list with the entire Top 250. Google Spreadsheets - ImportXML Now, against each of these, we could get a feed of Mininova's torrents. Mininova's RSS URL is http://www.mininova.org/rss/searchstring. So, in cell B1, I can get a torrent for the cell A1 (The Godfather) using the importFeed function. (Note: you need to replace spaces with a + symbol. These functions don't like invalid URLs.). Google Spreadsheets - Import Mininova Feed Just copy this formula down to get a torrent against each of the IMDb Top 250 movies! Check out the sheet I've created. (You need a Google account to see the sheet. If you don't want have one, you can view the sheet.) Now, that's still not the best of it. You can extract this file as an RSS feed! Google lets you publish your sheets as HTML, PDF, Text, XLS, etc. and RSS and Atom are included as well. Here's the RSS feed for my sheet above. Think about it. We now have an application that sucks in data from a web page, does a web-based vlookup on another service, and returns the results as an RSS feed! There are only two catches to this. The first is that Google has restricted us to 50 import functions per sheet. So you can't really have the IMDb Top 250 populated here -- only the top 49. The second is that the spreadsheet updates only when you open it again. So it's not really a dynamically updating feed. You need to open the spreadsheet to refresh it. But if you really wanted these things, there's always Yahoo! Pipes. Comments Gregory Dillon 31 Dec 2007 12:00 pm: Hey, thanks. Your page was the most helpful of all. In the example with the movie names, how did you figure out that it was a table x3. or table within table within table. S Anand 30 Mar 2010 9:04 pm: Looks like the IMDb top 250 page format has changed. =importXML("http://www.imdb.com/chart/top", "//div[@id=""main""]//table//font/a") seems to work now. Sintl 2 Jan 2011 4:24 am: Hi Is there a possibility to get selective text from webpage by using import url function. =ImportHtml(URL; "list" | "table"; index) I want to pull following text Updated Sunday, December 19, 2010 from a html page Thnx Siamak 26 Aug 2011 11:03 pm: I have an excel file with the name of about 300 businesses that I want to look up their phone numbers or websites. Any idea how I can automate this, rather than type each entry in Google? Thanks akc 30 Jul 2011 11:07 am: Hey Very Helpful website it is..........Please help me I wan to import data from (http://dsebd.org/latest\share\price\scroll\l.php ) . to google spreadsheet . I wan to import share price . Now tell me which way i will use. I m failed

Web lookup using Google Spreadsheets


I built a JavaScript fallback system to load heavy assets from multiple mirrors. If one free host is down or bandwidth-limited, my script automatically tries the next source until the data loads successfully.

My music search engine shows a list of songs as you type -- sort of like Google's autosuggest feature. I load my entire list of songs upfront for this to work. Though it's compressed to load fast, each time you load the page, it downloads about 500KB worth of song titles. My allotted bandwidth on my hosting service is 3GB per month. To ensure I don't exceed it, I uploaded the songs list to an alternate free server: Freehostia. This keeps my load down. If I exceed Freehostia's limit, my main site won't be affected -- just the songs. I also uploaded half of them to Google Pages, to be safe. This all worked fine... until recently. Google Pages has a relatively low bandwidth restriction. (Not sure what, and they won't reveal it, but my site is affected.) Freehostia is doing some maintenance, and their site goes down relatively often. So my song search goes down when any of these go down. Now, these are rarely down simultaneously. Just one or the other. But whenever Freehostia is down, I can't listen to one bunch of songs. When Google Pages is down, I can't listen to another. What I needed was a load distribution set-up. So I've made one in JavaScript. Normally, I load the song list using an external javascript. I have a line that says: ... and the song's loaded from Freehostia. What I'd like to do is: If the function can't load it from the first link, it loads it from the second, and so on, until list.hasLoaded() returns true. Here's how I've implemented the function: The first document.write loads the first script in the list. The if condition checks if there's more scripts to load. If yes, the second document.write writes a script that checks whether the script is already loaded, and if not, loads the rest of the scripts using the same function. I've expanded the sites that have these free songs as well. So now, as long as my main site works, and at least one of the other sites work, the search engine will work. PS: You can easily expand this to do random load distribution as well. Comments Saurabh 1 Sep 2007 12:00 pm: I think its time for you now to start your own company..:) Guess you have some great ideas and u just need to put them on paper and start executing! RK 1 Sep 2007 12:00 pm: Have you looked at the DOJO toolkit. It does have the feature you are looking for namely including scripts and verifying if the included script loaded. You might have to customize it a bit to suit your needs as its an entire toolkit. S Anand 1 Sep 2007 12:00 pm: Saurabh -- you''re right. Problem is, I''m way to conservative! RK -- I know of Dojo, but didn''t know of this functionality: thanks! You''re right, I probably won''t want the entire toolkit, it''s quite bulky. But I''m sure I could learn from their implementation. jawahar 1 Sep 2007 12:00 pm: Hai anand, can u suggest or give an insight on how to keep track of files which we work on?? not program codes ? but reports we read ,write n edit.. so as to retrieve it faster .. since ur working in such an environment can u share ur exp on naming files and organising it. thanks, jawahar kgnanasekaran 1 Sep 2007 12:00 pm: Dear Mr.Anand, I really enjoyd in this website lot. R u tamilan??? superb site.. plz carry on.. thanks a lot..?? if u like we will bcome frnds.. am always available in my gmail..kgnanasekaran@gmai.com keep n touch. with warm regards, shekar. xVanity! 1 Sep 2007 12:00 pm: I really enjoy your website. Thanks for all the information you share. Ramesk K palleri 1 Sep 2007 12:00 pm: Kudos anand.. u have done a great job on yous music site. keep going.. RAVINDRA 1 Sep 2007 12:00 pm: I REALLY ENJOY YOUR WEBSITE. BUT I WANT LISTEN SONGS IN YOUR MEDIA PLAYER. oracle 1 Sep 2007 12:00 pm: where are you oflate?missing your post krishna rao jallipalli 1 Sep 2007 12:00 pm: DEAR MR. ANAND, INFACT YOUR WEBSITE... SONGS..SUPERB. YOU ARE DOING A GREAT JOB. THOUGH YOU IN AMERICA...INFACT.. THESE TYPE OF WEBSITES.. SO MANY.. ARE BEING MAINTAINED BY NRIs. REALLY GREAT. MY HEARTY WISHES. REALLY I AM ENJOYING. WITH BEST REGARDS J KRISHNA RAO GUNTUR A.P CELL:9949517103

Website load distribution using Javascript


I examine Paul Graham's distinction between wisdom, which means being right frequently, and intelligence, which means being right where others aren't. I find that creativity increasingly demands intelligence over traditional wisdom for unique results.

Paul Graham pens another brilliant essay on Is it worth being wise? It's mostly about the difference between being wise (right most of the time) versus being smart (being right where few others are). If you're picking between options, being wise is useful. There is a best option, and you'll pick it most of the time. If you're doing something creative, there's no finite set of options. Then it's worth being smart. Increasingly, tasks are asking for more creativity, so it may be better to be smart.

Wisdom and Intelligence


I redesigned my home page to better showcase my code and microblogging. I used the 960.gs grid system and PowerPoint's color themes to finish the layout in three hours, prioritizing speed over perfection.

I have a new home page design. (If you're reading the RSS feed, check the home page.) One reason is that the old home page's design sucked. Almost everyone told me that it was drab in black and white. Personally, I think the new home page sucks in terms of colours as well. There's too many. I suck at picking colours. The only good thing about these colours is that I left it to the judgement of experts. These are the colours in Powerpoint 2007's "Concourse" theme color, and I've just lifted them. So, no, it wasn't the colours that drove the redesign. My last redesign was over a year ago. I changed the structure from a list of links to two lists: one where I was just linking to interesting sites (bookmarking, really) and the other where I was writing content. The purpose behind that was to allow me to focus on writing stuff rather than just bookmarking. And that worked pretty well for me. In the last several months, I find myself writing more code than articles. I don't quite have a way of sharing that. The new home page has a section dedicated to the sites I'm creating, and hopefully, it'll let me share what I'm doing in a clearer way. Another problem I have is that in attempting to write articles, I've cut myself off from writing the frivolous. Sometimes, I just need to share something small, like "I bought an Acer Aspire 5715Z" without going into the details of it. That's not a bookmark. That's not an article. I need a space in-between. And that's exactly the space micro-blogging captures. I created a Twitter account last month. With the huge number of problems that twitter has, such as downtime and the lack of IM support, I hadn't written a single tweet. Day-before, I created an account at identi.ca and it works just fine. Given that I now have 4 mobile devices, I should be able to do some decent microblogging. This is actually my third or fourth attempt at redesigning my earlier home page. Every time, I'd start with a redesign, struggle with it, try to get things just right, and then eventually abandon the effort after a few weeks. This time, I succeeded -- within a matter of three hours on my flight from Washington DC to London. Two reasons. Yesterday, I found this CSS framework: 960.gs. It's a grid system. And grids are absolutely the best way to get layouts for the web. The other is an article from Coding Horror titled Quantity Always Trumps Quality. If you try to do stuff quickly, you end up doing better stuff than if you tried to do better stuff. To hell with perfection. Just get it out of the door. Comments Saravanan 4 Aug 2008 12:00 pm: "Personally, I think the new home page sucks in terms of colours as well. There's too many. I suck at picking colours"\ \ Absolutely true. Why don't you learn from "The Laws of Simplicity" By John Maeda.Can apply it any where.\ \ Cheers!\ Saravanan Zishaan 4 Aug 2008 12:00 pm: Colors suck! B&W rocked. Marina Martin 4 Aug 2008 12:00 pm: Gorgeous design. I'm still tweaking my own custom blog theme - I'm not a designer, but I'm making headway. Really like yours!\ \ What's your Identi.ca handle? Balaji 4 Aug 2008 12:00 pm: Hi Anand,\ What ever the colour and page may be, i like ur post of contents and songs, its really worth....\ its really nice to see the page with lots of colour,.\ Cheers!!!!!!!!!!!! mate...\ Regards\ Balaji Shyam 4 Aug 2008 12:00 pm: The colours on the new homepage are not only a pain to the eyes but also pretty confusing to navigate. Liked the old one - simplicity rules!

A new home page


I built a way to recreate Hans Rosling’s animated motion charts in Excel. By linking a scroll bar to a VLOOKUP table, you can dynamically update bubble chart data to create interactive animations that work offline during presentations.

Watch Hans Rosling 's TED Talks on debunking third world myths and new insights on poverty and ask yourself: could I do this with my own data? Yes. Google has a gadget called MotionChart that lets you do this. Now, you could put this up on your web page, but that's not quite useful when presenting to a client. (It is shocking, but there are many practical problems getting an Internet connection at a client site. The room doesn't have a connection. The cable isn't long enough. You can't access the LAN. Their proxy requires authentication. The connection is too slow. Whatever.) So you need this in Excel. Let me explain a variant of the technique I described earlier . Let's start by creating a simple bubble chart. For each item in a bubble chart, you need 3 pieces of data: the X-axis, Y-axis and size. This graph shows three items A, B and C in one year: 2001. To animate this, you need data for more years, so let's create that. The first 3 rows contain the same data as before, except that I've added a "Year" column and a "Key" column (which is just a concatenation of the Year and the Item). The data now goes on for many more years. Now we need to create a scroll bar that can be used to change the year. So add a scroll bar below the bubble chart... ... and right click the scroll bar and go to Format Control. Now, select the cell link to some cell ($H$1 in this case). Now, if you move the scroll bar, the cell value will change. All you need to do is to now change the source data for the chart based on the year. From the table on the left, VLOOKUP the year + item, and put this into the table on the right. When the year in the cell H1 changes, the data updates itself. So now, as you move the scroll bar, cell H1 changes, then so does the data and hence the graph. This is what the animation looks like. And here's the Excel file . Comments S Anand 29 Jan 2009 9:47 am: For this particular example, Ganesh, you're probably better of not\ using the scheme I described. It's probably better to reduce the data\ to fewer dimensions (e.g. in pairs: dimensions (A,B), (A,C), (B,C),\ etc.). Sorry, without a sense of what the data is about, I'm not sure\ I can think of a good way of doing this. S Ganesh 3 Feb 2009 3:21 am: Hi Anand As I told you earlier, I came up with something like the above image. 5 processes each measured on 4 Dimensions. I was trying to get each of these respective xl charts one on top of the other on Z-axis which could make the representation in 3D.. But I could not. Regards S Ganesh S Anand 21 Jan 2009 6:38 am: I think it would depend on the dimensions, SG. The best way of modelling up\ to 4 dimensions I've seen are using Hans Rosling's charts at gapminder.org.\ But you'd need the 4 dimensions to be mappable to X, Y, size and time. SG 21 Jan 2009 7:03 am: Thanks Anand for the immediate response. A bit more to explain myself.\ \ The things that I would like to depict are these.\ To model the system A, I have 4 dimensions each with varying weights. The response score for each dimension is expressed as %. In bubble chart terms- Say, one of the dimension is represented as a bubble, then the outer circle diameter denote the Relative weight of the dimension and a circle inside denote the actual score.\ \ Roughly, I visualize to represent the Model as a stack for 4 bubbles (dimmensions)one on top of other. something like a 3D color model\ \ In the example, that you referred.. Size and time are something which is common to X and Y..\ \ Thanks\ Ganesh S l b 13 Nov 2008 12:16 pm: size can be the annual sales value of a product\ x can be year\ y growth Shaun 24 Nov 2008 10:18 am: Hi. Very useful way of doing this - thanks!\ \ Is there any way to automate the scroll bar so that I can click just one button and the graph updates itself automatically?\ \ Thanks Theertharao n 8 Dec 2008 2:44 am: very nice and simple SG 21 Jan 2009 6:27 am: Hi Anand,\ \ This is very nice, I landed on this page googling for something I wanted for in xl charting.\ \ Can you help ? I am trying to model a "System A". I have 4 identified dimensions D1, D2, D3, D4 for it, each on a scale of say, 1 to 400.\ \ I wanted to represent them in one composite chart to show, this is how the "System A" looks like. Is there anyway out ?\ \ Thanks Thejesh GN 20 Aug 2008 2:45 am: cool tip. I will use it. Sundar R 1 Sep 2008 8:20 pm: Does this method work only in MS Excel 2007? I am using MS Excel 2003 and I was not able to get the "Control" tab in the properties of the scroll bar. S Anand 2 Sep 2008 12:11 am: @Sundar: It works on Excel 2003 as well, except I'm not sure what the menu shortcuts are. Sundar R 3 Sep 2008 12:16 am: After some googling I found out the problem: There are scroll bar object in both "Control toolbox" and "Forms" tool bars. The scroll bar in the "Control toolbox" does not have the "Control" tab in its properties. The scroll bar in the "Forms" does have the "Control" tab in its properties. I was adding the scroll bar object from the Control toolbox toolbar. That's the reason I was not able to get it working earlier. Sridhar 17 Sep 2008 10:06 am: I don't understand what the "size" could be in the data.. can u help? S Anand 17 Sep 2008 11:09 am: @Sridhar: The size is the radius of the circles. You'll notice that this changes in the animation as well. Initially, the circles are of the same size, but over time, they become bigger or smaller. Phil 13 Oct 2009 4:31 pm: Hi there, I've created a little Excel add-in that does a similar thing, but without the need for adding controls to your Excel worksheet. The user simply creates a table of data, creates a chart from the top row of the table and then uses the add-in's menu to run the animation. It is free - for now at least :) - and can be downloaded from my website - http://www.animatexl.com. I'd be very interested to know what anyone thinks of it. Regards Phil. Mercy 12 Aug 2010 2:59 am: Hi - Your idea is so fantastic! I am trying to use it with a line/area graph, and it is more or less taking shape - got all the filters and vlookups all in place like you recommended; I even put in place 3 scroll bars so that it is now a dynamic graph that is getting controlled by 3 different variables. The only thing I wondered about was how to get the scroll bar to display the value of its position as it is getting scrolled. Also I wanted to display the variable names that each of the scroll bars are representing and their max and min points. I ma sure there is some VB code that can be pasted somewhere - but I needed to get this done by tomorrow, so I'm writing this SOS in the hope you'll read. Ash 4 May 2010 5:19 pm: Hi everyone, Ive been playing about with this technique (which is highly appreciated by the way). For anyone working with percentages, i.e. you want the slider to affect a percentage scoring, you need to do this in a different way (or so I have found - if anyone has a simpler way of doing this, please post). Since Excel stores a percentage number as a decimal (e.g. 10% is stored as 0.1), you will need to have a separate reference cell to that where the percentage is stored. For example, in cell A2, type the number 5. In cell A1, Type ' =A2/100' and then change the cell format to Percentage. Add in the slider and set the parameters as per the instructions above, making the cell reference A2, minimum value 0, and maximum value 10. The slider will now change the percentage by increments of 10% To get greater accuracy, change the formula in cell A1 to reflect how many decimals you wish to go to. For example, for 1 d.p. use ' =A2/1000', for 2d.p. use ' =A2/10000. You will also need to change the parameters in the maximum/minimum values in the slider control options to allow you to reach 100%. You will see what i mean once you play about with it. Ash Mercy 12 Aug 2010 3:00 am: Thanks, meanwhile for this really helpful website. LexiK 15 Jun 2012 12:20 pm: These are amazing, thanks! Just a quick query-I can build these in excel no problem, however, if I try to build the same within an excel macro-enabled insert in powerpoint although if I manually scroll along the bar, the graphics change, they don't seem to when the scroll is moved by the 'play' button. Any ideas as to how to get around this? Daniel Ferry 18 May 2011 6:08 pm: Hello. I just found your site. I thought you might be interested in the dozens of Excel animated charts on my blog: http://www.excelhero.com/blog/2010/05/animated-business-chart.html Kind regards, Daniel Ferry Excel Hero Academy Arun 1 Jan 2012 5:21 am: This is not working with the months level data , as numerical conversion of the months not possible , pl help vinoth 11 Aug 2012 4:23 am: whether the animation will work if i copy it in ppt. Gustavo 16 Feb 2014 5:11 pm: Hi Anand, Do you know if this works with Excel for Mac or Numbers? I use Excel for Mac and get an error for the animation button when it looks for Kernes32, I'm using your data for the animated chart where you inserted a button with code. thanks in advance Jayan 6 Feb 2019 12:58 pm: Hi Ananad. Your blog on bubble chart was very useful and I Created a test case bubble chart. It work fine in when using the scroll bar, however when executing the vba script using the play button it doesn't work. The excel data are changing as per the dimension, however the bubble charts not moving as they moves in scroll bar. Could you kindly advise...please David Ashley 22 Apr 2020 8:39 pm: Hi Anand - I am using the code for the animated bubble charts. I don’t know what the “Sleep (100)” is for as I keep getting an error (compile error sub or function not defined) related to that when I run the script. It highlights “Sleep” in the error. Thanks for any help you can provide.

Animated charts in Excel


I analyzed my server logs to discover that bots account for 20% of my traffic. After finding Yahoo Slurp hitting my site every five seconds, I used a crawl-delay to reduce server load and optimize performance.

One out of every 5 hits to my site is from a bot . I spent a fair bit of time this weekend analysing my log file for last month (which runs to gigabytes, and I ended up learning a few things about file system optimisation, but more on that later). 80% of the hits were from regular browsers. 20% were from robots. Here's a sample of the user-agents: You get the idea. The bulk of these are search engines. Over two-thirds of the bot requests were from Yahoo Slurp . Now, this struck me as weird. If I take the top 3 search engines that are sending traffic my way, Referral % Crawl % Google 90% 24% Yahoo 6% 66% Microsoft 3% 0.3% Others 1% 9% The search engine that sends me the most traffic is being reasonably conservative, while Yahoo is just eating up the bandwidth on my site. Actually, this shouldn't bother me too much. It's not taking up too much bandwidth, or even CPU usage, given that all the bots put together make up only 20% of my traffic. But somehow... it's sub-optimal. Inelegant, even. So I decided to take a closer look. Just how often are they crawling my site? Yahoo Every 5 seconds Google Every 13 seconds DotBot Every 9 minutes Cuill Every 9 minutes Microsoft Every 18 minutes Feedburner Every 18 minutes Attributor Every 23 minutes Yandex Every 27 minutes Look at those numbers. Yahoo is hitting my site once every 5 seconds . No wonder there's a help page at Yahoo titled How can I reduce the number of requests you make on my web site? I followed their advice and set the crawl-delay to 60, so at least it slows down to once a minute. Just that one little line change should (hopefully) reduce the load on my site by around 15%. As for the other engines, I don't mind that much in terms of load. Google, for all that it crawls every 13 seconds, has faithfully reported that it has only 11% of my site under its index, so I've no idea what they're doing, but I'm not complaining about the traffic that's coming my way. DotBot . Today was the first I'd heard of them. Visited the site, and smiled. These guys can do all the crawling of my site that they like, and I hope something interesting comes out of their work. Cuill , sends me 0.2% of my traffic, but it's a new search engine, I'm happy to give it time. Microsoft 's OK, sends me a tiny stream of traffic. Feedburner is just pinging my RSS feed every 18 minutes. Attributor and Yandex I'm hearing of for the first time, again. Not too much load on a system, so that's OK. What's amazing is the sheer number of bots out there. Last month, I counted over 600 distinct user-agent strings just representing bots. So it's true. The Web is no longer just for humans . We do need a Semantic Web . Comments Dhar 31 Aug 2008 9:09 pm: Hmmm, curious as to: 1. Why the bots should crawl your site every 5 seconds or so? 2. How you can find out how much of your site has been indexed by Google. Cheers, D. S Anand 1 Sep 2008 12:11 am: 1. I think Yahoo's crawler is aggressive in any case. My site doesn't seem to be an exception: there are a lot of threads discussing this problem. 2. Google's webmaster tools tells you how many URLs have been indexed from your sitemap.

Attack of the bots


I show how to automate Internet Explorer by injecting jQuery via the COM interface using Python. This approach enables scraping and testing JavaScript-heavy sites like Google Video using familiar selectors and chainable commands.

Most of my screen-scraping so far has been through Perl (typically WWW::Mechanize ). The big problem is that it doesn't support Javascript, which can often be an issue: The content may be Javascript-based . For example, Amazon.com shows the bestseller book list only if you have Javascript enabled. So if you're scraping the Amazon main page for the books bestseller list, you won't get it from the static HTML. The navigation may require Javascript . Instead of links or buttons in forms, you might have Javascript functions. Many pages use these, and not all of them degrade gracefully into HTML. (Try using Google Video without Javascript.) The login page uses Javascript . It creates some crazy session ID, and you need Javascript to reproduce what it does. You might be testing a Javascript-based web-page . This was my main problem: how do I automate testing my pages, given that I make a lot of mistakes ? There are many approaches to overcoming this. The easiest is to use Win32::IE::Mechanize , which uses Internet Explorer in the background to actually load the page and do the scraping. It's a bit slower than scraping just the HTML, but it'll get the job done. Another is to use Rhino . John Resig has written env.js that mimics the browser environment, and on most simple pages, it handles the Javascript quite well. I would rather have a hybrid of both approaches. I don't like the WWW::Mechanize interface. I've gotten used to jQuery 's rather powerful selectors and chainability . So I'll tell you a way of using jQuery to screen-scrape offline using Python . (It doesn't have to be Python. Perl , Ruby , Javascript ... any scripting language that can use COM on Windows will work.) Let's take Google Video . Currently, it relies almost entirely on Javascript. The video marked in red below appears only if you have Javascript. I'd like an automated way of checking what video is on top on Google Video every hour, and save the details. Clearly a task for automation, and clearly not one for pure HTML-scraping. I know the video's details are stored in elements with the following IDs (thanks to XPath checker ): ID What's there hstitlelink Link to the video hsdurationdate Duration and date hsratings Ratings. The stars indicate the rating and the span.Votes element inside it has the number of people who rated it. hssite The site that hosts the video hsdescription Short description So I could do the following on Win32::IE::Mechanize. I could go through each link to extract the hstitlelink , but there's no way to get the other stuff. Instead, we could take advantage of a couple of facts: Internet Explorer exposes a COM interface . That's what Win32::IE::Mechanize uses. You can use it in any scripting language ( Perl , Ruby , Javascript , ...) on Windows to control IE. You can load jQuery on to any page . Just add a <script> tag pointing to jQuery. Then, you can call jQuery from the scripting language! Let's take this step by step. This Python program opens IE, loads Google Video and prints the text. The next step is to add jQuery to the Google Video page. Now the variable jQuery contains the Javascript jQuery object. From here on, you can hardly tell if you're working in Javascript or Python. Below are the expressions ( in Python! ) to get the video's details. This wouldn't have worked out as neatly in Perl, simply because you'd need to use -> instead of . (dot). With Python (and with Ruby and Javascript on cscript), you can almost cut-and-paste jQuery code. If you want to click on the top video link, use: In addition, you can use the keyboard as well. If you want to type username TAB password , use this: You can use any of the arrow keys, control keys, etc. Refer to the SendKeys Method on MSDN . Comments Franky 18 May 2008 12:00 pm: Holy crap. I am in way over my head here, but this is pretty sweet stuff if I'm reading it correctly. Thanks for the info. Alessandro 5 Jul 2009 11:50 am: The idea is really good. Unfortunately it doesn't seem to work under Perl. When a JS function/script is invoked (jQuery is a JS function) IE does not return a COM object and the control from Perl is lost. There are, of course, methods to overcome the obstacle but not as simple as $window->jQuery! Anonymous 5 Mar 2010 11:25 pm: Wow, kick ass! Exactly what I was looking for. Used AutoIt on a host machine to instantiate the IE object and thanks to you was able to use jQuery to do my scraping. Combined with the IE Developer Toolbar, this has probably saved me weeks of time. Manikandan 19 Nov 2009 3:30 pm: I am trying to do a screenscrape and the code executes jquery. Whenever I had to execute javascript i could execute it by ie.navigate(javascript:....) But when I tried the same thing with jquery it does not execute. The code behind is something like this I tried ie.navigate(jQuery1258644477483="2") It did not thing. Appreciate your help!!! Powershell: Including jQuery in InternetExplorer.Application | DeveloperQuestion.com 30 Oct 2010 1:32 pm (pingback): [...] script document I Followed this article, explaining how to accomplish in Python what I want to do in Powershell. So now I have this [...] Joe 27 Nov 2010 2:42 pm: Hello Mr. Anand, I am trying to do this in Ruby, but I am not sure how to start. Maybe I am lucky and you have you moved to ruby since May 2008? You start with import win32com.client, and I suppose that is to support an IE browser API. I have Firefox, Chrome, Safari and others available to me. The basic aim I guess is to inject JQuery into my page object. Mechanize provides me a page. I am that far. How do I it give it JQuery superpowers. Mechanize uses Nokogiri selectors under the hood. But I would love to standardize on JQuery because it's useful in so many other contexts...in the way that regex is. Joe Powershell: Using jQuery through InternetExplorer.Application 12 Feb 2012 2:48 am (pingback): [...] followed this article, explaining how to spice up an Internet Explorer COM-Object with jQuery. While the author used [...]

Automating Internet Explorer with jQuery


I created an interactive jigsaw quiz featuring ten jumbled photos of Bollywood actors. You can drag the blocks to reassemble the images and identify the stars. It tests both your visual recognition and your knowledge of Indian cinema.

I've jumbled up pictures of 10 Bollywood actors. You can move the jumbled blocks around, like a jigsaw. Can you guess the actors? Comments sathya 23 Aug 2008 12:53 am: are you sure jigsaw 5 is right ? I guess it is A Kh. I entered the wikipedia spelling and it still says it is wrong. Sorry for the partial spoiler. sathya 23 Aug 2008 12:54 am: are you sure jigsaw 5 is right ? I guess it is A Kh. I entered the wikipedia spelling and it still says it is wrong. Sorry for the partial spoiler. S Anand 23 Aug 2008 4:15 am: @Sathya: Jigsaw 5 is not Aamir Khan, Sathya. He is on the list, though. Saurabh 23 Aug 2008 5:20 am: Nice one, and was able to solve it as well within 5 mins :) kay 24 Aug 2008 8:46 am: Any idea why the clues don't open up for me? I'd be interested in knowing. sathya 25 Aug 2008 2:30 am: I dint mean Aamir khan ... but Ak Kh (son of an actor) ... in case u r planning to post the answers, i'll wait. S Anand 27 Aug 2008 7:13 am: @Sathya: I used his name without the "e" after the first name. That seemed to have more results on a Google search that with. But you're right -- Wikipedia spells his name with the "e".\ \ Of course, all of this wouldn't be a problem if I implemented a decent fuzzy search like my other quizzes. Will do that. sathya 28 Aug 2008 3:26 am: yeah. fuzzy search is a good idea. Another approach could be to use the "did u mean" like functionality that search engines offer. Peter Norvig's approach could be used for this (which you had also linked in one of your posts).\ \ I would be curios to know which approach and how, you are going to implement the fuzzy search. Kalpesh 14 Sep 2008 6:05 am: Hi Anand,\ \ I dont know how I stubled upon your blo & since then has become a fan ;)\ \ Solved this one in 5 mins.\ \ The feed shows multiple posts for same title in bloglines. Is it because of you updating the same post? S Anand 15 Sep 2008 12:43 am: @Kalpesh: That's right. Every time I make a minor tweak to the post, it's shown again, I'm afraid. smrithy 1 Dec 2011 1:18 pm: hii, i found all actors except the 2nd ones.. can i get some clues for him???

Bollywood actors jigsaw quiz


I jumbled up pictures of 10 Bollywood actresses for this interactive jigsaw quiz. Move the blocks around to reconstruct the images and guess their names. It's a fun challenge to test your knowledge of Indian cinema stars.

I've jumbled up pictures of 10 Bollywood actresses. You can move the jumbled blocks around, like a jigsaw. Can you guess the actresses? Comments sathya 14 Aug 2008 6:52 am: the score says 10/5 for all correct answers. pls check :-) ectp 14 Aug 2008 11:14 am: 10/10 :)\ Had problems with the spelling in q.8.\ Can't complain, as the standard "Don't worry about the spelling. Just spell it like it sounds, and the box will turn green." was not there. :) S Anand 15 Aug 2008 12:47 am: Yeah, this quiz is a bit finicky on the names. Sorry about that! Malini 16 Aug 2008 2:36 am: me a fan of urs... crazy abt ur kannada song collection... Neela 20 Aug 2008 1:51 am: 10/10 :). Amazing quiz. Amazing blog. Great job! How do you find the time to do all this? warda 3 Nov 2008 12:11 pm: this quiz sux...all f d actreses were so easy 2 guess....wuff....i sure wasted my time mehru 8 Nov 2008 2:38 am: nice quiz...i dnt agree wid warda d actreses were nt dat easy 2 guess...gud job s,anand Senthilkumar.S 24 Mar 2009 9:19 am: got 9/10. interesting quiz... Nivethetha 11 Sep 2009 3:20 pm: Hi Anand, I got 9/10. Amazing quiz. Keep quizzing Juliet Rosalin Dash 21 May 2010 7:19 am: hey anand i have secured 10/10 keep going and publish this type of quizzes

Bollywood actress jigsaw quiz


I solve JavaScript's 'this' binding issues in callbacks by defining methods inside the constructor with closures. I've found this pattern more reliable than prototypes, especially when passing methods to functions like setTimeout or handling closures in loops.

The popular way to create a class in Javascript is to define a function and add methods to its prototype. For example, let's create a class Node that has a method hide(). If you had a header, say Heading , then this piece of code will hide the element. If I wanted to hide the element a second later, I am tempted to use: ... except that it won't work. setTimeout has no idea that the function node.hide has anything to do with the object node. It just runs the function. When node.hide() is called by setTimeout, the this object isn't set to node, it's set to window. node.hide() ends up trying to hide window, not node. The standard way around this is: I've been using this for a while, but it gets tiring. It's so easy to forget to do this. Worse, it doesn't work very well inside a loop: This actually hides node "c" thrice, and doesn't touch nodes "a" and "b". You've got to remember to wrap every function that contains a function in a loop. Now, compare that with this: Wouldn't something this compact be nice? To do this, the method node.hide must be bound to the object node. That is, node.hide must know that it belongs to node. And when we call anothernode.hide, it must know that it belongs to anothernode. This, incidentally, is the way most other languages behave. For example, on python, try the following: The method hide is bound to the object node. To do this in Javascript, instead of adding the methods to the prototype, you need to do two things: 1. Add the methods to the object in the constructor 2. Don't use this. Set another variable called that to this, and use that instead. Now node.hide is bound to node. The following code will work. I've taken to using this pattern almost exclusively these days, rather than prototype-based methods. It saves a lot of trouble, and I find it makes the code a lot compacter and easier to read. Comments Hari K T 3 Jan 2009 6:52 am: Good article . .. . .\ Great work . I am trying to implement it tooo.... Mani 2 Dec 2011 8:25 pm: A small correction though var Node = function(id) { var that = this; that.element = document.getElementById(id); that.hide = function() { that.element.style.display = "none"; } }; S Anand 2 Dec 2011 10:12 pm: Thanks Mani -- I've updated the code to reflect your correction.

Bound methods in Javascript


I hit CPU limits by serving dynamic pages, so I implemented a caching system using Apache .htaccess. By using mod_rewrite to check for existing files before triggering a generator script, I only regenerate content when necessary.

I don't use any blogging software for my site. I just hand-wired it some years ago. When doing this, one of the biggest problems was caching. Consider each blog entry page. Each page has the same template, but different content. Both the template and content could be changed. So ideally, blog pages should be served dynamically. That is, every time someone requests the page, I should look up the content, look up the template, and put them together. I did that, and within a few days outgrew my hosting service's CPU usage limit. Running such a program for every page hit is too heavy on the CPU. One way around this is to create the pages beforehand and serve it as regular HTML. But every time the template changes, you need to re-generate every single page. I had over 2,500 pages. That would kill the CPU usage if I changed the template often. At that point, I did a piece of analysis. Do I really need to regenerate all 2000 blog entries? Wouldn't the 80-20 rule apply? The Apache log confirmed that 20% of the URLs were accounting for 76% of the hits. So I'd be wasting my time regenerating all the pages every time I changed the template. Graph: 20% of URLs account for 76% of hits So based on this, I decided to dynamically cache the pages. When a page is requested for the first time, I create the page and save it in a cache. The next time, I'd just serve it from the cache. If the template changes, I just need to delete the cache. This way, I only generate pages that are requested, and they're only generated once. OK, so that's the background. Now let me get to how I did it. I wrote a Perl script, blog.pl, that would generate a page in the html folder whenever it is called. Next, I changed Apache's .htaccess to run this program only if the page did not exist in the html folder. The first block redirects Apache to the cache. The second block checks if the file exists in the cache. If it doesn't, the Apache redirects to the program. The program creates the page in the cache and displays it. Thereafter, Apache will just serve the file from the cache. This Apache trick can be used in another way. I keep files organised in different folders to simplify my work. But to visitors of this site, that organisation is irrelevant. So I effectively merge these folders into one. For example, I have a folder called a in which I keep my static content. I also have this piece of code: If any file is not found in the main folder, just check in the a/ folder. So I can access the file /a/hindholam.midi as as well. This can be extended to a series of folders: either as a cascade of caches, or to merge many folders into one. Comments Kannan Ekanath 17 Aug 2008 7:00 am: [http://random-thoughts-and-rambling.blogspot.com/] Hi, I wanted to know a comparison/contrast how setting up blog etc in your own hosted space compares with things like http://sites.google.com. I have always postponed this buying of a domain in favour of things like sites.google.com. Obviously I understand that the advantages would be you can control the LAF, the content, the organisation etc. But have you got a comparison doc or something on what precisely one would get if he hosts things in his own domain instead of a google/yahoo powered wiki style page? S Anand 17 Aug 2008 1:31 pm: @Kannan: Don't have anything offhand, Kannan. But buying a domain would make sense anyway -- you could point your domain to sites.google.com transparently. If you wanted to build your own blogging system for your site, though, I'd advise against it. I did it because I started in 1999 and there weren't many blogging systems then. Today, it just doesn't make sense. Nirupam 18 Aug 2008 7:43 am: Hi Want to create a site for myself. Should I go for own hosted space or should I start using sites like Geosites etc. I want to deploy web-based applications in my site. Can you please advise? S Anand 19 Aug 2008 11:24 am: @Nirupam: If you want to deploy your own applications, you should probably create your own site. Get a free hosting service to start with. I've used 110mb.com, freestarthost.com and awardspace.com, and found them to be OK.

Caching pages on Apache


I captured a time-lapse video of Canary Wharf from my office window using my Canon IXUS 70's built-in mode. The footage runs at 60x speed, showing shifting clouds and the activity of London's financial district.

I left my camera near the window of my office at Canary Wharf in time lapse mode on a cloudy day. The video is playing at 60 times normal speed. Check out the related time lapse videos. They're stunning. With this one , you can figure out which firms work till late in the night. Comments Sumit Dhar 27 Nov 2008 6:27 am: Hey Anand,\ \ Did you require some additional equipment to take snaps at particular intervals?\ \ Cheers,\ D. S Anand 27 Nov 2008 6:58 am: Nope -- my Canon IXUS 70 has a time-lapse mode. I just placed the camera on\ the floor and let it do it's job for an hour :-) Balaji 10 Feb 2009 7:53 pm: Really nice Anand... Fantastic to know that this can be done by a normal user too...

Canary Wharf time lapse video


I implemented a chain utility that wraps object methods to return the calling object when they return nothing. It turns verbose multi-line setup code, like the Google AJAX search API, into a clean, fluent syntax similar to jQuery.

One of the coolest features of jQuery is the ability to chain functions. The output of a function is the calling object. So instead of writing: ... I can instead write: A reasonable number of predefined Javascript functions can be used this way. I make extensive use of it with the String.replace function. But where this feature is not available, you an create it in a fairly unobstrusive way. Just add this code to your script: Now, chain(object) returns the same object, with all its functions replaced with chainable versions. What's the use? Well, take the Google AJAX search API. Normally, to search for the top 8 "Harry Potter" PDFs on esnips.com, I'd have to do: Instead, I can now do this: (On the whole, it's probably not worth the effort. Somehow, I just like code that looks like this.) Comments T 18 Feb 2008 12:00 pm: looks sweet!

Chaining functions in Javascript


I built a crowdsourced Dilbert search engine using Google AppEngine to make comic archives searchable by text. I invited readers to help transcribe strips, creating an exportable database for fans to find specific quotes and themes.

UPDATE: 13 Jan 2026: Scott Adams passed away. RIP. UPDATE: Mar 2023: Dilbert.com was closed but archives are accessible via the Wayback Machine (slow). Search does not work well. Dilbert viewer is an alternate interface via Reddit. UPDATE: 2012: dilbert-search.appspot.com died, likely of old age. Wouldn't it be cool to be able to search through the Dilbert archives using text? This used to be possible at Dilbert.com some years ago, as a paid service. In late 2003, I needed to find some Dilbert strips for a client, so I'd subscribed for a year. I could then search for the quotes (I happened to be looking for "outsourcing", so you can guess the context). But I can't seem to find the feature any more, even as a paid service. The site looks a lot better, of course. But I can't find strips. Well, why not type them out? After all, I'd done that with Calvin and Hobbes. This would be a much larger exercise, though. And I'm hoping to take your help. I've set up a site at dilbert-search.appspot.com. You can type in a comic randomly, starting from 2000. These will be made searchable on my Dilbert page. You can export the data and use it yourself, of course. When typing in Calvin and Hobbes, I did have a few volunteers willing to pitch in, but collaboration tools weren't easy to set up, and I ended up typing the whole thing myself. This time, I'd be delighted if even 10 people typed in just a strip each. So, here's my request, to all you Dilbert fans. 1. Please go to dilbert-search.appspot.com 2. Log in using your Google account and type in as many strips as you like 3. Bookmark it for the future, whenever you're bored As I said, the data is readily exportable from the page, so if you're looking to do cool mash-ups with it, great! And if you want the data exported in other formats, please let me know. Incidentally, I created the site using Google AppEngine. The source code is at dilbert-search.googlecode.com. Comments Dibyo 18 Sep 2008 11:50 am: Stud: I suggest that you add an option of putting tags on the comic strip apart from just the transcribed script. It might be useful while searching. I'll contribute in the meanwhile. S Anand 18 Sep 2008 5:10 pm: Thanks, Dibyo.\ \ Regarding the tags, since full text search will be supported, you could just add any additional tags in brackets at the bottom. I don't want to complicate the data structure just yet. Vanaja Sarma 19 Sep 2008 12:47 am: Hey Anand\ \ How about using these links...the first to search by keyword and the second for the actual strip using date\ \ http://www.bfmartin.ca/finder/index.php?page=home\ http://dribibu.xs4all.nl/dilbert.html S Anand 19 Sep 2008 1:07 am: @Vanaja: I've used the Dilbert strip finder before, and it's great. But it doesn't seem to be updated, and it doesn't have the actual words in the comic, which is what I'm hoping to correct. Thangaraj 25 Sep 2008 2:42 pm: I found a list of characters with image in the URL below. Guess you could link it to this in the typing page since its easier to check which character it is.\ \ http://www.unitedmedia.com/comics/dilbert/the\characters/html/character2.html Elleana 25 Sep 2008 11:34 pm: I can't wait until we're done with the Dilbert database. I actually found your site a while ago because I was searching for a Calvin and Hobbes strip. S Anand 26 Sep 2008 1:32 am: @Thangaraj: Thanks. Will link to it.\ @Elleana: Me too! We're done with about a year's worth of work now. Hope to have everything done by end of 2008. Marty 10 Feb 2009 11:13 am: I've been using Dilbert search engines to find a specific cartoon for a while now. I read it in one of the books. I recall it being a square book with four frames per page. A woman is telling a man about how her husband mooned a zoo animal and was killed by it. The man in the frame is trying not to laugh so hard that his heart blows out his back. Can anyone help me find this cartoon? I'd love to see it again. CCurly 24 Feb 2009 9:39 pm: This list (http://john.ccac.rwth-aachen.de:8000/ftp/dilbert/dilbert.txt) is almost complete, but for years earlier than 1995 the index is not a date but a reference to a Dilbert book. I see some spelling errors also, and it's missing the "who said it" part. Perhaps it's usable as a way to get some content, and you could let people check the text in stead of having them type it. Love the idea !! S Anand 24 Feb 2009 11:09 pm: Thanks CCurly! This looks to be a useful resource. A lot of strips are incomplete, but it will definitely help accelerate the effort. I'll see if I can parse it and get the data in. Sid Shniad 20 Mar 2009 4:57 pm: I'm looking for the following Dilbert cartoon, but had no luck on your site. Is there any chance you could find it and send it my way? Thanks. (It ran in 2003, possibly August 9.) Sid Shniad dilbert: i have some disturbing news. dilbert: we outsourced our customer-service function to india a few years ago. pointy haired boss: so? dilbert: apparently, they subcontracted the job to mexico. dilbert: then mexico sub-contracted to vietnam, who sub-contracted to the philippines... dilbert: ...who subcontracted it to us. dilbert: it turns out that we're the lowest cost provider, because we lie about our hold times. dilbert: in summary, we pay ourselves to hose ourselves. dilbert: are you thinking what i'm thinking? pointy haired boss: we should raise our prices? S Anand 23 Mar 2009 7:46 am: You had the date bang-on. It's at http://www.s-anand.net/dilbert.html#20030803 BlueBird 5 Apr 2009 1:39 am: I sent Scott Adams a suggestion and he made a strip from it, and like a dummy I put the paper in recycling before I saved the strip. Can you help me? It was about a co-worker who stood and talked to someone else, killing time at another co-worker's expense, until it was time for him (1st guy) to either go to lunch or go home. Then he leaves and his victimn has to stay late to get his/her work finished. Since the boss doesn't know from computers, the guy just stands and throws out computing terms in relative nonsense until he's ready to clear out. I think it ran on a Thursday about a year, to two years ago. I'd love to find a copy of it. (He's still doing it)I suggested to Mr. Adams that he make the character very fat, with suspenders, and I think he did. Thanks! Paul 15 Apr 2009 6:40 pm: I have transcribed the text from 11-14-2003 to the present, including which character say it. You could probably reformat it to work for you. Also, on dilbert.com you can now view strips all the way back to the beginning. Let me know if you want me to email it to you or something. adrian 7 Nov 2009 6:15 pm: Heya! I love the Dilbert search page. I made my own and typed a lot of strips, but deleted the database without a backup. Doh! Then I found yours. But, the page seems to have issues right now. It's slow to view and usually crashes with an error. Please fix it so I can enter lots of strips! Also thanks for making the data easily downloadable. a Vanaja 20 Jul 2010 11:34 am: Looks like its updated... http://dilbert.com/blog/entry/strip\search/ TelDaMan 24 Mar 2012 10:43 pm: Hey Anand, this is really excellent work! About a year ago I started trawling for the text and strips and found some really good resources, including yours. Thanks!! My website http://dilbert.is-a-geek.com/ automatically updates every day with new strips. It also OCR's the text on the strip and comes up a 80%+ guess on the words and then indexes them. Sadly I have to manually edit each strip to fix up the words to 100%. My next phase is to get visual recognisation going for the characters so it knows 'who said what'. My final aim is to get "deep searching" setup. This should help find strips really easily (based on test, pictures, etc) as well as suggest other strips :-)

Dilbert search engine


I indexed two years of Dilbert strips in three weeks by crowdsourcing transcriptions via a Google App Engine tool. This community-driven approach is significantly faster than my previous solo attempts at digitizing comic archives for search.

It's been three weeks since I initiated the effort to type in the Dilbert strips and the results are encouraging. About 2 years worth of strips have been typed out. So this Dilbert viewer now has a reasonably sized index for searching. Many thanks are in order here. The first is due to geek.nl, whose images I have taken the liberty of hotlinking. Thanks also to those who've taken the time out to type strips: granger95 bthangaraj gdibyo adrienbernard sundar.ramakrishnan pistohl waywardone balamurugan.cse sruppenthal ... and several others. When I initially planned to share the typing of the Dilbert strips, I anticipated that I would probably type in the most, and almost no one would pitch in. While I still have typed in the most, the contributions of the above have been of great help in more than the obvious way. When I typed out 10 years of Calvin & Hobbes, it took me 5 years. This is 2 years of Dilbert in 3 weeks. If nothing else, it's pushing me to work harder on this. So thanks again for the motivation. Here's my request again to all you Dilbert fans. 1. Please go to dilbert-search.appspot.com 2. Log in using your Google account and type in as many strips as you like 3. Bookmark it for the future, whenever you're bored Here's a Wordle cloud of all the strips typed out so far (with Dilbert and Pointy Haired Boss removed.) Dilbert (Seeing that there's more "good" than "bad", and more "like" than "dislike" or "hate", you might even call Dilbert an optimistic strip.) Comments Dibyo 21 Oct 2008 8:10 am: You've posted this again? Each time you post this, I do atleast one strip! S Anand 25 Oct 2008 6:18 am: Hmm... don't know why that happened. I didn't realise it appeared again on\ Google Reader until yesterday. Maybe I just changed a word or so. Well, all\ the better :-)\ Anand Elleana 25 Oct 2008 11:22 am: How should "Pointy Haired Boss" be capitalized? S Anand 25 Oct 2008 11:25 am: I'm not sure, Elleana. I use "Pointy haired boss" consistently. I think\ you've used "Pointy Haired Boss" consistently. Since the search is\ ultimately case-insensitive, I guess it's OK either way.\ And thanks for all your effort!\ \ Anand ray 30 Oct 2008 8:06 am: Hi,\ \ I was reading ur blog posts and found some of them to be very good.. u write well.. Why don't you popularize it more.. ur posts on ur blog took my particular attention as some of them are interesting topics of mine too;\ \ BTW I help out some ex-IIMA guys who with another batch mate run www.rambhai.com where you can post links to your most loved blog-posts. Rambhai was the chaiwala at IIMA and it is a site where users can themselves share links to blog posts etc and other can find and vote on them. The best make it to the homepage!\ \ This way you can reach out to rambhai readers some of whom could become your ardent fans.. who knows.. :)\ \ Cheers,

Dilbert search statistics


I show how to download 'non-downloadable' songs by extracting URLs from SMIL files and spoofing the RealPlayer User Agent. I used Fiddler to reverse-engineer these sites and built a Java applet to automate the process.

You know those songs on Raaga, MusicIndiaOnline, etc? The ones you can listen to but can't download? Well, you can download them. It's always been possible to download these files. After all, that's how you get to listen to them in the first place. What stopped you is security by obscurity. You didn't know the location where the song was stored, but if you did, you could download them. So how do you figure out the URL to download the file from? Let's take a look at MusicIndiaOnline first. When you click on a song, it pops up in a new window. You can't figure out the address of that window because the address bar is hidden, but you can get it by hovering over the link before clicking, or by right-clicking and copying the link location. It's always something like this: It always has the same structure: http://www.musicindiaonline.com/p/x/something/. Let's call that the something the song's key. Now, what this page does is play a .SMIL file. An SMIL file is a text file that has a list of songs to play. This file is always stored at (Notice that the key remains the same.) If you type this into your browser, you'll get a text file that you can open in Notepad. You'll find that it has a bunch of lines, two of which are interesting. There's one that reads: The content="..." part gives you the first part of the song's address. Then there's a line that reads: The src="..." part gives you the rest of the address. Putting the two together, you have the full URL at which to download the song. Except, they're a bit smart about it. These songs are meant to be played on RealPlayer, and not downloaded. So if you try to access the page using your browser, you get a 404 Page not found error. But if you typed the same page into RealPlayer, you can hear the song play. To actually download the song, you need to fool the site into thinking that your browser is RealPlayer. So first, you need to get a good browser like Firefox. Then download the User Agent Switcher add-on. Change your user agent to "RMA/1.0 (compatible; RealMedia)" and try the same song: you should be able to download it. Let me summarise: 1. Right-click on the song you want to play, and copy the URL 2. Extract the key. In the URL the key is FAfgqz0HzS.As1NMvHdW 3. Open http://www.musicindiaonline.com/g/r/ /play2.smil in your browser. Open it with Notepad 4. Switch the user agent on your browser to "RMA/1.0 (compatible; RealMedia)" 5. Put the content="..." and audio src="..." pieces together to form the URL 6. Type the URL and save the file I've automated this in my music search engine. So if you go to the Hindi, Tamil or any other online music page and click on the blue ball next to the song, you'll see a menu with a download option. The download opens a Java program that does these steps for you and saves the song in your PC. So now, you're probably thinking: 1. How did he figure this out? 2. What about other sites? 3. How does that Java program work? 4. How do I listen to these on my iPod? How did I figure this out? Fiddler. I believe a good measure of a tool's power is it's ability to be the one-word answer to a relatively broad question. For example, "Where can I find more about something?" "Google it." "How do I improve my pictures?" "Photoshop it". Fiddler's like that. "How do I find out what I'm downloading?" "Use Fiddler". It's a proxy you can install on your machine. It automatically configures your browsers when you run it. Thereafter, it tells you about all the HTTP requests that are being sent by your machine. So if you patiently walk through the logs, you'll find all the URLs that MusicIndiaOnline or any other site uses, as well as the other headers (like User-Agent) that are needed to make it work. What about other sites? I'll list a couple here. Smashits: 1. Right-click on the song you want to play, and copy the URL 2. View the source and hunt for the URL fragment "player/ra/ondemand/launch\player.cfm?something". The key is is something. 3. Open http://ww.smashits.com/player/ra/ondemand/playlist.asp?6;giftsToIndia1.rm;1,something in your browser, using Notepad 4. Switch the user agent on your browser to "RMA/1.0 (compatible; RealMedia)" 5. Type in what's inside the src="..." in your browser and save the file Oosai: 1. Right-click on the song you want to play, and copy the URL 2. View the source and hunt for the URL fragment onclick="setUsrlist(something)". The key is is something. 3. Open http://www.oosai.com/oosai\plyr/playlist.cfm?sng\id=something in your browser, using Notepad 4. Switch the user agent on your browser to "RMA/1.0 (compatible; RealMedia)" 5. Type in the URL that you see in Notepad and save the file. Try figuring out the others yourself. How does the Java program work? It does most of these steps automatically. The applet itself is fairly straightforward, and you can view it here. It takes two parameters: db, which indicates the server from which to download (M for MusicIndiaOnline, S for Smashits, etc.) and num, which is the key. But in order for an applet to be able to download files from any site, and to be able to save this on your PC, it needs to be a signed applet. Since Sun offers a tool to sign JAR files, this wasn't much of an issue. There is one pending problem with Windows Vista, however. Signed applets can't save files anywhere on Vista. They are saved in a special folder. This is being fixed, but until then, if you use Internet Explorer on Vista, you probably will be unable to find your saved files. How do I listen to these on my iPod? The saved files are in RealMedia format. Your best bet is to convert them to MP3 files using MediaCoder. Then transfer them using iTunes. Comments Murali 18 Sep 2008 6:42 am: I have to admit that, I tried and figured out the URL obfuscation. However the\ user agent add-on switch was the missing bit.\ \ The quality of these songs are not good enough to download. Anyways, I'm happy someone hacked the fake security built on these sites :)\ \ Did you try it on Raaga and Musicmazza? S Anand 18 Sep 2008 10:23 am: @Murali: I've tried it on Raaga (it's a bit subtler to crack, given that it uses cookies), but haven't visited Musicmazza so far. Vaidya 18 Sep 2008 1:02 pm: Anand, this is a great piece of info for music download enthusiasts. However, i think you should put in a word of not supporting such downloads and this is only provided for the sake of learning technology..and the user would do so at his own risk..\ \ Your blog is a publicly accessible site and being in UK you may fall under strict purview of anti-piracy rules S Anand 18 Sep 2008 4:05 pm: @Vaidya: Actually, these songs fall under the purview of the Indian Performing Rights Society (IPRS). You're right in that I may be liable for contributory infringement, but if so, it would be under the jurisdiction of Indian law, not the UK. And I'm not sure if the laws around contributory infringement is well established in India.\ \ It's one of those sad things, Vaidya. Something that's this easy to do shouldn't have to be illegal. And yet... aish 29 Sep 2008 10:54 am: hi anand! been entertaining myself reading through this pot-pourri site of urs amidst surgery & drugs. its fun! esp the calvin series & ur interview series :) cant undertsand most of the tech stuff though, this entry on downloading music included! (i simply go to the other websites with downloadable links :p). hope london's as fun as ever! Pradeep 7 Oct 2008 3:26 am: Hey, As you have so much experience with the music sites, can u prepare an auto tagging program which can fill missing tags in the songs, i.e. Music: Composer: Artist: Year etc... S Anand 7 Oct 2008 3:32 am: Oh, I want to Pradeep, believe me! I've been working on that for a while...\ it might take me a few months to get there, but it's definitely right on top\ of my priority list. AS151008 15 Oct 2008 9:48 am: how can i download songs from this site? (www.bongotrax.com) S Anand 15 Oct 2008 11:38 am: Please visit http://www.s-anand.net/hindi and search for the song you want.\ Right click on the song and select Download.\ For other languages, use http://www.s-anand.net/tamil or\ http://www.s-anand.net/telugu etc.\ \ Regards,\ Anand Satheesh 16 Oct 2008 8:09 am: But I tried in Raga.com. When copying the link location I am getting the link of page itself. Also I am not getting the ".SMIL" link..... pls help Vanitha 22 Oct 2008 6:01 am: Hi Anand,\ \ Great work! Hats off to you.\ I have just had a glimpse of ur site. I haven't explored it. But its awesome.\ \ Thanks & Regards,\ Vanitha Selvakumar 22 Oct 2008 6:24 am: Amazing and so much to learn from your site. I dont think not so many gentlemen like you share their knowledge like you do.\ Thanks & continue your good work. S Anand 23 Oct 2008 3:42 am: Thanks a lot, Vanitha.\ Regards,\ Anand S Anand 23 Oct 2008 3:42 am: Thanks a lot, Selvakumar.\ Regards,\ Anand Satheesh 23 Oct 2008 3:58 am: Sir,\ Whether it's possible in raaga.com.......i tried but I cannot follow ur way...........can u plz explain it using raaga.com as an example......plz satheesh 23 Oct 2008 11:43 pm: Sir,\ u r great and u r right. Its worked out with musiconlineindia.com. Thank u very much. But I got the song in .rm format. Can we convert this to .mp3 ? S Anand 24 Oct 2008 2:20 am: Satheesh, you can download MediaCoder from\ http://mediacoder.sourceforge.net/ and convert to MP3.\ Regards,\ Anand Satheesh 25 Oct 2008 3:44 am: Sir,\ Thank u sir, thank u very much........You have done a great help to me............I got many songs and I converted it to mp3 with mediacoder...................It is a great help that u have done to me. I thank u very much.\ Satheesh. S Junk User 26 Oct 2008 10:08 pm: Can you figure out a way to find the source of songs at tinysong.com?\ \ Their songs are in real high quality. Junk User 26 Oct 2008 10:10 pm: Why wouldn't you just play the song in MIO and use Audacity if you are anyway converting RM to Mp3 using some program? Murali 26 Oct 2008 11:59 pm: Thank u so much for your information sir.\ Really i appreciate your great work.\ KEEP ROCKING. S Anand 28 Oct 2008 1:57 am: Thanks a lot, Murali. Prathibha 29 Oct 2008 4:14 pm: Great!! It works. I tried it to download kannada songs from Kannadaaudio.com. And the song quality is also great. Thats a great work. Thanks Anand.\ \ Prathibha Sujay 30 Oct 2008 6:52 am: Hi Anand,\ it great that you have found something which is useful. But unfortunately I tried your way on www.oosai.com when I types the http://www.oosai.com/oosai\plyr/playlist.cfm?sng\id=2498 no notpad was opening up. So i could not go further. Would you please advice?\ cheers\ Sujay Kalpesh 30 Oct 2008 1:39 pm: Hi Anand,\ \ I am a new user to itunes and iPhone.\ \ How does 1 arrange music?\ I have some mp3 files. Do I copy it all to "audio" and then tag all of it individually?\ \ Where do I put my podcasts?\ \ Is there any website which facilitates hindi mp3 with tags filled in without ambiguity and it has its album art?\ \ I know that itunes might have all of this.\ But who wants to pay 40 bucks for 1 song? ;)\ \ When you reply to this comment, please email it to me (I read your blog under bloglines).\ \ Thanks for all your efforts. S Anand 3 Nov 2008 6:23 am: Sujay, that's because Oosai is even simpler than the other sites. The URL\ http://www.oosai.com/oosai\plyr/play.cfm?sng\id=2498 is a direct link to the\ song itself. You will need to download the song using a user agent of "RMA/1.0\ (compatible; RealMedia)". Alan 15 Nov 2008 11:28 pm: say i have a link like this: http://www.angelfire.com/freak3/devin/09\Tha\Mot\Lan\Dau.wma\ \ i'm not sure what happened, but before, whenever i put in a url like that in my web browser, window would pop up asking me if i wanted to save it or open it. but now it saves the file straight into my temp internet files folder and pops up in windows media player so i dont have the option of downloading the song. how can i download it now? S Anand 16 Nov 2008 4:40 am: @Alan: The easiest way may be to mail yourself the links on your Yahoo or\ Gmail account. This will convert the URLs into links. You can right-click on\ the link and select "Save link as" and place it where you wish. Rahul 26 Nov 2008 9:31 am: Hi Anand,\ \ I have downloaded many songs from you blog. Thanks a lot. But I have some songs which I didnot find in the blog and found in Musicindiaonline. I read the article as to how we can download the songs. But I am not able to change the user agent to RMA compatible in mozilla. can you please guide me.\ \ I would be very happy if you mail me the steps.\ \ Thanks,\ \ Rahul Rahul 29 Nov 2008 5:06 am: Hi Anand,\ \ I finally figured out how to change the user agent and downloaded the songs. I am very happy. Thanks for the help.\ \ Regards,\ \ Rahul bnanjunda 20 Dec 2008 6:16 am: dear anand sir i requesting\ \ sir this is ram I have downloaded many songs from you blog. Thanks a lot & hats off to u . But I have some songs which I didnot find in the blog and found in Musicindiaonline. I read the article as to how we can download the songs sir plz help me how i can get my faverates songs from raga.com & Musicindiaonline plz helpme .. guide me\ \ \ sir i m waiting for u r reply Bharat 29 Jan 2009 9:24 am: Hi Anand\ This is an excellent tip to download from musicindi and thank you very much for sharing with all .I manage to open link into mt notepad ,and understood upto content ,however i am having trouble reg src= , i am not sure exaclty what is src= , to copy ,so can you please help me giving example of a link ,i will be very thankful .Thanks again for your contribution Anand .\ \ Regards,\ Bharat S Anand 29 Jan 2009 9:37 am: Bharath, I'm afraid that doing this would require some working\ knowledge of programming. You may be better of downloading from my\ online music sites like http://www.s-anand.net/hindimp3 or by\ recording songs as they're playing, as described in\ http://www.s-anand.net/Recording\online\songs.html BHARAT 12 Feb 2009 10:49 am: Hi Anand Finally i am now able to download without any problem from notepad .Also to share with you , i use firefox add-ons download helper which can download any song you play from smashit.com and save file as .mp3.\ Can you please help me ,how to download from hummaa.com\ \ Thanks\ \ Bharat S Anand 13 Feb 2009 5:06 pm: Good to hear that, Bharat. I'm afraid I know nothing of hummaa.com, though.\ Not sure if I can be of any help. Arti 2 Apr 2009 1:15 am: Hi Anand, Thanks for the wonderful post. I was wondering if you know any application which converts mp3 to rm. Thanks Arti S Anand 2 Apr 2009 8:32 pm: Try Googling for RealProducer, Arti. That might help convert MP3 to RM Rahul 4 Aug 2009 1:29 pm: Hi Anand, I am not able download the songs of "Bhoothnath" from your blog. Can you help me? Thanks in advance. VS 7 Dec 2009 8:50 am: I am afraid that this kind of trick may not work when the obscured mp3/video/resource is streamed rather than being sent (or stored) as a file from the server. These days this trend is on high. Store your stuff in databases (rather than in file systems), locate and stream it on demand. Vikas Kapil India 13 May 2010 5:22 am: Hi there, Simple Alternatives... Some time back for english song...I used the wii player skin of Radioblogclub.com online for English Song searching and playing right there no plugin required. Also there is a nice search engine for all types of songs bomb-mp3.com with built-in Player support. Ensure you have good version updated of Flash 9 or 10 otherwise some songs may be chip-munks. For Hindi Songs....I have managed to download all or complete list of songs they have on their site.For More info you can write to me on mysite. What if you have all the songs, instead of your choosen songs, just go through complete list and search and play...as your own playlist...links to all mp3 files. Simply Simple, Kapil [NA Infosy'ite] Rahul 10 Jul 2010 9:54 am: Hi Anand, I am not able to download old movie songs of any language from your music sites. Please help. Rahul

Downloading online songs


Use the UNIQUE function in Google Spreadsheets to create dynamic lists and pivot-style summaries that update automatically. This method is much simpler than Excel's static advanced filters or complex, manual array formulas.

This is a series on what Google Spreadsheets can do that Excel can't To get a list of unique values from a list, use the UNIQUE function on Google Spreadsheets. For example, if you have a list of browsers in column A, type =UNIQUE(A1:A17) at cell B1 to get a unique list of browsers. This is a dynamic list. If you change the list of browsers, the unique list gets updated automatically. 1.1 You can use UNIQUE to create a dynamic pivot table. Quite often, you end up creating a pivot table simply to summarise by one column. The main purpose the pivot table serves is in getting a list of unique values on that column. Plus, it's a bit heavy on the UI. And every time the data changes, you need to refresh the pivot. But with the UNIQUE function, you can get a dynamic list of unique values, and you can use the COUNTIF and SUMIF function next to each value. Here is an example showing the frequency table of the browsers shown earlier. Column C does a COUNTIF of the unique values on the original list. 1.2 You can also use UNIQUE as the input to another formula: =COUNT(UNIQUE(LIST)) counts the number of unique values =COUNT(LIST)-COUNT(UNIQUE(LIST)) gives the number of duplicates =INDEX(UNIQUE(LIST),3) gives you the third unique value =LARGE(UNIQUE(LIST),3) gives you the third largest unique value ... and so on. Can I do that in Excel? You can, but not easily. There are two approaches, but each has its limitations. A. Use Advanced Filters: easy but static 1. Create an advanced filter on column A (Alt-D-F-A) 2. Select Copy to another location 3. Click in the Copy to box, and then click the cell B1 4. Select Unique records only 5. Click OK 1.3 But the list of unique values that you get here is static. If you changed one of the values, the list of unique values does not change. B. Use a complex formulae that are dynamic First, blank out the duplicates by typing this formula: =IF(COUNTIF(A$1:A1,A1)=1,A1,"") adjacent to the first cell (into B1), and dragging it all the way down (to B17). Now, create a named range (Alt-I-N-D) for these cells (B1:B17) called WithBlanks and another named range called NoBlanks for the cells one column to the right (C1:C17). On the first cell of NoBlanks (C1), type this formula: Press Ctrl-Shift-Enter rather than Enter, because it's an array formula. Now drag this all the way down (to C17). The list in column C is dynamic. If you change a cell in column A, column C is updated. But the formula can only handle one column. Google Spreadsheets' UNIQUE function works with any number of columns. If you had data in the range A1:D100 and wanted the unique rows, UNIQUE(A1:D100) gets that for you. 1.4 Note: I'm staying away from user defined functions. You could, of course, create a UNIQUE function in Excel using Visual Basic. In fact, you should! Comments Ken J 19 Sep 2008 1:10 pm: Great entry. I love your site. It is perfect for advanced users.\ \ Let's hope Google's pressure will force some innovation at excel. hk 21 May 2009 3:30 am: What about Data/Consolidate from menu?

Dynamically eliminate duplicates