quarta-feira, 16 de julho de 2008

Novo MCTS no mercado!

Eu mesmo. Recebi hoje a informação que fui aprovado na prova beta de ASP.NET 3.5 e já posso exibir com orgulho o título Microsoft Certified Tecnology Specialist.
É para comemorar, não?
Agora é estudar para chegar em MCPD!

MCTS(rgb)_1102

domingo, 6 de julho de 2008

Melhorando o desempenho do javascript em páginas ASP.NET

Na segunda edição do webcast MS-Developers, vamos tratar do processamento de javascript, tanto dentro das páginas quando arquivos js externos, por mecanismos que aceleram e otimizam o desempenho no servidor e no navegador cliente.

Download do vídeo (xvid) e código-fonte:


URLs relacionadas:
http://professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx

sábado, 5 de julho de 2008

Anúncios Complementares

AnunciosComplementares 
Certamente "é possível mudar drasticamente o desempenho comprando um PC novo". :-)

quinta-feira, 29 de maio de 2008

Firefox 3 quer entrar no Livro dos Recordes

O pessoal da Mozilla está tentando entrar no Guinness Book.
Eles criaram uma campanha para atrair usuários de todo o mundo e convencê-los a baixar o Firefox 3 nas primeiras 24h do seu lançamento oficial. Com isso eles esperam que o primeiro dia de downloads do Firefox 3 supere o índice de 1,6 milhão de downloads no período.
Já está encaminhado com o comitê do Guinness alguns procedimentos para validar o feito.
Se você quiser ajudá-los, o site http://www.spreadfirefox.com/pt-BR/worldrecord pode registrar seu interesse e manter você informado do lançamento do Firefox. Eu já estou lá (por uma web que siga os padrões!).

Abraço!

*************************

Mozilla folks are trying to set a Guinness Book's record.
They've created an initiative to attract users all over the world to download Firefox 3 in the first 24 hours from the launch. They are willing to beat the Firefox 2 launch download number of 1.6 million during the period.
If you want to help them, on http://www.spreadfirefox.com/en-US/worldrecord you can sign in and be notified about the Firefox launch date. I've already done.

Cheers!

segunda-feira, 26 de maio de 2008

Vídeo: Como utilizar os PageMethods do ASP.NET AJAX

Olá.
Estou testando um novo formato para este blog. No vídeo abaixo você assiste como utilizar os PageMethods do ASP.NET AJAX para fazer a troca de dados entre o navegador e o servidor de forma rápida e segura.
Como este é meu primeiro vídeo, todo feedback será bem-vindo.



Infelizmente o final do vídeo acabou sendo cortado. Só complementando aquela parte, o endereço do MSDN Brasil é www.msdnbrasil.com.br.
Os comentários estão abertos para quais dúvidas ou outras questões que vocês tenham.

Você pode baixar o vídeo (formato divx / xvid) e o código fonte em:


Abraços!

ERRATA:
- ScriptMethod se refere a um atributo de uma função, não uma propriedade desta.

segunda-feira, 12 de maio de 2008

This summer: .NET 3.5 SP1

Acabo de ler em http://blogs.msdn.com/webdevtools/archive/2008/05/12/visual-studio-2008-sp1-beta.aspx algumas novidades bem legais que serão integradas no Service Pack 1 para o .NET Framework 3.5 e Visual Studio 2008 a ser lançado no período de verão norte-americano (nosso inverno).
Para citar algumas, podemos dizer que será bem vindo o suporte ao ASP clássico, o controle sobre a formação do Javascript, o reconhecimento do operador ~/ no elemento link do head, a presença do Class Library na versão express do Visual Web Developer, a introdução no namespace System.Web.Routing (parte do framework MVC que fará o url rewrite). A lista completa de fixes e features está disponível no link acima.

Você conhece alguém assim?

dilbert5
- Acho que devemos criar uma base de dados SQL.
- (Pensando) Uh-oh
- (Pensando) Ele entende o que disse ou é algo que viu em um anúncio de revista?
- Que cor você quer esta base de dados?
- Acho que violeta tem mais memória RAM.

quinta-feira, 8 de maio de 2008

Habilitando o Element Inspector no Safari para Windows

