Fabula dos porcos

Juliano Carniel fala sobre a "Fabula dos Porcos" e da seus dois cents como contrubuição fazendo seus comentários sobre o mesmo... vale muito a leitura.

Neste post, o autor afirma que a TI deve auxiliar a empresa, servindo como ferramenta para aumentar produtividade, que se a TI for utilizada como fim e não como meio é algo ruim. - Concordo com ele.

Mais que isto, acredito que a culpa não é unicamente dos desenvolvedores, mas também dos seus gerentes e diretores. Pois, estas firguras administrativas é que tomam as decisões, eles é que deveriam ter uma visão maior no sentido horizontal e vertical de forma imparcial, não se deixando levar pela própria naturesa humana que é avesa a mudanças.

Já presenciei diversas vezes (já aconteceu comigo) onde o técnico fez algumas conciderações, sobre falhas do precesso atual, sobre falhas na forma como estava se trabalhando com a ferramenta, ou até mesmo sobre os novos direcionamentos da empresa, e a única coisa que o administrativo sabia dizer é: "nós precisamos disso, se não for assim nós perdemos o cliente".

Acabou que nós executamos exatamente como o administrativo havia nos instruido, fizemos a lambança que nos foi pedido, e hoje o cliente quer quebrar o contrato porque tudo que fizemos foi uma grande merda, afinal o SISTEMA não se adequava a realidade da empresa, falhava em diversos pontos deixando a empresa na mão.

Por isto, concordo 110% que TI deve ser um meio, e não o fim. Que a TI deve se moldar a realidade e não a realidade deve se moldar a TI.

Também concordo que muitos estão se tornando especialistas em uma ferramenta, quando deveriam se tornar um especialista em soluções.

Ah! também concordo com IMs são feramentas excelentes para a própria empresa, trazendo até mesmo novas soluções ao desenvolvimento problemático, MAS TEM QUE SER POLICIADO, pois existe muito abuso. Conheço pessoas, que se o gerente não fica no pé o fulano fica o dia todo vendo e-mail de piadinha e falando bobagens no msn. -Isso é produtivo? Acho que não.

Vale a leitura....


Fabula dos porcos

Fontes independentes concordam que vale a pena possuir uma certificação Sun

A Pesquisa Salarial de 2006 da Certification Magazine indica que Programadores Certificados Sun para a Plataforma Java ganham, em média, 20% a mais que os Microsoft Certified Professional Developers.

Os Desenvolvedores de Componentes Web Certificados Sun ganham, em média, 32% a mais do que outros desenvolvedores de tecnologia Java/Internet. (Fonte: Pesquisa Salarial de 2006 da Certification Magazine — consulte as tabelas 1 e 2)


Leia o material na integra....

9 habilidades não técnicas que você deve ter

1. Habilidade de escrita
2. Entendimento de ferramentas e de mapeamento de processos de negócio
3. Habilidade de oratória
4. Conhecimento de contabilidade
5. Aptidão para trabalhar bem em equipe
6. Iniciativa
7. Mente curiosa
8. Habilidade de argumentação
9. Disposição para correr riscos


9 habilidades não técnicas que você deve ter

10 dicas para equilibrar vida pessoal e trabalho

10 dicas para equilibrar vida pessoal e trabalho

1) Estabeleça e faça cumprir as suas prioridades
2) Comunique-se
3) Construa um plano de negócios para tornar sua vida melhor
4) Tire vantagem das políticas e programas de sua corporação
5) Procure um mentor
6) Trabalhe de forma mais eficiente
7) Compartilhe seus conhecimentos
8) Use seus dispositivos eletrônicos
9) Use seus dispositivos eletrônicos de forma inteligente
10) Mantenha perspectivas

10 dicas para equilibrar vida pessoal e trabalho

Os 10 pecados mortais para a carreira

1. Não ter um plano de vida.
2. Não atualizar suas habilidades.
3. Não entregar resultados.
4. Confundir eficiência com eficácia.
5. Acreditar que você é insubstituível.
6. Conhecer todas as respostas.
7. Cercar-se de bajuladores.
8. Esquecer-se de dar crédito a outros.
9. Falhar na auto-promoção.
10. Perder a perspectiva.


link para o artigo original...

Trabalhando como PJ ou como CLT

Excelentes posts, estes falam sobre as diferenças sobre a contratação CLT e PJ, vale apena dar uma conferida


http://www.1bit.com.br/content.1bit/weblog/pj_vs_clt

http://arcanjo.org/clt-ou-pj/

