As 5 tecnologias baseadas em Java para aprender em 2008

188 respostas
B

Notícia publicada pelo TheServerSide sugere as 5 tecnologias, baseadas em Java,
mais interessantes para se aprender em 2008. São elas:

- OSGi (a specification for dynamic modules for Java)

  • The Java Content Repository spec, first appearing in the JCP in February 2002
  • Google Web Toolkit (first released in May, 2006)
  • Groovy (first released in May, 2004)
  • Cloud computing (a concept designed around the use of virtual servers, or distributed computing without the use of EJB)

Apesar de serem um tanto velhas, o autor comenta que atingiram a maturidade, a ponto de serem recomendadas.

[URL=http://www.theserverside.com/news/thread.tss?thread_id=48270]Mais da notícia aqui.[/URL]

Quais as tecnologias vocês escolheriam para aprender em 2008?

188 Respostas

P

Eu recomendo algumas mais recentes, caso voce ainda nao conheca:

:arrow: JPA
:arrow: EJB3

e sobre o que deve aparecer ainda esse ano

:arrow: JPA2
:arrow: EJB3.1
:arrow: JSF2
:arrow: WebBeans (Seam)
:arrow: Servlets 3.0

B

por essas suas apostas, pode se dizer que o Seam tende a se tornar cada vez mais popular.

C
  • JavaFX
  • LBS
  • REST
M

Scala

S

Scala++

Soda é que não tem break e continue. :cry:

M

saoj:
Scala++

Soda é que não tem break e continue. :cry:

Não faz falta quando você digere o paradigma FP (functional programming).

R

é…, tecnologia é o que não falta. Daí eu pergunto:
:arrow: Até que ponto deve-se aprofundar em cada tecnologia considerando que você certamente não vá usar todas elas?
:arrow: Dominar tudo só pelo prazer de falar que é o kara não me parece nem um pouco vantajoso…
:arrow: Conhecer superficialmente pode te levar a tomar uma decisão equivodada por não saber tudo que a tecnologia tem pra oferecer…

:arrow: e aí, o que vc's acham?

Abraços,

Rodrigo.

F

acho que o interessante é vc saber pra que cada
um serve

assim quando vc precisar já sabe o que buscar…

Minha opinião… :wink:

P

Bem, falei apenas de JSRs. Sobre tecnologias no geral, a api de scripting vai ganhar força, flex tende tambem a crescer bastante e JSF tambem se soltarem a especificacao 2.0 antes de 2010, assim como EJB3.1 e JPA 2.0. Sobre o Seam, acredito que ganhara forca quando a API estiver mais estavel, mas tambem vai precisar desacoplar um pouco o session bean da logica da apresentacao.

P

feltraco:
acho que o interessante é vc saber pra que cada
um serve

assim quando vc precisar já sabe o que buscar…

Minha opinião… :wink:

tem toda razao.

D

Aposto no Groovy, principalmente por causa do Grails.
Mas me interessei por Scala e tô apostando também.

P

:arrow: WebBeans :wink:

A

rdantas:

:arrow: Conhecer superficialmente pode te levar a tomar uma decisão equivodada por não saber tudo que a tecnologia tem pra oferecer…

:arrow: e aí, o que vc's acham?

Mas se você pensar assim, não conhecer várias tecnologias pode ser ainda pior, pois é mais fácil você estar usando uma tecnologia que você conhece muito só que é trabalhosa demais para um certo projeto ou uma certa tarefa!

Minha opinião: quanto mais conhecimento em várias tecnologias melhor! Assim você pode comparar o que cada uma tem de bom e onde usar cada uma delas.

L

Coisas que acho que seriam interessantes aprender em 2008:

  • GWT (essa eu concordo com o autor).
  • linguagem dinâmica, qualquer uma, pode ser Python, Ruby, PHP, Scala… mas pelo menos uma!
  • REST (assim como a descoberta de um framework decente que suporte essa arquitetura).
  • metaprogramação do Ruby, pra parar de dizer que em Rails as coisas acontecem “por mágica”.
  • Map Reduce.
M

Leonardo, Scala não é linguagem dinâmica, embora tenha muitas das boas features delas. Inclusive, esse é o seu grande diferencial.

L

Esse será o ano dos forks do Java, com a Sun perdendo uma enorme parte do seu poder de controle sobre a plataforma - que vai comecar a se fragmentar e deixar de existir. O Android é só o primeiro exemplo - vão ter operadoras lançando stacks java baseados na JSE porém sem o carimbo estúpidamente caro da Sun.

S

Alguém poderia resumir em duas linhas o que é REST e principalmente qual é o seu “pulo-do-gato”?

L

Olá

Uma única palavra que já movimentou milhões nos últimos 30 dias: eventos

Tudo indica que este é o ano.

[]s
Luca

C

saoj:

Alguém poderia resumir em duas linhas o que é REST e principalmente qual é o seu “pulo-do-gato”?

usa a spec HTTP como base para webservices, faz o CRUD com as operações GET-POST-PUT-DELETE do HTTP, pode ter saída txt, xml e JSON, todos os bigplayers da web fornecem suas APIs como REST (yahoo, google, etc)

REST já é commodity, venceu a guerra contra WS-*. Seria interessante o menta implentar isso!
No rails fiz uns testes e é muito simples, em java o mais fácil que encontrei foi no Struts 2 usando um plugin JSON

C

Para 2008 eu aposto no Rhino (http://www.mozilla.org/rhino/) pela facilidade de aprendizado de quem é programador Java.
Uma linguagem puramente funcional é adequado, estou vendo algumas para aprender os conceitos adequadamente.
JSR223 (Scripting) é muito pouco para integração com outras linguagens mas será o ano dela.
Quando o Fowler soltar o livro sobre DSL será o boom e vai estourar no Brasil, gente que nem sabe o que é vai querer “comprar” :slight_smile:

C

Explicacao de REST bem bacana:

http://tomayko.com/articles/2004/12/12/rest-to-my-wife

P

JRuby.

Não vejo nada de legal acontecer em java há anos, lembra quando toda semana havia algo novo e completamente inovador?

BTW, cad6e o JavaFX? Já morreu rápido assim?

R

Eu não sei…

Falando de desenvolvimento Web, eu prefiro estudar novas propostas de comunicação entre o Servidor e o Client,
No caso, ao invés de usar o protocolo http simples, para trafegar html/js/css cuspidos dos servidor,
Vou investir em tecnlogias novas como o protocolo AMF3 que provê compactação, e transferência binária,
com este posso simplesmente trocar objetos java com meu client rich, no caso Flex.

Isto é, meu paradigma na view será orientado a objetos.

Q

feltraco:
acho que o interessante é vc saber pra que cada
um serve

assim quando vc precisar já sabe o que buscar…

Minha opinião… :wink:

Concordo!

Mas tbm penso que deve se especializar em algo, ou seja, ir a fundo em uma tecnologia…

P

feltraco:
acho que o interessante é vc saber pra que cada
um serve

assim quando vc precisar já sabe o que buscar…

Minha opinião… :wink:

Também concordo. Uma coisa que estou estudando é Ruby (aí entra o JRuby)! Não sei quanto ao Srs. mas, enquanto vou lendo o tutorial vou pensando: “nó poderia ter isso no java!” :slight_smile: :? :frowning:

A Paz!

F

Quinger:
feltraco:
acho que o interessante é vc saber pra que cada
um serve

assim quando vc precisar já sabe o que buscar…

Minha opinião… :wink:

Concordo!

Mas tbm penso que deve se especializar em algo, ou seja, ir a fundo em uma tecnologia…

tb concordo contigo…

E acho que o Flex e o Spring, são duas tecnologias muito interessantes…

C

HTTP tambem faz isso sem problemas. Transferencia binaria? So olhar pra qualquer imagem transferida. Compactacao? mod_gzip?

S

galera primeramente quero parenizar por este post, tem algumas tecnologias citas aqui que eu ainda não conhecia,
agora vou dar uma olhada, e conhecelas…

essa foi pros favoritos…abs !!!

L

HTTP tambem faz isso sem problemas. Transferencia binaria? So olhar pra qualquer imagem transferida. Compactacao? mod_gzip?

Concordo com o cv, dá pra colocar um objeto java serializável através de HTTP sem problemas (se não me engano, o mime type é application/x-java-serializable). Não sei o que um outro protocolo mais obscuro vai acrescentar às aplicações quando o HTTP já é suficiente.

J

saoj:

Alguém poderia resumir em duas linhas o que é REST e principalmente qual é o seu “pulo-do-gato”?

Não dou 1 mês para surgir o MentaRest.

F

cmilfont:
Para 2008 eu aposto no Rhino (http://www.mozilla.org/rhino/) pela facilidade de aprendizado de quem é programador Java.
Uma linguagem puramente funcional é adequado, estou vendo algumas para aprender os conceitos adequadamente.
JSR223 (Scripting) é muito pouco para integração com outras linguagens mas será o ano dela.
Quando o Fowler soltar o livro sobre DSL será o boom e vai estourar no Brasil, gente que nem sabe o que é vai querer “comprar” :)

Pessoal, tem alguém usando isto?
Se alguém puder falar sobre alguma coisa que tenha feito com Rhino.

A propósito, minha aposta para esse ano é o JRuby, acredito que deva cair nas graças da galera. :smiley:

R

HTTP tambem faz isso sem problemas. Transferencia binaria? So olhar pra qualquer imagem transferida. Compactacao? mod_gzip?

Concordo com o cv, dá pra colocar um objeto java serializável através de HTTP sem problemas (se não me engano, o mime type é application/x-java-serializable). Não sei o que um outro protocolo mais obscuro vai acrescentar às aplicações quando o HTTP já é suficiente.

Um momento senhores…
Eu não fui tão abragente…

O fato de ter falado no AMF3, não é somente o fato de prover compactação e transferência binária, é que usando um client (Inteligente) baseado em uma VM, eu consigo trocar Objetos, e usar os mesmo na minha tela, não tacar no mime e etc… e fazer sabe lá o que para cuspir um html na tela.

Fora que, com este protocolo posso usar a tecnologia data-push, subscribe e httpstreaming… alguém aqui conhece estas?

Abraços.

S

juzepeleteiro:
saoj:

Alguém poderia resumir em duas linhas o que é REST e principalmente qual é o seu “pulo-do-gato”?

Não dou 1 mês para surgir o MentaRest.

Engraçado que eu já tinha codificado isso há um par de anos atrás, mas por algum motivo eu descartei.

Mas o interessante é que eu sempre fui averso a web services, e já em 2004 eu sugeria comunicação entre sistemas via HTTP.

Isso seria REST ? Uma espécie de RMI em cima de HTTP ? AJAX pode ser considerado REST ?

E

Sérgio,

REST é um estilo arquitetural, que se aproveita do protocolo HTTP por completo. Ex: Se eu tento chamar um serviço feito usando o estilo arquitetural REST e esse serviço não existe, eu não devo receber um status 200 do HTTP e no corpo da mensagem um XML ou JSON ou [coloque aqui o seu formato …]. Simplesmente devo receber um 404.

O REST surgiu de uma tese de doutorado feita por Roy Fielding. Acesse o link abaixo que tem o conteúdo da tese

http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

Respondendo sua pergunta: você pode usar Ajax para consumir um serviço REST. Se o formato da mensagem do serviço for JSON vai ser ainda mais fácil trabalhar pelo Javascript.

S

Não entendi… Tem como explicar melhor?

Acho que o REST, além de ser HTTP, é baseado num esquema de resources, pelo menos é o que diz a Wikipedia de uma maneira bem enrolada que eu não entendi direito: http://en.wikipedia.org/wiki/REST

M

rpffoz:

Um momento senhores…
Eu não fui tão abragente…

O fato de ter falado no AMF3, não é somente o fato de prover compactação e transferência binária, é que usando um client (Inteligente) baseado em uma VM, eu consigo trocar Objetos, e usar os mesmo na minha tela, não tacar no mime e etc… e fazer sabe lá o que para cuspir um html na tela.

Fora que, com este protocolo posso usar a tecnologia data-push, subscribe e httpstreaming… alguém aqui conhece estas?

Abraços.

Fala ai Rodrigo !!!

Isso mesmo, concordo com você temos que mostra pro mundo o que é de melhor no sabor Força AdobeFlex

Flex fornece um conjunto abrangente de serviços de dados de gestão a transferência dos dados e integração com aplicações existentes e as infra-estruturas para reduzir o tráfego da rede.Você pode realizar o seguimento do cliente através Flex Data Services:
O RPC (Web Services, Http Service, e Remote Object) O Gerenciamento de Dados (Data Sync, Ocasionalmente Desconectadas clientes, de Dados e Pager)
O Messaging Services (Collaboration, Publicar / Assinar, e Dados Push).

Flex é uma tecnologia muito melhor para quem deseja’s para construir uma “aplicação web”. VEJA O FUTURO DA WEB 2.0"

http://maps.yahoo.com

http://mark-shepherd.com/thesaurus
http://www.alex-uhlmann.de/flash/adobe/blog/distortionEffects/effectCube

Vida Longa ao Flex, eternamente Rich Internet Applications

Abraços

E

Sim Sérgio, não sei se a maneira correta é falar assim mas HTTP é baseado em resources. A RFC2616 explica melhor. Quando utilizamos os HTTP Methods podemos recuperar recursos, adicioná-los, remove-los ou atualiza-los.

Quando você dá um GET por exemplo você está requisitando um recurso. Quando você dá um PUT você altera, quando da um POST você insere e quando dá DELETE você apaga. Tudo baseado em recursos.

O problema é que estamos acostumados só com GET e POST para nossas aplicações web básicas.

Observe o site dictionary.com:

A url http://dictionary.reference.com/browse/love irá mostrar a palavra love. Repare que não é browse.do?word=love, e tão somente a última parte da URL é a palavra (recurso a ser consultado). Neste caso estamos usando o GET. Em termos de funcionamento, as duas maneiras funcionam sem problemas, mas uma é REST a outra não. Se sua aplicação for REST eu vou ter certeza que ao fazer alguma chamada, seja usando o HTTP method que eu quiser, caso esta seja feita com sucesso e independente do resultado do corpo da mensagem, receberei um HTTP status 200, e caso a chamada (recurso) que estou chamando não existir vou receber um HTTP status 404.

Ex: Na URL http://dictionary.reference.com/browse/love, caso o recurso love não exista, devo receber um 404 (OK o site deles faz diferente mas pra ser REST deveria ser assim) e a URL http://dictionary.reference.com/browse.do?word=love nunca vai me retornar um 404, a não ser que retirem a servlet da aplicação.

Bem, explicando assim não sei se ajudou muito mas espero que sim.

[]s

K

Ano de 2008 algumas coisinhas que considero legais:

  • Linguagens - Pode escolher uma e estudar, Groovy, Ruby ( dinâmicas) - para o mundo concorrente - Scala.
  • RichMedia - Flex, AMF3 , BlazeDS, GraniteDS
  • CEP - Esse ano acho que a grande aposta vai ser a área do Luca :slight_smile: .
T

eu tb prestaria atenção em:

  • CEP
  • REST
  • SCALA
  • ERLANG
E

O tópico acabou caindo pro lado do REST com explicações e citações de REST, mas como o título é sobre tecnologias baseadas em Java vale lembrar que REST não é baseado nesta.

S

Ajudou sim, obrigado.

R

Fala ai Rodrigo !!!

Isso mesmo, concordo com você temos que mostra pro mundo o que é de melhor no sabor Força AdobeFlex

Flex fornece um conjunto abrangente de serviços de dados de gestão a transferência dos dados e integração com aplicações existentes e as infra-estruturas para reduzir o tráfego da rede.Você pode realizar o seguimento do cliente através Flex Data Services:
O RPC (Web Services, Http Service, e Remote Object) O Gerenciamento de Dados (Data Sync, Ocasionalmente Desconectadas clientes, de Dados e Pager)
O Messaging Services (Collaboration, Publicar / Assinar, e Dados Push).

Flex é uma tecnologia muito melhor para quem deseja’s para construir uma “aplicação web”. VEJA O FUTURO DA WEB 2.0"

Vida Longa ao Flex, eternamente Rich Internet Applications

Eu ainda adicionaria o Blaze que é OpenSource! =)

Mostrar para eles uma opção que provê você trabalhar orientado a objetos…
Não cuspindo HTML com js e css…

C

Pode-se utilizar perfeitamente javascript orientado a objetos, não há problema algum com isso.

N

Fugindo rápidamente do tópico.
Pergunta aos conhecedores de Flex.
Estive estudando esta tecnologia, porém parei em duas questões cruciais.

  • Como utilizar a URL em flex? Digo, é possível fazer link direto para alguma parte do meu programa flex com a url ? Como Exemplo tenha Âncoras de HTML.

  • Como fica a indexação do conteúdo do site Flex ?

R

Amigo, pode-se até usar… mas você usa?
Ou melhor você consegue usar? para mim o O.O do JS é um PHP querendo ser O.O…

Mas a questão não é essa, a vantagens dos ambientes apresentados, é que teóricamente:
“Envio um objeto Java por este protocolo que provê compactação e tranferência binária,
e no meio do caminho este objeto Java vira um objeto Flex, que trato como se fosse um objeto java”

Fora que, meu js nem empacotamento tem! nem se quer tem package… js não foi feito para um nível tão abstrato.

F

Realmente trabalhar com objetos em AS
é muito simples…

vc espelha o seu objeto java no AS,
e trabalha como se fosse java msm…
soh que num eh … mais é quase… rs rs rs

FLwS

Q

rpffoz:
Amigo, pode-se até usar… mas você usa?
Ou melhor você consegue usar? para mim o O.O do JS é um PHP querendo ser O.O…

Mas a questão não é essa, a vantagens dos ambientes apresentados, é que teóricamente:
“Envio um objeto Java por este protocolo que provê compactação e tranferência binária,
e no meio do caminho este objeto Java vira um objeto Flex, que trato como se fosse um objeto java”

Fora que, meu js nem empacotamento tem! nem se quer tem package… js não foi feito para um nível tão abstrato.

Realmente o protocolo AMF tras mtas vantagens.

N

nbluis:
Fugindo rápidamente do tópico.
Pergunta aos conhecedores de Flex.
Estive estudando esta tecnologia, porém parei em duas questões cruciais.

  • Como utilizar a URL em flex? Digo, é possível fazer link direto para alguma parte do meu programa flex com a url ? Como Exemplo tenha Âncoras de HTML.

  • Como fica a indexação do conteúdo do site Flex ?


Sem jeito ?

M

rpffoz:
Amigo, pode-se até usar… mas você usa?
Ou melhor você consegue usar? para mim o O.O do JS é um PHP querendo ser O.O…

JavaScript é mais orientado a objetos do que Java, além de ser uma linguagem anos luz na frente por usar protótipos em vez de classes diretas. E não se esqueça dos closures.

Mas a questão não é essa, a vantagens dos ambientes apresentados, é que teóricamente:
“Envio um objeto Java por este protocolo que provê compactação e tranferência binária,
e no meio do caminho este objeto Java vira um objeto Flex, que trato como se fosse um objeto java”

Fora que, meu js nem empacotamento tem! nem se quer tem package… js não foi feito para um nível tão abstrato.

O DWR faz isso e não precisa de um runtime específico e que não é multiplataforma como todo mundo prega. Transparências em Flash continuam não funcionando no meu Linux aqui.

Cuidado pra não confundir trabalho com religião rapaz, o Flex é uma ferramenta incrível, mas nem tudo são flores e evoluções que ninguém nunca fez.

C

O mesmo da pra fazer usando JavaScript e JSON, sem usar nenhum padrao fechado, seja no servidor ou no cliente.

Sim, e tambem nao eh nada que nao se possa fazer usando HTTP e Connection: Keep-Alive e tecnicas similares (ja deu uma olhada no Comet?). A unica coisa que tem de novo ai eh o codigo fechado e tecnologa proprietaria.

Q

Comparar JS com JAVA? ixiiii… :?

o que levou vc a tirar essa conclusão?

Q

cv:

Sim, e tambem nao eh nada que nao se possa fazer usando HTTP e Connection: Keep-Alive e tecnicas similares (ja deu uma olhada no Comet?). A unica coisa que tem de novo ai eh o codigo fechado e tecnologa proprietaria.

Mas vc não acha que facilita um pouco ter uma ferramenta que otimiza seu tempo e aumenta a produtividade?

:wink:

C

Voce ja usou a OO do JavaScript pra saber? Me parece que nao, ou vc teria notado que poucos sistemas de objetos em linguagens populares sao tao limpos quanto os prototipos do JavaScript. A OO do JavaScript da um pau na do Java e C#, se vc me perguntar.

Se nao sabe, nao fale merda. http://www.lixo.org/archives/2007/09/14/javascript-put-everything-in-a-namespace/

R

Kra pode até ser mais orientado, mas a questão é… alguém usa? ou consegue usar?
Dúvido que você modele um objeto visual no java script, você pode até modelar um carro, mas você consegue mostrar?

Falando em um ambiente de sistemas, posso facilmente modelar um componente que possa ser reaproveitado em outros sistemas, e o melhor trabalho com ele como se fosse uma classe java mesmo, até empacotamento eu poderia provêr, no Java você tem o .jar, no Flex eu tenho o .swc…

Sim meu amigo, com DWR eu cheguei a converter um VO Java em um “VO” JavaScript…

Tentei de alguma forma não fugir do paradimga O.O… mas amigo… com js complica a vida…
Quanto a portabilidade, prefiro desenvolver sistemas sem transparências mas que me garantem a portabilidade do comportamento de minhas telas,
do que as vezes fazer sabe Deus com css e js para que minhas telas funcionem nos browsers…

Mas só lembrando também o que eu falei de tecnlogia aki, não tinha nada av com o Flex em si, mas sim o suporte que ele me dá no back-end.

Flex não é uma religião para mim, por favor nem brinque com isso, se perceber apenas falei do Blaze, e ao decorrer do tópico foi chegando ao que está agora.

Desculpas se ofendi alguém, ou fui contra as regras do fórum, apenas quero mostrar a comunidade algo interessante e que facilita muito o meu desenvolvimento no dia a dia…

Abraços!
\o/

C

rpffoz:
Amigo, pode-se até usar… mas você usa?
Ou melhor você consegue usar? para mim o O.O do JS é um PHP querendo ser O.O…

Mas a questão não é essa, a vantagens dos ambientes apresentados, é que teóricamente:
“Envio um objeto Java por este protocolo que provê compactação e tranferência binária,
e no meio do caminho este objeto Java vira um objeto Flex, que trato como se fosse um objeto java”

Fora que, meu js nem empacotamento tem! nem se quer tem package… js não foi feito para um nível tão abstrato.

Sim, uso, e me atende muito bem. Ter os objetos Java na minha camada de apresentação é simples com o DWR, por exemplo.
Javascript possui estruturas de dados com maior grau de abstração e bem mais flexiveis que Java. A representação de objetos em javascript acontece de maneira muito mais natural. Talvez você não tenha estudado javascript a fundo e não saiba o que a linguagem pode te oferecer em termos de OO.
Além de objetos que só servem como VOs, posso criar diversos componentes para minha view usando javascript, todos usando OO e fazendo comunicação direta com o servidor via ajax, de forma 100% transparente para quem usa o componente.

C

Logico que facilita. Mas o que te leva a crer que do outro lado da cerca nao tem ferramentas? Tem toolkits e ferramentas aos montes, alias. Só procurar.

R

O mesmo da pra fazer usando JavaScript e JSON, sem usar nenhum padrao fechado, seja no servidor ou no cliente.

Sim, e tambem nao eh nada que nao se possa fazer usando HTTP e Connection: Keep-Alive e tecnicas similares (ja deu uma olhada no Comet?). A unica coisa que tem de novo ai eh o codigo fechado e tecnologa proprietaria.

A técnologia não é mais proprietária, a mesma que criou deu a comunidade, isto é agora é OpenSource sob as da Mozilla Public License se não me engano…

Volto a dizer: Amigo, apenas citei algo que conheci e achei muito bom, use se quiser, se não ignore.

Abraços
\o/

C

Nope. O Flash Player continua sendo codigo fechado, apesar de alguns pedacos da engine terem sido abertos no Tamarin - http://www.mozilla.org/projects/tamarin, que eh esse lance da MPL a que vc se refere.

R

Desculpas esqueci de dizer oq se tornou OpenSource…

Quando disse logo acima, me referi ao Blaze, (Data-push, Subscribe e afins…)

Quanto ao Tamarin, sim conheço também… tem até um Benchmark sobre ele http://www.phpavancado.net/node/415
Há também dizeres que em versões futuras do mozilla, será possível executar aplicações baseadas em Flash nativamente…

R

Sem dizer que, você falou que o Flash é proprietário e etc…

Se falou do flash concluo que esta é a VM do Flex, e qual a VM (Browser) do seu JS? é OpenSource?

Abraços.

M

rpffoz:
Kra pode até ser mais orientado, mas a questão é… alguém usa? ou consegue usar?
Dúvido que você modele um objeto visual no java script, você pode até modelar um carro, mas você consegue mostrar?

Mostrar um objeto com JavaScript? Numa tela? Tipo essa desse navegador que você tá usando pra ler essa mensagem?

Imagina. Eu uso JavaScript pra programas de linha de comando.

rpffoz:

Falando em um ambiente de sistemas, posso facilmente modelar um componente que possa ser reaproveitado em outros sistemas, e o melhor trabalho com ele como se fosse uma classe java mesmo, até empacotamento eu poderia provêr, no Java você tem o .jar, no Flex eu tenho o .swc…

Em JavaScript eu tenho o… como era mesmo… ah, lembrei, “.js”.

Back end? O que é que Flex tem haver com back end?

O mundo é feito de opções, e Flex e javaScript não são as únicas.

R

Mostrar um objeto com JavaScript? Numa tela? Tipo essa desse navegador que você tá usando pra ler essa mensagem?

Imagina. Eu uso JavaScript pra programas de linha de comando.

Poisé, como eu disse, se modelo um componente personalizado, eu consigo exibir o mesmo.
E ainda consigo reusabilidade, manutenabilidade e afins…

Back end? O que é que Flex tem haver com back end?

O mundo é feito de opções, e Flex e javaScript não são as únicas.

Não necessáriamente me referi ao Flex, mas sim o que ele agrega no back-end,
Se ler o primeiro post neste tópico verá que falo apenas do BlazeDS,
este que provê compactação, tranferência binária, servicos como data-push, subscribe, httpstreaming… e afins…

M

rpffoz:
Não necessáriamente me referi ao Flex, mas sim o que ele agrega no back-end,
Se ler o primeiro post neste tópico verá que falo apenas do BlazeDS,
este que provê compactação, tranferência binária, servicos como data-push, subscribe, httpstreaming… e afins…

Bem, compactação e tranferência binária quem faz é o HTTP, data-push e subscribe são facilmente feitos com CometD.

R

O que leva você a crer que estou querendo provar q o Flex é a única solução?

Como disse, apenas citei o Blaze para estudar, pois achei muito bacana todos os serviços que ele me disponibiliza para trabalhar com Flex.
Concluo assim, se você quer usar suas telas em html/js/css e com seus frameworks (DWR, CometD, e afins) use, afinal você é livre! +)

