Tuesday 27 February 2007

How to manufacture a celebrity...

Have you ever wondered how these beautiful girls and boys appear suddenly on your TV, singing a completely meaningless song while looking like they're having the time of their life? And how they seem to overwhelm the TV, then the radio, then appear in tabloids, then completely disappear? Where is a small tutorial on how to make your own!


The clip is from a movie called Before the Music Dies (or B4MD, how they chose to shortcut it) that exposes the bad things in the music industry today. Here is the link to the IMDb entry for the movie. I will see it as soon as I can and review it, then update this post.

Sunday 25 February 2007

Statistical discrimination

Yes, at last another one of the World Sucks series. Here I am tackling globalisation, yet not the concept, but the buzz. People that somehow are against globalisation are the ones that have actually already accepted defeat. They see the franchise epidemic and high level political and economic games as the cause, not the symptom. They are nothing but fork and torch villagers trying to kill the beast without really understanding the cause of everything. They are especially wrong since they try to kill a beast much stronger than they will ever be.

And the cause is... not dr. Frankenstein, but statistical discrimination. It is the thing that makes shops disappear if they don't give to most of the people most of what they want, that puts people that don't behave like the majority into ignorable categories, the thing that doesn't come from high up to affect us, little people, but comes from very little people to affect the higher ups.

I am talking about statistics. Once you have enough objective data you can draw conclusions based on hard mathematics, conclusions that you know are not biased and that have true meaning. It tells shop chains which are the most financially effective customers and what exactly choose to buy, it tells media conglomerates which are the people which will be most inclined to see their shows, exactly what they would want to watch and how much they are going to be influenced by commercials in order to buy products, it tells politicians which is the biggest part of the electorate and what they could be told in order to elect them.

The effect of this is statistical discrimination, or the oppression of the minority groups that don't "fit" into the whole data schema. That's why you will not get the products you really want, you will not see the shows you want to see or the movies you crave or the books you need. That's why you will see young people asking you about every day things like some vegetables you used to find when you were a child and now nobody knows what they are. They do know about some exotic fruit you've never heard about, too, and they are willing to pay ten times the price of normal fruit for the privilege to eat it.

It starts with small business, it extends to media, then to art, then to politics. Before you know it, you can either do what everyone else does or be ignored. Does it sound like 1984? That was a naive view of the world, where the actual oppressors were a very small minority, where democracy was a dream. No, the actual oppression comes from the majority of people, the idiots watching today's TV shows, eating popcorn at European Gigolo and Scooby Doo the Movie. And it all starts from you, the little people.

Every form of discrimination in this world, either good or bad (yes, there is good discrimination), is statistical in nature, but most bad ones are determined by bad entry data, like all Gypsies are dirty or all black people are thieves. This time there is a growing mother-of-all discrimination, one that starts with perfect data, ends up with the perfect solution and leaves just about everyone that matters out of it.

The only option IS globalisation, the only possible solution for the people that want to do something different is to get together, through the Internet, through the disappearance of borders, nationalities and local law, through the dismissal of all things that separate people of the same type, because the oldest and most effective method of ruling other people is divide-and-conquer. Because no one is special for being American or Romanian, these are just stupid inventions, based on geography or past connections. Each person is special for their own reasons.

Globalisation is not the cause, it is the symptom. It is the opposite of localisation, or keeping something for yourself in a single place. Globalisation is the crucible of sense: you now get to decide what is important and what not in the whole world! And the problem is not high up, it's down with you, it's your decision.

Fight stupidity; elect common sense; choose diversity; create AND consume what others create just don't limit yourself to consumption alone; say the things you mean, not the things others want to hear; fight for your right to party, but think of the people who want to sleep; do what you like, but consider the others.

Blame it on Nihei Tsutomu!