Lugares para você cadastrar seu CV

Lugares para você cadastrar seu CV para trabalhar na área de TI
http://empregocerto.uol.com.br/

[pagos]
http://www.manager.com.br/
http://www.catho.com.br/
http://www.empregos.com.br/

[Empresas de TI]
[pr/curitiba]
 http://www.ewave.com.br/
 http://www.intelly.com.br/
 http://snowmanlabs.com/
 http://www.atile.com.br/
 http://www.agrotis.com/
 http://www.metait.com.br/
 http://www.wipro.com

[pr/Maringá]
https://www.sicredi.com.br
http://www.cocamar.com.br


http://www.suntechintelligence.com/
www.datainfo.inf.br

www.edm.com.br

[sc/florianópolis] www.softplan.com.br/
 http://www.digitro.com
 http://www.suntech.com.br
 https://www.chaordicsystems.com/

http://www.cits.br
http://www.sumersoft.com
http://www.totvs.com
http://www.softexpert.com.br
http://www.neomind.com.br
http://www.neogrid.com.br
http://www.quicksoft.com.br

http://www.ivirtua.com.br
http://www.dominiosistemas.com.br
http://www.avaya.com.br/
http://www.icaro.com.br/
http://www.promonlogicalis.com.br
http://www.ibm.com/br/employment
http://www.globalvalue.com.br
http://www.sstnet.com.br
http://www.hsbc.com.br
http://www.lint.com.br
http://www.develop.com.br
http://www.dbccompany.com.br
http://www.dextra.com.br
http://www.matera.com
http://www.dbserver.com.br/
http://www.datum.inf.br
http://www.wplex.com.br
http://www.dtslatin.com
http://www.atech.br/
http://www.attps.com.br
http://www.laboris.com.br
http://www.dtsconsulting.com
http://www.gpti.com.br
http://www.datacom.ind.br/new/voce/
http://careers3.accenture.com/careers/brazil
http://www.cpqd.com.br/
http://www.cit.com.br
http://www.inmetrics.com.br/
http://www.systemplan.com.br/
http://www.5a.com.br/
http://www.third.com.br
http://www.t-systems.com.br
http://www.conectait.com.br
http://www.datum.inf.br
http://www.conectait.com.br
http://www.datum.inf.br/
http://www.geracaors.com.br
http://www.proativ.com.br
http://www.atontecnologia.com.br/

[RS/Porto Alegre]  talentos@tet.com.br
[SP/Campinas] www.ciandt.com
[SP/RJ] http://www.quality.com.br

[Parceiros/Terceiros]
http://www.intelly.com.br/
http://www.tivit.com.br/
http://www.cyberlynxx.com/
http://www.tivit.com.br
http://www.resource-rmc.com.br
http://www.celplan.com.br
http://www.debernt.com.br
http://www.proit.com.br
http://www.cpmbraxis.com
http://www.tdstecnologia.com.br/
http://www.hst.com.br
http://www.gtcon.com.br
http://www.valueteam.com
http://www.globalti.com.br
http://www.gestaohumana.com.br
http://www.tso-cons.com.br
http://www.dynamic.com.br
http://www.synovabr.com
http://www.cinq.com.br
http://www.wises.com.br
http://www.brq.com.br
http://www.politec.com.br
http://www.stefanini.com.br/
http://www.icaro.com.br/
http://www.teclogica.com.br



[RH]
http://gd9rh.com.br/
http://www.sinergiarecursoshumanos.com.br/
http://www.dbvitae.com.br
http://www.holdenrh.com.br
[sc]http://www.superato.com.br
http://www.hrit.com.br
http://www.staffrh.inf.br/
http://www.tiworksrh.com.br
http://www.chessrh.com.br
http://groups.google.com/group/rh-cit

[hunter]
http://www.michaelpage.com.br/
http://www.marciobamberg.com.br

