Preparem-se para ler artigos de nível 300 pra cima, são os melhores caras de SQL publicando informações interessantes de forma clara e objetiva. Ainda não terminei de ler a primeira edição, mas já posso afirmar que o SQJ tem tudo para estourar e se tornar a maior fonte de informações sobre SQL Server da Internet!

Este é o link para baixar (ou ler on-line): http://www.SolidQ.com/sqj

Por enquanto o SQJ (SolidQ Journal) ainda está somente em inglês, mas estamos alinhando com o time global para traduzir os artigos em alguns outros idiomas, dentre eles o português.

A saída da maioria das páginas ASP.NET é na forma de texto. Nos termos do HTTP, o tipo de conteúdo é chamado de “text/html”. O texto recebido pelo navegador do cliente, a partir da página ASP.NET em um servidor Web IIS, é então processado no navegador. Uma vez que esta comunicação se realiza através da Internet, que consome largura de banda. Por exemplo, uma página ASP.NET de 40 KB terá exatamente 40 KB de largura de banda da rede (além da largura de banda para os cabeçalhos enviados e recebidos pelo navegador do cliente). Para otimizar e melhorar o desempenho desse ciclo de comunicação, HTTP e compressão Gzip é usado. A compressão HTTP permitirá que 40 KB sejam compactados usando Gzip para uns 12-15 KB, poupando 25-28 KB de largura de banda da rede. Agora, considere as implicações dessa poupança de largura de banda da rede ao longo de centenas de milhares de pedidos tratados por cada dia pelo servidor IIS. Isto pode ser grande? Não é? Adicione a isso o fato de que seu site irá carregar mais rapidamente e, assim, melhorar a experiência do usuário e a percepção do seu site.

Como habilitar a compactação HTTP em nossas páginas ASP.NET?

A primeira coisa que você deve saber é que a compressão HTTP pode ser feita usando o Gzip ou Deflate. Para usar a compactação HTTP em nossas páginas ASP.NET sem editar cada uma das páginas, vamos fazer uso de dos eventos do ciclo de vida no arquivo Global.asax.

Um arquivo Global.asax é colocado na pasta do seu aplicativo ASP.NET. Ele pode conter métodos para lidar com eventos de ciclo de vida. Os nomes e detalhes de todos os eventos de que pode manipular no arquivo Global.asax está além do escopo deste tutorial. Mas um evento que irá tratar e onde vamos inserir o nosso código é o PreRequestHandlerExecute. Ocorre imediatamente antes do ASP.NET começar a executar um manipulador de eventos. A assinatura do método completo para lidar com este evento é apresentado abaixo:

void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{

}

Nota: A convenção de nomenclatura usada pelo ASP.NET para vincular eventos de aplicação como PreRequestHandlerExecute com manipuladores de eventos reais é usar o nome do objeto que dispara o evento, neste caso Application, com o sublinhado (_ personagem) e, finalmente, vem o evento próprio nome, que no nosso caso é PreRequestHandlerExecute.
 

Por que o nosso padrão de HTTP Compression Method será Deflate?

Nós vamos usar a compressão Deflate HTTP por padrão, pois oferece uma compressão e descompressão mais rápida. Para mais detalhes, leia este artigo: Gzip vs Deflate: Which is the faster HTTP compression method?

Vamos direto ao código:

<%@ Application %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
 
<script runat="server">
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
        HttpApplication app = sender as HttpApplication;
        String acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;
         if (!(app.Context.CurrentHandler is Page ||
app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
               app.Request["HTTP_X_MICROSOFTAJAX"] != null)
               return;
         if (acceptEncoding == null || acceptEncoding.Length == 0)
               return;
         acceptEncoding = acceptEncoding.ToLower();
         if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        {               // defalte
               app.Response.Filter = new DeflateStream(prevUncompressedStream,
                       CompressionMode.Compress);
               app.Response.AppendHeader("Content-Encoding", "deflate");
        } else if (acceptEncoding.Contains("gzip"))
        {               // gzip
               app.Response.Filter = new GZipStream(prevUncompressedStream,
                       CompressionMode.Compress);
               app.Response.AppendHeader("Content-Encoding", "gzip");
        }
}
</script>

Explicação
Pessoal, o código acima é tudo o que é necessário para habilitar a compactação HTTP em suas páginas ASP.NET. Vamos agora concentrar-se sobre os detalhes do código apresentado acima.

A primeira coisa que fazemos é para dizer ao compilador que o código ASP.NET vai ser na linguagem, C #.

Em seguida, importar os namespaces que o nosso código irá utilizar. Lembre-se, o GZipStream e classes DeflateStream são novos no ASP.NET 2.0 e que estão presentes no namespace System.IO.Compression.


Em seguida, nós declaramos o método que manipulará o evento o ciclo de vida PreRequestHandlerExecute. Como explicado anteriormente, esse evento ocorre antes que ASP.NET começe a executar um manipulador de eventos.

