Sunday, September 30, 2007

Circular file references are not allowed. VS2005.

I was minding my own business, making user controls in a big project we've been working for the last year and I've stumbled upon the "circular file references are not allowed." error. It was annoying not only because I haven't met before and I was certain there was no circular reference, but also because sometimes it compiled the whole site without any errors, only to fail the next build with the same error.

Google saved me when I found this discussion: It might be a little long to read and understand so here is the short version:

ASP.Net 2.0 compiles sites by creating a DLL for each folder. Therefore if you have references that are not circular in pages, controls or classes, they can be circular in these DLLs. You have two solutions:

Solution A is to use batch="false" in the compilation tag of the web.config file. This is not really a solution as it forces ASP.Net to compile a DLL for each page and control. It might work, but it slows compilation terribly and it is also not suitable for production builds, only for development.

Solution B is to move all referenced controls in a single directory. In my case there was a Controls directory and one of the controls was outside, referenced both in a control in Controls and in a page in the base directory. Moving my user control to the Controls folder solved the problem!

Bottom line: try to avoid referencing across folders.

Thursday, September 27, 2007

RegisterOnSubmitStatement and Render

Yesterday I was trying to make one of my controls keep its scroll position. Since you can't set a scrollTop attribute (which I think it is dumb, but that's another issue) I used a HiddenField and some Javascript. Mainly one at submit that loaded the scrollTop value in the hidden field and one on load to re-set it.

Since the logic of my control was mainly in the Render method of the control, I wrote the RegisterStartupScriptBlock and RegisterOnSubmitStatement lines there. It worked like a charm, but then I decided to see if it works WITHOUT Ajax.Net by removing the update panel I have been using. It failed!

I wasted like two hours before I understood that the RegisterOnSubmitStatement did not add anything to the page. I moved it in the OnPreRender method of the control and it worked!

So, long story short: DO NOT use RegisterOnSubmitStatement in the Render method of controls, as I believe the onsubmit (and possibly ClientScriptBlocks) are rendered by the page before any of the controls on it.

Someone else talks about it here.

Saturday, September 22, 2007

How to Sleep Better

How to Sleep Better is a BBC programme that tries to solve some of the issues related to sleep. It does NOT show you how to sleep better in a shorter time, it is about fixing the problems that make you sleep badly or less than you want.

The program is very interesting indeed. I was kind of put off when I didn't find it on and it is not found freely on the programme's site either, so you should seek it on BitTorrent or DC++.

Anyway, long story ridiculously short, it started from a survey of common sleep problems and then they tried to find solutions. There was a snorer, a couple with a screaming child, a woman too obsessed by work to sleep well, an old man who couldn't sleep well from his youth, a flight attendant that could not sleep well in her own home, but could do it in a hotel and some guy that worked driving night shifts.


The snorer should lose weight to relieve some of the fat on her neck, but she could also try tennis balls hooked on her back (with a bra) to stop her from sleeping on her back. But there was a thing that she put in her mouth that solved it. Apparently, snoring is treatable in 99% of the cases.

The couple with the screaming child should not have had so many children in the first place and they could also have aborted, killed or at least seriously beat them to make the kid shut up. But what they actually did was to first analyse the problem, which was that the child associated sleep with the presence of his parents close by, and then solve it by slowly going further away from the child each night when put to sleep. Eventually the brat learned to sleep by himself and not feel frightened when alone in bed.

The woman that was obsessive about her work and other problems solved it by scheduling her activities each day and sticking to the schedule and also writing down any problem that obsessed her. It seems, at least in her case, to ease the need for her brain to ceaselessly remember and analyse the problem if it was written down.

The old man was so worked up about not being able to sleep that he actually kept himself awake by worrying that he won't be able to sleep. They solved it by forcing him to try to stay awake :)

The flight attendant has a clogged bedroom. Her room looked more like a prison cell than a sanctuary (that's more or less their words) and when they rearranged her room (basically by drawing a line in it and separating a third of the room for storage and the other two thirds for relaxation). That helped her ease up and feel comfortable in her own apartment.

The night shift guy "cheated". He quit his job! :)

There was also interesting information about the drinks that keep us awake (like coffee, tea, fizz drinks) and foods (apparently aged foods like salamis and a bit potatoes) and about how some people are night people and some are day people. Trying to wake and go to sleep early would work wonders on some and terrible on others.

Try to find it, even if the presenter, Robert Winston, is a bit silly looking. He is a smart man even if he does look like one of the Marx Brothers :)

Friday, September 07, 2007

Pretender - Foo Fighters

New video from Foo Fighters. In case you are wondering why I am posting music videos in my blog, it's so that I can click on the little 'music' label and listen to whatever music I like, wherever I am. So if you want to see all music posted by me, use the labels!

Thursday, September 06, 2007

Colors in Excel, importing from HTML

Many a solution on the net propose clearing a html page of images, dropdowns, buttons, checkboxes, radiosbuttons, etc and replacing them with text, then outputing the result as an Excel file. Excel is smart enough to understand the simplest HTML and opens the html as an Excel. The user only has to save the file as an XLS and everything is set.

But what about styles? Apparently, Excel does not work with numerically defined colors, but instead it uses a predefined set of 40 colors and displays any numerically defined color as the closest of these 40. It is a drag to see a beautiful page rendered in Excel in only the coarsest of colors.

But, if you are trying to build an "Excel compatible" page, or if you want to use a separate style for the excel export (btw, Excel doesn't understand stylesheets, so you have to save all style in a <STYLE> tag and NOT use multiple class names in the same class property like "class1 class2". Older Excels might not even do that) then you have to use the colors that Excel uses. Here is a list, as taken from my Office 2003:
Dark Olive
Oliv inchis
Dark Green
Verde inchis
Dark Blue
Albastru inchis
Navy Blue
Indigo 80% Gray
#000000 #993300 #333300 #003300 #000040 #000080 #333399 #333333
Gold Red
Olive Green
Verde Oliv
Teal Blue
Albastru Verzui
Gray Blue
Gri albastrui
50% Gray
#800000 #FF6600 #808000 #008000 #008080 #0000FF #666699 #808080
Yellow Orange
Galben Portocaliu
Yellow Green
Verde galbui
Sea Green
Verde marin
Cyan Light Blue
Albastru deschis
40% Gray
#FF0000 #FF9900 #99CC00 #339966 #33CCCC #3366FF #800080 #969696
Verde aprins
Sky Blue
Violet Red
25% Gray
#FF00FF #FFCC00 #FFFF00 #00FF00 #00FFFF #00CCFF #993366 #C0C0C0
Light Yellow
Galben pal
Light Green
Verde deschis
Light Aqua
Turcoaz deschis
Light Blue
Bleu pastel

Tuesday, September 04, 2007

Sunday, September 02, 2007

Nosferatu (1922)

Can you imagine 1922? It was 85 years ago. That means that almost certainly all the people that worked on this movie are now dead! But it is still a masterpiece of cinema. They did that with no previous inspiration. After you watch this, you can only ask yourself how come people have 85 years of example and they still screw movies up. So here it is: Nosferatu