Que eu cansado do html/js/css uso meu Flex aki, atendendo todas as minhas necessidades com um cliente Feliz a cada fim de projeto! +)

O meu único desabafo, é que cansei de programar coisas que cospem html/js/css na tela do usuário,
não provendo portabilidade, manutenabilidade, reusabilidade e afins.

Abraços
\o/

D

Amigo, ontem até discuti isso contigo. Concordei em dar uma olhada no Flex e é exatamente o que estou fazendo, nas horas vagas. Mas creio que está sendo fervoroso demais com a idéia fixa de que o Flex faz tudo.
Lembra que lhe disse para ver jQuery, Ext JS e Dojo? Falei que eram ótimas formas de trabalho, lembra?
Quanto mais você pregar que o Flex é a melhor bolacha do pacote, mais vão aparecer pessoas para dizer o contrário e lhe mostrar tecnologias que podem suprir o lado “Flex”. Como disse antes, é legal conhecer o Flex e também é legal da sua parte olhar estas bibliotecas JavaScript. Vai perceber que o OO que acha que JavaScript não tem, não só é possível, como também é elegante e flexível.

Abraços

R

djemacao:
Amigo, ontem até discuti isso contigo. Concordei em dar uma olhada no Flex e é exatamente o que estou fazendo, nas horas vagas. Mas creio que está sendo fervoroso demais com a idéia fixa de que o Flex faz tudo.
Lembra que lhe disse para ver jQuery, Ext JS e Dojo? Falei que eram ótimas formas de trabalho, lembra?
Quanto mais você pregar que o Flex é a melhor bolacha do pacote, mais vão aparecer pessoas para dizer o contrário e lhe mostrar tecnologias que podem suprir o lado “Flex”. Como disse antes, é legal conhecer o Flex e também é legal da sua parte olhar estas bibliotecas JavaScript. Vai perceber que o OO que acha que JavaScript não tem, não só é possível, como também é elegante e flexível.

Olá djemacao,

Kra a perspectiva da conversa aqui tomou outro rumo, não quiz nem falar em Flex, apenas havia citado o BlazeDS, aí alguém falou em Flex e começou…

Mas então… kra!! que massa aquele Ext JS, muito bacana o visual!! pow tem até um SO lá, parecido com o meu Google Web Desktop

Gostei e muito, agora só vou dar uma olhada como fica o desenvolvimento, ferramentas e afins…

Valeu pela dica!

Abraços!
\o/

Q

rpffoz:

Olá djemacao,

Kra a perspectiva da conversa aqui tomou outro rumo, não quiz nem falar em Flex, apenas havia citado o BlazeDS, aí alguém falou em Flex e começou…

Mas então… kra!! que massa aquele Ext JS, muito bacana o visual!! pow tem até um SO lá, parecido com o meu Google Web Desktop

Gostei e muito, agora só vou dar uma olhada como fica o desenvolvimento, ferramentas e afins…

Valeu pela dica!

Abraços!
\o/

É isso ai… tem que aceitar que existe outras soluções e que não deixam de ser boas!

hehehe

abraços :wink:

F

Em 2008 JRuby com certeza.

A

cv:
Explicacao de REST bem bacana:
http://tomayko.com/articles/2004/12/12/rest-to-my-wife

Caraca, CV. Muito boa a explicação!!!

P

rest, flex e sex a terceira é a mais importante na minha opinião!

V

Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

B

vs2008:
Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

putz… aí vc chutou o pau da barraca!

P

vs2008:
Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

E pq vc se prendeu a microsoft? O futuro é só microsoft então ? :wink:

F

vs2008:
Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

vc é consultor da Microsoft… :lol:
ta querendo um emprego lah… :slight_smile:
ta em faze de experiência e precisa falar bem da empresa… :shock:

rs rs rs rs…

Q

vs2008:
Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

Bill Gates? vc por aqui?

K

vs2008:
Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

Nuss que bajulação é essa…
Ngm merece --’

L

putz…esse tópico era pra ser um dos melhores do forum. Começou muito bem…mas agora…cada hora é um querendo criar polemicas e um monte de gente dando resposta inutil com piadinhas…dai fica dificil achar coisas que preste! Tinha ateh perdido o link que o cv mandou!!

Pq esse pessoal não cresce viu…

triste :cry:

S

Voltando ao tópico, aqui vão minhas previsões baseadas no puro palpite:

[color=green]UP:[/color]

:arrow: Apple
:arrow: Iphone
:arrow: Scala
:arrow: Ruby
:arrow: Rest
:arrow: Configuração Programática
:arrow: Frameworks Web não intrusivos
:arrow: XML (para dados)

[color=red]DOWN:[/color]

:arrow: Microsoft
:arrow: EJB
:arrow: Soap
:arrow: Android
:arrow: JSF
:arrow: Annotations
:arrow: XML (para configuração)
:arrow: JRuby
:arrow: Groovy

M

Voce ja usou a OO do JavaScript pra saber? Me parece que nao, ou vc teria notado que poucos sistemas de objetos em linguagens populares sao tao limpos quanto os prototipos do JavaScript. A OO do JavaScript da um pau na do Java e C#, se vc me perguntar.

Se nao sabe, nao fale merda. http://www.lixo.org/archives/2007/09/14/javascript-put-everything-in-a-namespace/

Me diz uma coisa que fiquei intrigado, você diz que JavaScript é superior que Java e C# ?
Porém todos os FrameWorks Lideres de Mercado utilizam-se da tecnologia Java e em melhor observação tem todo um ambiente Middalware de Integração via EJBs e javabeans entre outros componentes e API isso é Java Puro particularmente falando no seu gestor de baixo nível a máquina virtual Java essa interpreta byte-codes, não me recordo disso sendo da mesma para JavaSCript que é atuante mesmo em Presentation Tier, e nada que envolva uma JCA em todos os seus aspectos.
SpringFrameWork ainda assim seria uma dedução razoável vista em outra ótica ainda, mas JavaScript ?, é um mundo especifico.

Abraçoss

W

saoj Wrote…:Voltando ao tópico, aqui vão minhas previsões baseadas no puro palpite: Microsoft , EJB ,JRuby ,Groovy
Dê um bom motivo para que essas tecnologias sejem "DOWN: " em 2008, com relação ao JRuby será que esses caras são meio lezos.??



Hummm… sinto alguma influência de mãe Dina.

M

Ou você não entendeu ou fingiu que não entendeu. Um colega falou que a Orientação a Objetos do JavaScript era “tosca” e o cv disse que nesse quesito, JavaScript é bem melhor preparado do que Java e C#.

Não tente comparar linguagens diferentes, porque vai cair num maldito flamewar que não vai ter fim.

Até!

P

Interessante. O título do tópico fala sobre tecnologias ‘Java’ -até por isso eu não consegui listar muitas- mas a maioria das pessoas deste tópico está listando tecnologias que ou não são Java ou não são específicas do Java, são conceitos arquiteturais genéricos como REST. Não achei nenhum ponteiro para um frameworks revolucionário ou algo do tipo.

B

o java é apenas uma vítima do seu tempo :wink: hoje a maioria dos conceitos estão sendo implementados em várias linguagens ao mesmo tempo. como tem mais gente pegando pedaço do bolo, a fatia fica menor.
isso de novidades, atualmente, acredito que está difícil em qualquer lugar.

M

maquiavelbona:

Ou você não entendeu ou fingiu que não entendeu. Um colega falou que a Orientação a Objetos do JavaScript era “tosca” e o cv disse que nesse quesito, JavaScript é bem melhor preparado do que Java e C#.

Não tente comparar linguagens diferentes, porque vai cair num maldito flamewar que não vai ter fim.

Até!

Existe realmente uma Flexibilidade perante o que se pode fazer com JavaScript e concordo, o que não posso admitir é que uma linguagem baseado em Script e tem seu interpretador um Browser, se demonime predominante Tecnologicamente, visto que essas estão no alicerce do JAVA exclusivamente.

São linguagem diferentes é mas não considero JavaCript OO mais o que Java ?, Java vai além da Orientação a Objetos e hoje mesmo é um kernel para todas as tecnologia que se baseia em sua arquitetura.

As tecnologias que tem sua orientação nas aplicações WEB são derivações e interpretações da Plafaforma J2EE/JEE nada e nada mesmo se faz sem passar serviços via XML e que não encapsulem código Java.

Pensar em acoplamento fraco e alta coesão em classes e objetos, você não atinge esse nível de pensamento em linguagem JavaScript a mesma não modela algo em nível que se possa dizer que é uma linguagem OO

P

Oi, Marcio,

Não entendi direito seu texto mas uma coisa muito imortante é não confundir linguagem com runtime. Ninguém aqui está falando sobre rodar aplicações dentro de um browser (creio) a comparação é entre inguagens e não runtimes. JavaScript roda em browsers ou até na JVM, através do Rhino, então comparar runtime é besteira.

Dito isso Java (linguagem) não vai ‘além de OO’. Java é uma linguagem OO, com uma implementação aceitável (não ótima, não 100% OO) e baseada em classes. JavaScript é uma linguagem OO, com uma implementação aceitável e baseada em protótipos.

Sobre a parte do " As tecnologias que tem sua orientação nas aplicações WEB são derivações e interpretações da Plafaforma J2EE/JEE nada e nada mesmo se faz sem passar serviços via XML e que não encapsulem código Java. " eu não entendi. Poderia explicar?

Quanto à não alcançar métricas de coesão e acoplamento obtidas em Java com JavaScript não faz muito sentido, creio. Não atinge por quê? Por que não modela ‘em nível’ que se chame de OO? As duas são linguagens Orientadas a Objeto, eu diria que você possivelmente está influenciado pelo uso de JavaScript apenas para criar funções de validação em browser e acaba perdendo o fato de que e uma linguagem completa, mas posso estar errado pois não sei de sua experiência. Pode elaborar?

C

Caro Marcio Duran, tambem conhecido como “o cara cujos pelos do peito parecem duas Hello Kitties se beijando”: disso ai que vc anda fumando, tem mais?

Eu quero experimentar um pouco. Parece que eh da boa.

M

pcalcado:
Oi, Marcio,

Não entendi direito seu texto mas uma coisa muito imortante é não confundir linguagem com runtime. Ninguém aqui está falando sobre rodar aplicações dentro de um browser (creio) a comparação é entre inguagens e não runtimes. JavaScript roda em browsers ou até na JVM, através do Rhino, então comparar runtime é besteira.

Dito isso Java (linguagem) não vai ‘além de OO’. Java é uma linguagem OO, com uma implementação aceitável (não ótima, não 100% OO) e baseada em classes. JavaScript é uma linguagem OO, com uma implementação aceitável e baseada em protótipos.

Sobre a parte do " As tecnologias que tem sua orientação nas aplicações WEB são derivações e interpretações da Plafaforma J2EE/JEE nada e nada mesmo se faz sem passar serviços via XML e que não encapsulem código Java. " eu não entendi. Poderia explicar?

Quanto à não alcançar métricas de coesão e acoplamento obtidas em Java com JavaScript não faz muito sentido, creio. Não atinge por quê? Por que não modela ‘em nível’ que se chame de OO? As duas são linguagens Orientadas a Objeto, eu diria que você possivelmente está influenciado pelo uso de JavaScript apenas para criar funções de validação em browser e acaba perdendo o fato de que e uma linguagem completa, mas posso estar errado pois não sei de sua experiência. Pode elaborar?

Bom vamos, lá então

JavaScript é uma linguagem e não é uma Tecnologia que se propõem algo que se possa especificar tão amplamente como JAVA 2 não vai agregar nível tanto de software como de hardware em particular.
JAVA é Orientado a Objetos 100% , JavaScript é uma linguagem de interpretação cuja as suas caracteristicas usa-se tanto programação estruturada como semelhanças de OO, digo isso porque JavaScript você não tem algo que se possa dizer Interface real pela linguagem.Ou melhor explicando regras e herarquias de Classe e Objetos, compontentes APIs e em particular JAVA já tem isso de uso independente.
Plataforma é JAVA e não JavaScript, seu uso é especifico a comportamento de Browser e isso é ponto final.

D

cv:
Caro Marcio Duran, tambem conhecido como “o cara cujos pelos do peito parecem duas Hello Kitties se beijando”: disso ai que vc anda fumando, tem mais?

Eu quero experimentar um pouco. Parece que eh da boa.

Espero que seja uma brincadeira, pq para um MODERADOR, você está sendo bem sem graça. Seria os ares Londrinos que lhe deixa assim? Ou quer imitar os Moderadores “pouca sombra” dos fóruns de Games que existem espalhados por ai?

Colocação sem classe e sem graça.

R

Por que exatamente???

F

Morri.

R

vs2008:
Não se prendam a java. Pesquisem sobre:
Windows Server 2008
Visual Studio 2008
Windows Communiction Foundation
Windows Workflow Foundation
Windows Presentation Foundation

Concordo com o colega a não se prender a Java. Hoje em dia eu estou preferindo fazer aplicações Windows Forms em .NET do que aplicações Swing em Java. Gostei muito de coisas como Databindings :slight_smile: Não sei se existe algo assim para Java Swing. E pode falar o que quiser, Swing É lento.

Ainda não testei o .NET para aplicações Web, não sei como são os frameworks web do .NET e não sei se existe um tipo de EJB para .NET.

P

Ainda difícil.

  1. Java enquanto plataforma (o que você está chamando de Tecnologia, com T maiúsculo) não é OO, então não entendi o que tem a ver comparar a inexistente OO da plataforma Java com o da linguagem JavaScript. Vamos nos concentrar nas linguagens, qe são OO, que tal?
  2. Java agrega em termos de hardware? Agrega o que?!

Marcio Duran:

JAVA é Orientado a Objetos 100%

Ops, errado. Java não é 100% OO, possui tipos que não são objetos (“tipos primitovos”) e não adianta dizer que autoboxing consertou isso: quem já precisou fazer reflection com autoboxing sabe que é necessário tratar objetos e tipos primitivos de maneira diferente, seja com Java 1.4, 5 ou 6.

Eu não faço a menor idéia do que seja uma “linguagem de interpretação”. Será que você quis dizer uma linguagem de programação interpretada? Se for isso é uma meia-verdade. A maioria das implementações de JavaScript são interpretadas mas nada impede que seja compilada, como JRuby.

Marcio Duran:

cuja as suas caracteristicas usa-se tanto programação estruturada como semelhanças de OO, digo isso porque JavaScript você não tem algo que se possa dizer Interface real pela linguagem.Ou melhor explicando regras e herarquias de Classe e Objetos

Ops, errado de novo. Classes são uma maneira de especificar objetos, protótipos são outra maneira. Você não vai encontrar classes em JavaScript porque ele se baseia em protótipos, outro exemplo é Io. Você não precisa ter classes nem hierarquias para ter OO, basta ter objetos.

Agora eu não entendi o “Interface real pela linguagem”…

Marcio Duran:

, compontentes APIs e em particular JAVA já tem isso de uso independente.
Plataforma é JAVA e não JavaScript,

Dessa parte eu não entendi nada.

Acho que voc6e não leu o que eu escrevi. JavaScript não precisa de um browser para rodar, faça uma buca por Rhino. Na verdade eu tenho aplicativos em javaScript rodando no meu iPod Touch (poderia ser no iPhone se eu fosse masoquista em confiar meu telefone à apple), sem browser. Meu último projeto utilizava Rhino para renderizar JavaScript no servidor e retornar apenas o HTML para o browser.

R

Infelizmente o JS esta muito queimado por causa do IE :frowning:

M

cv:
Caro Marcio Duran, tambem conhecido como “o cara cujos pelos do peito parecem duas Hello Kitties se beijando”: disso ai que vc anda fumando, tem mais?

Eu quero experimentar um pouco. Parece que eh da boa.

Não perca a elegância, seja culto não um ignorante…

M

pcalcado:
Ainda difícil.

Ops, errado de novo. Classes são uma maneira de especificar objetos, protótipos são outra maneira. Você não vai encontrar classes em JavaScript porque ele se baseia em protótipos, outro exemplo é Io. Você não precisa ter classes nem hierarquias para ter OO, basta ter objetos.

Agora eu não entendi o “Interface real pela linguagem”…

Dessa parte eu não entendi nada.

Você se auxilia de uma outra tecnologia para complementar as funcionalidades que não tem JavaScript ?, já não é mais JavaScript então.

Me explica um código StandAlone em JavaScript , vai dizer que eu posso ter aplicativos JavaScript puro…
isso é simplesmente absurdo ou não entendeu novamente.

P

Iso é teoria de OO. Não dá para explicar muito em um post, recomendo que você procure um bom livro sobre fundamentos de OOP, mas basicamente: nãoo é porque não tem classe que não é OO, JavaScript é OO só que utiliza uma outra forma de definir objetos, os chamados protótipos.

JavaScript é ma linguagem, não uma tecnologia (aliás, você mesmo falou isso!) e eu posso executar essa linguagem onde eu quiser (e tiver um runtime). Sim, é JavaScript, é a mesma linguagem
.

Com meio segundo de Google usando palavras-chave que dei no meu post:

http://www.google.com/search?q=rhino+javascript+example

Antes de dizer que algo é absurdo faça uma pesquisa.

C

Ueh, a sua JVM roda num sistema operacional, nao? Isso eh “se auxiliar de uma outra tecnologia para complementar as funcionalidades que nao tem no Java”, como voce mesmo diz. Logo, ta faltando um pouco de logica no seu raciocinio, nao?

C

Marcio Duran:
Caro CV, ou Moderador …
Coloque suas explicações e não saia correndo das questões que não consegue se defender…
Seja elegante…
se é que é Moderador de alguma coisa…

Hmmm… precisa? :?

M


pcalcado

Eu não faço a menor idéia do que seja uma “linguagem de interpretação”.
Será que você quis dizer uma linguagem de programação interpretada?

JavaScript é uma simples concorrente para Java, que foi concebido para a World Wide Web.

JavaScript is an interpreted language which is based on the ECMAScript standard. JavaScript é uma linguagem interpretada, que é baseado no padrão ECMAScript.
JavaScript was developed by Netscape Communications Corporation and is now owned by Sun Microsystems. JavaScript foi desenvolvido pela Netscape Communications Corporation e agora é de propriedade da Sun Microsystems.

Espero que tenha entendido…agora, você quer se apoiar com outros instrumentos tecnológicos para justicar aquilo que em particular JavaScript não faz sozinho…

Onde esta sua literatura…em Filofismo…???

C

Sim, assim como Java foi inicialmente concebida pra rodar em set-top boxes, e foi sendo adaptada e evoluida conforme as necessidades.

Tenta de novo, depois de descobrir onde a sua propria literatura foi parar. “Filofismo” nao eh nem uma palavra (3 hits no google).

P

Márcio, eu tentei mas você não ajuda.