void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{

}

Em seguida, obtemos do objeto remetente, usando a palavra-chave, em uma variável do tipo HttpApplication, porque este é o objeto que acionou o evento para começar. Se o navegador cliente suporta os fluxos de conteúdo dos tipos, gzip e deflate, o valor deste cabeçalho irá contê-los. Uma referência ao atual fluxo de saída descompactado objeto usado pelo ASP.NET para enviar o texto puro (ou binários) de saída para o navegador do cliente é guardada no objeto prevUncompressedStream.

Nós tentamos garantir que o recurso solicitado é uma página ASP.NET válida ou um Web Service. Se não for, então não fazemos nada. Além disso, foram verificados “HTTP_X_MICROSOFTAJAX item” na coleção HttpRequest. Este item está freqüentemente presente quando se utiliza AJAX em páginas ASP.NET. Quando o conteúdo AJAX é comprimido, a página pode acionar exceções. Assim, não comprimir a página se AJAX está sendo usado.

Nota: Agora você pode ativar a compactação HTTP, não apenas em suas páginas web ASP.NET, mas em seus serviços web ASP.NET. Tudo que você tem a fazer é procurar também o nome do tipo de propriedade CurrentHandler e combiná-lo com “SyncSessionlessHandler”.

Finalmente, verifique se o navegador do cliente não envia o “Accept-Encoding”, ou se ele mandou, mas seu valor está vazio, significa que o navegador do cliente não pode processar o conteúdo compactado. Neste caso, basta retornar a este método e não fazer nada.

HttpApplication app = sender as HttpApplication;
string acceptEncoding = app.Request.Headers["Accept-Encoding"];
Stream prevUncompressedStream = app.Response.Filter;

if (!(app.Context.CurrentHandler is Page ||
app.Context.CurrentHandler.GetType().Name == “SyncSessionlessHandler”) ||
app.Request["HTTP_X_MICROSOFTAJAX"] != null)
return;

if (acceptEncoding == null || acceptEncoding.Length == 0)
return;

Em seguida, defina o caso de todos os personagens no valor do cabeçalho acceptEncoding estejam minúsculas. Nós fazemos isso para que quando tentamos comparar a presença de seqüências como “gzip” e “deflate” a variável acceptEncoding, valores como o ” GZIP “, ” gZiP “, e ” Gzip” será interpretado como uma mesma coisa.

acceptEncoding = acceptEncoding.ToLower();

Por fim, buscamos o cabeçalho acceptEncoding para o valor “deflate”. Se estiver presente, criamos um novo objeto DeflateStream e defina a propriedade Response.Filter a este valor. Isto significa que todas as chamadas para Response.Write () no código ASP.NET realmente acessam o objeto DeflateStream. Em seguida, nós também definimos a saída de cabeçalho “Content-Encoding”, com o valor de “deflate” para indicar ao navegador do cliente que a codificação de conteúdo que vai ser Deflate comprimido para que ele possa descompactá-lo no client-side.

Por último, se o cliente navegador não suporta stream ” deflate ” mas apóia o “gzip” stream, fazemos uso de GZipStream no local do objeto DeflateStream.

if (acceptEncoding.Contains(“deflate”) || acceptEncoding == “*”)
{
// defalte
app.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader(“Content-Encoding”, “deflate”);
} else if (acceptEncoding.Contains(“gzip”))
{
// gzip
app.Response.Filter = new GZipStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader(“Content-Encoding”, “gzip”);
}

Isso é tudo pessoal. Agora faça as alterações descritas acima e acesse uma página ASP.NET no seu site. Você pode verificar se uma página ASP.NET está sendo comprimida ou não usando uma versão online gratuita, aqui.

Um rápido exemplo de como exibir ícone na área de notificação do Windows com WPF. Você precisa adicionar no seu projeto referências para os namespaces: System.Window.Forms e System.Drawing assemblies.

// Exemplo de exibição de ícone na área de notificação

public partial class Window1 : System.Windows.Window
{
    public Window1()
    {
        InitializeComponent();
        System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
        ni.Icon = new System.Drawing.Icon("Main.ico");
        ni.Visible = true;
        ni.DoubleClick +=
            delegate(object sender, EventArgs args)
            {
                this.Show();
                this.WindowState = WindowState.Normal;
            };
    }

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == WindowState.Minimized)
            this.Hide();

        base.OnStateChanged(e);
    }
}

Abraços, até o próximo post.

Com 50 milhões de tweets por dia e uma base de dados que cresce em ritmo acelerado, empresa encontrou no banco de dados livre uma alternativa rápida e escalável.

Leia mais no PCWord.

