Dynamic Webparts on ASP.NET 2.0

Have you ever wondered how to dynamically add Webparts to your ASP.NET project?


Well, all you have to do is programatically add a DeclarativeCatalogPart control to your page and set it’s WebPartsListUserControlPath property to a WebUserControl that has all your Webparts.


But if you like to set that WebUserControl controls dynamically? Just create it on the fly as below 😉


 


public partial class WebPartListControl : System.Web.UI.UserControl
{

   
public override bool HasControls()
   {
      
return true;
   }


   protected override ControlCollection CreateControlCollection()
   {
      ControlCollection controls = new ControlCollection(this);
      
Control x = LoadControl(“TesteUserControl.ascx”);
      x.ID =
“TesteUserControl.ascx”;
      
controls.Add(x);
      
return controls;
   
}
}


 


Note that the loaded control must keep the same ID all the time, so don’t assign any new Guid to it everytime CreateControlCollection runs.

Cyder e Interactive Designer disponíveis

Em Janeiro sairam os CTPs do Cyder e Interactive Designer (aka Sparkle).


Recomendo alguns testes, principalmente do Sparkle. O Cyder (designer de XAML integrado ao VS) ainda está muito simples, não dá pra fazer quase nada com ele. Já o Sparkle está bem completo, suportando animações entre outras coisas.


O CTP do Workflow Foundation também está disponível e bem completo no MSDN.


Para instalar, baixe o Windows SDK de Janeiro que vem com o WinFX SDK novo, e depois instale o WinFX runtime de Janeiro.


Tudo isso pode ser encontrado em http://msdn.microsoft.com/windowsvista/

Fanatismo

Retirado do site do Terra:


Para os muçulmanos, retratar a imagem de Maomé é proibido. Protestos aconteceram em várias cidades islâmicas do mundo, de Lahore a Gaza. Mas grupos muçulmanos moderados afirmaram temer que o assunto seja seqüestrado por radicais e militantes.

Em declarações dadas em Beirute, Omar Bakri Mohammad, líder do grupo islâmico Muhajiroon (banido da Grã-Bretanha), defendeu a execução de todos os envolvidos com as charges.

“No Islã, Deus disse, e o mensageiro Maomé disse, que todos os que insultam um profeta precisam ser punidos e executados,” afirmou Mohammad à rádio BBC.


 


Incrível e deprimente ver o nível que o fanatismo humano pode chegar. Não duvido que teriamos um grande problema de reprodução se no Islã Deus dissesse que todos os homens deveriam ser gays.


Fico impressionado com tamanha credulidade e submissão. 

ISAPI FastCGI support for IIS 6.0