Blame! cover imageYes, Manga again. I feel the whole manga/anime intensity fading away again, since I've read the Berserk and InuYasha manga and watched the Samurai Deeper Kyo anime series. Oh... that and my wife hates me for ignoring her :)
But before this manga fading to black, I will blog one more manga series. I think that it is nicely drawn, but hard to actually follow. I am talking about hardcore sci-fi manga Blame! by Nihei Tsutomu. Placed in a distant future, humans and silicon creatures (and some crossbreeds) inhabit a huge structure and fight each other for obscure reasons. The manga is a cross between Giger and Aeon Flux and, if you remember the MTV show, just as hard to follow due to very little explaining and scarce dialogue. It is basically a world description, even if it has a central character and a plot line.
The same artist created two other manga series in the same universe: Biomega and Net Sphere Engineer. You can download most of the Nihei Tsutomu works at the Controlling Authority site.

Thursday 22 February 2007

Wednesday 21 February 2007

duteVino, an interesting Romanian Alternative/Funk band

Update: their official site is not valid anymore and there hasn't been activity on their myspace page hasn't been changed from mid 2006.

A while ago I got this song from a friend of mine, it was called gruv.mp3. No id tag, nothing about the origin of the song. I thought it was nice, but it bothered me that I didn't know who the hell sang it and, of course, where I should get more. Finally, after searching for the lyrics on Google every one month or so, I finally found out who the band was.

They are called duteVino and they are from Romania, mind you. They are singing in English, though, and there is almost no accent whatsoever. The genre of their songs is something like Alternative/Funk/Jazz. Visit their myspace site to get a feel for their music.

Tuesday 20 February 2007

A little pop rock from Finnish band LAB

How about some pop-rock music for a change? Of course I am depressed all the time if I only listen to sad music. Here is a nice, pop, rock, sexy, jiggly song from a Finnish band called LAB (their official site at labplanet.net is down, the band is disbanded): Beat the Boys



If you liked this, you might want to check two other LAB videos: Machine Girl and When Heaven Gets Dirty
Update:
I've gotten all their songs and they rock! This band is like a better Garbage! Original and strong. I just love their songs.

Update:
It's so difficult to find the band members without knowing more than Ana's first name and Pekka "Splendid" Laine having quite a common name. It doesn't help that they are Finnish, either. The story, as far as I can ascertain is that the members split up and went their separate way. Ana and Splendid worked on an album together that was supposedly finished in 2009, but was never released. Their new band is not called LAB anymore, but "Rain Hill", another commonly found name on the Internet, although not as bad as Lab, I guess. Their band page shows activity in early 2013 and even two songs that I cannot find anywhere for free, but their previews are pretty cool. It smells like another failed project. That is so bad.

Anyway, the links to the new band's Facebook page is this and the link to their official (and horrible) web site is this, where you can also listen to two 30 second previews.

Monday 19 February 2007

ASP.Net Ajax and Response.Write or response filters The message received from the server could not be parsed.

Update: If you've experienced random PageRequestManagerParserErrorException errors that seem to vanish at a simple page refresh, read this post instead: An intermittent PageRequestManagerParserErrorException

I've built a TranslationFilter object that tries to.. well... translate ASP.Net pages. Everything ran smoothly until I had to use ASP.Net Ajax. I got the infamous error "Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.".

Starting analysing the problem, I soon understood that the Ajax requests go through the same Response mechanism as a normal page request, but the output is different. In case of normal page requests you get the HTML of the page, while in Ajax requests you get something formated like this:
contentLength|controlType|controlID|content|


If one uses Response.Write, the text is inserted both in the page HTML and the Ajax request format, resulting in something like "blablabla10|updatePanel|UpdatePanel1|0123456789" which cannot be parsed correctly and results in an error. The ScriptManager.IsInAsyncPostBack property shows us if the request is Ajax or not, so we can condition the Response.Write on this.

Also, if changing the content with a HttpResponse.Filter, the length of the content is no longer equal with the declared value. So what must be done is first detect if the content is Ajax. Unfortunately we cannot check the state of the ScriptManager from inside the HttpResponse.Filter, but we can check the format of the string to modify, then modify the content AND the contentLength, else it will all result in error.

Update: the content might not be changed by you! As one of the people asking me for help on the chat discovered, the web server provider might want to put in some ads, regardless if the request is an Ajax one, thus breaking the format. You need to patch the javascript ajax engine in order to work, that means changing the content the javascript function will get in order to not cause errors. You may find the solution here.

