SETI 2011 – Semana de Empreendedorismo e Tecnologia da Informação

A SETI (Semana de Empreendedorismo e Tecnologia da Informação) ocorrerá de 21 a 25 de novembro de 2011 na UFRJ, no campus da Ilha do Fundão. A edição deste ano tem como tema “Compartilhando ideias, desenvolvendo pessoas” e oferecerá  palestras, minicursos e workshops. O evento é gratuito, bastando realizar uma inscrição online.

Confira aqui a programação, que engloba minicurso de Scrum, certificação digital e programação para jogos 3D, palestras de gestão e empreendedorismo, além de cases de empresas como Globo.com e Americanas, entre outros.

Local: Auditório do Centro Cultural Horácio Macedo (mais conhecido como Auditório Roxinho), no prédio do CCMN – Campus da Ilha do Fundão, Rio de Janeiro, RJ.

Semana de Engenharia de Softwares e Banco de Dados 2011

Olá pessoal, a falta de tempo tem me impedido de postar ultimamente, mas gostaria de compartilhar com vocês um evento que, particularmente, eu acho bastante interessante.

O Instituto Infnet realizará do dia 24 a 29 de Outubro no Auditório a Semana de Engenharia de Software e Banco de Dados. A Semana é uma oportunidade de aprendizado e networking. São 10 palestras sobre temas cuidadosamente escolhidos, ministrados por professores do Instituto Infnet e profissionais do mercado. Dentre os temas que serão abordados, estão: Domain Driven Design, Arquitetura de Software em Equipes Ágeis, Introdução a Entity e muito mais! Os alunos do Infnet receberão em seu e-mail, um código de desconto para inscrição na semana. Alunos da Graduação terão 90% de desconto em cima do valor cheio, que é de R$190,00 Valor com desconto R$19,00; Alunos de Pós-Graduação e Formação receberão 70% de desconto; Para alunos do ProUni o código garante sua gratuidade no evento. O código garante o desconto sugerido conforme as informações acima, mas caso você não receba, por favor encaminhe seus dados (nome completo/CPF) para ses@infnet.edu.br, para que seja reencaminhado ao e-mail correto o seu código promocional. Garanta já sua vaga através do site: www.infnet.edu.br/ses

O Instituto Infnet localiza-se na Rua São José, 90 – Centro – Rio de Janeiro.

Até a próxima.

Contato JavaNiaco

Fala pessoal,

agora o JavaNiaco tem uma página no Facebook. Você pode ficar atualizado com os últimos posts do blog curtindo a página http://www.facebook.com/JavaNiaco.

Você também pode entrar em contato conosco através da nossa página de contato http://javaniaco.wordpress.com/contato/ ou através do e-mail contato@javaniaco.com.

E não deixe de assinar nosso feed e ler direto do seu leitos de RSS. Basta cadastrar o seguinte endereço http://feeds.feedburner.com/PublicJavaniaco e tudo fica mais fácil.

Até o próximo post.

Palestra sobre Demoiselle Framework

Hoje tive a oportunidade de ministrar uma palestra na XV Semana Tecnológica e Cultural do IST-Rio, em Quintino. A palestra foi uma introdução ao uso do Demoiselle Framework.

Gostaria de agradecer pela oportunidade de apresentar meu material no evento e pela hospitalidade maravilhosa.

Gostaria também de agradecer o apoio de todos os meus amigos e professores da turma GADS-2009M3T do Instituto Infnet pelo apoio incondicional.

Segue abaixo os slides da apresentação.

Criando arquivos XML em Java usando XStream

[O CÓDIGO DESSE E DE OUTROS POSTS SERÃO DISPONIBILIZADOS EM BREVE]

Neste post mostraremos como trabalhar com o XStream para gerar código XML através de classes Java.

O XSteam é uma biblioteca simples que tem como sua funcionalidade a serialização de objetos Java em XML e vice-versa. O que impressiona no XStream é a sua simplicidade na hora da implementação. Adicionando apenas um JAR , que pode ser baixado gratuitamente no site http://xstream.codehaus.org/download.html, você já consegue fazer o proposto.

