Saturday, July 28, 2007

The White Stuff by Peter F. Hamilton and Graham Joyce

This is a funny little story about a bunch of low end kids finding a way of letting everyone build whatever electronic device they want for almost free. The lead character is a broker, getting more and more terrified about how this simple thing destroys markets and the capitalist economy. In the end, he is to be replaced by electronic neural networks that perform flawlessly.

It seems Peter Hamilton has some issues with capitalism as there are always some characters criticising it in his books. However, in this particular story, the ending can be only one, where humans are completely replaced by the low cost electronics. It does not destroy communism, it replaces humanity.

My guess is that this is bound to happen sooner or later. Already software glitches are more frequent than hardware ones. When is someone going to realize that we, humans, have the worst hardware possible, even by biological standards. And we're only getting fatter, slower and less efficient by the day. Would I mind being replaced by a race of star faring robotic human replicas? No way.

Converting timestamps (linux, mysql) to datetime (mssql, t-sql)

Well, a timestamp is defined as the integer number of seconds from 1st of January 1970, but not 1st January 1970 itself, that would mean 0 seconds and that is reserved as the 'zero time'.

So, converting is easy in T-Sql (Microsoft Sql Server):
@dateTime=DateAdd(second,{d '1970-01-01'},@timeStamp)
@timeStamp=DateDiff(second,{d '1970-01-01'},@dateTime)

The {d 'yyyy-MM-dd'} notation is an ODBC escape sequence.

Friday, July 27, 2007

RegexOptions.Multiline and WriteLine, AppendLine, etc.

The Multiline Regex option changes the way "^" and "$" work so that they match the beginning and the end of each line in the input string. Good for quick searches of a string in a list of newline separated strings.

The WriteLine and AppendLine and other .Net text related methods that end in Line append at the end of the input string an Environment.NewLine. This is \r\n in Windows and \n in Linux based systems. But, RegexOptions.Multiline only works on... you guessed it... \n aka new line, ignoring the good old carriage return altogether.

The solutions are: either create the string that contains the lines by adding manually \n and not using *Line, or change the regular expression to something like "^something\r?$".

Harry Potter and the Deathly Hallows

I've just finished reading the book and, while it was the usual easy read, it wasn't as much fun as I expected it to be. The two deaths in the book that were announced so dramatically are actually four, but none of the people that have actually mattered in the story. Their deaths are also irrelevant to the plot.

You see, the entire attraction of Harry Potter, for me, was the many possibilities opened by the magical universe in the books. But really, after the first and second book, there was no novelty, only the drama of Voldemort and the condescending moral crap that was always thrown in the face of the curious reader, the kind of reader that goes "what if..." whenever a new spell is described or some principle of magic is explained.

Bottom line: Harry and the kids wonder in fear and confusion the whole book, only to discover that it all was some kind of master plan and to luckily (or randomly) escape death. The passion killer ending chapter, where Harry is a father of three is not that great either.

I will be watching the 5th Potter movie someday soon, but I believe I will do it for the special effects only. Come to think of it, I can hardly remember what happened in book 5 anyway. Just as the books, only the first two films are worth anything.

Thursday, July 26, 2007

An intermittent PageRequestManagerParserErrorException

I was trying to make a site using a TabContainer and an UpdatePanel and I kept receiving a PageRequestManagerParserErrorException, but only sometimes. A page refresh would fix it and the message looked like "Error parsing near '<html>


'". The funny thing is that in the Ajax response output I had no <html> or <head>.
Trying desperately a fix detailed in this very nice post: Sys.WebForms.PageRequestManagerParserErrorException - what it is and how to avoid it , mainly forcing the start of a Session when the Page is first loaded, seemed to fix it. (put a if (!IsPostBack) Session["Siderite"]="rules"; in Page_Load)

So beware: the dreaded PageRequestManagerParserErrorException doesn't appear only when the response output is malformed, but apparently also when in some cases someone tries to start a Session from within an async postback.

If you have some other problem linked to this exception, read this post: ASP.Net Ajax and Response.Write or response filters The message received from the server could not be parsed.

Wednesday, July 25, 2007

Tuesday, July 24, 2007

Judas Unchained, by Peter F. Hamilton

This Hamilton guy is a serious writer, dude! Just having finished the first volume of this story, Pandora's Star, I was blogging desperately about how the scifi writer manages a huge book, with many characters and with colliding story arches. Now, I have finished the second and last part, Judas Unchained, which I personally think is not so good as the first, but still a damn solid scifi.