As an example, here is my Translate method:
        private string RecursiveTranslateAjax(string content)
        {
            Regex reg = new Regex(@"^(\d+)\|[^\|]*\|[^\|]*\|",
                         RegexOptions.Singleline);
            Match m = reg.Match(content);
            if (m.Success)
            {
                int length = To.Int(m.Groups[1]);
                reg = new Regex(
                         @"^(\d+)(\|[^\|]*\|[^\|]*\|)(.{" + length + @"})\|"
                         , RegexOptions.Singleline);
                m = reg.Match(content);
                if (m.Success)
                {
                    string trans = Translate(m.Groups[3].Value);
                    return trans.Length + m.Groups[2].Value 
                       + trans + "|"
                       + RecursiveTranslateAjax(content.Substring(m.Length));
                }
            }
            return Translate(content);
        }


Update:
I met this problem also when in the page there were Unicode characters. Everything works perfectly, then you can't postback anything, because some user text contains Unicode chars. The solution I used for this was to get the offending text (whether in Page.Render or in some other places based on specific situations) and take every character and check if it is ASCII. Web Pages should be UTF8 so any character bigger than 127 should be translated into a web page Unicode char &#[char code];

The code:

string s=[my string]
StringBuilder sb=new StringBuilder();
for (int c=0; c<s.Length; c++)
{
if (s[c]>127) sb.Append("&#"+((int)s[c])+";");
else sb.Append(s[c]);
}
s=sb.ToString();


Here is the full code
    private string RecursiveTranslateAjax(string content)
    {
        // look for the basic Ajax response syntax
        Regex reg = new Regex(@"^(\d+)\|[^\|]*\|[^\|]*\|", 
              RegexOptions.Singleline);
        Match m = reg.Match(content);
        // if found, search deeper, by taking 
        // into account the length of the html text
        if (m.Success)
        {
            // custom method to get an integer value
            int length = To.Int(m.Groups[1]); 
            reg = new Regex(@"^(\d+)(\|[^\|]*\|[^\|]*\|)(.{" + length + @"})\|",
                  RegexOptions.Singleline);
            m = reg.Match(content);
            if (m.Success)
            {
                string trans = Translate(m.Groups[3].Value);
                return
                    trans.Length + m.Groups[2].Value + 
                    trans + "|" + 
                    RecursiveTranslateAjax(content.Substring(m.Length));
            }
        }
        // if not Ajax, just translate everything,
        // it must be a normal PostBack or a string of some sort.
        return Translate(content);
    }
 
    // this method only fixes the weird characters
    // but you can put here any string change you would like
    // like search and replace some words.
    private string Translate(string content)
    {
        // Html code all chars that are not ASCII, thus getting rid of strange or Unicode characters
        StringBuilder sb = new StringBuilder();
        for (int c = 0; c < content.Length; c++)
        {
            if (content[c] > 127) sb.Append("&#" + ((int) content[c]) + ";");
            else sb.Append(content[c]);
        }
        return sb.ToString();
    }
 
    protected override void Render(HtmlTextWriter writer)
    {
        //base.Render(writer);
        // render to my own text writer
        HtmlTextWriter tw=new HtmlTextWriter(new StringWriter());
        base.Render(tw);
        // get the Rendered content of the page
        string content = tw.InnerWriter.ToString();
        content = RecursiveTranslateAjax(content);
        writer.Write(content);
    }


To.Int method
public static int Int(object o)
{
    if (o == null) return 0;
    if (IsNumericVariable(o)) return (int) CastDouble(o);
    string s = o.ToString();
    if (s == "") return 0;
    Match m = Regex.Match(s, "(-\\d+|\\d+)");
    if (m.Success)
        try
        {
            return Int32.Parse(m.Groups[0].Value);
        }
        catch
        {
        }
    return 0;
}
private static double CastDouble(object o)
{
    if (o is byte) return (byte) o;
    if (o is int) return (int) o;
    if (o is long) return (long) o;
    if (o is float) return (float) o;
    if (o is double) return (double) o;
    if (o is decimal) return (double) (decimal) o;
    throw new ArgumentException("Type is not convertable to double: " + o.GetType().FullName);
}