JavaScript foi criado como uma linguagem de scripting para brwosers, hoje em dia ela é muito mais que isso.

Não sei de onde você tirou esta definição mas se estudar um pouco sobre linguagens de programação vai entender que uma linguagem é compilada ou interpretada de acordo com seu runtime. Um browser geralmente interpreta JavaScript mas nada impede que seja compilada.

Eu sei que é confuso quando estamos começando, tente ser menos arrogante e ler mais. Caso tenha alguma dúvida minha literatura está na biblioteca da faculdade mais próxima, recomendo que comece com organização de Computadores e Lógica Clássica.

Eu sinceramente não pretendo perder mais nem um minuto discutindo sobre implementações de OO em JavaScript se você nem sequer se preocupa em aprender o que é OO ou JavaScript. Boa sorte e bons estudos.

M

cv:

Ueh, a sua JVM roda num sistema operacional, nao? Isso eh “se auxiliar de uma outra tecnologia para complementar as funcionalidades que nao tem no Java”, como voce mesmo diz. Logo, ta faltando um pouco de logica no seu raciocinio, nao?

Sim, tenho a JVM que compila o meu codigo Java para o meu .class , lhe pergunto o que você pode fazer em engenharia reversa para codigo JavaScript , vai gerar o que ? posso ir é voltar com codigo java em qualquer estado , até mesmo gerar diagramas de classes , diagramas de objetos, diagramas de sequencia ou melhor todos que fazem parte da boa UML.
O que uma coisa tem haver com a outra você perguntaria ?, você não tem sustenção em ambiente de tamanho escalabilidade, JAVA vai além muito além do que você possa simplesmente usar como uma mera linguagem script.

M

"Não sou arrogante, não e perca a sua Classe e não fuja do assunto a conversa é Tecnologia"
Quanto a me recomendar alguma literatura, diga o livro e o Autor e posso lhe recomendar algo melhor.

Quem sabe pra você algo como Alistair Cockburn, ou outros obras como Kathy Sierra e Bert Bates.

C

Eu vou tentar usar a Logica mais uma vez:

Nao eh a JVM que compila seu codigo Java pra ‘.class’, eh o javac (ou outro compilador, como o jikes). Esses bytecodes contidos nos seus arquivos ‘.class’ sao entao carregados pela JVM, e interpretados (ou compilados em runtime, caso voce esteja usando uma JVM mais moderna que possua um mecanismo de JIT). Mas tudo bem, o que sao 9 anos de experiencia na plataforma Java quando vc se depara com um cara com pelos no peito?

JavaScript nao tem um formato binario para o qual se possa compilar especificado, logo a sua pergunta nao faz sentido, ja que a especificacao do ECMAScript nao define nenhum tipo de bytecode. Logo, a “engenharia reversa” que se faria em arquivos ‘.class’ em Java nao se aplica, uma vez que para ser executado, o codigo JavaScript tem que estar disponivel para o runtime.

No caso de se compilar diretamente de JavaScript para bytecodes Java, como o Rhino permite, as mesmas ferramentas de engenharia reversa que funcionam para Java funcionam tambem para JavaScript.

Que parte da frase “linguagens possuem uma ou mais implementações, compostas de um compilador (opcional) e um runtime, e não devemos comparar runtimes com linguagens” vc nao entendeu? Quer que eu desenhe? Talvez com creme de barbear, pra ficar mais facil? Ou vc prefere que eu faça um bolo com uma foto do Alan Turing no glacê?

J

Um pouco de arrogância e falta de humildade e o tópico está incendiando, não é melhor voltarmos ao foco principal? As 5 tecnologias baseadas em Java para aprender em 2008"

Não adianta, quando a insistência é contínua e a ajuda na compreensão é ignorada, é melhor deixar pra lá e não desperdiçar mais tempo;

M

A mesma desculpa do Pcalcado, você justifica por que o Rhino faz para completar a deficiencia do JavaScript, ainda só estou falando de Java.Você consegue ver a minha foto mas você se esconde em Foto de outra pessoa e não tem nome proprio logo você não demonstra personalidade.

Se não tenho JVM para que eu preciso de um Javac, logo é exclusivo do Java e depois JIT não é Virtual Machine.

C

O Rhino eh uma implementacao de JavaScript. Nao eh “a mesma descupa” do Philip, eh o mesmo argumento, aquele que vc esta simplesmente se recusando a entender, e mesmo assim querendo bater boca.

Prova de que vc nao sabe usar o Google, ou mesmo olhar pra interface do GUJ: meu MSN, Yahoo, GMail, tao todos ali. Nao eh exatamente um perfil “anonimo”… alias, se vc procurar aqui no GUJ, vc acha ate meu RG, CPF e uns numeros de contas bancarias que eu ja tive antes, quando ainda morava no Brasil.

M

O Rhino eh uma implementacao de JavaScript. Nao eh “a mesma descupa” do Philip, eh o mesmo argumento, aquele que vc esta simplesmente se recusando a entender, e mesmo assim querendo bater boca.

[b]Isso apareceu agora !!!
A Rhino motor que vem empacotado em Java SE versão 6, que foi liberado pela Sun, em Dezembro de 2006. Isso facilita a integração JavaScript como parte de programas Java, Java e acesso pra recursos de JavaScript.

Olha ai seu JavaScript que vem buscar recurso do Java SE 6 !!![/b]


Prova de que vc nao sabe usar o Google, ou mesmo olhar pra interface do GUJ: meu MSN, Yahoo, GMail, tao todos ali. Nao eh exatamente um perfil “anonimo”… alias, se vc procurar aqui no GUJ, vc acha ate meu RG, CPF e uns numeros de contas bancarias que eu ja tive antes, quando ainda morava no Brasil.

“Mostra Logo a sua Foto, e diga seu Nome e Mostra que você tem face”

R

Não dê ouvidos a ele CV! Por favor :smiley:

W

Marcio Duran wrote:
"Mostra Logo a sua Foto (…)
Não acredito, vc. quer ver a foto do CV. :shock:

M

WilliamSilva:
Marcio Duran wrote:
"Mostra Logo a sua Foto (…)
Não acredito, vc. quer ver a foto do CV. :shock:

:arrow: As pessoas precisam se representar…, senão o que são ? tudo menos pessoas… :?:

S

Seria interessante prezar pela paz. Se não concordar com o que uma pessoa está falando, faça uma contra-argumentação educada. Se mesmo assim o cara continua achando que ele tem razão, ignore-o. Claro que vc tb tem a opção de continuar discutindo educadamente.

Acho que o CV apenas vez uma piada com a foto do Marcio. Foi apenas uma brincadeira…

M

saoj:

Seria interessante prezar pela paz. Se não concordar com o que uma pessoa está falando, faça uma contra-argumentação educada. Se mesmo assim o cara continua achando que ele tem razão, ignore-o. Claro que vc tb tem a opção de continuar discutindo educadamente.

Acho que o CV apenas vez uma piada com a foto do Marcio. Foi apenas uma brincadeira…

:wink: Sou a pessoa bem tranquila, do mais para mim esta tudo certo não estou ditando verdades nesse forum só apenas defendendo os meus conceitos e principios morais… 8)

R

Marcio Duran:
WilliamSilva:
Marcio Duran wrote:
"Mostra Logo a sua Foto (…)
Não acredito, vc. quer ver a foto do CV. :shock:

:arrow: As pessoas precisam se representar…, senão o que são ? tudo menos pessoas… :?:

Se vc faz tanto questao: http://www.flickr.com/photos/cv

Ps: CV tomei a liberdade e postei aqui …

M

ramilani12:


Uma ocasião recebi um spam, sobre uma palestra que a livraria tempo real estava patrocinando:

Carlos Villela é um dos coordenadores do GUJ, trabalha com Java há 6 anos, e atualmente explora a JVM também com Ruby, através do projeto JRuby. Há três anos trabalha na ThoughtWorks de Londres, a conceituada consultoria que tem como seu cientista-chefe ninguém mais que Martin Fowler. Atualmente desepenhando o papel de arquiteto em grandes projetos, Villela vem falar um pouco sobre as velhas e as novas arquiteturas, os grandes mitos e metodologias ágeis.

:lol: Que sorte foi não ter ido nessa palestra !!!
ia sair faísca de byte-code em tudo que é lugar…hahahah

D

saoj:

Acho que o CV apenas vez uma piada com a foto do Marcio. Foi apenas uma brincadeira…

É o que acabei relatando no off-topic a respeito das respostas “não inteligíveis”. Se um dá uma resposta “no sense”, evidentemente outro se sente na altura de gerar tamanha discussão de mesmo nível.

http://www.guj.com.br/posts/list/30/81144.java#431907

W

Marcio Duran Wrote…:Sou a pessoa bem tranquila, do mais para mim esta tudo certo não estou ditando verdades nesse forum só apenas defendendo os meus conceitos e principios morais…
Então tá tudo certo sem ressentimentos :lol: .
Na realidade esse era o meu medo :




Até mais.
Ps. esse é um dos meus sonhos de consumo.

D