I did find myself feeling a bit of pleasure seeing how the author fails to escape cliche in the end of the story and the story lines just become accelerated and the actors predictable. But after writing this humongous book, I guess the inner emotions could not be stilled anymore and the ending had to lose some cohesion.

Bottom line: a very good book, one that shows how stories should be written: with a considerate, serious, prolonged effort to give the tale logic as well as create emotion in the soul of the reader. I would have gone for a different ending, but hey, I don't write anymore, I have no right to complain!

Saturday, July 21, 2007

Poenari - Dracula's torture from beyond the grave

The historical figure most associated with Dracula, the Wallachian prince Vlad Tepes, had this castle, called Poenari, near Curtea de Arges, and the way to get to it is to climb a 1400 steps stair. Apparently, the Step-Master is also a Romanian invention.

But to start from the beginning: my wife was terribly upset by the 40+ Celsius temperatures in Bucharest. That after telling me so many times that she likes it when it's warm. Now 40C... that's warm for you. But no, she really would have liked to exit the city (for the first time in our new Mitsubishi Colt car) and go to the seaside. The sea being that wet big thing where dirty sweaty people go to dive in while other sweaty dirty people are either stealing their money from the wallets on the beach or stealing their money by selling overpriced bottom of the barrel products and services. Oh, and there is sand there.

So I've convinced her to go to the mountains. Me, in my typical optimism, thinking "the mountains" would be a nice little cool resort like Busteni or Sinaia or Predeal, where climbing the mountain is synonymous with walking the mountain. But no, she wanted Poenari, Dracula's bloody castle.

So we've spent 4 hours getting there, the Colt performed admirably and the air conditioning system made my day. Then I was informed that seeing the castle involved the inhuman endeavour of walking The Stairs to Hell. Well, I ride a bike, 1400 steps is like... 100 floors in a bloc of flats. How hard can that be?

After 15 minutes of pure agony while my body was producing my own private sea water version and trying to reach the top by filling the mountain valley and floating me up, we reached the castle. Which is a damn ruin of a castle, with no people getting you water or food or anything. There was one guy, though, who was kind enough to charge us for the privilege to see the castle and had his own private stash of aspirin to counteract the thermal shock of going from a 19C air conditioned car to a 35C stair climb.

Vlad Tepes Dracula has had his revenge and keeps on having it. Somewhere in his grave, the body of this usually negative person must be grinning.

Friday, July 20, 2007

Judith by A Perfect Circle

A Perfect Circle has the same lead man as Tool, James Maynard. As far as I see they do really nice lyrics and music. Personally I preferred the cover of John Lennon's song Imagine, but I couldn't find the video for it in all the anime+9/11+Iraq war home made video crap that clogs YouTube.

Check out Judith, which was inspired by the illness of the singer's mother, paralysed in bed, but still praying and thanking Christ. Although if you want to see anything and witness Maynard's weirdness, check out this video of a live TV appearance.

Thursday, July 19, 2007

Fixing TabContainer to work with dynamic TabPanels

Update: The 30 September 2009 release of the AjaxControlToolkit doesn't have the error that I fix here. My patch was applied in July and from September on the bug is gone in the official release as well. Good riddance! :)

==== Obsolete post follows

Update: On June 20th 2009, Codeplex notified me that the patch I did for the ACT has been applied. I haven't tested it yet, though. Get the latest source (not latest stable version) and you should be fine.

This post was updated on the 1st of July 2008 with some clearer explanations and some error corrections thanks to Santoé who pointed out some mistakes.

My ASP.Net app uses a TabContainer, with a TabPanel in the *x code and with additional TabPanels added dynamically in codebehind.

Well, I got a lot of errors so I've decided to debug and change the control in order to fix it.

Step 1: download the AjaxControlToolKit with source included and open the project locally.

First error : Specified argument was out of the range of valid values. Parameter name: index, somewhere in the TabPanelCollection indexer. The problem actually occurs in TabContainer in LoadClientState(string clientState) where there is a for (int i = 0; i < tabState.Length ; i++). It doesn't take into account the possibility that the number of Tabs and the number of values taken from the tabState can be different. So the code must look like this: for (int i = 0; i < tabState.Length && i < Tabs.Count; i++).