[http://computerworld.uol.com.br/tecnologia/2010/02/23/crescimento-faz-twitter-trocar-o-mysql-pelo-cassandra/]

Quem desenvolve aplicações para web sabe o quanto é difícil compatibilizar o design nos vários navegadorse disponíveis no mercado. Tê-los na mesma máquina é uma alternativa, mas nem sempre é possível.

A melhor alternativa que achei até o presente momento foi um aplicativo distribuído pela Xenocode. Com o Xenocode Browser Sandbox é possível fazer testes e mais testes dos principais navegadores disponíveis no mercado entre eles: Microsoft Internet Explorer 6, 7 e 8, Mozilla Firefox 2 e 3, Google Chrome, Opera e o Safari.

Basta instalar o plugin no seu navegador e clicar no browser desejado, que ele o abre em uma nova janela. É como se tivesse o navegador instalado em sua máquina. (Ele realmente abre como se estivesse instalado, não é screenshots dos navegadores e sistemas operacionais)

Para acesso aos browser é só acessar o site da Xenocode.

Tecnologia quer transformar aparelhos em intérpretes simultâneos.
Diferenças de voz e de sotaques é desafio para os desenvolvedores.

O Google está desenvolvendo um sistema de tradução simultânea para telefones celulares. Com a nova tecnologia, a empresa quer transformar os aparelhos em intérpretes em tempo real.

“Acreditamos que a tradução simultânea dos diálogos é possível e funcionará adequadamente dentro de alguns anos”, disse Franz Och, chefe dos serviços de tradução do Google ao britânico “Times Online”.

Leia mais no G1.

O primeiro alarme foi disparado pelo Google há 15 dias, com a denúncia do ataque a seus servidores para violar correspondência de dissidentes chineses, supostamente coordenado pelo governo de Pequim. O segundo aviso foi dado semana passada pelo chefe da agência de telecomunicações da ONU, que pediu um acordo urgente para evitar atos deliberados de guerra cibernética por parte dos estados-membros da organização.

Leia mais no Blog Conexão Digital

A metodologia batizada de VRIO e que basicamente consiste em gerenciar qualquer iniciativa a partir de quatro questões:

Value (valor) – Como conduzir as oportunidades e adaptá-la aos desafios?

Rarity (raridade) – Outra empresa tem esse recurso?

Imitability (imitabilidade) – Outra empresa pode rapidamente/com poucos recursos replicar isso?

Organization (organização) – A empresa está organizada para tirar vantagem desse recurso?

Dividir a sua organização em pequenas, multi-funcional, organizada em equipes. 

Dividir seu trabalho em uma lista de pequenas partes. Classificar e dar prioridade a lista e estimar o esforço relativo de cada item.

 

Tempo dividido em iterações curtas de comprimento fixo (geralmente 1 – 4 semanas).

Otimizar o plano de lançamento e atualização de prioridades em colaboração com o cliente, com base em conhecimentos adquiridos inspecionando a liberação após cada iteração.

Otimizar o processo por ter uma retrospectiva após cada iteração.

Então, ao invés de um grande grupo passar um longo tempo para construir uma coisa grande, temos uma equipe pequena que passar um curto período de tempo construir uma coisa pequena.

Mas integrar regularmente para ver o todo.

121 palavras … perto o suficiente.

Para mais detalhes confira “Scrum and XP from the Trenches”.

O livro é uma leitura online gratuita. http://www.crisp.se/ScrumAndXpFromTheTrenches.html

Para mais informações:  http://www.crisp.se/scrum

Nova Tradução do COBIT 4.1 em Português torna mais acessível o modelo de melhores práticas de Governança em TI.
O COBIT 4.1 ajuda os profissionais de negócios e de TI a aumentar o valor de TI e reduzir os riscos relacionados.

O CobiT é produto de mais de 15 anos de pesquisa e cooperação entre profissionais experientes de TI e negócios. A versão do framework em Português está disponível para download gratuito através do site da associação internacional sem fins lucrativos, ISACA, no endereço: www.isaca.org/obtain_cobit.

O COBIT 4.1 é o mais atualizado modelo globalmente aceito que garante que TI esteja alinhada com os objetivos de negócios, seus recursos sejam usados de forma responsável,  e os riscos gerenciados adequadamente. Representa um refinamento do CobiT 4.0 e pode ser usado para aperfeiçoar o trabalho já realizado com versões anteriores.

As atualizações do CobiT 4.1 incluem um aperfeiçoamento na mensuração de desempenho, melhorias nos objetivos de controle e melhor alinhamento dos objetivos de IT e negócios.

O CobiT ajuda as organizações a reduzir os riscos de TI, aumentar o valor obtido da TI e atender às regulamentações de controle. Por exemplo, o Banco Central do Brasil utiliza o CobiT como um guia para avaliação de bancos e instituições financeiras, o TCU(Tribunal de Contas da União) também tem como base o CobiT para seus programas de auditoria para avaliação de diversas entidades nacionais. Esses e outros exemplos de utilização por órgãos de controle e supervisão fazem desta nova versão do CobiT uma ferramenta útil a todas as organizações que necessitam manter um nível adequado de governança em TI.