INFOESTE 2011 – 23ª Semana de Computação e Informática da FIPP/Unoeste

Bom pessoal,

Faz um tempo que não passamos aqui pelo blog, realmente a correria está muito grande, graças a Deus com muito trabalho para todos nós.
Gostaríamos de informar (com atraso) sobre a 23ª INFOESTE que começou ontem!
Este evento é muito bom para que os alunos das instituições de ensino superior da região possam fortalecer seu networking além de participarem de diversos mini-cursos e palestras que ocorrem no evento.

Aproveitando o assunto, a WebFinal foi convidada pelo Coordenador do curso de Sistemas para Internet Marcelo Rosa para ministramos um minicurso no evento.
Gostaríamos de deixar formalizado aqui o nosso muito obrigado pelo convite e agradecer ao coordenador pelo reconhecimento pela nossa dedicação na área.

O minicurso que estaremos fornecendo terá a duração de 7horas e será ministrado hoje e amanhã das 19:00 as 22:30.

Segue abaixo um pouco sobre o que abordaremos no curso:
MC-029: Descomplicando o desenvolvimento de aplicações robustas utilizando as tendências da Web

Durante este curso serão apresentadas as novas tendências da WEB mostrando como elas podem nos auxiliar e fornecer uma melhor produtividade ao trabalho e no desenvolvimento de aplicações robustas. Será abordado o desenvolvimento para WEB utilizando HTML5 e CSS3 e tendo como linguagem de desenvolvimento e ferramenta de background todo o poder fornecido pelo ASP.NET MVC3 integrado ao Entity Framework 4

Aguardamos a presença de vocês lá e estaremos colocando todo material do minicurso no blog, conforme for se passando o tema.

Uma boa semana a todos!

8ª Edição do Programa Students to Business 2011

O Centro de Inovação Microsoft São José do Rio Preto oferecerá a 8ª edição do Programa Students To Business (S2B).

O programa S2B é uma iniciativa de capacitação gratuita de estudantes para o mercado de trabalho utilizando tecnologias Microsoft. Podem participar desta capacitação estudantes matriculados no ensino médio, técnico, graduação e pós-graduação. Os treinamentos serão realizados nas seguintes áreas:

· Desenvolvimento de Sistemas: criação de aplicações web através da plataforma .Net utilizando ASP.Net com acesso a banco de dados SQL Server.

· Infra-estrutura de TI: configuração de sistemas operacionais clientes e servidores, controladores de domínio, políticas de grupo.

As inscrições devem ser realizadas através do endereço www.programas2b.com.br no período de 14/02/2011 a 13/03/2011. O manual do aluno com as regras para participação e o calendário de atividades também estão disponíveis no mesmo portal.

Divulgue este post para sua lista de contatos e, caso necessite de informações adicionais, entre em contato através do e-mail mic.riopreto@sp.senac.br.

Sexta .NET – Aula 14 – Ajax – Parte I

Bom pessoal, vamos aqui com mais uma Sexta .NET abordando um tema muito utilizado atualmente, o AJAX.

Para poder falar melhor sobre esta forma de desenvolvimento vamos fazer um roteiro.

Roadmap da Apresentação Visual

Convergência entre Web e Desktop

Aplicação Desktop

  • Interativa
  • Rápida
  • Difícil Implantação
  • Desatualizada
  • Roda no Cliente

Aplicação Web

  • Estática
  • Lenta
  • Fácil Implementação
  • Sempre Atualizada
  • Roda no Servidor

Experiência do Usuário

Perguntas…
A web hoje é dinâmica?
O mesmo conteúdo é apresentado a todos os usuários?

Aplicações Web ainda perdem de aplicações Desktop
Alternativas:
Java Applets
SilverLight
Macromedia Flash

Problemas em uma aplicação Web

  • Post-backs forçam que a página seja recarregada a cada clique.
  • Não mantém o estado da página naturalmente (stateless).
  • Interfaces ricas são de difícil concepção.
  • “Lenta” em relação a aplicações de clientes ricos (desktop).

Solução para aplicações Web

  • RIA – Rich Internet Application
  • Web 2.0

AJAX Conceitos

AJAX = “Asynchronous Javascript And XML”.

