30 novembro 2010

C.E.S.A.R vence Prêmio Finep 2010

Oi pessoal. Vou compartilhar com o mundo uma notícia da minha empresa CESAR. Eu não tenho palavras para expressar o quanto sou grato e me sinto orgulhoso em fazer parte da melhor empresa que já trabalhei. Segue na integra.

Agora é oficial: o C.E.S.A.R é o melhor Instituto de Ciência e Tecnologia do Brasil. A instituição foi a grande vencedora do Prêmio Finep de Inovação Tecnológica, edição 2010, na categoria Instituição de Ciência e Tecnologia. A final da premiação aconteceu nesta segunda-feira(29.11.2010) na CNI (Confederação Nacional da Indústria), em Brasília, contando com as presenças do ministro da Ciência e Tecnologia, Sergio Rezende, e do presidente da FINEP, Luis Fernandes. Esta é a segunda vez que o C.E.S.A.R conquista o prêmio, em 2004 o C.E.S.A.R tinha ganho prêmio na categoria mais inovadora instituição de pesquisa do Brasil.

"Este prêmio é um reconhecimento de que estamos no caminho certo, sempre buscando projetos desafiadores que levam inovação para a sociedade. É a materialização de um empreendimento inovador e de sucesso, mais uma vez reconhecido nacionalmente. Dedicamos esta conquista aos mais de 400 profissionais que formam o C.E.S.A.R e, em especial, àqueles que idealizaram este projeto há quase 15 anos”, comemora o superintendente do C.E.S.A.R Sergio Cavalcante.

Veja as fotos da entrega do Prêmio registradas pela Finep: http://picasaweb.google.com/FINEPcomunica/PremioFINEPDeInovacao2010EtapaNacionalFotosRicardoLemosMCT#

O C.E.S.A.R ganhou o direito de disputar a etapa nacional por ter conquistado o prêmio como a melhor Instituição da Região Nordeste na semana passada. Na mesma categoria em que o C.E.S.A.R concorreu, também disputaram IMAmt-Instituto matogrossense do Algodão (MT), Norte-Instituto CERTI Amazônia (AM), Departamento de Inovação Tecnológica da Universidade Federal de Santa Catarina (SC), Fundação Centro Tecnológico de Minas Gerais (MG).

Os cinco vencedores nacionais receberam troféus e também serão contemplados com recursos do programa de Subvenção Econômica, que variam de R$ 120 mil a R$ 2 milhões, dependendo da categoria premiada. No caso do C.E.S.A.R, o prêmio total será de R$ 1 milhão para aplicar em projetos de subvenção.

30 agosto 2010

Programando para BADA (samsung)

Estou desenvolvendo aplicações aqui no C.E.S.A.R usando a plataforma Bada (c++). Já fiz algumas aplicações e estou achando legal e interessante essa plataforma mobile. Neste post, falarei um pouco sobre Bada para curiosos.

O que é Bada?
Bada significa oceano (na Korea), no qual a Samsung acredita que essa tecnologia permitirá um oceano de novas aplicações.

"Samsung bada is a new smartphone platform that allows developers to create feature-rich applications that elevate the user experience in mobile spaces." (documentação do SDK). Ou seja, uma plataforma para dispositivos smartphones da Samsung para desenvolver aplicativos mais ricos, tal como os aplicativos do iPhone.