Step 2: In the AjaxControlToolkit\AjaxControlToolkit\Tabs\ folder there is a TabContainer.cs file. Change for (int i = 0; i < tabState.Length ; i++) to for (int i = 0; i < tabState.Length && i < Tabs.Count; i++).

The second error is actually a thrown error in the ActiveTabIndex property setter: if (value >= Tabs.Count) { throw new ArgumentOutOfRangeException("value"); }, but it all comes from this: if (Tabs.Count==0 && !_initialized), because it doesn't take into account the possibility that the Tabs.Count is smaller than the ActiveTabIndex, but not zero. So that should look like this: if (value >= Tabs.Count && !_initialized).

I've downloaded the latest AjaxControlToolKit (version Version 1.0.20229 - Feb 29 2008) and the scratched fix above doesn't seem to work anymore. Instead, try patching the ActiveTabIndex property like this:

public virtual int ActiveTabIndex
if (_cachedActiveTabIndex > -1)
return _cachedActiveTabIndex;
if (Tabs.Count == 0)
return -1;
return _activeTabIndex;
if (value < -1)
throw new ArgumentOutOfRangeException("value");
if (Tabs.Count == 0 && !_initialized)
_cachedActiveTabIndex = value;
if (ActiveTabIndex != value)
if (ActiveTabIndex != -1
&& ActiveTabIndex < Tabs.Count)
Tabs[ActiveTabIndex].Active = false;
if (value >= Tabs.Count)
_activeTabIndex = Tabs.Count-1;
_cachedActiveTabIndex = value;
_activeTabIndex = value;
_cachedActiveTabIndex = -1;
if (ActiveTabIndex != -1
&& ActiveTabIndex < Tabs.Count)
Tabs[ActiveTabIndex].Active = true;

In other words, remove the ArgumentException code block and move the condition inside the next block, where you set the real _activeTabIndex to the highest legal value, yet you put the real value in _cachedActiveTabIndex.

Step 3: in the AjaxControlToolkit\AjaxControlToolkit\Tabs\ folder there is a TabContainer.cs file. Change the ActiveTabIndex property with the code above.

