Visual Studio 2008 Certification Training Kits

08/13/2008 07:43:00 By Felipe Pessoto

As novas certificações estão chegando e com elas os novos Training Kits.
Vou postar uma lista com a data prevista pro lançamento dos novos Training Kits, que inclusive estão em pré-venda na Amazon.

MCTS Self-Paced Training Kit (Exam 70-502): Microsoft® .NET Framework 3.5 - Windows® Presentation Foundation
ISBN: 9780735625662
Disponibilidade: Já disponível

MCTS Self-Paced Training Kit (Exam 70-503): Microsoft® .NET Framework 3.5 - Windows® Communication Foundation
ISBN: 9780735625655
Disponibilidade: Setembro/2008

MCTS Self-Paced Training Kit (Exam 70-505): Microsoft® .NET Framework 3.5 - Windows® Forms Application Development
ISBN: 9780735626379
Disponibilidade: Janeiro/2009

MCTS Self-Paced Training Kit (Exam 70-561): Microsoft® .NET Framework 3.5 - ADO.NET Application Development
ISBN: 9780735625631
Disponibilidade: Janeiro/2009

MCTS Self-Paced Training Kit (Exam 70-562): Microsoft .NET Framework 3.5 - ASP.NET Application Development
ISBN: 9780735625624
Disponibilidade: Abril/2009

MCPD Self-Paced Training Kit (Exam 70-564): Designing and Developing ASP.NET Applications Using Microsoft .NET Framework 3.5
ISBN: 9780735626560
Disponibilidade: Maio/2009

Visual Studio 2008 SP1 e .NET Framework 3.5 SP1

08/11/2008 23:36:00 By Felipe Pessoto

Em menos de um ano desde o lançamento da versão RTM do VS2008 já temos disponível o SP1 do Visual Studio 2008 e .Net 3.5

Esse Service Pack é especial pois além das correções de bugs também das novas funcionalidades:

  • .NET Framework Client Profile: um subconjunto do .NET Framework 3.5 voltado para aplicações desktop;
  • ASP.NET Dynamic Data: possibilita o scaffolding para aplicações ASP.NET;
  • Suporte ao SQL Server 2008, lançado recentemente;
  • ADO.NET Data Services, conhecido antigamente pelo codinome Astoria;
  • ADO.NET Entity Framework;

Entre outros...

Infelizmente o ASP.NET MVC não está incluso e continua ainda em Preview, que porteriormente vai passar por Beta só então chegará na versão final.

Links para o download:

http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx

http://go.microsoft.com/fwlink/?LinkId=122095

MSDN Magazine - Julho 2008

07/18/2008 08:24:00 By Felipe Pessoto

Está disponível a edição de Julho da MSDN Magazine. Assuntos de capa:

  • Serviços de dados: Desenvolva aplicativos eficientes e escalonáveis com os Serviços de Dados do SQL Server
    Aqui o autor apresenta os Serviços de Dados do SQL Server, que expõem sua funcionalidade em relação a interfaces padrão de Web service. David Robinson

  • ADO.NET: Obtenha uma modelagem de dados flexível com o Entity Framework
    A autora responde a perguntas sobre o Entity Framework e permite entender como e por que ele foi desenvolvido. Elisa Flasko

  • Dados e WPF: Personalize a Exibição de Dados com Ligação de Dados e WPF
    Aqui, apresentamos técnicas para a ligação de dados programática e declarativa e a exibição com o Windows Presentation Foundation. Josh Smith

  • Transações: Construa sistemas escaláveis que gerenciam falhas sem perder dados
    Sistemas que gerenciam falhas sem perder dados são enganosos. Aprenda como conquistar sistemas escalonáveis e eficientes. Udi Dahan

  • WCF P2P: Como projetar compartilhamento de estado em redes de mesmo nível
    Saiba como habilitar recursos ponto a ponto em aplicativos de negócios, permitindo que compartilhem estado em uma rede de mesmo nível sem servidor. Kevin Hoffman

Download em Português

Google Code Jam - Saving the Universe

07/17/2008 22:52:00 By Felipe Pessoto

Infelizmente meus planos de participar do Google Code Jam já eram. Marquei pra competir no dia 26(Sábado), até ai tudo ok, mas pra ajudar fizeram as eliminatórias HOJE, numa quinta-feira. Claro, como a maioria das pessoas estava trabalhando, quando cheguei ja tinha acabado o tempo...
De qualquer forma fiz o primeiro desafio, em C#, vou postar o código fonte pra vocês.

