Pessoal aí vai uma dica, como confio em alguém que diz que Java é orientado a pacotes (package)?
Um curso que vi em uma instituição me fez pensar seriamente se as universidades querem formar profissionais qualificados ou apenas pegar dinheiro dos pobres alunos que pagam cursos para tentarem aprender.
Uma instituição séria para cursos de verão é a USP e a FIAP (no meu conhecimento), porém muitas outras deixam a desejar.
O fato é que um cara que diz ter anos de experiência na área de informática fala só besteiras para um monte de aluno que está ali querendo aprender é realmente lamentável...
Certificação? Bom é sempre bom ter uma, tenho a minha da IBM, estou para tirar as outras, mas com 4 anos de experiência a certificação tiro pela minha satisfação pessoal e não mais para provar para as empresas que tenho conhecimento da linguagem em questão, hoje em dia muitos bons programadores não tem certificação, assim como muitos certificados (que decoraram livrinhos) não sabem se virar no dia a dia, assim como também há aqueles que estudam, tiram e são exemplos de programadores, ou seja, é trivial, lógico que é um diferencial em entrevistas, principalmente no início de carreira, mas é no dia a dia que veremos se o cara é bom, cursos? sim tenho muitos caro instrutor, é ótimo estar sempre estudando e se atualizando, é realmente uma pena saber que uma instituição que tem como professor um cara tão ruim ganhando e enganando pessoas inocentes e vir criticar os outros, falar de certificação, sendo que ele nem sabe o que é isso...
Pessoal procurem saber quem é o seu instrutor, coloque no GUJ e pesquise, participe de fóruns, não seja enganado por qualquer pilantra.
26 de agosto de 2008
22 de agosto de 2008
Apresentação Java Básico IT Training
Montei uma apresentação básica que será apresentado neste Sábado dia 23/08/2008 na Rua Amazonas, número 521 em São Caetano do Sul, sobre o novo curso de Java na IT Training, vale a pena conferir.
Bug no sistema da Anatel
Hoje falando com meu amigo Diego Plentz descobri que ele havia achado um Bug muito básico, porém extremamente perigoso no site da Anatel.
Esse bug é o seguinte eu consigo entrar no sistema de Ordem de Serviço deles, pegar informações pessoais de usuários como telefones, e-mails, dentre outras informações, assim como abrir nova ordem de serviço, como fazer isso? Muito simples bastava pegar o CPF e o e-mail do usuário que solicitou o chamado para a Anatel... mas como fazer isso? Bastava pegar essa URL: http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094111 sendo que o idSolicitacao é sequencial, ou seja, se eu continuar colocando outros números, vou pegar ordem de serviços de outras pessoas...
Uma falha grave, aparentemente a Anatel colocou em manutenção este sistema.
Caso queira visualizar a reclamação, leia o blog do Diego ou veja no GUJ a notícia.
Como nosso amigo Kumpera disse em seu blog sobre esse Bug:
Esse bug é o seguinte eu consigo entrar no sistema de Ordem de Serviço deles, pegar informações pessoais de usuários como telefones, e-mails, dentre outras informações, assim como abrir nova ordem de serviço, como fazer isso? Muito simples bastava pegar o CPF e o e-mail do usuário que solicitou o chamado para a Anatel... mas como fazer isso? Bastava pegar essa URL: http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094111 sendo que o idSolicitacao é sequencial, ou seja, se eu continuar colocando outros números, vou pegar ordem de serviços de outras pessoas...
Uma falha grave, aparentemente a Anatel colocou em manutenção este sistema.
Caso queira visualizar a reclamação, leia o blog do Diego ou veja no GUJ a notícia.
Como nosso amigo Kumpera disse em seu blog sobre esse Bug:
Segurança como essa é inadmissivel para um órgão governamental. Isso é ridículo, é um afronte a nossa privacidade. Os amadores que fizeram esse sistema ignoraram todas regras básicas de segurança que qualquer desenvolvedor safo tem a obrigação de saber. Anatel, corrija isso com urgência e tome as devidas medidas administrativas para esse tipo de desastre não ocorra novamente. Por favor, a todos que lerem este texto, liguem já para a Anatel no 0800 33 2001, registrem uma reclamação formal e divulguem esse problema para o quanto antes ser solucionado.
12 de agosto de 2008
Criar um relógio digital utilizando SWT.
Olá galeraaaa...
Essa é a minha estréia aqui no Java Anywhere. Minhas postagens vão parecer no mínimo interessantes...pois dificilmente irei abordar temas avançados de Java, mas principalmente aqueles que parecem ser mais básicos...que todos acham que sabem...mas sempre fica alguma dúvida. Principalmente para quem está começando na área.
Bom, vamos falar de interface gráfica, mais especificamente o SWT. Atualmente eu trabalho única e exclusivamente com SWT. Porque o SWT e não o Swing? O SWT é "portável". Roda em qualquer plataforma. É preciso adaptá-lo ao sistema operacional, mas ainda assim ele é vantajoso. É bonito e tem algumas particularidades que facilitam para nós desenvolvedores, e outras que nos deixam com mais cabelos brancos.
Eu precisei desenvolver um relógio digital que deveria aparecer em uma tela de agendamento de consultas. Não seria nenhuma novidade, afinal, existem vários exemplos de relógios digitais na Web, mas, todos em Swing. Aí começa o problema. O SWT tem a sua própria metodologia para o uso de Threads. Aliás, ele tem a sua própria Thread, se me permitem afirmar. E como compreender isso? Eu procurei muito. Fiz várias perguntas no GUJ...mas ninguém sabia responder, até um amigo meu de trabalho me mostrar como é que se trabalha com Threads em SWT (Valeu Charles).
Bem, vamos lá. Vamos criar o nosso relógio digital.
Em primeiro lugar é importante que você já tenha o seu Eclipse com o devido Visual Editor e as Libs do SWT.
Primeiro passo: Construa uma Visual Classe chamada Relogio. Deixe como composite e mantenha o método main assinalado.
Nesse momento sua classe estará assim:
Você vai perceber que não estou utilizando o GridLayout, como o próprio Eclipse já sugere. Comente e trabalhe sem o Grid por hora.
Agora, o próximo passo é você criar duas Labels. Nomeie uma como labelData e a outra como labelHora.
Nesse momento você terá algo desse tipo:
Eu procurei ajustar a tela ao meu gosto sem seguir nenhum padrão pelo simples fato de se tratar de apenas uma demonstração.
Agora...pra deixar nossa classe bem organizada, vamos declarar a fonte assim como o tamanho do texto como atributos "private".Em seguida, dentro do construtor e antes de chamar o método initialize() adicionaremos aos atributos o tamanho e a fonte do texto.
Essa mesma variável nós usaremos agora lá no nosso Label assim como mostra o exemplo. parece que estou dando voltas não é ? Mas para quem faz manutenção esse tipo de organização ajuda muito.
Agora, vamos a parte mais gostosa do bolo. A criação desse relógio.
Bem abaixo da linha " labelHora.setText("")" iremos criar uma Thread. Essa é aquela que conhecemos. Não tem segredo algum. Logo em seguida criamos as variáveis de conversão de data e hora, não devemos esquecer dos "imports" e não esquecer de usar "data" do pacote javaUtil no "import". Mas e essa tal Thread do SWT?
Ela está lá dentro. Logo abaixo das variáveis de data e hora. Ela se chama "asyncExec". Sem ela, o relógio não funcionaria.
O código ficará assim:
De mais é tudo Java básico. Vale a pena fazer o teste em casa. Fica muito bacana.Não esqueçam de ajustar o tamanho da tela também no "método main" ok?
Boa sorte galera. Espero ter ajudado.
Essa é a minha estréia aqui no Java Anywhere. Minhas postagens vão parecer no mínimo interessantes...pois dificilmente irei abordar temas avançados de Java, mas principalmente aqueles que parecem ser mais básicos...que todos acham que sabem...mas sempre fica alguma dúvida. Principalmente para quem está começando na área.
Bom, vamos falar de interface gráfica, mais especificamente o SWT. Atualmente eu trabalho única e exclusivamente com SWT. Porque o SWT e não o Swing? O SWT é "portável". Roda em qualquer plataforma. É preciso adaptá-lo ao sistema operacional, mas ainda assim ele é vantajoso. É bonito e tem algumas particularidades que facilitam para nós desenvolvedores, e outras que nos deixam com mais cabelos brancos.
Eu precisei desenvolver um relógio digital que deveria aparecer em uma tela de agendamento de consultas. Não seria nenhuma novidade, afinal, existem vários exemplos de relógios digitais na Web, mas, todos em Swing. Aí começa o problema. O SWT tem a sua própria metodologia para o uso de Threads. Aliás, ele tem a sua própria Thread, se me permitem afirmar. E como compreender isso? Eu procurei muito. Fiz várias perguntas no GUJ...mas ninguém sabia responder, até um amigo meu de trabalho me mostrar como é que se trabalha com Threads em SWT (Valeu Charles).
Bem, vamos lá. Vamos criar o nosso relógio digital.
Em primeiro lugar é importante que você já tenha o seu Eclipse com o devido Visual Editor e as Libs do SWT.
Primeiro passo: Construa uma Visual Classe chamada Relogio. Deixe como composite e mantenha o método main assinalado.
Nesse momento sua classe estará assim:
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
public class Relogio extends Composite {
public Relogio(Composite parent, int style) {
super(parent, style);
initialize();
}
private void initialize() {
setSize(new Point(300, 135));
//setLayout(new GridLayout());
}
/**
* @param args
*/
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setSize(new Point(300, 135));
new Relogio(shell, SWT.NONE);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Você vai perceber que não estou utilizando o GridLayout, como o próprio Eclipse já sugere. Comente e trabalhe sem o Grid por hora.
Agora, o próximo passo é você criar duas Labels. Nomeie uma como labelData e a outra como labelHora.
Nesse momento você terá algo desse tipo:
labelData = new Label(this, SWT.NONE);
labelData.setBounds(new Rectangle(45, 60, 100, 30));
labelData.setText("");
labelHora = new Label(this, SWT.NONE);
labelHora.setBounds(new Rectangle(165, 60, 100, 30));
labelHora.setText("");
this.setSize(new Point(300, 135));
//Comente aqui//
//setLayout(new GridLayout());
}
Eu procurei ajustar a tela ao meu gosto sem seguir nenhum padrão pelo simples fato de se tratar de apenas uma demonstração.
Agora...pra deixar nossa classe bem organizada, vamos declarar a fonte assim como o tamanho do texto como atributos "private".Em seguida, dentro do construtor e antes de chamar o método initialize() adicionaremos aos atributos o tamanho e a fonte do texto.
Essa mesma variável nós usaremos agora lá no nosso Label assim como mostra o exemplo. parece que estou dando voltas não é ? Mas para quem faz manutenção esse tipo de organização ajuda muito.
public class Relogio extends Composite {
private Label labelData = null;
private Label labelHora = null;
private Font fontVerdanaDataBold = null;
private Font fontVerdanaHoraBold = null;
public Relogio(Composite parent, int style) {
super(parent, style);
//Aqui declaramos como queremos o nosso texto//
this.fontVerdanaDataBold = new Font(getDisplay(), "Verdana", 12, SWT.BOLD);
this.fontVerdanaHoraBold = new Font(getDisplay(), "Verdana", 12, SWT.BOLD);
initialize();
}
private void initialize() {}
labelData = new Label(this, SWT.NONE);
labelData.setBounds(new Rectangle(45, 60, 100, 30));
//Aqui declaramos a variável com tamanho e fonte do texto//
labelData.setFont(fontVerdanaDataBold);
labelData.setText("");
labelHora = new Label(this, SWT.NONE);
labelHora.setBounds(new Rectangle(165, 60, 100, 30));
//Aqui declaramos a variável com tamanho e fonte do texto//
labelData.setFont(fontVerdanaHoraBold);
labelHora.setText("");
this.setSize(new Point(300, 135));
//comente essa linha//
//setLayout(new GridLayout());
}
Agora, vamos a parte mais gostosa do bolo. A criação desse relógio.
Bem abaixo da linha " labelHora.setText("")" iremos criar uma Thread. Essa é aquela que conhecemos. Não tem segredo algum. Logo em seguida criamos as variáveis de conversão de data e hora, não devemos esquecer dos "imports" e não esquecer de usar "data" do pacote javaUtil no "import". Mas e essa tal Thread do SWT?
Ela está lá dentro. Logo abaixo das variáveis de data e hora. Ela se chama "asyncExec". Sem ela, o relógio não funcionaria.
O código ficará assim:
(new Thread(new Runnable() {
SimpleDateFormat sdfData = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat sdfHora = new SimpleDateFormat("HH:mm:ss");
public void run() {
while (true) {
if (!isDisposed() && !getDisplay().isDisposed()) {
//Aqui chamamos a tal "Thread" do SWT///
getDisplay().asyncExec(new Runnable() {
public void run() {
if (!labelData.isDisposed()&& !labelHora.isDisposed()) {
Date data = new Date();
labelData.setText(sdfData.format(data));
labelHora.setText(sdfHora.format(data));
}
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
} else {
break;
}
}
}
})).start();
De mais é tudo Java básico. Vale a pena fazer o teste em casa. Fica muito bacana.Não esqueçam de ajustar o tamanho da tela também no "método main" ok?
Boa sorte galera. Espero ter ajudado.
Apresentação sobre Wicket do USCS.java 2008
Introdução Wicket
From: adantas, 8 minutes ago
Um breve intrução ao framework web Wicket. Esta apresentação está focada em demonstrar as vantagens do wicket que são: simplicidade e agilidade.
SlideShare Link
11 de agosto de 2008
JavaServer Faces: Facilitando o Desenvolvimento Web - Palestra É Dia de Java 2007
Produtividade com JavaServer Faces
From: eduardo.bregaida, 9 minutes ago
Palestra Ministrada na Universidade de Santa Barbara do Oeste
SlideShare Link
JavaServer Faces Produtividade em Desenvolvimento - JustJava 2007
JavaServer Faces Produtividade em Desenvolvimento
From: eduardo.bregaida, 1 hour ago
Palestra ministrada no JustJava 2007
SlideShare Link
Profiling: Como Diagnosticar Problemas de Performance
Profiling - IMES.java - Haroldo Macedo
From: eduardo.bregaida, 1 hour ago
Palestra de Haroldo Macedo para o evento IMES.java
SlideShare Link
Red Code
Red Code
From: juliano.claiton, 1 minute ago
Palestra ministrada no último evento IMES(USCS).java
Códigos mal escritos e anti-patterns. O caminho do sucesso para o Blue Code.
SlideShare Link
From: juliano.claiton, 1 minute ago
Palestra ministrada no último evento IMES(USCS).java
Códigos mal escritos e anti-patterns. O caminho do sucesso para o Blue Code.
SlideShare Link
JSF e outras tecnologias Java Web - IMES.java
Estou postando a palestra que ministrei no evento IMES.java (USCS.java), o evento infelizmente foi marcado por um dia chuvoso.
Todas as palestras foram ótimas, logo estaremos disponibilizando as outras palestras no site do evento.
SlideShare Link
Todas as palestras foram ótimas, logo estaremos disponibilizando as outras palestras no site do evento.
SlideShare Link
1 de agosto de 2008
Struts 1.x.x
Bom pessoal, Struts está no passado, deveria estar morto, mas ainda existem milhares de sistemas legados.
Hoje estarei falando de uma prática meio particular de desenvolvimento que ando vendo por aqui e em outros sistemas legados pelos quais já passei.
Esse é um simples Bean Pessoa.java com seus getters and Setters.
Mas quando vamos criar o Form olha só:
No final nossas Actions de CRUD ficariam muito mais fáceis:
E a chamada no JSP?
pessoa.jsp
Parece mais trabalhoso no JSP do que se tivéssemos copiado os atributos do Bean, mudado tudo para String, mas na realidade, não precisaremos mais ficar dando casts desnecessários, as validações ficariam restritas no Form e o mesmo iria ficar visivelmente mais limpo.
Se um dia o Bean aumentar, ou seja, implementar novos atributos a atualização disto será bem mais simples...
Caso seu Bean chame um outro objeto, ou seja, um outro Bean trate-o como no exemplo abaixo:
Form
JSP
Hoje estarei falando de uma prática meio particular de desenvolvimento que ando vendo por aqui e em outros sistemas legados pelos quais já passei.
Tratando Seus objetos do Bean sem copy/paste no Form.
Hoje o que temos em alguns sistemas legados é um grande copy/paste do bean no form ou seja:
Exemplo:
Hoje o que temos em alguns sistemas legados é um grande copy/paste do bean no form ou seja:
Exemplo:
public class Pessoa { private Integer id; private String nome; private String endereco; private Integer idade; // getters e setters }
Esse é um simples Bean Pessoa.java com seus getters and Setters.
Mas quando vamos criar o Form olha só:
PessoaForm
Integer id;
String nome;
String endereço;
Integer idade;
//getters and setters
void validate(){//aqui validadores}
Isso é muito feio, um jeito bonito de resolver seria:
PessoaForm
Pessoa pessoa = new Pessoa();
//getters and setters
void validate(){
//aqui validadores
}
No final nossas Actions de CRUD ficariam muito mais fáceis:
IncluirPessoaAction
PessoaForm pessoaForm = (PessoaForm)form;
Pessoa pessoa = pessoaForm.getPessoa();
pessoaDAO.inserirPessoa(pessoa);
No final, somente iria mudar a chamada do método nas outras actions, como excluirPessoa, alterarPessoa, selecionarPessoa.
E a chamada no JSP?
pessoa.jsp
<html:text property="pessoa.nome" size="60" name="pessoaForm" maxlength="50" styleId="txtNome"/>
Parece mais trabalhoso no JSP do que se tivéssemos copiado os atributos do Bean, mudado tudo para String, mas na realidade, não precisaremos mais ficar dando casts desnecessários, as validações ficariam restritas no Form e o mesmo iria ficar visivelmente mais limpo.
Se um dia o Bean aumentar, ou seja, implementar novos atributos a atualização disto será bem mais simples...
Caso seu Bean chame um outro objeto, ou seja, um outro Bean trate-o como no exemplo abaixo:
Eemplo:
Bean
Bean
PessoaFisicaInteger id;
Pessoa pessoa = new Pessoa();//getters and setters
Form
PessoaFisicaForm
PessoaFisica pessoaFisica = new PessoaFisica();//getters and setters
//validate
JSP
<html:text property="pessoa.nome" size="60" name=" pessoaFisicaForm" maxlength="50" styleId="txtNome"/>
Poderíamos ter casos de beans dentro de beans e no JSP é só chamar com “.” Que representam os getters.
Bom é algo que ando vendo em muitos sistemas legados, Beans tendo seus atributos copiados no form como String para tratar tudo mais fácil, depois milhões de Casts nas Actions...
Bom é isso, aí está minha dica para quem vai pegar buchas de sistemas legados.
[]sss
Bom é isso, aí está minha dica para quem vai pegar buchas de sistemas legados.
[]sss
Assinar:
Postagens (Atom)