[Busca]
http://www.jobomas.com
http://www.tihunter.com/
http://www.empregati.com.br/
http://www.kombo.com.br/
http://ondetrabalhar.com
http://www.guiametal.com.br/?pg=emprego-vagas-oportunidades-estagio-trainee
http://www.rhti.com.br (empregadores da região sul e sudeste)
http://www.techvagas.com.br
http://www.tecjobs.com.br
http://www.tijobs.com.br
http://www.sysinfo.com.br
http://www.openjobs.com.br
http://www.indeed.com.br/
http://www.simplyhired.com.br/
http://www.monsterbrasil.com.br/
http://empregos.trovitbrasil.com.br/
http://sysinfo.jbninformatica.com.br/
http://www.empregosti.com/
http://www.apinfo.com/
http://redebem.blogspot.com/
http://www.trabalhando.com.br
http://www.empregonaweb.com/
http://www.timaster.com.br
http://www.ceviu.com.br
http://www.computacaoeemprego.com.br
http://www.itweb.com.br/noticias/noticias_tags.asp?cod=44
http://www.vagas.com.br
http://www.elancers.com.br
http://www.e-hunter.com.br
http://www.e-panelinha.com.br
http://job4dev.com.br/
http://www.itjob.com.br/
http://blog.mtdrh.com.br/
http://ondetrabalhar.com

Você também pode encontrar empresas de TI buscando pela APL da cidade, como:
http://www.softwarebymaringa.com.br/Associados.html
http://www.sub100.com.br/empresas/comercial/apl/apl.php



[Exterior]
http://joblighted.com/
Para ver o máximo de vagas na sua área, este agregador compila as oportunidades divulgadas em 24 sites dos Estados Unidos e as mostra em um mashup do Google Maps.

http://js.justtechjobs.com/
Comunidade que reúne vagas para a área de tecnologia nos Estados Unidos.

http://www.krop.com/
Vagas para desenvolvedores e web designers nos Estados Unidos

http://www.blogpostsforsale.com/
O portal promete reunir oportunidades de posts pagos que empresas divulgam em busca de um blogueiro que fale sobre seu produto.

http://www.noagenciesplease.com/
Site que não gosta de agências de emprego aponta vagas e projetos diretamente para desenvolvedores, designers e redatores, entre outros.

http://www.blogstorm.co.uk/jobs/
Banco de dados que fala sobre SEO e marketing online oferece vagas na Inglaterra nestas áreas.

http://jobs.readwriteweb.com/
Vagas para profissionais web e de novas mídias.

http://freelanceswitch.com/finding/the-monster-list-of-freelancing-job-sites/
Se você está em busca de uma oportunidade de emprego fora do Brasil ou é fluente em algum idioma e quer ser freelancer, vá em frente. No caso desta última opção, corra para o site Freelance Switch



http://www.portugalemprego.com/
http://www.crew.com.br/

http://www.itjobswatch.co.uk/jobs/uk/ruby%20on%20rails.do
http://www.itjobswatch.co.uk/jobs/uk/java.do
http://www.computerjobs.com/
https://chugach.tms.hrdepartment.com/cgi-bin/a/searchjobs_quick.cgi
http://jobsearch.monster.co.uk/
http://www.jobisjob.co.uk/
http://www.indeed.co.uk/
http://jobs.trovit.co.uk/
http://itjobs.com.pt/
http://www.expatitjobs.com/
http://www.jobvite.com/
http://www.great-it-jobs.com/
http://www.dice.com/
http://emprego.trovit.pt/
http://www.empregoti.com/

http://www.startuply.com/
http://www.client-server.com/

http://emploiquebec.net/index_en.asp (Precisa saber francês)

[Exterior (notificações por e-mail)]
http://hotjobs.yahoo.com/
http://br.groups.yahoo.com/group/computacaoeemprego/

[Empresas de TI o exterior]
http://workingwithrails.com/browse/jobs/premium
http://www.thoughtworks.com/


Está faltando algum? Então comenta! :D

Por que tornar-se um SCWCD

Por que tornar-se um SCWCD
A Pesquisa Salarial de 2006 da Certification Magazine (dezembro de 2006, Figura 1) indicou que a certificação SCWCD avançada possibilita um aumento médio de 22,6% em termos salariais em relação à certificação Sun Certified Programmer de nível inferior. O mesmo estudo indica que os SCWCDs ganham, em média, 46,7% a mais que os Microsoft Certified Professional Developers (MCPD).
Saiba mais »


Oque você precisa saber para ser um SCWCD....

Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition 1.4 (CX-310-081)

Palestra completa - JSF

Você pode assitir a palestra completa do Edgar Silva sobre JSF...
Claro que mais de 50 minutos não da pra assistir on-line. Mas baixando um programa da veoh, e depois pedindo pra ele baixar o video da pra assistir toda a palestra completa, baixo segue um preview da palestra.

JSF (Java Server Faces) por Edgar Silva


Hibernate Validator - Melhoria ... por Bruno Braga

Como resultado do meu artigo sobre o Hibernate Validator o Bruno Brama falando sobre sua proposta de melhoria no H.V.