Não bastasse poluir o GUJ meses atrás com mensagens non-sense sobre o ofbiz (http://guj.com.br/posts/list/15/61832.java,
http://guj.com.br/posts/list/61988.java, http://guj.com.br/posts/list/62449.java), agora vem falar que JavaScript não é OO? Ohh, por favor! Me poupe!

M

É desenvolvedor Java há 8 anos, trabalhando atualmente como analista de sistemas para a EDS do Brasil,já tendo participado de diversos projetos Java EE para o setor de transportes, financeiro, e-commerce e telecomunicações. Além disso é coordenador do GUJ ( www.guj.com.br ) e costuma compartilhar seus conhecimentos em seu blog ( http://nullability.org).

Evento: Conexão Java
Tema: Webservices
Duração: 180 minutos

… bom… antes de pegar o Bonde Andando sobre o assunto JavaScript e Java, leia tudo o que foi colocado sobre uma e outra busque o que acha certo ou errado e contra arguemente… de deixe de achei ou deixei de achar alguma coisa…

As afirmativas é por que você tem algo a discutir ao assunto, vamos lá quero saber o que você pode contribuir…

Abraçoss

R

Caramba, é um circo de horrores!!!

D

Eu sei muito bem quem eu sou e quem costuma freqüentar o GUJ para tirar dúvidas e/ou debater assuntos interessantes sem se comportar como um troll também já sabe quem eu sou.

Agora, se você quiser que eu me posicione sobre o assunto, ok.

Primeiro, eu acho que você é disléxico (http://en.wikipedia.org/wiki/Dyslexia), pois você não consegue construir uma frase sequer sem manter uma coerência interna que dê sentido ao que você quer expressar, além de não conseguir entender o que o Phillip e o Carlos estão tentando argumentar (embora eu ache que você sequer leia o que eles tenham escrito).

Segundo, JavaScript é uma linguagem OO, como o CV e o Phillip falaram. Linguagens OO trabalham com OBJETOS, que podem ser especificados/construídos/montados/… usando a tradicional dupla classes+interfaces ou usando protótipos. JavaScript se encontra no grupo de linguagens OO baseados em protótipos (http://en.wikipedia.org/wiki/Prototype-based_languages), cujo nome também pode ser Linguagens baseadas em instâncias (instâncias? o que era instância mesmo senão um objeto?). Se você não souber o que é um protótipo (http://en.wikipedia.org/wiki/Prototype), lá vai uma definição rapidinha: protótipo é todo objeto que pode ser clonado para criação de novos objetos ou para permitir que seu comportamento seja estendido/reescrito.

E, terceiro, Javascript é uma linguagem apenas, não define um runtime próprio, como Java, por exemplo. Isso significa que você pode escrever um código JavaScript para executar sobre o runtime do seu browser, ou para executar sobre a CLR (JScript.NET), ou sobre a JVM (Rhino) ou mesmo criar seu próprio runtime para executar aplicações em JavaScript. Logo, comparar Java com JavaScript no tocante a “runtimes” não faz o menor sentido, uma vez que JS pode usar a JVM como runtime.

Bom, é isso.

[update]:

Duas coisas para se pensar:

  • C++ não possui interfaces. Então seria C++ uma linguagem não-OO?
  • Java é 100% OO. Seria possível fazer isso então:

int a = 2; int b = a.add(3); assertEquals(b, 5); ??

S

Tivesse respondido assim logo na primeira vez teria sido muito mais proveitoso. Só estou dizendo que é melhor prezar pela paz. Se o cara está falando algo que vc acha estúpido, responda como nesse seu último post ou simplesmente ignore.

Existem pessoas (eu inclusive) que vão ficar argumentando ad eterno sobre um conceito que eles acreditam. Então se o cara está falando que a folha da árvore é azul e vc acha que é verde, diga isso pra ele educadamente. Se depois disso ele continuar falando que é azul, ignore-o. Talvez ele seja daltônico ou tenha realmente encontrado uma espécie de planta com folha azul no quintal da casa dele…

D

saoj:
Tivesse respondido assim logo na primeira vez teria sido muito mais proveitoso. Só estou dizendo que é melhor prezar pela paz. Se o cara está falando algo que vc acha estúpido, responda como nesse seu último post ou simplesmente ignore.

Existem pessoas (eu inclusive) que vão ficar argumentando ad eterno sobre um conceito que eles acreditam. Então se o cara está falando que a folha da árvore é azul e vc acha que é verde, diga isso pra ele educadamente. Se depois disso ele continuar falando que é azul, ignore-o. Talvez ele seja daltônico ou tenha realmente encontrado uma espécie de planta com folha azul no quintal da casa dele…

Falou tudo.

M

saoj:
Tivesse respondido assim logo na primeira vez teria sido muito mais proveitoso. Só estou dizendo que é melhor prezar pela paz. Se o cara está falando algo que vc acha estúpido, responda como nesse seu último post ou simplesmente ignore.

Existem pessoas (eu inclusive) que vão ficar argumentando ad eterno sobre um conceito que eles acreditam. Então se o cara está falando que a folha da árvore é azul e vc acha que é verde, diga isso pra ele educadamente. Se depois disso ele continuar falando que é azul, ignore-o. Talvez ele seja daltônico ou tenha realmente encontrado uma espécie de planta com folha azul no quintal da casa dele…

Se você quer fazer um discurso de Paz, fale por ela então, mas se sua sutileza ir no termo ironico a ponto de me chamar de daltônico eu afirmo que você desconhe as cores da Paz.


[color=red]Você esta como espectador, concorda ou não mas ao menos não fique encima do muro ou faça mera politicagem sobre o que devemos ou não aceitar sobre as questões ao Forum.
[/color]

S

Não falei que vc era daltônico, apenas que duas pessoas podem descordar sobre um determinado assunto e ambas estarem corretas. De qualquer maneira me desculpe…

F

saoj:
Marcio Duran:

Se você quer fazer um discurso de Paz, fale por ela então, mas se sua sutileza ir no termo ironico a ponto de me chamar de daltônico eu afirmo que você desconhe as cores da Paz.

Não falei que vc era daltônico, apenas que duas pessoas podem descordar sobre um determinado assunto e ambas estarem corretas. De qualquer maneira me desculpe…

Sergio, agora tu viu como funciona. Todos foram ja tentaram ser educados na argumentacao, mas nao é facil.

]['s

R

saoj:

Não falei que vc era daltônico, apenas que duas pessoas podem descordar sobre um determinado assunto e ambas estarem corretas. De qualquer maneira me desculpe…

Não perca mais tempo sendo educado com esse cara…

M

Daniel Quirino Oliveira:

É desenvolvedor Java há 8 anos, trabalhando atualmente como analista de sistemas para a EDS do Brasil,já tendo participado de diversos projetos Java EE para o setor de transportes, financeiro, e-commerce e telecomunicações. Além disso é coordenador do GUJ ( www.guj.com.br ) e costuma compartilhar seus conhecimentos em seu blog ( http://nullability.org).

Bom, é isso.

[update]:

Duas coisas para se pensar:

  • C++ não possui interfaces. Então seria C++ uma linguagem não-OO?
  • Java é 100% OO. Seria possível fazer isso então:

int a = 2; int b = a.add(3); assertEquals(b, 5); ??

Bom o Daniel voltou ao assunto, e deu um exemplo de C++ em sua tese de JavaScript, tudo bem…
valeu a tentativa…

Ai vai a minha então sobre C++ e Java.

Algumas Linguagem (como C++)permitem que uma classe estenda mais do que uma classe.Essa capacidade é conhecida como “herança múltipla”.A razão pela qual os criadores de java decidiram não permitir a herança múltipla é que pode acabar bagunçando o código.

Já ouviu falar no cenário conhecido como o “Diamante da Morte”

Em obserção peço que sinceramente,leia o Capítulo 2:Orientação a objetos.
kATHY SIERRA
BERT BATES

M

saoj:
Marcio Duran:

Se você quer fazer um discurso de Paz, fale por ela então, mas se sua sutileza ir no termo ironico a ponto de me chamar de daltônico eu afirmo que você desconhe as cores da Paz.

Não falei que vc era daltônico, apenas que duas pessoas podem descordar sobre um determinado assunto e ambas estarem corretas. De qualquer maneira me desculpe…

Aceito !!!
Concordo que uma resposta inteligente merece meu respeito.

Abraçoss

D

Só pra mim tentar acompanhar o raciocínio, pq me perdi:

1 - O que tem a ver JavaScript com esse tópico?
2 - O que leva alguém a achar que JavaScript NÃO é OO?
3 - Se JavaScript tem características “fracas” em OO, como fizeram as bibliotecas Dojo Toolkit, Ext JS e etc…?

J

As 5 tecnologias baseadas em Java para aprender em 2008

Hm, para mim:

:!: JRuby
:!: JPA
:!: Groovy
:!: JSR 314
:!: Rhino

Das outras que foram citadas não tenho um bom conhecimento para avaliá-las ainda :stuck_out_tongue:

M

djemacao:
Só pra mim tentar acompanhar o raciocínio, pq me perdi:

1 - O que tem a ver JavaScript com esse tópico?
2 - O que leva alguém a achar que JavaScript NÃO é OO?
3 - Se JavaScript tem características “fracas” em OO, como fizeram as bibliotecas Dojo Toolkit, Ext JS e etc…?

Você tem real observação, mas o que estou discutindo foi o que o Carlos Villela não soube explicar sobre sua argumentação em dizer sobre Java e JavaScript ou melhor foi infeliz em tentar falar algo que tecnicamente deixou a desejar.

Abaixo isso responde as suas colocações sobre a forma como um MODERADOR DO GUJ, se apresenta para explicar ao Forum.

Carlos Villela é um dos coordenadores do GUJ, trabalha com Java há 6 anos, e atualmente explora a JVM também com Ruby, através do projeto JRuby. Há três anos trabalha na ThoughtWorks de Londres, a conceituada consultoria que tem como seu cientista-chefe ninguém mais que Martin Fowler. Atualmente desepenhando o papel de arquiteto em grandes projetos, Villela vem falar um pouco sobre as velhas e as novas arquiteturas, os grandes mitos e metodologias ágeis.


rpffoz wrote:Ou melhor você consegue usar? para mim o O.O do JS é um PHP querendo ser O.O…


Por:Carlos Villela
Voce ja usou a OO do JavaScript pra saber? Me parece que nao, ou vc teria notado que poucos sistemas de objetos em linguagens populares sao tao limpos quanto os prototipos do JavaScript. A OO do JavaScript da um pau na do Java e C#, se vc me perguntar.


rpffoz wrote:js nem empacotamento tem! nem se quer tem package… js não foi feito para um nível tão abstrato.

Se nao sabe, nao fale merda. http://www.lixo.org/archives/2007/09/14/javascript...put-everything-in-a-namespace/

C

…que estao fundamentalmente errados e baseados em erros fatuais tao grosseiros que eu mal sei por onde comecar. Deixa eu tentar mais uma vez pra ver se vc pega por osmose: existem 4 coisas diferentes:

A linguagem Java (que tambem inclui um pouquinho da API java.lang)
As plataformas Java (JVMs, compiladores, todas as outras APIs, etc)
A linguagem JavaScript (que inclui alguns metodos primitivos, como parseInt, parseFloat, etc)
As plataformas JavaScript (VMs, ofuscadores, compiladores, APIs, etc)

Vou repetir pela ultima vez, e o contexto dos próximos paragrafos não envolve as plataformas, e sim somente as linguagens. Somente as linguagens, ok? Nada de plataforma, nada de coisas que vc realmente executa em um computador. As linguagens nao mudam se vc usar papel e caneta, pedra, martelo e talha ou um Cray. Ok? Elas sao a parte teorica da coisa. Sintaxe, gramatica, etc. Entendido? Voce nao precisa de um computador pra discutir os meritos ou defeitos de uma linguagem de programacao. Entendido? Mesmo? Otimo. Entao, so pra reiterar mais um pouquinho, nos estamos discutindo a linguagem Java e a linguagem JavaScript. Beleza? Vamos la:

  • Java não é 100% orientada a objetos, por possuir tipos primitivos como int, float, char, etc.

  • JavaScript possibilita construções OO mais elaboradas do que Java, já que vc pode adicionar e remover atributos e métodos de qualquer objeto presente no sistema, além de ter funções como “1st-class citizens” (http://en.wikipedia.org/wiki/First-class_object), o que eh extremamente importante.

  • JavaScript suporta closures, duck-typing, uso de objetos como arrays associativos e um sistema de OO por prototipos, coisas nao ainda disponiveis (ou que nao podem ser adicionadas, devido ao tamanho da diferenca conceitual) em Java.

Por esses motivos, eu disse que JavaScript eh uma linguagem melhor que Java.

A

saoj:
Marcio Duran:

Se você quer fazer um discurso de Paz, fale por ela então, mas se sua sutileza ir no termo ironico a ponto de me chamar de daltônico eu afirmo que você desconhe as cores da Paz.

Não falei que vc era daltônico, apenas que duas pessoas podem descordar sobre um determinado assunto e ambas estarem corretas. De qualquer maneira me desculpe…

MOMOMOMOMONSTER KILL! :twisted: :twisted:

Na minha opinião, Javascript pode ser OO :), as vezes até mais que Java.

M

Me admira a disposição e paciência que vocês têm de discutir com alguém que simplesmente não quer entender o que vocês têm para explicar, por melhores que sejam as explicações, como está sendo o caso. É a típica thread buraco-sem-fundo, de onde claramente não vai sair nada de útil, só vai sair desgaste.

M

É nada, agora qualquer pessoa que ler esse tópico vai entender que JavaScript não é só aquela linguagem que você faz funções de validação de campos em formulários HTML.

M

Pô, Maurício, será que precisa de um tópico desse tamanho, com esse nível de agressividade e com tantos comentários non-sense, pras pessoas aprenderem isso? Ainda mais um assunto que já foi falado inúmeras vezes nesses anos todos…

De qualquer forma, acho que essa discussão toda gera (muito) mais prejuízo do que benefícios.

J

Olá pessoal.

primeiro, estamos realizando discussões num fórum virtual, onde as frases podem ser mal entendidas devido a subjetividade implicita, já que não temos como prever “expressões físicas e corporais”. Contando com isto, devemos ter o cuidado para não agredir verbalmente e nem realizar certos tipos de brincadeiras a não ser que a pessoa em questão seja íntima, o que simplifica as coisas.

segundo, a melhor coisa é refletir, perdoar e esquecer as discussões aqui geradas. Bola pra frente.

Terceiro, sobre Javascript:

JavaScript é OO baseado em protótipos e como vivemos num mundo real: toda linguagem tem suas vantagens e desvantagens.

As diferentes técnicas para se programar OO com JS nos permite usar a melhor abordagem de acordo com a necessidade. Por exemplo: Não vou criar métodos nested numa classe se possuo muitos métodos complexos, o que afetaria a construção deste objeto, gerando overhead. Mas para classes base, menos específica ou logicamente mais simples, vale a pena.

Sou programador JS há 7 anos. Adoro este linguagem, no entanto, acho difícil uma progressão rápida e robusta sem uma adoção padrão por parte dos fabricantes de browsers. Obviamente não me refiro ao Firefox ou Ópera.
Gostaria muito de ver uma padronização. O que mais afeta o programador é a falta de transparência nos diferentes browsers, comportamentos específicos, implementação mais custosa (baixo desempenho), etc. Aí o programador é obrigado a usar um toolkit para facilitar, e depois de um certo tempo usando, ele percebe que a amarração é tanta que ele precisa largar o toolkit adotado…Obviamente existes toolkits interessantes, como ExtJS, no entanto, não existe a "bala de prata"
no mundo JS. É prototype, JQuery, DOJO, Scriptacolous, Ext…todos tem defeitos (em menor ou maior escala).

Quarto:

Sobre a pergunta específica do tópico, não me restrinjo a tecnologias, mas também a assuntos:

1 - Grid Computing. Ver produtos como Terracotta ou Gigaspace. Isto sim é um conceito em evolução
e que vale a pena estudar, ainda mais com os núcleos aumentando.

2 - Relacionado ao primeiro, Concorrência. É um tópico que o Java precisa despontar de vez.
Temos muitos avanços, porém, nada em especial. O que é uma coisa simples em Erlang (Thread-safe)
em Java é um tema complexo, devido a questão de Object-sharing.

3 - GWT. Este bixinho veio com um conceito muito interessante. Quem ver o “core” do negócio
vai perceber que a idéia dele é muito boa, ainda mais para o programador final “end-user”.

4 - Scripting server-side. Só olhar Groovy, JRuby…Rhino.

5 - Java Applet. Calma, é brincadeira!! :smiley: Não consigo pensar em alguma coisa agora, então fica
sem resposta.

Bom pessoal, por enquanto é isso.

[]'s,

M

MarcioTavares:
Pô, Maurício, será que precisa de um tópico desse tamanho, com esse nível de agressividade e com tantos comentários non-sense, pras pessoas aprenderem isso? Ainda mais um assunto que já foi falado inúmeras vezes nesses anos todos…

De qualquer forma, acho que essa discussão toda gera (muito) mais prejuízo do que benefícios.

Eu acho muito pior não dar uma resposta fundamentada comprovando que o que havia sido dito era absurdo. Se eu ou o CV não tivéssemos falado que JS tem suporte a uma orientação a objetos muito mais flexível do que Java, pessoas que entrassem no tópico iriam considerar que o que havia sido dito (de que não é possível “programar OO em JS”) era verdade e isso sim seria um mal muito maior pra os desenvolvedores que estão começando a programar.

O que muita gente esquece de considerar quando está escrevendo aqui no GUJ é que esse é um dos maiores, mais famosos e mais “considerados” fóruns de Java no país, quando você fala alguma coisa aqui você pode estar influenciando a opinião de muita gente que está começando agora ou que caiu no GUJ por um acidente no Google, então é importante que antes de sair falando abobrinhas por aí, as pessoas tenham ao menos o básico de fundamentação pros seus argumentos.

Quando alguém fala besteira aqui no GUJ ele não está só se queimando, está também lascando com outras pessoas.

M

Maurício, o que você falou é ótimo e está até implícito no sentido do que o fórum se propõe a fazer. Qualquer fórum, na verdade. Mas, além da página 6 (talvez antes até) desse tópico o que eu vejo é bate boca na grande maioria das vezes. Algumas argumentações técnicas ótimas, é verdade, mas o negócio ficou tão surreal que me deixou abismado aqui. Não que eu nunca tenha visto esse tipo de coisa, ainda mais aqui no GUJ, onde de tempos em tempos aparece uma figurinha nova pra incendiar o ambiente, mas é impressionante a disposição que alguns têm de continuar tentando argumentar com quem não está nem um pouco interessado nisso. Não estou sendo irônico, nem estou criticando quem está usando argumentos técnicos, pelo contrário, mas o assunto aqui já transcendeu o âmbito técnico há tempos. Quando chega em um ponto onde eu vejo alguém postando algo ainda sobre o assunto original do tópico, e eu acho isso estranho porque o negócio já descambou pra bagunça, acho que já chegou a hora de darem um basta nisso.

E

Márcio,

O que as pessoas não entendem é que os Moderadores agem desta forma porque prezam pela qualidade do forum. Parece que estou falando um absurdo ao se observar a quantidade de esculachadas que eles dão, mas se você pararem pra prensar, verá que eles não permitem em hipótese alguma que conceitos distorcidos ou achismos possam imperar aqui neste forum. Caso a atitude deles fosse outra, provavelmente veriamos aqui pelo fórum diversas threads tendo por resultado final teorias e conceitos não verdadeiros sobre diversos assuntos.

M

Emerson, você está correto. Eu concordo com esse pensamento. Não acho que os moderadores tenham que simplesmente ignorar as besteiras de alguns usuários, óbvio que tem que existir a contrapartida. Não acho que tenha que ser 8 ou 80, mas existe um limite tênue aí, bem sutil, do que a maioria do que pode ser filtrado do que está sendo dito é útil ou não.

S

E quem são eles, vc ou eu para julgar o que é certo e o que é errado? Se eu vier aqui falar que a folha é azul quero ser respeitado, até porque vivemos num país livre…

Não vi nenhuma atitude disrespeitosa por parte de nenhum moderador. Só vi algumas pessoas ficando bravas porque alguém ficou argumentado demais em torno de um assunto. Nesse caso acho melhor escolher duas opções: se tiver paciência, continue argumentando respeitosamente/educamente… caso contrário ignore-o…

Por exemplo:

O cara falou que Java é OO 100%… Tudo bem, não é porque tem primitivos que não são objetos e sabemos que existem outras linguagens onde até os “primitivos” são objetos… Mas eu me recordo de no passado já ter afirmado várias vezes que Java é totalmente orientada a objetos, visto que tudo herda de Object. O cara pode falar que os primitivos não são objetos, mas que para cada primitivo há um objeto correspondente e que vc pode trabalhar sem os primitivos, usando apenas objetos, e que agora com auto-boxing ficou mais fácil ainda fazer isso, blah, blah, blah…

O cara está errado? O cara está certo?

Então basta argumentar e se o cara quiser achar que Java é uma linguagem totalmente OO é uma opção dele… E o último que responder no tópico não é o que está certo…

Eu acho que Java é uma linguagem totalmente OO e o fato dos primitivos não serem objetos é uma excelente opção quando eu quero performance… Acho inclusive uma séria deficiência do Java ele não vir de fábrica com IntMap, IntList, etc. Do ponto de vista da performance é ridículo ter que ficar criando objetos Integer para colocar como chave do meu mapa. Isso sobrecarrega o GC…

Se o cara quer um objeto para o primitivo, ele usar o Integer ou faz o seu próprio Wrapper… Acho também que Java já poderia vir de fábrica com Integers mutáveis, para que eu não precise ficar usando int[0] como objeto inteiro mutável.

M

saoj:
O cara falou que Java é OO 100%… Tudo bem, não é porque tem primitivos que não são objetos e sabemos que existem outras linguagens onde até os “primitivos” são objetos… Mas eu me recordo de no passado já ter afirmado várias vezes que Java é totalmente orientada a objetos, visto que tudo herda de Object. O cara pode falar que os primitivos não são objetos, mas que para cada primitivo há um objeto correspondente e que vc pode trabalhar sem os primitivos, usando apenas objetos, e que agora com auto-boxing ficou mais fácil ainda fazer isso, blah, blah, blah…

O cara está errado? O cara está certo?

Então basta argumentar e se o cara quiser achar que Java é uma linguagem totalmente OO é uma opção dele… E o último que responder no tópico não é o que está certo…

E esse exemplo não tem nada haver com o caso, vamos evitar distorções, por favor.

Marcio Duran:
JavaScript é uma linguagem e não é uma Tecnologia que se propõem algo que se possa especificar tão amplamente como JAVA 2 não vai agregar nível tanto de software como de hardware em particular.
JAVA é Orientado a Objetos 100% , JavaScript é uma linguagem de interpretação cuja as suas caracteristicas usa-se tanto programação estruturada como semelhanças de OO, digo isso porque JavaScript você não tem algo que se possa dizer Interface real pela linguagem.Ou melhor explicando regras e herarquias de Classe e Objetos, compontentes APIs e em particular JAVA já tem isso de uso independente.
Plataforma é JAVA e não JavaScript, seu uso é especifico a comportamento de Browser e isso é ponto final.

Isso foi o caso e ele está errado com base nas respostas aqui apresentadas e na realidade que as pessoas que seguiram essa thread podem comprovar, simples assim. Ele pode não estar errado pra sempre ou desde sempre, mas no momento atual ele está errado e ponto final. A afirmação foi incorreta e não tem fundamentos o suficiente pra se sustentar, não é uma questão de você, o CV ou o Phillip serem donos da verdade, é que a verdade, nesse caso específico, se apresenta de forma clara, aqui nós não estamos discutindo uma possível arquitetura para um sistema ou a linguagem de programação perfeita, a argumentação não é nem de longe “abstrata”, a discussão é bem mais simples, é se JavaScript é orientado a objetos ou não e se JavaScript pode ser utilizado fora de browsers.

L

Temos de lembrar que todos os moderadores desse fórum são primeiro usuários e depois moderadores convidados. É mais comum achar um usuário pedindo para um tópico ser apagado ou bloqueado que moradores efetivamente fazendo-os. Tópicos como este que desandam em um flamewar não tem que ser fechados, devem ser ignorados, podemos todos nós irmos brigar por outros assuntos agora?

Por sinal, a função dos moderadores é bloquear/apagar tópicos que são spam, desrespeitam as regras de uso do fórum ou ferem a lei brasileira. Brigar e argumentar, por mais inflamada que seja a posição de cada parte, não se classifica nessas categorias - desde que não desande a difamação e calúnia. Sempre que um de nós sai da linha este é repreendido pelo coletivo. Por isso não deixem de mandar uma PM sempre que algum de nós tomar uma atitude que considere injusta - isso não inclui ser contra sua opinião.

M

emerleite:
Márcio,

O que as pessoas não entendem é que os Moderadores agem desta forma porque prezam pela qualidade do forum. Parece que estou falando um absurdo ao se observar a quantidade de esculachadas que eles dão, mas se você pararem pra prensar, verá que eles não permitem em hipótese alguma que conceitos distorcidos ou achismos possam imperar aqui neste forum. Caso a atitude deles fosse outra, provavelmente veriamos aqui pelo fórum diversas threads tendo por resultado final teorias e conceitos não verdadeiros sobre diversos assuntos.

Emerlei você quer saber, se eu sou uma pessoa de Opinião !!! , quer saber se estou fazendo coluio com alguém ou auto promoção,[color=red] quer saber se não vejo que os moderadores tem uma maneira mais inteligente de responder do que simplesmente entrar em colera.
[/color]

[color=blue]“Ainda acho que você poderia ter somente sua opinião , dando a sua colocação tecnica e não pessoal”[/color]

É Simples, SOU MAIS JAVA DO QUE QUALQUER TECNOLOGIA QUE SE MOSTRE NESSE FORUM É ISSO É PELA MINHA CONCEPÇÃO.

Abraçossss

C

saoj:

verá que eles não permitem em hipótese alguma que conceitos distorcidos ou achismos possam imperar aqui neste forum.

E quem são eles, vc ou eu para julgar o que é certo e o que é errado? Se eu vier aqui falar que a folha é azul quero ser respeitado, até porque vivemos num país livre…

Estamos todos vivendo em sociedades com um nivel razoavel de liberdade de expressao, mas um dos problemas disso eh que todo imbecil eh livre pra falar bosta, e faz absoluta e maldita questao de jogar isso na sua cara quando vc aponta as falhas completamente absurdas na logica do sujeito. Pelo jeito que andou essa thread ate agora, parece que tem um desse tipo se cadastrando no GUJ a cada segundo.

Nao, nao eh uma “excelente opcao”. A JVM nao se importa mais com isso faz muuuuuuuuuuito tempo (e se vc quer um pouco da historia, o HotSpot veio do Self… uma linguagem, ironicamente, baseada em prototipos e que nao tinha tipos primitivos). Se eu fosse vc, eu faria um teste de performance antes de afirmar algo desse tipo com essa conviccao toda (e aprenderia a tunar o garbage collector de uma JVM, de quebra).

Curioso, eu acho isso uma seria deficiencia mental de quem sugere uma aberracao dessas, e ao mesmo tenta defender a orientacao a objetos. Deixa eu soletrar: E N C A P S U L A M E N T O. En, ca, psu, la, men, to. Repita comigo.

S

Isso é uma atitude totalmente arrogante. Agindo assim vc só está conseguindo prejudicar a si mesmo. Parece o Hugo Chaves! :slight_smile:

Inclusive, é só fazer uma busca aqui no GUJ por algumas mensagens suas do passado (coisa de 4-5 anos) que veremos que vc já foi um cara bem mais humilde e contido.

O dia que vc trabalhar com “Algorithmic Trading” cada milisegundo será muito importante. A oportunidade de arbitragem entre uma opção e a sua correspondente ação por exemplo, surge em menos de um milisegundo. Então se eu não quero usar o GC porque eu acho que introduz latência no meu sistema o problema é estritamente meu, e não é porque vc falou com essa arrogância toda que eu vou achar que vc está certo. Um milisegundo pode ser a diferença que vai causar que eu perca aquela ordem para o meu concorrente ou para o próprio mercado.

Mas não te culpo por pensar assim, visto que até os caras que implementaram o Selector do Java leakam (vazam) iterator objects e um monte de Integers a cada iteração. Como eu faço muitas milhares de iterações por segundo, eu estou sim gerando um load desnecessário no meu GC. Ainda bem que temos o código fonte do Selector, então podemos fazer um patch ali para resolver isso. :wink:

Obrigado pelo elogio! Jakarta Commons Collections possuem coleções de primitivos. Num sistema onde a cada segundo estou adicionando e removendo milhares de entradas num Map<Integer, Object>, é ridículo ficar criando milhares de objetos Integers só para o GC ter que limpá-los depois. E nesse caso eu não quero encasulamento (eu sei o que é isso, CV). Nesse caso eu quero ou usar primitivos ou pelo menos reutilizar os objetos Integers (integer mutável ou int[]).

Antes de falar com toda essa arrogância, dá uma lida na documentação oficial sobre o GC: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

Se vc aceitar (ou permitir) que minha aplicação não pode PAUSAR e se vc ler a documentação do GC, vc vai entender sem precisar ser tão agressivo assim. Como ainda não dá para desligar o GC, então nós simplesmente não produzimos nenhum trabalho pra ele. :wink:

M

cv:

Estamos todos vivendo em sociedades com um nivel razoavel de liberdade de expressao, mas um dos problemas disso eh que todo imbecil eh livre pra falar bosta[color=red] [/color], e faz absoluta e maldita

Você apela na revolta e violência de suas palavras, como um verdadeiro desequilibrado querendo ser uma pessoa passando por instruída.

VOCÊ É UM FARSANTE !!!
VOCÊ É UMA MENTIRA …

Carlos Villela [size=24] [/size]é um dos coordenadores do GUJ, trabalha com Java há 6 anos, e atualmente explora a JVM também com Ruby, através do projeto JRuby. Há três anos trabalha na ThoughtWorks de Londres, a conceituada consultoria que tem como seu cientista-chefe ninguém mais que Martin Fowler. Atualmente desepenhando o papel de arquiteto em grandes projetos, Villela vem falar um pouco sobre as velhas e as novas arquiteturas, os grandes mitos e metodologias ágeis.

M

Alugo o ringue e cadeiras para quantos espectadores? Porque daqui só vai sair porrada.

Calma com as ofensas, se você acha que é melhor do que ele, faça ou mostre que é.

Até!

J

Cada dia que passa tenho a impressão que programadores seniors têm fortes tendências
de se acharem deuses da computação e sairem pisando nos “seres inferiores”.
Eu admiro mesmo ver um programador senior com 15 anos de experiência dizer: “Eu ainda estou aprendendo”.

C

O foda eh que aprender alguma coisa aqui no GUJ ultimamente tem sido dificil. Mas a gente ta tentando…

S

cv:
jonataswingeter:

Cada dia que passa tenho a impressão que programadores seniors têm fortes tendências
de se acharem deuses da computação e sairem pisando nos “seres inferiores”.

Eu admiro mesmo ver um programador senior com 15 anos de experiência dizer: “Eu ainda estou aprendendo”.

O foda eh que aprender alguma coisa aqui no GUJ ultimamente tem sido dificil. Mas a gente ta tentando…

Por que vc assumiu que ele estava se referindo a vc? :slight_smile:

Pode estar sendo difícil, mas pelo menos nesse tópico vc teve a humildade de aprender que o GC pausa a sua aplicação mesmo numa máquina com mais de um processador, e que evitar a criação de objetos xulos Integers quando vc pode simplesmente usar primitivos ou fazer um pool pode ser importante num ambiente de alta-performance.

E eu nem precisei falar que vc tinha uma deficiência mental… :thumbup:

D

O problema que quem se acha melhor, acaba se acomodando com suas idéias e ideais e no fim, mostra-se medíocre em seu conhecimento. Jamais verei verdadeiros mestres repudiando outros ou ofendendo. Quem sabe de verdade, também admite que erra e que tem muito a aprender.

D

O foda eh que aprender alguma coisa aqui no GUJ ultimamente tem sido dificil. Mas a gente ta tentando…

Se acha que já sabe tudo ou que não tem algo a contribuir mais, então tornou-se “perfeito”. Será que estamos agora lhe dando com “deuses”?

L

saoj:
cv:
jonataswingeter:

Cada dia que passa tenho a impressão que programadores seniors têm fortes tendências
de se acharem deuses da computação e sairem pisando nos “seres inferiores”.

Eu admiro mesmo ver um programador senior com 15 anos de experiência dizer: “Eu ainda estou aprendendo”.

O foda eh que aprender alguma coisa aqui no GUJ ultimamente tem sido dificil. Mas a gente ta tentando…

Por que vc assumiu que ele estava se referindo a vc? :slight_smile:

Pode estar sendo difícil, mas pelo menos nesse tópico vc teve a humildade de aprender que o GC pausa a sua aplicação mesmo numa máquina com mais de um processador, e que evitar a criação de objetos xulos Integers quando vc pode simplesmente usar primitivos ou fazer um pool pode ser importante num ambiente de alta-performance.

Você não descreveu um ambiente de alta-performance, mas sim um de RealTime programing. Alta performance está associada a throughtput alto e não baixa latência na resposta.

O que eu aprendi nesse tópico é que tem gente que gosta de de gabar em público de usar a ferramenta errada para resolver seu problema. Usar Java (e não RTJS) para qualquer coisa que exija tempo de resposta na casa de 1ms é burrice por definição, pois necessariamente vai falhar quase todo minutos em cumprir essa promessa - um exemplo é o GC do HotSpot que leva muito mais de um milisegundo só para fazer o stop-the-world, que é necessário em todo ciclo de minor collection*. Fora que se não estiver usando um RTOS qualquer coisa nesse sentido é pura M**d*, .

*O Hotspot usa a técnica de mapear uma página como read-only e causar um segfault em todas as threads do sistema. Em um sistema que não cria nenhuma thread são 3 ou 4 que precisam ser pausas e a latência disso é (3 ou 4) / número de cores + 1 ticks. Por exemplo, o Linux usa 250Hz por padrão, isso gera uma latência de 8millis em uma máquina com 4 cores.

S

Me desculpe, louds, ó Deus do computação! Onde eu trabalho só estamos fazendo M**d*. Deveríamos ter utilizado ERLANG ou ter contratado vc para fazer a coisa! Perdão ó mestre!

Leia de novo a documentação de GC oficial, que vc verá que ele só precisa PAUSAR as demais threads da aplicação SE e ONLY SE ele tiver alguma memória para liberar. Caso contrário isso é feito em paralelo. A gente é pobre mas pelo menos algumas máquinas com mais de 1 processador a gente conseguiu comprar.

De qualquer forma valeu pelo argumento. Tem coisas interessantes aí, apenas o jeito que vc se expressou conseguiu impressionar até o CV. Vamos ver se aparece mais um para competir com vc. :thumbup:

M

Assim, quando você usa Integers o autoboxing/autounboxing acontece com chamadas a Integer.valueOf( int ) que fazem pool dos integers que já foram criados. Deve ser melhor do que você mesmo fazer o seu pool, não?

Onde é que você está tendo essa criação de objetos xulos que são rapidamente coletados? Você anda criando integers chamando “new Integer(int)”?

J

Pessoal,

Se o Java faz autoboxing a todo momento, ou se a HotSpot pára a todo instante, não importa agora…

O que estou vendo aqui é uma discussão inútil, pois é duelo de forças.

Criem um tópico sadio, discutam os pontos, e com certeza vai agregar valor pra comunidade.

Vai uma sugestão:

HotSpot GC step-down ou Jikes GC Cyclic-Reference?

E sobre o meu comentário de humildade, foi pra todo mundo, inclusive pra mim…ou vocês acham que não dá uma tentação de “esbanjar” conhecimento?

[]'s,

S

Assim, quando você usa Integers o autoboxing/autounboxing acontece com chamadas a Integer.valueOf( int ) que fazem pool dos integers que já foram criados. Deve ser melhor do que você mesmo fazer o seu pool, não?

Onde é que você está tendo essa criação de objetos xulos que são rapidamente coletados? Você anda criando integers chamando “new Integer(int)”?

Imagina um loop, que é executado milhares de vezes por segundo. Isso é um SELECTOR do NIO. Agora imagina que em cada loop vc precisa pegar o FileDescriptor (inteiro) e associar a um SelectionKey (objeto). As collections de Java não aceitam primitivos, certo? Então vc tem que usar Map<Integer, Object>. Só que a cada interação vc coloca e remove milhares de entradas no seu map, e o FD (FileDescriptor) é um inteiro primitivo. Então vc estará criando milhares de objetos inteiros e sobrecarregando o GC. Não tem jeito a não ser que vc faça algum pool de objetos ou que use uma collection de primitivos. Outra opção seria criar um pool interno de inteiros, mais ou menos, como o pool de strings do Java. Mas são milhares de inteiros, mas precisamente 2^32. Outra opção seria criar um array de objetos (SelectionKeys), mas o nosso array seria todo esburacado porque o FD é algo assim [telefone removido]. Para iterar esse array seria um parto. Precisamos de um collection que suporte inteiro primitivo como chave ou temos que fazer um pool de objetos inteiros. Em termos de performance, a primeira opção é bem melhor do que a segunda, então primitivos podem não ser tão ruim assim. Pelo menos nesse caso extremo tiveram o seu uso!

Claro que esse sobrecarregamento é de alguns poucos milisegundos, ou seja, na maioria dos casos vc vai cagar pra ele. Infelizmente (ou felizmente) não no meu caso.

Isso sem falar na implementação do Selector (sun.nio.ch.SelectorImpl), que leak iterator a torto e a direito, mesmo dentro de um block synchronized da lista! :s Seria mais interessante reutilizar o mesmo iterator sempre.

Acho que já dá para voltar para o tópico. Só quiz falar que quando um cara falar que uma folha é azul, ou que Java é 100% OO, ou que ele precisa de primitivos, etc e tal, não façam como o CV e digam que ele tem deficiencia mental e não façam como o louds e digam que ele só faz MRD.

D

O nome dado para isso é Inteligência Emocional.

M

Mas é exatamente isso, já existe um pool de inteiros dentro da própria JVM, assim como o de Strings, é só você usar autoboxing/autounboxing ou criar os seus inteiros usando Integer.valueOf( int ).

S

Eu realmente não tinha me tocado que outboxing vai te dar um pool de wrappers automaticamente. Faz todo sentido mesmo. Boa observação Maurício, e obrigado por ter feito isso sem precisar chamar ninguém de debil mental.

Infelizmente parece que o pessoal do NIO esqueceu de atualizar o código depois de autoboxing, pois no openjdk ainda está assim:

int nextFD = pollWrapper.getDescriptor(i);
 
          SelectionKeyImpl ski = (SelectionKeyImpl) fdToKey.get(new Integer(nextFD));

Quando ao iterator não tem escapatória. Está leakando mesmo, pois por padrão os Maps criam um novo iterator a cada chamada para iterator().

M

Todas as coleções do java fazem isso sempre (ou pelo menos deveriam), não é um caso específico de Map não.

S

Quando é um duelo de forças onde as pessoas apenas discutem educadamente apresentado seus argumentos acho que todos lucram, os que estão assistindo e principalmente quem está discutindo. Acabei de aprender que autoboxing te dá de presente pool de wrappers. Não sabia disso…

Agora quando alguem coloca uma resposta com palavras do tipo deficiencia mental, imbecil, M**D*, aberração, etc. isso prejudica bastante o debate e a credibilidade do GUJ.

Minha opinião, se me permitem, ok? Obrigado…

S

Todas as coleções do java fazem isso sempre (ou pelo menos deveriam), não é um caso específico de Map não.

Fazem isso para garantir que seja thread-safe, mas no caso do selector ele está sincronizando a lista, ou seja, pode tranquilamente e sem medo reutilizar o iterator, principalmente dentro de um loop que está sendo executado milhares de vezes por segundo.

sun.nio.ch.SelectorImpl.java

synchronized (cks) {
            Iterator i = cks.iterator();
            
             //..
          }
L

Cara, sei desse tipo de coisa por dois motivos, por já ter feito muito tunning de GC e por hoje trabalhar com isso. Voltando a questão do GC. A HotSpot possui apenas coletores generacionais e em todos os casos a minor collections sempre pausa quando vai fazer Sweep-Compact ou Copy-Compact. Ela suporta coleta paralela da old gen com geração de lixo flutuante. Porém no caso de minor collections, a Sun decidiu por sempre fazer compactação, coisa que não existe implementação paralela sem uso de read-barriers, que é um recurso exclusivo das RTVMs pois torna o código compilado significativamente mais lento.

Vocês ai precisam de alguém que saiba pelo menos ler direito a documentação da Sun. Só isso já seria um bom começo.

Quanto a questão de que todo lookup com autoboxing em um HashMap cria um objeto inútil, bom, isso não necessariamente acontece pois ela é capaz de eliminar a alocação via inlining e escape analysis.Você consegue ver isso com um build de debug do OpenJDK.

S

Quando eu falo as coisas eu geralmente coloco o link e o conteúdo. Como eu disse antes, o GC sempre PAUSA as threads, mas SE E APENAS SE houver coisas para limpar. Se não houver nenhum objeto para limpar então essa pausa é praticamente zero porque a checagem é feita em paralello com as outras threads. Se vc achar que não é isso, por favor poste onde na documentação está escrito que o GC introduz latência mesmo quando não há nada para ele limpar.

Bom, uma coisa é certa, gerando um monte de inteiros e iterators a cada iteração do selector vc vai realmente gerar um belo trabalho para o GC e as coisas com certeza vão pausar bem mais do que poderiam caso vc reutilizasse esses objetos.

Basta ligar o debug do GC para constatar isso…

S

Apenas uma consideração de quem acabou de descobrir que autoboxing te dá de presente pool de Integers. Pensando melhor aqui, isso pode se tornar um presente de grego. :slight_smile:

Strings são bastante limitadas, ou seja, num programa vc não vai gerar strings dinamicamente e internalizá-las (cacheá-las) no pool de strings da VM.

Acho que esse pool é para apenas as strings que estão hardcodes no seu código, apesar de que vc pode usar intern() para cachear qualquer objeto string.

Minha dúvida é que se vc usar autoboxing dentro de um selector ou de qualquer outro loop que vai rodar milhares de vezes por segundo e durante milhares de segundos, gerando milhares de FD (FileDescriptors) diferentes, vc pode terminar com um pool imenso de Integers em memória. Não sei se isso é um big deal ou apenas uma simples questão de memória, mas como temos mais de 4 bilhões de inteiros, 4 bilhões de objetos integers em memória pode não ser uma boa idéia… De repente é melhor usar um pool de objetos Integers mutáveis mesmo…

D

Sérgio, não existe “pausa praticamente zero” quando se fala em GC. Mesmo quando não há nada para ser coletado, independente de você usar algoritmos “geracionais” ou incrementais, você vai ter pausas para avaliação do estado da heap, mesmo que seja para o GC descobrir que não existe nada a ser coletado.

Como você mesmo quer links, eis um que pode ser útil:

L

saoj:

Vocês ai precisam de alguém que saiba pelo menos ler direito a documentação da Sun. Só isso já seria um bom começo.

Obrigado, Louds, mas o pessoal aqui sabe ler sim. Quando eu falo as coisas eu geralmente coloco o link e o conteúdo. Como eu disse antes, o GC sempre PAUSA as threads, mas SE E APENAS SE houver coisas para limpar. Se não houver nenhum objeto para limpar então essa pausa é praticamente zero. Se vc achar que não é isso, por favor poste aonde na documentação está escrito que o GC introduz latência mesmo quando não há nada para ele limpar.

Primeiro, na implementação do HotSpot uma minor collection sempre causa pausas e estas envolvem todas as threads. Eu mostrei a conta do tempo que leva para pausar todas threads, independente do trabalho feito pelo GC. Se o GC simplesmente pausar e logo em seguida resumir todas threads, isso leva 8millis num box com 4 cores linux - e não fica melhor se tiver mais 60. Esse praticamente zero seu são 8millis, que é 8x mais que a necessidade de 1milli de precisão que você tanto enfatizou.

Segundo, minor collections são implementadas usando um CopyCollector, cujo tempo de execução é um fator do número de objetos visíveis na partição ativa. Um CC não processa os objetos "mortos".

Terceiro, você falou antes "…ele só precisa PAUSAR as demais threads da aplicação SE e ONLY SE ele tiver alguma memória para liberar. Caso contrário isso é feito em paralelo". Tem alguns problemas aqui. Paralelo significa usar vários processadores ao mesmo tempo. Sim, isso é perfeitamente possível com os HotSpot; porém não significa que é possível realizar uma minor collection concorrente com a execução de código gerenciado. Paralelo e Concorrente significam duas coisas quando se fala de garbage collection, taí sua confusão, avisei que precisava aprender a ler a documentação. A opção -UseParNewGC não torna o GC concorrente para minor collections.

Quarto, é obvio que um GC não irá realizar uma coleta de lixo se não existe necessidade de liberar memória. Porém escrever um programa em Java que não aloca memória é quase impossível e sem razão. Ou seja, mesmo otimizando seu código ao máximo só está adiando o inevitavel.

Links? Bom, a documentação em lugar algum fala que que é possível fazer coleta concorrente do Eden Space*. Uma busca no google por "concurrent eden space" só retorna resultados relativos ao mature space. Hmm, tem um artigo muito legal do David Bacon sobre real time garbage collection, sobre o metronome, no qual eles conseguem uma latência de 6millisegundos em um ambiente com 1 processador e 50% de CPU em uso.

*Eden Space é o nome da geração mais nova do GC do Hot Spot, onde a maioria dos objetos novos são alocados.

Sérgio, porém para substanciar minhas palavras vou exemplificá-las com código. O código pode ser meu, mas não irá soar tão prepotente quanto seu autor. :wink:

Vamos lá, quero provar que uma thread produzindo lixo atrapalha a vida de outras mesmo na presença de vários cores. Para isso vou deixar uma calculando a diferença entre duas chamadas de System.nanoTime(), que não é mais que alguns poucos micro-segundos; e vou deixar uma segunda thread alocando objetos adoidado. Claro que isso não acontece no mundo real, mas serve para acelerar o experimento e mostrar que o efeito existe mesmo com uma mortalidade de quase 100% - tornando a minor collection super rápida.

O código é o seguinte:

public class Driver {
	public static void main(String[] args) throws Exception {
		new Thread(new Runnable() {
			public void run () {
				while (true) { new Object(); }
			}
		}).start();

		while(true) {
			//new Object();
			long a = System.nanoTime();
			long b = (System.nanoTime() - a) / 1000l;
			if (b &gt; 900) //0.9 mili
				System.out.println (b);
		}
	}
}

Ele vai imprimir no console o delta em micro segundos sempre que levar mais de 0.9milli entre duas chamadas System.nanoTime().

Executando o código em uma máquina com 4 cores, o que significa nenhum thread switch, vemos valores próximos de 10milli, apesar da maioria ficar na faixa do 1-4 milli. O que é compreensível já que não tem mais nada rodando e somente 2 threads precisam de sinalização. Bem abaixo daqueles 8millis que eu alardei, porém aqui temos o melhor cenário possível. Se rodarmos com -verbose:gc dá para ver que cada minor collection leva em média 0.5millis e o resto todo do tempo é o overhead de pausar/resumir todas threads.

Sérgio, essa é minha última resposta sobre o assunto, pois realmente parece que vocês precisam contratar um especialista no assunto e eu não quero dar consultoria de graça. :stuck_out_tongue:

S

Beleza, Rodrigo. Vc escreveu demais. Se eu for ler tudo isso e tentar responder vai dar sono em todo mundo aqui. Se vc tivesse respondido nesse nível antes, teria sido mais proveitoso. O seu problema não é falta de conhecimento mais sim falta de humildade para debater sem dizer que o outro é um ser inferior ou que só faz M**D*.

Tudo que eu tenho a dizer é:

  1. Vc usou -XX:+UseParallelGC e sua máquina tem mais do que um processador?

  2. O que o DQO falou está certo, se tiver GC haverá pausa, não importa o tipo de GC.

  3. É plenamente possível fazer um programa em Java que não libere nenhum objeto para o GC, ou seja, que faça pool de tudo. O exemplo mais simples está abaixo:

import java.util.*;

public class Test {
    
    public static void main(String[] args) throws Exception {
        
        long x = 0;
        
        List&lt;String&gt; list = new LinkedList&lt;String&gt;();
        
        while(true) {
            
            Thread.sleep(10);
            
            if (list.size() &lt; 100000) { // avoid OutOfMemory...
                
                list.add(new String(String.valueOf(x++)));
            }
        }
    }
}
  1. Se não há nada para ser coletado o GC simplesmente não dá as caras! Isso mesmo… Sem GC e sem pausa!

Rode o programa acima assim:

java -XX:+UseParallelGC -verbose:gc Test

Já está rodando aqui a 20 minutos sem printar nada no console…

Experimente agora meter um if (x % 500 == 0) System.gc(); no meio do loop e vc terá um exemplo de um GC que não limpa nada.

Conclusões:

  1. Se não quer pagar o preço do GC, evite ao máximo criar objetos a toa. Use pool para tudo ou primitivos quando possível. Caso contrário vc vai perder alguns milesegundo mesmo.

  2. Por favor, sejam mais tolerantes e mais humildes com as pessoas (eu incluso) que de uma maneira ou de outra falam coisas que vcs não concordam. Se o cara está falando besteira, argumentem educadamente e não xingem o cara de Débil Mental, Imbecil, etc. Eu falei uma coisa errada (que não existia um pool de Integers) e não vi o Maurício me xingando de nada.

L

saoj:
Beleza, Rodrigo. Vc escreveu demais. Se eu for ler tudo isso e tentar responder vai dar sono em todo mundo aqui. Se vc tivesse respondido nesse nível antes, teria sido mais proveitoso. O seu problema não é falta de conhecimento mais sim falta de humildade para debater sem dizer que o outro é um ser inferior ou que só faz M**D*.

Tudo que eu tenho a dizer é:

  1. Vc usou -XX:+UseParallelGC e sua máquina tem mais do que um processador?

Não usei -XX:+UseParallelGC pois no meu exemplo o tempo aumenta em muito devido a custo de sincronização, com picos de 45 millis. Quanto a máquina que eu rodei, você não leu direito o que eu escreví, não é? A máquina tem 4 cores, um xeon com 4 cores.

Logo, você concorda comigo que ter um serviço que depende de resolução de 1 milli segundo rodando em uma linguagem com GC é muito questionável uma vez que não é possível entregar esse tempo de resposta.

Vamos lá, usar pools para tudo torna o programa mais difícil de escrever para coisas elementares e um inferno para coisas um pouco além do simples. Não pode usar java.lang.String nem as classes de collection, já que essas alocam memória do heap. Não dá para usar absolutamente quase nada que vem na J2SE. Ou seja, é quase como não programar em Java.

Porém existe um problema com esse tipo de técnica, primeiro que ela não é muito escalável, pois ou gera muita contenção ao manipular o pool ou desperdiça memória demais por usar per-thread pools. Além disso, tem o problema de que a taxa de mortalidade dos objetos é pequena, o que gera muita cópia durante as minor collections; infla muito o remembered set devido a muitas referencias entre mature e eden space. Isso significa que o programa em geral fica mais lento, especialmente as minor collections. Pooling tem um throughput mensuravelmente inferior a alocação direta.

Enfim, só o esforço de escrever uma aplicação inteira usando pools já não justifica a técnica. Tenta reescrever o demo do Mentawai para fazer isso. Lembrando que isso deve ser seguido por todas bibliotecas usadas - framework mvc, driver jdbc, collections, etc.

Não tem como não pagar o preço do GC. Evitando alocar objetos você só mitiga o problema, troca GCs frequentes por GC mais lentos.

Sérgio, você é pessoa que mais abusa de Argumentum ad hominem, como pode ser visto em todas suas respostas dirigidas a mim. Foram suas idéias as atacadas e isso é uma coisa muito diferente, questioná-las e criticá-las em momento algum diz respeito a você, apenas a elas.

D

Sérgio, o código acima não vai coletar nada porque não há nenhum objeto elegível para ser coletado. Todos os objetos que você está criando continuam sendo referenciados por “alguém” (no seu caso, a lista onde você está armazenando seus objetos), logo o GC sequer vai trabalhar.

Logo, isso é bem diferente do código que o Rodrigo apresentou porque os objetos que ele cria dentro do loop deixam de ser referenciados ao final de cada iteração, forçando o GC a trabalhar com uma certa freqüência.

O Maurício ainda tem esperanças em ir para o céu quando ele morrer, por isso ele não costuma dar patadas :smiley:

S

É plenamente possível. Vc pode mitigar e evitar o GC. E tb é plenamente possível fazer um programa que não cria objetos para serem coletados e usa pool e coleção de primitivos pra tudo. Dá um trabalho grande mesmo, mas é plenamente possível. Basta vc ter suas estruturas de dados (incluindo aí o seu pool de objetos que nada mais é que um linked list) e ter em mente que é proibido usar o GC. Simples assim e isso não tem nada haver com uma aplicação web. (O Mentawai por sinal cria uma instancia de action para cada requisição e um bando de outros objetos por requisição)

Tb vale notar que fica mais simples e possível ainda quando se está num ambiente single-threaded. Como eu sei que vc conhece NIO eu sei que vc vai entender isso.

E o GC não vai rodar a cada minuto se vc estiver usando o ParallelGC e um heap suficientemente grande. Pra vc ter uma idéia, com aqueles leaks do Selector, ele rodava aqui de 20 em 20 minutos, isso com uma carga absurda em cima. Dá para colocar ordens em algumas bolsas em menos de 1 ms. O bottleneck está do lado da bolsa.

Vc já está dando consultoria de graça e esse assunto já deu o que tinha que dar. Um dia a gente pode se encontrar pessoalmente e trocar experiencia sobre isso.

Fui! :thumbup:

C

Ok, entao faca como o louds e o dqo e embase seus argumentos, ao inves de dizer que “basta vc ter suas estruturas de dados (incluindo aí o seu pool de objetos que nada mais é que um linked list) e ter em mente que é proibido usar o GC” - que tal um exemplo menos trivial? Eis aqui um probleminha bem simples que vc pode resolver usando a sua maravilhosa tecnica:

http://codekata.pragprog.com/2007/01/kata_four_data_.html

D

Errrm, uma coisa que eu não consegui entender é a que ponto você quer chegar, Sérgio? Porque você quer tanto evitar GC assim?

O

Olá pessoal… o André Santi me chamou a atenção para este thread. Por sinal, é ótimo ver debates deste nível técnico por aqui; mesmo em sites de escopo mais global, 99% da turma só fala bobagem ou superficialidades sobre assuntos como GC.

Por acaso há poucos dias li um paper bem interessante, que esclarecer alguns assuntos discutidos aqui:

Effective Prefetch for Mark-Sweep Garbage Collection

O interessante desse paper não é nem tanto a técnica apresentada para otimizações de prefetching, e sim alguns detalhes que os autores discutem de GC em geral, como a coleta “lazy” de regiões livres do heap. É mais um fator que indica que a maior parte do custo de GC está na fase inicial de localização dos objetos vivos (mark). Concordo com quem disse que o custo de GC é relativamente alto, mesmo quando não há muito o que limpar. (Claro que nesse cenário, salvo bug ou System.gc() explícito, o GC nem deveria acordar para começo de conversa.)

Os GCs paralelos/concorrentes são criaturas complexas. Têm limitações. O HotSpot não faz tudo o que poderia (embora faça muita coisa!) para eliminar pausas de GC; nem deve, pois não é uma JVM RT. Como tb já disseram aqui, RealTime tem seus custos. Também li os artigos sobre o Metronome da IBM, que é muito interessante. Infelizmente ainda não achei papers ou documentos técnicos decentes sobre o RTSJ da Sun. Creio que a JVM RT da Sun deve ser mais dependente das facilidades RT do SO, por isso que essa JVM só é disponível para o Solaris, o qual possui “out of the box” uma capacidade como SO RT que dá uma surra no Windows, Linux e outros SOs comuns (pelo menos nas suas versões convencionais, bem suportadas pelos fornecedores do SO e das principais aplicações…). [DISCLAIMER: Não tenho experiência real com RT, mas acredito no que li na nova edição do Solaris Internals :wink: ]

Uma dica para quem quer acompanhar de perto essas tecnologias: assinem a lista da JSR-166, onde o pessoal discute a próxima versão da java.util.concurrent. Embora o assunto principal seja concorrência, j.u.c., JMM e afins, volta e meia rola algum comentário sobre otimizações de JVM em geral. E são comentários feitos por gente que mexe no código do HotSpot, que sabe o que está falando. Ainda há poucos dias andei metendo meu bedelho (humildemente - o nível da lista é uma ordem de magnitude acima do meu) sobre a questão dos wrappers de tipos primitivos em collections. O Doug Lea é dos meus: sempre reclama que a plataforma Java dá um suporte de segunda classe a “tipos escalares”; mesmo com otimizações como o cache de wrappers do Java 5+ (que por sinal é limitado a uma estreita faixa de valores!), o custo dos wrappers, graças à collections “apagadas” onde após a compilação tudo acaba virando Object, é pavoroso. O Doug cita cenários de aplicações forkJoin que ficaram 16 vezes mais lentas (!), só devido ao overhead de wrappers como Integer, em comparação com uma versão usando classes especializadas nos tipos primitivos. Basicamente, a alocação desses wrappers estúpidos - mesmo com alocação e GC “quase grátis” - esculhamba com a eficiência dos caches e tb inúmeras otimizações do JIT, sendo que o efeito é ainda pior em arquiteturas multicore & SMP. E a otimização de Escape analysis, que espero estar mais avançada (com stack allocation) no Java 7, não resolve muita coisa… só serve para problemas triviais, como objetos Iterator usados em loops. Para problemas mais complexos, por exemplo um algoritmo que processa um int[] que em determinado momento tem que ser todo enfiado num Object[] de alguma collection, a tecnologia de escape analysis que existe hoje (mesmo em teoria) não dá pro gasto.

L

Lazy sweeping não é difícil de se implementar, já que opera completamente com memória fora do alcance do mutator step. O problema é implementar compactação ou cópia de forma concorrente ou lazy, que é o motivo pelo qual essa etapa ser stop-the-world no HotSpot.

S

O legal por aqui é que sempre quando sai prrd*, geralmente sai tb algo de bom do meio. O ideal é pular a parte da prrd* e ir direto ao debate quente mas educado.

Faça um programa que não libere nenhum objeto para o GC, rode ele com verbose:gc e veja se o GC vai acordar. Aqui no meu linux box ficou rodando por uma hora sem printar nada. Depois fui dormir… :slight_smile:

Se vc baixar o openjdk e dar uma olhada no código do SelectorImpl e do EPollSelectorImpl vai ver que o primeiro leak iterator a cada interação e o segundo está explicitamente chamando new Integer(nextFD) também dentro do loop!!! :cry:

Uma observação que fiz aqui há alguns posts atrás é que como o loop do selector vai rodar algumas milhares de vezes, pode não demorar muito para termos bilhões de inteiros no cache, no caso de vc mudar para autoboxing e usar o pool de wrappers. Interessante essa sua observação de que esse pool é limitado. Um pool de 4 bilhões de inteiros provavelmente não seria legal…

E a questão de primitivos eu concordo com vc e com o Doug. Já que Java tem primitivos então ela poderia vir de fábrica com collections para primitivos. Aqui nós implementamos nossas próprias collections de primitivos. Parece que Jakarta Commons Collections tb tem algumas. Outra opção seria controlar vc mesmo o pool de Integers, mas para isso vc precisa de um integer mutátvel. Um int[] com tamanho 1 é basicamente isso.

Como falei antes tb, num ambiente single-threaded (NIO), essas estruturas de dados podem ser otimizadas ao extremo e sem qualquer sincronização. Um pool de objeto acaba virando uma simples LinkedList. :wink:

S

Vc é o Osvaldo Pinali ? Aquele que escreveu um artigo para a Java Magazine sobre as novas api concorrentes de Java ???

Cara, aquele artigo foi o mais impressionante que eu já li na minha vida, dada a qualidade técnica e a simplicidade com que vc descreveu e exemplificou um tema extremamente cabeludo.

Parabéns!!! Tenho aquela revista guardada até hoje…

Vc poderia aparecer mais vezes por aqui… :slight_smile:

O

saoj:

Se vc baixar o openjdk e dar uma olhada no código do SelectorImpl e do EPollSelectorImpl vai ver que o primeiro leak iterator a cada interação e o segundo está explicitamente chamando new Integer(nextFD) também dentro do loop!!! :cry:

Uma observação que fiz aqui há alguns posts atrás é que como o loop do selector vai rodar algumas milhares de vezes, pode não demorar muito para termos bilhões de inteiros no cache, no caso de vc mudar para autoboxing e usar o pool de wrappers. Interessante essa sua observação de que esse pool é limitado. Um pool de 4 bilhões de inteiros provavelmente não seria legal…

E a questão de primitivos eu concordo com vc e com o Doug. Já que Java tem primitivos então ela poderia vir de fábrica com collections para primitivos. Aqui nós implementamos nossas próprias collections de primitivos. Parece que Jakarta Commons Collections tb tem algumas. Outra opção seria controlar vc mesmo o pool de Integers, mas para isso vc precisa de um integer mutátvel. Um int[] com tamanho 1 é basicamente isso.

Como falei antes tb, num ambiente single-threaded (NIO), essas estruturas de dados podem ser otimizadas ao extremo e sem qualquer sincronização. Um pool de objeto acaba virando uma simples LinkedList. ;-)

Esses códigos como new Integer(…) existem mesmo no JDK, em muitos casos são simplesmente códigos legados (pré-JDK5) que ninguém da Sun ainda percebeu que podia revisar, no caso para tirar proveito do Integer.valueOf(). Talvez isso até ocorra na implementação do método Integer.valueOf(String s, int radix), o qual faz um new, sem delegar para o método que faz o cache. Você pode reportar isso como bug/sugestão, ou tentar corrigir vc mesmo no OpenJDK… Mas nem sempre é o caso. No exemplo de file descriptors, os IDs de arquivos podem ser números inteiros arbitrariamente altos (ou pelo menos bem altos), portanto não haverá muita vantagem em usar o Integer.valueOf() que só faz cache dos valores -127…+128. É um pool BEM limitado, é útil primariamente para índices de arrays pequenos, “magic numbers” como 0, 1 etc., e outros cenários onde é comum trabalhar com valores pequenos. Talvez quem escreveu aquele código de selectors ache que não vale a pena o overhead adicional (ainda que pequeno) de chamar o valueOf(). Por outro lado, face ao custo de abrir um arquivo/socket/etc, esse custo é desprezível, acho que valeria a pena sim evitar a alocação do wrapper, mesmo que numa minoria das vezes.

Note que o pool do Integer (e outros wrappers) não tem sincronização nenbhuma, pois o pool é fixo, sendo preenchido no momento de classloading da classe do wrapper.

Quanto a wrappers mutáveis, eu não gosto muito da idéia, pois são menos seguros para usos como chaves de Map’s, atributos de PK de entidades persistentes, e outros cenários comuns que “pedem” por objetos imutáveis.

O

saoj:

Vc é o Osvaldo Pinali ? Aquele que escreveu um artigo para a Java Magazine sobre as novas api concorrentes de Java ???

Cara, aquele artigo foi o mais impressionante que eu já li na minha vida, dada a qualidade técnica e a simplicidade com que vc descreveu e exemplificou um tema extremamente cabeludo.

Parabéns!!! Tenho aquela revista guardada até hoje…

Vc poderia aparecer mais vezes por aqui… :-)

Eu mesmo… obrigado pelos elogios :wink: tentarei aparecer mais, o problema realmente é que eu já escrevo tanto, que sobra muito pouco tempo (ou inspiração) par ficar contribuindo em foruns. Antigamente eu era bem ativo no JavaLobby e algumas listas, mas isso foi antes da JM e NBMag. Hoje até meu blog na java.net está às moscas, se consigo escrever um blog a cada dois meses estou satisfeito.

Por outro lado, quando tropeço numa discussão sobre um assunto como este, dificilmente deixo de cavar tempo para um reply…

O

louds:

Lazy sweeping não é difícil de se implementar, já que opera completamente com memória fora do alcance do mutator step. O problema é implementar compactação ou cópia de forma concorrente ou lazy, que é o motivo pelo qual essa etapa ser stop-the-world no HotSpot.

Isso é verdade. E existem outras maneiras de reduzir as pausas individuais do mark, mas sempre com algum custo, seja no tempo total de GC, seja no custo dos mutators. O algoritmo “train” é um exemplo, o próprio Metronome é outro. Sem falar na RTSJ, que permite reduzir drasticamente o tamanho do heap sujeito a GC convencional, porém com um custo tb de esforço da aplicação.

M

IMHO, tecnologias baseadas em Java interessantes para aprender este ano:

  • JRuby
  • GRails ( a versão 1.0 foi lançada esta semana)
_

Marcio Duran:
Daniel Quirino Oliveira:

É desenvolvedor Java há 8 anos, trabalhando atualmente como analista de sistemas para a EDS do Brasil,já tendo participado de diversos projetos Java EE para o setor de transportes, financeiro, e-commerce e telecomunicações. Além disso é coordenador do GUJ ( www.guj.com.br ) e costuma compartilhar seus conhecimentos em seu blog ( http://nullability.org).

Bom, é isso.

[update]:

Duas coisas para se pensar:

  • C++ não possui interfaces. Então seria C++ uma linguagem não-OO?
  • Java é 100% OO. Seria possível fazer isso então:

int a = 2; int b = a.add(3); assertEquals(b, 5); ??

Bom o Daniel voltou ao assunto, e deu um exemplo de C++ em sua tese de JavaScript, tudo bem…
valeu a tentativa…

Ai vai a minha então sobre C++ e Java.

Algumas Linguagem (como C++)permitem que uma classe estenda mais do que uma classe.Essa capacidade é conhecida como “herança múltipla”.A razão pela qual os criadores de java decidiram não permitir a herança múltipla é que pode acabar bagunçando o código.

Já ouviu falar no cenário conhecido como o “Diamante da Morte”

Em obserção peço que sinceramente,leia o Capítulo 2:Orientação a objetos.
kATHY SIERRA
BERT BATES

Márcio,

Você escreve “encima”, “estenda”, um monte de idéias confusas e ainda duvida de tudo que está escrito, provado, testado etc … Você tem noção do que é networking? Tem noção que você tá se queimando na comunidade Java toda? Não sou de Java, mas todos os desenvolvedores/arquitetos/analistas que conheço, frequentam esse fórum aqui.

Caso a foto aí seja sua mesmo já te adianto: O pessoal ri muito do que você escreve e nunca vai te contratar pra um projeto.

M

JEE 6.0
JSF 2.0
JPA 2.0
EJB 3.1
C#
Ruby
Python
É diversão garantida para um bom tempo! :wink:

V

Ressuscitou o tópico.
As 5 tecnologias baseadas em Java [size=25]para aprender[/size] em[size=25]2008[/size]

Já estamos em 2009.

Criado 30 de janeiro de 2008
Ultima resposta 15 de jan. de 2009
Respostas 188
Participantes 50