Monday, February 23, 2009

UpdatePanel Shrinker on Github

This is a message I got from the UpdatePanel Shrinker in a site we built:
Shrinkage: from 70000 to 10 = 0.014%.

Almost a year ago I thought of a way of compressing the UpdatePanel asynchronous output based on the previously sent information and created the UpdatePanel Shrinker. I waited all this time to test it and also I've used it in some small projects.

From today, the project is on Github, with an MIT licence, that means do whatever you want with it, but I would appreciate some words from you.

As for the details: it uses a sort of fast and dirty home made diff algorithm to compare the previously sent output for an UpdatePanel with the current one. The problem is that the effect can only be seen from the second async postback on, but when used, it yields fantastic compression rates.

You can use it for sites that are accessed from Internet challenged locations, for sites that have complex Ajax interactions and for sites that you "Ajaxify". And before I get angry comments from purists, yes, I know it is more efficient to use Ajax in a smart way to solve each problem in the best possible way, but if you just want the quick and dirty solution, like a MasterPage with a ScriptManager, an UpdatePanel and the page content in it, the Shrinker is the thing for you.

Take care to look in the Debug Output window. The shrinker will output the compression rate and any warnings it might have.

Friday, February 20, 2009

Programatically changing Web.Config

I have this cool thing I made that needs a HttpHandler to process some commands. Therefore, in the code, I am trying to change the web.config whenever possible. I do it in the usual way:
... .Save();
. That should work fine, unless you don't have writing rights on the web.config file. But you don't need only that! I gave rights to the web.config file, but I got this silly error: "changing web.config An error occurred loading a configuration file: Access to the path 'bla...bla...bla...bla.tmp' is denied.".

In other words, in order to write to the web.config you also need rights to add files to the web folder in order to create temporary files. Hmm, I thought the temporary files folder was used for that... :-|

Leaving my job was the best thing I ever did

No, I didn't leave my current job. This is more or less a quote from some blog I read. Probably Jean Paul S. Boodhoo, but I couldn't find the reference when I looked for it.

Anyway, the gist of the article was that, even if he did enjoy his position, the guy chose to look further and expand his horizons and that, in the end, made him a better developer and a better person. Is that a general idea? Of course not. I am willing to bet that changing one's job more often leads to bad things than good, but in the end you try a few options and you get to some place you can live with.

And, well, I can't stop thinking about the beginning of my career when, even if I wasn't really doing a lot of programming, I was learning a lot by the simple fact of changing jobs. Usually, the first month is extraordinary as you learn new skills, you get to know new people and new methods of doing new things. After that you "get used" to the job, like a shoe on someone's foot. It can also get smelly pretty fast, as well.

Sure, having a new job every 8 months doesn't sound so good now, but the memory of that "living on the edge" feeling still lingers. And who knows? I may find something worthwhile just by looking over the fence. What do you guys think?

Monday, February 16, 2009

Change of chat

As you have probably noticed, I've decided to replace Talkinator with Jabbify. Hopefully this will solve the problems with IE6 as well as the hour issues (never knowing when people left the last message). Also, this particular type of chat lets me know when people leave messages, so I can actually reply and join blog conversations.

Don't hesitate to leave me messages, although I would prefer them to be smarter than "fgfghhfgf". Thank you!

Thursday, February 12, 2009

this._postBackSettings.async is null or not an object

You are using a PopupControlExtender from the AjaxControlToolkit and you added a Button or an ImageButton in it and every time you click on it this ugly js error appears: this._postBackSettings.async is null or not an object. You Google and you see that the solution is to use a LinkButton instead of a Button or an ImageButton.

Well, I want my ImageButton! Therefore I added to the Page_Load method of my page or control this little piece of code to fix the bug:
private void FixPopupFormSubmit()
var script =
@"if (window.Sys&&Sys.WebForms&&Sys.WebForms.PageRequestManager&&Sys.WebForms.PageRequestManager.getInstance) {
var prm=Sys.WebForms.PageRequestManager.getInstance();
if (prm&&!prm._postBackSettings) prm._postBackSettings=prm._createPostBackSettings(false, null, null);
ScriptManager.RegisterOnSubmitStatement(Page, Page.GetType(), "FixPopupFormSubmit", script);

Hope it helps you all.

Databind an AjaxControlTookit Accordeon

I wanted to use this Accordion control on a page and so I specified the ContentTemplate and HeaderTemplate and gave it a DataTable as a DataSource and DataBound it. Nothing! No errors, no warnings, no display of any kind. After a few frustrating minutes of trying to solve it I asked buddy Google about it and it turned out that the Accordion control MUST receive a DataView as a DataSource and nothing else. Using datatable.DefaultView solved it.

Tuesday, February 10, 2009

Why TDD has the worst name ever