Ele posto no forum do Hibernate
a possibibilidade de utilizar EL.

Entendo a visão do Bruno como desenvolvedor de aplicações, e entendo a visão do Emanuel como desenvolvedor do framework, são visões, claramente, diferentes de uma mesma coisa.

Como desenvolvedor de aplicações, achei interessante a sua proposta, mas fico aqui pensando com meus botões, quanto "taggled code" isso poderia trazer a uma aplicação, uma vez que proposta do H.V. é centralizar a validação. Particularmente eu não sei responder a minha própria dúvida, mas o seu post no forum abre algumas possibilidades a todos nós....


Read and reply the post of Bruno Braga, your opinion is very important.


http://www.brunobraga.com.br/
http://forum.hibernate.org/viewtopic.php?t=979555

In the facts, this is a better method to learn SOA.

This method is funny, interesting and easy. Now, you can explain SOA to your girlfriend, wife and mother :D

Let's go, you can do it. Don't have a problem to watch this video... :D

Três endereços que você deve ter na sua lista

Três endereços que você deve ter na sua lista para desenvolver em Java

http://www.java2s.com/
http://www.exampledepot.com/
http://javaboutique.internet.com/tutorials/
http://www.java-tips.org/

Quanto você ganharia nos EUA?

Mais um excelente post sobre o mercado de TI fora do Brasil... veja este link

Quanto você ganharia nos EUA

Empregos tecnologia na Inglaterra/UK

Encontrei um excelente post no blog do emersonemuk sobre o mercado de trabalho na Inglaterra, Uma amiga, que mora na Inglaterra me confirmou as informações dadas no post... então, para quem pretente trabalhar com TI fora do Brasil, pode ter uma noção por este link....

Empregos tecnologia na Inglaterra/UK

Programar é uma Arte

Você pode ter ouvido algo como:
"Programar é uma Arte, é necessário 10% de inspiração e 90% de transpiração..."

em outras palavras....

Do total do esforço despendido para se desenvolver um sistema
É necessário 10% dedicado a pesquisa, com a finalidade de aprender a API.
É necessário 90% dedicado a escrita do código.


Você concorda com isto? Deixe seu comentário, eu realmente gostaria de saber.



No meu ponto de vista este raciocínio esta incompleto...
É necessário algum esforço destinado ao controle de qualidade(testes, JUnit), ao aprendizado das melhores práticas (design patterns), a gerência do projeto, divisão de tarefas, gerência do cronograma...

Logo percebemos que escrever o código não é tão importante para se dedicar 90% do esforço total de um projeto.

Revistas da Oracle de graça!

Você tem inglês fluênte o suficiênte para ler artigos nesta lingua?
Quer receber as novidades relacionadas a Oracle de graça em sua casa?
A Oracle publica no formato bimestral uma revista e envia pra você! Basta submeter os seus dados neste formulárilo.

Mas lembre-se, a revista virá toda em inglês.

Caso não queira recebe-la em casa, você pode acessar as edições no formato digital (pdf), também gratuitamente por estes endereços:

http://www.oracle.com/technology/oramag/index.html
http://www.oracle.com/oramag/index.html

Mas lembre-se, mesmo a revista em formato digital está em inglês.

http://www.submag.com/sub/oc

Se a revista fala de inglês?
A resposta é sim, na verdade ela fala sobre quaqlquer coisa que interessar a Oracle do ponto de vista tecnológico, esta não é uma daquelas revistas como a InfoExame, destinada a gerentes (traz milhões de propagandas), esta é uma revista bem técnica.

Resumo dos conceitos de Orientação a Objetos

Conceitos fundamentais da Orientação a Objetos:

  • Classe: representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos, através de métodos, e quais estados ele é capaz de manter, através de atributos.


  • Estado: O estado de um objeto é determinado pelo conjunto dos valores dos atributos. Para evitar estados inválidos ou inconsistentes e acessos indevidos, os atributos devem ser apenas manipuláveis por operação do próprio objeto.


  • Comportamento: Um comportamento é uma ação executada por um objeto em resposta a alguma mensagem ou mudança de estado. Ele é acionado pela execução de algum método. Entretanto, essa relação não é explícita, já que um mesmo comportamento pode ser implementado por vários métodos. Os métodos são operações (ações) explicitamente detalhadas e codificadas nas classes. O conjunto das operações públicas de um objeto forma a lista de serviços disponibilizados. A esse serviço dá-se o nome de interface do objeto. A interface é um contrato com o mundo exterior, informando o que um objeto pode fazer, mas não sua implementação.

  • Objeto: é uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos.


  • Mensagem: é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método dinâmico);


  • Herança (ou generalização): é o mecanismo pelo qual uma classe (sub-classe) pode extender outra classe (super-classe), aproveitando seus comportamentos (métodos) e estados possíveis (atributos). Há Herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um". Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero;

  • Associação: é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone;


  • Encapsulamento: consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom);



  • Abstração: é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software;



  • Polimorfismo: é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma assinatura (lista de parâmetros e retorno) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução, através do mecanismo de ligação tardia. No caso de polimorfismo, é necessário que os métodos tenham exatamente a mesma identificação, sendo utilizado o mecanismo de redefinição de métodos. Esse mecanismo de redefinição não deve ser confundido com o mecanismo de sobrecarga de métodos.