The same thing must be done in Javascript, in the Tabs.js file, if you intend to use a TabContainer with no static tabs defined. In case you do that, you will get a javascript error "Microsoft JScript runtime error: Sys.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: value
". The fix is to change the set_activeTabIndex function of the TabContainer in the file tabs.js to this:
set_activeTabIndex : function(value) {
if (!this.get_isInitialized()) {
this._cachedActiveTabIndex = value;
} else {
if (this._activeTabIndex != -1) {
if (value < -1 || value >= this.get_tabs().length) {
this._activeTabIndex = this.get_tabs().length-1;
} else {
this._activeTabIndex = value;
if (this._activeTabIndex != -1) {
if (this._loaded) {

Step 4: in the AjaxControlToolkit\AjaxControlToolkit\Tabs\ folder there is a tabs.js file. Change the set_activeTabIndex function with the code above.

This fixed it for me for now.

Step 5: Compile the now patched AjaxControlToolKit and use the resulting dll in your project instead of the default one.

As a reference, my test app does the following things:
  • Starts with a TabContainer with single TabPanel defined in the aspx
  • Has a button that adds new tabs to the TabContainer dynamically on the Click event
  • The panels have buttons in them that can be clicked
  • The active tab must be preserved during postbacks
  • The page must work both on synchronous and asynchronous postbacks

Here is the code for the page

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;

public partial class _Default : Page
private int? _tabCount;

/// <summary>
/// Keep in ViewState the number of dynamically added tabs
/// </summary>
public int TabCount
if (_tabCount == null)
if (ViewState["TabCount"] == null)
TabCount = 0;
TabCount = (int) ViewState["TabCount"];
return _tabCount.Value;
_tabCount = value;
ViewState["TabCount"] = value;

protected void Page_Load(object sender, EventArgs e)

/// <summary>
/// Add the dynamical tabs after each postback
/// </summary>
private void InitTabs()
for (int c = 0; c < TabCount; c++)

/// <summary>
/// Dynamically add a panel to the TabContainer
/// </summary>
private void AddPanel()
TabPanel tp = new TabPanel();
tp.HeaderText = "Test Dinamic";
TextBox tb = new TextBox();
Button btn = new Button();
btn.Text = "Click me!";

/// <summary>
/// Click event to add a new panel
/// and update the TabCount property
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAddPanel_Click(object sender, EventArgs e)
// do this if you didn't have any staticly defined
// tabs or else the dynamic tabs will be invisible
If (TabCount==0) TabContainer1.ActiveTabIndex=0;

theStart have released their 2007 album Ciao, Baby!

A while ago I was recommending you the female vocalist band theStart. They have released another album, entitled Ciao, Baby. Go to their mySpace page to listen to four of the ten tracks on the album or buy the tracks directly, 1$ each.
Aimee Echo and the guys :)

It seems to me that the band is moving away from rock and going towards electro-pop, which would suck, but the songs are still nice.

Wednesday, July 18, 2007

Debugging T-SQL

In order to debug SQL many people open new windows in Query Analyser or Management Studio trying to see where the errors come from and opening transactions and rolling them back and basically be miserable.

Yet, even from Microsoft SQL 2000 stored procedures had debug support. You would use Query Analyser, open Object Browser, right click a stored procedure and select Debug.

However, in SQL 2005 you can't do that anymore. Query Analyser is no longer available, the Management Studio doesn't have debug options and the SQL 2000 Query Analyser doesn't allow you to debug stored procedures on SQL 2005 servers. But there is support for SQL debugging in Visual Studio .NET, in the Professional and Team versions. Let me rephrase: If you have the Express or Standard editions you are out of luck. No SQL 2005 debugging for you. I did some queries on the web searching for third party sql debuggers, maybe something from Microsoft, like their Javascript Debugger (which works better than the in-built javascript debugging in Visual Studio, btw)

There are some ugly problems that may occur:

Maybe others. In this case, please let me know so I can update the post. Other people need help too, you know?

Even so, SQL debugging is not as straight forward as usual debugging. From the Microsoft entry on How to debug stored procedures in Visual Studio .NET I quote the Limitations of stored procedure debugging:
  • You cannot "break" execution.
  • You cannot "edit and continue."
  • You cannot change the order of statement execution.
  • Although you can change the value of variables, your changes may not take effect because the variable values are cached.
  • Output from the SQL PRINT statement is not displayed

Tuesday, July 17, 2007

Using Regular Expressions in T-SQL

Well, you can! But you need to use the sp_OA* stored procedures and VBScript. Here is a link to the user defined function that allows you to regex in sql:
Regular Expressions in T-SQL

If you check out the comments to this link you can even find a Regex search and replace solution.

You may get this error while trying to use the OLE Automation :
Msg 15281, Level 16, State 1, Line 1
SQL Server blocked access to procedure 'sys.sp_OACreate' of component 'Ole Automation Procedures' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ole Automation Procedures' by using sp_configure. For more information about enabling 'Ole Automation Procedures', see "Surface Area Configuration" in SQL Server Books Online.

The solution I've found is use sp_configure to enable Ole Automation Procedures like this:

EXEC sp_configure 'show advanced options', 1 -- make them available

EXEC sp_configure 'Ole Automation Procedures', 1 -- turn on OLE

EXEC sp_configure -- to see the new value
EXEC sp_configure 'show advanced options', 0 -- make them unavailable

Cute and weird Kelli Dayton aka Kelli Ali

I've first noticed her while she was playing with Sneaker Pimps, making the soundtrack for The Saint (Val Kilmer version). She looked so interesting with her vibrato voice, weird teeth and Asian features. I've even downloaded the whole Sneaker Pimps discografy before I found out that she was with Sneaker Pimps only briefly.

Now I was listening to the remix version of Linkin Park's My December featuring Kelli Ali and I recognized the voice immediately, even if she was singing faintly in the background. So I thought I would share her with you. Below is the video I think makes her look best, even if you can find a lot of videos with her playing live either as herself , either with TigerMouth or with Japanese bands Buck-Tick or Dropz. Also some links to her site and the Wikipedia entry.


Official web site with texts written by Kelli herself
Main Myspace site
Another MySpace site
Wikipedia entry

Monday, July 16, 2007

Text Readability and numerical methods of analysis

I've accidentally stumbled upon the concept of Text Readability while I was searching some books on Amazon. They have this feature to show you how easy it is to read by the use of some automated indexing and analysis methods. I've researched a little and I came up with this collection of links:

SMOG (Simple Measure Of Gobbledygook) estimates the years of education needed to understand a text. As input data it uses the number of polysyllables (words with 3 or more syllables) and number of sentences. Note: if your text needs a PhD to read it doesn't mean it's smart, but that it is difficult.

Flesch-Kincaid Readability Tests - the Reading Ease and Grade Level tests. They both use as input values the number of words, sentences and syllables.

Automated Readability Index - also tries to determine the years of US education needed to understand a text. It uses as input values characters/word and words/sentence.

Fry Readability Formula - it is a graphical method of determining the education level needed to understand a text. It computes the number of sentences and syllables over a hundred words and the values are plotted onto a graph.

Gunning fog index - same thing. Uses words/sentence and number of complex words and total words. A complex word is the same thing as a polysyllable, only with a higher readability index :)

Raygor Readability Estimate - looks very similar to the Fry.

Coleman-Liau Index - like the ARI and not the others, it uses characters to compute readability. Uses total number of characters, words and syllables.

Linsear Write - Uses number of simple and complex words and the number of sentences.

Zipf's law - an empirical law (based on observation rather than determined theoretically) it states that the frequency of any word in a natural language text is roughly inversely proportional to it's rank in the frequency table.

But how does that help me?!

Well, there are online tools that do the work for you:
Tests Document Readability And Improve It
Lingua::EN::Fathom Perl CGI
EULA Analyser
Style and Diction
Reproducible Fry Graphs
Readability Studio

This text for example has the following stats:
Gunning Fog index : 12.93
Coleman Liau index : 11.25
Flesh Kincaid Grade level : 11.39
ARI (Automated Readability Index) : 10.21
SMOG : 12.72
Flesch Reading Ease : 44.16

Which means that if you didn't finish high-school, you're pretty much screwed :)

Pandora's Star - Peter F. Hamilton

Funny enough, I was considering starting writing again. I even had this story in my head and I was considering the three parts it must have, maybe even three books. But how will I ever write three books, with my notorious impatience and lack of interest for details?

And then I've stumbled upon this book, Pandora's Star. Just the first part of a larger, two books, story, it amounted to 2Mb of text. That's like four slim books or two large ones. The author didn't even bother making the first part stand alone, I mean it is not a book that you can read and know it's over, but it can still be continued. It just stops in mid story and you have to read the other book (Judas Unleashed) to understand anything. So what this actually is... is a single story that has the size of about five normal sized novels.

The plot is also interesting, with many distinct arches that touch occasionally within a coherent world. Placed somewhere in the 24Th century, the human kind has spread to hundreds of worlds using artificial wormholes and has found the secret of rejuvenation. More than this, electronic implants make death obsolete, as anyone can be cloned and their memory restored even if their body is destroyed. So everything is nice and beautiful until they find a Hive-type alien who considers any other species a threat to be eliminated and the peace loving Commonwealth must now do battle with an expanding mind with no conscience, limits or the concept of pain.

I've just started Judas Unleashed, but my reading will probably be slower this time around. A very nice book, a bit humbling for any aspiring writer, it will hopefully end at least as well as it started.

Thursday, July 12, 2007

Tag challenge

It seems I have been challenged to a blog game that involves following some silly rules and getting out a post. I dutifully did that, that is: answer questions with randomly selected playlist items, and this is the result:
1. How are you feeling today?
Limp Bizkit - Hot Day

2. Will you get far in life?
Theatre of Tragedy - Cassandra

3. How do your friends see you?
AudioVent - The Energy

4. Will you get married?
Guano Apes - Quietly

5. What is your best friend’s theme song?
Sepultura - We who are not like others

6. What is the story of your life?
The Start - Trinity

7. What was high school like?
Savage Garden - I want You

8. How can you get ahead in life?
Ill Nino - Turns to Gray

9. What is the best thing about your friends?
Nigthwish - Two for Tragedy

10.What is in store for this weekend?
Muse - Citizen Erased

11.What song describes you?
3 - Alien Angel

12.To describe your grandparents?
System of a Down - X

13.How is your life going?
Breed - Happy Again

14.What song will they play at your funeral?
Moby - Everytime You Touch Me

15.How does the world see you?
Tsunami Bomb - A Lonely Chord

16.Will you have a happy life?
Red Flags - Crash Course

17.What do your friends really think of you?
System of a Down - Johnny

18.Do people secretly lust after you?
Anouk - R U Kiddin' Me

19. How can I make myself happy?
Muse - Endlessly

20.What should you do with your life?
Black Atmosphere - Muscle in Plastic

Now, the funny thing is that these were really randomly chosen. I had nothing to do with it! And it fits! :D

Tuesday, July 10, 2007

Sunday, July 08, 2007

Starcraft: Uprising - Micky Neilson

I really enjoyed the Warcraft and Starcraft ministories in the game and I was happy to hear that books have been written that take place in those parallel worlds. One of these is Starcraft Uprising.

I am disapointed to say that the book sucks. It is like a fast forward screenwrite test, with ideas that are both boring and badly conceived. The entire book can be read online, but I've lost the link, but I tell you this: it is not worth it. And the action takes place just after humans discover the Zerg, but have no idea what they are, a prequel to the Starcraft storyline.

Thursday, July 05, 2007

Wednesday, July 04, 2007

Global Dimming - a new global threat

I watched this film called Global Dimming, which you can also watch here, that basically details another global climate changer: the diminishing of solar radiation due to visible particulates. The phenomenon, coined global dimming, works contrary to global warming as mean temperature is concerned. However, it also changes the dynamics of the atmosphere, causing extensive droughts.

What that means is that if we don't stop global dimming, things like what happened in Ethiopia in 1984 will happen again, more often and worse. But if we do, while doing nothing about greenhouse gases, the global temperature will rise well faster than current climate models predict, because they didn't take into account global dimming as a factor.

It is a very interesting, albeit a bit over dramatic, film to watch so... watch it!

Tuesday, July 03, 2007

Which is worse: stupidity or indiference?

Two articles in today's BBC News: Bush spares Libby from jail term and 'Scepticism' over climate claims.

The first talks about Bush, very concerned about the "excessiveness" of the jail sentence for Lewis Libby, a vice-presidential aide tried and convicted for purposefully disclosing the name of an undercover CIA agent in order to harm her husband who opposed the war in Iraq and then perjury and obstructing justice. The sentence was 2.5 years in jail (a lot less than stealing something), but the president of the United States decided it is ... excessive. Hailed as a victory of justice, the whole trial was negated by this one action of president Bush. Who knows what this Libby guy has on him?
I was incredulous at first, as I was yesterday when I was reading an article about banning superfoods in Europe, stuff like blueberries, salmon, spinach and soy. But it was the name 'superfood' that was banned, not the food itself, so I had reasons to be incredulous after all. But what about this? How can one stand and watch the whole media being grossly manipulated, the population lied to and sent to war on bogus reasons, then, when people get convicted for this, they get sprung out of jail by Bush! To tell you the truth I am still incredulous. I must have misread something.

The second article talks about the public perception of climate change in Great Britain. Apparently, 56% still think that global warming is a matter of debate. By the time they "think" global warming is a problem, they will probably be boiling in their own air conditioning juice. What does it need to make them see? Sinking of the British isles? A tornado in London? Hell freezing over?

Monday, July 02, 2007

New New Series :)

A while ago I wrote an entry about the series I have been trying to watch to relieve by boredom. Here is a new set:

Blood Ties - this one is a collection of stereotypes like cops using only paperwork, cop made detective, tough cop love, vampire looking like a young Michelangelo and helping the police, etc. It looks and feels like a 1980 show and it might just as well be one, with new actors. Bottom line: stay away from it. It sucks ass.

Dr. Who revisited - the wife likes this show and I've come to enjoy it, too. It is is silly at times, yes, but also very serious sometimes. I also admire that is a truly British production, with a lot of satire and a real effort to keep it about England. There is also an offshoot of Doctor Who, called Torchwood which is fun, but infested by the "agency" or "bureau" or "cop/fire station" bug.

Jericho felt a lot like Lost, a series that I totally despised. The premise is similar: a bunch of Westerners are stranded in an isolated place and must survive. There is even that sort of musical bang after something new appears in the show. Also, the same "we are holier than thou" attitude. But the show does have a point, it has a script, makes sense, sort of, and is a lot better than Lost overall. The main story is that the US are attacked by a lot of nukes, apparently terrorist acts, and there are these people in a small and annoying town called Jericho that must survive the lack of infrastructure, power, the thieving gangs, warmongers from other towns, etc.
Overall, a pretty nice show if you can stomach Pamela Reed, which I can, barely. A lot of American overdone morality and stuff so sweet that can lead to quick runs to the toilet, but overall, a nice watch.

Painkiller Jane is about a female cop that doesn't seem to be able to die. Based on comic books and using the same old and decrepit "secret group hunts another secret group" it is a show that sucks just as much as any. The only positive thing in it is Kristanna Loken :)

But now I am really out of shows. What can I do?! :-S