Wednesday 14 February 2007

Berserk fans, read on! :)

Berserk imageOk, a few days ago I wrote this post that basically said Inuyasha was a great anime and that the manga goes on further and the story is still going. Here I am telling the same thing about Berserk. The story is a cross between Flesh+Blood and Hellraiser. The anime ends suddenly at chapter 11, but the manga has reached chapter 32 and goes on. You can find the manga online here and here and here.

If you can read Japanese, here is the official site for Berserk.

Monday 12 February 2007

Religion and school

Anyone who knows me knows what my stance is on this. School is something, religion is something else. There are a bunch of (traditional) ways to teach religiousness to a child, in the home as well as in church, special camps :), etc. I see no need for a religious education forcefully imposed on children inside the school, especially in a country that is not that religious. Where is the separation between state an church here?!

Yes, I know that the statistics say 85% of the population of Romania is orthodox, but that's only in name. True, active, church going religious people belong to distinct demographics like old people, some women, or people in the country side. This new surge of religion in Romania is nothing but a scam! Yes, nothing more than a marketing move.

And yet, here it is, a law that (again) makes religion one of the compulsory classes in Romanian schools. If you don't want religion, the parent must write a letter to the school requesting for it to be replaced with "moral-religious education", whatever that is.

So, what if I don't want any religion for my kid? I consider religion, especially organised religion, nothing more than a ploy to prey on human stupidity and fear. I want to raise my child away from superstitious crap. Let him watch Jesus on TV, the same as Ghost Busters!

Let me analyze what I should do in order to insure that my hypothetical offspring is not getting in school an education that contradicts that at home. First step: write the letter that places him in a special class of "moral-religious education". What that essentially does is place the child in a different group, a ready prey for ridicule or any kind of discrimination. Then he sees that in his group there are only the people that consider religion ridiculous, while in the other (larger group) there are the religious kids along with the ones that don't care about it one way or the other. So he will immediately feel the pressure of being in an apparent minority. This is a clear case of discrimination any way you put it, yet they intend to make this a law. What kind of crappy legislators do we have?! AND, after all this, I only managed to get my kid into a less religious class, probably with a priest or highly religious man as a teacher.

What would these religious people think if we were to add a compulsory "God does not exist and religion is stupid" class? They would shout much and high about discrimination and the right to choose and the local decision of allowing religious symbols or education in schools. Yet they have no problem with refusing the right to choose of atheists. Religious hypocrites? what a shock!

Here is a link to a discussion from 2004 about the legality and ethics of compulsory religious classes and their content.

Inuyasha fans, read on!

InuYasha imageUpdate 11 Oct 2009: A new anime started, continuing the InuYasha story, although some people seem to not agree with the interpretation of the manga. It is called Inuyasha Kanketsu-hen (or Inuyasha Final Act) and it starts where the first anime ended. Having just seen the first episode, I must say that I can barely understand what is going on anymore. There are so many characters and I don't really remember how they cam to be as they are now. So my recommendation is to read the chapters of the manga from about chapter 360. Here is another link where you can read InuYasha chapters online: Inuyasha on OneManga.

A while ago I've seen the Inuyasha anime series and fell in love with it. But at that time I didn't have a blog and I also thought that most Japanese anime is that good. As written in my review back then, I was soon crying for more episodes when it ended. I got a bit upset, too, because the series didn't end anywhere. It just stopped!
But, even if it is something obvious, I never thought about searching for the Inuyasha manga! Yes, the anime is based on a manga series that is, as I write this blog, ongoing and (almost) close to its finish. And you can read it! Free! online! :)

Ok, here is the link: Read on!

Friday 9 February 2007

IE annoying message and bug