Precisando descobrir o que deu errado com o layout da sua página quando exibida no Apple Safari no Windows? O browser possui nativamente um Inspector que faz bem o seu papel. Para habilitá-lo basta editar o arquivo: C:\documents and Settings\<Seu Login>\Application Data\apple Computer\safari\WebKitPreferences.plist (podem ocorrer variações do caminho dependendo da sua versão do Windows e do idioma do sistema) e incluir antes do </dict> no final do arquivo as linhas abaixo:
<key>WebKitDeveloperExtras</key>
<true/>
Agora basta abrir novamente o browser e você terá a opção "Inspect element" no menu de contexto (famoso clique do botão direito do mouse).
As informações do Element Inspector são bem semelhantes as encontradas no Firebug, mas no caso do Safari são apenas para visualização.
Agora é só divertir-se navegando no Inspector!
:-)

Windows XP SP3

Então, já instalou o SP3 no seu Windows XP?
Ele já está disponível no Windows Update. Caso você precise instalar em mais de um computador, o endereço direto para o download completo do service pack é http://www.microsoft.com/downloads/details.aspx?displaylang=pt-br&FamilyID=5b33b5a8-5e76-401f-be08-1e1555d4f3d4.

quarta-feira, 30 de abril de 2008

Nem tudo na vida são mil maravilhas!

Alguns screenshots muito cômicos achados em outros sites (infelizmente não tenho mais os créditos):

medium_2100072159_c397aa274c_o 
medium_2100072679_ac9f155545_o
medium_2100852590_10ab160cb0_o
medium_2100852634_e2a9cfbda2_o
medium_2100852846_05ea5b748c_o
medium_2100853472_c2abc1e07b_o 
medium_2100853826_b848bda875_o

terça-feira, 22 de abril de 2008

Service Pack 3 do Windows XP está pronto

Saiu na Info:
http://info.abril.com.br/aberto/infonews/042008/22042008-8.shl

A Microsoft já está entregando o SP3 do Windows XP para alguns fornecedores. Ainda segundo a nota, a partir do dia 29/abril o download já estará disponível ao grande público.

Este service pack não traz nenhuma grande novidade, mas só de instalar um windows e não ter que de cara baixar mais de 100mb de atualizações já é de grande ajuda. Sem contar que isto dará fôlego ao XP para os usuários insatisfeitos com o Vista (quase todos) esperarem para ver como será o "Windows 7".

Todos os usuários do Windows XP agradecem! :-)

domingo, 20 de abril de 2008

Encoding em Update Panel

    Esta semana me deparei com um problema de resolução bem simples, mas que pode tirar uma pessoa do sério ao utilizar o update panel do ASP.NET AJAX.
    Por motivo de compatilidade com nosso conjunto de caracteres, na empresa onde trabalho costumamos criar os aplicativos ASP.NET e definir os encodings sempre para iso-8859-1 no web.config:

<system.web>
    <globalization fileEncoding="iso-8859-1" responseEncoding="iso-8859-1" requestEncoding="iso-8859-1" uiCulture="pt-BR" />
[...]
</system.web>


    Tudo funcionava muito bem, pois não tinhamos o custume de usar AJAX.
De um tempo pra cá, entramos na onda Web 2.0, onde tudo é interativo, tudo é AJAX.
    Nesta semana que passou uma desenvolvedora estava testando novas tecnologias em seus projetos, entre as quais utilizando o que podemos chamar de "AJAX Express", o Update Panel. Explico: a grosso modo, o Update Panel não exige nenhuma grande mudança nas páginas, você joga um update panel e a página vira AJAX. Mas esta facilidade tem seu custo. Toda vez que você atualiza a página no update panel, todo o viewstate trafega junto e em uma página complexa isto realmente é um grande tráfego. Mas meios mais eficientes serão tema de um futuro post.
    Voltando ao que interessa. Quando minha colega tentou recuperar os valores de um TextBox, os caracteres especiais não vinham corretamente, aquele valor não era utilizável. Depois de deixá-la procurando uma solução sozinha por algum tempo, aproximei-me para ver o que estava acontecendo. Depois de algumas tentativas, percebi que o textbox estava dentro de um update panel e isto fazia toda a diferença. Pedi para ver o web.config do aplicativo e foi onde lembrei que também já passei por este problema. O update panel ignora o encoding do webconfig e tenta ler tudo como UTF-8. Isto me parece um bug, mas não procurei a fundo o motivo (talvez exista um). Mudamos o web.config para:

<system.web>
    <globalization fileEncoding="iso-8859-1" responseEncoding="utf-8" requestEncoding="utf-8" uiCulture="pt-BR" />
[...]
</system.web>


    Aí tudo correu bem!
    Resumo da história: se você for utilizar update panels em seu aplicativo, lembre-se de sempre definir responseEnconding e requestEncoding como UTF-8.
    Mas dê uma olhada em PageMethods. É bem mais trabalhoso de utilizar, mas tanto o tamanho das respostas quanto a agilidade na atualização da página são muito melhores. Mas vão precisar que você tenha um bom conhecimento de JavaScript.

Abraços e até a próxima!

quinta-feira, 17 de abril de 2008

Plugins para o Internet Explorer que todo desenvolvedor ASP.NET deve ter

Pra começar, porque o IE?
Não, o IE não é o melhor browser. Mas ele carrega muito mais rápido por estar enraizado no Windows e tem suporte no Visual Studio para a depuração de javascript. E isto faz a diferença pro desenvolvedor web. Para o Firefox existem excelentes plugins para este fim também, mas o debugger de javascript do Visual Studio 2008 está excelente e vale a pena ser utilizado.
Agora vamos aos plugins propriamente dito.
O primeiro plugin obrigatório é o IE7Pro. Na verdade este plugin não é voltado ao desenvolvedor, mas traz excelentes recursos que não dá pra entender como não estão já no próprio IE, uma vez que seus concorrentes os têm. Com ele você pode manter sincronizados seus Favoritos, caso utilize mais de um computador, pode ver mais detalhes na janela de propriedades da página (como as imagens, os css's...), pode salvar a página como imagem, pode redimensionar a janela para tamanhos comuns de desktops como 800x600, 1024x768... (estes 2 últimos bem úteis ao desenvolvedor), e mais uma porção de aprimoramentos como "crash recovery" (recuperação de sessões travadas), gestos de mouse, etc.
Outro plugin indispensável é o Internet Explorer Developer Toolbar. Este traz um inspetor de elementos (aponte o mouse para uma imagem, por exemplo, e você vê todas as propriedades da mesma), um color picker, "pegador de cores", para descobrir o código de alguma cor da página, uma régua para medir na tela o tamanho de um elemento e várias outras funções para validar o CSS, o HTML, manusear as imagens, as divs, etc.
Por último mas não menos importante, temos o Webdevhelper. Com ele você pode executar javascript contra a página em um console, e o mais importante, pode exibir um log de todas as chamadas do navegador para a web. A partir desta lista, você pode ver os detalhes de cada chamada, os cabeçalhos da requisição e da resposta, o conteúdo da resposta, e se a resposta for um objeto JSON ou a atualização de update panels o plugin cria uma estrutura para facilitar a visualização da resposta. Os problemas deste plugin é que ele é pesado, acaba travando o IE algumas vezes e não lida muito bem com encodings diferentes de UTF-8, mas o custo-benefício ainda é bem interessante.

E você, utiliza algum plugin para o IE que considera indispensável? Quer um passo a passo mais detalhado sobre algum dos plugins citados? Coloque sua dica nos comentários!

Os plugins para o Firefox serão comentados num próximo post.

Abraços a todos!

Links de 14/04/2008

Criando uma mensagem de notificação estilo MSN / Windows Live Messenger

Olá, pessoal.

Hoje vamos fazer uso do AJAX Control Toolkit, fornecido na faixa, for free, para criar uma caixa com uma mensagem de notificação em nossa página que se assemelha a notificação do WLM.

Antes de tudo, vamos precisar:
- Visual Studio 2005 / 2008 ou Visual Web Developer (free);
- Quem tem o Visual Studio 2005 e/ou vai desenvolver em ASP.NET 2.0 vai precisar também do AJAX Extensions 1.0;
- AJAX Control Toolkit;
Pularemos as instruções de instalação já que nos respectivos endereços de download estão também os procedimentos para cada um deles.

Vamos abrir o Visual Studio e pedir um "Novo Web Site", e escolher o template que incluir já as ferramentas AJAX (este template é criado na instalação dos Extensions no VS 2005);

Estarei colocando meu exemplo devidamente explicado em comentários sobre o porque de cada coisa. Enjoy it!

 

<%@ Page Language="C#" AutoEventWireup="true" %>

<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %>
<%--Esta linha acima (ou algo muito parecido com ela) é criada
automáticamente quando você arrasta algum componente
do AJAX Control Toolkit da toolbar.--%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Animation</title>
    <style type="text/css">
        html, body, form
        {
            height: 100%;
            margin: 0;
        } /* Este css está aqui apenas para efeitos didáticos.
          Vamos criar uma tabela que ocupe toda a tela para podermos
          testar se os controles que ficarem embaixo da nossa notificação
          estão bloqueados ou não. */

        .pnlMensagem
        {
            opacity: 0;
            -moz-opacity: 0;
            filter: alpha(opacity=0);
            /* Como a notificação não funciona com o "display: hidden" (escondida)
            em seu estilo, precisamos deixá-la totalmente transparente
            durante o carregamento da página.
            Precisamos dos 3 filtros acima para garantir isso em diferentes navegadores */

            height: 200px;
            width: 200px;
            background-color: #99ccff;
            border: solid 1px #000000;
            /* Uma formatação qualquer pra notificação */
            overflow: hidden;
            /* Para não termos barras de rolagens na nossa notificação */
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <%--O ScriptManager é O CARA pro AJAX no ASP.NET. Deve ser o primeiro controle do form.
    Ele está no grupo AJAX Extensions no seu toolbar.--%>

    <table border="0" cellpadding="0" cellspacing="0" style="height: 100%; width: 100%">
    <%--Fazendo a tabela ocupar toda a tela--%>
        <tr>
            <td>
                <input id="Button1" type="button" value="Mostrar" onclick="MostrarMensagem();" />
                <input id="Button2" type="button" value="Esconder" onclick="EsconderMensagem();" />
                <%--Botões onde vamos testar o funcionamento de nossa notificação--%>
            </td>
            <td valign="bottom">
                <p style="text-align: right">
                    <input type="button" value="Algo" onclick="alert('Clicou!');" />
                    <%--Botão posicionado para ficar escondido sob a notificação.
                    Tem que estar disponível quando a notificação não estiver
                    sendo exibida. Vamos testar na sequência. --%>

                </p>
            </td>
        </tr>
    </table>
    <asp:Panel runat="server" ID="pnlMensagem" CssClass="pnlMensagem">
        Aqui vai a sua mensagem ou o que quer que seja que você queira pôr no Panel
    </asp:Panel>
    <%--O panel acima é efetivamente o panel que vai aparecer como notificação.
    Sinta-se a vontade para preenche-lo com o que for necessário.--%>

    <ajaxToolkit:AlwaysVisibleControlExtender ID="pnlMensagem_AlwaysVisibleControlExtender"
        runat="server" Enabled="True" TargetControlID="pnlMensagem" HorizontalSide="Right"
        VerticalSide="Bottom">
    </ajaxToolkit:AlwaysVisibleControlExtender>
    <%--Este extender do AJAX Toolkit é o que vai garantir que nossa
    notificação apareça no canto inferior direito, indiferente
    da quantidade de conteúdo da página e da posição do scrollbar.
    Verifique bem as propriedades: ele está apontado para nosso panel
    e com os "sides" configurados para onde deve ficar a notificação.--%>

    </form>
</body>
</html>

<script type="text/javascript">
// Javascript no final da página!? Tudo bem... É contra as normas
// mas é o melhor lugar para se colocar os scripts que dependem
// dos controles AJAX, uma vez que quando o browser ler o header
// da página, o ScriptManager não estará carregado ainda.

    function MostrarMensagem()
    {
        /// <summary>
        /// Esta é a função que vai fazer a notificação ser exibida
        /// </summary>

        var controle = $get("<%= pnlMensagem.ClientID %>");
        // Criando a referência para o panel da notificação
        // A função $get é definido no Framework AJAX da Microsoft.
        // Estude ele. Garanto que vale a pena.
        // Temos muita coisa pronta lá (e testada nos browsers
        // mais populares do mercado) para você não precisar
        // ficar reinventando a roda.

        var animacao = new AjaxControlToolkit.Animation.SequenceAnimation(controle, 0, 25);
        // Como nossa animação precisa de 2 etapas, criamos um Sequence animation.
        // O primeiro parâmetro recebe o controle que será animado.
        // O segundo parâmetro informa a duração do efeito. Como o sequence obedece
        // a duração dos eventos internos, pode ficar em 0 mesmo.
        // O terceiro parametro é o "fps" (frames per second) que define a qualidade
        // gráfica da animação. Geralmente 25 a 30 dá conta do recado sem sobrecarregar
        // o navegador

        animacao.add(new AjaxControlToolkit.Animation.HideAction(controle, 0, 25, true));
        // A primeira animação de nossa sequência: exibir o controle de notificação
        // (mesmo que ainda transparente) para este ficar acessível para a segunda
        // animação e bloquear a área que ficar sob ele. Os 3 primeiros parametros
        // são o mesmo do método anterior. O último parametro está como true indicando
        // que o controle deve ser exibido. False esconde o controle. Eu sei: é meio
        // contra o nome do método "HideAction", mas não me culpem, não fui eu quem
        // fez o toolkit. Hehehe!

        animacao.add(new AjaxControlToolkit.Animation.FadeInAnimation(controle, 0.5, 25, 0, 1, true));
        // FadeIn: este cara faz a parte ornamental da coisa.
        // Primeiro parametro é o panel da notificação.
        // O segundo é o tempo, neste caso definimos que a animação deve durar meio segundo.
        // O terceiro é o já citado FPS.
        // O quarto parametro é a opacidade inicial do controle. Zero significa transparente.
        // O quinto parametro é a opacidade final do controle. Um significa totalmente opaco, visível.
        // O true do quinto parametro é algo relacionado ao IE, mas não pesquisei a fundo.

        animacao.play();
        // Disparando a animação na tela
    }

    function EsconderMensagem()
    {
        /// <summary>
        /// Esta é a função que vai esconder novamente nossa notificação
        /// </summary>

        var controle = $get("<%= pnlMensagem.ClientID %>");
        // Velho conhecido
        var animacao = new AjaxControlToolkit.Animation.SequenceAnimation(controle, 0, 25);
        // Velho conhecido
        animacao.add(new AjaxControlToolkit.Animation.FadeOutAnimation(controle, 0.3, 25, 0, 1, true));
        // FadeOut: hora de esconder de novo a notificação, seja devido a algum clique do usuário
        // ou algum timer (temporizador) que você venha a criar.

        animacao.add(new AjaxControlToolkit.Animation.HideAction(controle, 0, 25, false));
        // Velho conhecido.
        // Note que agora nós invertemos a ordem dos eventos.
        // Primeiros fazemos a parte visual de sumir com a notificação
        // para depois esconder efetivamente o panel, para liberar
        // novamente a área abaixo dele para o internauta

        animacao.play();
        // Velho conhecido
    }
    function Teste()
    {
        /// <summary>
        /// Função decorativa só para mostrar que o botão que fica
        /// escondido pela notificação estará funcional quando a
        /// notificação estiver oculta.
        /// </summary>

        alert('Teste');
    }
    AjaxControlToolkit.Animation.HideAction.play($get("<%= pnlMensagem.ClientID %>"), 0, 25, false);
    // Lembra que no CSS do Panel da notificação nós definimos ele apenas como transparente,
    // mas ainda ocupando uma área na tela e impedindo o acesso aos controles sob ele?
    // Neste bloco de script já depois do corpo da página, nós finalmente mandamos
    // ele desobstruir a área que ele vai ocupar. Tem que ser feito por uma animação,
    // se você definir o display: hidden no braço as animações não irão funcionar.

</script>

 

É isso por hoje. Testei o código acima no IE7, IE6 (que infelizmente está demorando pra sumir do mapa) e no Firefox e tudo redondinho.

Em breve estaremos por aqui de novo. Até lá, felicidades, bom carnaval!

Rich Text Editor para ASP.NET

Here we go.

Para abrir bem este blog, vamos falar de algo que qualquer programador web, se nunca precisou, certamente irá precisar um dia: um "editor rico" para textos em seu site.
Como assim? Imagine: você está escrevendo uma ferramenta de blog, de edição de notícias ou alguma coisa assim. Seus visitantes internautas vão querer pôr links, figuras, mudar a cor ou fonte do texto, etc. É disso que eu falo. Agora que estamos melhor situados, prossigamos.
Infelizmente a Microsoft parece ignorar o apelo forte de incluir este componente no pacote asp.net ou ajax toolkit.
Foi em uma situação desta que precisei "googlar" a internet. Queria uma ferramenta que não somente fizesse este papel de "word para a web" mas que eu pudesse integrar em um site asp.net e programar sobre usando C#. Achei várias, testei algumas, mas quem se saiu melhor mesmo foi o FCKEditor (http://www.fckeditor.net), seja pelo bom resultado, testado por mim no Internet Explorer 7, Internet Explorer 6 e no Mozilla Firefox (compreendendo assim algo em torno de 95% da internet, e não tenho fonte oficial para este número), seja pelo preço = freeware.
No quisito ASP.NET, este também é perfeito. No site oficial encontram-se links para ferramentas de interface para várias linguagens server-side, inclusive com um wiki (http://wiki.fckeditor.net) suficientemente bom. Mas neste mundo nem tudo é perfeito. Seguindo as instruções do wiki, criei um site asp.net, carreguei a dll para o diretório /bin e os arquivos do FCKEditor propriamente na pasta /FCKEditor. Nesta última pasta, editei o arquivo fckconfig.js para especificar que estarei utilizando asp.net. Criei a pasta para os uploads de imagens e swf's para as edições. Inclui as chaves no web.config para a dll saber quais folders tem o quê. Inclui na diretiva @Page ValidateRequest="false". O-ou: nada bom isso, estamos intencionalmente abrindo brechas de segurança desabilitando validações built-in do asp.net para Cross-site-scripts (XSS) e afins. Em teoria isto é tudo. Rodar o site: F5. Sucesso!
Agora que sabemos que funciona, vamos para a parte divertida da brincadeira: personalizar. Primeiro setar o valor inicial do editor: fácil, fckeditor1.value. Depois, receber o valor postado pelo internauta: fácil, ler fckeditor1.value. Terceiro: configurar pastas de arquivos de imagens e flash diferentes para cada usuário ou grupo. Não posso dizer que é difícil, mas aí comecei a achar informações desencontradas. Segundo o wiki, bastava setar um valor na sessão do usuário, mas assim não funcionou. Analisei o código fonte da dll (disponível via SourceForge), a lógica está perfeita. Depois de googlar mais um tanto, descobri que por padrão a ferramenta de upload e inclusão de arquivos não fica ligada a sessão do usuário (???) e que isto deve ser mudado no config do editor. Agora sim. Mas ainda não está bom, meu site continua exposto a ataques. Resolvi analisar o config. Surpresa! O FCKEditor é customizável de uma forma incrível! Tudo lá, esperando uma leitura com atenção. Foi lá também que descobri uma chave HtmlEncodeOutput com valor padrão false. Alterei este valor para true, exclui o validaterequest=false da minha página e tudo correu bem, bastando um Server.HTMLDecode na função que recebe o postback para ter novamente o HTML "utilizável". Finish, sem abrir mão da segurança.
Não detalhei muito as etapas, mas como "brinde" deixo o meu site de exemplo no SkyDrive (link na home do meu Space), pasta Componentes.NET.

Resumindo: o FCKEditor excelente editor Rich Text integrável com asp.net, altamente customizável, e ainda é free, mas precisa de uns ajustes fáceis para ficar melhor ainda.

Até a próxima. Abraços!

Começando...

Sabe aquelas dicas que você descobre por acaso?
Aqueles programas bons que estão "escondidos" na internet e pouca gente conhece?
Aquele review que você gostaria de compartilhar?

Pois é, esta é a idéia deste blog que começa hoje (29/11/07). Falar de tecnologia.
O primeiro post "quente" vem logo, logo... Já tem assunto e escopo definido, só estou esperando uma brexa de tempo para eu escrever algo "inteligente" a respeito. Hehehe...

Até mais!