É um conjunto de recursos e tecnologias, presentes há algum tempo, nas linguagens e navegadores atuais.

AJAX não é tecnologia. É um conjunto de técnicas que tem como objetivo promover uma melhor e mais rica experiência de uso.

AJAX faz uso das características da linguagem JavaScript, da portabilidade e flexibilidade do padrão XML e dos recursos de chamada assíncronas que foram implementadas nos navegadores.

AJAX – XMLHttpRequest

Objeto que a linguagem Javascript implementa e está presente nos navegadores : Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox e Netscape7.

Tem a capacidade de executar a leitura remota de dados de forma assíncrona, permitindo assim a execução de outras tarefas imediatamente após a chamada.

Retorna dados em formato XML e Texto.

http://www.w3.org/TR/XMLHttpRequest/

Framework ASP.NET AJAX
Framework para criação de uma nova geração de aplicações web, com interfaces ricas, interativas, personalizadas e baseadas em padrões
Biblioteca de scripts para cliente
Componentes para servidor
Integra funções do cliente com funções do ASP.NET
Desenvolvimento de aplicações com “estilo AJAX”

UM FRAMEWORK PARA DESENVOLVER UMA EXPERIÊNCIA NA WEB MAIS RICA, INTERATIVA E PERSONALIZADA

Produtividade incrementada
Menos conceitos e complexidade
Menos linhas de código

Fácil de criar, debugar e manter
Perfeitamente integrado as ferramentas de design e desenvolvimento

Bom pessoal, hoje ficamos apenas com os conceitos desta tecnologia.
Semana que vem iremos iniciar a apresentação aos componentes do AjaxControlToolkit.

Aguardo vocês!

Sexta .NET – Aula 13 – ASP.NET e C# – Parte IV

Boa noite pessoal, depois de um tempo meio ausente estamos aqui de volta para a periodicidade das nossas Sextas regadas do bom e velho .NET.

Hoje, para continuar a sequencia e voltar a toda com o conteúdo falaremos sobre Bibliotecas de Coleções.

Namespace System.Collections

  • ArrayList
  • Queue
  • Stack

Namespace System.Collections.Generic

  • List
  • Dictionary

Começamos por ArrayList

ArrayList não precisa ter um tamanho predefinido.
Pode carregar ou preencher um array.
Possui métodos específicos para manipular seus elementos.

int[] codigos = {1,2,46,32,78};
ArrayList listagem = new ArrayList(codigos); //Carrega um array

listagem.Remove(46); //Remove um elemento
listagem.Add(10); //Insere um novo elemento
Response.Write(listagem.Count); //Imprime seu tamanho atual

int i = (int) listagem[2]; //Passa o valor 32
//para a variável i

listagem.Sort(); //Ordena os elementos
listagem.CopyTo(codigos); //Preenche um array

listagem.Clear(); //Remove todos elementos

Pilhas ou STACK

Semelhante ao ArrayList, não precisa ter um tamanho predefinido e possui métodos específicos para manipular seus elementos.
Os últimos elementos inseridos pelo método Push são os primeiros a serem retornados pelo método Pop, da mesma forma que uma pilha:

Stack pilha = new Stack();
pilha.Push("blusas");
pilha.Push("camisetas");
pilha.Push("camisas");

Response.Write(pilha.Pop());

// imprime o último elemento inserido
// no caso o primeiro da coleção “camisas”

Queue

Semelhante ao Stack, porém trabalha de forma contrária. Seu método Dequeue retorna os primeiros inseridos pelo método Queue, semelhante a uma fila:

Queue fila = new Queue();
fila.Enqueue("Idosos");
fila.Enqueue("Grávidas");
fila.Enqueue("Deficientes");
fila.Enqueue("Funcionários");

Response.Write(fila.Dequeue());

// imprime o primeiro elemento inserido
// no caso o primeiro da coleção “Idosos”

List

Semelhante a um ArrayList, mas somente permite a inserção elementos de um tipo predefinido.

List listagem = new List(); //Instancia uma lista de //inteiros
listagem.Add(39); //Insere um novo elemento
listagem.Add(22); //Insere um novo elemento

Response.Write(listagem.Count); //Imprime seu tamanho atual