Internet Explorer has a lot of "features" that are completely useless. One of them is the infamous "Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus.". So what?! Just return a false value! Why do you have to throw an error?
Anyway, I've stumbled upon a bug accidentally while reviewing a html control on DynamicDrive. This is the basic setup:
<style>
.div {
display:none;
}
</style>
<script>
function loadGoogle() {
document.getElementById('div').style.display='';
document.getElementById('iframe').src='http://www.google.com';
return false;
}
</script>
<div class=div id=div style="">
<iframe id=iframe src="" ></iframe>
</div>
<a href="#" onclick="loadGoogle()">Click me!</a>


And it returns an error. Why? Because the javascript on Google tries to focus something:
document.f.q.focus();
But the display is cleared before changing the src. For all purposes, the div has the display set to an empty string (and you can check it with an alert right after it is set). The funny thing is, and that might come as a surprise, that if you move the display:none to the style attribute of the div, the script above doesn't return any error!

So, bottom line: attribute set in style tag or css cannot be changed dynamically without an error, while a control attribute can. What's up with that?! (Bug found on IE7.0). If you encounter this weird error, try moving the display attribute (I couldn't replicate the bug with the visibility attribute) in the control style attribute.

Tuesday 6 February 2007

ASP.NET Ajax, enabling/disabling Ajax on the same software project

First of all, to turn a normal ASP.NET application to Ajax takes only a few minutes with the Microsoft Ajax.Net platform. It's as easy as moving some of the content in UpdatePanels and adding a ScriptManager. Of course, you need the Ajax.Net package installed.

What I am going to talk about is a simple way to enable/disable Ajax, and keeping the entire basic functionality intact. Why would I do that? Because sometimes you need to see the project working on a computer that doesn't have the Ajax framework installed. You might even want to work on the project itself. So this is what you do:

First of all, the ScriptManager control must appear on every Ajax page in the project, so why not move it to the MasterPage? Yes. Only one ScriptManager in the MasterPage suffices. Second of all, the UpdatePanel and the UpdateProgress controls are nothing more than normal Panels with the cool Ajax functionality added to them. So enabling or disabling Ajax surmounts to nothing more than replacing these controls with normal panels.

So here is the quick method of enabling, disabling Ajax.Net whenever you want:
Start off from the Ajax enabled application and save the web.config as web.config.ajax. Remove everything from it that resembles System.Web.Extensions and all other weird things that Ajax.Net adds to the web.config except this:
<system.web>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>

this you only replace with this:
<system.web>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="MockAspNetAjax"/>
</controls>

Save it to Web.config.noajax

You might see where I am going already. Now create a new Visual Studio project, a class library, one that you will use for all these conversions, and call it MockAspNetAjax. Go to the project Properties and change the default namespace to System.Web.UI. Add three classes that do nothing but inherit from Panel: ScriptManager, UpdatePanel, UpdateProgress. The UpdateProgress will have some additional code:
 public UpdateProgress()
{
Init += new EventHandler(UpdateProgress_Init);
}

void UpdateProgress_Init(object sender, EventArgs e)
{
Visible = false;
}

because you don't want to see the Ajax Update Progress message continuously on your page.

In order to convert an ASP.NET Ajax application to a normal postback application you follow two simple steps:
1. overwrite the web.config with web.config.noajax
2. add MockAspNetAjax as a reference or include in the project if previously excluded.

back to Ajax:

1. overwrite the web.config with web.config.ajax
2. remove MockAspNetAjax as a reference or exclude the dll from the project, while keeping the dll there.

That's it!

Of course, Ajax has a lot more stuff to it, like for example the [ScriptService] web services that are directly accessed from Javascript. Or Ajax enabled controls or other controls which don't even work without the framework. These are more complex situations which cannot be solved with such a general solution, but the same basic principles apply: use web config to avoid Register tags in each page, replace controls with mockup controls, remove HttpHandlers and HttpModules, replace javascript code that uses Ajax with something that does nothing or emulates the same behaviour (preferably) through postbacks or hidden iframes, etc.

Monday 5 February 2007

Problems when using ClientID or UniqueID before the PreRender event

In ASP.NET a Control has a fully qualified id that can be deduced from the control hierarchy and can be accessed with the properties ClientID or UniqueID. It then becomes the unique id or name of rendered html controls. It makes sense that these properties should be used right after the control hierarchy is completely defined, that means before the rendering, therefore in the PreRender.

