If you are attempting to convert your existing Asp.net web application to an AJAX Enabled Asp.net web application, you most probably followed down the path of merging your existing web.config with one that is provided by a new Asp.net AJAX Enabled web application’s web.config.

This worked fine for me until I tried adding a AutoCompleteExtender and needed to declare a method in code behind with the attributes

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]

That’s when I came across the following error:

The type or namespace name ‘ScriptManager’ does not exist in the namespace ‘System.Web.UI’ (are you missing an assembly reference?)

Having merged the web.config files I assumed I should not be getting the error. However, what I had failed to do was merge the .csproj files. Apparently some references are in the .csproj file. Mainly, the reference to the System.Web.Extensions.

Adding a reference to the System.Web.Extensions should fix the problem.

Recently I had to work with the ModalPopupExtender that comes with the AjaxControlToolkit. I’ve worked with it before, but this time it posed a couple of problems (that were caused not because of the toolkit, but rather other things).

Without specifying the “X” and “Y” attributes of the ModalPopUpExtender(MPE) it is supposed to, by default, render at the center of the screen. Sometimes this doesn’t happen. The solution to getting it to render at the center of the screen is adding the following doctype to your page:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

Even then, my page didn’t seem to display the popup right. Its only later that I discovered that I was using Response.flush on the page to display a “Loading…” screen. This causes the html used for the “Loading…” screen to be the first thing on the page.

Since the DOCTYPE is now forced down the page, the rest of the page does not render as per the specified DOCTYPE. This causes the MDE to render at some other position on the screen (other than the center).

To fix this, Response.Write and Flush your DOCTYPE tag first, so it becomes the first line on the page.

In the past few weeks I’ve been curious as to whether it is possible to run an Asp.Net Web Application under Linux or not. Although the feature was available in Mono, there was never a well rounded IDE to work with. With MonoDevelop that has changed, the latest version (downloaded from svn) allows you to edit pages in design view as well. It also allows you to open existing Web Application Projects created in Visual Studio 2005.

Installing it on a fresh install of Ubuntu Gutsy Gibbon however isn’t as straightforward. I’ve put together a tutorial that describes the steps necessary to do so (the biggest problem being installing packages that are necessary to compile MonoDevelop, but are not installed on a fresh install of Ubuntu).

As per the MonoDevelop website, in order to install MonoDevelop from source you need to install the following packages:

  • Gtk# 2.8.4
  • Gtksourceview#-2.0 0.10
  • Monodoc 1.0
  • Gecko#-2.0 0.10
  • MonoDevelop Source

Unfortunately a fresh install of Ubuntu doesn’t allow you to compile any of these packages and/or install them. When I first tried it out I came across a lot of errors. I finally figured out which packages once installed would aid in an easy installation of MonoDevelop from source.

First go to MonoDevelop’s website and download the following packages from there to a local folder on your disk:

  • Gtk# 2.8.4
  • Gtksourceview#-2.0 0.10
  • Monodoc 1.0
  • Gecko#-2.0 0.10

You can extract them by right clicking on the package and choosing extract.

Next we have to get the latest version of the source from mono’s svn. Open up a terminal (Applications->Accessories->Terminal) and navigate to your directory where you have these packages installed.

Type in:

$ svn co svn://anonsvn.mono-project.com/source/trunk/monodevelop

If this is a fresh install of Ubuntu you will end up with the error message:

The program ’svn’ is currently not installed. You can install it by typing:
sudo apt-get install subversion

So go ahead and install it with “sudo apt-get install subversion”. It will request to install additional packages so go ahead and accept it. Once that is done, go ahead and get the latest version of mono from svn.

Going by the list, we would have to first install Gtk#. So we bring up a terminal and in that directory type:

ramesh@Xanadu:~/Desktop/mono/gtk-sharp-2.8.4$ ./configure

Unfortunately we are stopped short and get the following output:

checking build system type… i686-pc-linuxlibc1
checking host system type… i686-pc-linuxlibc1
checking target system type… i686-pc-linuxlibc1
checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for gawk… no
checking for mawk… mawk
checking whether make sets $(MAKE)… yes
checking whether to enable maintainer-specific portions of Makefiles… no
checking for gcc… gcc
checking for gcc… (cached) gcc
checking for C compiler default output file name… configure: error: C compiler cannot create executables
See `config.log’ for more details.

This basically tells us that our C compiler cannot create executables and the reason is because a fresh install of Ubuntu doesn’t come with build essentials.

Now in order to get most of the packages installed without problems we need to add a few repositories. Start ‘System->Administration->Synaptic Package Manager’ and then ‘Settings->Repositories’. Select all the repositories for now.

Ubuntu repositories

Search for a package called ‘build-essential’, select it and install it by clicking ‘Apply’.

This will allow the C compiler to create executables.

synaptic

Attempting to configure again will result in another error

checking for al… no
configure: error: No al tool found. You need to install either the mono or .Net SDK.

After digging around and some trial and error (and figuring out missing packages) these are the list of packages I’ve found are required for a comfortable install of monodevelop. (Note: Some of these came up as dependencies of other packages. Some of these may not even be necessary, however since they had the mono name in them I have included them.)

The next step is to install a set of packages from the repositories, so fire up Synaptic Package Manager (System->Administration->Synaptic) and install the following packages:

autoconf (2.61-4)
automake (1:1.10+nogfdl-1)
intltool (0.36.2-0ubuntu1)

libgdiplus (1.2.4-2ubuntu1)
libungif4g (4.1.4-5)

libmono-dev (1.2.4-6ubuntu6)
libmono-microsoft-build2.0-cil (1.2.4-6ubuntu6)
libmono-microsoft7.0-cil (1.2.4-6ubuntu6)
libmono-microsoft8.0-cil (1.2.4-6ubuntu6)
libmono-system-data1.0-cil (1.2.4-6ubuntu6)
libmono-system-messaging1.0-cil (1.2.4-6ubuntu6)
libmono-system-messaging2.0-cil (1.2.4-6ubuntu6)
libmono-system-runtime1.0-cil (1.2.4-6ubuntu6)
libmono-system-runtime2.0-cil (1.2.4-6ubuntu6)
libmono0-dbg (1.2.4-6ubuntu6)
libmono1.0-cil (1.2.4-6ubuntu6)
mono (1.2.4-6ubuntu6)
mono-dbg (1.2.4-6ubuntu6)
mono-devel (1.2.4-6ubuntu6)
mono-gmcs (1.2.4-6ubuntu6)
mono-jit-dbg (1.2.4-6ubuntu6)
mono-mcs (1.2.4-6ubuntu6)
mono-xsp (1.2.4-1.1ubuntu1)
mono-xsp-base (1.2.4-1.1ubuntu1)
mono-xsp2 (1.2.4-1.1ubuntu1)
mono-xsp2-base (1.2.4-1.1ubuntu1)
monodoc (1.2.4-1ubuntu1) <--- This needed to be compiled, but not any more

libgtk2.0-dev (2.12.0-1ubuntu3)
libgtksourceview-dev (1.8.5-1)
libgtksourceview2.0-cil (0.10-3.1)
libgtksourceview2.0-dev (2.0.0-0ubuntu1)

gnome-sharp2 (2.16.0-7ubuntu1)
gtk-sharp (1:1.0.10-5build3)
gtk-sharp2 (2.10.2-1ubuntu2) <-- This needed to be compiled but not any more

Selecting these above packages will most likely cause the below dependencies to automatically get installed.
If not, then select them.

autotools-dev (20070306.1)
gettext (0.16.1-2ubuntu3)
m4 (1.4.10-0ubuntu2)

libgecko2.0-cil (0.11-3ubuntu3)
libglib2.0-dev (2.14.1-1ubuntu1)
libmono-accessibility1.0-cil (1.2.4-6ubuntu6)
libmono-accessibility2.0-cil (1.2.4-6ubuntu6)
libmono-cairo2.0-cil (1.2.4-6ubuntu6)
libmono-cecil0.5-cil (0.5-2)
libmono-data-tds1.0-cil (1.2.4-6ubuntu6)
libmono-peapi1.0-cil (1.2.4-6ubuntu6)
libmono-peapi2.0-cil (1.2.4-6ubuntu6)
libmono-relaxng1.0-cil (1.2.4-6ubuntu6)
libmono-security1.0-cil (1.2.4-6ubuntu6)
libmono-sharpzip0.84-cil (1.2.4-6ubuntu6)
libmono-system-web1.0-cil (1.2.4-6ubuntu6)
libmono-winforms1.0-cil (1.2.4-6ubuntu6)
libmono-winforms2.0-cil (1.2.4-6ubuntu6)
lynx (2.8.6-2ubuntu1)
mono-debugger (0.50-1)
mono-jay (1.2.4-6ubuntu6)
mono-utils (1.2.4-6ubuntu6)
monodoc-base (1.2.4-1ubuntu1)
monodoc-browser (1.2.4-1ubuntu1)
monodoc-manual (1.2.4-1ubuntu1)

libart-2.0-dev (2.3.19-3)
libatk1.0-dev (1.20.0-0ubuntu1)
libcairo2-dev (1.4.10-1ubuntu4)
libexpat1-dev (1.95.8-4ubuntu1)
libfontconfig1-dev (2.4.2-1.2ubuntu4)
libfreetype6-dev (2.3.5-1ubuntu4)
libgnomeprint2.2-dev (2.18.2-0ubuntu1)
libice-dev (2:1.0.3-3)
libpango1.0-dev (1.18.2-0ubuntu1)
libpng12-dev (1.2.15~beta5-2build1)
libsm-dev (2:1.0.3-1)
libx11-dev (2:1.1.1-1ubuntu4)
libxau-dev (1:1.0.3-2)
libxcomposite-dev (1:0.4.0-0ubuntu1)
libxcursor-dev (1:1.1.8-2)
libxdamage-dev (1:1.1.1-3)
libxdmcp-dev (1:1.0.2-2)
libxext-dev (2:1.0.3-2build1)
libxfixes-dev (1:4.0.3-2)
libxft-dev (2.1.12-2ubuntu4)
libxi-dev (2:1.1.2-1)
libxinerama-dev (2:1.0.2-1build1)
libxml2-dev (2.6.30.dfsg-2ubuntu1)
libxrandr-dev (2:1.2.1-1)
libxrender-dev (1:0.9.2-1)
x11proto-composite-dev (1:0.4-0ubuntu1)
x11proto-core-dev (7.0.10-2)
x11proto-damage-dev (1:1.1.0-2build1)
x11proto-fixes-dev (1:4.0-2ubuntu1)
x11proto-input-dev (1.4.2-1)
x11proto-kb-dev (1.0.3-2ubuntu1)
x11proto-randr-dev (1.2.1-2)
x11proto-render-dev (2:0.9.2-4ubuntu1)
x11proto-xext-dev (7.0.2-5ubuntu1)
x11proto-xinerama-dev (1.1.2-4ubuntu1)
xtrans-dev (1.0.3-2)
zlib1g-dev (1:1.2.3.3.dfsg-5ubuntu2)

gnome-sharp2-examples (2.16.0-7ubuntu1)
gtk-sharp-examples (1:1.0.10-5build3)
gtk-sharp-gapi (1:1.0.10-5build3)
gtk-sharp2-examples (2.10.2-1ubuntu2)
gtk-sharp2-gapi (2.10.2-1ubuntu2)
libgconf-cil (1:1.0.10-5build3)
libgda2-3 (1.2.4-0ubuntu1)
libgda2-common (1.2.4-0ubuntu1)
libglade-cil (1:1.0.10-5build3)
libglib-cil (1:1.0.10-5build3)
libgnome-cil (1:1.0.10-5build3)
libgtk-cil (1:1.0.10-5build3)
libvte-cil (1:1.0.10-5build3)
libvte2.0-cil (2.16.0-7ubuntu1)
libxml-libxml-common-perl (0.13-5build1)
libxml-libxml-perl (1.63-1)
libxml-namespacesupport-perl (1.09-3)
libxml-sax-perl (0.14-0.1)
monodoc-gtk2.0-manual (2.10.2-1ubuntu2)

Now that we have our packages installed, we need to install Gecko # and gtksourceview#

So go to the Gecko# folder and type in:
sudo ./configure
sudo make
sudo make install

Now go to the gtksourceview# folder and type in:
sudo ./configure
sudo make
sudo make install

Now go to the monodevelop folder and type in:
sudo ./autogen.sh

This will generate the default config file and run the default configuration. However to enable Asp.Net Web Application projects and editing Asp.Net files using the GUI, we need to reconfigure using the option:

sudo ./configure --enable-aspnet --enable-aspnetedit

Once its done do the normal:

sudo make
sudo make install

You should now have a menu item under Applicaions->Programming->MonoDevelop

That should do it.

I am now addicted to the Wii Commercial music, it has extremely catchy music and the ad has been done extremely well (in my opinion). I went in hunt of the music which is used in the ad and found out that it is a remix of Kodo by the Yoshida Brothers. So I went in hunt for the non-remixed version.

It sounds pretty good as it is, but its not something people would have caught on to. However after it goes through the commercialization process of adding beats and putting it into perspective of the ad it turns into this…

A little hunting around gave me information about the Yoshida Brothers on Wikipedia. Its quite amazing how they have turned around a traditional musical instrument to deliver this kind of fusion music. I am impressed with this and I can’t imagine what all different varieties of music exist in this world that we miss listening to.

To me, good music needs to be heard, there is no need to understand lyrics or lyrics themselves need not exist. The music itself conveys the message and the mood.

All in all I would give this ad a perfect rating in all aspects. Kudos to Nintendo

I am amazed at the fact that Google can crunch billions of pages and return your results in fractions of a second. This seems almost impossible, but it does seem to turn up your results. The results are good, by far the best results returned by any other search engine (in terms of relevance). Have you ever wondered what those number shown on the screen are?

Facebook Search Results

Out of curiosity I ran a search query for the term “facebook” which returned 164,000,000 results (0.06 seconds). If you keep running it a couple of times, those figures change. Here’s what I got on a couple of runs:

164,000,000 results (0.06 seconds)
164,000,000 results (0.18 seconds)
164,000,000 results (0.13 seconds)
164,000,000 results (0.09 seconds)
164,000,000 results (0.05 seconds)

None of them seem to take too long and the number of results is consistent (rounded off I’m guessing)

What’s surprising though is if you go through all the results you end up with 54 pages of 10 results each which amounts to 540 results. Well it does give you an option to “repeat the search with the omitted results included”. So I did and I got 100 pages with 10 results per page which makes it 1000 results. Also by including omitted results I get 150,000,000 results (0.22 seconds).

Am I missing something here or should the number of results after including the omissions be more than if I did exclude them? It also seems to take longer to search, which is understandable since people wouldn’t normally venture out after 58 pages of results. In fact, if its not within the first 10 pages (if you are patient), you tend to re-phrase you search query in hopes for more targetted results.

What I’m unable to figure out though are what do those enormous numbers mean if it isn’t returning that much information? My only guess is that it represents the number of times the keyword occurs in all the pages they have indexed (or some union/intersection if multiple keywords exist). To me it sounds misleading to say that there are that many “results” when I can’t actually see them.

It looks as thought Youtube has been experiencing an outage. I’m not sure since when it has been happening, but it seems to be quite a while now.

Youtube outage

For the longest time I wondered why Asp.net would not provide a mechanism to access elements I had created dynamically using javascript in my code behind. It turns out they do, its just that since we hardly ever use that feature any more (and are more used to accessing elements by their ID’s after dragging and dropping them) it has vanished.

What I was attempting to do was create an input box using javascript, fill it with details and post it back to the server.

Code to create the input box and place it in a div:


function addtb()
{
var getdiv = document.getElementById('holddiv');
getdiv.innerHTML = getdiv.innerHTML + "<input type='text' value='new' name='tbs' />";
count++;
}

On the code behind though, rather than accessing it using the id/name directly (you cannot do something like [input-box-id].Text = ’some text’) you have to get its value from the Request variable and use the data.


string c = Request.Form["tbs"].ToString();

Also if you wanted it to get displayed on the page the next time around you would have to recreate the elements manually in c#

TextBox t = new TextBox();
t.ID = f;
t.Attributes.Add("name", "tbs");
t.Text = f;
Page.Form.Controls.Add(t);

Although this is cumbersom, it works. I’m not sure if there is an easier way to accomplish this.

To be honest, it does not work on iGoogle either, but I blame that on the widget developers rather than on Google themselves. But for Yahoo! Pipes not to work on Yahoo’s own services is quite bad.

I recently read a post on Lifehacker about using Yahoo pipes for more efficient searches on Craigslist. Hoping to put my new found knowledge to use, I decided to help a friend search for a car on Craigslist. All went well with being able to build the pipe and get information out of it. I was very impressed with what Yahoo! Pipes was able to do. In fact I went ahead and put the RSS feed into my reader to test whether I would get timely updates and it worked (hurray!). For the record I use Google Reader and it all worked seamlessly.

Yahoo Pipes

After I sent the link though, my friend tried adding it to her my Yahoo! account and then things went wrong. Apparently, my Yahoo! does not support RSS Feeds from Yahoo! Pipes.

Yahoo Pipes Error 1

Yahoo Pipes Error 2

Does that seem wrong or is it just me? When different services from the same company don’t play well together, it just sends out a wrong message. My opinion of Yahoo! is currently that they have a bevy of great services, but they are all so cluttered and unreachable that its just not worth it. Google is heading in that direction, but they have managed to keep it somewhat clean so far.

A friend of mine recently whipped up a message of concern regarding saving the earth. I thought it was done pretty well so am posting it here…

Internet Explorer apparently has a bug in it that prevents you from using getElementsByName on document elements that have been created using document.createElement. This is a known issue with Internet Explorer and for some reason no one seems to have done anything to fix it (or is this the way it is meant to function?). The following (although perfectly legal code) does not seem to work on IE, although it works just fine on Firefox (and possibly other browsers although I haven’t tested):

<html>
<head>
<script type="text/javascript">
function addTextBox()
{
var div = document.getElementById(’addToDiv’);
var tb = document.createElement(’input’);
tb.type = ‘text’;
tb.name = ‘textbox’;
tb.value = ‘data’;
div.appendChild(tb);
}

function countBox()
{
alert(’Number of textboxes: ‘ + document.getElementsByName(’textbox’).length);
}
</script>
</head>
<body>
<input type="button" value="Add Input Box" onclick="addTextBox();" />
<input type="button" value="Count TextBoxes" onclick="countBox();" />
<div id="addToDiv">

</div>
</body>
</html>

A work around to this problem is using innerHTML as opposed to createElement in order to add a new element. This code seems to fix the problem and works fine on all browsers (I imagine):

<html>
<head>
<script type="text/javascript">
function addTextBox()
{
var div = document.getElementById(’addToDiv’);
var tb ="<span><input type=’text’ name=’textbox’ value=’data’ /></span>";

div.innerHTML = div.innerHTML + tb;
}

function countBox()
{
alert(’Number of textboxes: ‘ + document.getElementsByName(’textbox’).length);
}
</script>
</head>
<body>
<input type="button" value="Add Input Box" onclick="addTextBox();" />
<input type="button" value="Count TextBoxes" onclick="countBox();" />
<div id="addToDiv">

</div>
</body>
</html>