listagem.Sort(); //Ordena os elementos

listagem.Clear(); //Remove todos elementos

DICTIONARY

Semelhante a List, porem permite o uso de uma chave ‘K’ de um tipo predefinido, para referenciar um valor do tipo ‘V’.

Dictionary dic = new Dictionary();
//Instancia um dicionário string-string

dic.Add(“Name”, “Nome”);
dic.Add(“Day”, “Dia”);

dic.Remove(“Day”);

Response.Write(dic[“Name”]);

Bom pessoal, voltamos com a corda toda, mas para não misturar os pés pelas mãos e deixar todos confusos vamos dar uma paradinha por aqui.

Então agora vamos aos testes e caso tenham dúvidas entrem em contato!

Na semana que vem teremos um assunto bem interessante: Ajax

Aguardamos a presença de todos!

Sexta .NET – Aula 12 – ASP.NET e C# – Parte III

Boa tarde, continuando a aula anterior conforme prometido, aqui vamos com:

Sexta .NET – Aula 12 – ASP.NET e C# – Parte III

Falaremos nesta aula sobre: Nullable Types

  • Recurso da versão 2.0.
  • Variáveis continuam a representar todos os valores do seu tipo, e mais um valor adicional null.
  • Permite uma integração melhor com bancos de dados, que podem conter valores null em seus campos.
  • Declaradas através da classe Nullable, ou através do operador ? adicionado ao tipo à ser utilizado.

Podem ser declaradas de duas formas:
System.Nullable variavel;
? variavel;

Onde T é o tipo da variável
Ambas notações funcionam de maneira equivalente
Declarando e usando uma variável inteira e anulável

int? clienteId;
clienteId = 10; //Ok
clienteId = null; //Ok, clienteId é anulável

Qualquer tipo por valor pode ser usado como Nullable Type

int? i = 10;
double? x = 3.14;
bool? flag = null;
char? letra = 'a';
int?[] MeuArray = new int?[10];

Os exemplos seguintes não são tipos por valor, portanto não são aceitáveis como Nullable Types

string? variavel = “tipos anulaveis”;
Cliente? umCliente = new Cliente?();

O operador as só pode ser utilizado com tipos por referência, então não pode ser usado com Nullable Types

int clienteId = 5;
object b = clienteId;
// Erro em tempo de compilação
int? c = b as int;

Uma instância de um tipo anulável possui duas propriedades read-only

  • HasValue: do tipo bool, retorna verdadeiro quando uma variável contém um valor não-nulo.
  • Value: do tipo equivalente ao tipo anulável utilizado, se HasValue é true, então Value contém um valor significativo, senão, ao tentar acessar Value será gerada uma exception.

Utilizando as propriedades de um tipo anulável

int? clienteId = 10;
if (clienteId.HasValue)
Console.WriteLine(clienteId.Value);
else
Console.WriteLine(“Identificação Indefinida!”);

Conversões explícitas

  • Um tipo anulável pode ser convertido para um tipo regular usando casts ou usando a propriedade Value.
  • Se o tipo anulável contém o valor null, será gerada uma exception.

Conversões explícitas

// Exemplos
int? clienteId = null;
// Não compila
int x = clienteId;
// Compila, mas será gerada uma exception se x for null
int x = (int)clienteId;
// Compila, mas será gerada uma exception se x for null
int x = clienteId.Value;

Conversões implícitas
A conversão de um tipo anulável para um tipo regular é implícita.

int produtosAdquiridos = 10;
// Conversão implícita
int? produtos = produtosAdquiridos;

Operadores
Quaisquer operadores existentes para tipos por valor podem ser utilizados com Nullable Types.
O operador produzirá null se os operandos forem nulos, caso contrário, usará o valor contido para calcular o resultado.

int? x = 10;
x++; // x agora é 11
x = x * 10; // x agora é 110
int? y = null;
x = x + y; // x agora é null

Quando são feitas comparações com Nullable Types, se ambos os Nullable Types são null, então a comparação sempre retornará false. O caso oposto retornará true.