What is not so well known is that accessing those two properties sets the _cachedUniqueID member, which sets irrevocably the ID to a control. That's why using these properties in ItemCreated events, for example, makes the html id of controls to remain the default defined one.

Example: In a DataList, you have an item template that contains a control, let's call it Control1. The rendered id in html will look like this: ctl00_ContentPlaceHolder1_UcUserControl_DataList1_ctl00_Control1 , but if you use ClientID inside the DataList_ItemCreated event, the rendered html id will be just Control1, thus making any javascript manipulation futile.

Of course, one could create a method to return the UniqueID without setting the cached value, since there are moments when the partial hierarchy is enough to define a proper id. Unfortunately, for controls without a specific and declared id, ASP.NET creates and automatic ID like ctl[number] or _ctl[number] and, of course, those methods and fields are all private or internal. One could use Reflection to get to them, but what would be the point?
UniqueID and ClientID are overridable, though, so one can change their behaviour in user defined controls.

Related links:
Accessing ClientID or UniqueID too early can cause issues

Saturday 3 February 2007

Orange Romania made idiots of themselves

Today Orange Romania had organised a concert in their brand new "Concept Store". A Concept Store is exactly what it says it is, a place where they sell you an idea, the idea of buying and using Orange phones and subscriptions. Therefore everything that takes place in that store is directly linked to image and marketing.
Well. today they blew it, royal style. 15 minutes before the start of the concert (Coma was going to perform, they are this extremely cool Deftones meets Linkin Park via Tool band) they announced that the concert was not going to take place due to complaints from the neighbours. What actually happened is that some greedy idiots thought they could get some money from Orange because they lived right above the Orange Concept Store. Well it didn't work, but the funny thing is they announced the cancellation of the concert after keeping tens of fans out in the cold while watching them through the glass doors of the place. And these were only the ones that got there earlier. I got there about 30 minutes before the announced hour for the concert so I was amazed to see a couple of suits staring at us from the other side of the glass and doing absolutely nothing about it. Then the cancellation news came.
The band members were devastated, the fans disappointed, Orange made complete fools of themselves. But will this ever reach the news? NO! There is no rape or murder involved, no political scandal. Just a few ordinary teens were completely stepped upon in the name of Orange Corporation Choppers!

Friday 2 February 2007

GetPostBackEventReference disables Command or Click events

I had this DataList with a simple ItemTemplate which contained a Select button. I wanted to click on the item and select it, without the use of the button. So what I s did is add this in DataList1.OnInit:
Panel1.Attributes["onclick"]=Page.ClientScript.GetPostBackEventReference(btnSelect, "");

Nothing was working after that. The select button didn't fire the OnItemCommand event and its ClientID was just btnSelect, not ctl00$ContentPlaceHolder1$UcGroupEdit1$DataList1$ctl00$btnSelect like it should have been. Of course, even considering the possibility of a button firing a command event when there are ten other buttons with the same ID on the page was ridiculous. What has caused this?

Well, I removed the line above and everything worked again. The only solution was to override the user control Render method, then take each item, FindControl the button and the panel, then repeat the same line, with an additional parameter that said to register the control for postback. If I didn't do that, an event validation error would have occurred. Why Render? Because using the last parameter anywhere else causes the "RegisterForEventValidation can only be called during Render();" error.

So
Panel1.Attributes["onclick"]=Page.ClientScript.GetPostBackEventReference(btnSelect, "",true);
in the Render event was the only solution. I've spent hours just understanding what is wrong. Grrr!

Update: I think the post Problems when using ClientID or UniqueID before the PreRender event is closer to the problem and its causes.

Norbert Wiener - I Am a Mathematician

Caught in a desire to be more scientist-like I've borrowed the book "I Am a Mathematician" by Norbert Wiener from a friend of mine. While being a rather old book (written in 1956), it was exactly what I was looking for: a book that described in layman's terms what the life of a true scientist is like and how he thinks.