Visão da Samsung sobre Bada (fonte: http://www.bada.com/whatisbada/)

A Samsung espera que sua tecnologia venha ter uma fatia de mercado considerável no futuro, uma vez que os celulares menos afortunados (conhecidos como features phones) tendem a ser substituidos por smartphones. Além disso, quer competir com iPhone (Apple) e Android (OHA).
...

Para conseguir atingir essa meta eles criaram um ecossistema parecido (pra não dizer igual) ao modelo de negócio da Apple (AppleStore). Neste modelo o desenvolvedor pode fazer aplicativos para usuários, podendo disponibilizar na loja da Samsung (http://www.samsungapps.com/).

Para entender o ciclo em detalhes consulte a fonte: http://www.bada.com/whatisbada/ecosystem/

Dispositivo WAVE
A samsung lançou o dispositivo W.A.V.E (http://www.bada.com/badadevices/) que possui um bom hardware e pode ser comparado com iPhone 4 (em teoria).





Para saber mais:

Em resumo, a tecnologia Bada é uma plataforma promissora de desenvolvimento, equivalente ao modelo iPhone (embora com mercado insignificante ainda), que permite os desenvolvedores fazerem aplicações e podendo ser remunerados tal como o modelo da Apple. Próximos posts vou abordar alguns exemplos e problemas que já tive com Bada.


17 agosto 2010

Inscrições para Residência em Bada da Samsung e C.E.S.A.R

Prorrogadas inscrições para Residência em Bada da Samsung e C.E.S.A.R
(notícia informada pelo C.E.S.A.R.)

A Samsung e o C.E.S.A.R prorrogaram o prazo de inscrições para seleção no Programa de Residência em Desenvolvimento de aplicações móveis na plataforma SAMSUNG BADA. O valor da bolsa de estudos oferecida para os residentes durante o programa, que terá duração de sete meses, é de R$ 1.800. Para participar do processo seletivo, os interessados devem encaminhar currículo e histórico escolar para residenciabada@cesar.org.br.

O curso é direcionado para graduados ou alunos cursando o último semestre de formação nos cursos da área de computação com conhecimento nas linguagens C e C++. Interessados de qualquer parte do país podem se candidatar. As atividades acontecem presencialmente na sede do C.E.S.A.R, no Recife. Para mais informações, o edital está disponível no endereço eletrônico www.cesar.org.br/bada.pdf.

A Residência utiliza a metodologia de design centrado no usuário e se baseia no conceito de Residência em Software, fornecendo aos alunos um mecanismo inovador de capacitação ao mesmo tempo em que funciona como um catalisador de experiência.

Durante a execução do projeto, os alunos da residência estarão inseridos no ambiente profissional do C.E.S.A.R e, com o acompanhamento de tutores, utilizarão o conhecimento adquirido no curso para desenvolver software para celulares que utilizem a plataforma BADA. A carga horária total é de 976 horas, divididas em 176 horas de aulas conceituais e 800 horas de prática assistida e coaching intensivo.

12 abril 2010

Usando ARRAY em Java para cadastro de clientes

Existem várias possibilidades para o uso de arrays. Elaborei um exemplo para demonstrar a utilização aplicando sobre um cadastro de clientes. Objetivo deste exemplo é mostrar uma maneira de utilizar array com Java.


Para saber o que é um array veja a definição da Wikipédia sobre array. Os principais pontos que devem ser observados para entender o uso de Array em Java na minha opinião são:
  • Um array em Java precisa ser declarado usando os colchetes ( [ ] );
  • O caso mais comum do uso de array requer que este seja inicializado (alocar memória) e neste momento, deve-se informar o seu tamanho; Ex. String[] listaClientes = new String[quantidade];
  • Para acessar os dados do array basta usar os colchetes, seguido por seu índice. Ex. listaClientes[i] = JOptionPane.showInputDialog("Nome do cliente "+(i+1));
  • Quando um array for criado na memória ele será inicializado com valores default do tipo de dados conforme o tipo de sua declaração. Ou seja, um array de tipo String terá valor null em cada elemento disponível até que seja atribuído outro valor String. Se for tipo primitivo int, o valor default é 0 (zero) para cada elemento; float será 0.0 e assim sucessivamente;
  • Para determinar o tamanho do array de forma dinâmica devemos usar o atributo length. Ex. listaClientes.length
  • Para recuperar os valores devemos usar o seu índice. Veja a ilustração acima. Ex. listaClientesTemporario += listaClientes[i] + "\n"
O programa a seguir utiliza um exemplo para cadastrar clientes e recuperar os seus dados cadastrados na memória. Tentei levar em consideração todos os pontos mencionados.




 

import javax.swing.JOptionPane;

/**

* Esse programa visa exemplificar a utilização de array, aplicando sobre um

* cadastro de clientes.

*

* @author Douglas Daniel Del Frari

*/

public class CadastroClientes {

// array de clientes

private static String[] listaClientes;

private static String menu = "CADASTRO CLIENTES\n\n" +

"1 --> Cadastrar clientes\n" +

"2 --> Listar clientes\n" +

"3 --> Sair";

/**

* Método inicial das aplicações Java SE

* @param args argumentos opcionais

*/

public static void main(String[] args) {

// escolha do usuario

String opcao = "";

do {

opcao = JOptionPane.showInputDialog(menu);

if (opcao.equals("1")) {

// cadastrar clientes

cadastrarClientes();

} else if (opcao.equals("2")) {

// listar clientes

listarClientes();

}

} while (!opcao.equals("3")); // comparacao usando String

} // fim do main

/**

* Lista os clientes cadastrados no ARRAY.

*/

private static void listarClientes() {

if (listaClientes!=null) {

// acumula a listagem numa variavel local

String listaClientesTemporario = "Lista de Clientes \n\n";

for (int i = 0; i < listaClientes.length; i++) {

listaClientesTemporario += listaClientes[i] + "\n";

}

// exibe na tela a listagem de clientes

JOptionPane.showMessageDialog(null,listaClientesTemporario);

} else {

// se nao tiver clientes o ARRAY será null, entao pode-se tratar com

// uma mensagem personalizada.

JOptionPane.showMessageDialog(null,

"É necessário realizar cadastro de clientes primeiro");

}

}

/**

* Esse metodo cadastra os usuarios na quantidade

* informada pelo usuario.

*/

private static void cadastrarClientes() {

// utiliza o metodo showInputDialog para perguntar a quantidade e

// converte o valor de String para inteiro e armazena na variavel

// local quantidade.

int quantidade = Integer.parseInt(JOptionPane

.showInputDialog("Quantos clientes deseja cadastrar?"));

// inicializa o ARRAY com tamanho informado pelo usuario

listaClientes = new String[quantidade];

// percorre todo tamanho do ARRAY e cadastra seus elementos

for (int i = 0; i < quantidade; i++) {

listaClientes[i] = JOptionPane.showInputDialog("Nome do cliente "+(i+1));

}

JOptionPane.showMessageDialog(null, "Clientes cadastrados");

}

} // fim da classe



Considerações
Observe que o exemplo propõe utilizar uma variável global (atributo listaClientes) que é um tipo array de String. Isto porque utilizou-se métodos que são utilizados forá do escopo do método principal (main). Além disso, propomos utilizar uma interface gráfica usando a classe JOptionPane e dois dos seus métodos estáticos (showMessageDialog para exibir dados e showInputDialog para fazer a entrada de dados do usuário).

O array foi inicializado somente após o usuário determinar a quantidade de clientes a ser cadastrada. Assim podemos percorrer o cadastro de cada cliente até o fim do array (ver o método cadastrarClientes()). Se o usuário optar pela visualização da listagem de clientes antes de cadastrar algum cliente, optamos por mostrar uma mensagem para alertar que é necessário realizar o cadastro antes de listar (basta verificar se o array não está nulo - if (listaClientes!=null))

Essa solução não leva em consideração possíveis erros do usuário. Por exemplo, se no momento de informar a quantidade de clientes a ser cadastrada ele colocar um valor que não pode ser convertido para inteiro (ex. um caracter qualquer), teremos um erro de lógica e uma exceção será gerada. Neste caso precisaríamos usar um tratamento de exceção (try/catch).

Questões para debate
  1. Por que foi utilizado uma variável do tipo String para pegar a opcão de escolha do usuário durante a exibição da menu principal? Qual a diferença se usássemos o tipo inteiro?
  2. Modularizar o programa em partes menores trás algumas vantagens? Quais?
  3. O que acontece quando acabar o espaço deste tamanho (quantidade)?

29 março 2010

Depuração no Eclipse (debugger)



[ATUALIZADO com novo post] se chegou até aqui, saiba que tem um vídeo atualizado no post recente aqui.

No contexto de programação como podemos entender o que é a depuração e como fazê-la acontecer na prática? Quase sempre quando trabalho com novas turmas vejo uma grande maioria dos alunos ainda não utilizou esse precioso recurso do programador. O objetivo deste post é dar uma noção básica e mostrar como fazer na prática usando a IDE Eclipse.

O que é depuração?
"Um depurador (em inglês: debugger) é um programa de computador usado para testar outros programas e fazer sua depuração, que consiste em encontrar os defeitos do programa." [fonte Wikipédia]

Do meu ponto de vista, vejo como uma forma de rodar o programa de computador passo a passo, instrução por instrução de código afim de entender a sua sequência de execução em tempo real (run-time). Através deste procedimento o programador terá condições favoráveis para acompanhar o ciclo como um todo, podendo intervir no comportamento do fluxo padrão (mudando o valor de variáveis por exemplo), ou simplesmente, acompanhando o fluxo padrão da execução (observando a sequencia da execução linha a linha dentro do código fonte) para entender a lógica do programa.

Como fazer a depuração em Java?
Existem duas maneiras que considero mais convenientes de fazer isso em Java:
  1. Usar uma IDE: muitos procedimentos são simplificados para o desenvolvedor. As IDEs mais conhecidas para Java são Eclipse e NetBeans. Ambas são boas opções. Embora eu sugira o Eclipse por ser mais flexível e mais leve;
  2. Entender como podemos depurar e como fazer na prática: o Eclipse possui um HELP que explica os passos para poder fazer isso.
Passo a passo no Eclipse:
Antes de dizer como fazer, quero sugerir você procurar no HELP da IDE Eclipse esse procedimento. Acesse "/Help/Help Content". Procure em "Java Development User Guide", o post que se refere ao assunto: "Debugging your programs" (depurando seus programas).

Após uma leitura básica neste material do HELP, vamos perceber que para fazer a depuração precisamos fazer o seguinte:
  • Ter um código fonte dentro de um projeto Java;
  • Marcar uma linha no qual desejamos que a execução inicie a depuração (clique duplo na borda do seu editor de código fonte - junto a linha);
  • Iniciar a execução clicando em "menu Run/Debug As/Java Application";
O Eclipse possui uma perspectiva chamada DEBUG que será sugerida toda vez que uma execução em modo de depuração for invocada. Utilizar essa perspectiva facilitará a visualização da execução em tempo real.

A partir deste ponto você precisa utilizar os botões (Step Into (F5) ou Step Over(F6)), que servem, respectivamente, acessar a próxima instrução tentando entrar no bloco - precisa ter o código fonte; e acessar a próxima instrução não precisando entrar no bloco. Na prática isso permite acessar os códigos dos blocos dos métodos desejados de uma maneira conveniente. Se desejar sair ou continuar de forma normal, basta apertar os comandos (Terminate, Resume) respectivamente.









Conclusão
Por que depurar o código? Podemos acompanhar o ciclo de vida do aplicativo (do início ao fim), procurando verificar o valor de variáveis, de expressões, acessando métodos entre outras possibilidades.

Na minha opinião a principal vantagem é permitir o acompanhamento em tempo real. Já resolvi muitos bugs em menor tempo por utilizar esse recurso. Na prática, percebemos nosso erro de lógica quando podemos entender o que o computador está fazendo em determinada situação. A maioria das vezes o erro é do próprio programador que não previu determinada situação. Ao perceber isso, com ajudada da depuração, temos mais probabilidade de corrigir o bug alterando a lógica do programa.


24 março 2010

Dica Java SE: como remover espaços de um tipo String

De vez em quando eu postarei algumas dicas sobre programação em geral que considero úteis para um desenvolvedor. Vou focar em Java, mas pode-se procurar métodos similares nas outras linguagens de programação.

Uma maneira (não a única) para remover espaços em branco de uma variável de tipo String pode ser percorrida com o comando trim() e replaceAll(...).

 

/**

* Este programa visa exemplificar o uso do método da classe String chamado trim() e

* alguns cenários de uso.

*

* @author Douglas Daniel Del Frari

* @since 24/marco/2010.

*/

public class TesteTrim {

public static void main(String[] args) {

// Como remover os espacos do valor de um tipo String??

String nome = " Douglas Daniel Del Frari ";

System.out.println("nome 1: " + nome + " tamanho: "+nome.length());

// o método trim() permite remover os espacos. Obs.

// So funciona com espacos de inicio e fim do texto

String nome2 = nome.trim();

System.out.println("nome 2: "+ nome2 + " tamanho: "+nome2.length());

// Como remover qualquer espaco da string?

// pode-se usar o método replaceAll(...). Ex.

String nome3 = nome.replaceAll(" ", "");

System.out.println("nome 3: "+nome3 + " tamanho: "+nome3.length());

} // fim do método main

} // fim da classe

SAÍDA NO CONSOLE TEXTUAL:
 

nome 1: Douglas Daniel Del Frari   tamanho: 29
nome 2: Douglas Daniel Del Frari tamanho: 24
nome 3: DouglasDanielDelFrari tamanho: 21

Conclusão
Qualquer valor do tipo String possui vários métodos interessantes (consulte a API). Neste exemplo utilizamos o método trim() para remover os espaços. Entretanto, ele somente remove os espaços da posição que antecede e procede o texto inicial e final, respectivamente. Para contornar, podemos usar o método replaceAll(...), onde especificamos o que será removido e pelo que iremos replicar (removemos todos os espacos " " por "" --> caracteres sem espaço).