int? x = 250;
int? produtosAdquiridos = null;
if (x >= produtosAdquiridos)
Console.WriteLine(“Adquiriu mais de {0} produtos.”,x);
else // Não é válido – Correto: adição de um else if (...)
Console.WriteLine(“Adquiriu menos de {0} produtos.”,x);

A conclusão contida na expressão else não é válida porque produtosAdquiridos é null, portanto, não contém nenhum valor. Logo, não pode ser maior ou menor que x.

O operador ??
Define um valor padrão que é retornado quando um tipo anulável é atribuído à um tipo não-anulável.

// Exemplo
int? produtosAdquiridos = null;
// Atribui o valor 0 à y se produtosAdquiridos for null
int y = produtosAdquiridos ?? 0;

Também pode ser utilizado com vários Nullable Types

int? limiteCredito;
int? valorDefault;
// Se limiteCredito não for null, z = limiteCredito.
// Se limiteCredito for null, z = valorDefault.
int? z = limiteCredito ?? valorDefault;

Na próxima aula falaremos sobre Coleções

Até a semana que vem!

Sexta .NET – Aula 11 – ASP.NET e C# – Parte II

Boa tarde Pessoal,

Primeiramente gostaria de justificar o fato de estarmos publicando com atraso a aula, esta semana estávamos em finalização e aprovação de dois projetos, o que fez que ficassemos totalmente focados na entrega das demandas e tivessemos que abrir mão das aulas.

Para tirar o atraso, aqui vamos com a continuação da última aula.

Sexta .NET – Aula 11 – ASP.NET e C# – Parte II

Nesta aula abordaremos:
Partial Types

Aqui vamos então:

  • Recurso da versão 2.0
  • Permite dividir a implementação de um determinado tipo em diversos arquivos.
  • Disponível para classes, estruturas e interfaces.
  • Definidos pela palavra-chave partial.

Quando podem ser utilizados:
Quando trabalhamos com código gerado automaticamente, código pode ser adicionado à classe sem ter que recriar o arquivo fonte.
Partial Types permitem que dois ou mais desenvolvedores trabalhem no mesmo tipo, enquanto ambos têm seus arquivos checados para edição, sem interferir um no outro.

Declarando uma classe parcial

ClienteP1.cs

public partial class Cliente
{
public int codigo;
public bool EClienteEspecial() { … }
}

ClienteP2.cs

public partial class Cliente
{
int produtosAdquiridos;
public int ProdutosAdquiridos {
get { … }
set { … }
}
}

Declarando uma classe parcial agrupada em uma classe

ClienteP1.cs

public partial class Cliente {
int produtosAdquiridos;
public partial class ClientesEspeciais {
static List lista = new List();
}
}

ClienteP2.cs

public partial class Cliente {
public partial class ClientesEspeciais {
public void Adiciona(Cliente c) {
if (c.EClienteEspecial)
ClientesEspeciais.lista.Add(c);
}
}
}

As partes de uma classe não podem definir aspectos contraditórios.
Uma classe (ou estrutura) pode ter dois tipos de aspectos ou qualidades: acumulativa e não-acumulativa.
Os aspectos acumulativos são aspectos que cada parte do tipo parcial pode escolher adicionar, como derivação de interfaces, propriedades, índices, métodos e variáveis.
Os aspectos não-acumulativos são aspectos que todas as partes do tipo parcial devem possuir.

Classes Acumulativas

public partial class Computador {} // CompP1.cs
public partial class Computador : IProduto {// CompP2.cs
public void Adiciona() {...}
public void Remove() {...}
}

Classes Não-Acumulativas

public class Pessoa {}
public class Funcionario {}
public partial class Vendedor : Pessoa {} // VendedorP1.cs
public partial class Vendedor : Pessoa {} // VendedorP2.cs
//Não compila
public partial class Vendedor : Funcionario {}

Todas as partes devem ter a mesma acessibilidade.
Além de todas as partes definirem as mesmas partes não-acumulativas, apenas uma parte pode fazer o override de um método virtual ou abstract, e apenas uma parte pode implementar uma mesma interface.
Ao usar Partial Types, é recomendável indicar no nome do arquivo que este contém partes de um tipo. Como por exemplo: MinhaClasseP1.cs, MinhaClasseP2.cs