I think the book itself was rather boring, but the world described and the way this guy was thinking really opened my eyes to things I wish I understood in my early teens. He sees, for example, the way sciences come together in one big thing called science. Even if he was a mathematician, he worked in physics, psychology and electronics, because he saw the way they worked together, not as separate unconnected subjects. He was thorough, focused and science minded. He went to the beach and thought about equations to define the movements of waves as they break against the shore.

My conclusion is that it is a wonderful insight in the mind of a scientist. It is not a popular science book, it is an autobiography, so it might get a little boring, but it also puts everything into context.

Thursday 1 February 2007

The American Mind

"Hey!", you will shout, "You are Romanian, what do you know about the American mind?". And you would be right. I don't know much about the American mind, but I do know what I see on the news and in the movies. And three movies I've recently seen opened my eyes even more.

First of all This Film Is Not Yet Rated talks about the MPAA and the way they enforce the ratings on movies. You might think that is not so important, but each rating brings with it a different possible audience size. There is a huge difference between the last two ratings R and NC-17 because an NC-17 movie doesn't get picked by distribution companies, nor does it reach into theaters.

What does that mean? It means people in the entire USA see nothing but what the MPAA deems "decent". Statistics show that in the last 50 years they mostly rate R violent movies, no matter how violent, while NC-17 are films which involve sex or even the manifestation of sexual pleasure. Do you think that has any connection with the fact the average American is a violent and militaristic puritan? Interesting enough, the MPAA "council" is completely secret. Movie directors get answers like "your film is NC-17 and we don't tell you who we are and why we rated it like this". Also, check out how the MPAA is financed by the biggest 7 film studios in Hollywood, which own 95% of all movie industry in the US and belong to conglomerates that own 90% of the entire US media!

Another interesting fact is that in that council there are two religious representatives, which brings me to the next two movies: Jesus Camp and The God Who Wasn't There.

Jesus Camp is a pretty famous documentary, because it was mostly comprised of filmed video footage and there were almost no comments in it, yet it spun a lot of controversy. Fundamentalists praised it and so did Anti-fundamentalists and atheists alike. It showed how children are entranced and then conditioned to believe in Creationism, to actively oppose abortion (when they are children), to support Bush and to think that they must act as soldiers that bring America back "under God". This camp teaches the Pentecostal religion, maybe only an extreme version of it, but what is majorly important in this religion is the Rapture. The Rapture is the second coming of Jesus, which will quickly take all true believers to Heaven, then end the world. Maybe even reformat the hard drive. 22% of Americans are Pentecostals who believe Jesus will come during their lifetime. Why wonder Americans don't really care what happens to the Earth? A major Pentecostal preacher is a weekly counselor for the White House and, interviewed in this movie, said that if Evangelicals vote, they determine the outcome of US elections. Pretty scary stuff. Even more scary is the fact that they are a big religion with between 40 and 80 million adepts and no one can do anything about this child brainwashing that they do in this camp (and a lot of others, I guess). David Byrne, from Talking Heads, said in his blog that he saw no difference between this camp and the extreme Muslim madrases training people to blow themselves up.

The God Who Wasn't There starts off like an atheist movie that proves most of Christianity is copied from other older religions, including details, and that average common sense makes believing in a religion like this kind of stupid. The special effects and direct attacks against religion made me think that this is an extreme in itself. Atheists turned anti-theists and throwing everything they have at poor people that believe stuff like that. This until the guy admitted he was a Christian Fundamentalist until the age of 15, when he actually decided everything he was taught under threat of eternal damnation was plain stupid.

OK. Back to the main point. Now I understand more about the American Mind. I understand how a nation that created the ideas of secular state, individual freedom and freedom of faith can also be hard ass conservatives, God fearing and warmongers in the same time. How most American morality is ridiculously naive when concerning sex while in the same time the US is producing the most adult content in the world. I realize why some of the Americans I talk to are really smart and funny people and others sound like rednecks from old Westerns, why US science is the most advanced in the world while in the same time regulated by people following 1st century morality.

Therefore I highly recommend seeing these films. Eye openers.