Hibernate Validator - A base para o JSR 303: Bean Validator. Mundo Java Edição nº25, 2007



Na edição 25 da Revista Mundo Java vai sair um artigo meu, espero que seja o primeiro de muitos. :D

O título do artigo é Hibernate Validator - A base para o JSR 303: Bean Validator. Nele falo sobre o Hibernate Validator, e mostro um pouco doque podemos esperar para o Java 7 que ainda esta por vir.

Este recurso de validação é bem interessante e nos traz uma série de beneficios, recomendo a leitura.


http://www.mundojava.com.br/NovoSite/destaque.shtml

link

Sun Certified Java Programmer (SCJP)

Com muito orgulho, que posto este comunicado...

EXTRA EXTRA... DESDE O DIA 24/09/2007 EU SOU O MAIS NOVO CERTIFICADO DA SUN.

Tirei o meu SCJP 1.5 . Pra falar a verdade, achei que não iria passar porque não estudei quase nada, mas.... passei :D


Sun Certified Java Programmer (SCJP)

The Sun Certified Programmer for Java 2 Platform 5.0 certification exam is for programmers experienced using the Java programming language. Achieving this certification provides clear evidence that a programmer understands the basic syntax and structure of the Java programming language and can create Java technology applications that run on server and desktop systems using J2SE 5.0.

This is a exam Objectives:
Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (CX-310-055)


Java.... passagem de parâmetro por referência ou valor?

Vários programadores, experiêntes em outras linguagems, questionam-me sobre como funciona a passagem de parâmetros no Java.

Quando de trata de passagem de Objetos como parâmetros, o mais importante a se lembrar é que não está passando nem mesmo a variável de referência real, mas em vez disso, uma cópia dos bits dessa variável, portanto quando pasar uma variável de referência, estará passando uma cópia dos bits que representam como um objeto específico pode ser acessado. Ou seja, você está passando uma cópia do ponteiro.

Pra entender oque escrevi acima, pense que quando você está passando um objeto como parâmetro você está usando passagem de parâmetros por referência, afinal este é o efeito/comportamento, isto quer dizer que uma alteração no parâmetro dentro do método afetará a variável original.


Quando uma variável primitiva é passada para um método, ela é passada por valor, o que signfica: "passar por cópia dos bits de variável".

Para entender isto, pense que quando trabalhamos com uma variável primitiva, e passamos ela como parâmetro, essa passagem é feita por valor. Isto quer dizer que quando alteramos ela dentro de um método, esta alteração não se reflete na variável original.

Abaixo segue um código para exemplificar o conceito.