Bem, vamos mostrar na prática como funciona…

  1. Para nosso exemplo faremos a serialização do código referente ao domínio apresentado abaixo.

    Diagrama de Classes

  2. Então vamos começar criando nossas duas classes de modelo (Pessoa e Endereco)
    package modelo;
    
    public class Endereco {
    
    	private String rua;
    	private int numero;
    	private String complemento;
    	private String bairro;
    	private String cidade;
    	private String uf;
    	private String pais;
    	private String cep;
    
    	public Endereco() {
    	}
    
    	public Endereco(String rua, int numero, String complemento,
    			String bairro, String cidade, String uf, String pais, String cep) {
    		super();
    		this.rua = rua;
    		this.numero = numero;
    		this.complemento = complemento;
    		this.bairro = bairro;
    		this.cidade = cidade;
    		this.uf = uf;
    		this.pais = pais;
    		this.cep = cep;
    	}
    
    	public String getRua() {
    		return rua;
    	}
    
    	public void setRua(String rua) {
    		this.rua = rua;
    	}
    
    	//Escreva aqui os outros métodos Gets e Sets
    
    	@Override
    	public String toString() {
    		return "Endereco [rua=" + rua + ", numero=" + numero + ", complemento="
    				+ complemento + ", bairro=" + bairro + ", cidade=" + cidade
    				+ ", uf=" + uf + ", pais=" + pais + ", cep=" + cep + "]";
    	}
    
    }
    
    
    package modelo;
    
    public class Pessoa {
    
    	private String nome;
    	private String telefone;
    	private String email;
    	private Endereco endereco;
    
    	public Pessoa() {
    		endereco = new Endereco();
    	}
    
    	public Pessoa(String nome, String telefone, String email, String rua, int numero, String complemento,
    			String bairro, String cidade, String uf, String pais, String cep) {
    		this.nome = nome;
    		this.telefone = telefone;
    		this.email = email;
    		this.endereco = new Endereco(rua, numero, complemento, bairro, cidade, uf, pais, cep);
    	}
    
    	public String getNome() {
    		return nome;
    	}
    
    	public void setNome(String nome) {
    		this.nome = nome;
    	}
    
    	//Escreva aqui os outros métodos Gets e Sets
    
    	@Override
    	public String toString() {
    		return "Pessoa [nome=" + nome + ", telefone=" + telefone + ", email="
    				+ email + ", endereco=" + endereco.toString() + "]";
    	}
    
    }
    
    
  3. Agora que temos nossas classes de controle montadas, podemos adicionar o jar do XStream no buildpath do projeto
  4. Depois de ter feito isso, vamos criar uma classe de controle que efetuará a serialização do objeto em XML. Para isso, criamos uma classe chamada PessoaXML
    package controle;
    
    import modelo.Endereco;
    import modelo.Pessoa;
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    public class PessoaXML {
    
    	XStream xstream = new XStream(new DomDriver()); //a biblioteca XPP3 não é necessária
    
    	public PessoaXML() {
    		xstream.alias("pessoa", Pessoa.class);
    		xstream.alias("endereco", Endereco.class);
    	}
    
    	public String toXML(Pessoa pessoa){
    		return xstream.toXML(pessoa);
    	}
    }
    
    
  5. Pronto, nosso programa está pronto para gerar código XML através de classes Java. Agora vamos criar nossa última classe para testar o funcionamento do nosso código
    package visao;
    
    import controle.PessoaXML;
    import modelo.Pessoa;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    		Pessoa pessoa = new Pessoa("Marco",
    								   "88997766",
    								   "email@dominio.com",
    								   "Rua do Passeio",
    								   130,
    								   "apto 205",
    								   "Centro",
    								   "Rio de Janeiro",
    								   "RJ",
    								   "Brasil",
    								   "12455334");
    
    		PessoaXML xml = new PessoaXML();
    		System.out.println(xml.toXML(pessoa));
    
    	}
    
    }
    
    

    E o nosso resultado esperado é o seguinte

    <pessoa>
      <nome>Marco</nome>
      <telefone>88997766</telefone>
      <email>email@dominio.com</email>
      <endereco>
        <rua>Rua do Passeio</rua>
        <numero>130</numero>
        <complemento>apto 205</complemento>
        <bairro>Centro</bairro>
        <cidade>Rio de Janeiro</cidade>
        <uf>RJ</uf>
        <pais>Brasil</pais>
        <cep>12455334</cep>
      </endereco>
    </pessoa>
    

Agora, vamos fazer o caminho inverso. Vamos pegar um valor gerado em XML e popular nosso objeto.

  1. Vamos adicionar o método fromXML() na classe PessoaXML e que ficará da seguinte forma
    	public Pessoa fromXML(String xml){
    		return pessoa = (Pessoa)xstream.fromXML(xml);
    	}
    
  2. A nível de teste, vamos criar um variável do tipo String e adicionar nela o valor que o teste anterior retornou. Agora vamos criar a classe MainDeserializing que ficará da seguinte maneira
    package visao;
    
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    import modelo.Endereco;
    import modelo.Pessoa;
    import controle.PessoaXML;
    
    public class MainDeserializing {
    
    	public static void main(String[] args) {
    
    String xml = "<pessoa>" +
    						"<nome>Marco</nome>" + 
    					    "<telefone>88997766</telefone>" + 
    					    "<email>email@dominio.com</email>" + 
    					    "<endereco>" + 
    					      "<rua>Rua do Passeio</rua>" + 
    					      "<numero>130</numero>" + 
    					      "<complemento>apto 205</complemento>" + 
    					      "<bairro>Centro</bairro>" + 
    					      "<cidade>Rio de Janeiro</cidade>" + 
    					      "<uf>RJ</uf>" + 
    					      "<pais>Brasil</pais>" + 
    					      "<cep>12455334</cep>" + 
    					    "</endereco>" + 
    					  "</pessoa>";
    
    		PessoaXML pessoa = new PessoaXML();
    		System.out.println(pessoa.fromXML(xml).toString());
    
    	}
    
    }
    

    E o nosso resultado esperado será

    Pessoa [nome=Marco, telefone=88997766, email=email@dominio.com, endereco=Endereco [rua=Rua do Passeio, numero=130, complemento=apto 205, bairro=Centro, cidade=Rio de Janeiro, uf=RJ, pais=Brasil, cep=12455334]]