Bom pessoal, esta aula fica por aqui, já acompanhem a sequencia com a tal aula perdida, englobando Nullable Types

Até lá!

Sexta .NET – Aula 10 – Asp.NET e C# – Parte I

Bom pessoal,

Passada mais uma semada de correria e muito trabalho e aqui estamos para mais uma aula do Sexta .NET.
Hoje vou cumprir minha “dívida” com vocês e colocarei a aula que estou devendo a mais.

Para iniciar as atividades desta noite vamos falar de Asp.NET e C #.
Iniciaremos hoje falando sobre UserControls, Eventos e Delegates.

User controls

  • Controle web criado por um usuário.
  • Possui extensão .ascx
  • Herda de System.Web.UI.UserControl
  • Simplificam a reusabilidade de código e componentes User interface (UI) dentro de uma aplicação Web
  • Contém HTML, mas não as tags <HTML>,<BODY> ou <FORM>
  • Contém código para gerenciar seus próprios eventos
  • Podem agregar vários controles em um componente reusável

Exemplo de User Control

Eventos e Delegates

Conceitos:
Evento: ação que pode ser gerenciada/manipulada através de código
Delegate: membro da classe responsável por “delegar” as ações correspondentes a ocorrência de um evento ao(s) manipulador(es) de eventos correspondentes
Manipulador de Evento: método responsável pela execução de ações em reação a ocorrência de um evento

Cinco passos para se trabalhar com eventos
Passo 1: declarar o delegate contendo a assinatura do manipulador de evento correspondente ao evento

public class Cliente
{
public delegate void delegateProdutos(int produtos);
}

Passo 2: declarar o evento (deve ser do mesmo tipo do delegate correspondente)

public class Cliente
{
public delegate void delegateProdutos(int produtos);
public event delegateProdutos EventoProdutos;
}

Passo 3: disparar o evento na chamada de algum método da classe

public class Cliente
{
...
public void MetodoEvento(int produtosAdquiridos) {
this.EventoProdutos(produtosAdquiridos); }
}

Passo 4: assinar o evento indicando o manipulador de eventos do mesmo através de uma instância de delegate

cliente.EventoProdutos += new Cliente.delegateProdutos(ManipuladorEvento);

Passo 5: implementar o manipulador de evento (deve respeitar a mesma assinatura definida pelo delegate do evento)

public void ManipuladorEvento(int produtos)
{
label1.Text = produtos.ToString();
}

Pessoal, por aqui ficamos nesta aula.
Foi curta mas é coisa importante e necessita de bastante prática.

Jajá libero a próxima aula.

Att,
Victor Santos

Sexta .NET – Aula 9 – Desenvolvendo para internet parte II

Bom dia pessoal,

Depois de uma semana sem o curso devido à correria que estamos ultimamente venho hoje bombardeá-los de conhecimento.
Vamos ter duas aulas em sequencia, uma agora sendo Desenvolvendo para internet parte II e logo mais ao fim do dia estarei colocando mais uma aula.

Vamos ao que interessa?

Sexta .NET – Aula 9 – Desenvolvendo para internet Parte II

ADICIONANDO EVENTOS

Muitos eventos são disparados através de ações de usuários captadas pelo navegador
O código para manipular o evento disparado é executado no servidor
Quando o código completa sua execução, a página web pronta é enviada de volta ao navegador (contendo código html e script)

CONTROLES

  • Button: Botão
  • CheckBox: Caixa para selecionar ou não um item
  • Label: Texto que não pode ser editado diretamente
  • LinkButton: Um botão com aparência de link
  • ListBox: Lista para escolha de uma ou mais opções
  • RadioButton: Caixa para selecionar ou não um item.

Gridview
Tabela para exibição de dados de fácil preenchimento e integração com BD, com controle de paginação e ordenação automáticos e suporte a templates.

  • DataList: Mecanismo parecido com o GridView, porém, com menos recursos
  • Repeater: Mecanismo parecido com o GridView, porém mais flexível e leve
  • DropDownList: Lista para escolha de uma das opções. Bastante útil quando se quer que as opções sejam extraídas de um banco de dados
  • Image: Exibição de uma imagem

Wizard
Permite criar um formulário passo a passo.