O desafio é salvar o Universo =). Segundo o Google, se você buscar pelo nome de um buscador nele mesmo(Ex.: Buscar Google, no Google) o universo vai implodir. Você recebe uma lista de Buscadores e a lista de Palavras à buscar(que vai ser sempre o nome de um dos buscadores). Então tem que gerar um algoritmo que faça que a busca, sem buscar a Palavra no Buscador com mesmo nome(pra nao implodir o Universo). Até aí nada demais, seria só um if pra fazer o switch entre qual buscador vai usar cada vez.

O desafio é fazer esse switch da forma mais otimizada possível, dizendo qual o número mínimo de switchs em cada caso, exemplos:

5
Yeehaw
NSM
Dont Ask
B9
Googol
10
Yeehaw
Yeehaw
Googol
B9
Googol
NSM
B9
NSM
Dont Ask
Googol
5
Yeehaw
NSM
Dont Ask
B9
Googol
7
Googol
Dont Ask
NSM
NSM
Yeehaw
Yeehaw
Googol

O primeiro número indica a quantidade de Buscadores, seguido pelos nomes dos mesmo, depois o número de Searchs e as respectivas Buscas.

No caso acima, devemos retornar:

Case #1: 1
Case #2: 0

Segue o código:

class Saving_the_Universe
{
    const string CaminhoEntrada = @"C:\Documents and Settings\Felipe\Meus documentos\Visual Studio 2008\Projects\CodeJam\CodeJam\Saving_the_Universe_Entrada.txt";
    const string CaminhoSaida = @"C:\Documents and Settings\Felipe\Meus documentos\Visual Studio 2008\Projects\CodeJam\CodeJam\Saving_the_Universe_Saida.txt";
 
    static List<string> Buscadores = new List<string>();
    static List<string> Querys = new List<string>();
 
    static void Main(string[] args)
    {
        StreamReader Entrada = new StreamReader(CaminhoEntrada);
        if (File.Exists(CaminhoSaida))
            File.Delete(CaminhoSaida);
 
        StreamWriter Saida = new StreamWriter(CaminhoSaida);
 
        int CasoAtual = 1;
        int CasosTotais = int.Parse(Entrada.ReadLine());
 
        string Temp = "";
 
        while (CasoAtual <= CasosTotais)
        {
            Buscadores.Clear();
            Querys.Clear();
 
            Temp = Entrada.ReadLine();
            for (int i = 0; i < int.Parse(Temp); i++)
            {
                Buscadores.Add(Entrada.ReadLine());
            }
 
            Temp = Entrada.ReadLine();
            for (int i = 0; i < int.Parse(Temp); i++)
            {
                Querys.Add(Entrada.ReadLine());
            }
 
            Saida.WriteLine("Case #{0}: {1}", CasoAtual, Algoritmo());
 
            CasoAtual++;
        }
 
        Entrada.Close();
        Saida.Close();
        Console.ReadKey(true);
    }
 
    static int Algoritmo()
    {
        Dictionary<string, int> QuerysContadas = new Dictionary<string, int>();
        //Pra cada buscador, conta quantas Querys existem chamando eles
        foreach (var item in Buscadores)
        {
            QuerysContadas.Add(item, Querys.Count<string>(p => p == item));
        }
 
        if (QuerysContadas.Values.Min() == 0)
            return 0;
 
 
        int UltimoIndice = 0;
        List<string> PalavraBuscadasNaOrdem = new List<string>();
 
        for (int i = 0; i < Querys.Count; i++)
        {
            if (PalavraBuscadasNaOrdem.Count == 0 || Querys[i] == PalavraBuscadasNaOrdem[PalavraBuscadasNaOrdem.Count - 1])
            {
                foreach (var NomeBuscador in Buscadores)
                {
                    if (Querys.IndexOf(NomeBuscador, i) == -1)
                        return PalavraBuscadasNaOrdem.Count;
 
                    if (UltimoIndice < Querys.IndexOf(NomeBuscador, i) && (PalavraBuscadasNaOrdem.Count == 0 || NomeBuscador != Querys[i]))
                        UltimoIndice = Querys.IndexOf(NomeBuscador, i);
                }
                PalavraBuscadasNaOrdem.Add(Querys[UltimoIndice]);
            }
        }
 
        return 1;
    }
}