I’ve been doing some security and stability testing for the FastCGI implementation for ISAPI (http://www.caraveo.com/fastcgi/)


The code is pretty old, and I’d like to use it to run PHP 4.4.2 on IIS 6.0 to avoid any kind of security and performance issues that using PHP ISAPI extension directly may bring.


It turn out that some bugs like calling a URL as http://localhost/test.php/teste.asp locked the server. I fixed those bugs and did some stress testing. The performance seems good, about 3 times faster than pure PHP ISAPI.


I’ll post the file here (http://www.guilherme.co.uk/public/fastcgi-0.7.src.zip) if you like to take a look or use it.

Google e filosofias sem sentido.

Há três anos atrás, na primeira vez que fui na Microsoft em Redmond, tive a oportunidade de conhecer dois caras super legais: Roger e Cort.


Um dia após bug hunting no Yukon (que virou SQL 2005), saímos para jantar em Seattle.


Durante o jantar, conversamos sobre várias coisas que poderiam ameaçar a Microsoft no futuro. Linux era a palavra da vez naquela época. Mostrei minha opinião dizendo que não acreditava que Linux era uma ameaça ao mercado doméstico ou mesmo corporativo, principalemente por sua baixa qualidade em padrões, interface gráfica consistente e com boa usabilidade entre outros fatores de performance e configuração. E os caras concordaram comigo.

Lembro também de ter falado de como admirava a Macromedia. Sempre gostei muito dos produtos da Macromedia, por sua simplicidade, estabilidade, performance e usabilidade. Disse que a Microsoft teria que ter cuidado, pois a Macromedia estava se mostrando agressiva em áreas como interface Web com seu novo ColdFusion e Flash MX com capacidade de vídeo, streaming e webservices. Quando falei isso, o Cort (que na época era do time de Windows Media) imediatamente concordou, dizendo que realmente os movimentos da Macromedia lançando coisas como Breeze e ColdFusion com gráficos e interface vetorial assíncrona estava tirando a noite dos PMs de Windows Media, graças ao novo suporte de Video no Flash.


Enquanto eu falava sobre a usabilidade zero de interfaces como KDE e Gnome, e sobre como simplicidade era importate em qualquer software, fiquei sabendo em primeira mão (e sob NDA) de uns projetinhos chamados Avalon e Indigo, e como eles funcionariam internamente. Até então, nenhum mortal sabia nada sobre como o Longhorn iria funcionar, muito menos que existiram módulos em código managed de apresentação vetorial e comunicação no OS. Achei aquilo o máximo.


Disse a eles: Se eu pudesse comprar papeis hoje nos EUA, compraria da Macromedia. Não deu outra, dois anos depois a Macromedia apresentou resultados recordes e foi comprada pela Adobe. Houve mais de 100% de ganho em suas ações.


Mesmo assim, a Macromedia só latiu.


Ela só latiu por que não soube fazer software tecnicamente simples. O ColdFusion, por exemplo, não é um simples e funcional ISAPI extension. É um monstro escrito em Java, cheio de bugs e com configuração complicada. Funciona, mas poderia ser mais simples.


O Breeze é outro monstro que inicialmente era instalado com arquivos .BAT, e executado como um serviço do Windows rodando sobre o Jrun, mesma arquitetura do ColdFusion. Não vingou em ambientes corporativos por ser impraticável de instalar. Só funciona hospedado no próprio servidor da Macromedia, a custos altos. Seria mais simples fazer o download de um MSI, clicar Next Next Finish e ter um servidor de conferências de altíssima qualidade rodando como um serviço do Windows. Poderia ser até Java, mas nenhum administrador precisaria se preocupar sobre máquina Jrun, sockets bloqueados entre interprocess comunication e pipes sendo bloqueados por incompatibildiade com serviços de firewall. Mico.


A Macromedia andou até o ano passado. No dia que a Adobe a comprou, imaginei: Se tivesse comprado os papeis da Macromedia em 2003, venderia tudo hoje e nunca mais compraria. Simplesmente por que a Adobe sabe fazer coisas simples e leves, mas não tem velocidade de mercado.

Depois disso, até ouvi de um Microsoftee que a pior coisa que a Microsoft fez nos ultimos anos foi não comprar a Macromedia.


 


Desde a conversa no restaurante em Seattle, me lembro do Roger me dizendo sobre o projeto do MSN Search e do barulho que o Google estava fazendo. Eu disse: Não acho que o Google seja uma ameaça, eles sabem fazer serviços de qualidade incrível, mas não vão ameaçar a hegemonia do Windows e Office.


 


Sempre admirei muitíssimo o Google. Adoro o site desde a primeira vez que visitei. A simpicidade dos serivços e qualidade de tudo que os caras fazem é admirável. E o que mais me inspira é que eles quebraram meu paradigma sobre o Yahoo. Sempre imaginei que o Yahoo não poderia ser batido. Lembro que em 1998 via sempre mecanismos de busca pipocando em todo lugar, até a banca de angu do Seu Gomes tinha mecanismo de busca. E eu ficava pensando: Pra quê isso? Esses caras vão querer brigar com o Yahoo? Que perda de tempo!


Três anos se passaram. Os shares do Google pularam de $30 para $420.


Até alguns dias atrás, eu ainda achava que eles seriam a ultima bolha a estourar da febre das .COMs. Vivia me falando: Google vai estourar. Google não vale $300 por share. Eles detonam, mas não vão aguentar tando dinheiro entrando. Vão estourar. Muito investimento, vai chegar uma hora que não vão conseguir dar resultado e vão despencar.


 


Há um ano criei uma conta no Adwords de graça e outra no Overture, pagando R$90,00. Em cinco minutos consegui configurar um anúncio e vê-lo online no Google. Desistí de usar o Overture após 15 dias tentando colocar a propaganda no ar.


Mesmo domindando o ramo de Advertising online, ainda me falava à noite antes de dormir: Só Adwords não valem $300 per share. Tem muito dinheiro e pouco resultado. Adwords vai parar de crescer mais cedo ou mais tarde, e eles vão cair. Não adinta ter um monte de executivos da Novel, Real Networks e Sun morendo de vontade de matar a Microsoft. A Microsoft é grande demais para cair, ou pelo menos tropeçar.


 


Gostei tando do Adwords, que criei uma conta no Adsense há uns quatro meses para tentar fazer dinheiro com visitas. Meu plano era criar um site onde qualquer usuário pudesse enviar qualquer formato de video. Este video seria encodado em Windows Media Video, e qualquer visitante poderia enviar qualquer vídeo para amigos anexados em emails. Geraria hits, e os hits gerariam grana pelo Adsense.


 


Na ultima semana ví o serviço http://video.google.com. Os caras roubaram minha ideia 🙂
Ainda não tinha forma de cobrar por vídeos publicados online. Simples, com o Flash da Macromedia como player (não poderia ser Windows Media 😉 e rápido.
Genial, muito interessante.


Hoje baixei o Google Video Player. Comprei um vídeo por $0.99 só para testar.


Depois disso, a voz na minha cabeça fala:
“É… os caras criaram o fazedor de dinheiro Adwords 2.0. E eles vão fazer um Office online, que vai ser o fazerdor de dinheiro Adword 3.0”


 


Hoje ainda acho que o Google detona. Ainda creio que eles podem ser uma bolha. Mas se um dia forem tropeçar, vai ser depois de dar muita dor de cabeça para a Microsoft.

Changing IIS ScriptMaps programmatically using ADSI

Ever needed to change IIS ScriptMaps for all your sites, witout messing up with single site custom configuration?


        private void ReplaceScriptMapping(int siteID, string mappingExtension, string newMapping)
        {
            DirectoryEntry site = new DirectoryEntry(string.Format(“IIS://localhost/W3SVC/{0}/ROOT”, siteID));
           
            bool found = false;
           
            // Get curret ScriptMaps
            object[] maps = (object[])site.InvokeGet(“ScriptMaps”);
                       
            // Search for the existing map
            for (int n = 0; n < maps.Length; n++)
            {
                string mapping = (string)maps[n];
               
                if (mapping.StartsWith(mappingExtension))
                {
                    // Replace by the new map
                    maps[n] = newMapping;
                    found = true;
                }
            }


            // If something changed, update
            if (found)
            {
                site.Properties[“ScriptMaps”].Value = maps;
                site.CommitChanges();


                listBox1.Items.Add(“Site ” + siteID.ToString() + ” modificado”);
            }
        }


        private void buttonExecutar_Click(object sender, EventArgs e)
        {
            // Loop every site
            DirectoryEntry root = new DirectoryEntry(“IIS://localhost/W3SVC”);


            foreach (DirectoryEntry site in root.Children)
            {
                if (site.SchemaClassName == “IIsWebServer”)
                {
                    ReplaceScriptMapping(int.Parse(site.Name),
                        textBoxExtension.Text,
                        textBoxNovoScript.Text);
                }
            }
        }

Dicas T-SQL

Já precisou fazer um select em uma tabela de valores e retornar uma lista separada por virgula? Algo como “Belo Horizonte,São Paulo,Rio de Janeiro,Porto Alegre”?


DECLARE @cidades VARCHAR(1024)

SELECT
@cidades = COALESCE(@cidades + ‘,’, ) + NomeCidade
FROM Cidade