SiteMap
Permite criar um menu de navegação baseado na página que o usuário está acessando.

Menu
Permite criar um menu com links de maneira estática ou dinâmica. Pode utilizar o mesmo arquivo XML do SiteMap.

MASTER PAGE

  • Criar uma Herança Visual para o Web Site.
  • Manutenção centralizada, não é necessário mudar o código em várias páginas, apenas em uma.
  • Facilidade na criação do layout.
  • Reaproveitamento de código.

Session

  • Uma das formas mais simples de manutenção de estado é através de variáveis de sessão
  • Por padrão, estas informações estão armazenadas no próprio processo do ASP.NET
  • É possível armazenar informações de sessão em um processo separado (um servidor de estado) ou até mesmo em um Sistema Gerenciador de Banco de Dados
  • Uma variável de sessão está associada exclusivamente a uma única sessão.
  • Isto significa que um dado armazenado em uma variável de sessão com nome X para o usuário João não será visível na variável de sessão de mesmo nome do usuário Pedro, e vice-versa.

Session.Add("X", "Valor");
string nome = (string)Session["X"];

Session – Eventos associados

Presentes no Global.asax


protected void Session_Start(Object sender, EventArgs e){//Evento disparado quando a uma sessão é iniciada.}

protected void Session_End(Object sender, EventArgs e){//Evento disparado quando a sessão é finalizada.}

Application

  • Variável de estado da aplicação
  • Visível em toda aplicação para TODOS usuários
  • Exemplos de uso:
    • Chat
    • Contador de Acessos
  • Exemplo:

    Application["ContadorAcessos"] = 0;

Application – Eventos associados

Presentes no Global.asax

protected void Application_Start(Object sender, EventArgs e){//Evento disparado quando a aplicação é iniciada.}

protected void Application_End(Object sender, EventArgs e){//Evento disparado quando uma aplicação é finalizada.}

ViewState

Mantêm automaticamente os valores de controles de servidor entre um postback e outro
Internamente funciona como um campo oculto (hidden) um pouco mais sofisticado

Ao rodar uma aplicação ASP.NET sem qualquer controle verá que é criado um campo oculto para o armazenamento do ViewState:

<input type=”hidden” name=”__VIEWSTATE”
id=”__VIEWSTATE” value=”/wEPDwUJNzgzNDMwNTMzZGS8mO25pQR00V4slvgSxG3dEvK+hA==”>

Note que os dados não são exibidos em texto plano, por questões de segurança

Pode-se ainda adicionar manualmente valores a um ViewState, lembrando que você vai conseguir recuperá-los apenas na mesma página:

ViewState.Add("Nome", "Bill");
String nome = (string) ViewState["Nome"];

Cookie

  • Trata-se de um pequeno arquivo de texto que é armazenado na maquina do usuário
  • Usado, por exemplo, em sites de comércio eletrônico, para exibir as preferências e características do usuário
  • Pode identificar o usuário mesmo dias depois de seu acesso a página.
  • O grande problema dos cookies é que o usuário simplesmente pode desabilitar este recurso em seu navegador

Escrevendo um Cookie:

//Cria um novo cookie, passando o nome no construtor
HttpCookie cookie = new HttpCookie(“Curso”);

//Determina o valor o cookie
cookie.Value = “Sexta.NET”;
//Configura o cookie para expirar em 1 mês
cookie.Expires = DateTime.Now.AddMonth(1);
//Adiciona o cookie
Response.Cookies.Add(cookie);

Lendo um Cookie:

//Captura o cookie
HttpCookie cookie = Request.Cookies[“Curso”];

String strCookieValue = “Vazio”;

//Certifica-se que o cookie existe
if (cookie != null)
strCookieValue = cookie.Value.ToString();

Web.config

  • Arquivo no formato XML
  • Informações de configuração da sua aplicação, tais como, string de conexão, páginas de erro, modo de compilação,etc.
  • Armazenar valores e parâmetros que sejam comuns a toda nossa aplicação.
  • Case Sensitive

Bom galera, vamos ficar por aqui, com este conteúdo apresentado finalizamos “Desenvolvimento para Internet”.
Voltaremos com um conteúdo mais aprofundado: UserControls

Até mais!

Victor Santos