I've been listening to my favourite podcasts, HanselMinutes and .NetRocks, as usual and I've stumbled upon another gem of a show. It was about Test Driven Development. Why am I talking so much about this, although I don't practice it? Because I am sure I will get around and do practice it. It is not just a hype, it is the only way to do software. And I will explain why. But before that, let's talk about a confusion that has been cleared by the show I have been talking about.

The name Test Driven Development is usually associated with Automated Unit Testing. While this is mostly used only in TDD, it is not required by TDD at all. The badly chosen word Test actually means "meaningful, measurable, goals", in other words, the specifications! If you have those, you can test your application against the requirements and determine what is wrong, if anything. Without a clear view of the specs, you cannot tell if the project is performing as needed.

So if you think about TDD as Specifications Driven Development, you realize that you have been doing it all along! Admittedly, now it sounds even more like STD, but hey, sacrifices must be done in the name of improving code blog readability.

Now, I was saying that this is the only way to do software. Actually, I have explained why just above, but I will get into some personal details. I have been "blessed" with a project where the deadline was set before the specifications were drawn. Worse even, the specs did not come from people that really understand the business process, but from people using another piece of software that they want replaced. In other words, we're pretty much inventing ways of porting a badly designed Windows desktop app into ASP.Net. As this wasn't enough, we are also inventing features that were badly described by the client and starting from a partially functional ASP.Net project written by junior programmers.

What a drag! But that was actually not so bad as realizing that my developer output was slow, bad, and overall smelly and ugly. Why was that? Why couldn't I just stop whining and do what I know had to be done? Because there were no specs!. Without clearly drawn specs of not only what I had to do, but also what the initial project was supposed to do, my hands were tied. I could not refactor the code, because I had no way of telling if I broke anything. Has it ever happened to you to take a piece of code, make it better, then realize it is not working and you don't know why? The fear of that happening is the most important reason why people don't refactor. The next important factor being a manager that thinks refactoring is just a waste of time and has no vision of the future of the project.

But also, having no vision of what is to be done is the reason why developers are not motivated to do their job. Even the lowliest code monkey has to have a glimpse of the future of what they are doing, otherwise they are literally flying blind. Software development is just as much of an art as web design. It is actually strange that people don't understand there are many types of art just as there are many types of scientific thought. Even if we don't actually care how the app is gonna look as long as it does the job, we do feel pride in its functionality and it is nothing that hurts more as not knowing what that software is supposed to do and a clear way of measuring our own performance.

OK, enough of this. The bottom line is that a project needs to have clear specifications. The first test for a software is the compiler! You can even call it an automated test! ...but the last test is running through the spec list and determining if it does the job as required. Another podcast said that the process of creating automated tests has as a side effect the significant improvement of software quality, but not because of the tests themselves, but of the process of designing the tests. If your tests are meaningful, then you know what the app is to do and you have a clear vision of what failure and success mean and in the process of test design, you get to ask yourself the questions that lead to understanding the project. THAT is Test Driven Development!

Friday, February 06, 2009

Pluto - a gem of a manga

Update: the manga is now completed, after 65 chapters. The ending was a bit disappointing, but at least it didn't drag on for ages like in other situations.

Atom, the strongest robot of all You can read Pluto, by Naoki Urasawa, up to chapter 62 on It is updated often and I found it impossible to stop reading. The entire story is placed in a possible future where people and high intelligence robots coexist. There are only a few robots that have human like appearance and intelligence, and they are just beginning to understand feelings. A terrible killer is destroying them one by one, though. Who is he and what does he want?

I can hardly talk about the plot without spoiling it for you, but I can speak about my own impressions. Even if the logic/science in the series is not very consistent, the overall feeling is of great attention to detail, especially since the science is not as important as the philosophical perspective on consciousness and the soul. The drawing is also very carefully done and many of the slides are in color, as well. The plot is fascinating and it belongs to the group of stories the Japanese are so good at: the perils of too much power and the discovery of one's own limits.

I highly recommend this to lovers of manga and scifi alike. I will try to get the anime for Monster and I will probably get into reading the manga as well.

Wednesday, February 04, 2009

IE7 Pro - Internet Explorer addon

Update: There are some major issues with this addon, because on some sites (like YouTube, but not only) Internet Explorer simply closes with an error. It has become more and more annoying until I've decided to uninstall it.

What a nice little gem this is. I've just installed it, so I can't really say it is all good, but from what I've seen so far it is a wonderful addition to Internet Explorer (7 or 8!).

A few of the features that I've already observed:
  • It automatically recovers the pages and tabs opened when an computer or INTERNET explorer crash occurred.
  • Small download manager, FireFox style
  • Ad blocker - although it doesn't protect you from the javascript errors that occur when blocking ads
  • Mouse gestures
  • Background preloading of links when computer is idle enough and DNS prefetching
  • User scripts that can do all kinds of stuff, from moving YouTube windows where there is space and then showing them bigger to showing frames next to Google search results so you can open and preview the sites directly.
  • Tab history manager

But it does so much more. I am quite amazed by it. So get it, it's free: IE7Pro