*Caso o interesse seja salvar o código XML gerado em arquivo, recomendo que dêem uma olhada em File Stream, tentarei escrever um post sobre isso em breve.

Bem, espero que tenham gostado.

Até um próximo post.

Referência: http://xstream.codehaus.org/tutorial.html

Fazendo upload de arquivos de um HTML para um servidor usando ASPX

Esses dias me passaram uma tarefa no trabalho e achei que seria legal compartilhar com vocês. Não usarei o problema na íntegra, pois a solução era para algo muito específico, mas tentarei reproduzir da melhor maneira. Bem, vamos lá…

Eu precisei fazer um upload de arquivo de uma página HTML (já existente) para um servidor remoto, mas o escopo da tarefa me obrigava a usar uma página ASPX para “mediar ” esse upload.

Relembrando alguns conceitos da arquitetura web, podemos dizer que uma página HTML não tem suporte a session. Uma  session é um array que comporta objetos e que funciona somente no lado do servidor.

O que temos em HTML são:

  • Headers : as variáveis são passadas de forma escondida e são representadas no form HTML pelo método POST.
  • QueryString: as variáveis são passadas na URL da página e podem ser visíveis a todos os usuários. São representadas pelo método GET no form HTML.
  • Cookies: alguns dados de comunicação com o servidor são gravados em um arquivo na máquina do cliente mantendo a persistência das sessões HTTP.

Na página HTML eu tinha basicamente um formulário e o principal foco do nosso problema era o upload de arquivo.

<input id="arquivo" name="arquivo" type="file" />

A única opção era fazer a integração com uma página ASPX passando o arquivo por POST.

Então meu arquivo HTML ficou assim:

<form id="upload" method="post" runat="server" action="Upload.aspx" enctype="multipart/form-data" target="formEnviar">
 <table>
  <tr>
   <td>Selecione o arquivo</td>
  </tr>
  <tr>
   <td>
    <input id="arquivo" name="arquivo" type="file" runat="server" />
   </td>
  </tr>
  <tr>
   <td>
    <input type="submit" value="Envia" />
   </td>
  </tr>
 </table>
</form>

E por último vamos fazer com que o arquivo que foi submetido por esse formulário chegue no servidor. Para isso, vamos criar uma página ASPX que pegue as informações passadas pelo form HTML. Para esse exemplo usamos C# e retiramos o CodeBehind, deixando o código todo dentro do próprio ASPX.

<%@ Page Language="C#" AutoEventWireup="true" Inherits="FileUpload._Default" %>

<!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 runat="server">
<title></title>
</head>

<body>
</body>

</html>

<script runat="server">
   protected string fileName="";

   protected void Page_Load(object sender, EventArgs e)
   {
     HttpPostedFile myFile = Request.Files["arquivo"] as HttpPostedFile;
     if (myFile != null && myFile.ContentLength != 0)
    {
     fileName = myFile.FileName;
     myFile.SaveAs(@"C:\Temp\" + fileName);
    }
    else
    {
     fileName = "";
    }
   }

</script>

Um abraço e até o próximo post. :)

Desenvolvimento RIA com Java

Olá pessoal.

No final do ano passado foi realizado no Instituto Infnet a Semana de Engenharia de softwares, onde foram apresentadas palestras referentes ao tema.

O slide que estou compartilhando foi uma das melhoras que eu assisti, ministrada pelo professor Armênio Cardoso, e é sobre desenvolvimento de aplicações em Java usando RIA.

Um grande abraço e até o próximo post.

Java: O filme

Meu primeiro post vai ser um vídeo muito legal que eu vi no youtube e resolvi compartilhar com vocês…

divirtam-se :D

Até o próximo post…

Bem-vindos!!!

Sejam muito bem-vindos ao JavaNíaco. Apesar do nosso no sugestivo, não abordaremos apenas Java, mas sim desenvolvimento de uma maneira geral, porém usaremos essa linguagem como padrão para alguns de nossos exemplos. Nosso objetivo principal não é ensinar apenas uma vertente, mas sim mostrar soluções de desenvolvimento para nossos leitores, sendo assim, teremos artigos que serão escritos em Ruby, PHP, Java, C# etc. Tentaremos sanar dúvidas comuns que assolam o dia-a-dia de um programador abordando vários assuntos como: configurações, sintaxe das linguagens, patterns, algoritmos e estruturas de dados. Espero que esse blog seja de muita utilidade e aproveitem.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.