package com.gms.valoroureferencia;
import java.awt.Dimension;
public class Teste {
public static void main(String[] args) {
objeto();
primitivo();
}

public static void objeto(){
System.out.println("TESTE DE PASSAGEM DE
PARAMETROS COM OBJETOS");
Dimension dimension = new Dimension(5, 10);
System.out.println("antes d = " + dimension.height);
modify(dimension);
System.out.println("depois d = " + dimension.height);
}

public static void modify(Dimension dim) {
dim.height = dim.height + 2;
System.out.println("dim = " + dim.height);
}

public static void primitivo(){
System.out.println("\nTESTE DE PASSAGEM DE
PARAMETROS COM TIPOS PRIMITIVOS");
int inteiro = 10;
System.out.println("antes inteiro = " + inteiro);
modify(inteiro);
System.out.println("depois inteiro = " + inteiro);
}

public static void modify(int i){
i = i +2;
System.out.println("i = " + i);
}
}

Como ordenar um hashmap pelo valor?

Para ordenar um hashmap, eu poderia converte-lo em um treemap, mas isso iria ordenar as informações pela chave, e não pelo valor.

Como não consegui uma solução mais "automágica" criei um método pra fazer isso...

A idéia é pegar os Entry (conjunto de chave e valor) convertidos em Array, apartir dai, ordenar o array pelo valor do Entry e então recriar o Map, mas dessa vez eu precisaria utilizar o LinkedHashMap para manter a ordem em que os objetos ficaram após a ordenação dentro do array.

Claro que eu poderia retornar o Array ordenado... :D

Ah! Já ia me esquecendo, é necessário que o valor do hash implemente Comparable

Veja o código ilustrativo...

public static Map ordDesc(Map map) {
Object[] entries = map.entrySet().toArray();
Arrays.sort(entries, new Comparator() {

public int compare(Object lhs, Object rhs) {
Map.Entry le = (Map.Entry) lhs;
Map.Entry re = (Map.Entry) rhs;
return (
(Comparable) re.getValue()).compareTo(
(Comparable) le.getValue()
);
}
});

Map h = new LinkedHashMap();
for(int i =0; i < 10; i++){
Map.Entry entry = (Map.Entry)entries[i];
h.put(entry.getKey(), entry.getValue());
}
return h;
}

Aprenda inglês

Um excelente site para os auto didatas aprender inglês, você consegue ouvir uma conversação com legenda, muito bom mesmo, oque é melhor... free :D

http://www.elllo.org/

ClassLoad para carregar de um banco de dados

To load the classes for Data Base you uses these concepts.... :D

Hoje irei postar um código de um amigo, (Fabio vulgo Balão)...
A idéia é carregar um .class apartir de um banco de dados, para conseguir atualizar algumas partes do sistema de forma centralizada, ou seja, dando um update em um registro no banco de dados.

É claro que este código apenas ilustra o conceito, mas ta ai o código do meu amigo Fabio, código que me surpreendeu, pois eu não imaginei que isto seria possível. Mas como diz o ditado: "Não sabendo que era impossível, ele foi lá e fez".

Parabéns camarada, tu me surpreendeu com este código


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;


class DbClassLoader extends ClassLoader {
private PreparedStatement pstmt;
private ClassLoader parent;

public DbClassLoader(PreparedStatement prepStmtArg) {
super();
this.pstmt = prepStmtArg;
}

public DbClassLoader(PreparedStatement prepStmtArg ,
ClassLoader parentArg) {
super(parentArg);
this.parent = parentArg;
this.pstmt = prepStmtArg;
}

Override
protected Class findClass(String className)
throws ClassNotFoundException {
try {
this.pstmt.setString(1, className);
byte[] classData =
this.pstmt.executeQuery().getBytes(1);
if (classData != null && classData.length > 0) {
return this.defineClass(className, classData,
0, classData.length);
}
} catch (SQLException e) { }

if (this.parent != null)
return this.parent.loadClass(className);

throw new ClassNotFoundException(className);
}

/**
* teste p v se a classe ta funcando
* @param args
*/
public static void main(String[] args) {
try {
Class.forName("org.sqlite.JDBC");
Connection conn =
DriverManager.getConnection("jdbc:sqlite:../teste.db");
String sql = "SELECT data FROM class WHERE class = ?;";
PreparedStatement pstmt =
conn.prepareStatement(sql);
ClassLoader sysClassLoader =
ClassLoader.getSystemClassLoader();
ClassLoader cl = new DbClassLoader(pstmt,
sysClassLoader);
System.out.println(sysClassLoader.getClass().getName());

// Class.forName("SpeedMeterExporterController");
Class controller =
Class.forName("SpeedMeterExporterController", true, cl);
System.out.println(controller.getName());
} catch (ClassNotFoundException e2) {
e2.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

Mais uma da série "Como não programar"

HAHAHHA Hoje superou as espectativas em....

Você já ouviu fala em Design Pattern pra banco de dados?
Pois é, existe. Aquele relacionamento M <-> N, que gera uma tabela associativa, sim aquele que quando você explode o relacionamento vira 1->M N<-1 é um Design Patter pra banco de dados.

Agora me diga, você já ouviu fala em Tableless?
Se já ouviu falar sabe que esta é uma tecnologia pra fazer WebDesign sem a utilização de tabelas e nesse momento deve esta se perguntando o que isso tem haver com banco de dados?

Até hoje, eu também achava que não tinha nada haver. Mas um amigo meu relatou que em uma empresa de desenvolvimento de Software de Maringá, todo um sistema está em uma única tabela, sim, todo o sistema, sem normaliação nenhum.

Já entendeu?

Esta empresa desenvolve sistemas utilizando tableless, ehehehehe Eles desenvolvem todo o sistema em uma única tabelona gigantesca, os cara são hard core mesmo, são totalmente contra tabelas ehehhehhhehehe até no bano de dados. HEHEHEHHheheheh

Essa superou :D

Method Template

Hoje estava escrevendo um material pra ministrar minha aula no SergioYamada.com.br sobre DesignPatterns. Como observei que não havia nada sobre Template Method no WikiPedia (PT) resolvi colocar um trecho do material que pode ser conferido em:
http://pt.wikipedia.org/wiki/Template_Method

Porém...
Nem tudo é perfeito...
Em pouco tempo voltei ao link pra dar uma conferida, e encontrei essa mensagem:

Esta página foi proposta para eliminação rápida.
* Regra 20 - Artigos que encaixam no perfil de lixo ou impróprio.

20.1 - Desde que não seja o próprio proponente a eliminar o artigo.
20.2 - Confirmar no histórico se existem versões anteriores válidas.
20.3 - Em caso de dúvida sobre a validade do conteúdo, ou do título caso haja artigos afluentes, encaminhar a página para eliminação por votação em Páginas para eliminar.

* Proponente: Fabiano msg 23h38min de 9 de Agosto de 2007 (UTC)

A página será eliminada por um administrador se estiver em conformidade com a política de eliminação.

Administrador: não apagar a página apenas pela justificativa fazer sentido. Apague apenas se for caso de uma das 20 regras de eliminação rápida, devidamente preenchidas e de forma que se justifiquem. Em caso de dúvida deve-se propor para votação e avisar o proponente. Ver também as definições de Wikipedia:Lixo e Wikipedia:Impróprio.


puts... que chato


Bom... mas se o material não ficar no ar lá no wiki, então que pelo menos fique aqui:

== Lá Vai ==



Para entender este design pattern, pense em uma máquina de fazer café, mas que ela também sirva chocolate quente, e chá. Analise e reflita, oque estas três bebidas tem em comum, e oque elas tem de diferente?

Veja que todos “precisam” de açúcar, precisam ser aquecidos e misturados. O Method Template tem como finalidade aproveitar estas características em comum, de forma a permitir que cada bebida tenha também um comportamento específico.


package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public abstract class Bebida {
public String preparBebida(){
addAgua();
addAcucar();
addExtrato();
mecher();
return "Sua bebida está pronta!! \n".toUpperCase();
}
private void addAgua(){
out.println("Adicionando água...");
}
private void addAcucar(){
out.println("Adicionando Aúcar...");
}
private void mecher(){
out.println("Mechendo... Misturando...");
}
protected abstract void addExtrato();
}

package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class Cafe extends Bebida {
@Override
protected void addExtrato() {
out.println("Adicinando extrato de café");
}
}

package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class Chocolate extends Bebida {
@Override
protected void addExtrato() {
out.println("Adicinando extrato de chocolate...");
}
}

package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class Cha extends Bebida{
@Override
protected void addExtrato() {
out.println("Adicinando extrato de chá...");
}
}

package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class MaquinaDeBebidas {
public static void main(String [] args) {
Cafe cafe = new Cafe();
out.println(cafe.preparBebida());
out.println(new Chocolate().preparBebida());
out.println(new Cha().preparBebida());
}
}

ER é Rox

Espressão regular é Rox, hoje, um coléga pediu ajuda pra escrever um ER que retirase todos os caracteres que não fossem letras, números, virgulas, pontos e espaços

Saiu essa espressão [^a-zA-Z0-9á-úÁ-ÚàÀ,\\. ]
depois saiu essa [^a-z0-9á-úà,\\. ]
e então esta [^\\wá-úà,\\. ]

Tá, funcionou, mas ficou a dúvida: Porquê o conjunto á-ú não contempla à (a craseado)? Alguém saberia me responder?

Código de exemplo:

Pattern p = Pattern.compile("[^a-zA-Z0-9á-úÁ-ÚàÀ,\\. ]");
p = Pattern.compile("[^a-z0-9á-úà,\\. ]", Pattern.CASE_INSENSITIVE);
p = Pattern.compile("[^\\wá-úà,\\. ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("E ele disse 2X: 'java', 'guj',? 'ninja', 'é você É locura ÀÌÒÃÙìòùáÁóÓúÚíÍöôàùáãÕ'!");
System.out.println(m.replaceAll(""));

Será mesmo?

Quem disse que no Java, não temos que nos preocupar com ponteiros?
Utilizando Java como linguagem/plataforma de desenvolvimento é comum ouvir a seguinte afirmação: "Utilizando Java você não vai precisar se preocupar com ponteiros".

Será mesmo que não temos que nos preocupar com ponteiros em Java?
Esta seria uma verdade absoluta? Se sim, ótimo, mas se não até onde esta afirmação pode ser verdadeira?

Encurtando a história pra este post não ficar muito grande, analise e me diga qual a diferença entre o código #1 e o código #2 em termos de memória, se é que tem alguma diferença.


#1 – CÓDIGO
ControleMensagem cMsg = new ControleMensagem();

MensagemUsuario msgUser = new MensagemUsuario();
for (Parceiro parceiro : parceiros) {
msgUser.setControleMensagem(cMsg);
msgUser.setParceiro(parceiro);
cMsg.addMensagemUsuario(msgUser);
}


#2 – CÓDIGO
ControleMensagem cMsg = new ControleMensagem();

MensagemUsuario msgUser;
for (Parceiro parceiro : parceiros) {
msgUser = new MensagemUsuario();
msgUser.setControleMensagem(cMsg);
msgUser.setParceiro(parceiro);
cMsg.addMensagemUsuario(msgUser);
}

Bom, vamos encurtar a estória, porque estou sem tempo pra explicar todos os detalhes.
Há uma grande diferença nestes dois códigos.
No código #1 você esta adicionando sempre a mesma referencia a cMsg através da linha:
cMsg.addMensagemUsuario(msgUser);
Ou seja, cMsg é uma collection que possui em todas as possições ponteiros para o mesmo objeto, logo se fizermos uma iteração sobre ele vermos sempre exatamente o mesmo conteúdo em todos os elementos.

No código #2 a referencia cMsg possuí vários elementos armazenados, mas desta vez, ele possui elementos realmente diferentes. Isto acontece porque a cada iteração a referencia msgUser aponta pra um objeto diferente, enquanto no código #1 a referencia msgUser aponta sempre pro mesmo objeto.

Então, será mesmo que não tem que se preocupar com ponteiros?
Cuidado com a afirmação de que não temos de nos preocupar com ponteiros em Java, em alguns casos esta pode não ser uma verdade absoluta.

Contribuições

Alguns colegas, anônimos é claro, empolgados com os trechos de códigos que postei me enviaram algumas pérolas que eles encontraram por essa vida de programador :D


Pérola 1
entityOrg = entityDst;
if(entityOrg == null && entityDst == null{
//do something;
}

Pérola 2
if(algumaRegra);


Pérola 3
SELECT * FROM ... WHERE 1 == 1

Pérola 4
if (idTabelaPreco == null)
idTabelaPreco = null;

Pérola 5 - isso feito em C# - Compilador bom é isso ai! :D
if( x > 0) {
return false;
y = 2;
}

Código legível

Se não me engano, foi Martin Fowler que disse algo que se encaixa bem nos dois posts de ontem...

"Qualquer um pode escrever códigos que uma máquina entenda, mas poucos conseguem criar códigos que humanos entendam"

Não sou um DEUS dos códigos fontes, mas, se tivermos este pensamento como uma constante em nossas mentes, acredito que podemos tornar o mundo do desenvolvimento melhor para todos nós :D

Pense a respeito.

Como não programar II

Estava olhando o original daquele código do post anterior e encontrei essa instução if dentro das 60 linhas de regras de negócio... Olha que interessante :P

if (((Titulo)cc.getTitulos().elementAt(cnt)).getVencimento().getTime() <
vcto.getTime() && ((Titulo)cc.getTitulos().elementAt(cnt)).getValor() > 0)


Cara... porque o autor não quebrou isso em duas ou mais istruções?

hahahahahahahaha aahhahahahhahahahahah ahaahahahahha

Como não programar

Hoje eu me diverti até racha em.... :D

Logo pela manhã pra animar o dia um camagada encontrou uma pérola, algo que eu nunca tinha visto na prática, só em livros no tempo de faculdade :)
Tente acompanhar o raciocínio do código:

//autor desconhecido


if (true) {
...60 linhas de instruções e regras de negócio...
} else {
new MensagemDialog(this, "Cliente novo não ",
"poderá fazer pedido.",
"Selecione outro cliente",true).show();
chCliente.select(0);
return;
}


Oquê mais me surpreendeu neste código é que existe uma clausula else, que é pra mostra como parada é bruta! Hehehhhehhehehhehe